From 56f790a6a6b5b2b8055982c503b2ab9cbc27f927 Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Mon, 9 Sep 2024 01:28:33 -0700 Subject: [PATCH] Added flags `isAccelerationStructureEnabled_` and `isRayTracingEnabled_` --- lvk/vulkan/VulkanClasses.cpp | 8 +++++++- lvk/vulkan/VulkanClasses.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lvk/vulkan/VulkanClasses.cpp b/lvk/vulkan/VulkanClasses.cpp index 0089ebb1a4..3e76aa8ed8 100644 --- a/lvk/vulkan/VulkanClasses.cpp +++ b/lvk/vulkan/VulkanClasses.cpp @@ -3298,6 +3298,11 @@ lvk::Holder lvk::VulkanContext::createQueryPool(uint32_t n lvk::Holder lvk::VulkanContext::createAccelerationStructure(const AccelStructDesc& desc, Result* outResult) { LVK_PROFILER_FUNCTION(); + if (!LVK_VERIFY(isAccelerationStructureEnabled_)) { + Result::setResult(outResult, Result(Result::Code::RuntimeError, "VK_KHR_acceleration_structure is not enabled")); + return {}; + } + Result result; AccelStructHandle handle; @@ -4201,7 +4206,6 @@ VkPipeline lvk::VulkanContext::getVkPipeline(ComputePipelineHandle handle) { .basePipelineHandle = VK_NULL_HANDLE, .basePipelineIndex = -1, }; - VkPipeline pipeline = VK_NULL_HANDLE; VK_ASSERT(vkCreateComputePipelines(vkDevice_, pipelineCache_, 1, &ci, nullptr, &cps->pipeline_)); VK_ASSERT(lvk::setDebugObjectName(vkDevice_, VK_OBJECT_TYPE_PIPELINE, (uint64_t)cps->pipeline_, cps->desc_.debugName)); } @@ -5144,9 +5148,11 @@ lvk::Result lvk::VulkanContext::initContext(const HWDeviceDesc& desc) { if (isRequestedCustomDeviceExtension(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME)) { addNextPhysicalDeviceProperties(&accelerationStructureProperties_); + isAccelerationStructureEnabled_ = true; } if (isRequestedCustomDeviceExtension(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME)) { addNextPhysicalDeviceProperties(&rayTracingPipelineProperties_); + isRayTracingEnabled_ = true; } vkGetPhysicalDeviceFeatures2(vkPhysicalDevice_, &vkFeatures10_); diff --git a/lvk/vulkan/VulkanClasses.h b/lvk/vulkan/VulkanClasses.h index 9164ff506b..2f1b6fa2c5 100644 --- a/lvk/vulkan/VulkanClasses.h +++ b/lvk/vulkan/VulkanClasses.h @@ -617,11 +617,14 @@ class VulkanContext final : public IContext { std::unique_ptr stagingDevice_; uint32_t currentMaxTextures_ = 16; uint32_t currentMaxSamplers_ = 16; + uint32_t currentMaxAccelStructs_ = 1; VkDescriptorSetLayout vkDSL_ = VK_NULL_HANDLE; VkDescriptorPool vkDPool_ = VK_NULL_HANDLE; VkDescriptorSet vkDSet_ = VK_NULL_HANDLE; // don't use staging on devices with shared host-visible memory bool useStaging_ = true; + bool isAccelerationStructureEnabled_ = false; + bool isRayTracingEnabled_ = false; std::unique_ptr pimpl_;