[Mesa-dev] [PATCH 8/8] radv: add mipmaps support for DCC decompression on compute
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Mon Jun 17 20:02:30 UTC 2019
r-b
On Mon, Jun 17, 2019 at 12:41 PM Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/amd/vulkan/radv_meta_fast_clear.c | 106 +++++++++++++-------------
> 1 file changed, 54 insertions(+), 52 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
> index 1e7eb80618f..feeb0a1b7ed 100644
> --- a/src/amd/vulkan/radv_meta_fast_clear.c
> +++ b/src/amd/vulkan/radv_meta_fast_clear.c
> @@ -779,7 +779,7 @@ radv_decompress_dcc_compute(struct radv_cmd_buffer *cmd_buffer,
> struct radv_image_view iview = {0};
> struct radv_device *device = cmd_buffer->device;
>
> - /* This assumes the image is 2d with 1 layer and 1 mipmap level */
> + /* This assumes the image is 2d with 1 layer */
> struct radv_cmd_state *state = &cmd_buffer->state;
>
> state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB |
> @@ -800,58 +800,60 @@ radv_decompress_dcc_compute(struct radv_cmd_buffer *cmd_buffer,
> VK_PIPELINE_BIND_POINT_COMPUTE,
> device->meta_state.fast_clear_flush.dcc_decompress_compute_pipeline);
>
> - 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 = 0,
> - .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 l = 0; l < radv_get_levelCount(image, subresourceRange); 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 = 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, image->info.width, image->info.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, image->info.width, image->info.height, 1);
> + }
>
> /* Mark this image as actually being decompressed. */
> radv_update_dcc_metadata(cmd_buffer, image, subresourceRange, false);
> --
> 2.22.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list