radv: cleanup some image view descriptor setup.
authorDave Airlie <airlied@redhat.com>
Mon, 21 Aug 2017 03:56:33 +0000 (13:56 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 24 Aug 2017 00:14:14 +0000 (01:14 +0100)
Avoid passing the vulkan image creation into the image view descriptor
setup. This cleans up the usage of range inside the init, instead
using the properly inited values in the image view.

This is just a cleanup but some future vega changes will depend on it.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Cc: "17.2" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_image.c
src/amd/vulkan/radv_private.h

index c0c120e216e36fae463120a5912675a054501c0c..5e3804117015e1bdc65e8a49f0cac25732a47a15 100644 (file)
@@ -862,11 +862,10 @@ radv_image_create(VkDevice _device,
 static void
 radv_image_view_make_descriptor(struct radv_image_view *iview,
                                struct radv_device *device,
-                               const VkImageViewCreateInfo* pCreateInfo,
+                               const VkComponentMapping *components,
                                bool is_storage_image)
 {
-       RADV_FROM_HANDLE(radv_image, image, pCreateInfo->image);
-       const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange;
+       struct radv_image *image = iview->image;
        bool is_stencil = iview->aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT;
        uint32_t blk_w;
        uint32_t *descriptor;
@@ -886,20 +885,27 @@ radv_image_view_make_descriptor(struct radv_image_view *iview,
        si_make_texture_descriptor(device, image, is_storage_image,
                                   iview->type,
                                   iview->vk_format,
-                                  &pCreateInfo->components,
-                                  0, radv_get_levelCount(image, range) - 1,
-                                  range->baseArrayLayer,
-                                  range->baseArrayLayer + radv_get_layerCount(image, range) - 1,
+                                  components,
+                                  0, iview->level_count - 1,
+                                  iview->base_layer,
+                                  iview->base_layer + iview->layer_count - 1,
                                   iview->extent.width,
                                   iview->extent.height,
                                   iview->extent.depth,
                                   descriptor,
                                   fmask_descriptor);
+
+       const struct legacy_surf_level *base_level_info = NULL;
+       if (device->physical_device->rad_info.chip_class <= GFX9) {
+               if (is_stencil)
+                       base_level_info = &image->surface.u.legacy.stencil_level[iview->base_mip];
+               else
+                       base_level_info = &image->surface.u.legacy.level[iview->base_mip];
+       }
        si_set_mutable_tex_desc_fields(device, image,
-                                      is_stencil ? &image->surface.u.legacy.stencil_level[range->baseMipLevel]
-                                                 : &image->surface.u.legacy.level[range->baseMipLevel],
-                                      range->baseMipLevel,
-                                      range->baseMipLevel,
+                                      base_level_info,
+                                      iview->base_mip,
+                                      iview->base_mip,
                                       blk_w, is_stencil, descriptor);
 }
 
@@ -949,9 +955,10 @@ radv_image_view_init(struct radv_image_view *iview,
        iview->base_layer = range->baseArrayLayer;
        iview->layer_count = radv_get_layerCount(image, range);
        iview->base_mip = range->baseMipLevel;
+       iview->level_count = radv_get_levelCount(image, range);
 
-       radv_image_view_make_descriptor(iview, device, pCreateInfo, false);
-       radv_image_view_make_descriptor(iview, device, pCreateInfo, true);
+       radv_image_view_make_descriptor(iview, device, &pCreateInfo->components, false);
+       radv_image_view_make_descriptor(iview, device, &pCreateInfo->components, true);
 }
 
 bool radv_layout_has_htile(const struct radv_image *image,
index 0d46cf6c960a73641cf47e74daa876ecf92ec17d..c2a4cfb04bc543d09a54ccfa253267e3f8a7f09c 100644 (file)
@@ -1305,6 +1305,7 @@ struct radv_image_view {
        uint32_t base_layer;
        uint32_t layer_count;
        uint32_t base_mip;
+       uint32_t level_count;
        VkExtent3D extent; /**< Extent of VkImageViewCreateInfo::baseMipLevel. */
 
        uint32_t descriptor[8];