From c9bf9744727293f64ded868a92e4a1416f954f5a Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:11:49 -0600 Subject: [PATCH] nvk: Add a stub implementation of buffer views We don't actually populate the TIC entries yet but we can at least pretend and stick them in descriptor sets. Part-of: --- src/nouveau/vulkan/meson.build | 2 ++ src/nouveau/vulkan/nvk_buffer_view.c | 36 +++++++++++++++++++ src/nouveau/vulkan/nvk_buffer_view.h | 18 ++++++++++ src/nouveau/vulkan/nvk_descriptor_set.c | 7 +++- .../vulkan/nvk_descriptor_set_layout.c | 6 ++-- 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 src/nouveau/vulkan/nvk_buffer_view.c create mode 100644 src/nouveau/vulkan/nvk_buffer_view.h diff --git a/src/nouveau/vulkan/meson.build b/src/nouveau/vulkan/meson.build index 7c9bc7beef5..d3bece3bafa 100644 --- a/src/nouveau/vulkan/meson.build +++ b/src/nouveau/vulkan/meson.build @@ -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 index 00000000000..5bc1c9b600d --- /dev/null +++ b/src/nouveau/vulkan/nvk_buffer_view.c @@ -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 index 00000000000..64dd210b1b7 --- /dev/null +++ b/src/nouveau/vulkan/nvk_buffer_view.h @@ -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 diff --git a/src/nouveau/vulkan/nvk_descriptor_set.c b/src/nouveau/vulkan/nvk_descriptor_set.c index 03ee11883fc..2fcef2197ce 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set.c +++ b/src/nouveau/vulkan/nvk_descriptor_set.c @@ -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 diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.c b/src/nouveau/vulkan/nvk_descriptor_set_layout.c index ff8ae7d0e44..7e525eaa0bf 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.c +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.c @@ -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: