mirror of
https://github.com/CTCaer/RetroArch.git
synced 2025-02-23 05:02:46 +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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user