[Bf-blender-cvs] [8ff54f3ea97] temp-gpu-compute-shaders: Use ssbo_binding method.

Jeroen Bakker noreply at git.blender.org
Mon May 10 07:52:32 CEST 2021


Commit: 8ff54f3ea9711707fc3c58d5bc986fe509a1feb4
Author: Jeroen Bakker
Date:   Mon May 10 07:51:02 2021 +0200
Branches: temp-gpu-compute-shaders
https://developer.blender.org/rB8ff54f3ea9711707fc3c58d5bc986fe509a1feb4

Use ssbo_binding method.

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

M	source/blender/gpu/opengl/gl_shader_interface.cc

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

diff --git a/source/blender/gpu/opengl/gl_shader_interface.cc b/source/blender/gpu/opengl/gl_shader_interface.cc
index 26edfd30088..ee84b2aff24 100644
--- a/source/blender/gpu/opengl/gl_shader_interface.cc
+++ b/source/blender/gpu/opengl/gl_shader_interface.cc
@@ -128,9 +128,21 @@ static inline int image_binding(int32_t program,
   }
 }
 
-static inline int ssbo_binding()
+static inline int ssbo_binding(int32_t program, uint32_t ssbo_index)
 {
-  return -1;
+  GLint binding = -1;
+  GLenum property = GL_BUFFER_BINDING;
+  GLint values_written = 0;
+  glGetProgramResourceiv(program,
+                         GL_SHADER_STORAGE_BLOCK,
+                         ssbo_index,
+                         1,
+                         &property,
+                         1,
+                         &values_written,
+                         &binding);
+
+  return binding;
 }
 
 /** \} */
@@ -144,13 +156,6 @@ GLShaderInterface::GLShaderInterface(GLuint program)
   /* Necessary to make #glUniform works. */
   glUseProgram(program);
 
-  GLint max_ssbo_name_len = 0, ssbo_len = 0;
-  if (GPU_shader_storage_buffer_objects_support()) {
-    glGetProgramInterfaceiv(program, GL_SHADER_STORAGE_BLOCK, GL_ACTIVE_RESOURCES, &ssbo_len);
-    glGetProgramInterfaceiv(
-        program, GL_SHADER_STORAGE_BLOCK, GL_MAX_NAME_LENGTH, &max_ssbo_name_len);
-  }
-
   GLint max_attr_name_len = 0, attr_len = 0;
   glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_attr_name_len);
   glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &attr_len);
@@ -164,6 +169,13 @@ GLShaderInterface::GLShaderInterface(GLuint program)
   glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &active_uniform_len);
   uniform_len = active_uniform_len;
 
+  GLint max_ssbo_name_len = 0, ssbo_len = 0;
+  if (GPU_shader_storage_buffer_objects_support()) {
+    glGetProgramInterfaceiv(program, GL_SHADER_STORAGE_BLOCK, GL_ACTIVE_RESOURCES, &ssbo_len);
+    glGetProgramInterfaceiv(
+        program, GL_SHADER_STORAGE_BLOCK, GL_MAX_NAME_LENGTH, &max_ssbo_name_len);
+  }
+
   BLI_assert(ubo_len <= 16 && "enabled_ubo_mask_ is uint16_t");
 
   /* Work around driver bug with Intel HD 4600 on Windows 7/8, where
@@ -284,11 +296,7 @@ GLShaderInterface::GLShaderInterface(GLuint program)
     glGetProgramResourceName(
         program, GL_SHADER_STORAGE_BLOCK, i, remaining_buffer, &name_len, name);
 
-    GLint binding = -1;
-    GLenum property = GL_BUFFER_BINDING;
-    GLint values_written = 0;
-    glGetProgramResourceiv(
-        program, GL_SHADER_STORAGE_BLOCK, i, 1, &property, 1, &values_written, &binding);
+    const GLint binding = ssbo_binding(program, i);
 
     ShaderInput *input = &inputs_[attr_len_ + ubo_len_ + uniform_len_ + ssbo_len_++];
     input->binding = input->location = binding;



More information about the Bf-blender-cvs mailing list