Mesa (main): venus: add struct vn_image_memory_requirements

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Oct 28 00:33:48 UTC 2021


Module: Mesa
Branch: main
Commit: fc237f80c6142171df695ecbfc3c981262672997
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fc237f80c6142171df695ecbfc3c981262672997

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Thu Oct 21 06:06:10 2021 +0000

venus: add struct vn_image_memory_requirements

This aligns with vn_buffer_memory_requirements and can potentially
simplify future image memory requirements cache init.

Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13428>

---

 src/virtio/vulkan/vn_device_memory.c |  5 ++---
 src/virtio/vulkan/vn_image.c         | 26 +++++++++++++-------------
 src/virtio/vulkan/vn_image.h         |  8 ++++++--
 3 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/virtio/vulkan/vn_device_memory.c b/src/virtio/vulkan/vn_device_memory.c
index 43ae4d162a7..c281794e789 100644
--- a/src/virtio/vulkan/vn_device_memory.c
+++ b/src/virtio/vulkan/vn_device_memory.c
@@ -205,9 +205,8 @@ vn_device_memory_should_suballocate(const VkMemoryAllocateInfo *alloc_info,
 
       const struct vn_image *img = vn_image_from_handle(dedicated->image);
       if (img) {
-         for (uint32_t i = 0; i < ARRAY_SIZE(img->dedicated_requirements);
-              i++) {
-            if (img->dedicated_requirements[i].requiresDedicatedAllocation)
+         for (uint32_t i = 0; i < ARRAY_SIZE(img->requirements); i++) {
+            if (img->requirements[i].dedicated.requiresDedicatedAllocation)
                return false;
          }
       }
diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c
index 88a3c7bce77..2dd63309927 100644
--- a/src/virtio/vulkan/vn_image.c
+++ b/src/virtio/vulkan/vn_image.c
@@ -60,16 +60,16 @@ vn_image_init_memory_requirements(struct vn_image *img,
          break;
       }
    }
-   assert(plane_count <= ARRAY_SIZE(img->memory_requirements));
+   assert(plane_count <= ARRAY_SIZE(img->requirements));
 
    /* TODO add a per-device cache for the requirements */
    for (uint32_t i = 0; i < plane_count; i++) {
-      img->memory_requirements[i].sType =
+      img->requirements[i].memory.sType =
          VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
-      img->memory_requirements[i].pNext = &img->dedicated_requirements[i];
-      img->dedicated_requirements[i].sType =
+      img->requirements[i].memory.pNext = &img->requirements[i].dedicated;
+      img->requirements[i].dedicated.sType =
          VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
-      img->dedicated_requirements[i].pNext = NULL;
+      img->requirements[i].dedicated.pNext = NULL;
    }
 
    VkDevice dev_handle = vn_device_to_handle(dev);
@@ -81,12 +81,12 @@ vn_image_init_memory_requirements(struct vn_image *img,
             .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
             .image = img_handle,
          },
-         &img->memory_requirements[0]);
+         &img->requirements[0].memory);
 
       /* AHB backed image requires dedicated allocation */
       if (img->deferred_info) {
-         img->dedicated_requirements[0].prefersDedicatedAllocation = VK_TRUE;
-         img->dedicated_requirements[0].requiresDedicatedAllocation = VK_TRUE;
+         img->requirements[0].dedicated.prefersDedicatedAllocation = VK_TRUE;
+         img->requirements[0].dedicated.requiresDedicatedAllocation = VK_TRUE;
       }
    } else {
       for (uint32_t i = 0; i < plane_count; i++) {
@@ -102,7 +102,7 @@ vn_image_init_memory_requirements(struct vn_image *img,
                   },
                .image = img_handle,
             },
-            &img->memory_requirements[i]);
+            &img->requirements[i].memory);
       }
    }
 }
@@ -314,7 +314,7 @@ vn_GetImageMemoryRequirements(VkDevice device,
 {
    const struct vn_image *img = vn_image_from_handle(image);
 
-   *pMemoryRequirements = img->memory_requirements[0].memoryRequirements;
+   *pMemoryRequirements = img->requirements[0].memory.memoryRequirements;
 }
 
 void
@@ -366,13 +366,13 @@ vn_GetImageMemoryRequirements2(VkDevice device,
       switch (u.pnext->sType) {
       case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:
          u.two->memoryRequirements =
-            img->memory_requirements[plane].memoryRequirements;
+            img->requirements[plane].memory.memoryRequirements;
          break;
       case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
          u.dedicated->prefersDedicatedAllocation =
-            img->dedicated_requirements[plane].prefersDedicatedAllocation;
+            img->requirements[plane].dedicated.prefersDedicatedAllocation;
          u.dedicated->requiresDedicatedAllocation =
-            img->dedicated_requirements[plane].requiresDedicatedAllocation;
+            img->requirements[plane].dedicated.requiresDedicatedAllocation;
          break;
       default:
          break;
diff --git a/src/virtio/vulkan/vn_image.h b/src/virtio/vulkan/vn_image.h
index a61319912cc..f91d5294aea 100644
--- a/src/virtio/vulkan/vn_image.h
+++ b/src/virtio/vulkan/vn_image.h
@@ -18,6 +18,11 @@
  */
 #define VN_PRESENT_SRC_INTERNAL_LAYOUT VK_IMAGE_LAYOUT_GENERAL
 
+struct vn_image_memory_requirements {
+   VkMemoryRequirements2 memory;
+   VkMemoryDedicatedRequirements dedicated;
+};
+
 struct vn_image_create_deferred_info {
    VkImageCreateInfo create;
    VkImageFormatListCreateInfo list;
@@ -29,8 +34,7 @@ struct vn_image {
 
    VkSharingMode sharing_mode;
 
-   VkMemoryRequirements2 memory_requirements[4];
-   VkMemoryDedicatedRequirements dedicated_requirements[4];
+   struct vn_image_memory_requirements requirements[4];
 
    bool is_wsi;
    bool is_prime_blit_src;



More information about the mesa-commit mailing list