(D3D11) Turn booleans into flags

This commit is contained in:
LibretroAdmin 2022-11-02 08:31:40 +01:00
parent 1aa258faa0
commit 15048027e7
4 changed files with 99 additions and 70 deletions

View File

@ -181,7 +181,14 @@ enum d3d11_state_flags
D3D11_ST_FLAG_INIT_HISTORY = (1 << 7), D3D11_ST_FLAG_INIT_HISTORY = (1 << 7),
D3D11_ST_FLAG_HAS_FLIP_MODEL = (1 << 8), D3D11_ST_FLAG_HAS_FLIP_MODEL = (1 << 8),
D3D11_ST_FLAG_HAS_ALLOW_TEARING = (1 << 9), D3D11_ST_FLAG_HAS_ALLOW_TEARING = (1 << 9),
D3D11_ST_FLAG_HW_IFACE_ENABLE = (1 << 10) D3D11_ST_FLAG_HW_IFACE_ENABLE = (1 << 10),
D3D11_ST_FLAG_HDR_SUPPORT = (1 << 11),
D3D11_ST_FLAG_HDR_ENABLE = (1 << 12),
D3D11_ST_FLAG_SPRITES_ENABLE = (1 << 13),
D3D11_ST_FLAG_OVERLAYS_ENABLE = (1 << 14),
D3D11_ST_FLAG_OVERLAYS_FULLSCREEN = (1 << 15),
D3D11_ST_FLAG_MENU_ENABLE = (1 << 16),
D3D11_ST_FLAG_MENU_FULLSCREEN = (1 << 17)
}; };
typedef struct typedef struct
@ -211,7 +218,7 @@ typedef struct
DXGI_FORMAT format; DXGI_FORMAT format;
float clearcolor[4]; float clearcolor[4];
unsigned swap_interval; unsigned swap_interval;
uint16_t flags; uint32_t flags;
d3d11_shader_t shaders[GFX_MAX_SHADERS]; d3d11_shader_t shaders[GFX_MAX_SHADERS];
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
enum dxgi_swapchain_bit_depth enum dxgi_swapchain_bit_depth
@ -237,8 +244,6 @@ typedef struct
float min_output_nits; float min_output_nits;
float max_cll; float max_cll;
float max_fall; float max_fall;
bool support;
bool enable;
} hdr; } hdr;
#endif #endif
@ -249,7 +254,6 @@ typedef struct
D3D11Buffer vbo; D3D11Buffer vbo;
int offset; int offset;
int capacity; int capacity;
bool enabled;
} sprites; } sprites;
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
@ -257,8 +261,6 @@ typedef struct
{ {
D3D11Buffer vbo; D3D11Buffer vbo;
d3d11_texture_t* textures; d3d11_texture_t* textures;
bool enabled;
bool fullscreen;
int count; int count;
} overlays; } overlays;
#endif #endif
@ -267,8 +269,6 @@ typedef struct
{ {
d3d11_texture_t texture; d3d11_texture_t texture;
D3D11Buffer vbo; D3D11Buffer vbo;
bool enabled;
bool fullscreen;
} menu; } menu;
struct struct

View File

@ -107,8 +107,8 @@ static uint32_t d3d11_get_flags(void *data)
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
static void d3d11_free_overlays(d3d11_video_t* d3d11) static void d3d11_free_overlays(d3d11_video_t* d3d11)
{ {
unsigned i; int i;
for (i = 0; i < (unsigned)d3d11->overlays.count; i++) for (i = 0; i < d3d11->overlays.count; i++)
d3d11_release_texture(&d3d11->overlays.textures[i]); d3d11_release_texture(&d3d11->overlays.textures[i]);
Release(d3d11->overlays.vbo); Release(d3d11->overlays.vbo);
@ -254,7 +254,10 @@ static void d3d11_overlay_enable(void* data, bool state)
if (!d3d11) if (!d3d11)
return; return;
d3d11->overlays.enabled = state; if (state)
d3d11->flags |= D3D11_ST_FLAG_OVERLAYS_ENABLE;
else
d3d11->flags &= ~D3D11_ST_FLAG_OVERLAYS_ENABLE;
win32_show_cursor(d3d11, state); win32_show_cursor(d3d11, state);
} }
@ -265,7 +268,10 @@ static void d3d11_overlay_full_screen(void* data, bool enable)
if (!d3d11) if (!d3d11)
return; return;
d3d11->overlays.fullscreen = enable; if (enable)
d3d11->flags |= D3D11_ST_FLAG_OVERLAYS_FULLSCREEN;
else
d3d11->flags &= ~D3D11_ST_FLAG_OVERLAYS_FULLSCREEN;
} }
static void d3d11_get_overlay_interface( static void d3d11_get_overlay_interface(
@ -281,9 +287,9 @@ static void d3d11_get_overlay_interface(
static void d3d11_render_overlay(d3d11_video_t *d3d11) static void d3d11_render_overlay(d3d11_video_t *d3d11)
{ {
unsigned i; int i;
if (d3d11->overlays.fullscreen) if (d3d11->flags & D3D11_ST_FLAG_OVERLAYS_FULLSCREEN)
d3d11->context->lpVtbl->RSSetViewports(d3d11->context, 1, &d3d11->viewport); d3d11->context->lpVtbl->RSSetViewports(d3d11->context, 1, &d3d11->viewport);
else else
d3d11->context->lpVtbl->RSSetViewports(d3d11->context, 1, &d3d11->frame.viewport); d3d11->context->lpVtbl->RSSetViewports(d3d11->context, 1, &d3d11->frame.viewport);
@ -329,7 +335,7 @@ static void d3d11_set_hdr_max_nits(void *data, float max_nits)
dxgi_set_hdr_metadata( dxgi_set_hdr_metadata(
d3d11->swapChain, d3d11->swapChain,
d3d11->hdr.support, (d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT),
d3d11->chain_bit_depth, d3d11->chain_bit_depth,
d3d11->chain_color_space, d3d11->chain_color_space,
d3d11->hdr.max_output_nits, d3d11->hdr.max_output_nits,
@ -415,17 +421,16 @@ static void d3d11_set_hdr10(d3d11_video_t* d3d11, bool hdr10)
static void d3d11_set_filtering(void* data, unsigned index, static void d3d11_set_filtering(void* data, unsigned index,
bool smooth, bool ctx_scaling) bool smooth, bool ctx_scaling)
{ {
int i;
d3d11_video_t* d3d11 = (d3d11_video_t*)data; d3d11_video_t* d3d11 = (d3d11_video_t*)data;
if (smooth) if (smooth)
{ {
unsigned i;
for (i = 0; i < RARCH_WRAP_MAX; i++) for (i = 0; i < RARCH_WRAP_MAX; i++)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_LINEAR][i]; d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_LINEAR][i];
} }
else else
{ {
unsigned i;
for (i = 0; i < RARCH_WRAP_MAX; i++) for (i = 0; i < RARCH_WRAP_MAX; i++)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_NEAREST][i]; d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_NEAREST][i];
} }
@ -486,13 +491,13 @@ static void d3d11_update_viewport(d3d11_video_t *d3d11, bool force_full)
static void d3d11_free_shader_preset(d3d11_video_t* d3d11) static void d3d11_free_shader_preset(d3d11_video_t* d3d11)
{ {
unsigned i; int i;
if (!d3d11->shader_preset) if (!d3d11->shader_preset)
return; return;
for (i = 0; i < d3d11->shader_preset->passes; i++) for (i = 0; i < d3d11->shader_preset->passes; i++)
{ {
unsigned j; int j;
free(d3d11->shader_preset->pass[i].source.string.vertex); free(d3d11->shader_preset->pass[i].source.string.vertex);
free(d3d11->shader_preset->pass[i].source.string.fragment); free(d3d11->shader_preset->pass[i].source.string.fragment);
@ -589,7 +594,7 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
source = &d3d11->frame.texture[0]; source = &d3d11->frame.texture[0];
for (i = 0; i < d3d11->shader_preset->passes; source = &d3d11->pass[i++].rt) for (i = 0; i < d3d11->shader_preset->passes; source = &d3d11->pass[i++].rt)
{ {
unsigned j; int j;
/* clang-format off */ /* clang-format off */
semantics_map_t semantics_map = { semantics_map_t semantics_map = {
{ {
@ -690,16 +695,16 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
} }
} }
if (d3d11->hdr.enable) if (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
{ {
if(d3d11->shader_preset && d3d11->shader_preset->passes && (d3d11->pass[d3d11->shader_preset->passes - 1].semantics.format == SLANG_FORMAT_A2B10G10R10_UNORM_PACK32)) if (d3d11->shader_preset && d3d11->shader_preset->passes && (d3d11->pass[d3d11->shader_preset->passes - 1].semantics.format == SLANG_FORMAT_A2B10G10R10_UNORM_PACK32))
{ {
/* If the last shader pass uses a RGB10A2 back buffer and hdr has been enabled assume we want to skip the inverse tonemapper and hdr10 conversion */ /* If the last shader pass uses a RGB10A2 back buffer and hdr has been enabled assume we want to skip the inverse tonemapper and hdr10 conversion */
d3d11_set_hdr_inverse_tonemap(d3d11, false); d3d11_set_hdr_inverse_tonemap(d3d11, false);
d3d11_set_hdr10(d3d11, false); d3d11_set_hdr10(d3d11, false);
d3d11->flags |= D3D11_ST_FLAG_RESIZE_CHAIN; d3d11->flags |= D3D11_ST_FLAG_RESIZE_CHAIN;
} }
else if(d3d11->shader_preset && d3d11->shader_preset->passes && (d3d11->pass[d3d11->shader_preset->passes - 1].semantics.format == SLANG_FORMAT_R16G16B16A16_SFLOAT)) else if (d3d11->shader_preset && d3d11->shader_preset->passes && (d3d11->pass[d3d11->shader_preset->passes - 1].semantics.format == SLANG_FORMAT_R16G16B16A16_SFLOAT))
{ {
/* If the last shader pass uses a RGBA16 back buffer and hdr has been enabled assume we want to skip the inverse tonemapper */ /* If the last shader pass uses a RGBA16 back buffer and hdr has been enabled assume we want to skip the inverse tonemapper */
d3d11_set_hdr_inverse_tonemap(d3d11, false); d3d11_set_hdr_inverse_tonemap(d3d11, false);
@ -883,11 +888,16 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
hwnd = (HWND)corewindow; hwnd = (HWND)corewindow;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if (!(d3d11->hdr.support = if (dxgi_check_display_hdr_support(d3d11->factory, hwnd))
dxgi_check_display_hdr_support(d3d11->factory, hwnd))) d3d11->flags |= D3D11_ST_FLAG_HDR_SUPPORT;
d3d11->hdr.enable = false; else
d3d11->flags &= ~D3D11_ST_FLAG_HDR_SUPPORT;
d3d11->chain_bit_depth = d3d11->hdr.enable if (!(d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT))
d3d11->flags &= ~D3D11_ST_FLAG_HDR_ENABLE;
d3d11->chain_bit_depth =
(d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
? DXGI_SWAPCHAIN_BIT_DEPTH_10 ? DXGI_SWAPCHAIN_BIT_DEPTH_10
: DXGI_SWAPCHAIN_BIT_DEPTH_8; : DXGI_SWAPCHAIN_BIT_DEPTH_8;
#endif #endif
@ -899,7 +909,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
desc.Width = width; desc.Width = width;
desc.Height = height; desc.Height = height;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if (d3d11->hdr.support) if (d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT)
desc.Format = d3d11->chain_formats[ desc.Format = d3d11->chain_formats[
d3d11->chain_bit_depth]; d3d11->chain_bit_depth];
else else
@ -911,7 +921,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
desc.BufferDesc.Width = width; desc.BufferDesc.Width = width;
desc.BufferDesc.Height = height; desc.BufferDesc.Height = height;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if (d3d11->hdr.support) if (d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT)
desc.BufferDesc.Format = d3d11->chain_formats[ desc.BufferDesc.Format = d3d11->chain_formats[
d3d11->chain_bit_depth]; d3d11->chain_bit_depth];
else else
@ -935,7 +945,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
#endif #endif
if(*cached_device && *cached_context) if (*cached_device && *cached_context)
{ {
d3d11->device = *cached_device; d3d11->device = *cached_device;
d3d11->context = *cached_context; d3d11->context = *cached_context;
@ -1103,7 +1113,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
initialize ST.2084 support to match initialize ST.2084 support to match
the display's support. */ the display's support. */
color_space = color_space =
d3d11->hdr.enable (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
? DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 ? DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020
: DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709;
@ -1113,7 +1123,7 @@ static bool d3d11_init_swapchain(d3d11_video_t* d3d11,
color_space); color_space);
dxgi_set_hdr_metadata( dxgi_set_hdr_metadata(
d3d11->swapChain, d3d11->swapChain,
d3d11->hdr.support, d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT,
d3d11->chain_bit_depth, d3d11->chain_bit_depth,
d3d11->chain_color_space, d3d11->chain_color_space,
d3d11->hdr.max_output_nits, d3d11->hdr.max_output_nits,
@ -1197,11 +1207,14 @@ static void *d3d11_gfx_init(const video_info_t* video,
DXGICreateFactory1(&d3d11->factory); DXGICreateFactory1(&d3d11->factory);
#endif #endif
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
d3d11->hdr.enable = settings->bools.video_hdr_enable;
d3d11->hdr.max_output_nits = settings->floats.video_hdr_max_nits; d3d11->hdr.max_output_nits = settings->floats.video_hdr_max_nits;
d3d11->hdr.min_output_nits = 0.001f; d3d11->hdr.min_output_nits = 0.001f;
d3d11->hdr.max_cll = 0.0f; d3d11->hdr.max_cll = 0.0f;
d3d11->hdr.max_fall = 0.0f; d3d11->hdr.max_fall = 0.0f;
if (settings->bools.video_hdr_enable)
d3d11->flags |= D3D11_ST_FLAG_HDR_ENABLE;
else
d3d11->flags &= ~D3D11_ST_FLAG_HDR_ENABLE;
#endif #endif
if (settings->bools.video_waitable_swapchains) if (settings->bools.video_waitable_swapchains)
@ -1278,7 +1291,7 @@ static void *d3d11_gfx_init(const video_info_t* video,
d3d11_gfx_set_rotation(d3d11, 0); d3d11_gfx_set_rotation(d3d11, 0);
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if (d3d11->hdr.enable) if (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
{ {
D3D11_BUFFER_DESC desc; D3D11_BUFFER_DESC desc;
D3D11_SUBRESOURCE_DATA ubo_data; D3D11_SUBRESOURCE_DATA ubo_data;
@ -1393,7 +1406,7 @@ static void *d3d11_gfx_init(const video_info_t* video,
} }
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if (d3d11->hdr.enable) if (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
{ {
D3D11_INPUT_ELEMENT_DESC desc[] = { D3D11_INPUT_ELEMENT_DESC desc[] = {
{ "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0,
@ -1711,14 +1724,14 @@ error:
static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned height) static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned height)
{ {
unsigned i; int i;
/* TODO/FIXME: should we init history to max_width/max_height instead ? /* TODO/FIXME: should we init history to max_width/max_height instead ?
* to prevent out of memory errors happening several frames later * to prevent out of memory errors happening several frames later
* and to reduce memory fragmentation */ * and to reduce memory fragmentation */
assert(d3d11->shader_preset); assert(d3d11->shader_preset);
for (i = 0; i < (unsigned)d3d11->shader_preset->history_size + 1; i++) for (i = 0; i < d3d11->shader_preset->history_size + 1; i++)
{ {
d3d11->frame.texture[i].desc.Width = width; d3d11->frame.texture[i].desc.Width = width;
d3d11->frame.texture[i].desc.Height = height; d3d11->frame.texture[i].desc.Height = height;
@ -1733,7 +1746,7 @@ static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned he
static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsigned height) static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsigned height)
{ {
unsigned i; int i;
assert(d3d11->shader_preset); assert(d3d11->shader_preset);
@ -1860,9 +1873,9 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
bool video_hdr_enable = video_info->hdr_enable; bool video_hdr_enable = video_info->hdr_enable;
DXGI_FORMAT back_buffer_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; DXGI_FORMAT back_buffer_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;
bool use_back_buffer = back_buffer_format != d3d11->chain_formats[d3d11->chain_bit_depth]; bool use_back_buffer = back_buffer_format != d3d11->chain_formats[d3d11->chain_bit_depth];
bool hdr_enable = d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE;
if ( (d3d11->flags & D3D11_ST_FLAG_RESIZE_CHAIN) if ( (d3d11->flags & D3D11_ST_FLAG_RESIZE_CHAIN)
|| (d3d11->hdr.enable != video_hdr_enable)) || (hdr_enable != video_hdr_enable))
#else #else
if (d3d11->resize_chain) if (d3d11->resize_chain)
#endif #endif
@ -1873,9 +1886,12 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
if (d3d11->flags & D3D11_ST_FLAG_WAITABLE_SWAPCHAINS) if (d3d11->flags & D3D11_ST_FLAG_WAITABLE_SWAPCHAINS)
swapchain_flags |= DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT; swapchain_flags |= DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
d3d11->hdr.enable = video_hdr_enable; if (video_hdr_enable)
d3d11->flags |= D3D11_ST_FLAG_HDR_ENABLE;
else
d3d11->flags &= ~D3D11_ST_FLAG_HDR_ENABLE;
if(d3d11->hdr.enable) if (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
d3d11_release_texture(&d3d11->back_buffer); d3d11_release_texture(&d3d11->back_buffer);
DXGIResizeBuffers(d3d11->swapChain, 0, 0, 0, DXGIResizeBuffers(d3d11->swapChain, 0, 0, 0,
d3d11->chain_formats[d3d11->chain_bit_depth], d3d11->chain_formats[d3d11->chain_bit_depth],
@ -1900,16 +1916,20 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
#ifdef __WINRT__ #ifdef __WINRT__
if (!(d3d11->hdr.support = if (dxgi_check_display_hdr_support(d3d11->factory, uwp_get_corewindow()))
dxgi_check_display_hdr_support(d3d11->factory, uwp_get_corewindow()))) d3d11->flags |= D3D11_ST_FLAG_HDR_SUPPORT;
d3d11->hdr.enable = false; else
d3d11->flags &= ~D3D11_ST_FLAG_HDR_SUPPORT;
#else #else
if (!(d3d11->hdr.support = if (dxgi_check_display_hdr_support(d3d11->factory, main_window.hwnd))
dxgi_check_display_hdr_support(d3d11->factory, main_window.hwnd))) d3d11->flags |= D3D11_ST_FLAG_HDR_SUPPORT;
d3d11->hdr.enable = false; else
d3d11->flags &= ~D3D11_ST_FLAG_HDR_SUPPORT;
#endif #endif
if (!(d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT))
d3d11->flags &= ~D3D11_ST_FLAG_HDR_ENABLE;
if(d3d11->hdr.enable) if (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
{ {
memset(&d3d11->back_buffer, 0, sizeof(d3d11->back_buffer)); memset(&d3d11->back_buffer, 0, sizeof(d3d11->back_buffer));
d3d11->back_buffer.desc.Width = video_width; d3d11->back_buffer.desc.Width = video_width;
@ -1938,7 +1958,7 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
dxgi_set_hdr_metadata( dxgi_set_hdr_metadata(
d3d11->swapChain, d3d11->swapChain,
d3d11->hdr.support, d3d11->flags & D3D11_ST_FLAG_HDR_SUPPORT,
d3d11->chain_bit_depth, d3d11->chain_bit_depth,
d3d11->chain_color_space, d3d11->chain_color_space,
d3d11->hdr.max_output_nits, d3d11->hdr.max_output_nits,
@ -2183,7 +2203,8 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
if(d3d11->hdr.enable && use_back_buffer) if ( (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
&& use_back_buffer)
{ {
context->lpVtbl->OMSetRenderTargets(context, 1, context->lpVtbl->OMSetRenderTargets(context, 1,
&d3d11->back_buffer.rt_view, NULL); &d3d11->back_buffer.rt_view, NULL);
@ -2224,9 +2245,10 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
NULL, D3D11_DEFAULT_SAMPLE_MASK); NULL, D3D11_DEFAULT_SAMPLE_MASK);
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (d3d11->menu.enabled && d3d11->menu.texture.handle) if ( (d3d11->flags & D3D11_ST_FLAG_MENU_ENABLE)
&& d3d11->menu.texture.handle)
{ {
if (d3d11->menu.fullscreen) if (d3d11->flags & D3D11_ST_FLAG_MENU_FULLSCREEN)
context->lpVtbl->RSSetViewports(context, 1, &d3d11->viewport); context->lpVtbl->RSSetViewports(context, 1, &d3d11->viewport);
{ {
@ -2275,10 +2297,10 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
context->lpVtbl->IASetVertexBuffers( context->lpVtbl->IASetVertexBuffers(
context, 0, 1, &d3d11->sprites.vbo, &stride, &offset); context, 0, 1, &d3d11->sprites.vbo, &stride, &offset);
} }
d3d11->sprites.enabled = true; d3d11->flags |= D3D11_ST_FLAG_SPRITES_ENABLE;
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
if (d3d11->overlays.enabled && overlay_behind_menu) if ((d3d11->flags & D3D11_ST_FLAG_OVERLAYS_ENABLE) && overlay_behind_menu)
d3d11_render_overlay(d3d11); d3d11_render_overlay(d3d11);
#endif #endif
@ -2298,7 +2320,7 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
#endif #endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (d3d11->menu.enabled) if (d3d11->flags & D3D11_ST_FLAG_MENU_ENABLE)
menu_driver_frame(menu_is_alive, video_info); menu_driver_frame(menu_is_alive, video_info);
else else
#endif #endif
@ -2322,7 +2344,7 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
} }
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
if (d3d11->overlays.enabled && !overlay_behind_menu) if ((d3d11->flags & D3D11_ST_FLAG_OVERLAYS_ENABLE) && !overlay_behind_menu)
d3d11_render_overlay(d3d11); d3d11_render_overlay(d3d11);
#endif #endif
@ -2345,7 +2367,7 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
context, 0, 1, &d3d11->sprites.vbo, &stride, &offset); context, 0, 1, &d3d11->sprites.vbo, &stride, &offset);
font_driver_render_msg(d3d11, msg, NULL, NULL); font_driver_render_msg(d3d11, msg, NULL, NULL);
} }
d3d11->sprites.enabled = false; d3d11->flags &= ~D3D11_ST_FLAG_SPRITES_ENABLE;
#if defined(_WIN32) && !defined(__WINRT__) #if defined(_WIN32) && !defined(__WINRT__)
win32_update_title(); win32_update_title();
@ -2353,7 +2375,8 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
#ifdef HAVE_DXGI_HDR #ifdef HAVE_DXGI_HDR
/* Copy over back buffer to swap chain render targets */ /* Copy over back buffer to swap chain render targets */
if(d3d11->hdr.enable && use_back_buffer) if ( (d3d11->flags & D3D11_ST_FLAG_HDR_ENABLE)
&& use_back_buffer)
{ {
ID3D11ShaderResourceView* nullSRV[1] = {NULL}; ID3D11ShaderResourceView* nullSRV[1] = {NULL};
context->lpVtbl->OMSetRenderTargets(context, 1, &rtv, NULL); context->lpVtbl->OMSetRenderTargets(context, 1, &rtv, NULL);
@ -2514,8 +2537,14 @@ static void d3d11_set_menu_texture_enable(void* data, bool state, bool full_scre
if (!d3d11) if (!d3d11)
return; return;
d3d11->menu.enabled = state; if (state)
d3d11->menu.fullscreen = full_screen; d3d11->flags |= D3D11_ST_FLAG_MENU_ENABLE;
else
d3d11->flags &= ~D3D11_ST_FLAG_MENU_ENABLE;
if (full_screen)
d3d11->flags |= D3D11_ST_FLAG_MENU_FULLSCREEN;
else
d3d11->flags &= ~D3D11_ST_FLAG_MENU_FULLSCREEN;
} }
static void d3d11_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx) static void d3d11_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx)
@ -2541,11 +2570,10 @@ static void d3d11_gfx_set_osd_msg(
{ {
d3d11_video_t* d3d11 = (d3d11_video_t*)data; d3d11_video_t* d3d11 = (d3d11_video_t*)data;
if (d3d11) if (d3d11 && (d3d11->flags & D3D11_ST_FLAG_SPRITES_ENABLE))
if (d3d11->sprites.enabled) font_driver_render_msg(d3d11,
font_driver_render_msg(d3d11, msg,
msg, (const struct font_params*)params, font);
(const struct font_params*)params, font);
} }
static uintptr_t d3d11_gfx_load_texture( static uintptr_t d3d11_gfx_load_texture(

View File

@ -87,7 +87,8 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
if (draw->coords->vertex && draw->coords->tex_coord && draw->coords->color) if (draw->coords->vertex && draw->coords->tex_coord && draw->coords->color)
vertex_count = draw->coords->vertices; vertex_count = draw->coords->vertices;
if (!d3d11->sprites.enabled || vertex_count > d3d11->sprites.capacity) if ( (!(d3d11->flags & D3D11_ST_FLAG_SPRITES_ENABLE))
|| (vertex_count > d3d11->sprites.capacity))
return; return;
if (d3d11->sprites.offset + vertex_count > d3d11->sprites.capacity) if (d3d11->sprites.offset + vertex_count > d3d11->sprites.capacity)
@ -137,7 +138,7 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
} }
else else
{ {
int i; int i;
const float* vertex = draw->coords->vertex; const float* vertex = draw->coords->vertex;
const float* tex_coord = draw->coords->tex_coord; const float* tex_coord = draw->coords->tex_coord;
const float* color = draw->coords->color; const float* color = draw->coords->color;

View File

@ -247,7 +247,7 @@ static void d3d11_font_render_message(
if (!msg || !*msg) if (!msg || !*msg)
return; return;
if (!d3d11->sprites.enabled) if (!(d3d11->flags & D3D11_ST_FLAG_SPRITES_ENABLE))
return; return;
/* If font line metrics are not supported just draw as usual */ /* If font line metrics are not supported just draw as usual */