diff --git a/projects/rtx_ambient_occlusion/src/main.cpp b/projects/rtx_ambient_occlusion/src/main.cpp index 3136e92c54dc109c29b192aed60329b1e478932c..0992d457a294b48590280d06ad8c7321a73f2ee4 100644 --- a/projects/rtx_ambient_occlusion/src/main.cpp +++ b/projects/rtx_ambient_occlusion/src/main.cpp @@ -12,17 +12,9 @@ int main(int argc, const char** argv) { const std::string applicationName = "RTX Ambient Occlusion"; vkcv::Features features; - features.requireExtension(VK_KHR_MAINTENANCE3_EXTENSION_NAME); features.requireExtension(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME); - features.requireExtension(VK_KHR_SPIRV_1_4_EXTENSION_NAME); - features.requireExtension(VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME); features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); - features.requireExtensionFeature<vk::PhysicalDeviceDescriptorIndexingFeatures>( - VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, - [](vk::PhysicalDeviceDescriptorIndexingFeatures& features) {} - ); - features.requireExtensionFeature<vk::PhysicalDeviceBufferDeviceAddressFeatures>( VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, [](vk::PhysicalDeviceBufferDeviceAddressFeatures& features) { @@ -54,8 +46,7 @@ int main(int argc, const char** argv) { applicationName, VK_MAKE_VERSION(0, 0, 1), { vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer }, - features, - { VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME } + features ); vkcv::rtx::ASManager asManager(&core); diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp index 43bf5de20c7db7e4a666efcb968cf9667af41a1f..9a3ef1ffe3df2e094fab4dc4e2d2bee9036b439f 100644 --- a/src/vkcv/Context.cpp +++ b/src/vkcv/Context.cpp @@ -465,13 +465,23 @@ namespace vkcv { return features.deviceCoherentMemory; } ); + + const bool bufferDeviceAddress = featureManager.checkFeatures<vk::PhysicalDeviceBufferDeviceAddressFeatures>( + vk::StructureType::ePhysicalDeviceBufferDeviceAddressFeatures, + [](const vk::PhysicalDeviceBufferDeviceAddressFeatures &features) { + return features.bufferDeviceAddress; + } + ); vma::AllocatorCreateFlags vmaFlags; + if (coherentDeviceMemory) { vmaFlags |= vma::AllocatorCreateFlagBits::eAmdDeviceCoherentMemory; } - vmaFlags |= vma::AllocatorCreateFlagBits::eBufferDeviceAddress; + if (bufferDeviceAddress) { + vmaFlags |= vma::AllocatorCreateFlagBits::eBufferDeviceAddress; + } const vma::AllocatorCreateInfo allocatorCreateInfo( vmaFlags,