[Bf-blender-cvs] [ef879577995] tmp-drw-callbatching: Cleanup: DRW: Add draw_call_batching_flush for easier code understanding
Clément Foucault
noreply at git.blender.org
Sat Aug 17 14:50:57 CEST 2019
Commit: ef879577995f44f4d3fea8cb5342de62ed9f731f
Author: Clément Foucault
Date: Sun Jun 23 11:20:20 2019 +0200
Branches: tmp-drw-callbatching
https://developer.blender.org/rBef879577995f44f4d3fea8cb5342de62ed9f731f
Cleanup: DRW: Add draw_call_batching_flush for easier code understanding
===================================================================
M source/blender/draw/intern/draw_manager_exec.c
===================================================================
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index d2801b1d994..532d31fb2ed 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -1049,6 +1049,16 @@ static void draw_call_resource_bind(DRWCommandsState *state, DRWResourceHandle h
}
}
+static void draw_call_batching_flush(DRWShadingGroup *shgroup, DRWCommandsState *state)
+{
+ draw_indirect_call(shgroup, state);
+ GPU_draw_list_submit(DST.draw_list);
+
+ state->batch = NULL;
+ state->inst_count = 0;
+ state->base_inst = -1;
+}
+
static void draw_call_single_do(DRWShadingGroup *shgroup,
DRWCommandsState *state,
GPUBatch *batch,
@@ -1057,15 +1067,7 @@ static void draw_call_single_do(DRWShadingGroup *shgroup,
int vert_count,
int inst_count)
{
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
-
- state->batch = batch;
- state->v_first = 0;
- state->v_count = 0;
- state->inst_count = 0;
- state->base_inst = -1;
+ draw_call_batching_flush(shgroup, state);
draw_call_resource_bind(state, handle);
@@ -1112,9 +1114,7 @@ static void draw_call_batching_do(DRWShadingGroup *shgroup,
(call->handle.chunk != state->resource_chunk) || /* Need to change UBOs. */
(call->batch != state->batch) /* Need to change VAO. */
) {
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
+ draw_call_batching_flush(shgroup, state);
state->batch = call->batch;
state->v_first = 0;
@@ -1144,9 +1144,7 @@ static void draw_call_batching_do(DRWShadingGroup *shgroup,
/* Flush remaining pending drawcalls. */
static void draw_call_batching_finish(DRWShadingGroup *shgroup, DRWCommandsState *state)
{
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
+ draw_call_batching_flush(shgroup, state);
/* Reset state */
if (state->neg_scale) {
@@ -1208,13 +1206,18 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
draw_call_batching_start(&state);
while ((cmd = draw_command_iter_step(&iter, &cmd_type))) {
+
switch (cmd_type) {
+ case DRW_CMD_STENCIL:
+ draw_call_batching_flush(shgroup, &state);
+ break;
case DRW_CMD_DRAW:
case DRW_CMD_DRAW_PROCEDURAL:
case DRW_CMD_DRAW_INSTANCE:
if (draw_call_is_culled(cmd->instance.handle, DST.view_active)) {
continue;
}
+ break;
default:
break;
}
More information about the Bf-blender-cvs
mailing list