@@ -179,6 +179,10 @@ static Cvar::Cvar<bool> workaround_glExtension_glsl120_disableShaderDrawParamete
179179 " workaround.glExtension.glsl120.disableShaderDrawParameters" ,
180180 " Disable ARB_shader_draw_parameters on GLSL 1.20" ,
181181 Cvar::NONE, true );
182+ static Cvar::Cvar<bool > workaround_glExtension_glsl120_disableGpuShader4 (
183+ " workaround.glExtension.glsl120.disableGpuShader4" ,
184+ " Disable EXT_gpu_shader4 on GLSL 1.20" ,
185+ Cvar::NONE, true );
182186static Cvar::Cvar<bool > workaround_glHardware_intel_useFirstProvokinVertex (
183187 " workaround.glHardware.intel.useFirstProvokinVertex" ,
184188 " Use first provoking vertex on Intel hardware supporting ARB_provoking_vertex" ,
@@ -2171,8 +2175,21 @@ static void GLimp_InitExtensions()
21712175 }
21722176 }
21732177
2178+ bool gpuShader4Enabled = r_arb_shader_draw_parameters.Get ();
2179+
2180+ if ( gpuShader4Enabled
2181+ && GL_EXT_gpu_shader4
2182+ && glConfig2.shadingLanguageVersion <= 120
2183+ && workaround_glExtension_glsl120_disableGpuShader4.Get () )
2184+ {
2185+ // EXT_gpu_shader4 behaves slightly differently when running on GLSL 1.20.
2186+ // See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12803#note_2819461
2187+ logger.Warn ( " Found EXT_gpu_shader4 with incompatible GLSL 1.20, disabling EXT_gpu_shader4." );
2188+ gpuShader4Enabled = false ;
2189+ }
2190+
21742191 // made required in OpenGL 3.0
2175- glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_CORE, EXT_gpu_shader4, r_ext_gpu_shader4. Get () );
2192+ glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_CORE, EXT_gpu_shader4, gpuShader4Enabled );
21762193
21772194 // made required in OpenGL 4.0
21782195 glConfig2.gpuShader5Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_NONE, ARB_gpu_shader5, r_arb_gpu_shader5.Get () );
@@ -2684,6 +2701,7 @@ bool GLimp_Init()
26842701 Cvar::Latch ( workaround_glDriver_nvidia_v340_disableTextureGather );
26852702 Cvar::Latch ( workaround_glExtension_missingArbFbo_useExtFbo );
26862703 Cvar::Latch ( workaround_glExtension_glsl120_disableShaderDrawParameters );
2704+ Cvar::Latch ( workaround_glExtension_glsl120_disableGpuShader4 );
26872705 Cvar::Latch ( workaround_glHardware_intel_useFirstProvokinVertex );
26882706
26892707 /* Enable S3TC on Mesa even if libtxc-dxtn is not available
0 commit comments