(D3D) Move d3d{}_release_texture out of d3d{}_init_texture

This commit is contained in:
libretroadmin 2022-06-04 21:31:43 +02:00
parent d0ce0ac06f
commit 85ca66bfad
9 changed files with 42 additions and 12 deletions

View File

@ -83,10 +83,8 @@ d3d10_get_closest_match(D3D10Device device,
void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
{
bool is_render_target = texture->desc.BindFlags & D3D10_BIND_RENDER_TARGET;
UINT format_support = D3D10_FORMAT_SUPPORT_TEXTURE2D | D3D10_FORMAT_SUPPORT_SHADER_SAMPLE;
d3d10_release_texture(texture);
bool is_render_target = texture->desc.BindFlags & D3D10_BIND_RENDER_TARGET;
UINT format_support = D3D10_FORMAT_SUPPORT_TEXTURE2D | D3D10_FORMAT_SUPPORT_SHADER_SAMPLE;
texture->desc.MipLevels = 1;
texture->desc.ArraySize = 1;
@ -113,7 +111,7 @@ void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
}
if (texture->desc.BindFlags & D3D10_BIND_RENDER_TARGET)
format_support |= D3D10_FORMAT_SUPPORT_RENDER_TARGET;
format_support |= D3D10_FORMAT_SUPPORT_RENDER_TARGET;
texture->desc.Format = d3d10_get_closest_match(device, texture->desc.Format, format_support);

View File

@ -79,8 +79,6 @@ 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);
texture->desc.MipLevels = 1;
texture->desc.ArraySize = 1;
texture->desc.SampleDesc.Count = 1;

View File

@ -250,7 +250,6 @@ static DXGI_FORMAT d3d12_get_closest_match(D3D12Device device, D3D12_FEATURE_DAT
void d3d12_init_texture(D3D12Device device, d3d12_texture_t* texture)
{
int i;
d3d12_release_texture(texture);
if (!texture->desc.MipLevels)
texture->desc.MipLevels = 1;

View File

@ -180,6 +180,7 @@ static bool d3d10_overlay_load(void* data, const void* image_data, unsigned num_
d3d10->overlays.textures[i].desc.Height = images[i].height;
d3d10->overlays.textures[i].desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d10_release_texture(&d3d10->overlays.textures[i]);
d3d10_init_texture(d3d10->device, &d3d10->overlays.textures[i]);
if (d3d10->overlays.textures[i].staging)
@ -581,6 +582,7 @@ static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const
if (d3d10->shader_preset->lut[i].mipmap)
d3d10->luts[i].desc.MiscFlags = D3D10_RESOURCE_MISC_GENERATE_MIPS;
d3d10_release_texture(&d3d10->luts[i]);
d3d10_init_texture(d3d10->device, &d3d10->luts[i]);
if (d3d10->luts[i].staging)
@ -810,6 +812,7 @@ static void *d3d10_gfx_init(const video_info_t* video,
d3d10->frame.texture[0].desc.Width = 4;
d3d10->frame.texture[0].desc.Height = 4;
d3d10_release_texture(&d3d10->frame.texture[0]);
d3d10_init_texture(d3d10->device, &d3d10->frame.texture[0]);
d3d10->menu.texture.desc.Usage = D3D10_USAGE_DEFAULT;
@ -1197,8 +1200,9 @@ static void d3d10_init_history(d3d10_video_t* d3d10, unsigned width, unsigned he
d3d10->frame.texture[i].desc.Height = height;
d3d10->frame.texture[i].desc.Format = d3d10->frame.texture[0].desc.Format;
d3d10->frame.texture[i].desc.Usage = d3d10->frame.texture[0].desc.Usage;
d3d10_release_texture(&d3d10->frame.texture[i]);
d3d10_init_texture(d3d10->device, &d3d10->frame.texture[i]);
/* todo: clear texture ? */
/* TODO/FIXME: clear texture ? */
}
d3d10->init_history = false;
}
@ -1277,13 +1281,15 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
d3d10->pass[i].rt.desc.Height = height;
d3d10->pass[i].rt.desc.BindFlags = D3D10_BIND_RENDER_TARGET;
d3d10->pass[i].rt.desc.Format = glslang_format_to_dxgi(d3d10->pass[i].semantics.format);
d3d10_release_texture(&d3d10->pass[i].rt);
d3d10_init_texture(d3d10->device, &d3d10->pass[i].rt);
if (pass->feedback)
{
d3d10->pass[i].feedback.desc = d3d10->pass[i].rt.desc;
d3d10_release_texture(&d3d10->pass[i].feedback);
d3d10_init_texture(d3d10->device, &d3d10->pass[i].feedback);
/* todo: do we need to clear it to black here ? */
/* TODO/FIXME: do we need to clear it to black here ? */
}
}
else
@ -1414,6 +1420,7 @@ static bool d3d10_gfx_frame(
{
d3d10->frame.texture[0].desc.Width = width;
d3d10->frame.texture[0].desc.Height = height;
d3d10_release_texture(&d3d10->frame.texture[0]);
d3d10_init_texture(d3d10->device, &d3d10->frame.texture[0]);
}
@ -1717,6 +1724,7 @@ static void d3d10_set_menu_texture_frame(
d3d10->menu.texture.desc.Format = format;
d3d10->menu.texture.desc.Width = width;
d3d10->menu.texture.desc.Height = height;
d3d10_release_texture(&d3d10->menu.texture);
d3d10_init_texture(d3d10->device, &d3d10->menu.texture);
}
@ -1807,6 +1815,7 @@ static uintptr_t d3d10_gfx_load_texture(
texture->desc.Height = image->height;
texture->desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d10_release_texture(texture);
d3d10_init_texture(d3d10->device, texture);
if (texture->staging)

View File

@ -214,6 +214,7 @@ static bool d3d11_overlay_load(void* data, const void* image_data, unsigned num_
d3d11->overlays.textures[i].desc.Height = images[i].height;
d3d11->overlays.textures[i].desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d11_release_texture(&d3d11->overlays.textures[i]);
d3d11_init_texture(d3d11->device, &d3d11->overlays.textures[i]);
if (d3d11->overlays.textures[i].staging)
@ -802,6 +803,7 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
if (d3d11->shader_preset->lut[i].mipmap)
d3d11->luts[i].desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;
d3d11_release_texture(&d3d11->luts[i]);
d3d11_init_texture(d3d11->device, &d3d11->luts[i]);
if (d3d11->luts[i].staging)
@ -1176,6 +1178,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
d3d11->back_buffer.desc.Height = height;
d3d11->back_buffer.desc.Format = d3d11->shader_preset && d3d11->shader_preset->passes ? glslang_format_to_dxgi(d3d11->pass[d3d11->shader_preset->passes - 1].semantics.format) : DXGI_FORMAT_R8G8B8A8_UNORM;
d3d11->back_buffer.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
d3d11_release_texture(&d3d11->back_buffer);
d3d11_init_texture(d3d11->device, &d3d11->back_buffer);
#endif
@ -1289,6 +1292,7 @@ static void *d3d11_gfx_init(const video_info_t* video,
d3d11->frame.texture[0].desc.Width = 4;
d3d11->frame.texture[0].desc.Height = 4;
d3d11_release_texture(&d3d11->frame.texture[0]);
d3d11_init_texture(d3d11->device, &d3d11->frame.texture[0]);
d3d11->menu.texture.desc.Usage = D3D11_USAGE_DEFAULT;
@ -1767,6 +1771,7 @@ static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned he
d3d11->frame.texture[i].desc.Height = height;
d3d11->frame.texture[i].desc.Format = d3d11->frame.texture[0].desc.Format;
d3d11->frame.texture[i].desc.Usage = d3d11->frame.texture[0].desc.Usage;
d3d11_release_texture(&d3d11->frame.texture[i]);
d3d11_init_texture(d3d11->device, &d3d11->frame.texture[i]);
/* TODO/FIXME: clear texture ? */
}
@ -1845,11 +1850,13 @@ static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsi
d3d11->pass[i].rt.desc.Height = height;
d3d11->pass[i].rt.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
d3d11->pass[i].rt.desc.Format = glslang_format_to_dxgi(d3d11->pass[i].semantics.format);
d3d11_release_texture(&d3d11->pass[i].rt);
d3d11_init_texture(d3d11->device, &d3d11->pass[i].rt);
if (pass->feedback)
{
d3d11->pass[i].feedback.desc = d3d11->pass[i].rt.desc;
d3d11_release_texture(&d3d11->pass[i].feedback);
d3d11_init_texture(d3d11->device, &d3d11->pass[i].feedback);
/* TODO/FIXME: do we need to clear it to black here ? */
}
@ -1950,6 +1957,7 @@ static bool d3d11_gfx_frame(
d3d11->back_buffer.desc.Height = video_height;
d3d11->back_buffer.desc.Format = back_buffer_format;
d3d11->back_buffer.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
d3d11_release_texture(&d3d11->back_buffer);
d3d11_init_texture(d3d11->device, &d3d11->back_buffer);
dxgi_swapchain_color_space(
@ -2012,6 +2020,7 @@ static bool d3d11_gfx_frame(
d3d11->frame.texture[0].desc.Width = width;
d3d11->frame.texture[0].desc.Height = height;
d3d11->frame.texture[0].desc.Format = hw_desc.Format;
d3d11_release_texture(&d3d11->frame.texture[0]);
d3d11_init_texture(d3d11->device, &d3d11->frame.texture[0]);
d3d11->init_history = true;
@ -2059,6 +2068,7 @@ static bool d3d11_gfx_frame(
{
d3d11->frame.texture[0].desc.Width = width;
d3d11->frame.texture[0].desc.Height = height;
d3d11_release_texture(&d3d11->frame.texture[0]);
d3d11_init_texture(d3d11->device, &d3d11->frame.texture[0]);
}
@ -2503,6 +2513,7 @@ static void d3d11_set_menu_texture_frame(
d3d11->menu.texture.desc.Format = format;
d3d11->menu.texture.desc.Width = width;
d3d11->menu.texture.desc.Height = height;
d3d11_release_texture(&d3d11->menu.texture);
d3d11_init_texture(d3d11->device, &d3d11->menu.texture);
}
@ -2599,6 +2610,7 @@ static uintptr_t d3d11_gfx_load_texture(
texture->desc.Height = image->height;
texture->desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d11_release_texture(texture);
d3d11_init_texture(d3d11->device, texture);
if (texture->staging)

View File

@ -221,6 +221,7 @@ static bool d3d12_overlay_load(void* data, const void* image_data, unsigned num_
d3d12->overlays.textures[i].desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
d3d12->overlays.textures[i].srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->overlays.textures[i]);
d3d12_init_texture(d3d12->device, &d3d12->overlays.textures[i]);
d3d12_update_texture(
images[i].width, images[i].height,
@ -788,6 +789,7 @@ static bool d3d12_gfx_set_shader(void* data, enum rarch_shader_type type, const
if (d3d12->shader_preset->lut[i].mipmap)
d3d12->luts[i].desc.MipLevels = UINT16_MAX;
d3d12_release_texture(&d3d12->luts[i]);
d3d12_init_texture(d3d12->device, &d3d12->luts[i]);
d3d12_update_texture(
@ -1323,6 +1325,7 @@ static bool d3d12_init_swapchain(d3d12_video_t* d3d12,
d3d12->desc.rtv_heap.cpu.ptr
+ (countof(d3d12->chain.renderTargets))
* d3d12->desc.rtv_heap.stride;
d3d12_release_texture(&d3d12->chain.back_buffer);
d3d12_init_texture(d3d12->device, &d3d12->chain.back_buffer);
#endif
@ -1851,6 +1854,7 @@ static void *d3d12_gfx_init(const video_info_t* video,
d3d12->frame.texture[0].desc.Width = 4;
d3d12->frame.texture[0].desc.Height = 4;
d3d12->frame.texture[0].srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->frame.texture[0]);
d3d12_init_texture(d3d12->device, &d3d12->frame.texture[0]);
font_driver_init_osd(d3d12,
@ -1892,8 +1896,9 @@ static void d3d12_init_history(d3d12_video_t* d3d12, unsigned width, unsigned he
d3d12->frame.texture[i].desc.Format = d3d12->frame.texture[0].desc.Format;
d3d12->frame.texture[i].desc.MipLevels = d3d12->frame.texture[0].desc.MipLevels;
d3d12->frame.texture[i].srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->frame.texture[i]);
d3d12_init_texture(d3d12->device, &d3d12->frame.texture[i]);
/* todo: clear texture ? */
/* TODO/FIXME: clear texture ? */
}
d3d12->init_history = false;
}
@ -1973,14 +1978,16 @@ static void d3d12_init_render_targets(d3d12_video_t* d3d12, unsigned width, unsi
d3d12->pass[i].rt.desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
d3d12->pass[i].rt.srv_heap = &d3d12->desc.srv_heap;
d3d12->pass[i].rt.desc.Format = glslang_format_to_dxgi(d3d12->pass[i].semantics.format);
d3d12_release_texture(&d3d12->pass[i].rt);
d3d12_init_texture(d3d12->device, &d3d12->pass[i].rt);
if (pass->feedback)
{
d3d12->pass[i].feedback.desc = d3d12->pass[i].rt.desc;
d3d12->pass[i].feedback.srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->pass[i].feedback);
d3d12_init_texture(d3d12->device, &d3d12->pass[i].feedback);
/* todo: do we need to clear it to black here ? */
/* TODO/FIXME: do we need to clear it to black here ? */
}
}
else
@ -2107,6 +2114,7 @@ static bool d3d12_gfx_frame(
d3d12->desc.rtv_heap.cpu.ptr
+ countof(d3d12->chain.renderTargets)
* d3d12->desc.rtv_heap.stride;
d3d12_release_texture(&d3d12->chain.back_buffer);
d3d12_init_texture(d3d12->device, &d3d12->chain.back_buffer);
dxgi_swapchain_color_space(d3d12->chain.handle,
@ -2211,6 +2219,7 @@ static bool d3d12_gfx_frame(
d3d12->frame.texture[0].desc.Width = width;
d3d12->frame.texture[0].desc.Height = height;
d3d12->frame.texture[0].srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->frame.texture[0]);
d3d12_init_texture(d3d12->device, &d3d12->frame.texture[0]);
}
@ -2706,6 +2715,7 @@ static void d3d12_set_menu_texture_frame(
d3d12->menu.texture.desc.Height = height;
d3d12->menu.texture.desc.Format = format;
d3d12->menu.texture.srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&d3d12->menu.texture);
d3d12_init_texture(d3d12->device, &d3d12->menu.texture);
}
@ -2817,6 +2827,7 @@ static uintptr_t d3d12_gfx_load_texture(
texture->desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
texture->srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(texture);
d3d12_init_texture(d3d12->device, texture);
d3d12_update_texture(

View File

@ -57,6 +57,7 @@ d3d10_font_init_font(void* data, const char* font_path, float font_size, bool is
font->texture.desc.Width = font->atlas->width;
font->texture.desc.Height = font->atlas->height;
font->texture.desc.Format = DXGI_FORMAT_A8_UNORM;
d3d10_release_texture(&font->texture);
d3d10_init_texture(d3d10->device, &font->texture);
if (font->texture.staging)
d3d10_update_texture(

View File

@ -56,6 +56,7 @@ d3d11_font_init_font(void* data, const char* font_path, float font_size, bool is
font->texture.desc.Width = font->atlas->width;
font->texture.desc.Height = font->atlas->height;
font->texture.desc.Format = DXGI_FORMAT_A8_UNORM;
d3d11_release_texture(&font->texture);
d3d11_init_texture(d3d11->device, &font->texture);
if (font->texture.staging)
d3d11_update_texture(

View File

@ -59,6 +59,7 @@ d3d12_font_init_font(void* data, const char* font_path,
font->texture.desc.Height = font->atlas->height;
font->texture.desc.Format = DXGI_FORMAT_A8_UNORM;
font->texture.srv_heap = &d3d12->desc.srv_heap;
d3d12_release_texture(&font->texture);
d3d12_init_texture(d3d12->device, &font->texture);
d3d12_update_texture(
font->atlas->width, font->atlas->height,