From b8767668480839d7a26face40cbc88d0b0340479 Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Mon, 7 Oct 2024 22:22:05 +0300 Subject: [PATCH] Enable buffer device address feature. --- UnleashedRecomp/gpu/rhi/rt64_vulkan.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/UnleashedRecomp/gpu/rhi/rt64_vulkan.cpp b/UnleashedRecomp/gpu/rhi/rt64_vulkan.cpp index baaaf14..ff0127b 100644 --- a/UnleashedRecomp/gpu/rhi/rt64_vulkan.cpp +++ b/UnleashedRecomp/gpu/rhi/rt64_vulkan.cpp @@ -59,6 +59,7 @@ namespace RT64 { VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, + VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, # ifdef VULKAN_OBJECT_NAMES_ENABLED VK_EXT_DEBUG_UTILS_EXTENSION_NAME # endif @@ -3466,6 +3467,11 @@ namespace RT64 { robustnessFeatures.pNext = featuresChain; featuresChain = &robustnessFeatures; + VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddressFeatures = {}; + bufferDeviceAddressFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES; + bufferDeviceAddressFeatures.pNext = featuresChain; + featuresChain = &bufferDeviceAddressFeatures; + VkPhysicalDeviceFeatures2 deviceFeatures = {}; deviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; deviceFeatures.pNext = featuresChain; @@ -3473,10 +3479,8 @@ namespace RT64 { void *createDeviceChain = nullptr; VkPhysicalDeviceRayTracingPipelineFeaturesKHR rtPipelineFeatures = {}; - VkPhysicalDeviceBufferDeviceAddressFeaturesEXT bufferDeviceFeatures = {}; VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures = {}; const bool rtSupported = supportedOptionalExtensions.find(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME) != supportedOptionalExtensions.end(); - const bool bufferDeviceAddressSupported = rtSupported; if (rtSupported) { rtPipelineProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR; @@ -3489,11 +3493,6 @@ namespace RT64 { rtPipelineFeatures.rayTracingPipeline = true; createDeviceChain = &rtPipelineFeatures; - bufferDeviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR; - bufferDeviceFeatures.pNext = createDeviceChain; - bufferDeviceFeatures.bufferDeviceAddress = true; - createDeviceChain = &bufferDeviceFeatures; - accelerationStructureFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR; accelerationStructureFeatures.pNext = createDeviceChain; accelerationStructureFeatures.accelerationStructure = true; @@ -3537,6 +3536,12 @@ namespace RT64 { createDeviceChain = &robustnessFeatures; } + const bool bufferDeviceAddress = bufferDeviceAddressFeatures.bufferDeviceAddress; + if (bufferDeviceAddress) { + bufferDeviceAddressFeatures.pNext = createDeviceChain; + createDeviceChain = &bufferDeviceAddressFeatures; + } + // Retrieve the information for the queue families. uint32_t queueFamilyCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, nullptr); @@ -3646,7 +3651,7 @@ namespace RT64 { vmaFunctions.vkCmdCopyBuffer = vkCmdCopyBuffer; VmaAllocatorCreateInfo allocatorInfo = {}; - allocatorInfo.flags |= bufferDeviceAddressSupported ? VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : 0; + allocatorInfo.flags |= bufferDeviceAddress ? VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : 0; allocatorInfo.physicalDevice = physicalDevice; allocatorInfo.device = vk; allocatorInfo.pVulkanFunctions = &vmaFunctions;