[Mesa-dev] [PATCH 3/6] radv: add support for decompressing DCC layers with compute

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Jun 28 07:23:20 UTC 2019


Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/vulkan/radv_meta_fast_clear.c | 104 +++++++++++++-------------
 1 file changed, 53 insertions(+), 51 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index a642d6243d4..d601686f8f6 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -818,58 +818,60 @@ radv_decompress_dcc_compute(struct radv_cmd_buffer *cmd_buffer,
 		height = radv_minify(image->info.height,
 				    subresourceRange->baseMipLevel + l);
 
-		radv_image_view_init(&iview, cmd_buffer->device,
-				     &(VkImageViewCreateInfo) {
-					     .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
-						     .image = radv_image_to_handle(image),
-						     .viewType = VK_IMAGE_VIEW_TYPE_2D,
-						     .format = image->vk_format,
-						     .subresourceRange = {
-							.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
-							.baseMipLevel = subresourceRange->baseMipLevel + l,
-							.levelCount = 1,
-							.baseArrayLayer = 0,
-							.layerCount = 1
-						     },
-				     });
-
-		radv_meta_push_descriptor_set(cmd_buffer,
-					      VK_PIPELINE_BIND_POINT_COMPUTE,
-					      device->meta_state.fast_clear_flush.dcc_decompress_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(&iview),
-					                                       .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-					                               },
-					                       }
-					              },
+		for (uint32_t s = 0; s < radv_get_layerCount(image, subresourceRange); s++) {
+			radv_image_view_init(&iview, cmd_buffer->device,
+					     &(VkImageViewCreateInfo) {
+						     .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+							     .image = radv_image_to_handle(image),
+							     .viewType = VK_IMAGE_VIEW_TYPE_2D,
+							     .format = image->vk_format,
+							     .subresourceRange = {
+								.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+								.baseMipLevel = subresourceRange->baseMipLevel + l,
+								.levelCount = 1,
+								.baseArrayLayer = subresourceRange->baseArrayLayer + s,
+								.layerCount = 1
+							     },
+					     });
+
+			radv_meta_push_descriptor_set(cmd_buffer,
+						      VK_PIPELINE_BIND_POINT_COMPUTE,
+						      device->meta_state.fast_clear_flush.dcc_decompress_compute_p_layout,
+						      0, /* set */
+						      2, /* descriptorWriteCount */
+						      (VkWriteDescriptorSet[]) {
 					              {
-					                       .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(&iview),
-					                                       .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
-					                               },
-					                       }
-					              }
-					      });
-
-		radv_unaligned_dispatch(cmd_buffer, width, height, 1);
+						                       .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(&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(&iview),
+						                                       .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
+						                               },
+						                       }
+						              }
+						      });
+
+			radv_unaligned_dispatch(cmd_buffer, width, height, 1);
+		}
 	}
 
 	/* Mark this image as actually being decompressed. */
-- 
2.22.0



More information about the mesa-dev mailing list