panvk: Make panvk_image_view derive from vk_image_view
authorJason Ekstrand <jason.ekstrand@collabora.com>
Fri, 11 Mar 2022 20:13:28 +0000 (14:13 -0600)
committerMarge Bot <emma+marge@anholt.net>
Mon, 14 Mar 2022 23:04:09 +0000 (23:04 +0000)
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15382>

src/panfrost/vulkan/panvk_image.c
src/panfrost/vulkan/panvk_private.h
src/panfrost/vulkan/panvk_vX_image.c

index 3f7ae6e..38bc774 100644 (file)
@@ -258,7 +258,7 @@ panvk_DestroyImageView(VkDevice _device,
       return;
 
    panfrost_bo_unreference(view->bo);
-   vk_object_free(&device->vk, pAllocator, view);
+   vk_image_view_destroy(&device->vk, pAllocator, &view->vk);
 }
 
 void
index 1b1d9e8..be25e4c 100644 (file)
@@ -949,10 +949,10 @@ panvk_image_get_total_size(const struct panvk_image *image);
 #define ATTRIB_BUF_DESC_WORDS 4
 
 struct panvk_image_view {
-   struct vk_object_base base;
+   struct vk_image_view vk;
+
    struct pan_image_view pview;
 
-   VkFormat vk_format;
    struct panfrost_bo *bo;
    struct {
       uint32_t tex[TEXTURE_DESC_WORDS];
@@ -1063,7 +1063,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_fence, base, VkFence, VK_OBJECT_TYPE_FENCE)
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_framebuffer, base, VkFramebuffer, VK_OBJECT_TYPE_FRAMEBUFFER)
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image, vk.base, VkImage, VK_OBJECT_TYPE_IMAGE)
-VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image_view, base, VkImageView, VK_OBJECT_TYPE_IMAGE_VIEW);
+VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image_view, vk.base, VkImageView, VK_OBJECT_TYPE_IMAGE_VIEW);
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_cache, base, VkPipelineCache, VK_OBJECT_TYPE_PIPELINE_CACHE)
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline, base, VkPipeline, VK_OBJECT_TYPE_PIPELINE)
 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_layout, base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT)
index 9f2f9ee..4692ee0 100644 (file)
@@ -63,9 +63,6 @@ panvk_convert_swizzle(const VkComponentMapping *in,
    const VkComponentSwizzle *comp = &in->r;
    for (unsigned i = 0; i < 4; i++) {
       switch (comp[i]) {
-      case VK_COMPONENT_SWIZZLE_IDENTITY:
-         out[i] = PIPE_SWIZZLE_X + i;
-         break;
       case VK_COMPONENT_SWIZZLE_ZERO:
          out[i] = PIPE_SWIZZLE_0;
          break;
@@ -100,40 +97,28 @@ panvk_per_arch(CreateImageView)(VkDevice _device,
    VK_FROM_HANDLE(panvk_image, image, pCreateInfo->image);
    struct panvk_image_view *view;
 
-   view = vk_object_zalloc(&device->vk, pAllocator, sizeof(*view),
-                          VK_OBJECT_TYPE_IMAGE_VIEW);
+   view = vk_image_view_create(&device->vk, pCreateInfo,
+                               pAllocator, sizeof(*view));
    if (view == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   view->pview.format = vk_format_to_pipe_format(pCreateInfo->format);
-
-   if (pCreateInfo->subresourceRange.aspectMask == VK_IMAGE_ASPECT_DEPTH_BIT)
-      view->pview.format = util_format_get_depth_only(view->pview.format);
-   else if (pCreateInfo->subresourceRange.aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT)
-      view->pview.format = util_format_stencil_only(view->pview.format);
-
-   unsigned level_count =
-      pCreateInfo->subresourceRange.levelCount == VK_REMAINING_MIP_LEVELS ?
-      image->pimage.layout.nr_slices - pCreateInfo->subresourceRange.baseMipLevel :
-      pCreateInfo->subresourceRange.levelCount;
-   unsigned layer_count =
-      pCreateInfo->subresourceRange.layerCount == VK_REMAINING_ARRAY_LAYERS ?
-      image->pimage.layout.array_size - pCreateInfo->subresourceRange.baseArrayLayer :
-      pCreateInfo->subresourceRange.layerCount;
-
-   view->pview.dim = panvk_view_type_to_mali_tex_dim(pCreateInfo->viewType);
-   view->pview.first_level = pCreateInfo->subresourceRange.baseMipLevel;
-   view->pview.last_level = pCreateInfo->subresourceRange.baseMipLevel + level_count - 1;
-   view->pview.first_layer = pCreateInfo->subresourceRange.baseArrayLayer;
-   view->pview.last_layer = pCreateInfo->subresourceRange.baseArrayLayer + layer_count - 1;
-   panvk_convert_swizzle(&pCreateInfo->components, view->pview.swizzle);
-   view->pview.image = &image->pimage;
-   view->pview.nr_samples = image->pimage.layout.nr_samples;
-   view->vk_format = pCreateInfo->format;
+   view->pview = (struct pan_image_view) {
+      .image = &image->pimage,
+      .format = vk_format_to_pipe_format(view->vk.view_format),
+      .dim = panvk_view_type_to_mali_tex_dim(view->vk.view_type),
+      .nr_samples = image->pimage.layout.nr_samples,
+      .first_level = view->vk.base_mip_level,
+      .last_level = view->vk.base_mip_level +
+                    view->vk.level_count - 1,
+      .first_layer = view->vk.base_array_layer,
+      .last_layer = view->vk.base_array_layer +
+                    view->vk.layer_count - 1,
+   };
+   panvk_convert_swizzle(&view->vk.swizzle, view->pview.swizzle);
 
    struct panfrost_device *pdev = &device->physical_device->pdev;
 
-   if (image->vk.usage &
+   if (view->vk.usage &
        (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
       unsigned bo_size =
          GENX(panfrost_estimate_texture_payload_size)(&view->pview) +
@@ -154,7 +139,7 @@ panvk_per_arch(CreateImageView)(VkDevice _device,
       GENX(panfrost_new_texture)(pdev, &view->pview, tex_desc, &surf_descs);
    }
 
-   if (image->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT) {
+   if (view->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT) {
       uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf;
       bool is_3d = image->pimage.layout.dim == MALI_TEXTURE_DIMENSION_3D;
       unsigned offset = image->pimage.data.offset;