From 02a43edf186cb9998741ba765cb948bb238a122d Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Sun, 16 Sep 2018 02:17:32 +0200 Subject: [PATCH] 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 --- src/amd/vulkan/radv_cmd_buffer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index d492456..2f16832 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; -- 2.7.4