'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',
--- /dev/null
+#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);
+}
--- /dev/null
+#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
#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"
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
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: