From fd4652d4f621ca71fd2945c8003de764c6e7a800 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 2 Jul 2021 16:25:13 +0200 Subject: DrawManager: Add push constants command. --- release/datafiles/locale | 2 +- release/scripts/addons | 2 +- release/scripts/addons_contrib | 2 +- source/blender/draw/intern/DRW_render.h | 1 + source/blender/draw/intern/draw_manager.h | 6 ++++++ source/blender/draw/intern/draw_manager_data.c | 22 ++++++++++++++++++---- source/blender/draw/intern/draw_manager_exec.c | 3 +++ source/tools | 2 +- 8 files changed, 32 insertions(+), 8 deletions(-) diff --git a/release/datafiles/locale b/release/datafiles/locale index 4833954c0ac..78591466c33 160000 --- a/release/datafiles/locale +++ b/release/datafiles/locale @@ -1 +1 @@ -Subproject commit 4833954c0ac85cc407e1d5a153aa11b1d1823ec0 +Subproject commit 78591466c335ab055e11729d8af814ce7ce6edc9 diff --git a/release/scripts/addons b/release/scripts/addons index f86f25e6221..c84f8315390 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit f86f25e62217264495d05f116ccb09d575fe9841 +Subproject commit c84f83153900009f1c7743e3b21792ab1a730257 diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib index 5a82baad9f9..fd1bed98c9e 160000 --- a/release/scripts/addons_contrib +++ b/release/scripts/addons_contrib @@ -1 +1 @@ -Subproject commit 5a82baad9f986722104280e8354a4427d8e9eab1 +Subproject commit fd1bed98c9e0a733451168eecc828cce460205d4 diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 5d5a506c1e7..132b5e6163f 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -445,6 +445,7 @@ void DRW_shgroup_call_compute(DRWShadingGroup *shgroup, void DRW_shgroup_call_procedural_points(DRWShadingGroup *sh, Object *ob, uint point_count); void DRW_shgroup_call_procedural_lines(DRWShadingGroup *sh, Object *ob, uint line_count); void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *sh, Object *ob, uint tri_count); +void DRW_shgroup_call_push_constants(DRWShadingGroup *shgroup, GPUUniformBuf *ubo); /* Warning: Only use with Shaders that have IN_PLACE_INSTANCES defined. */ void DRW_shgroup_call_instances(DRWShadingGroup *shgroup, Object *ob, diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h index 373b51a67e0..ac301107920 100644 --- a/source/blender/draw/intern/draw_manager.h +++ b/source/blender/draw/intern/draw_manager.h @@ -192,6 +192,7 @@ typedef enum { DRW_CMD_COMPUTE = 8, /* Other Commands */ + DRW_CMD_PUSH_CONSTANTS = 11, DRW_CMD_CLEAR = 12, DRW_CMD_DRWSTATE = 13, DRW_CMD_STENCIL = 14, @@ -234,6 +235,10 @@ typedef struct DRWCommandCompute { int groups_z_len; } DRWCommandCompute; +typedef struct DRWCommandPushConstants { + GPUUniformBuf *buf; +} DRWCommandPushConstants; + typedef struct DRWCommandDrawProcedural { GPUBatch *batch; DRWResourceHandle handle; @@ -271,6 +276,7 @@ typedef union DRWCommand { DRWCommandDrawInstanceRange instance_range; DRWCommandDrawProcedural procedural; DRWCommandCompute compute; + DRWCommandPushConstants push_constants; DRWCommandSetMutableState state; DRWCommandSetStencil stencil; DRWCommandSetSelectID select_id; diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 5eedca4507e..73bce05af12 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -528,10 +528,10 @@ static void drw_call_obinfos_init(DRWObjectInfos *ob_infos, Object *ob) drw_call_calc_orco(ob, ob_infos->orcotexfac); /* Random float value. */ uint random = (DST.dupli_source) ? - DST.dupli_source->random_id : - /* TODO(fclem): this is rather costly to do at runtime. Maybe we can - * put it in ob->runtime and make depsgraph ensure it is up to date. */ - BLI_hash_int_2d(BLI_hash_string(ob->id.name + 2), 0); + DST.dupli_source->random_id : + /* TODO(fclem): this is rather costly to do at runtime. Maybe we can + * put it in ob->runtime and make depsgraph ensure it is up to date. */ + BLI_hash_int_2d(BLI_hash_string(ob->id.name + 2), 0); ob_infos->ob_random = random * (1.0f / (float)0xFFFFFFFF); /* Object State. */ ob_infos->ob_flag = 1.0f; /* Required to have a correct sign */ @@ -725,6 +725,12 @@ static void drw_command_compute(DRWShadingGroup *shgroup, cmd->groups_z_len = groups_z_len; } +static void drw_command_push_constants(DRWShadingGroup *shgroup, GPUUniformBuf *ubo) +{ + DRWCommandPushConstants *cmd = drw_command_create(shgroup, DRW_CMD_PUSH_CONSTANTS); + cmd->buf = ubo; +} + static void drw_command_draw_procedural(DRWShadingGroup *shgroup, GPUBatch *batch, DRWResourceHandle handle, @@ -851,6 +857,14 @@ void DRW_shgroup_call_compute(DRWShadingGroup *shgroup, drw_command_compute(shgroup, groups_x_len, groups_y_len, groups_z_len); } +void DRW_shgroup_call_push_constants(DRWShadingGroup *shgroup, GPUUniformBuf *ubo) +{ + BLI_assert(ubo); + BLI_assert(GPU_compute_shader_support()); + + drw_command_push_constants(shgroup, ubo); +} + static void drw_shgroup_call_procedural_add_ex(DRWShadingGroup *shgroup, GPUBatch *geom, Object *ob, diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index f29caebeb84..0dc81f23968 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1060,6 +1060,9 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) cmd->compute.groups_y_len, cmd->compute.groups_z_len); break; + case DRW_CMD_PUSH_CONSTANTS: + GPU_shader_uniform_push_constant(shgroup->shader, cmd->push_constants.buf); + break; } } diff --git a/source/tools b/source/tools index 01f51a0e551..c8579c5cf43 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit 01f51a0e551ab730f0934dc6488613690ac4bf8f +Subproject commit c8579c5cf43229843df505da9644b5b0b7201974 -- cgit v1.2.3