From 4b8228e84e1d702235a12b244dff096b5257ae4d Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 12 Mar 2025 16:28:15 +0100 Subject: [PATCH 1/5] renderer: add SILENTLY_CHECK_EXTENSION() macro --- src/engine/sys/sdl_glimp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index 33e160b633..367bdbb0be 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -1970,6 +1970,8 @@ static bool LoadExt( int flags, bool hasExt, const char* name, bool test = true return false; } +#define SILENTLY_CHECK_EXTENSION( ext ) ( GLEW_##ext ) + #define LOAD_EXTENSION(flags, ext) LoadExt(flags, GLEW_##ext, #ext) #define LOAD_EXTENSION_WITH_TEST(flags, ext, test) LoadExt(flags, GLEW_##ext, #ext, test) From dd93ddb298548cf0095bccbce0a93a6833b4ab98 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 12 Mar 2025 01:45:57 +0100 Subject: [PATCH 2/5] renderer: disable EXT_gpu_shader4 on GLSL 1.20 EXT_gpu_shader4 behaves slightly differently on GLSL 1.20. See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12803#note_2819461 --- src/engine/sys/sdl_glimp.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index 367bdbb0be..96643eec85 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -179,6 +179,10 @@ static Cvar::Cvar workaround_glExtension_glsl120_disableShaderDrawParamete "workaround.glExtension.glsl120.disableShaderDrawParameters", "Disable ARB_shader_draw_parameters on GLSL 1.20", Cvar::NONE, true ); +static Cvar::Cvar workaround_glExtension_glsl120_disableGpuShader4( + "workaround.glExtension.glsl120.disableGpuShader4", + "Disable EXT_gpu_shader4 on GLSL 1.20", + Cvar::NONE, true ); static Cvar::Cvar workaround_glHardware_intel_useFirstProvokinVertex( "workaround.glHardware.intel.useFirstProvokinVertex", "Use first provoking vertex on Intel hardware supporting ARB_provoking_vertex", @@ -2173,8 +2177,21 @@ static void GLimp_InitExtensions() } } + bool gpuShader4Enabled = r_ext_gpu_shader4.Get(); + + if ( gpuShader4Enabled + && SILENTLY_CHECK_EXTENSION( EXT_gpu_shader4 ) + && glConfig2.shadingLanguageVersion <= 120 + && workaround_glExtension_glsl120_disableGpuShader4.Get() ) + { + // EXT_gpu_shader4 behaves slightly differently when running on GLSL 1.20. + // See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12803#note_2819461 + logger.Warn( "Found EXT_gpu_shader4 with incompatible GLSL 1.20, disabling EXT_gpu_shader4." ); + gpuShader4Enabled = false; + } + // made required in OpenGL 3.0 - glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST( ExtFlag_CORE, EXT_gpu_shader4, r_ext_gpu_shader4.Get() ); + glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST( ExtFlag_CORE, EXT_gpu_shader4, gpuShader4Enabled ); // made required in OpenGL 4.0 glConfig2.gpuShader5Available = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_gpu_shader5, r_arb_gpu_shader5.Get() ); @@ -2687,6 +2704,7 @@ bool GLimp_Init() Cvar::Latch( workaround_glDriver_nvidia_v340_disableTextureGather ); Cvar::Latch( workaround_glExtension_missingArbFbo_useExtFbo ); Cvar::Latch( workaround_glExtension_glsl120_disableShaderDrawParameters ); + Cvar::Latch( workaround_glExtension_glsl120_disableGpuShader4 ); Cvar::Latch( workaround_glHardware_intel_useFirstProvokinVertex ); /* Enable S3TC on Mesa even if libtxc-dxtn is not available From d40a895a53e887f805327e35c6a8017cebfa5925 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 12 Mar 2025 13:57:04 +0100 Subject: [PATCH 3/5] renderer: minor touchup on ARB_shader_draw_parameters enablement --- src/engine/sys/sdl_glimp.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index 96643eec85..ef3b953143 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -2545,20 +2545,19 @@ static void GLimp_InitExtensions() glConfig2.bindlessTexturesAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_bindless_texture, bindlessTextureEnabled ); } - // made required in OpenGL 4.6 - - bool ShaderDrawParametersEnabled = r_arb_shader_draw_parameters.Get(); + bool shaderDrawParametersEnabled = r_arb_shader_draw_parameters.Get(); - if ( ShaderDrawParametersEnabled - && GL_ARB_shader_draw_parameters + if ( shaderDrawParametersEnabled + && SILENTLY_CHECK_EXTENSION( ARB_shader_draw_parameters ) && glConfig2.shadingLanguageVersion <= 120 && workaround_glExtension_glsl120_disableShaderDrawParameters.Get() ) { logger.Warn( "Found ARB_shader_draw_parameters with incompatible GLSL 1.20, disabling ARB_shader_draw_parameters." ); - ShaderDrawParametersEnabled = false; + shaderDrawParametersEnabled = false; } - glConfig2.shaderDrawParametersAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_shader_draw_parameters, ShaderDrawParametersEnabled ); + // made required in OpenGL 4.6 + glConfig2.shaderDrawParametersAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_shader_draw_parameters, shaderDrawParametersEnabled ); // made required in OpenGL 4.3 glConfig2.SSBOAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_shader_storage_buffer_object, r_arb_shader_storage_buffer_object.Get() ); From e1e0b2e5c5c9c668dc728f8da8e31e263d804063 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 12 Mar 2025 16:33:16 +0100 Subject: [PATCH 4/5] renderer: minor touchup on the occulusion query stub enablement --- src/engine/sys/sdl_glimp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index ef3b953143..1f8ea4b77c 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -161,7 +161,7 @@ static Cvar::Cvar workaround_glDriver_mesa_intel_gma3_forceFragmentShader( Cvar::NONE, true ); static Cvar::Cvar workaround_glDriver_mesa_intel_gma3_stubOcclusionQuery( "workaround.glDriver.mesa.intel.gma3.stubOcclusionQuery", - "stub out occlusion query on Intel GMA Gen 3 hardware", + "Stub out occlusion query on Intel GMA Gen 3 hardware", Cvar::NONE, true ); static Cvar::Cvar workaround_glDriver_mesa_v241_disableBindlessTexture( "workaround.glDriver.mesa.v241.disableBindlessTexture", From 504beb76337687795b803034ffc7c10ebe7d166a Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 12 Mar 2025 17:07:42 +0100 Subject: [PATCH 5/5] renderer: reword the KHR_shader_subgroup test --- src/engine/sys/sdl_glimp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index 1f8ea4b77c..747036b06b 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -2600,7 +2600,7 @@ static void GLimp_InitExtensions() && glConfig2.geometryCacheAvailable; // This requires GLEW 2.2+, so skip if it's a lower version -#ifdef GL_KHR_shader_subgroup +#if defined(GLEW_KHR_shader_subgroup) // not required by any OpenGL version glConfig2.shaderSubgroupAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, KHR_shader_subgroup, r_khr_shader_subgroup.Get() );