Mesa (staging/22.1): v3dv: stop tracking push constant buffer references
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 27 23:25:26 UTC 2022
Module: Mesa
Branch: staging/22.1
Commit: 5e481bb5b85de9c616e37ca0537f264df056612c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e481bb5b85de9c616e37ca0537f264df056612c
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Thu Jul 14 11:08:49 2022 +0200
v3dv: stop tracking push constant buffer references
Since we allocate this ourselves we can immediately add it to the
job at the time we allocate it.
This also fixes a bug we introduced when we implemented inline
uniforms because since that commit, if we had an inline uniform
buffer at index 1 which happend to have indirect access we would
track it in slot 0 instead of slot 1, potentially overwriting
the push constant buffer reference.
Fixes: ea3223e7a46 ('v3dv: implement VK_EXT_inline_uniform_block')
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17536>
(cherry picked from commit e451c612df87fc8033d9be64be0c449bd9a17191)
---
.pick_status.json | 2 +-
src/broadcom/vulkan/v3dv_uniforms.c | 13 +++++++------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index 303077a4e65..dfe383f095a 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -4360,7 +4360,7 @@
"description": "v3dv: stop tracking push constant buffer references",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": "ea3223e7a4690571583f3a0f2d7c9580952e67d8"
},
diff --git a/src/broadcom/vulkan/v3dv_uniforms.c b/src/broadcom/vulkan/v3dv_uniforms.c
index 8f14d0195a7..15ef326a51e 100644
--- a/src/broadcom/vulkan/v3dv_uniforms.c
+++ b/src/broadcom/vulkan/v3dv_uniforms.c
@@ -56,8 +56,8 @@ struct state_bo_list {
struct v3dv_bo *states[MAX_TOTAL_STATES];
};
-#define MAX_TOTAL_UNIFORM_BUFFERS (1 + (MAX_UNIFORM_BUFFERS + \
- MAX_INLINE_UNIFORM_BUFFERS) * MAX_STAGES)
+#define MAX_TOTAL_UNIFORM_BUFFERS ((MAX_UNIFORM_BUFFERS + \
+ MAX_INLINE_UNIFORM_BUFFERS) * MAX_STAGES)
#define MAX_TOTAL_STORAGE_BUFFERS (MAX_STORAGE_BUFFERS * MAX_STAGES)
struct buffer_bo_list {
struct v3dv_bo *ubo[MAX_TOTAL_UNIFORM_BUFFERS];
@@ -98,6 +98,9 @@ check_push_constants_ubo(struct v3dv_cmd_buffer *cmd_buffer,
v3dv_bo_alloc(cmd_buffer->device, MAX_PUSH_CONSTANTS_SIZE,
"push constants", true);
+ v3dv_job_add_bo(cmd_buffer->state.job,
+ cmd_buffer->push_constants_resource.bo);
+
if (!cmd_buffer->push_constants_resource.bo) {
fprintf(stderr, "Failed to allocate memory for push constants\n");
abort();
@@ -254,9 +257,8 @@ write_ubo_ssbo_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
*/
uint32_t index = v3d_unit_data_get_unit(data);
if (content == QUNIFORM_UBO_ADDR && index == 0) {
- /* This calls is to ensure that the push_constant_ubo is
- * updated. It already take into account it is should do the
- * update or not
+ /* Ensure the push constants UBO is created and updated. This also
+ * adds the BO to the job so we don't need to track it in buffer_bos.
*/
check_push_constants_ubo(cmd_buffer, pipeline);
@@ -267,7 +269,6 @@ write_ubo_ssbo_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
cl_aligned_u32(uniforms, resource->bo->offset +
resource->offset +
offset + dynamic_offset);
- buffer_bos->ubo[0] = resource->bo;
} else {
if (content == QUNIFORM_UBO_ADDR) {
/* We reserve index 0 for push constants and artificially increase our
More information about the mesa-commit
mailing list