(shaders) Avoid certain shader types when context isn't compatible.
@bparker06 to the rescue.
This commit is contained in:
parent
23fe08cb4b
commit
4a9325d01d
|
@ -212,6 +212,8 @@ static gfx_ctx_driver_t current_video_context;
|
|||
|
||||
static void *video_context_data = NULL;
|
||||
|
||||
static enum gfx_ctx_api current_video_context_api = GFX_CTX_NONE;
|
||||
|
||||
shader_backend_t *current_shader = NULL;
|
||||
void *shader_data = NULL;
|
||||
|
||||
|
@ -2718,6 +2720,9 @@ static const gfx_ctx_driver_t *video_context_driver_init(
|
|||
video_info.shared_context && hw_render_ctx);
|
||||
|
||||
video_context_driver_set_data(ctx_data);
|
||||
|
||||
current_video_context_api = api;
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
@ -3012,6 +3017,11 @@ bool video_context_driver_set_flags(gfx_ctx_flags_t *flags)
|
|||
return true;
|
||||
}
|
||||
|
||||
enum gfx_ctx_api video_context_driver_get_api(void)
|
||||
{
|
||||
return current_video_context_api;
|
||||
}
|
||||
|
||||
bool video_driver_has_windowed(void)
|
||||
{
|
||||
#if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE)
|
||||
|
|
|
@ -1208,6 +1208,8 @@ bool video_context_driver_translate_aspect(gfx_ctx_aspect_t *aspect);
|
|||
|
||||
bool video_context_driver_input_driver(gfx_ctx_input_t *inp);
|
||||
|
||||
enum gfx_ctx_api video_context_driver_get_api(void);
|
||||
|
||||
void video_context_driver_free(void);
|
||||
|
||||
bool video_shader_driver_get_prev_textures(video_shader_ctx_texture_t *texture);
|
||||
|
|
|
@ -1083,23 +1083,51 @@ enum rarch_shader_type video_shader_parse_type(const char *path,
|
|||
if (!path)
|
||||
return fallback;
|
||||
|
||||
enum rarch_shader_type shader_type = RARCH_SHADER_NONE;
|
||||
switch (msg_hash_to_file_type(
|
||||
msg_hash_calculate(path_get_extension(path))))
|
||||
{
|
||||
|
||||
case FILE_TYPE_SHADER_CG:
|
||||
case FILE_TYPE_SHADER_PRESET_CGP:
|
||||
return RARCH_SHADER_CG;
|
||||
shader_type = RARCH_SHADER_CG;
|
||||
break;
|
||||
case FILE_TYPE_SHADER_GLSL:
|
||||
case FILE_TYPE_SHADER_PRESET_GLSLP:
|
||||
return RARCH_SHADER_GLSL;
|
||||
shader_type = RARCH_SHADER_GLSL;
|
||||
break;
|
||||
case FILE_TYPE_SHADER_SLANG:
|
||||
case FILE_TYPE_SHADER_PRESET_SLANGP:
|
||||
return RARCH_SHADER_SLANG;
|
||||
shader_type = RARCH_SHADER_SLANG;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return fallback;
|
||||
enum gfx_ctx_api api = video_context_driver_get_api();
|
||||
|
||||
|
||||
switch (api)
|
||||
{
|
||||
case GFX_CTX_OPENGL_API:
|
||||
if (shader_type == RARCH_SHADER_GLSL || shader_type == RARCH_SHADER_CG)
|
||||
return shader_type;
|
||||
case GFX_CTX_OPENGL_ES_API:
|
||||
if (shader_type == RARCH_SHADER_GLSL)
|
||||
return shader_type;
|
||||
case GFX_CTX_DIRECT3D9_API:
|
||||
if (shader_type == RARCH_SHADER_CG)
|
||||
return shader_type;
|
||||
case GFX_CTX_VULKAN_API:
|
||||
if (shader_type == RARCH_SHADER_SLANG)
|
||||
return fallback;
|
||||
case GFX_CTX_NONE:
|
||||
case GFX_CTX_GDI_API:
|
||||
case GFX_CTX_OPENVG_API:
|
||||
case GFX_CTX_DIRECT3D8_API:
|
||||
default:
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue