[Mesa-dev] [PATCH 2/3] radv: use push descriptors in meta

Fredrik Höglund fredrik at kde.org
Thu Apr 13 22:26:59 UTC 2017


Use push descriptors instead of temp descriptor sets.

Signed-off-by: Fredrik Höglund <fredrik at kde.org>
---
 src/amd/vulkan/radv_meta_blit.c       |  51 +++---
 src/amd/vulkan/radv_meta_blit2d.c     |  94 +++++------
 src/amd/vulkan/radv_meta_buffer.c     | 122 ++++++--------
 src/amd/vulkan/radv_meta_bufimage.c   | 295 +++++++++++++++-------------------
 src/amd/vulkan/radv_meta_resolve_cs.c |  81 +++++-----
 src/amd/vulkan/radv_query.c           |  74 ++++-----
 6 files changed, 301 insertions(+), 416 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c
index 228aefaf4b..a3256ab05c 100644
--- a/src/amd/vulkan/radv_meta_blit.c
+++ b/src/amd/vulkan/radv_meta_blit.c
@@ -307,31 +307,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
 						 .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
 						 }, &cmd_buffer->pool->alloc, &sampler);
 
-	VkDescriptorSet set;
-	radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer,
-					        device->meta_state.blit.ds_layout,
-					        &set);
-
-	radv_UpdateDescriptorSets(radv_device_to_handle(device),
-				  1, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-							  .dstSet = set,
-							  .dstBinding = 0,
-							  .dstArrayElement = 0,
-							  .descriptorCount = 1,
-							  .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-							  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = sampler,
-								  .imageView = radv_image_view_to_handle(src_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  }
-				  }, 0, NULL);
-
 	VkFramebuffer fb;
 	radv_CreateFramebuffer(radv_device_to_handle(device),
 			       &(VkFramebufferCreateInfo) {
@@ -439,10 +414,26 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
 				     VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
 	}
 
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_GRAPHICS,
-				   device->meta_state.blit.pipeline_layout, 0, 1,
-				   &set, 0, NULL);
+	radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
+			              device->meta_state.blit.pipeline_layout,
+				      0, /* set */
+				      1, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+				                      .pImageInfo = (VkDescriptorImageInfo[]) {
+				                              {
+				                                      .sampler = sampler,
+				                                      .imageView = radv_image_view_to_handle(src_iview),
+				                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                              },
+				                      }
+				              }
+				      });
 
 	radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkViewport) {
 		.x = dest_offset_0.x,
@@ -471,7 +462,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
 	/* TODO: above comment is not valid for at least descriptor sets/pools,
 	 * as we may not free them till after execution finishes. Check others. */
 
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, set);
 	radv_DestroySampler(radv_device_to_handle(device), sampler,
 			    &cmd_buffer->pool->alloc);
 	radv_DestroyFramebuffer(radv_device_to_handle(device), fb,
@@ -1299,6 +1289,7 @@ radv_device_init_meta_blit_state(struct radv_device *device)
 
 	VkDescriptorSetLayoutCreateInfo ds_layout_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 1,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
diff --git a/src/amd/vulkan/radv_meta_blit2d.c b/src/amd/vulkan/radv_meta_blit2d.c
index e6848de7e9..f69fec8ea6 100644
--- a/src/amd/vulkan/radv_meta_blit2d.c
+++ b/src/amd/vulkan/radv_meta_blit2d.c
@@ -104,8 +104,6 @@ create_bview(struct radv_cmd_buffer *cmd_buffer,
 
 struct blit2d_src_temps {
 	struct radv_image_view iview;
-
-	VkDescriptorSet set;
 	struct radv_buffer_view bview;
 };
 
@@ -117,28 +115,24 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
                 enum blit2d_src_type src_type, VkFormat depth_format)
 {
 	struct radv_device *device = cmd_buffer->device;
-	VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
 
 	if (src_type == BLIT2D_SRC_TYPE_BUFFER) {
 		create_bview(cmd_buffer, src_buf, &tmp->bview, depth_format);
 
-		radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer,
-					        device->meta_state.blit2d.ds_layouts[src_type],
-					        &tmp->set);
-
-		radv_UpdateDescriptorSets(vk_device,
-					  1, /* writeCount */
-					  (VkWriteDescriptorSet[]) {
-						  {
-							  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-							  .dstSet = tmp->set,
-							  .dstBinding = 0,
-							  .dstArrayElement = 0,
-							  .descriptorCount = 1,
-							  .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
-							  .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->bview) }
-						  }
-					  }, 0, NULL);
+		radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
+					      device->meta_state.blit2d.p_layouts[src_type],
+					      0, /* set */
+					      1, /* descriptorWriteCount */
+					      (VkWriteDescriptorSet[]) {
+					              {
+					                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+					                      .dstBinding = 0,
+					                      .dstArrayElement = 0,
+					                      .descriptorCount = 1,
+					                      .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+					                      .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->bview) }
+					              }
+					      });
 
 		radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
 				      device->meta_state.blit2d.p_layouts[src_type],
@@ -148,44 +142,27 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
 		create_iview(cmd_buffer, src_img, VK_IMAGE_USAGE_SAMPLED_BIT, &tmp->iview,
 			     depth_format);
 
-		radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer,
-					        device->meta_state.blit2d.ds_layouts[src_type],
-					        &tmp->set);
-
-		radv_UpdateDescriptorSets(vk_device,
-					  1, /* writeCount */
-					  (VkWriteDescriptorSet[]) {
-						  {
-							  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-								  .dstSet = tmp->set,
-								  .dstBinding = 0,
-								  .dstArrayElement = 0,
-								  .descriptorCount = 1,
-								  .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-								  .pImageInfo = (VkDescriptorImageInfo[]) {
-								  {
-									  .sampler = VK_NULL_HANDLE,
-									  .imageView = radv_image_view_to_handle(&tmp->iview),
-									  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-								  },
-							  }
-						  }
-					  }, 0, NULL);
-
+		radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
+					      device->meta_state.blit2d.p_layouts[src_type],
+					      0, /* set */
+					      1, /* descriptorWriteCount */
+					      (VkWriteDescriptorSet[]) {
+					              {
+					                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+					                      .dstBinding = 0,
+					                      .dstArrayElement = 0,
+					                      .descriptorCount = 1,
+					                      .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+					                      .pImageInfo = (VkDescriptorImageInfo[]) {
+					                              {
+					                                      .sampler = VK_NULL_HANDLE,
+					                                      .imageView = radv_image_view_to_handle(&tmp->iview),
+					                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+					                              },
+					                      }
+					              }
+					      });
 	}
-
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_GRAPHICS,
-				   device->meta_state.blit2d.p_layouts[src_type], 0, 1,
-				   &tmp->set, 0, NULL);
-}
-
-static void
-blit2d_unbind_src(struct radv_cmd_buffer *cmd_buffer,
-                  struct blit2d_src_temps *tmp,
-                  enum blit2d_src_type src_type)
-{
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, tmp->set);
 }
 
 struct blit2d_dst_temps {
@@ -430,7 +407,6 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
 		/* At the point where we emit the draw call, all data from the
 		 * descriptor sets, etc. has been used.  We are free to delete it.
 		 */
-		blit2d_unbind_src(cmd_buffer, &src_temps, src_type);
 		blit2d_unbind_dst(cmd_buffer, &dst_temps);
 	}
 }
@@ -1228,6 +1204,7 @@ radv_device_init_meta_blit2d_state(struct radv_device *device)
 	result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
 						&(VkDescriptorSetLayoutCreateInfo) {
 							.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+							.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 								.bindingCount = 1,
 								.pBindings = (VkDescriptorSetLayoutBinding[]) {
 								{
@@ -1255,6 +1232,7 @@ radv_device_init_meta_blit2d_state(struct radv_device *device)
 	result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
 						&(VkDescriptorSetLayoutCreateInfo) {
 							.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+							.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 								.bindingCount = 1,
 								.pBindings = (VkDescriptorSetLayoutBinding[]) {
 								{
diff --git a/src/amd/vulkan/radv_meta_buffer.c b/src/amd/vulkan/radv_meta_buffer.c
index cb13f2f288..0bb926fa90 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -126,6 +126,7 @@ VkResult radv_device_init_meta_buffer_state(struct radv_device *device)
 
 	VkDescriptorSetLayoutCreateInfo fill_ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 1,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -147,6 +148,7 @@ VkResult radv_device_init_meta_buffer_state(struct radv_device *device)
 
 	VkDescriptorSetLayoutCreateInfo copy_ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -297,46 +299,37 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
 	struct radv_device *device = cmd_buffer->device;
 	uint64_t block_count = round_up_u64(size, 1024);
 	struct radv_meta_saved_compute_state saved_state;
-	VkDescriptorSet ds;
 
 	radv_meta_save_compute(&saved_state, cmd_buffer, 4);
 
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.buffer.fill_ds_layout,
-					&ds);
-
 	struct radv_buffer dst_buffer = {
 		.bo = bo,
 		.offset = offset,
 		.size = size
 	};
 
-	radv_UpdateDescriptorSets(radv_device_to_handle(device),
-				  1, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = ds,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-						  .pBufferInfo = &(VkDescriptorBufferInfo) {
-							.buffer = radv_buffer_to_handle(&dst_buffer),
-							.offset = 0,
-							.range = size
-						  }
-					  }
-				  }, 0, NULL);
-
 	radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
 			     VK_PIPELINE_BIND_POINT_COMPUTE,
 			     device->meta_state.buffer.fill_pipeline);
 
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.buffer.fill_p_layout, 0, 1,
-				   &ds, 0, NULL);
+	radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
+			              device->meta_state.buffer.fill_p_layout,
+				      0, /* set */
+				      1, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				                      .pBufferInfo = &(VkDescriptorBufferInfo) {
+				                              .buffer = radv_buffer_to_handle(&dst_buffer),
+				                              .offset = 0,
+				                              .range = size
+				                      }
+				              }
+				      });
 
 	radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
 			      device->meta_state.buffer.fill_p_layout,
@@ -345,8 +338,6 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
 
 	radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
 
-	radv_temp_descriptor_set_destroy(device, ds);
-
 	radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
 }
 
@@ -359,14 +350,9 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
 	struct radv_device *device = cmd_buffer->device;
 	uint64_t block_count = round_up_u64(size, 1024);
 	struct radv_meta_saved_compute_state saved_state;
-	VkDescriptorSet ds;
 
 	radv_meta_save_compute(&saved_state, cmd_buffer, 0);
 
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.buffer.copy_ds_layout,
-					&ds);
-
 	struct radv_buffer dst_buffer = {
 		.bo = dst_bo,
 		.offset = dst_offset,
@@ -379,51 +365,43 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
 		.size = size
 	};
 
-	radv_UpdateDescriptorSets(radv_device_to_handle(device),
-				  2, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = ds,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-						  .pBufferInfo = &(VkDescriptorBufferInfo) {
-							.buffer = radv_buffer_to_handle(&dst_buffer),
-							.offset = 0,
-							.range = size
-						  }
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = ds,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-						  .pBufferInfo = &(VkDescriptorBufferInfo) {
-							.buffer = radv_buffer_to_handle(&src_buffer),
-							.offset = 0,
-							.range = size
-						  }
-					  }
-				  }, 0, NULL);
-
 	radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
 			     VK_PIPELINE_BIND_POINT_COMPUTE,
 			     device->meta_state.buffer.copy_pipeline);
 
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.buffer.copy_p_layout, 0, 1,
-				   &ds, 0, NULL);
-
+	radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
+			              device->meta_state.buffer.copy_p_layout,
+				      0, /* set */
+				      2, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				                      .pBufferInfo = &(VkDescriptorBufferInfo) {
+				                              .buffer = radv_buffer_to_handle(&dst_buffer),
+				                              .offset = 0,
+				                              .range = size
+				                      }
+				              },
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 1,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				                      .pBufferInfo = &(VkDescriptorBufferInfo) {
+				                              .buffer = radv_buffer_to_handle(&src_buffer),
+				                              .offset = 0,
+				                              .range = size
+				                      }
+				              }
+				      });
 
 	radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
 
-	radv_temp_descriptor_set_destroy(device, ds);
-
 	radv_meta_restore_compute(&saved_state, cmd_buffer, 0);
 }
 
diff --git a/src/amd/vulkan/radv_meta_bufimage.c b/src/amd/vulkan/radv_meta_bufimage.c
index 4cdd070354..09a29d2d0c 100644
--- a/src/amd/vulkan/radv_meta_bufimage.c
+++ b/src/amd/vulkan/radv_meta_bufimage.c
@@ -133,6 +133,7 @@ radv_device_init_meta_itob_state(struct radv_device *device)
 	 */
 	VkDescriptorSetLayoutCreateInfo ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -328,6 +329,7 @@ radv_device_init_meta_btoi_state(struct radv_device *device)
 	 */
 	VkDescriptorSetLayoutCreateInfo ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -517,6 +519,7 @@ radv_device_init_meta_itoi_state(struct radv_device *device)
 	 */
 	VkDescriptorSetLayoutCreateInfo ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -670,6 +673,7 @@ radv_device_init_meta_cleari_state(struct radv_device *device)
 	 */
 	VkDescriptorSetLayoutCreateInfo ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 1,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -883,7 +887,6 @@ create_bview(struct radv_cmd_buffer *cmd_buffer,
 struct itob_temps {
 	struct radv_image_view src_iview;
 	struct radv_buffer_view dst_bview;
-	VkDescriptorSet set;
 };
 
 static void
@@ -891,45 +894,36 @@ itob_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
 		      struct itob_temps *tmp)
 {
 	struct radv_device *device = cmd_buffer->device;
-	VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
-
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.itob.img_ds_layout,
-					&tmp->set);
-
-	radv_UpdateDescriptorSets(vk_device,
-				  2, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&tmp->src_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
-						  .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->dst_bview) },
-					  }
-				  }, 0, NULL);
-
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.itob.img_p_layout, 0, 1,
-				   &tmp->set, 0, NULL);
+
+	radv_meta_push_descriptor_set(cmd_buffer,
+				      VK_PIPELINE_BIND_POINT_COMPUTE,
+				      device->meta_state.itob.img_p_layout,
+				      0, /* set */
+				      2, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+				                      .pImageInfo = (VkDescriptorImageInfo[]) {
+				                              {
+				                                      .sampler = VK_NULL_HANDLE,
+				                                      .imageView = radv_image_view_to_handle(&tmp->src_iview),
+				                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                              },
+				                      }
+				              },
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 1,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+				                      .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->dst_bview) },
+				              }
+				      });
 }
 
 static void
@@ -973,13 +967,11 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer,
 
 		radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
 	}
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
 }
 
 struct btoi_temps {
 	struct radv_buffer_view src_bview;
 	struct radv_image_view dst_iview;
-	VkDescriptorSet set;
 };
 
 static void
@@ -987,45 +979,36 @@ btoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
 		      struct btoi_temps *tmp)
 {
 	struct radv_device *device = cmd_buffer->device;
-	VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
-
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.btoi.img_ds_layout,
-					&tmp->set);
-
-	radv_UpdateDescriptorSets(vk_device,
-				  2, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
-						  .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->src_bview) },
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&tmp->dst_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  }
-				  }, 0, NULL);
-
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.btoi.img_p_layout, 0, 1,
-				   &tmp->set, 0, NULL);
+
+	radv_meta_push_descriptor_set(cmd_buffer,
+				      VK_PIPELINE_BIND_POINT_COMPUTE,
+				      device->meta_state.btoi.img_p_layout,
+				      0, /* set */
+				      2, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+				                      .pTexelBufferView = (VkBufferView[])  { radv_buffer_view_to_handle(&tmp->src_bview) },
+				              },
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 1,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+				                      .pImageInfo = (VkDescriptorImageInfo[]) {
+				                              {
+				                                      .sampler = VK_NULL_HANDLE,
+				                                      .imageView = radv_image_view_to_handle(&tmp->dst_iview),
+				                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                              },
+				                      }
+				              }
+				      });
 }
 
 static void
@@ -1069,13 +1052,11 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer,
 
 		radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
 	}
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
 }
 
 struct itoi_temps {
 	struct radv_image_view src_iview;
 	struct radv_image_view dst_iview;
-	VkDescriptorSet set;
 };
 
 static void
@@ -1083,51 +1064,42 @@ itoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
 		      struct itoi_temps *tmp)
 {
 	struct radv_device *device = cmd_buffer->device;
-	VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
-
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.itoi.img_ds_layout,
-					&tmp->set);
-
-	radv_UpdateDescriptorSets(vk_device,
-				  2, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&tmp->src_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&tmp->dst_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  }
-				  }, 0, NULL);
-
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.itoi.img_p_layout, 0, 1,
-				   &tmp->set, 0, NULL);
+
+	radv_meta_push_descriptor_set(cmd_buffer,
+				      VK_PIPELINE_BIND_POINT_COMPUTE,
+				      device->meta_state.itoi.img_p_layout,
+				      0, /* set */
+				      2, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                       .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                       .dstBinding = 0,
+				                       .dstArrayElement = 0,
+				                       .descriptorCount = 1,
+				                       .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+				                       .pImageInfo = (VkDescriptorImageInfo[]) {
+				                               {
+				                                       .sampler = VK_NULL_HANDLE,
+				                                       .imageView = radv_image_view_to_handle(&tmp->src_iview),
+				                                       .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                               },
+				                       }
+				              },
+				              {
+				                       .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                       .dstBinding = 1,
+				                       .dstArrayElement = 0,
+				                       .descriptorCount = 1,
+				                       .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+				                       .pImageInfo = (VkDescriptorImageInfo[]) {
+				                               {
+				                                       .sampler = VK_NULL_HANDLE,
+				                                       .imageView = radv_image_view_to_handle(&tmp->dst_iview),
+				                                       .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                               },
+				                       }
+				              }
+				      });
 }
 
 static void
@@ -1173,49 +1145,35 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer,
 
 		radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
 	}
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
 }
 
-struct cleari_temps {
-	struct radv_image_view dst_iview;
-	VkDescriptorSet set;
-};
-
 static void
 cleari_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
-			struct cleari_temps *tmp)
+	                struct radv_image_view *dst_iview)
 {
 	struct radv_device *device = cmd_buffer->device;
-	VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
-
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.cleari.img_ds_layout,
-					&tmp->set);
-
-	radv_UpdateDescriptorSets(vk_device,
-				  1, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = tmp->set,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&tmp->dst_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  },
-				  }, 0, NULL);
-
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.cleari.img_p_layout, 0, 1,
-				   &tmp->set, 0, NULL);
+
+	radv_meta_push_descriptor_set(cmd_buffer,
+				      VK_PIPELINE_BIND_POINT_COMPUTE,
+				      device->meta_state.cleari.img_p_layout,
+				      0, /* set */
+				      1, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+				                      .pImageInfo = (VkDescriptorImageInfo[]) {
+				                               {
+				                                      .sampler = VK_NULL_HANDLE,
+				                                      .imageView = radv_image_view_to_handle(dst_iview),
+				                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+				                               },
+				                      }
+				               },
+				      });
 }
 
 static void
@@ -1236,10 +1194,10 @@ radv_meta_clear_image_cs(struct radv_cmd_buffer *cmd_buffer,
 			 const VkClearColorValue *clear_color)
 {
 	struct radv_device *device = cmd_buffer->device;
-	struct cleari_temps temps;
+	struct radv_image_view dst_iview;
 
-	create_iview(cmd_buffer, dst, VK_IMAGE_USAGE_STORAGE_BIT, &temps.dst_iview);
-	cleari_bind_descriptors(cmd_buffer, &temps);
+	create_iview(cmd_buffer, dst, VK_IMAGE_USAGE_STORAGE_BIT, &dst_iview);
+	cleari_bind_descriptors(cmd_buffer, &dst_iview);
 
 	cleari_bind_pipeline(cmd_buffer);
 
@@ -1256,5 +1214,4 @@ radv_meta_clear_image_cs(struct radv_cmd_buffer *cmd_buffer,
 			      push_constants);
 
 	radv_unaligned_dispatch(cmd_buffer, dst->image->extent.width, dst->image->extent.height, 1);
-	radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
 }
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c
index dc0672ec98..ffa07cac5f 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -179,6 +179,7 @@ create_layout(struct radv_device *device)
 	 */
 	VkDescriptorSetLayoutCreateInfo ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -369,7 +370,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
 		     ++layer) {
 
 			struct radv_image_view src_iview;
-			VkDescriptorSet set;
 			radv_image_view_init(&src_iview, cmd_buffer->device,
 					     &(VkImageViewCreateInfo) {
 						     .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
@@ -404,49 +404,41 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
 					     cmd_buffer, VK_IMAGE_USAGE_STORAGE_BIT);
 
 
-			radv_temp_descriptor_set_create(device, cmd_buffer,
-							device->meta_state.resolve_compute.ds_layout,
-							&set);
-
-			radv_UpdateDescriptorSets(radv_device_to_handle(device),
-						  2, /* writeCount */
-						  (VkWriteDescriptorSet[]) {
-						  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = set,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&src_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = set,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-						  .pImageInfo = (VkDescriptorImageInfo[]) {
-							  {
-								  .sampler = VK_NULL_HANDLE,
-								  .imageView = radv_image_view_to_handle(&dest_iview),
-								  .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-							  },
-						  }
-					  }
-				  }, 0, NULL);
-
-			radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-						   VK_PIPELINE_BIND_POINT_COMPUTE,
-						   device->meta_state.resolve_compute.p_layout, 0, 1,
-						   &set, 0, NULL);
+			radv_meta_push_descriptor_set(cmd_buffer,
+						      VK_PIPELINE_BIND_POINT_COMPUTE,
+						      device->meta_state.resolve_compute.p_layout,
+						      0, /* set */
+						      2, /* descriptorWriteCount */
+						      (VkWriteDescriptorSet[]) {
+						              {
+						                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+						                      .dstBinding = 0,
+						                      .dstArrayElement = 0,
+						                      .descriptorCount = 1,
+						                      .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+						                      .pImageInfo = (VkDescriptorImageInfo[]) {
+						                              {
+						                                      .sampler = VK_NULL_HANDLE,
+						                                      .imageView = radv_image_view_to_handle(&src_iview),
+						                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+						                              },
+						                      }
+						              },
+						              {
+						                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+						                      .dstBinding = 1,
+						                      .dstArrayElement = 0,
+						                      .descriptorCount = 1,
+						                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+						                      .pImageInfo = (VkDescriptorImageInfo[]) {
+						                              {
+						                                      .sampler = VK_NULL_HANDLE,
+						                                      .imageView = radv_image_view_to_handle(&dest_iview),
+						                                      .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+						                              },
+						                      }
+					                      }
+				                      });
 
 			VkPipeline pipeline;
 			if (vk_format_is_int(src_image->vk_format))
@@ -469,7 +461,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
 					      VK_SHADER_STAGE_COMPUTE_BIT, 0, 16,
 					      push_constants);
 			radv_unaligned_dispatch(cmd_buffer, extent.width, extent.height, 1);
-			radv_temp_descriptor_set_destroy(cmd_buffer->device, set);
 		}
 	}
 	radv_meta_restore_compute(&saved_state, cmd_buffer, 16);
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index fa5a3b6df2..7e0fd1d073 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -529,6 +529,7 @@ VkResult radv_device_init_meta_query_state(struct radv_device *device)
 
 	VkDescriptorSetLayoutCreateInfo occlusion_ds_create_info = {
 		.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+		.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
 		.bindingCount = 2,
 		.pBindings = (VkDescriptorSetLayoutBinding[]) {
 			{
@@ -656,14 +657,9 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
 {
 	struct radv_device *device = cmd_buffer->device;
 	struct radv_meta_saved_compute_state saved_state;
-	VkDescriptorSet ds;
 
 	radv_meta_save_compute(&saved_state, cmd_buffer, 4);
 
-	radv_temp_descriptor_set_create(device, cmd_buffer,
-					device->meta_state.query.ds_layout,
-					&ds);
-
 	struct radv_buffer dst_buffer = {
 		.bo = dst_bo,
 		.offset = dst_offset,
@@ -676,44 +672,40 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
 		.size = MAX2(src_stride * count, avail_offset + 4 * count - src_offset)
 	};
 
-	radv_UpdateDescriptorSets(radv_device_to_handle(device),
-				  2, /* writeCount */
-				  (VkWriteDescriptorSet[]) {
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = ds,
-						  .dstBinding = 0,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-						  .pBufferInfo = &(VkDescriptorBufferInfo) {
-							.buffer = radv_buffer_to_handle(&dst_buffer),
-							.offset = 0,
-							.range = VK_WHOLE_SIZE
-						  }
-					  },
-					  {
-						  .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-						  .dstSet = ds,
-						  .dstBinding = 1,
-						  .dstArrayElement = 0,
-						  .descriptorCount = 1,
-						  .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-						  .pBufferInfo = &(VkDescriptorBufferInfo) {
-							.buffer = radv_buffer_to_handle(&src_buffer),
-							.offset = 0,
-							.range = VK_WHOLE_SIZE
-						  }
-					  }
-				  }, 0, NULL);
-
 	radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
 			     VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
 
-	radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
-				   VK_PIPELINE_BIND_POINT_COMPUTE,
-				   device->meta_state.query.p_layout, 0, 1,
-				   &ds, 0, NULL);
+	radv_meta_push_descriptor_set(cmd_buffer,
+				      VK_PIPELINE_BIND_POINT_COMPUTE,
+				      device->meta_state.query.p_layout,
+				      0, /* set */
+				      2, /* descriptorWriteCount */
+				      (VkWriteDescriptorSet[]) {
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 0,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				                      .pBufferInfo = &(VkDescriptorBufferInfo) {
+				                              .buffer = radv_buffer_to_handle(&dst_buffer),
+				                              .offset = 0,
+				                              .range = VK_WHOLE_SIZE
+				                      }
+				              },
+				              {
+				                      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+				                      .dstBinding = 1,
+				                      .dstArrayElement = 0,
+				                      .descriptorCount = 1,
+				                      .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				                      .pBufferInfo = &(VkDescriptorBufferInfo) {
+				                              .buffer = radv_buffer_to_handle(&src_buffer),
+				                              .offset = 0,
+				                              .range = VK_WHOLE_SIZE
+				                      }
+				              }
+				      });
 
 	/* Encode the number of elements for easy access by the shader. */
 	pipeline_stats_mask &= 0x7ff;
@@ -750,8 +742,6 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
 	                                RADV_CMD_FLAG_INV_VMEM_L1 |
 	                                RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
 
-	radv_temp_descriptor_set_destroy(device, ds);
-
 	radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
 }
 
-- 
2.11.0



More information about the mesa-dev mailing list