Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
- index 9899b6c0194..adda2df38e6 100644
- --- a/source/blender/draw/intern/draw_common.h
- +++ b/source/blender/draw/intern/draw_common.h
- @@ -281,6 +281,7 @@ struct DRW_Global {
- struct GPUTexture *weight_ramp;
- struct GPUUniformBuffer *view_ubo;
- + struct GPUUniformBuffer *dummy;
- };
- extern struct DRW_Global G_draw;
- diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
- index 66e3905b212..3a61a1fd978 100644
- --- a/source/blender/draw/intern/draw_manager.c
- +++ b/source/blender/draw/intern/draw_manager.c
- @@ -731,6 +731,10 @@ static void drw_viewport_var_init(void)
- if (G_draw.view_ubo == NULL) {
- G_draw.view_ubo = DRW_uniformbuffer_create(sizeof(DRWViewUboStorage), NULL);
- }
- + if (G_draw.dummy == NULL) {
- + G_draw.dummy = DRW_uniformbuffer_create(sizeof(DRWObjectMatrix) * DRW_RESOURCE_CHUNK_LEN,
- + NULL);
- + }
- if (DST.draw_list == NULL) {
- DST.draw_list = GPU_draw_list_create(DRW_DRAWLIST_LEN);
- diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
- index cdf2c208351..b677e5e3048 100644
- --- a/source/blender/draw/intern/draw_manager_data.c
- +++ b/source/blender/draw/intern/draw_manager_data.c
- @@ -113,11 +113,6 @@ void drw_resource_buffer_finish(ViewportMemoryPool *vmempool)
- }
- /* Remove unecessary buffers */
- - for (int i = ubo_len; i < vmempool->ubo_len; i++) {
- - GPU_uniformbuffer_free(vmempool->matrices_ubo[i]);
- - GPU_uniformbuffer_free(vmempool->obinfos_ubo[i]);
- - }
- -
- if (ubo_len != vmempool->ubo_len) {
- vmempool->matrices_ubo = MEM_recallocN(vmempool->matrices_ubo, list_size);
- vmempool->obinfos_ubo = MEM_recallocN(vmempool->obinfos_ubo, list_size);
- @@ -128,16 +123,8 @@ void drw_resource_buffer_finish(ViewportMemoryPool *vmempool)
- for (int i = 0; i < ubo_len; i++) {
- void *data_obmat = BLI_memblock_elem_get(vmempool->obmats, i, 0);
- void *data_infos = BLI_memblock_elem_get(vmempool->obinfos, i, 0);
- - if (vmempool->matrices_ubo[i] == NULL) {
- - vmempool->matrices_ubo[i] = GPU_uniformbuffer_create(
- - sizeof(DRWObjectMatrix) * DRW_RESOURCE_CHUNK_LEN, data_obmat, NULL);
- - vmempool->obinfos_ubo[i] = GPU_uniformbuffer_create(
- - sizeof(DRWObjectInfos) * DRW_RESOURCE_CHUNK_LEN, data_infos, NULL);
- - }
- - else {
- - GPU_uniformbuffer_update(vmempool->matrices_ubo[i], data_obmat);
- - GPU_uniformbuffer_update(vmempool->obinfos_ubo[i], data_infos);
- - }
- + vmempool->matrices_ubo[i] = G_draw.dummy;
- + vmempool->obinfos_ubo[i] = G_draw.dummy;
- }
- /* Aligned alloc to avoid unaligned memcpy. */
- diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
- index 6bb11a7d4ce..29c41ce1352 100644
- --- a/source/blender/draw/intern/draw_manager_exec.c
- +++ b/source/blender/draw/intern/draw_manager_exec.c
- @@ -945,7 +945,7 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup,
- break;
- case DRW_UNIFORM_BLOCK_OBMATS:
- state->obmats_loc = uni->location;
- - ubo = DST.vmempool->matrices_ubo[0];
- + ubo = G_draw.dummy;
- GPU_uniformbuffer_bind(ubo, 0);
- GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo);
- break;
- @@ -1063,8 +1063,8 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa
- GPU_shader_uniform_int(NULL, state->chunkid_loc, chunk);
- }
- if (state->obmats_loc != -1) {
- - GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]);
- - GPU_uniformbuffer_bind(DST.vmempool->matrices_ubo[chunk], 0);
- + GPU_uniformbuffer_unbind(G_draw.dummy);
- + GPU_uniformbuffer_bind(G_draw.dummy, 0);
- }
- if (state->obinfos_loc != -1) {
- GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]);
- @@ -1188,7 +1188,8 @@ static void draw_call_batching_finish(DRWShadingGroup *shgroup, DRWCommandsState
- GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]);
- }
- if (state->obinfos_loc != -1) {
- - GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]);
- + // GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]);
- + GPU_uniformbuffer_unbind(G_draw.dummy);
- }
- }
- diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
- index 615af57c1bd..a52c920e5d1 100644
- --- a/source/blender/gpu/intern/gpu_viewport.c
- +++ b/source/blender/gpu/intern/gpu_viewport.c
- @@ -661,8 +661,8 @@ void GPU_viewport_free(GPUViewport *viewport)
- }
- for (int i = 0; i < viewport->vmempool.ubo_len; i++) {
- - GPU_uniformbuffer_free(viewport->vmempool.matrices_ubo[i]);
- - GPU_uniformbuffer_free(viewport->vmempool.obinfos_ubo[i]);
- + // GPU_uniformbuffer_free(viewport->vmempool.matrices_ubo[i]);
- + // GPU_uniformbuffer_free(viewport->vmempool.obinfos_ubo[i]);
- }
- MEM_SAFE_FREE(viewport->vmempool.matrices_ubo);
- MEM_SAFE_FREE(viewport->vmempool.obinfos_ubo);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement