From: Bas Nieuwenhuizen Date: Sun, 16 Sep 2018 00:17:32 +0000 (+0200) Subject: radv: Optimize rebinding the same descriptor set. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=02a43edf186cb9998741ba765cb948bb238a122d;p=mesa.git radv: Optimize rebinding the same descriptor set. This makes it cheaper to just change the dynamic offsets with the same descriptor sets. Suggested-by: Philip Rebohle Reviewed-by: Samuel Pitoiset --- diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index d492456d6b8..2f168321197 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2464,7 +2464,13 @@ void radv_CmdBindDescriptorSets( for (unsigned i = 0; i < descriptorSetCount; ++i) { unsigned idx = i + firstSet; RADV_FROM_HANDLE(radv_descriptor_set, set, pDescriptorSets[i]); - radv_bind_descriptor_set(cmd_buffer, pipelineBindPoint, set, idx); + + /* If the set is already bound we only need to update the + * (potentially changed) dynamic offsets. */ + if (descriptors_state->sets[idx] != set || + !(descriptors_state->valid & (1u << idx))) { + radv_bind_descriptor_set(cmd_buffer, pipelineBindPoint, set, idx); + } for(unsigned j = 0; j < set->layout->dynamic_offset_count; ++j, ++dyn_idx) { unsigned idx = j + layout->set[i + firstSet].dynamic_offset_start;