From 3f4ad87746d1924b542122b282f0bc27b36b7234 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Fri, 10 Apr 2026 22:25:55 +0200 Subject: [PATCH] writing ui descriptors --- examples/VulkanUI/main.cpp | 148 ++++++++----------------------------- 1 file changed, 29 insertions(+), 119 deletions(-) diff --git a/examples/VulkanUI/main.cpp b/examples/VulkanUI/main.cpp index 50163fd..05dfbaf 100644 --- a/examples/VulkanUI/main.cpp +++ b/examples/VulkanUI/main.cpp @@ -69,9 +69,9 @@ int main() { 1 ); for(std::uint8_t i = 0; i < Window::numFrames; i++) { - element.buffers[i]->value[0] = {1, 0, 0, 1}; - element.buffers[i]->value[1] = {0, 1, 0, 1}; - element.buffers[i]->FlushDevice(); + reinterpret_cast, true>*>(element.buffers[i])->value[0] = {1, 0, 0, 1}; + reinterpret_cast, true>*>(element.buffers[i])->value[1] = {0, 1, 0, 1}; + reinterpret_cast, true>*>(element.buffers[i])->FlushDevice(); } InitializeRenderingElement2DVulkanBuffer(); @@ -98,129 +98,39 @@ int main() { .pView = &window.imageViews[2], .layout = VK_IMAGE_LAYOUT_GENERAL }; - - VkDeviceAddressRangeKHR transformRange0 = { - .address = renderingElement2DVulkanTransformBuffer[0].address, - .size = renderingElement2DVulkanTransformBuffer[0].descriptor.range - }; - VkDeviceAddressRangeKHR transformRange1 = { - .address = renderingElement2DVulkanTransformBuffer[1].address, - .size = renderingElement2DVulkanTransformBuffer[1].descriptor.range + std::array infos; + infos[0] = { + .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, + .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, + .data = { .pImage = &imageInfo0 } }; - - VkDeviceAddressRangeKHR transformRange2 = { - .address = renderingElement2DVulkanTransformBuffer[2].address, - .size = renderingElement2DVulkanTransformBuffer[2].descriptor.range + infos[1] = { + .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, + .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, + .data = { .pImage = &imageInfo1 } }; - - VkDeviceAddressRangeKHR elRange0 = { - .address = element.buffers[0]->address, - .size = element.buffers[0]->descriptor.range - }; - - VkDeviceAddressRangeKHR elRange1 = { - .address = element.buffers[1]->address, - .size = element.buffers[1]->descriptor.range - }; - - VkDeviceAddressRangeKHR elRange2 = { - .address = element.buffers[2]->address, - .size = element.buffers[2]->descriptor.range - }; - - VkResourceDescriptorInfoEXT resources[9] = { - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .data = { .pImage = &imageInfo0 } - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .data = { .pImage = &imageInfo1 } - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .data = { .pImage = &imageInfo2 } - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &transformRange0} - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &transformRange1} - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &transformRange2} - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &elRange0} - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &elRange1} - }, - { - .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, - .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - .data = { .pAddressRange = &elRange2} - }, + infos[2] = { + .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, + .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, + .data = { .pImage = &imageInfo2 } }; - VkHostAddressRangeEXT destinations[9] = { - { - .address = descriptorHeap.resourceHeap[0].value, - .size = Device::descriptorHeapProperties.imageDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[1].value, - .size = Device::descriptorHeapProperties.imageDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[2].value, - .size = Device::descriptorHeapProperties.imageDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[0].value + descriptorHeap.bufferStartOffset, - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[1].value + descriptorHeap.bufferStartOffset, - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[2].value + descriptorHeap.bufferStartOffset, - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[0].value + descriptorHeap.bufferStartOffset + Device::descriptorHeapProperties.bufferDescriptorSize * (renderingElement2DVulkans.size()), - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[1].value + descriptorHeap.bufferStartOffset + Device::descriptorHeapProperties.bufferDescriptorSize * (renderingElement2DVulkans.size()), - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, - { - .address = descriptorHeap.resourceHeap[2].value + descriptorHeap.bufferStartOffset + Device::descriptorHeapProperties.bufferDescriptorSize * (renderingElement2DVulkans.size()), - .size = Device::descriptorHeapProperties.bufferDescriptorSize - }, + std::array ranges; + ranges[0] = { + .address = descriptorHeap.resourceHeap[0].value, + .size = Device::descriptorHeapProperties.imageDescriptorSize }; + ranges[1] = { + .address = descriptorHeap.resourceHeap[1].value, + .size = Device::descriptorHeapProperties.imageDescriptorSize + }, + ranges[2] = { + .address = descriptorHeap.resourceHeap[2].value, + .size = Device::descriptorHeapProperties.imageDescriptorSize + }, - Device::vkWriteResourceDescriptorsEXT(Device::device, 9, resources, destinations); - - descriptorHeap.resourceHeap[0].FlushDevice(); - descriptorHeap.resourceHeap[1].FlushDevice(); - descriptorHeap.resourceHeap[2].FlushDevice(); + WriteRenderingElement2DVulkanDescriptors(infos, ranges, 3, descriptorHeap.bufferStartOffset, descriptorHeap); window.pipeline = &pipeline; window.descriptorHeap = &descriptorHeap;