Mesa (master): v3dv: better tracking of dirty push constant state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Apr 16 12:43:28 UTC 2021
Module: Mesa
Branch: master
Commit: 6c80b084f26dfe60e86c80dcc10da3544244b79e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c80b084f26dfe60e86c80dcc10da3544244b79e
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Fri Apr 16 12:50:00 2021 +0200
v3dv: better tracking of dirty push constant state
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10283>
---
src/broadcom/vulkan/v3dv_cmd_buffer.c | 21 ++++++++++++++++-----
src/broadcom/vulkan/v3dv_private.h | 1 +
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index 9ccc1a12c87..388cfce8c04 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -3749,12 +3749,12 @@ update_gfx_uniform_state(struct v3dv_cmd_buffer *cmd_buffer,
has_new_descriptors &&
(cmd_buffer->state.dirty_descriptor_stages & VK_SHADER_STAGE_FRAGMENT_BIT);
- const bool has_new_descriptors_vs =
- has_new_descriptors &&
- (cmd_buffer->state.dirty_descriptor_stages & VK_SHADER_STAGE_VERTEX_BIT);
+ const bool has_new_push_constants_fs =
+ has_new_push_constants &&
+ (cmd_buffer->state.dirty_push_constants_stages & VK_SHADER_STAGE_FRAGMENT_BIT);
const bool needs_fs_update = has_new_pipeline ||
- has_new_push_constants ||
+ has_new_push_constants_fs ||
has_new_descriptors_fs;
if (needs_fs_update) {
@@ -3765,9 +3765,17 @@ update_gfx_uniform_state(struct v3dv_cmd_buffer *cmd_buffer,
v3dv_write_uniforms(cmd_buffer, pipeline, fs_variant);
}
+ const bool has_new_descriptors_vs =
+ has_new_descriptors &&
+ (cmd_buffer->state.dirty_descriptor_stages & VK_SHADER_STAGE_VERTEX_BIT);
+
+ const bool has_new_push_constants_vs =
+ has_new_push_constants &&
+ (cmd_buffer->state.dirty_push_constants_stages & VK_SHADER_STAGE_VERTEX_BIT);
+
const bool needs_vs_update = has_new_viewport ||
has_new_pipeline ||
- has_new_push_constants ||
+ has_new_push_constants_vs ||
has_new_descriptors_vs;
if (needs_vs_update) {
@@ -3962,6 +3970,7 @@ emit_gl_shader_state(struct v3dv_cmd_buffer *cmd_buffer)
V3DV_CMD_DIRTY_DESCRIPTOR_SETS |
V3DV_CMD_DIRTY_PUSH_CONSTANTS);
cmd_buffer->state.dirty_descriptor_stages &= ~VK_SHADER_STAGE_ALL_GRAPHICS;
+ cmd_buffer->state.dirty_push_constants_stages &= ~VK_SHADER_STAGE_ALL_GRAPHICS;
}
static void
@@ -4861,6 +4870,7 @@ v3dv_CmdPushConstants(VkCommandBuffer commandBuffer,
memcpy((uint8_t *) cmd_buffer->push_constants_data + offset, pValues, size);
cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_PUSH_CONSTANTS;
+ cmd_buffer->state.dirty_push_constants_stages |= stageFlags;
}
void
@@ -5195,6 +5205,7 @@ cmd_buffer_emit_pre_dispatch(struct v3dv_cmd_buffer *cmd_buffer)
cmd_buffer->state.dirty &= ~(V3DV_CMD_DIRTY_COMPUTE_PIPELINE |
V3DV_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS);
cmd_buffer->state.dirty_descriptor_stages &= ~VK_SHADER_STAGE_COMPUTE_BIT;
+ cmd_buffer->state.dirty_push_constants_stages &= ~VK_SHADER_STAGE_COMPUTE_BIT;
}
#define V3D_CSD_CFG012_WG_COUNT_SHIFT 16
diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h
index e20be3cc2b3..78dafc92923 100644
--- a/src/broadcom/vulkan/v3dv_private.h
+++ b/src/broadcom/vulkan/v3dv_private.h
@@ -1061,6 +1061,7 @@ struct v3dv_cmd_buffer_state {
uint32_t dirty;
VkShaderStageFlagBits dirty_descriptor_stages;
+ VkShaderStageFlagBits dirty_push_constants_stages;
/* Current clip window. We use this to check whether we have an active
* scissor, since in that case we can't use TLB clears and need to fallback
More information about the mesa-commit
mailing list