anv: Track all the descriptor sets

During compute state save/restore, let's track all the descriptor sets.

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30798>
This commit is contained in:
Sagar Ghuge 2024-07-16 22:35:42 -07:00 committed by Marge Bot
parent 786caf580b
commit f39cd30f4f
2 changed files with 26 additions and 6 deletions

View file

@ -794,7 +794,7 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
assert(!set->pool || !set->pool->host_only);
struct anv_descriptor_set_layout *set_layout =
layout->set[set_index].layout;
layout ? layout->set[set_index].layout: set->layout;
anv_cmd_buffer_maybe_dirty_descriptor_mode(
cmd_buffer,
@ -1481,7 +1481,13 @@ anv_cmd_buffer_save_state(struct anv_cmd_buffer *cmd_buffer,
state->pipeline = pipe_state->pipeline;
if (state->flags & ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_0)
state->descriptor_set = pipe_state->descriptors[0];
state->descriptor_set[0] = pipe_state->descriptors[0];
if (state->flags & ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_ALL) {
for (uint32_t i = 0; i < MAX_SETS; i++) {
state->descriptor_set[i] = pipe_state->descriptors[i];
}
}
if (state->flags & ANV_CMD_SAVED_STATE_PUSH_CONSTANTS) {
memcpy(state->push_constants, pipe_state->push_constants.client_data,
@ -1510,14 +1516,27 @@ anv_cmd_buffer_restore_state(struct anv_cmd_buffer *cmd_buffer,
}
if (state->flags & ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_0) {
if (state->descriptor_set) {
if (state->descriptor_set[0]) {
anv_cmd_buffer_bind_descriptor_set(cmd_buffer, bind_point, NULL, 0,
state->descriptor_set, NULL, NULL);
state->descriptor_set[0], NULL,
NULL);
} else {
pipe_state->descriptors[0] = NULL;
}
}
if (state->flags & ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_ALL) {
for (uint32_t i = 0; i < MAX_SETS; i++) {
if (state->descriptor_set[i]) {
anv_cmd_buffer_bind_descriptor_set(cmd_buffer, bind_point, NULL, i,
state->descriptor_set[i], NULL,
NULL);
} else {
pipe_state->descriptors[i] = NULL;
}
}
}
if (state->flags & ANV_CMD_SAVED_STATE_PUSH_CONSTANTS) {
VkPushConstantsInfoKHR push_info = {
.sType = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR,

View file

@ -4427,14 +4427,15 @@ anv_cmd_buffer_get_view_count(struct anv_cmd_buffer *cmd_buffer)
enum anv_cmd_saved_state_flags {
ANV_CMD_SAVED_STATE_COMPUTE_PIPELINE = BITFIELD_BIT(0),
ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_0 = BITFIELD_BIT(1),
ANV_CMD_SAVED_STATE_PUSH_CONSTANTS = BITFIELD_BIT(2),
ANV_CMD_SAVED_STATE_DESCRIPTOR_SET_ALL = BITFIELD_BIT(2),
ANV_CMD_SAVED_STATE_PUSH_CONSTANTS = BITFIELD_BIT(3),
};
struct anv_cmd_saved_state {
uint32_t flags;
struct anv_pipeline *pipeline;
struct anv_descriptor_set *descriptor_set;
struct anv_descriptor_set *descriptor_set[MAX_SETS];
uint8_t push_constants[MAX_PUSH_CONSTANTS_SIZE];
};