Mesa (master): venus: split out vn_buffer.[ch]

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 9 17:09:11 UTC 2021


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

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Wed Apr  7 17:25:40 2021 -0700

venus: split out vn_buffer.[ch]

Move VkBuffer{,View} functions to the new files.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Acked-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10117>

---

 src/virtio/vulkan/meson.build |   1 +
 src/virtio/vulkan/vn_buffer.c | 251 ++++++++++++++++++++++++++++++++++++++++++
 src/virtio/vulkan/vn_buffer.h |  35 ++++++
 src/virtio/vulkan/vn_device.c | 235 ---------------------------------------
 src/virtio/vulkan/vn_device.h |  19 ----
 5 files changed, 287 insertions(+), 254 deletions(-)

diff --git a/src/virtio/vulkan/meson.build b/src/virtio/vulkan/meson.build
index 7b03148861c..03c13d8ff08 100644
--- a/src/virtio/vulkan/meson.build
+++ b/src/virtio/vulkan/meson.build
@@ -31,6 +31,7 @@ virtio_icd = custom_target(
 )
 
 libvn_files = files(
+  'vn_buffer.c',
   'vn_command_buffer.c',
   'vn_common.c',
   'vn_cs.c',
diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c
new file mode 100644
index 00000000000..70d129c21b3
--- /dev/null
+++ b/src/virtio/vulkan/vn_buffer.c
@@ -0,0 +1,251 @@
+/*
+ * Copyright 2019 Google LLC
+ * SPDX-License-Identifier: MIT
+ *
+ * based in part on anv and radv which are:
+ * Copyright © 2015 Intel Corporation
+ * Copyright © 2016 Red Hat.
+ * Copyright © 2016 Bas Nieuwenhuizen
+ */
+
+#include "vn_buffer.h"
+
+#include "venus-protocol/vn_protocol_driver_buffer.h"
+#include "venus-protocol/vn_protocol_driver_buffer_view.h"
+
+#include "vn_device.h"
+
+/* buffer commands */
+
+VkResult
+vn_CreateBuffer(VkDevice device,
+                const VkBufferCreateInfo *pCreateInfo,
+                const VkAllocationCallbacks *pAllocator,
+                VkBuffer *pBuffer)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   const VkAllocationCallbacks *alloc =
+      pAllocator ? pAllocator : &dev->base.base.alloc;
+
+   struct vn_buffer *buf = vk_zalloc(alloc, sizeof(*buf), VN_DEFAULT_ALIGN,
+                                     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   if (!buf)
+      return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+   vn_object_base_init(&buf->base, VK_OBJECT_TYPE_BUFFER, &dev->base);
+
+   VkBuffer buf_handle = vn_buffer_to_handle(buf);
+   /* TODO async */
+   VkResult result = vn_call_vkCreateBuffer(dev->instance, device,
+                                            pCreateInfo, NULL, &buf_handle);
+   if (result != VK_SUCCESS) {
+      vk_free(alloc, buf);
+      return vn_error(dev->instance, result);
+   }
+
+   /* TODO add a per-device cache for the requirements */
+   buf->memory_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+   buf->memory_requirements.pNext = &buf->dedicated_requirements;
+   buf->dedicated_requirements.sType =
+      VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
+   buf->dedicated_requirements.pNext = NULL;
+
+   vn_call_vkGetBufferMemoryRequirements2(
+      dev->instance, device,
+      &(VkBufferMemoryRequirementsInfo2){
+         .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
+         .buffer = vn_buffer_to_handle(buf),
+      },
+      &buf->memory_requirements);
+
+   *pBuffer = buf_handle;
+
+   return VK_SUCCESS;
+}
+
+void
+vn_DestroyBuffer(VkDevice device,
+                 VkBuffer buffer,
+                 const VkAllocationCallbacks *pAllocator)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   struct vn_buffer *buf = vn_buffer_from_handle(buffer);
+   const VkAllocationCallbacks *alloc =
+      pAllocator ? pAllocator : &dev->base.base.alloc;
+
+   if (!buf)
+      return;
+
+   vn_async_vkDestroyBuffer(dev->instance, device, buffer, NULL);
+
+   vn_object_base_fini(&buf->base);
+   vk_free(alloc, buf);
+}
+
+VkDeviceAddress
+vn_GetBufferDeviceAddress(VkDevice device,
+                          const VkBufferDeviceAddressInfo *pInfo)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+
+   return vn_call_vkGetBufferDeviceAddress(dev->instance, device, pInfo);
+}
+
+uint64_t
+vn_GetBufferOpaqueCaptureAddress(VkDevice device,
+                                 const VkBufferDeviceAddressInfo *pInfo)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+
+   return vn_call_vkGetBufferOpaqueCaptureAddress(dev->instance, device,
+                                                  pInfo);
+}
+
+void
+vn_GetBufferMemoryRequirements(VkDevice device,
+                               VkBuffer buffer,
+                               VkMemoryRequirements *pMemoryRequirements)
+{
+   const struct vn_buffer *buf = vn_buffer_from_handle(buffer);
+
+   *pMemoryRequirements = buf->memory_requirements.memoryRequirements;
+}
+
+void
+vn_GetBufferMemoryRequirements2(VkDevice device,
+                                const VkBufferMemoryRequirementsInfo2 *pInfo,
+                                VkMemoryRequirements2 *pMemoryRequirements)
+{
+   const struct vn_buffer *buf = vn_buffer_from_handle(pInfo->buffer);
+   union {
+      VkBaseOutStructure *pnext;
+      VkMemoryRequirements2 *two;
+      VkMemoryDedicatedRequirements *dedicated;
+   } u = { .two = pMemoryRequirements };
+
+   while (u.pnext) {
+      switch (u.pnext->sType) {
+      case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:
+         u.two->memoryRequirements =
+            buf->memory_requirements.memoryRequirements;
+         break;
+      case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
+         u.dedicated->prefersDedicatedAllocation =
+            buf->dedicated_requirements.prefersDedicatedAllocation;
+         u.dedicated->requiresDedicatedAllocation =
+            buf->dedicated_requirements.requiresDedicatedAllocation;
+         break;
+      default:
+         break;
+      }
+      u.pnext = u.pnext->pNext;
+   }
+}
+
+VkResult
+vn_BindBufferMemory(VkDevice device,
+                    VkBuffer buffer,
+                    VkDeviceMemory memory,
+                    VkDeviceSize memoryOffset)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   struct vn_device_memory *mem = vn_device_memory_from_handle(memory);
+
+   if (mem->base_memory) {
+      memory = vn_device_memory_to_handle(mem->base_memory);
+      memoryOffset += mem->base_offset;
+   }
+
+   vn_async_vkBindBufferMemory(dev->instance, device, buffer, memory,
+                               memoryOffset);
+
+   return VK_SUCCESS;
+}
+
+VkResult
+vn_BindBufferMemory2(VkDevice device,
+                     uint32_t bindInfoCount,
+                     const VkBindBufferMemoryInfo *pBindInfos)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
+
+   VkBindBufferMemoryInfo *local_infos = NULL;
+   for (uint32_t i = 0; i < bindInfoCount; i++) {
+      const VkBindBufferMemoryInfo *info = &pBindInfos[i];
+      struct vn_device_memory *mem =
+         vn_device_memory_from_handle(info->memory);
+      if (!mem->base_memory)
+         continue;
+
+      if (!local_infos) {
+         const size_t size = sizeof(*local_infos) * bindInfoCount;
+         local_infos = vk_alloc(alloc, size, VN_DEFAULT_ALIGN,
+                                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+         if (!local_infos)
+            return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+         memcpy(local_infos, pBindInfos, size);
+      }
+
+      local_infos[i].memory = vn_device_memory_to_handle(mem->base_memory);
+      local_infos[i].memoryOffset += mem->base_offset;
+   }
+   if (local_infos)
+      pBindInfos = local_infos;
+
+   vn_async_vkBindBufferMemory2(dev->instance, device, bindInfoCount,
+                                pBindInfos);
+
+   vk_free(alloc, local_infos);
+
+   return VK_SUCCESS;
+}
+
+/* buffer view commands */
+
+VkResult
+vn_CreateBufferView(VkDevice device,
+                    const VkBufferViewCreateInfo *pCreateInfo,
+                    const VkAllocationCallbacks *pAllocator,
+                    VkBufferView *pView)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   const VkAllocationCallbacks *alloc =
+      pAllocator ? pAllocator : &dev->base.base.alloc;
+
+   struct vn_buffer_view *view =
+      vk_zalloc(alloc, sizeof(*view), VN_DEFAULT_ALIGN,
+                VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   if (!view)
+      return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+   vn_object_base_init(&view->base, VK_OBJECT_TYPE_BUFFER_VIEW, &dev->base);
+
+   VkBufferView view_handle = vn_buffer_view_to_handle(view);
+   vn_async_vkCreateBufferView(dev->instance, device, pCreateInfo, NULL,
+                               &view_handle);
+
+   *pView = view_handle;
+
+   return VK_SUCCESS;
+}
+
+void
+vn_DestroyBufferView(VkDevice device,
+                     VkBufferView bufferView,
+                     const VkAllocationCallbacks *pAllocator)
+{
+   struct vn_device *dev = vn_device_from_handle(device);
+   struct vn_buffer_view *view = vn_buffer_view_from_handle(bufferView);
+   const VkAllocationCallbacks *alloc =
+      pAllocator ? pAllocator : &dev->base.base.alloc;
+
+   if (!view)
+      return;
+
+   vn_async_vkDestroyBufferView(dev->instance, device, bufferView, NULL);
+
+   vn_object_base_fini(&view->base);
+   vk_free(alloc, view);
+}
diff --git a/src/virtio/vulkan/vn_buffer.h b/src/virtio/vulkan/vn_buffer.h
new file mode 100644
index 00000000000..87c67962d61
--- /dev/null
+++ b/src/virtio/vulkan/vn_buffer.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google LLC
+ * SPDX-License-Identifier: MIT
+ *
+ * based in part on anv and radv which are:
+ * Copyright © 2015 Intel Corporation
+ * Copyright © 2016 Red Hat.
+ * Copyright © 2016 Bas Nieuwenhuizen
+ */
+
+#ifndef VN_BUFFER_H
+#define VN_BUFFER_H
+
+#include "vn_common.h"
+
+struct vn_buffer {
+   struct vn_object_base base;
+
+   VkMemoryRequirements2 memory_requirements;
+   VkMemoryDedicatedRequirements dedicated_requirements;
+};
+VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer,
+                               base.base,
+                               VkBuffer,
+                               VK_OBJECT_TYPE_BUFFER)
+
+struct vn_buffer_view {
+   struct vn_object_base base;
+};
+VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer_view,
+                               base.base,
+                               VkBufferView,
+                               VK_OBJECT_TYPE_BUFFER_VIEW)
+
+#endif /* VN_BUFFER_H */
diff --git a/src/virtio/vulkan/vn_device.c b/src/virtio/vulkan/vn_device.c
index 3ed6475031b..ae97f930c24 100644
--- a/src/virtio/vulkan/vn_device.c
+++ b/src/virtio/vulkan/vn_device.c
@@ -4752,241 +4752,6 @@ vn_GetMemoryFdPropertiesKHR(VkDevice device,
    return result;
 }
 
-/* buffer commands */
-
-VkResult
-vn_CreateBuffer(VkDevice device,
-                const VkBufferCreateInfo *pCreateInfo,
-                const VkAllocationCallbacks *pAllocator,
-                VkBuffer *pBuffer)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   const VkAllocationCallbacks *alloc =
-      pAllocator ? pAllocator : &dev->base.base.alloc;
-
-   struct vn_buffer *buf = vk_zalloc(alloc, sizeof(*buf), VN_DEFAULT_ALIGN,
-                                     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-   if (!buf)
-      return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
-   vn_object_base_init(&buf->base, VK_OBJECT_TYPE_BUFFER, &dev->base);
-
-   VkBuffer buf_handle = vn_buffer_to_handle(buf);
-   /* TODO async */
-   VkResult result = vn_call_vkCreateBuffer(dev->instance, device,
-                                            pCreateInfo, NULL, &buf_handle);
-   if (result != VK_SUCCESS) {
-      vk_free(alloc, buf);
-      return vn_error(dev->instance, result);
-   }
-
-   /* TODO add a per-device cache for the requirements */
-   buf->memory_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
-   buf->memory_requirements.pNext = &buf->dedicated_requirements;
-   buf->dedicated_requirements.sType =
-      VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
-   buf->dedicated_requirements.pNext = NULL;
-
-   vn_call_vkGetBufferMemoryRequirements2(
-      dev->instance, device,
-      &(VkBufferMemoryRequirementsInfo2){
-         .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
-         .buffer = vn_buffer_to_handle(buf),
-      },
-      &buf->memory_requirements);
-
-   *pBuffer = buf_handle;
-
-   return VK_SUCCESS;
-}
-
-void
-vn_DestroyBuffer(VkDevice device,
-                 VkBuffer buffer,
-                 const VkAllocationCallbacks *pAllocator)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   struct vn_buffer *buf = vn_buffer_from_handle(buffer);
-   const VkAllocationCallbacks *alloc =
-      pAllocator ? pAllocator : &dev->base.base.alloc;
-
-   if (!buf)
-      return;
-
-   vn_async_vkDestroyBuffer(dev->instance, device, buffer, NULL);
-
-   vn_object_base_fini(&buf->base);
-   vk_free(alloc, buf);
-}
-
-VkDeviceAddress
-vn_GetBufferDeviceAddress(VkDevice device,
-                          const VkBufferDeviceAddressInfo *pInfo)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-
-   return vn_call_vkGetBufferDeviceAddress(dev->instance, device, pInfo);
-}
-
-uint64_t
-vn_GetBufferOpaqueCaptureAddress(VkDevice device,
-                                 const VkBufferDeviceAddressInfo *pInfo)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-
-   return vn_call_vkGetBufferOpaqueCaptureAddress(dev->instance, device,
-                                                  pInfo);
-}
-
-void
-vn_GetBufferMemoryRequirements(VkDevice device,
-                               VkBuffer buffer,
-                               VkMemoryRequirements *pMemoryRequirements)
-{
-   const struct vn_buffer *buf = vn_buffer_from_handle(buffer);
-
-   *pMemoryRequirements = buf->memory_requirements.memoryRequirements;
-}
-
-void
-vn_GetBufferMemoryRequirements2(VkDevice device,
-                                const VkBufferMemoryRequirementsInfo2 *pInfo,
-                                VkMemoryRequirements2 *pMemoryRequirements)
-{
-   const struct vn_buffer *buf = vn_buffer_from_handle(pInfo->buffer);
-   union {
-      VkBaseOutStructure *pnext;
-      VkMemoryRequirements2 *two;
-      VkMemoryDedicatedRequirements *dedicated;
-   } u = { .two = pMemoryRequirements };
-
-   while (u.pnext) {
-      switch (u.pnext->sType) {
-      case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:
-         u.two->memoryRequirements =
-            buf->memory_requirements.memoryRequirements;
-         break;
-      case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
-         u.dedicated->prefersDedicatedAllocation =
-            buf->dedicated_requirements.prefersDedicatedAllocation;
-         u.dedicated->requiresDedicatedAllocation =
-            buf->dedicated_requirements.requiresDedicatedAllocation;
-         break;
-      default:
-         break;
-      }
-      u.pnext = u.pnext->pNext;
-   }
-}
-
-VkResult
-vn_BindBufferMemory(VkDevice device,
-                    VkBuffer buffer,
-                    VkDeviceMemory memory,
-                    VkDeviceSize memoryOffset)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   struct vn_device_memory *mem = vn_device_memory_from_handle(memory);
-
-   if (mem->base_memory) {
-      memory = vn_device_memory_to_handle(mem->base_memory);
-      memoryOffset += mem->base_offset;
-   }
-
-   vn_async_vkBindBufferMemory(dev->instance, device, buffer, memory,
-                               memoryOffset);
-
-   return VK_SUCCESS;
-}
-
-VkResult
-vn_BindBufferMemory2(VkDevice device,
-                     uint32_t bindInfoCount,
-                     const VkBindBufferMemoryInfo *pBindInfos)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
-
-   VkBindBufferMemoryInfo *local_infos = NULL;
-   for (uint32_t i = 0; i < bindInfoCount; i++) {
-      const VkBindBufferMemoryInfo *info = &pBindInfos[i];
-      struct vn_device_memory *mem =
-         vn_device_memory_from_handle(info->memory);
-      if (!mem->base_memory)
-         continue;
-
-      if (!local_infos) {
-         const size_t size = sizeof(*local_infos) * bindInfoCount;
-         local_infos = vk_alloc(alloc, size, VN_DEFAULT_ALIGN,
-                                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
-         if (!local_infos)
-            return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
-         memcpy(local_infos, pBindInfos, size);
-      }
-
-      local_infos[i].memory = vn_device_memory_to_handle(mem->base_memory);
-      local_infos[i].memoryOffset += mem->base_offset;
-   }
-   if (local_infos)
-      pBindInfos = local_infos;
-
-   vn_async_vkBindBufferMemory2(dev->instance, device, bindInfoCount,
-                                pBindInfos);
-
-   vk_free(alloc, local_infos);
-
-   return VK_SUCCESS;
-}
-
-/* buffer view commands */
-
-VkResult
-vn_CreateBufferView(VkDevice device,
-                    const VkBufferViewCreateInfo *pCreateInfo,
-                    const VkAllocationCallbacks *pAllocator,
-                    VkBufferView *pView)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   const VkAllocationCallbacks *alloc =
-      pAllocator ? pAllocator : &dev->base.base.alloc;
-
-   struct vn_buffer_view *view =
-      vk_zalloc(alloc, sizeof(*view), VN_DEFAULT_ALIGN,
-                VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-   if (!view)
-      return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
-   vn_object_base_init(&view->base, VK_OBJECT_TYPE_BUFFER_VIEW, &dev->base);
-
-   VkBufferView view_handle = vn_buffer_view_to_handle(view);
-   vn_async_vkCreateBufferView(dev->instance, device, pCreateInfo, NULL,
-                               &view_handle);
-
-   *pView = view_handle;
-
-   return VK_SUCCESS;
-}
-
-void
-vn_DestroyBufferView(VkDevice device,
-                     VkBufferView bufferView,
-                     const VkAllocationCallbacks *pAllocator)
-{
-   struct vn_device *dev = vn_device_from_handle(device);
-   struct vn_buffer_view *view = vn_buffer_view_from_handle(bufferView);
-   const VkAllocationCallbacks *alloc =
-      pAllocator ? pAllocator : &dev->base.base.alloc;
-
-   if (!view)
-      return;
-
-   vn_async_vkDestroyBufferView(dev->instance, device, bufferView, NULL);
-
-   vn_object_base_fini(&view->base);
-   vk_free(alloc, view);
-}
-
 /* image commands */
 
 VkResult
diff --git a/src/virtio/vulkan/vn_device.h b/src/virtio/vulkan/vn_device.h
index 952eabba8c3..64043e18a93 100644
--- a/src/virtio/vulkan/vn_device.h
+++ b/src/virtio/vulkan/vn_device.h
@@ -203,25 +203,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_device_memory,
                                VkDeviceMemory,
                                VK_OBJECT_TYPE_DEVICE_MEMORY)
 
-struct vn_buffer {
-   struct vn_object_base base;
-
-   VkMemoryRequirements2 memory_requirements;
-   VkMemoryDedicatedRequirements dedicated_requirements;
-};
-VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer,
-                               base.base,
-                               VkBuffer,
-                               VK_OBJECT_TYPE_BUFFER)
-
-struct vn_buffer_view {
-   struct vn_object_base base;
-};
-VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer_view,
-                               base.base,
-                               VkBufferView,
-                               VK_OBJECT_TYPE_BUFFER_VIEW)
-
 struct vn_image {
    struct vn_object_base base;
 



More information about the mesa-commit mailing list