From 662b473e9fa9e2046b8784279337bece6d925e51 Mon Sep 17 00:00:00 2001 From: LazyBumHorse Date: Sat, 25 May 2019 12:32:34 +0200 Subject: [PATCH 1/2] don't hardcode shader cross compilation target version but poll it --- gfx/drivers_shader/shader_gl_core.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/gfx/drivers_shader/shader_gl_core.cpp b/gfx/drivers_shader/shader_gl_core.cpp index 087b4328e9..8fbddca1fe 100644 --- a/gfx/drivers_shader/shader_gl_core.cpp +++ b/gfx/drivers_shader/shader_gl_core.cpp @@ -85,6 +85,26 @@ static GLuint gl_core_compile_shader(GLenum stage, const char *source) return shader; } +static uint32_t gl_core_get_cross_compiler_target_version() +{ + const char *version = (const char*)glGetString(GL_VERSION); + unsigned major = 0; + unsigned minor = 0; + unsigned patch = 0; + +#ifdef HAVE_OPENGLES3 + if (version && sscanf(version, "OpenGL ES %u.%u.%u", &major, &minor, &patch) < 2) + return 300u; +#else + if (version && sscanf(version, "%u.%u.%u", &major, &minor, &patch) < 2) + return 150u; +#endif + if (major == 3u && minor == 2u) + return 150u; + + return 100u * major + 10u * minor + patch; +} + GLuint gl_core_cross_compile_program( const uint32_t *vertex, size_t vertex_size, const uint32_t *fragment, size_t fragment_size, @@ -100,11 +120,10 @@ GLuint gl_core_cross_compile_program( spirv_cross::CompilerGLSL::Options opts; #ifdef HAVE_OPENGLES3 opts.es = true; - opts.version = 300; #else opts.es = false; - opts.version = 150; #endif + opts.version = gl_core_get_cross_compiler_target_version(); opts.fragment.default_float_precision = spirv_cross::CompilerGLSL::Options::Precision::Highp; opts.fragment.default_int_precision = spirv_cross::CompilerGLSL::Options::Precision::Highp; opts.enable_420pack_extension = false; From 9894f48fb07a20e069a275e63427f5d7625b0232 Mon Sep 17 00:00:00 2001 From: LazyBumHorse <31176526+LazyBumHorse@users.noreply.github.com> Date: Sat, 25 May 2019 13:10:13 +0200 Subject: [PATCH 2/2] added paranoid NULL check --- gfx/drivers_shader/shader_gl_core.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gfx/drivers_shader/shader_gl_core.cpp b/gfx/drivers_shader/shader_gl_core.cpp index 8fbddca1fe..e3320cb5fa 100644 --- a/gfx/drivers_shader/shader_gl_core.cpp +++ b/gfx/drivers_shader/shader_gl_core.cpp @@ -93,10 +93,10 @@ static uint32_t gl_core_get_cross_compiler_target_version() unsigned patch = 0; #ifdef HAVE_OPENGLES3 - if (version && sscanf(version, "OpenGL ES %u.%u.%u", &major, &minor, &patch) < 2) + if (!version || sscanf(version, "OpenGL ES %u.%u.%u", &major, &minor, &patch) < 2) return 300u; #else - if (version && sscanf(version, "%u.%u.%u", &major, &minor, &patch) < 2) + if (!version || sscanf(version, "%u.%u.%u", &major, &minor, &patch) < 2) return 150u; #endif if (major == 3u && minor == 2u)