[Mesa-dev] [PATCH] radv: use a 16 bytes array for the sampled/storage image descriptors

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Nov 21 21:58:37 UTC 2017


You'll want to change the title to 16 words instead of 16 bytes. Otherwise

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Wed, Nov 15, 2017 at 12:08 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This allows to update them with only one memcpy().
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/amd/vulkan/radv_descriptor_set.c | 9 +++++----
>  src/amd/vulkan/radv_image.c          | 5 +----
>  src/amd/vulkan/radv_private.h        | 6 ++----
>  3 files changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
> index a98ff37ced..382fc9330a 100644
> --- a/src/amd/vulkan/radv_descriptor_set.c
> +++ b/src/amd/vulkan/radv_descriptor_set.c
> @@ -629,15 +629,16 @@ write_image_descriptor(struct radv_device *device,
>                        const VkDescriptorImageInfo *image_info)
>  {
>         RADV_FROM_HANDLE(radv_image_view, iview, image_info->imageView);
> +       uint32_t *descriptor;
>
>         if (descriptor_type == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
> -               memcpy(dst, iview->storage_descriptor, 8 * 4);
> -               memcpy(dst + 8, iview->storage_fmask_descriptor, 8 * 4);
> +               descriptor = iview->storage_descriptor;
>         } else {
> -               memcpy(dst, iview->descriptor, 8 * 4);
> -               memcpy(dst + 8, iview->fmask_descriptor, 8 * 4);
> +               descriptor = iview->descriptor;
>         }
>
> +       memcpy(dst, descriptor, 16 * 4);
> +
>         if (cmd_buffer)
>                 radv_cs_add_buffer(device->ws, cmd_buffer->cs, iview->bo, 7);
>         else
> diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
> index 163d35d76b..b532aa916a 100644
> --- a/src/amd/vulkan/radv_image.c
> +++ b/src/amd/vulkan/radv_image.c
> @@ -956,15 +956,12 @@ radv_image_view_make_descriptor(struct radv_image_view *iview,
>         bool is_stencil = iview->aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT;
>         uint32_t blk_w;
>         uint32_t *descriptor;
> -       uint32_t *fmask_descriptor;
>         uint32_t hw_level = 0;
>
>         if (is_storage_image) {
>                 descriptor = iview->storage_descriptor;
> -               fmask_descriptor = iview->storage_fmask_descriptor;
>         } else {
>                 descriptor = iview->descriptor;
> -               fmask_descriptor = iview->fmask_descriptor;
>         }
>
>         assert(image->surface.blk_w % vk_format_get_blockwidth(image->vk_format) == 0);
> @@ -983,7 +980,7 @@ radv_image_view_make_descriptor(struct radv_image_view *iview,
>                                    iview->extent.height,
>                                    iview->extent.depth,
>                                    descriptor,
> -                                  fmask_descriptor);
> +                                  descriptor + 8);
>
>         const struct legacy_surf_level *base_level_info = NULL;
>         if (device->physical_device->rad_info.chip_class <= GFX9) {
> diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
> index 5be3f47b46..5a59012a28 100644
> --- a/src/amd/vulkan/radv_private.h
> +++ b/src/amd/vulkan/radv_private.h
> @@ -1370,14 +1370,12 @@ struct radv_image_view {
>         uint32_t level_count;
>         VkExtent3D extent; /**< Extent of VkImageViewCreateInfo::baseMipLevel. */
>
> -       uint32_t descriptor[8];
> -       uint32_t fmask_descriptor[8];
> +       uint32_t descriptor[16];
>
>         /* Descriptor for use as a storage image as opposed to a sampled image.
>          * This has a few differences for cube maps (e.g. type).
>          */
> -       uint32_t storage_descriptor[8];
> -       uint32_t storage_fmask_descriptor[8];
> +       uint32_t storage_descriptor[16];
>  };
>
>  struct radv_image_create_info {
> --
> 2.15.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