mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
v3dv: better tracking of dirty push constant state
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10283>
This commit is contained in:
parent
30f125f04f
commit
6c80b084f2
2 changed files with 17 additions and 5 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue