[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