mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 22:50:08 +01:00
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:
parent
786caf580b
commit
f39cd30f4f
2 changed files with 26 additions and 6 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue