[Bf-blender-cvs] [b695343c6cb] tmp-overlay-engine: Cleanup: GPU: Remove unused shaders

Clément Foucault noreply at git.blender.org
Wed Nov 20 20:54:23 CET 2019


Commit: b695343c6cbc28cad59c9a57b18e2d0314f256de
Author: Clément Foucault
Date:   Wed Nov 20 02:16:08 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rBb695343c6cbc28cad59c9a57b18e2d0314f256de

Cleanup: GPU: Remove unused shaders

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

M	source/blender/draw/intern/draw_instance_data.c
M	source/blender/draw/intern/draw_instance_data.h
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/GPU_shader.h
M	source/blender/gpu/intern/gpu_batch.c
M	source/blender/gpu/intern/gpu_shader.c
D	source/blender/gpu/shaders/gpu_shader_instance_camera_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_distance_line_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_geom.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_id_vert.glsl
D	source/blender/gpu/shaders/gpu_shader_instance_vert.glsl

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

diff --git a/source/blender/draw/intern/draw_instance_data.c b/source/blender/draw/intern/draw_instance_data.c
index 2e914962d31..5712fd0ccde 100644
--- a/source/blender/draw/intern/draw_instance_data.c
+++ b/source/blender/draw/intern/draw_instance_data.c
@@ -134,16 +134,20 @@ GPUVertBuf *DRW_temp_buffer_request(DRWInstanceDataList *idatalist,
 /* NOTE: Does not return a valid drawable batch until DRW_instance_buffer_finish has run. */
 GPUBatch *DRW_temp_batch_instance_request(DRWInstanceDataList *idatalist,
                                           GPUVertBuf *buf,
-                                          GPUVertBuf *buf2, /* hack */
+                                          GPUBatch *instancer,
                                           GPUBatch *geom)
 {
   /* Do not call this with a batch that is already an instancing batch. */
-  BLI_assert(geom->inst == NULL);
+  BLI_assert(geom->inst[0] == NULL);
+  /* Only call with one of them. */
+  BLI_assert((instancer != NULL) != (buf != NULL));
 
   GPUBatch *batch = BLI_memblock_alloc(idatalist->pool_instancing);
-  bool is_compatible = (batch->gl_prim_type == geom->gl_prim_type) && (batch->inst[0] == buf) &&
-                       (buf->vbo_id != 0) && (batch->phase == GPU_BATCH_READY_TO_DRAW) &&
-                       (batch->elem == geom->elem);
+  bool instancer_compat = buf ? ((batch->inst[0] == buf) && (buf->vbo_id != 0)) :
+                                ((batch->inst[0] == instancer->inst[0]) &&
+                                 (batch->inst[1] == instancer->inst[1]));
+  bool is_compatible = (batch->gl_prim_type == geom->gl_prim_type) && instancer_compat &&
+                       (batch->phase == GPU_BATCH_READY_TO_DRAW) && (batch->elem == geom->elem);
   for (int i = 0; i < GPU_BATCH_VBO_MAX_LEN && is_compatible; i++) {
     if (batch->verts[i] != geom->verts[i]) {
       is_compatible = false;
@@ -154,7 +158,7 @@ GPUBatch *DRW_temp_batch_instance_request(DRWInstanceDataList *idatalist,
     GPU_batch_clear(batch);
     /* Save args and init later */
     batch->inst[0] = buf;
-    batch->inst[1] = buf2;
+    batch->inst[1] = (void *)instancer; /* HACK to save the pointer without other alloc. */
     batch->phase = GPU_BATCH_READY_TO_BUILD;
     batch->verts[0] = (void *)geom; /* HACK to save the pointer without other alloc. */
 
@@ -207,13 +211,18 @@ void DRW_instance_buffer_finish(DRWInstanceDataList *idatalist)
   BLI_memblock_iternew(idatalist->pool_instancing, &iter);
   while ((batch = BLI_memblock_iterstep(&iter))) {
     if (batch->phase == GPU_BATCH_READY_TO_BUILD) {
-      GPUVertBuf *inst0 = batch->inst[0];
-      GPUVertBuf *inst1 = batch->inst[1];
-      GPUBatch *geom = (void *)batch->verts[0]; /* HACK see DRW_temp_batch_instance_request. */
+      GPUVertBuf *inst_buf = batch->inst[0];
+      /* HACK see DRW_temp_batch_instance_request. */
+      GPUBatch *inst_batch = (void *)batch->inst[1];
+      GPUBatch *geom = (void *)batch->verts[0];
       GPU_batch_copy(batch, geom);
-      GPU_batch_instbuf_add_ex(batch, inst0, false);
-      if (inst1) {
-        GPU_batch_instbuf_add_ex(batch, inst1, false);
+      if (inst_batch != NULL) {
+        for (int i = 0; i < GPU_BATCH_INST_VBO_MAX_LEN && inst_batch->verts[i]; i++) {
+          GPU_batch_instbuf_add_ex(batch, inst_batch->verts[i], false);
+        }
+      }
+      else {
+        GPU_batch_instbuf_add_ex(batch, inst_buf, false);
       }
     }
   }
diff --git a/source/blender/draw/intern/draw_instance_data.h b/source/blender/draw/intern/draw_instance_data.h
index 5bb481fdd09..f891d380ee3 100644
--- a/source/blender/draw/intern/draw_instance_data.h
+++ b/source/blender/draw/intern/draw_instance_data.h
@@ -43,7 +43,7 @@ GPUVertBuf *DRW_temp_buffer_request(DRWInstanceDataList *idatalist,
                                     int *vert_len);
 GPUBatch *DRW_temp_batch_instance_request(DRWInstanceDataList *idatalist,
                                           GPUVertBuf *buf,
-                                          GPUVertBuf *buf2,
+                                          GPUBatch *instancer,
                                           GPUBatch *geom);
 GPUBatch *DRW_temp_batch_request(DRWInstanceDataList *idatalist,
                                  GPUVertBuf *buf,
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index c0eb586056d..8500fa9463c 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -797,14 +797,12 @@ void DRW_shgroup_call_instances_with_attribs(DRWShadingGroup *shgroup,
                                              struct GPUBatch *inst_attributes)
 {
   BLI_assert(geom != NULL);
-  BLI_assert(inst_attributes->verts[0] != NULL);
+  BLI_assert(inst_attributes != NULL);
   if (G.f & G_FLAG_PICKSEL) {
     drw_command_set_select_id(shgroup, NULL, DST.select_id);
   }
   DRWResourceHandle handle = drw_resource_handle(shgroup, ob ? ob->obmat : NULL, ob);
-  GPUVertBuf *buf_inst = inst_attributes->verts[0];
-  GPUVertBuf *buf_inst2 = inst_attributes->verts[1];
-  GPUBatch *batch = DRW_temp_batch_instance_request(DST.idatalist, buf_inst, buf_inst2, geom);
+  GPUBatch *batch = DRW_temp_batch_instance_request(DST.idatalist, NULL, inst_attributes, geom);
   drw_command_draw(shgroup, batch, handle);
 }
 
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 9320e849194..63b51215d50 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -189,19 +189,7 @@ data_to_c_simple(shaders/gpu_shader_3D_smooth_color_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_3D_passthrough_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl SRC)
 
-data_to_c_simple(shaders/gpu_shader_instance_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_variying_size_variying_id_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_screen_aligned_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_camera_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_distance_line_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_edges_variying_color_geom.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_instance_edges_variying_color_vert.glsl SRC)
-
-data_to_c_simple(shaders/gpu_shader_3D_groundline_geom.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_3D_groundpoint_vert.glsl SRC)
 
 data_to_c_simple(shaders/gpu_shader_point_uniform_color_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_point_uniform_color_aa_frag.glsl SRC)
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index f4a94c7759a..6e4e07580ec 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -316,26 +316,8 @@ typedef enum eGPUBuiltinShader {
   /* lines */
   GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR,
   GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR,
-  /* light drawing */
-  GPU_SHADER_3D_GROUNDPOINT,
-  GPU_SHADER_3D_GROUNDLINE,
-  GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR,
-  /* bone drawing */
-  GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR,
-  GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR,
-  /* camera drawing */
-  GPU_SHADER_CAMERA,
-  /* distance in front of objects */
-  GPU_SHADER_DISTANCE_LINES,
-  /* axis name */
-  GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS,
-  GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED,
   /* instance */
-  GPU_SHADER_INSTANCE_UNIFORM_COLOR,
-  GPU_SHADER_INSTANCE_VARIYING_ID_VARIYING_SIZE,    /* Uniformly scaled */
   GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE, /* Uniformly scaled */
-  GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE,
-  GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR,
   /* grease pencil drawing */
   GPU_SHADER_GPENCIL_STROKE,
   GPU_SHADER_GPENCIL_FILL,
diff --git a/source/blender/gpu/intern/gpu_batch.c b/source/blender/gpu/intern/gpu_batch.c
index 9c3d94a9353..2181ce7d00e 100644
--- a/source/blender/gpu/intern/gpu_batch.c
+++ b/source/blender/gpu/intern/gpu_batch.c
@@ -218,7 +218,8 @@ int GPU_batch_instbuf_add_ex(GPUBatch *batch, GPUVertBuf *insts, bool own_vbo)
 #if TRUST_NO_ONE
       /* for now all VertexBuffers must have same vertex_len */
       if (batch->inst[0] != NULL) {
-        assert(insts->vertex_len == batch->inst[0]->vertex_len);
+        /* Allow for different size of vertex buf (will choose the smallest number of verts). */
+        // assert(insts->vertex_len == batch->inst[0]->vertex_len);
         assert(own_vbo == (batch->owns_flag & GPU_BATCH_OWNS_INSTANCES) != 0);
       }
 #endif
@@ -676,6 +677,10 @@ void GPU_batch_draw_advanced(GPUBatch *batch, int v_first, int v_count, int i_fi
   }
   if (i_count == 0) {
     i_count = (batch->inst[0]) ? batch->inst[0]->vertex_len : 1;
+    /* Meh. This is to be able to use different numbers of verts in instance vbos. */
+    if (batch->inst[1] && i_count > batch->inst[1]->vertex_len) {
+      i_count = batch->inst[1]->vertex_len;
+    }
   }
 
   if (v_count == 0 || i_count == 0) {
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 6852a60ddb3..3fe52d03b88 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -102,20 +102,7 @@ extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
 extern char datatoc_gpu_shader_3D_passthrough_vert_glsl[];
 extern char datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl[];
 
-extern char datatoc_gpu_shader_instance_vert_glsl[];
 extern char datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl[];
-extern char datatoc_gpu_shader_instance_variying_size_variying_id_vert_glsl[];
-extern char datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl[];
-extern char datatoc_gpu_shader_instance_screenspace_variying_color_vert_glsl[];
-extern char datatoc_gpu_shader_instance_screen_aligned_vert_glsl[];
-extern char datatoc_gpu_shader_insta

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list