From dadb32c59a2a2b6b4c517c0fc5d749a175645910 Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 20 Aug 2025 13:04:52 -0500 Subject: [PATCH 1/5] Clean up remnants of non-UBO lighting code --- src/engine/renderer/gl_shader.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 9cd47f29ce..69bb0f7578 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2477,9 +2477,6 @@ void GLShader_lightMapping::SetShaderProgramUniforms( ShaderProgramDescriptor *s glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap0" ), BIND_ENVIRONMENTMAP0 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap1" ), BIND_ENVIRONMENTMAP1 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightTiles" ), BIND_LIGHTTILES ); - if( !glConfig2.uniformBufferObjectAvailable ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_Lights" ), BIND_LIGHTS ); - } } GLShader_lightMappingMaterial::GLShader_lightMappingMaterial() : @@ -2539,9 +2536,6 @@ void GLShader_lightMappingMaterial::SetShaderProgramUniforms( ShaderProgramDescr glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap0" ), BIND_ENVIRONMENTMAP0 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap1" ), BIND_ENVIRONMENTMAP1 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightTiles" ), BIND_LIGHTTILES ); - if ( !glConfig2.uniformBufferObjectAvailable ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_Lights" ), BIND_LIGHTS ); - } } GLShader_reflection::GLShader_reflection(): @@ -2989,10 +2983,6 @@ GLShader_lighttile::GLShader_lighttile() : void GLShader_lighttile::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) { glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); - - if( !glConfig2.uniformBufferObjectAvailable ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_Lights" ), 1 ); - } } GLShader_fxaa::GLShader_fxaa() : From b78db1f74bb4d31b347ec8356ab7757d2dd3c819 Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 20 Aug 2025 12:50:06 -0500 Subject: [PATCH 2/5] Fix lighttile shader texture bindings In bindful texture mode the wrong image was being used for the depth image: depthtile1RenderImage instead of the intended depthtile2RenderImage. Fixes #1734. --- src/engine/renderer/gl_shader.cpp | 2 +- src/engine/renderer/tr_backend.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 69bb0f7578..a5f3398f33 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2982,7 +2982,7 @@ GLShader_lighttile::GLShader_lighttile() : void GLShader_lighttile::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); + glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthTile2" ), 0 ); } GLShader_fxaa::GLShader_fxaa() : diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index b6469cdff0..eb9392daa6 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -1306,7 +1306,7 @@ void RB_RenderPostDepthLightTile() gl_lighttileShader->SetUniformBlock_Lights( tr.dlightUBO ); gl_lighttileShader->SetUniform_DepthTile2Bindless( - GL_BindToTMU( 1, tr.depthtile2RenderImage ) + GL_BindToTMU( 0, tr.depthtile2RenderImage ) ); R_BindVBO( tr.lighttileVBO ); From 70f53c6eaa22e39b537eaf092c6c53c061a51d80 Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 20 Aug 2025 18:07:53 -0500 Subject: [PATCH 3/5] Fix inconsequential texture binding mistakes Mistakes with texture binding that didn't break anything: - Heat haze doesn't really use height map - 2 shaders used the wrong uniform name when attempting to assign a texture uniform to unit 0, but unit 0 is the default so it didn't matter. --- src/engine/renderer/gl_shader.cpp | 8 ++------ src/engine/renderer/gl_shader.h | 2 -- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index a5f3398f33..1a0a123b6b 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2564,7 +2564,7 @@ GLShader_reflection::GLShader_reflection(): void GLShader_reflection::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); + glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMapCube" ), 0 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 1 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } @@ -2694,7 +2694,6 @@ GLShader_heatHaze::GLShader_heatHaze() : false, "heatHaze", "heatHaze" ), u_CurrentMap( this ), u_NormalMap( this ), - u_HeightMap( this ), u_TextureMatrix( this ), u_DeformMagnitude( this ), u_ModelViewProjectionMatrix( this ), @@ -2713,7 +2712,6 @@ void GLShader_heatHaze::SetShaderProgramUniforms( ShaderProgramDescriptor *shade { glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 0 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 1 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } GLShader_heatHazeMaterial::GLShader_heatHazeMaterial() : @@ -2721,7 +2719,6 @@ GLShader_heatHazeMaterial::GLShader_heatHazeMaterial() : true, "heatHaze", "heatHaze" ), u_CurrentMap( this ), u_NormalMap( this ), - u_HeightMap( this ), u_TextureMatrix( this ), u_DeformEnable( this ), u_DeformMagnitude( this ), @@ -2736,7 +2733,6 @@ GLShader_heatHazeMaterial::GLShader_heatHazeMaterial() : void GLShader_heatHazeMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 0 ); glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 1 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } GLShader_screen::GLShader_screen() : @@ -2965,7 +2961,7 @@ GLShader_depthtile2::GLShader_depthtile2() : void GLShader_depthtile2::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); + glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthTile1" ), 0 ); } GLShader_lighttile::GLShader_lighttile() : diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 0719d6b1a6..11fb31155b 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -3510,7 +3510,6 @@ class GLShader_heatHaze : public GLShader, public u_CurrentMap, public u_NormalMap, - public u_HeightMap, public u_TextureMatrix, public u_DeformMagnitude, public u_ModelViewProjectionMatrix, @@ -3532,7 +3531,6 @@ class GLShader_heatHazeMaterial : public GLShader, public u_CurrentMap, public u_NormalMap, - public u_HeightMap, public u_TextureMatrix, public u_DeformEnable, public u_DeformMagnitude, From 385156abd021a463d4067582b60136de0383d02a Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 20 Aug 2025 14:10:27 -0500 Subject: [PATCH 4/5] Remove SetShaderProgramUniforms from material shaders SetShaderProgramUniforms is an overridable function of GLShader used to configure texture mapping units. Material system implies bindless textures meaning TMUs are not used, so material system shaders should not implement that function. --- src/engine/renderer/gl_shader.cpp | 53 ------------------------------- src/engine/renderer/gl_shader.h | 8 ----- 2 files changed, 61 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 1a0a123b6b..30edbbc992 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2407,11 +2407,6 @@ GLShader_genericMaterial::GLShader_genericMaterial() : GLCompileMacro_USE_DEPTH_FADE( this ) { } -void GLShader_genericMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 1 ); -} - GLShader_lightMapping::GLShader_lightMapping() : GLShader( "lightMapping", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, false, "lightMapping", "lightMapping" ), @@ -2525,19 +2520,6 @@ GLShader_lightMappingMaterial::GLShader_lightMappingMaterial() : GLCompileMacro_USE_PHYSICAL_MAPPING( this ) { } -void GLShader_lightMappingMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DiffuseMap" ), BIND_DIFFUSEMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), BIND_NORMALMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), BIND_HEIGHTMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_MaterialMap" ), BIND_MATERIALMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightMap" ), BIND_LIGHTMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DeluxeMap" ), BIND_DELUXEMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_GlowMap" ), BIND_GLOWMAP ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap0" ), BIND_ENVIRONMENTMAP0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_EnvironmentMap1" ), BIND_ENVIRONMENTMAP1 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightTiles" ), BIND_LIGHTTILES ); -} - GLShader_reflection::GLShader_reflection(): GLShader( "reflection", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, false, "reflection_CB", "reflection_CB" ), @@ -2588,12 +2570,6 @@ GLShader_reflectionMaterial::GLShader_reflectionMaterial() : GLCompileMacro_USE_RELIEF_MAPPING( this ) { } -void GLShader_reflectionMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 1 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); -} - GLShader_skybox::GLShader_skybox() : GLShader( "skybox", ATTR_POSITION, false, "skybox", "skybox" ), @@ -2625,11 +2601,6 @@ GLShader_skyboxMaterial::GLShader_skyboxMaterial() : u_ModelViewProjectionMatrix( this ) {} -void GLShader_skyboxMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CloudMap" ), 1 ); -} - GLShader_fogQuake3::GLShader_fogQuake3() : GLShader( "fogQuake3", ATTR_POSITION | ATTR_QTANGENT, false, "fogQuake3", "fogQuake3" ), @@ -2667,10 +2638,6 @@ GLShader_fogQuake3Material::GLShader_fogQuake3Material() : GLDeformStage( this ) { } -void GLShader_fogQuake3Material::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_FogMap" ), 0 ); -} - GLShader_fogGlobal::GLShader_fogGlobal() : GLShader( "fogGlobal", ATTR_POSITION, false, "screenSpace", "fogGlobal" ), @@ -2730,11 +2697,6 @@ GLShader_heatHazeMaterial::GLShader_heatHazeMaterial() : { } -void GLShader_heatHazeMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 1 ); -} - GLShader_screen::GLShader_screen() : GLShader( "screen", ATTR_POSITION, false, "screen", "screen" ), @@ -2755,10 +2717,6 @@ GLShader_screenMaterial::GLShader_screenMaterial() : u_ModelViewProjectionMatrix( this ) { } -void GLShader_screenMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); -} - GLShader_portal::GLShader_portal() : GLShader( "portal", ATTR_POSITION, false, "portal", "portal" ), @@ -2899,17 +2857,6 @@ GLShader_liquidMaterial::GLShader_liquidMaterial() : GLCompileMacro_USE_RELIEF_MAPPING( this ) { } -void GLShader_liquidMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) -{ - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_PortalMap" ), 1 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 2 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_NormalMap" ), 3 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightGrid1" ), 6 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_LightGrid2" ), 7 ); - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); -} - GLShader_motionblur::GLShader_motionblur() : GLShader( "motionblur", ATTR_POSITION, false, "screenSpace", "motionblur" ), diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 11fb31155b..3278a222be 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -3276,7 +3276,6 @@ class GLShader_genericMaterial : public GLCompileMacro_USE_DEPTH_FADE { public: GLShader_genericMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_lightMapping : @@ -3377,7 +3376,6 @@ class GLShader_lightMappingMaterial : public GLCompileMacro_USE_PHYSICAL_MAPPING { public: GLShader_lightMappingMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_reflection : @@ -3424,7 +3422,6 @@ class GLShader_reflectionMaterial : public GLCompileMacro_USE_RELIEF_MAPPING { public: GLShader_reflectionMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_skybox : @@ -3453,7 +3450,6 @@ class GLShader_skyboxMaterial : public u_ModelViewProjectionMatrix { public: GLShader_skyboxMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_fogQuake3 : @@ -3489,7 +3485,6 @@ class GLShader_fogQuake3Material : public GLDeformStage { public: GLShader_fogQuake3Material(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_fogGlobal : @@ -3542,7 +3537,6 @@ class GLShader_heatHazeMaterial : { public: GLShader_heatHazeMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_screen : @@ -3561,7 +3555,6 @@ class GLShader_screenMaterial : public u_ModelViewProjectionMatrix { public: GLShader_screenMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_portal : @@ -3682,7 +3675,6 @@ class GLShader_liquidMaterial : public GLCompileMacro_USE_RELIEF_MAPPING { public: GLShader_liquidMaterial(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_motionblur : From a183ee1b2824096203cad090edc0dae711ba73f0 Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 20 Aug 2025 15:01:11 -0500 Subject: [PATCH 5/5] Remove GLShader_depthReduction::SetShaderProgramUniforms This shader has hard-coded texture unit bindings in the GLSL, so setting uniforms has no effect. --- src/engine/renderer/Material.cpp | 1 + src/engine/renderer/gl_shader.cpp | 4 ---- src/engine/renderer/gl_shader.h | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/engine/renderer/Material.cpp b/src/engine/renderer/Material.cpp index 95957c0c95..f031ba6fab 100644 --- a/src/engine/renderer/Material.cpp +++ b/src/engine/renderer/Material.cpp @@ -1526,6 +1526,7 @@ void MaterialSystem::DepthReduction() { uint32_t globalWorkgroupX = ( width + 7 ) / 8; uint32_t globalWorkgroupY = ( height + 7 ) / 8; + // FIXME: u_DepthMap object on the shader is not actually used GL_Bind( tr.currentDepthImage ); glBindImageTexture( 2, depthImage->texnum, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_R32F ); diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 30edbbc992..652b2e6db0 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2968,10 +2968,6 @@ GLShader_depthReduction::GLShader_depthReduction() : u_InitialDepthLevel( this ) { } -void GLShader_depthReduction::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) { - glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); -} - GLShader_clearSurfaces::GLShader_clearSurfaces() : GLShader( "clearSurfaces", false, "clearSurfaces" ), diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 3278a222be..8aeef648fd 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -3769,7 +3769,6 @@ class GLShader_depthReduction : public u_InitialDepthLevel { public: GLShader_depthReduction(); - void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; class GLShader_clearSurfaces :