nvk: Add a stub implementation of buffer views
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Tue, 31 Jan 2023 02:11:49 +0000 (20:11 -0600)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:31:54 +0000 (21:31 +0000)
We don't actually populate the TIC entries yet but we can at least
pretend and stick them in descriptor sets.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/meson.build
src/nouveau/vulkan/nvk_buffer_view.c [new file with mode: 0644]
src/nouveau/vulkan/nvk_buffer_view.h [new file with mode: 0644]
src/nouveau/vulkan/nvk_descriptor_set.c
src/nouveau/vulkan/nvk_descriptor_set_layout.c

index 7c9bc7b..d3bece3 100644 (file)
@@ -4,6 +4,8 @@ nvk_files = files(
   'nvk_bo_sync.h',
   'nvk_buffer.c',
   'nvk_buffer.h',
+  'nvk_buffer_view.c',
+  'nvk_buffer_view.h',
   'nvk_cmd_blit.c',
   'nvk_cmd_buffer.c',
   'nvk_cmd_buffer.h',
diff --git a/src/nouveau/vulkan/nvk_buffer_view.c b/src/nouveau/vulkan/nvk_buffer_view.c
new file mode 100644 (file)
index 0000000..5bc1c9b
--- /dev/null
@@ -0,0 +1,36 @@
+#include "nvk_buffer_view.h"
+
+#include "nvk_device.h"
+
+VKAPI_ATTR VkResult VKAPI_CALL
+nvk_CreateBufferView(VkDevice _device,
+                     const VkBufferViewCreateInfo *pCreateInfo,
+                     const VkAllocationCallbacks *pAllocator,
+                     VkBufferView *pBufferView)
+{
+   VK_FROM_HANDLE(nvk_device, device, _device);
+   struct nvk_buffer_view *view;
+
+   view = vk_buffer_view_create(&device->vk, pCreateInfo,
+                                 pAllocator, sizeof(*view));
+   if (!view)
+      return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+   *pBufferView = nvk_buffer_view_to_handle(view);
+
+   return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL
+nvk_DestroyBufferView(VkDevice _device,
+                      VkBufferView bufferView,
+                      const VkAllocationCallbacks *pAllocator)
+{
+   VK_FROM_HANDLE(nvk_device, device, _device);
+   VK_FROM_HANDLE(nvk_buffer_view, view, bufferView);
+
+   if (!view)
+      return;
+
+   vk_buffer_view_destroy(&device->vk, pAllocator, &view->vk);
+}
diff --git a/src/nouveau/vulkan/nvk_buffer_view.h b/src/nouveau/vulkan/nvk_buffer_view.h
new file mode 100644 (file)
index 0000000..64dd210
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef NVK_BUFFER_VIEW_H
+#define NVK_BUFFER_VIEW_H 1
+
+#include "nvk_private.h"
+
+#include "vulkan/runtime/vk_buffer_view.h"
+
+struct nvk_buffer_view {
+   struct vk_buffer_view vk;
+
+   /** Index in the image descriptor table */
+   uint32_t desc_index;
+};
+
+VK_DEFINE_HANDLE_CASTS(nvk_buffer_view, vk.base, VkBufferView,
+                       VK_OBJECT_TYPE_BUFFER_VIEW)
+
+#endif
index 03ee118..2fcef21 100644 (file)
@@ -1,6 +1,7 @@
 #include "nvk_descriptor_set.h"
 
 #include "nvk_buffer.h"
+#include "nvk_buffer_view.h"
 #include "nvk_descriptor_set_layout.h"
 #include "nvk_device.h"
 #include "nvk_image_view.h"
@@ -75,7 +76,11 @@ write_buffer_view_desc(struct nvk_descriptor_set *set,
                        const VkBufferView bufferView,
                        uint32_t binding, uint32_t elem)
 {
-   /* TODO */
+   VK_FROM_HANDLE(nvk_buffer_view, view, bufferView);
+
+   struct nvk_image_descriptor *desc = desc_ubo_data(set, binding, elem);
+   assert(view->desc_index < (1 << 20));
+   desc->image_index = view->desc_index;
 }
 
 static void
index ff8ae7d..7e525ea 100644 (file)
@@ -31,12 +31,10 @@ nvk_descriptor_stride_align_for_type(VkDescriptorType type,
    case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
    case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
    case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-      *stride = *align = sizeof(struct nvk_image_descriptor);
-      break;
-
    case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
    case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
-      unreachable("TODO: Implement texel buffers");
+      *stride = *align = sizeof(struct nvk_image_descriptor);
+      break;
 
    case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
    case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: