[Bf-blender-cvs] [95aba2bc718] temp-gpu-compute-shader-hair: Draw: Bind vertex buffers on name.

Jeroen Bakker noreply at git.blender.org
Fri May 7 15:54:51 CEST 2021


Commit: 95aba2bc7188feabee48d2eaff19a20ae126b454
Author: Jeroen Bakker
Date:   Fri May 7 15:25:45 2021 +0200
Branches: temp-gpu-compute-shader-hair
https://developer.blender.org/rB95aba2bc7188feabee48d2eaff19a20ae126b454

Draw: Bind vertex buffers on name.

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

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_hair.c
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/draw/intern/draw_manager_exec.c

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index d9ed760c4b8..5071658fd82 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -580,7 +580,7 @@ void DRW_shgroup_uniform_vec4_array_copy(DRWShadingGroup *shgroup,
                                          const float (*value)[4],
                                          int arraysize);
 void DRW_shgroup_vertex_buffer(DRWShadingGroup *shgroup,
-                               const int location,
+                               const char *name,
                                struct GPUVertBuf *vertex_buffer);
 
 bool DRW_shgroup_is_empty(DRWShadingGroup *shgroup);
diff --git a/source/blender/draw/intern/draw_hair.c b/source/blender/draw/intern/draw_hair.c
index 4d9345c7574..1198d71a296 100644
--- a/source/blender/draw/intern/draw_hair.c
+++ b/source/blender/draw/intern/draw_hair.c
@@ -163,7 +163,7 @@ static void drw_hair_particle_cache_update_compute(ParticleHairCache *cache, con
     GPUShader *shader = hair_refine_shader_get(PART_REFINE_CATMULL_ROM);
     DRWShadingGroup *shgrp = DRW_shgroup_create(shader, g_tf_pass);
     drw_hair_particle_cache_shgrp_attach_resources(shgrp, cache, subdiv);
-    DRW_shgroup_vertex_buffer(shgrp, 0, cache->final[subdiv].proc_buf);
+    DRW_shgroup_vertex_buffer(shgrp, "hairPointOutputBuffer", cache->final[subdiv].proc_buf);
     DRW_shgroup_call_compute(shgrp, cache->strands_len, cache->final[subdiv].strands_res, 1);
   }
 }
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 7f26ef8d115..8e93e713d7d 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -448,9 +448,14 @@ void DRW_shgroup_uniform_vec4_array_copy(DRWShadingGroup *shgroup,
 }
 
 void DRW_shgroup_vertex_buffer(DRWShadingGroup *shgroup,
-                               const int location,
+                               const char *name,
                                GPUVertBuf *vertex_buffer)
 {
+  int location = GPU_shader_get_ssbo(shgroup->shader, name);
+  if (location == -1) {
+    BLI_assert(false && "Unable to locate binding of shader storage buffer objects.");
+    return;
+  }
   drw_shgroup_uniform_create_ex(shgroup, location, DRW_VERTEX_BUFFER, vertex_buffer, 0, 0, 1);
 }
 
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 1ec09bc1259..810a525bc1a 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -674,8 +674,7 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup,
                                                                 ((GPUVertBuf *)uni->pvalue));
           break;
         case DRW_VERTEX_BUFFER:
-          GPU_shader_attach_vertex_buffer(
-              shgroup->shader, (GPUVertBuf *)uni->pvalue, uni->location);
+          GPU_vertbuf_bind_as_ssbo((GPUVertBuf *)uni->pvalue, uni->location);
           break;
           /* Legacy/Fallback support. */
         case DRW_UNIFORM_BASE_INSTANCE:



More information about the Bf-blender-cvs mailing list