[Bf-blender-cvs] [2e630297afc] master: GPUShader: Fix linking working even if one shader compilation failed

Clément Foucault noreply at git.blender.org
Fri Aug 21 14:27:05 CEST 2020


Commit: 2e630297afc19ef4e69b8afe79dfd337171dbd60
Author: Clément Foucault
Date:   Fri Aug 21 14:25:58 2020 +0200
Branches: master
https://developer.blender.org/rB2e630297afc19ef4e69b8afe79dfd337171dbd60

GPUShader: Fix linking working even if one shader compilation failed

Linking without valid shaders works on some drivers. Avoid this case by
forcing linking step to return false.

===================================================================

M	source/blender/gpu/opengl/gl_shader.cc
M	source/blender/gpu/opengl/gl_shader.hh

===================================================================

diff --git a/source/blender/gpu/opengl/gl_shader.cc b/source/blender/gpu/opengl/gl_shader.cc
index b2cca2ef45e..3ec818b53a6 100644
--- a/source/blender/gpu/opengl/gl_shader.cc
+++ b/source/blender/gpu/opengl/gl_shader.cc
@@ -151,6 +151,7 @@ GLuint GLShader::create_shader_stage(GLenum gl_stage, MutableSpan<const char *>
   }
   if (!status) {
     glDeleteShader(shader);
+    compilation_failed_ = true;
     return 0;
   }
 
@@ -193,6 +194,10 @@ void GLShader::fragment_shader_from_glsl(MutableSpan<const char *> sources)
 
 bool GLShader::finalize(void)
 {
+  if (compilation_failed_) {
+    return false;
+  }
+
   glLinkProgram(shader_program_);
 
   GLint status;
diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh
index 37119b8b093..a686014f4c5 100644
--- a/source/blender/gpu/opengl/gl_shader.hh
+++ b/source/blender/gpu/opengl/gl_shader.hh
@@ -39,10 +39,12 @@ class GLShader : public Shader {
  private:
   /** Handle for full program (links shader stages below). */
   GLuint shader_program_ = 0;
-
+  /** Individual shader stages. */
   GLuint vert_shader_ = 0;
   GLuint geom_shader_ = 0;
   GLuint frag_shader_ = 0;
+  /** True if any shader failed to compile. */
+  bool compilation_failed_ = false;
 
   eGPUShaderTFBType transform_feedback_type_ = GPU_SHADER_TFB_NONE;



More information about the Bf-blender-cvs mailing list