anv: Remove duplicate code in anv_cmd_buffer_bind_descriptor_set

Also use a single condition statement instead of two.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4040>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4040>
This commit is contained in:
Caio Marcelo de Oliveira Filho
2020-03-05 12:33:05 -08:00
parent 0a5053b687
commit f8051f77ea

View File

@@ -618,22 +618,28 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
struct anv_descriptor_set_layout *set_layout =
layout->set[set_index].layout;
VkShaderStageFlags stages = set_layout->shader_stages &
(bind_point == VK_PIPELINE_BIND_POINT_COMPUTE ?
VK_SHADER_STAGE_COMPUTE_BIT : VK_SHADER_STAGE_ALL_GRAPHICS);
VkShaderStageFlags stages = set_layout->shader_stages;
struct anv_cmd_pipeline_state *pipe_state;
switch (bind_point) {
case VK_PIPELINE_BIND_POINT_GRAPHICS:
stages &= VK_SHADER_STAGE_ALL_GRAPHICS;
pipe_state = &cmd_buffer->state.gfx.base;
break;
case VK_PIPELINE_BIND_POINT_COMPUTE:
stages &= VK_SHADER_STAGE_COMPUTE_BIT;
pipe_state = &cmd_buffer->state.compute.base;
break;
default:
unreachable("invalid bind point");
}
VkShaderStageFlags dirty_stages = 0;
if (bind_point == VK_PIPELINE_BIND_POINT_COMPUTE) {
if (cmd_buffer->state.compute.base.descriptors[set_index] != set) {
cmd_buffer->state.compute.base.descriptors[set_index] = set;
dirty_stages |= stages;
}
} else {
assert(bind_point == VK_PIPELINE_BIND_POINT_GRAPHICS);
if (cmd_buffer->state.gfx.base.descriptors[set_index] != set) {
cmd_buffer->state.gfx.base.descriptors[set_index] = set;
dirty_stages |= stages;
}
if (pipe_state->descriptors[set_index] != set) {
pipe_state->descriptors[set_index] = set;
dirty_stages |= stages;
}
/* If it's a push descriptor set, we have to flag things as dirty