mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
(D3D10) Turn boolean variables into flags
This commit is contained in:
parent
56ad3fa091
commit
7aa8c6bb11
@ -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)
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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:
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user