@@ -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" ,
@@ -2173,8 +2177,21 @@ static void GLimp_InitExtensions()
21732177 }
21742178 }
21752179
2180+ bool gpuShader4Enabled = r_ext_gpu_shader4.Get ();
2181+
2182+ if ( gpuShader4Enabled
2183+ && SILENTLY_CHECK_EXTENSION ( EXT_gpu_shader4 )
2184+ && glConfig2.shadingLanguageVersion <= 120
2185+ && workaround_glExtension_glsl120_disableGpuShader4.Get () )
2186+ {
2187+ // EXT_gpu_shader4 behaves slightly differently when running on GLSL 1.20.
2188+ // See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12803#note_2819461
2189+ logger.Warn ( " Found EXT_gpu_shader4 with incompatible GLSL 1.20, disabling EXT_gpu_shader4." );
2190+ gpuShader4Enabled = false ;
2191+ }
2192+
21762193 // made required in OpenGL 3.0
2177- glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_CORE, EXT_gpu_shader4, r_ext_gpu_shader4. Get () );
2194+ glConfig2.gpuShader4Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_CORE, EXT_gpu_shader4, gpuShader4Enabled );
21782195
21792196 // made required in OpenGL 4.0
21802197 glConfig2.gpuShader5Available = LOAD_EXTENSION_WITH_TEST ( ExtFlag_NONE, ARB_gpu_shader5, r_arb_gpu_shader5.Get () );
@@ -2687,6 +2704,7 @@ bool GLimp_Init()
26872704 Cvar::Latch ( workaround_glDriver_nvidia_v340_disableTextureGather );
26882705 Cvar::Latch ( workaround_glExtension_missingArbFbo_useExtFbo );
26892706 Cvar::Latch ( workaround_glExtension_glsl120_disableShaderDrawParameters );
2707+ Cvar::Latch ( workaround_glExtension_glsl120_disableGpuShader4 );
26902708 Cvar::Latch ( workaround_glHardware_intel_useFirstProvokinVertex );
26912709
26922710 /* Enable S3TC on Mesa even if libtxc-dxtn is not available
0 commit comments