mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 05:43:34 +00:00
(D3D11) move format support checks to d3d11_init_texture();
This commit is contained in:
parent
f34dbdff8b
commit
e6c455d2c6
@ -58,6 +58,7 @@ HRESULT WINAPI D3D11CreateDeviceAndSwapChain(
|
|||||||
void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
|
void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
|
||||||
{
|
{
|
||||||
bool is_render_target = texture->desc.BindFlags & D3D11_BIND_RENDER_TARGET;
|
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);
|
d3d11_release_texture(texture);
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
|
|||||||
texture->desc.ArraySize = 1;
|
texture->desc.ArraySize = 1;
|
||||||
texture->desc.SampleDesc.Count = 1;
|
texture->desc.SampleDesc.Count = 1;
|
||||||
texture->desc.SampleDesc.Quality = 0;
|
texture->desc.SampleDesc.Quality = 0;
|
||||||
texture->desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
|
texture->desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
|
||||||
texture->desc.CPUAccessFlags =
|
texture->desc.CPUAccessFlags =
|
||||||
texture->desc.Usage == D3D11_USAGE_DYNAMIC ? D3D11_CPU_ACCESS_WRITE : 0;
|
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);
|
D3D11CreateTexture2D(device, &texture->desc, NULL, &texture->handle);
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -197,9 +203,12 @@ bool d3d11_init_shader(
|
|||||||
{
|
{
|
||||||
D3D11CreateVertexShader(
|
D3D11CreateVertexShader(
|
||||||
device, D3DGetBufferPointer(vs_code), D3DGetBufferSize(vs_code), NULL, &out->vs);
|
device, D3DGetBufferPointer(vs_code), D3DGetBufferSize(vs_code), NULL, &out->vs);
|
||||||
D3D11CreateInputLayout(
|
|
||||||
device, input_element_descs, num_elements, D3DGetBufferPointer(vs_code),
|
if (input_element_descs)
|
||||||
D3DGetBufferSize(vs_code), &out->layout);
|
D3D11CreateInputLayout(
|
||||||
|
device, input_element_descs, num_elements, D3DGetBufferPointer(vs_code),
|
||||||
|
D3DGetBufferSize(vs_code), &out->layout);
|
||||||
|
|
||||||
Release(vs_code);
|
Release(vs_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,6 +216,7 @@ bool d3d11_init_shader(
|
|||||||
{
|
{
|
||||||
D3D11CreatePixelShader(
|
D3D11CreatePixelShader(
|
||||||
device, D3DGetBufferPointer(ps_code), D3DGetBufferSize(ps_code), NULL, &out->ps);
|
device, D3DGetBufferPointer(ps_code), D3DGetBufferSize(ps_code), NULL, &out->ps);
|
||||||
|
|
||||||
Release(ps_code);
|
Release(ps_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,6 +224,7 @@ bool d3d11_init_shader(
|
|||||||
{
|
{
|
||||||
D3D11CreateGeometryShader(
|
D3D11CreateGeometryShader(
|
||||||
device, D3DGetBufferPointer(gs_code), D3DGetBufferSize(gs_code), NULL, &out->gs);
|
device, D3DGetBufferPointer(gs_code), D3DGetBufferSize(gs_code), NULL, &out->gs);
|
||||||
|
|
||||||
Release(gs_code);
|
Release(gs_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2587,14 +2587,6 @@ void d3d11_update_texture(
|
|||||||
DXGI_FORMAT d3d11_get_closest_match(
|
DXGI_FORMAT d3d11_get_closest_match(
|
||||||
D3D11Device device, DXGI_FORMAT desired_format, UINT desired_format_support);
|
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(
|
bool d3d11_init_shader(
|
||||||
D3D11Device device,
|
D3D11Device device,
|
||||||
const char* src,
|
const char* src,
|
||||||
|
@ -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++)
|
for (int i = 0; i < d3d11->shader_preset->luts; i++)
|
||||||
{
|
{
|
||||||
struct texture_image image = { 0 };
|
struct texture_image image = { 0 };
|
||||||
|
image.supports_rgba = true;
|
||||||
|
|
||||||
if (!image_texture_load(&image, d3d11->shader_preset->lut[i].path))
|
if (!image_texture_load(&image, d3d11->shader_preset->lut[i].path))
|
||||||
goto error;
|
goto error;
|
||||||
d3d11->luts[i].desc.Width = image.width;
|
d3d11->luts[i].desc.Width = image.width;
|
||||||
d3d11->luts[i].desc.Height = image.height;
|
d3d11->luts[i].desc.Height = image.height;
|
||||||
d3d11->luts[i].desc.Format =
|
d3d11->luts[i].desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_B8G8R8A8_UNORM);
|
|
||||||
d3d11_init_texture(d3d11->device, &d3d11->luts[i]);
|
d3d11_init_texture(d3d11->device, &d3d11->luts[i]);
|
||||||
d3d11_update_texture(
|
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]);
|
&d3d11->luts[i]);
|
||||||
image_texture_free(&image);
|
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->vsync = video->vsync;
|
||||||
d3d11->format = video->rgb32 ? DXGI_FORMAT_B8G8R8X8_UNORM : DXGI_FORMAT_B5G6R5_UNORM;
|
d3d11->format = video->rgb32 ? DXGI_FORMAT_B8G8R8X8_UNORM : DXGI_FORMAT_B5G6R5_UNORM;
|
||||||
|
|
||||||
d3d11->frame.texture.desc.Format =
|
d3d11->frame.texture.desc.Format = d3d11->format;
|
||||||
d3d11_get_closest_match_texture2D(d3d11->device, d3d11->format);
|
d3d11->frame.texture.desc.Usage = D3D11_USAGE_DEFAULT;
|
||||||
d3d11->frame.texture.desc.Usage = D3D11_USAGE_DEFAULT;
|
|
||||||
|
|
||||||
d3d11->menu.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.Width = width;
|
||||||
d3d11->pass[i].rt.desc.Height = height;
|
d3d11->pass[i].rt.desc.Height = height;
|
||||||
d3d11->pass[i].rt.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
|
d3d11->pass[i].rt.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
|
||||||
d3d11->pass[i].rt.desc.Format = d3d11_get_closest_match(
|
d3d11->pass[i].rt.desc.Format = pass->fbo.fp_fbo ? DXGI_FORMAT_R32G32B32A32_FLOAT
|
||||||
d3d11->device,
|
: pass->fbo.srgb_fbo
|
||||||
pass->fbo.fp_fbo ? DXGI_FORMAT_R32G32B32A32_FLOAT
|
? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
|
||||||
: pass->fbo.srgb_fbo ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
|
: DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
: DXGI_FORMAT_R8G8B8A8_UNORM,
|
|
||||||
D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
|
|
||||||
D3D11_FORMAT_SUPPORT_RENDER_TARGET);
|
|
||||||
|
|
||||||
if ((i != (d3d11->shader_preset->passes - 1)) || (width != d3d11->vp.width) ||
|
if ((i != (d3d11->shader_preset->passes - 1)) || (width != d3d11->vp.width) ||
|
||||||
(height != d3d11->vp.height))
|
(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)
|
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.Width = width;
|
||||||
d3d11->menu.texture.desc.Height = height;
|
d3d11->menu.texture.desc.Height = height;
|
||||||
d3d11_init_texture(d3d11->device, &d3d11->menu.texture);
|
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.Width = image->width;
|
||||||
texture->desc.Height = image->height;
|
texture->desc.Height = image->height;
|
||||||
texture->desc.Format =
|
texture->desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_B8G8R8A8_UNORM);
|
|
||||||
|
|
||||||
d3d11_init_texture(d3d11->device, texture);
|
d3d11_init_texture(d3d11->device, texture);
|
||||||
|
|
||||||
|
@ -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.sampler = d3d11->sampler_linear;
|
||||||
font->texture.desc.Width = font->atlas->width;
|
font->texture.desc.Width = font->atlas->width;
|
||||||
font->texture.desc.Height = font->atlas->height;
|
font->texture.desc.Height = font->atlas->height;
|
||||||
font->texture.desc.Format =
|
font->texture.desc.Format = DXGI_FORMAT_A8_UNORM;
|
||||||
d3d11_get_closest_match_texture2D(d3d11->device, DXGI_FORMAT_A8_UNORM);
|
|
||||||
d3d11_init_texture(d3d11->device, &font->texture);
|
d3d11_init_texture(d3d11->device, &font->texture);
|
||||||
d3d11_update_texture(
|
d3d11_update_texture(
|
||||||
d3d11->ctx, font->atlas->width, font->atlas->height, font->atlas->width,
|
d3d11->ctx, font->atlas->width, font->atlas->height, font->atlas->width,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user