(D3D11) move format support checks to d3d11_init_texture();

This commit is contained in:
aliaspider 2018-02-01 11:21:51 +01:00
parent f34dbdff8b
commit e6c455d2c6
4 changed files with 27 additions and 30 deletions

View File

@ -58,6 +58,7 @@ HRESULT WINAPI D3D11CreateDeviceAndSwapChain(
void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
{
bool is_render_target = texture->desc.BindFlags & D3D11_BIND_RENDER_TARGET;
UINT format_support = D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE;
d3d11_release_texture(texture);
@ -65,7 +66,7 @@ void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
texture->desc.ArraySize = 1;
texture->desc.SampleDesc.Count = 1;
texture->desc.SampleDesc.Quality = 0;
texture->desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
texture->desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
texture->desc.CPUAccessFlags =
texture->desc.Usage == D3D11_USAGE_DYNAMIC ? D3D11_CPU_ACCESS_WRITE : 0;
@ -82,6 +83,11 @@ void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
}
}
if (texture->desc.BindFlags & D3D11_BIND_RENDER_TARGET)
format_support |= D3D11_FORMAT_SUPPORT_RENDER_TARGET;
texture->desc.Format = d3d11_get_closest_match(device, texture->desc.Format, format_support);
D3D11CreateTexture2D(device, &texture->desc, NULL, &texture->handle);
{
@ -197,9 +203,12 @@ bool d3d11_init_shader(
{
D3D11CreateVertexShader(
device, D3DGetBufferPointer(vs_code), D3DGetBufferSize(vs_code), NULL, &out->vs);
D3D11CreateInputLayout(
device, input_element_descs, num_elements, D3DGetBufferPointer(vs_code),
D3DGetBufferSize(vs_code), &out->layout);
if (input_element_descs)
D3D11CreateInputLayout(
device, input_element_descs, num_elements, D3DGetBufferPointer(vs_code),
D3DGetBufferSize(vs_code), &out->layout);
Release(vs_code);
}
@ -207,6 +216,7 @@ bool d3d11_init_shader(
{
D3D11CreatePixelShader(
device, D3DGetBufferPointer(ps_code), D3DGetBufferSize(ps_code), NULL, &out->ps);
Release(ps_code);
}
@ -214,6 +224,7 @@ bool d3d11_init_shader(
{
D3D11CreateGeometryShader(
device, D3DGetBufferPointer(gs_code), D3DGetBufferSize(gs_code), NULL, &out->gs);
Release(gs_code);
}

View File

@ -2587,14 +2587,6 @@ void d3d11_update_texture(
DXGI_FORMAT d3d11_get_closest_match(
D3D11Device device, DXGI_FORMAT desired_format, UINT desired_format_support);
static INLINE DXGI_FORMAT
d3d11_get_closest_match_texture2D(D3D11Device device, DXGI_FORMAT desired_format)
{
return d3d11_get_closest_match(
device, desired_format,
D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE);
}
bool d3d11_init_shader(
D3D11Device device,
const char* src,

View File

@ -280,16 +280,16 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
for (int i = 0; i < d3d11->shader_preset->luts; i++)
{
struct texture_image image = { 0 };
image.supports_rgba = true;
if (!image_texture_load(&image, d3d11->shader_preset->lut[i].path))
goto error;
d3d11->luts[i].desc.Width = image.width;
d3d11->luts[i].desc.Height = image.height;
d3d11->luts[i].desc.Format =
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_B8G8R8A8_UNORM);
d3d11->luts[i].desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
d3d11_init_texture(d3d11->device, &d3d11->luts[i]);
d3d11_update_texture(
d3d11->ctx, image.width, image.height, 0, DXGI_FORMAT_B8G8R8A8_UNORM, image.pixels,
d3d11->ctx, image.width, image.height, 0, DXGI_FORMAT_R8G8B8A8_UNORM, image.pixels,
&d3d11->luts[i]);
image_texture_free(&image);
@ -446,9 +446,8 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
d3d11->vsync = video->vsync;
d3d11->format = video->rgb32 ? DXGI_FORMAT_B8G8R8X8_UNORM : DXGI_FORMAT_B5G6R5_UNORM;
d3d11->frame.texture.desc.Format =
d3d11_get_closest_match_texture2D(d3d11->device, d3d11->format);
d3d11->frame.texture.desc.Usage = D3D11_USAGE_DEFAULT;
d3d11->frame.texture.desc.Format = d3d11->format;
d3d11->frame.texture.desc.Usage = D3D11_USAGE_DEFAULT;
d3d11->menu.texture.desc.Usage = D3D11_USAGE_DEFAULT;
@ -751,13 +750,10 @@ static bool d3d11_init_frame_textures(d3d11_video_t* d3d11, unsigned width, unsi
d3d11->pass[i].rt.desc.Width = width;
d3d11->pass[i].rt.desc.Height = height;
d3d11->pass[i].rt.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
d3d11->pass[i].rt.desc.Format = d3d11_get_closest_match(
d3d11->device,
pass->fbo.fp_fbo ? DXGI_FORMAT_R32G32B32A32_FLOAT
: pass->fbo.srgb_fbo ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
: DXGI_FORMAT_R8G8B8A8_UNORM,
D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
D3D11_FORMAT_SUPPORT_RENDER_TARGET);
d3d11->pass[i].rt.desc.Format = pass->fbo.fp_fbo ? DXGI_FORMAT_R32G32B32A32_FLOAT
: pass->fbo.srgb_fbo
? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
: DXGI_FORMAT_R8G8B8A8_UNORM;
if ((i != (d3d11->shader_preset->passes - 1)) || (width != d3d11->vp.width) ||
(height != d3d11->vp.height))
@ -1045,7 +1041,7 @@ static void d3d11_set_menu_texture_frame(
if (d3d11->menu.texture.desc.Width != width || d3d11->menu.texture.desc.Height != height)
{
d3d11->menu.texture.desc.Format = d3d11_get_closest_match_texture2D(d3d11->device, format);
d3d11->menu.texture.desc.Format = format;
d3d11->menu.texture.desc.Width = width;
d3d11->menu.texture.desc.Height = height;
d3d11_init_texture(d3d11->device, &d3d11->menu.texture);
@ -1129,8 +1125,7 @@ static uintptr_t d3d11_gfx_load_texture(
texture->desc.Width = image->width;
texture->desc.Height = image->height;
texture->desc.Format =
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_B8G8R8A8_UNORM);
texture->desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d11_init_texture(d3d11->device, texture);

View File

@ -54,8 +54,7 @@ d3d11_font_init_font(void* data, const char* font_path, float font_size, bool is
font->texture.sampler = d3d11->sampler_linear;
font->texture.desc.Width = font->atlas->width;
font->texture.desc.Height = font->atlas->height;
font->texture.desc.Format =
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_A8_UNORM);
font->texture.desc.Format = DXGI_FORMAT_A8_UNORM;
d3d11_init_texture(d3d11->device, &font->texture);
d3d11_update_texture(
d3d11->ctx, font->atlas->width, font->atlas->height, font->atlas->width,