From 79ab00a1a44e5ea3f8e21e76a9f652a0cbdcb86c Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sat, 22 Jan 2022 01:57:19 +0100 Subject: [PATCH] Fixed overuse of features and missing buffer usage flags Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- .../src/RTX/ASManager.cpp | 4 +- .../src/RTX/RTXExtensions.cpp | 113 ++++-------------- 2 files changed, 28 insertions(+), 89 deletions(-) diff --git a/projects/rtx_ambient_occlusion/src/RTX/ASManager.cpp b/projects/rtx_ambient_occlusion/src/RTX/ASManager.cpp index 186379a6..8e19caae 100644 --- a/projects/rtx_ambient_occlusion/src/RTX/ASManager.cpp +++ b/projects/rtx_ambient_occlusion/src/RTX/ASManager.cpp @@ -323,7 +323,9 @@ namespace vkcv::rtx { bufferInstances.bufferType = RTXBufferType::GPU; bufferInstances.deviceSize = sizeof(accelerationStructureInstanceKhr); bufferInstances.bufferUsageFlagBits = vk::BufferUsageFlagBits::eShaderDeviceAddress - | vk::BufferUsageFlagBits::eTransferDst | vk::BufferUsageFlagBits::eTransferSrc; + | vk::BufferUsageFlagBits::eTransferDst + | vk::BufferUsageFlagBits::eTransferSrc + | vk::BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR; bufferInstances.memoryPropertyFlagBits = vk::MemoryPropertyFlagBits::eDeviceLocal; createBuffer(bufferInstances); diff --git a/projects/rtx_ambient_occlusion/src/RTX/RTXExtensions.cpp b/projects/rtx_ambient_occlusion/src/RTX/RTXExtensions.cpp index 133bd8b8..0bc6a4d3 100644 --- a/projects/rtx_ambient_occlusion/src/RTX/RTXExtensions.cpp +++ b/projects/rtx_ambient_occlusion/src/RTX/RTXExtensions.cpp @@ -11,12 +11,8 @@ RTXExtensions::RTXExtensions() }; m_deviceExtensions = { VK_KHR_MAINTENANCE3_EXTENSION_NAME, - VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, - VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME, - VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_SPIRV_1_4_EXTENSION_NAME, - VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME }; @@ -24,91 +20,32 @@ RTXExtensions::RTXExtensions() for (auto deviceExtension : m_deviceExtensions) { m_features.requireExtension(deviceExtension); } - - /* FIXME: We must disable features that will be mentioned as "not supported" by the FeatureManager. If every unsupported feature is disabled, this should work. - * Maybe we find a better workaround... - */ - m_features.requireFeature<vk::PhysicalDeviceVulkan12Features>( - [](vk::PhysicalDeviceVulkan12Features& features) { - features.setSamplerMirrorClampToEdge(true); - features.setDrawIndirectCount(true); - features.setStorageBuffer8BitAccess(true); - features.setUniformAndStorageBuffer8BitAccess(true); - features.setStoragePushConstant8(true); - features.setShaderBufferInt64Atomics(true); - features.setShaderSharedInt64Atomics(true); - features.setShaderFloat16(true); - features.setShaderInt8(true); - features.setDescriptorIndexing(true); - features.setShaderInputAttachmentArrayDynamicIndexing(true); - features.setShaderUniformTexelBufferArrayDynamicIndexing(true); - features.setShaderStorageTexelBufferArrayDynamicIndexing(true); - features.setShaderUniformBufferArrayNonUniformIndexing(true); - features.setShaderSampledImageArrayNonUniformIndexing(true); - features.setShaderStorageBufferArrayNonUniformIndexing(true); - features.setShaderStorageImageArrayNonUniformIndexing(true); - features.setShaderInputAttachmentArrayNonUniformIndexing(true); - features.setShaderUniformTexelBufferArrayNonUniformIndexing(true); - features.setShaderStorageTexelBufferArrayNonUniformIndexing(true); - features.setDescriptorBindingUniformBufferUpdateAfterBind(true); - features.setDescriptorBindingSampledImageUpdateAfterBind(true); - features.setDescriptorBindingStorageImageUpdateAfterBind(true); - features.setDescriptorBindingStorageBufferUpdateAfterBind(true); - features.setDescriptorBindingUniformTexelBufferUpdateAfterBind(true); - features.setDescriptorBindingStorageTexelBufferUpdateAfterBind(true); - features.setDescriptorBindingUpdateUnusedWhilePending(true); - features.setDescriptorBindingPartiallyBound(true); - features.setDescriptorBindingVariableDescriptorCount(true); - features.setRuntimeDescriptorArray(true); - features.setSamplerFilterMinmax(true); - features.setScalarBlockLayout(true); - features.setImagelessFramebuffer(true); - features.setUniformBufferStandardLayout(true); - features.setShaderSubgroupExtendedTypes(true); - features.setSeparateDepthStencilLayouts(true); - features.setHostQueryReset(true); - features.setTimelineSemaphore(true); - features.setBufferDeviceAddress(true); - features.setBufferDeviceAddressCaptureReplay(true); - features.setBufferDeviceAddressMultiDevice(true); - features.setVulkanMemoryModel(true); - features.setVulkanMemoryModelDeviceScope(true); - features.setVulkanMemoryModelAvailabilityVisibilityChains(true); - features.setShaderOutputViewportIndex(true); - features.setShaderOutputLayer(true); - features.setSubgroupBroadcastDynamicId(true); - }); - m_features.requireFeature<vk::PhysicalDeviceVulkan11Features>( - [](vk::PhysicalDeviceVulkan11Features& features) { - features.setMultiview(true); - features.setMultiviewGeometryShader(true); - features.setMultiviewTessellationShader(true); - // features.setProtectedMemory(true); // not supported - features.setSamplerYcbcrConversion(true); - features.setShaderDrawParameters(true); - features.setStorageBuffer16BitAccess(true); - // features.setStorageInputOutput16(true); // not supported - features.setStoragePushConstant16(true); - features.setUniformAndStorageBuffer16BitAccess(true); - features.setVariablePointers(true); - features.setVariablePointersStorageBuffer(true); - }); - m_features.requireFeature<vk::PhysicalDeviceAccelerationStructureFeaturesKHR>( - [](vk::PhysicalDeviceAccelerationStructureFeaturesKHR& features) { - features.setAccelerationStructure(true); - features.setAccelerationStructureCaptureReplay(true); - // features.setAccelerationStructureIndirectBuild(true); // not supported - // features.setAccelerationStructureHostCommands(true); // not supported - features.setDescriptorBindingAccelerationStructureUpdateAfterBind(true); - }); + + m_features.requireExtensionFeature<vk::PhysicalDeviceDescriptorIndexingFeatures>( + VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, + [](vk::PhysicalDeviceDescriptorIndexingFeatures& features) {} + ); + + m_features.requireExtensionFeature<vk::PhysicalDeviceBufferDeviceAddressFeatures>( + VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, + [](vk::PhysicalDeviceBufferDeviceAddressFeatures& features) { + features.setBufferDeviceAddress(true); + } + ); + + m_features.requireExtensionFeature<vk::PhysicalDeviceAccelerationStructureFeaturesKHR>( + VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, + [](vk::PhysicalDeviceAccelerationStructureFeaturesKHR& features) { + features.setAccelerationStructure(true); + } + ); + m_features.requireExtensionFeature<vk::PhysicalDeviceRayTracingPipelineFeaturesKHR>( - VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, [](vk::PhysicalDeviceRayTracingPipelineFeaturesKHR& features) { - features.setRayTracingPipeline(true); - // features.setRayTracingPipelineShaderGroupHandleCaptureReplay(true); // not supported - // features.setRayTracingPipelineShaderGroupHandleCaptureReplayMixed(true); // not supported - features.setRayTracingPipelineTraceRaysIndirect(true); - features.setRayTraversalPrimitiveCulling(true); - }); + VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, + [](vk::PhysicalDeviceRayTracingPipelineFeaturesKHR& features) { + features.setRayTracingPipeline(true); + } + ); } std::vector<const char*> RTXExtensions::getInstanceExtensions() -- GitLab