diff --git a/gfx/common/d3d10_common.c b/gfx/common/d3d10_common.c index 3194020e50..d256bdb183 100644 --- a/gfx/common/d3d10_common.c +++ b/gfx/common/d3d10_common.c @@ -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); diff --git a/gfx/common/d3d11_common.c b/gfx/common/d3d11_common.c index 7019816ada..eab3da5dad 100644 --- a/gfx/common/d3d11_common.c +++ b/gfx/common/d3d11_common.c @@ -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; diff --git a/gfx/common/d3d12_common.c b/gfx/common/d3d12_common.c index 9fb117d2e1..6eb965bc6b 100644 --- a/gfx/common/d3d12_common.c +++ b/gfx/common/d3d12_common.c @@ -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; diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index af9cdf2e9b..5f70d93937 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -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) diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 74c69cb30e..856d1c8c34 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -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) diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 60cc6473a8..b29e0b95ec 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -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( diff --git a/gfx/drivers_font/d3d10_font.c b/gfx/drivers_font/d3d10_font.c index 5e495dc9df..67e7972dd4 100644 --- a/gfx/drivers_font/d3d10_font.c +++ b/gfx/drivers_font/d3d10_font.c @@ -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( diff --git a/gfx/drivers_font/d3d11_font.c b/gfx/drivers_font/d3d11_font.c index d159512c35..824171fca5 100644 --- a/gfx/drivers_font/d3d11_font.c +++ b/gfx/drivers_font/d3d11_font.c @@ -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( diff --git a/gfx/drivers_font/d3d12_font.c b/gfx/drivers_font/d3d12_font.c index bf1e3f5f3b..831f8ae4f9 100644 --- a/gfx/drivers_font/d3d12_font.c +++ b/gfx/drivers_font/d3d12_font.c @@ -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,