From 37f95c09bb32739dd01688ce9837825796322301 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 9 Mar 2026 14:39:29 +0100 Subject: [PATCH 1/3] gl_shader: print shader name in link log in GLShaderManager::BuildShaderProgram() --- src/engine/renderer/gl_shader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index a9adb51228..215ddeb857 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -985,7 +985,7 @@ void GLShaderManager::BuildShaderProgram( ShaderProgramDescriptor* descriptor ) glGetProgramiv( program, GL_LINK_STATUS, &linked ); if ( !linked ) { - Log::Warn( "Link log:" ); + Log::Warn( "Link log for %s:", descriptor->mainShader ); Log::Warn( GetInfoLog( program ) ); ThrowShaderError( "Shader program failed to link!" ); } From 539eaac856f3b093554861b9c18569a83e4951de Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 9 Mar 2026 15:25:29 +0100 Subject: [PATCH 2/3] gl_shader: delete unused GLShaderManager::LinkProgram() --- src/engine/renderer/gl_shader.cpp | 23 ----------------------- src/engine/renderer/gl_shader.h | 1 - 2 files changed, 24 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 215ddeb857..e5e0a38a66 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -1984,29 +1984,6 @@ std::string GLShaderManager::GetInfoLog( GLuint object ) const return out; } -void GLShaderManager::LinkProgram( GLuint program ) const -{ - GLint linked; - -#ifdef GL_ARB_get_program_binary - // Apparently, this is necessary to get the binary program via glGetProgramBinary - if( glConfig.getProgramBinaryAvailable ) - { - glProgramParameteri( program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE ); - } -#endif - glLinkProgram( program ); - - glGetProgramiv( program, GL_LINK_STATUS, &linked ); - - if ( !linked ) - { - Log::Warn( "Link log:" ); - Log::Warn( GetInfoLog( program ) ); - ThrowShaderError( "Shaders failed to link!" ); - } -} - void GLShaderManager::BindAttribLocations( GLuint program ) const { for ( uint32_t i = 0; i < ATTR_INDEX_MAX; i++ ) diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 0f857de57c..47e29b9c47 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -550,7 +550,6 @@ class GLShaderManager { std::string BuildDeformShaderText( const std::string& steps ); std::string ProcessInserts( const std::string& shaderText ) const; - void LinkProgram( GLuint program ) const; void BindAttribLocations( GLuint program ) const; void PrintShaderSource( Str::StringRef programName, GLuint object, std::vector& infoLogLines ) const; From 4d70088c44c6cbdcd79ae8d0c98cf4c16db2ea51 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 9 Mar 2026 15:45:04 +0100 Subject: [PATCH 3/3] =?UTF-8?q?gl=5Fshader:=20make=20possible=20to=20never?= =?UTF-8?q?=20compile=20a=20shader,=20do=20it=20for=20=E2=80=9Cproxy?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/engine/renderer/gl_shader.cpp | 6 +++++- src/engine/renderer/gl_shader.h | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index e5e0a38a66..e0c7d8e26a 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -1065,6 +1065,10 @@ bool GLShaderManager::BuildPermutation( GLShader* shader, int index, const bool return false; } + if ( shader->SkipCompilation() ) { + return false; + } + if ( IsUnusedPermutation( compileMacros.c_str() ) ) { return false; } @@ -3013,7 +3017,7 @@ GlobalUBOProxy::GlobalUBOProxy() : /* HACK: A GLShader* is required to initialise uniforms, but we don't need the GLSL shader itself, so we won't actually build it */ GLShader( "proxy", 0, - false, "screenSpace", "generic", true ), + false, "screenSpace", "generic", true, true ), // CONST u_ColorMap3D( this ), u_DepthMap( this ), diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 47e29b9c47..8059a53f9d 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -188,6 +188,7 @@ class GLShader { const bool worldShader; const bool pushSkip; + const bool compileSkip; protected: int _activeMacros = 0; int _deformIndex = 0; @@ -212,7 +213,7 @@ class GLShader { GLShader( const std::string& name, uint32_t vertexAttribsRequired, const bool useMaterialSystem, const std::string newVertexShaderName, const std::string newFragmentShaderName, - const bool newPushSkip = false ) : + const bool newPushSkip = false, const bool compileSkip = false ) : _name( name ), _vertexAttribsRequired( vertexAttribsRequired ), _useMaterialSystem( useMaterialSystem ), @@ -222,7 +223,8 @@ class GLShader { hasFragmentShader( true ), hasComputeShader( false ), worldShader( false ), - pushSkip( newPushSkip ) { + pushSkip( newPushSkip ), + compileSkip( compileSkip ) { } GLShader( const std::string& name, @@ -236,7 +238,8 @@ class GLShader { hasFragmentShader( false ), hasComputeShader( true ), worldShader( newWorldShader ), - pushSkip( false ) { + pushSkip( false ), + compileSkip( false ) { } public: @@ -268,6 +271,10 @@ class GLShader { return currentProgram; } + bool SkipCompilation() const { + return compileSkip; + } + protected: void PostProcessUniforms(); uint32_t GetUniqueCompileMacros( size_t permutation, const int type ) const;