[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