diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-02-05 15:22:30 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-02-05 15:28:41 +0300 |
commit | e5af6a0d0ff861a278f896e9a643de1a0e5ce0dc (patch) | |
tree | 35ed3ba5f800f46148662c8824ad53838e3855c2 | |
parent | 835dd950467fe5215911a81485393fb6ce3a03cd (diff) |
GLShaderInterface: Fix SSBO using the ubo mask
This might head lead to a crash when a shader uses both ubo and ssbo.
-rw-r--r-- | source/blender/gpu/intern/gpu_shader_interface.hh | 1 | ||||
-rw-r--r-- | source/blender/gpu/opengl/gl_shader_interface.cc | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/source/blender/gpu/intern/gpu_shader_interface.hh b/source/blender/gpu/intern/gpu_shader_interface.hh index 7f99619c98c..514cfc01f09 100644 --- a/source/blender/gpu/intern/gpu_shader_interface.hh +++ b/source/blender/gpu/intern/gpu_shader_interface.hh @@ -68,6 +68,7 @@ class ShaderInterface { uint16_t enabled_ubo_mask_ = 0; uint8_t enabled_ima_mask_ = 0; uint64_t enabled_tex_mask_ = 0; + uint16_t enabled_ssbo_mask_ = 0; /** Location of builtin uniforms. Fast access, no lookup needed. */ int32_t builtins_[GPU_NUM_UNIFORMS]; int32_t builtin_blocks_[GPU_NUM_UNIFORM_BLOCKS]; diff --git a/source/blender/gpu/opengl/gl_shader_interface.cc b/source/blender/gpu/opengl/gl_shader_interface.cc index b7df44c2d42..0a31f8dee7f 100644 --- a/source/blender/gpu/opengl/gl_shader_interface.cc +++ b/source/blender/gpu/opengl/gl_shader_interface.cc @@ -319,6 +319,7 @@ GLShaderInterface::GLShaderInterface(GLuint program) input->binding = input->location = binding; name_buffer_offset += this->set_input_name(input, name, name_len); + enabled_ssbo_mask_ |= (input->binding != -1) ? (1lu << input->binding) : 0lu; } /* Builtin Uniforms */ @@ -476,7 +477,7 @@ GLShaderInterface::GLShaderInterface(GLuint program, const shader::ShaderCreateI if (res.bind_type == ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER) { copy_input_name(input, res.storagebuf.name, name_buffer_, name_buffer_offset); input->location = input->binding = res.slot; - enabled_ubo_mask_ |= (1 << input->binding); + enabled_ssbo_mask_ |= (1 << input->binding); input++; } } |