mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 14:42:30 +00:00
d3d9: add Cg/HLSL shader runtime check depending on the used renderchain
This commit is contained in:
parent
17ec59ff21
commit
c4530eb3f4
@ -75,6 +75,7 @@ static uint32_t d3d9_get_flags(void *data);
|
|||||||
static bool d3d9_set_shader(void *data, enum rarch_shader_type type, const char *path);
|
static bool d3d9_set_shader(void *data, enum rarch_shader_type type, const char *path);
|
||||||
|
|
||||||
static LPDIRECT3D9 g_pD3D9;
|
static LPDIRECT3D9 g_pD3D9;
|
||||||
|
static enum rarch_shader_type supported_shader_type = RARCH_SHADER_NONE;
|
||||||
|
|
||||||
void *dinput;
|
void *dinput;
|
||||||
|
|
||||||
@ -155,7 +156,8 @@ static bool renderchain_d3d_init_first(
|
|||||||
{
|
{
|
||||||
case GFX_CTX_DIRECT3D9_API:
|
case GFX_CTX_DIRECT3D9_API:
|
||||||
{
|
{
|
||||||
static const d3d9_renderchain_driver_t *renderchain_d3d_drivers[] = {
|
static const d3d9_renderchain_driver_t *renderchain_d3d_drivers[] =
|
||||||
|
{
|
||||||
#if defined(_WIN32) && defined(HAVE_CG)
|
#if defined(_WIN32) && defined(HAVE_CG)
|
||||||
&cg_d3d9_renderchain,
|
&cg_d3d9_renderchain,
|
||||||
#endif
|
#endif
|
||||||
@ -175,6 +177,12 @@ static bool renderchain_d3d_init_first(
|
|||||||
|
|
||||||
*renderchain_driver = renderchain_d3d_drivers[i];
|
*renderchain_driver = renderchain_d3d_drivers[i];
|
||||||
*renderchain_handle = data;
|
*renderchain_handle = data;
|
||||||
|
|
||||||
|
if (string_is_equal(renderchain_d3d_drivers[i]->ident, "cg_d3d9"))
|
||||||
|
supported_shader_type = RARCH_SHADER_CG;
|
||||||
|
else if (string_is_equal(renderchain_d3d_drivers[i]->ident, "hlsl_d3d9"))
|
||||||
|
supported_shader_type = RARCH_SHADER_HLSL;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -381,7 +389,7 @@ static bool d3d9_init_multipass(d3d9_video_t *d3d, const char *shader_path)
|
|||||||
if (!video_shader_read_conf_preset(conf, &d3d->shader))
|
if (!video_shader_read_conf_preset(conf, &d3d->shader))
|
||||||
{
|
{
|
||||||
config_file_free(conf);
|
config_file_free(conf);
|
||||||
RARCH_ERR("[D3D9]: Failed to parse CGP file.\n");
|
RARCH_ERR("[D3D9]: Failed to parse shader preset.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,8 +442,7 @@ static bool d3d9_init_multipass(d3d9_video_t *d3d, const char *shader_path)
|
|||||||
static bool d3d9_process_shader(d3d9_video_t *d3d)
|
static bool d3d9_process_shader(d3d9_video_t *d3d)
|
||||||
{
|
{
|
||||||
const char *shader_path = d3d->shader_path;
|
const char *shader_path = d3d->shader_path;
|
||||||
if (d3d && !string_is_empty(shader_path) &&
|
if (d3d && !string_is_empty(shader_path))
|
||||||
string_is_equal(path_get_extension(shader_path), "cgp"))
|
|
||||||
return d3d9_init_multipass(d3d, shader_path);
|
return d3d9_init_multipass(d3d, shader_path);
|
||||||
|
|
||||||
return d3d9_init_singlepass(d3d);
|
return d3d9_init_singlepass(d3d);
|
||||||
@ -1273,6 +1280,11 @@ static bool d3d9_init_internal(d3d9_video_t *d3d,
|
|||||||
windowed_full, &rect);
|
windowed_full, &rect);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
d3d->video_info = *info;
|
||||||
|
|
||||||
|
if (!d3d9_initialize(d3d, &d3d->video_info))
|
||||||
|
return false;
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *shader_preset;
|
const char *shader_preset;
|
||||||
enum rarch_shader_type type;
|
enum rarch_shader_type type;
|
||||||
@ -1286,11 +1298,6 @@ static bool d3d9_init_internal(d3d9_video_t *d3d,
|
|||||||
d3d9_set_shader(d3d, type, shader_preset);
|
d3d9_set_shader(d3d, type, shader_preset);
|
||||||
}
|
}
|
||||||
|
|
||||||
d3d->video_info = *info;
|
|
||||||
|
|
||||||
if (!d3d9_initialize(d3d, &d3d->video_info))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
d3d_input_driver(settings->arrays.input_joypad_driver,
|
d3d_input_driver(settings->arrays.input_joypad_driver,
|
||||||
settings->arrays.input_joypad_driver, input, input_data);
|
settings->arrays.input_joypad_driver, input, input_data);
|
||||||
|
|
||||||
@ -1814,8 +1821,17 @@ static bool d3d9_set_shader(void *data,
|
|||||||
{
|
{
|
||||||
case RARCH_SHADER_CG:
|
case RARCH_SHADER_CG:
|
||||||
case RARCH_SHADER_HLSL:
|
case RARCH_SHADER_HLSL:
|
||||||
|
|
||||||
|
if (type != supported_shader_type)
|
||||||
|
{
|
||||||
|
RARCH_WARN("[D3D9]: Shader preset %s is using unsupported shader type %s, falling back to stock %s.\n",
|
||||||
|
path, video_shader_to_str(type), video_shader_to_str(supported_shader_type));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (!string_is_empty(path))
|
if (!string_is_empty(path))
|
||||||
d3d->shader_path = strdup(path);
|
d3d->shader_path = strdup(path);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case RARCH_SHADER_NONE:
|
case RARCH_SHADER_NONE:
|
||||||
break;
|
break;
|
||||||
@ -2034,7 +2050,11 @@ static uint32_t d3d9_get_flags(void *data)
|
|||||||
|
|
||||||
BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION);
|
BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION);
|
||||||
BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING);
|
BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING);
|
||||||
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_CG);
|
|
||||||
|
if (supported_shader_type == RARCH_SHADER_CG)
|
||||||
|
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_CG);
|
||||||
|
else if (supported_shader_type == RARCH_SHADER_HLSL)
|
||||||
|
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_HLSL);
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user