(D3D10) Turn boolean variables into flags

This commit is contained in:
LibretroAdmin 2022-11-02 23:19:41 +01:00
parent 56ad3fa091
commit 7aa8c6bb11
5 changed files with 116 additions and 73 deletions

View File

@ -126,6 +126,21 @@ typedef struct d3d10_shader_t
D3D10InputLayout layout; D3D10InputLayout layout;
} d3d10_shader_t; } d3d10_shader_t;
enum d3d10_video_flags
{
D3D10_ST_FLAG_VSYNC = (1 << 0),
D3D10_ST_FLAG_RESIZE_CHAIN = (1 << 1),
D3D10_ST_FLAG_KEEP_ASPECT = (1 << 2),
D3D10_ST_FLAG_RESIZE_VIEWPORT = (1 << 3),
D3D10_ST_FLAG_RESIZE_RTS = (1 << 4), /* RT = Render Target */
D3D10_ST_FLAG_INIT_HISTORY = (1 << 5),
D3D10_ST_FLAG_SPRITES_ENABLE = (1 << 6),
D3D10_ST_FLAG_OVERLAYS_ENABLE = (1 << 7),
D3D10_ST_FLAG_OVERLAYS_FULLSCREEN = (1 << 8),
D3D10_ST_FLAG_MENU_ENABLE = (1 << 9),
D3D10_ST_FLAG_MENU_FULLSCREEN = (1 << 10)
};
typedef struct typedef struct
{ {
unsigned cur_mon_id; unsigned cur_mon_id;
@ -146,12 +161,6 @@ typedef struct
DXGI_FORMAT format; DXGI_FORMAT format;
float clearcolor[4]; float clearcolor[4];
unsigned swap_interval; unsigned swap_interval;
bool vsync;
bool resize_chain;
bool keep_aspect;
bool resize_viewport;
bool resize_render_targets;
bool init_history;
d3d10_shader_t shaders[GFX_MAX_SHADERS]; d3d10_shader_t shaders[GFX_MAX_SHADERS];
#ifdef __WINRT__ #ifdef __WINRT__
DXGIFactory2 factory; DXGIFactory2 factory;
@ -167,7 +176,6 @@ typedef struct
D3D10Buffer vbo; D3D10Buffer vbo;
int offset; int offset;
int capacity; int capacity;
bool enabled;
} sprites; } sprites;
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
@ -175,8 +183,6 @@ typedef struct
{ {
D3D10Buffer vbo; D3D10Buffer vbo;
d3d10_texture_t* textures; d3d10_texture_t* textures;
bool enabled;
bool fullscreen;
int count; int count;
} overlays; } overlays;
#endif #endif
@ -185,8 +191,6 @@ typedef struct
{ {
d3d10_texture_t texture; d3d10_texture_t texture;
D3D10Buffer vbo; D3D10Buffer vbo;
bool enabled;
bool fullscreen;
} menu; } menu;
struct struct
{ {
@ -215,6 +219,7 @@ typedef struct
struct string_list *gpu_list; struct string_list *gpu_list;
IDXGIAdapter1 *adapters[D3D10_MAX_GPU_COUNT]; IDXGIAdapter1 *adapters[D3D10_MAX_GPU_COUNT];
IDXGIAdapter1 *current_adapter; IDXGIAdapter1 *current_adapter;
uint16_t flags;
} d3d10_video_t; } d3d10_video_t;
#if !defined(__cplusplus) || defined(CINTERFACE) #if !defined(__cplusplus) || defined(CINTERFACE)

View File

@ -220,7 +220,10 @@ static void d3d10_overlay_enable(void* data, bool state)
if (!d3d10) if (!d3d10)
return; return;
d3d10->overlays.enabled = state; if (state)
d3d10->flags |= D3D10_ST_FLAG_OVERLAYS_ENABLE;
else
d3d10->flags &= ~D3D10_ST_FLAG_OVERLAYS_ENABLE;
win32_show_cursor(d3d10, state); win32_show_cursor(d3d10, state);
} }
@ -231,7 +234,10 @@ static void d3d10_overlay_full_screen(void* data, bool enable)
if (!d3d10) if (!d3d10)
return; return;
d3d10->overlays.fullscreen = enable; if (enable)
d3d10->flags |= D3D10_ST_FLAG_OVERLAYS_FULLSCREEN;
else
d3d10->flags &= ~D3D10_ST_FLAG_OVERLAYS_FULLSCREEN;
} }
static void d3d10_get_overlay_interface(void* data, const video_overlay_interface_t** iface) static void d3d10_get_overlay_interface(void* data, const video_overlay_interface_t** iface)
@ -248,7 +254,7 @@ static void d3d10_render_overlay(d3d10_video_t *d3d10)
{ {
unsigned i; unsigned i;
if (d3d10->overlays.fullscreen) if (d3d10->flags & D3D10_ST_FLAG_OVERLAYS_FULLSCREEN)
d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->viewport); d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->viewport);
else else
d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->frame.viewport); d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->frame.viewport);
@ -317,7 +323,8 @@ static void d3d10_gfx_set_rotation(void* data, unsigned rotation)
static void d3d10_update_viewport(d3d10_video_t *d3d10, bool force_full) static void d3d10_update_viewport(d3d10_video_t *d3d10, bool force_full)
{ {
video_driver_update_viewport(&d3d10->vp, force_full, d3d10->keep_aspect); video_driver_update_viewport(&d3d10->vp, force_full,
d3d10->flags & D3D10_ST_FLAG_KEEP_ASPECT);
d3d10->frame.viewport.TopLeftX = d3d10->vp.x; d3d10->frame.viewport.TopLeftX = d3d10->vp.x;
d3d10->frame.viewport.TopLeftY = d3d10->vp.y; d3d10->frame.viewport.TopLeftY = d3d10->vp.y;
@ -328,14 +335,13 @@ static void d3d10_update_viewport(d3d10_video_t *d3d10, bool force_full)
if (d3d10->shader_preset && (d3d10->frame.output_size.x != d3d10->vp.width || if (d3d10->shader_preset && (d3d10->frame.output_size.x != d3d10->vp.width ||
d3d10->frame.output_size.y != d3d10->vp.height)) d3d10->frame.output_size.y != d3d10->vp.height))
d3d10->resize_render_targets = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_RTS;
d3d10->frame.output_size.x = d3d10->vp.width; d3d10->frame.output_size.x = d3d10->vp.width;
d3d10->frame.output_size.y = d3d10->vp.height; d3d10->frame.output_size.y = d3d10->vp.height;
d3d10->frame.output_size.z = 1.0f / d3d10->vp.width; d3d10->frame.output_size.z = 1.0f / d3d10->vp.width;
d3d10->frame.output_size.w = 1.0f / d3d10->vp.height; d3d10->frame.output_size.w = 1.0f / d3d10->vp.height;
d3d10->flags &= ~D3D10_ST_FLAG_RESIZE_VIEWPORT;
d3d10->resize_viewport = false;
} }
static void d3d10_free_shader_preset(d3d10_video_t* d3d10) static void d3d10_free_shader_preset(d3d10_video_t* d3d10)
@ -382,8 +388,8 @@ static void d3d10_free_shader_preset(d3d10_video_t* d3d10)
free(d3d10->shader_preset); free(d3d10->shader_preset);
d3d10->shader_preset = NULL; d3d10->shader_preset = NULL;
d3d10->init_history = false; d3d10->flags &= ~(D3D10_ST_FLAG_INIT_HISTORY
d3d10->resize_render_targets = false; | D3D10_ST_FLAG_RESIZE_RTS);
} }
static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const char* path) static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const char* path)
@ -540,8 +546,8 @@ static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const
image_texture_free(&image); image_texture_free(&image);
} }
d3d10->resize_render_targets = true; d3d10->flags |= (D3D10_ST_FLAG_INIT_HISTORY
d3d10->init_history = true; | D3D10_ST_FLAG_RESIZE_RTS);
return true; return true;
@ -750,9 +756,15 @@ static void *d3d10_gfx_init(const video_info_t* video,
video_driver_set_size(d3d10->vp.full_width, d3d10->vp.full_height); video_driver_set_size(d3d10->vp.full_width, d3d10->vp.full_height);
d3d10->viewport.Width = d3d10->vp.full_width; d3d10->viewport.Width = d3d10->vp.full_width;
d3d10->viewport.Height = d3d10->vp.full_height; d3d10->viewport.Height = d3d10->vp.full_height;
d3d10->resize_viewport = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT;
d3d10->keep_aspect = video->force_aspect; if (video->force_aspect)
d3d10->vsync = video->vsync; d3d10->flags |= D3D10_ST_FLAG_KEEP_ASPECT;
else
d3d10->flags &= ~D3D10_ST_FLAG_KEEP_ASPECT;
if (video->vsync)
d3d10->flags |= D3D10_ST_FLAG_VSYNC;
else
d3d10->flags &= ~D3D10_ST_FLAG_VSYNC;
d3d10->format = video->rgb32 ? d3d10->format = video->rgb32 ?
DXGI_FORMAT_B8G8R8X8_UNORM : DXGI_FORMAT_B5G6R5_UNORM; DXGI_FORMAT_B8G8R8X8_UNORM : DXGI_FORMAT_B5G6R5_UNORM;
@ -1134,9 +1146,10 @@ error:
return NULL; return NULL;
} }
static void d3d10_init_history(d3d10_video_t* d3d10, unsigned width, unsigned height) static void d3d10_init_history(d3d10_video_t* d3d10,
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
@ -1153,7 +1166,7 @@ static void d3d10_init_history(d3d10_video_t* d3d10, unsigned width, unsigned he
d3d10_init_texture(d3d10->device, &d3d10->frame.texture[i]); d3d10_init_texture(d3d10->device, &d3d10->frame.texture[i]);
/* TODO/FIXME: clear texture ? */ /* TODO/FIXME: clear texture ? */
} }
d3d10->init_history = false; d3d10->flags &= ~D3D10_ST_FLAG_INIT_HISTORY;
} }
static void d3d10_init_render_targets(d3d10_video_t* d3d10, static void d3d10_init_render_targets(d3d10_video_t* d3d10,
@ -1250,7 +1263,7 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
} }
} }
d3d10->resize_render_targets = false; d3d10->flags &= ~D3D10_ST_FLAG_RESIZE_RTS;
} }
static bool d3d10_gfx_frame( static bool d3d10_gfx_frame(
@ -1280,7 +1293,7 @@ static bool d3d10_gfx_frame(
bool widgets_active = video_info->widgets_active; bool widgets_active = video_info->widgets_active;
#endif #endif
if (d3d10->resize_chain) if (d3d10->flags & D3D10_ST_FLAG_RESIZE_CHAIN)
{ {
D3D10Texture2D backBuffer; D3D10Texture2D backBuffer;
@ -1301,8 +1314,8 @@ static bool d3d10_gfx_frame(
d3d10->ubo_values.OutputSize.width = d3d10->viewport.Width; d3d10->ubo_values.OutputSize.width = d3d10->viewport.Width;
d3d10->ubo_values.OutputSize.height = d3d10->viewport.Height; d3d10->ubo_values.OutputSize.height = d3d10->viewport.Height;
d3d10->resize_chain = false; d3d10->flags &= ~D3D10_ST_FLAG_RESIZE_CHAIN;
d3d10->resize_viewport = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT;
video_driver_set_size(video_width, video_height); video_driver_set_size(video_width, video_height);
} }
@ -1330,13 +1343,12 @@ static bool d3d10_gfx_frame(
{ {
if (d3d10->frame.texture[0].desc.Width != width || if (d3d10->frame.texture[0].desc.Width != width ||
d3d10->frame.texture[0].desc.Height != height) d3d10->frame.texture[0].desc.Height != height)
d3d10->resize_render_targets = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_RTS;
if (d3d10->resize_render_targets) if (d3d10->flags & D3D10_ST_FLAG_RESIZE_RTS)
{ {
unsigned i; int i;
/* Release all render targets first to avoid memory fragmentation */
/* release all render targets first to avoid memory fragmentation */
for (i = 0; i < d3d10->shader_preset->passes; i++) for (i = 0; i < d3d10->shader_preset->passes; i++)
{ {
d3d10_release_texture(&d3d10->pass[i].rt); d3d10_release_texture(&d3d10->pass[i].rt);
@ -1348,7 +1360,7 @@ static bool d3d10_gfx_frame(
if (d3d10->shader_preset->history_size) if (d3d10->shader_preset->history_size)
{ {
if (d3d10->init_history) if (d3d10->flags & D3D10_ST_FLAG_INIT_HISTORY)
d3d10_init_history(d3d10, width, height); d3d10_init_history(d3d10, width, height);
else else
{ {
@ -1373,7 +1385,7 @@ static bool d3d10_gfx_frame(
d3d10_init_texture(d3d10->device, &d3d10->frame.texture[0]); d3d10_init_texture(d3d10->device, &d3d10->frame.texture[0]);
} }
if (d3d10->resize_render_targets) if (d3d10->flags & D3D10_ST_FLAG_RESIZE_RTS)
d3d10_init_render_targets(d3d10, width, height); d3d10_init_render_targets(d3d10, width, height);
if (frame != RETRO_HW_FRAME_BUFFER_VALID) if (frame != RETRO_HW_FRAME_BUFFER_VALID)
@ -1523,9 +1535,10 @@ static bool d3d10_gfx_frame(
context->lpVtbl->OMSetBlendState(context, d3d10->blend_enable, NULL, context->lpVtbl->OMSetBlendState(context, d3d10->blend_enable, NULL,
D3D10_DEFAULT_SAMPLE_MASK); D3D10_DEFAULT_SAMPLE_MASK);
if (d3d10->menu.enabled && d3d10->menu.texture.handle) if ( (d3d10->flags & D3D10_ST_FLAG_MENU_ENABLE)
&& d3d10->menu.texture.handle)
{ {
if (d3d10->menu.fullscreen) if (d3d10->flags & D3D10_ST_FLAG_MENU_FULLSCREEN)
context->lpVtbl->RSSetViewports(context, 1, &d3d10->viewport); context->lpVtbl->RSSetViewports(context, 1, &d3d10->viewport);
d3d10_set_shader(context, &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]); d3d10_set_shader(context, &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]);
@ -1542,16 +1555,17 @@ static bool d3d10_gfx_frame(
context->lpVtbl->PSSetConstantBuffers(context, 0, 1, (ID3D10Buffer ** context->lpVtbl->PSSetConstantBuffers(context, 0, 1, (ID3D10Buffer **
const)&d3d10->ubo); const)&d3d10->ubo);
d3d10->sprites.enabled = true; d3d10->flags |= D3D10_ST_FLAG_SPRITES_ENABLE;
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
if (d3d10->overlays.enabled && overlay_behind_menu) if ( (d3d10->flags & D3D10_ST_FLAG_OVERLAYS_ENABLE)
&& overlay_behind_menu)
d3d10_render_overlay(d3d10); d3d10_render_overlay(d3d10);
#endif #endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
#ifndef HAVE_GFX_WIDGETS #ifndef HAVE_GFX_WIDGETS
if (d3d10->menu.enabled) if (d3d10->flags & D3D10_ST_FLAG_MENU_ENABLE)
#endif #endif
{ {
context->lpVtbl->RSSetViewports(context, 1, &d3d10->viewport); context->lpVtbl->RSSetViewports(context, 1, &d3d10->viewport);
@ -1560,7 +1574,7 @@ static bool d3d10_gfx_frame(
#endif #endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (d3d10->menu.enabled) if (d3d10->flags & D3D10_ST_FLAG_MENU_ENABLE)
menu_driver_frame(menu_is_alive, video_info); menu_driver_frame(menu_is_alive, video_info);
else else
#endif #endif
@ -1580,7 +1594,8 @@ static bool d3d10_gfx_frame(
} }
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
if (d3d10->overlays.enabled && !overlay_behind_menu) if ( (d3d10->flags & D3D10_ST_FLAG_OVERLAYS_ENABLE)
&& !overlay_behind_menu)
d3d10_render_overlay(d3d10); d3d10_render_overlay(d3d10);
#endif #endif
@ -1598,7 +1613,7 @@ static bool d3d10_gfx_frame(
D3D10SetVertexBuffer(d3d10->device, 0, d3d10->sprites.vbo, sizeof(d3d10_sprite_t), 0); D3D10SetVertexBuffer(d3d10->device, 0, d3d10->sprites.vbo, sizeof(d3d10_sprite_t), 0);
font_driver_render_msg(d3d10, msg, NULL, NULL); font_driver_render_msg(d3d10, msg, NULL, NULL);
} }
d3d10->sprites.enabled = false; d3d10->flags &= ~D3D10_ST_FLAG_SPRITES_ENABLE;
#ifndef __WINRT__ #ifndef __WINRT__
win32_update_title(); win32_update_title();
@ -1617,22 +1632,36 @@ static void d3d10_gfx_set_nonblock_state(void* data, bool toggle,
if (!d3d10) if (!d3d10)
return; return;
d3d10->vsync = !toggle; if (toggle)
d3d10->swap_interval = (!toggle) ? swap_interval : 0; {
d3d10->flags &= ~D3D10_ST_FLAG_VSYNC;
d3d10->swap_interval = 0;
}
else
{
d3d10->flags |= D3D10_ST_FLAG_VSYNC;
d3d10->swap_interval = swap_interval;
}
} }
static bool d3d10_gfx_alive(void* data) static bool d3d10_gfx_alive(void* data)
{ {
bool quit; bool quit;
bool resize_chain = false;
d3d10_video_t* d3d10 = (d3d10_video_t*)data; d3d10_video_t* d3d10 = (d3d10_video_t*)data;
win32_check_window(NULL, win32_check_window(NULL,
&quit, &d3d10->resize_chain, &d3d10->vp.full_width, &quit, &resize_chain, &d3d10->vp.full_width,
&d3d10->vp.full_height); &d3d10->vp.full_height);
if ( d3d10->resize_chain if (resize_chain)
&& d3d10->vp.full_width != 0 d3d10->flags |= D3D10_ST_FLAG_RESIZE_CHAIN;
&& d3d10->vp.full_height != 0) else
d3d10->flags &= ~D3D10_ST_FLAG_RESIZE_CHAIN;
if ( (d3d10->flags & D3D10_ST_FLAG_RESIZE_CHAIN)
&& (d3d10->vp.full_width != 0)
&& (d3d10->vp.full_height != 0))
video_driver_set_size(d3d10->vp.full_width, d3d10->vp.full_height); video_driver_set_size(d3d10->vp.full_width, d3d10->vp.full_height);
return !quit; return !quit;
@ -1685,15 +1714,22 @@ static void d3d10_set_menu_texture_frame(
? RARCH_FILTER_LINEAR ? RARCH_FILTER_LINEAR
: RARCH_FILTER_NEAREST][RARCH_WRAP_DEFAULT]; : RARCH_FILTER_NEAREST][RARCH_WRAP_DEFAULT];
} }
static void d3d10_set_menu_texture_enable(void* data, bool state, bool full_screen) static void d3d10_set_menu_texture_enable(
void* data, bool state, bool fullscreen)
{ {
d3d10_video_t* d3d10 = (d3d10_video_t*)data; d3d10_video_t* d3d10 = (d3d10_video_t*)data;
if (!d3d10) if (!d3d10)
return; return;
d3d10->menu.enabled = state; if (state)
d3d10->menu.fullscreen = full_screen; d3d10->flags |= D3D10_ST_FLAG_MENU_ENABLE;
else
d3d10->flags &= ~D3D10_ST_FLAG_MENU_ENABLE;
if (fullscreen)
d3d10->flags |= D3D10_ST_FLAG_MENU_FULLSCREEN;
else
d3d10->flags &= ~D3D10_ST_FLAG_MENU_FULLSCREEN;
} }
static void d3d10_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx) static void d3d10_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx)
@ -1703,16 +1739,15 @@ static void d3d10_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx)
if (!d3d10) if (!d3d10)
return; return;
d3d10->keep_aspect = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT
d3d10->resize_viewport = true; | D3D10_ST_FLAG_KEEP_ASPECT;
} }
static void d3d10_gfx_apply_state_changes(void* data) static void d3d10_gfx_apply_state_changes(void* data)
{ {
d3d10_video_t* d3d10 = (d3d10_video_t*)data; d3d10_video_t* d3d10 = (d3d10_video_t*)data;
if (d3d10) if (d3d10)
d3d10->resize_viewport = true; d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT;
} }
static void d3d10_gfx_set_osd_msg( static void d3d10_gfx_set_osd_msg(
@ -1723,7 +1758,7 @@ static void d3d10_gfx_set_osd_msg(
if (d3d10) if (d3d10)
{ {
if (d3d10->sprites.enabled) if (d3d10->flags & D3D10_ST_FLAG_SPRITES_ENABLE)
font_driver_render_msg(d3d10, msg, font_driver_render_msg(d3d10, msg,
(const struct font_params*)params, font); (const struct font_params*)params, font);
} }

View File

@ -2306,7 +2306,7 @@ D3D11_ST_FLAG_HAS_ALLOW_TEARING)) ? 0 : DXGI_PRESENT_ALLOW_TEARING;
#ifdef HAVE_MENU #ifdef HAVE_MENU
#ifndef HAVE_GFX_WIDGETS #ifndef HAVE_GFX_WIDGETS
if (d3d11->menu.enabled) if (d3d11->flags & D3D11_ST_FLAG_MENU_ENABLE)
#endif #endif
{ {
context->lpVtbl->RSSetViewports(context, 1, &d3d11->viewport); context->lpVtbl->RSSetViewports(context, 1, &d3d11->viewport);

View File

@ -78,7 +78,8 @@ static void gfx_display_d3d10_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 (!d3d10->sprites.enabled || vertex_count > d3d10->sprites.capacity) if ( (!(d3d10->flags & D3D10_ST_FLAG_SPRITES_ENABLE))
|| (vertex_count > d3d10->sprites.capacity))
return; return;
if (d3d10->sprites.offset + vertex_count > d3d10->sprites.capacity) if (d3d10->sprites.offset + vertex_count > d3d10->sprites.capacity)
@ -92,7 +93,7 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
D3D10_MAP_WRITE_NO_OVERWRITE, 0, D3D10_MAP_WRITE_NO_OVERWRITE, 0,
(void**)&mapped_vbo); (void**)&mapped_vbo);
sprite = (d3d10_sprite_t*)mapped_vbo + d3d10->sprites.offset; sprite = (d3d10_sprite_t*)mapped_vbo + d3d10->sprites.offset;
if (vertex_count == 1) if (vertex_count == 1)
{ {
@ -150,7 +151,8 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
sprite++; sprite++;
} }
d3d10_set_shader(d3d10->device, &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]); d3d10_set_shader(d3d10->device,
&d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]);
d3d10->device->lpVtbl->IASetPrimitiveTopology(d3d10->device, d3d10->device->lpVtbl->IASetPrimitiveTopology(d3d10->device,
D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
} }
@ -158,7 +160,8 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
d3d10->sprites.vbo->lpVtbl->Unmap(d3d10->sprites.vbo); d3d10->sprites.vbo->lpVtbl->Unmap(d3d10->sprites.vbo);
} }
d3d10_set_texture_and_sampler(d3d10->device, 0, (d3d10_texture_t*)draw->texture); d3d10_set_texture_and_sampler(d3d10->device, 0,
(d3d10_texture_t*)draw->texture);
d3d10->device->lpVtbl->Draw(d3d10->device, vertex_count, d3d10->device->lpVtbl->Draw(d3d10->device, vertex_count,
d3d10->sprites.offset); d3d10->sprites.offset);
d3d10->sprites.offset += vertex_count; d3d10->sprites.offset += vertex_count;
@ -169,8 +172,6 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
d3d10->device->lpVtbl->IASetPrimitiveTopology(d3d10->device, d3d10->device->lpVtbl->IASetPrimitiveTopology(d3d10->device,
D3D10_PRIMITIVE_TOPOLOGY_POINTLIST); D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);
} }
return;
} }
static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw, static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw,
@ -206,7 +207,8 @@ static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw,
d3d10->device->lpVtbl->CreateBuffer(d3d10->device, &desc, d3d10->device->lpVtbl->CreateBuffer(d3d10->device, &desc,
&vertex_data, &d3d10->menu_pipeline_vbo); &vertex_data, &d3d10->menu_pipeline_vbo);
} }
D3D10SetVertexBuffer(d3d10->device, 0, d3d10->menu_pipeline_vbo, 2 * sizeof(float), 0); D3D10SetVertexBuffer(d3d10->device, 0,
d3d10->menu_pipeline_vbo, 2 * sizeof(float), 0);
draw->coords->vertices = ca->coords.vertices; draw->coords->vertices = ca->coords.vertices;
d3d10->device->lpVtbl->OMSetBlendState(d3d10->device, d3d10->device->lpVtbl->OMSetBlendState(d3d10->device,
d3d10->blend_pipeline, d3d10->blend_pipeline,
@ -218,7 +220,8 @@ static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw,
case VIDEO_SHADER_MENU_4: case VIDEO_SHADER_MENU_4:
case VIDEO_SHADER_MENU_5: case VIDEO_SHADER_MENU_5:
case VIDEO_SHADER_MENU_6: case VIDEO_SHADER_MENU_6:
D3D10SetVertexBuffer(d3d10->device, 0, d3d10->frame.vbo, sizeof(d3d10_vertex_t), 0); D3D10SetVertexBuffer(d3d10->device, 0,
d3d10->frame.vbo, sizeof(d3d10_vertex_t), 0);
draw->coords->vertices = 4; draw->coords->vertices = 4;
break; break;
default: default:

View File

@ -243,12 +243,12 @@ static void d3d10_font_render_message(
if (!msg || !*msg) if (!msg || !*msg)
return; return;
if (!d3d10 || !d3d10->sprites.enabled) if (!d3d10 || (!(d3d10->flags & D3D10_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 */
if (!font->font_driver->get_line_metrics || if ( !font->font_driver->get_line_metrics
!font->font_driver->get_line_metrics(font->font_data, &line_metrics)) || !font->font_driver->get_line_metrics(font->font_data, &line_metrics))
{ {
size_t msg_len = strlen(msg); size_t msg_len = strlen(msg);
if (msg_len <= (unsigned)d3d10->sprites.capacity) if (msg_len <= (unsigned)d3d10->sprites.capacity)