diff --git a/examples/rayquery/rayquery.cpp b/examples/rayquery/rayquery.cpp index e2747f9c..96b8c1c1 100644 --- a/examples/rayquery/rayquery.cpp +++ b/examples/rayquery/rayquery.cpp @@ -125,27 +125,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); } @@ -225,27 +213,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); instancesBuffer.destroy(); diff --git a/examples/raytracingbasic/raytracingbasic.cpp b/examples/raytracingbasic/raytracingbasic.cpp index 621923c1..f4e4b38a 100644 --- a/examples/raytracingbasic/raytracingbasic.cpp +++ b/examples/raytracingbasic/raytracingbasic.cpp @@ -373,27 +373,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); VkAccelerationStructureDeviceAddressInfoKHR accelerationDeviceAddressInfo{}; accelerationDeviceAddressInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR; @@ -492,27 +480,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); VkAccelerationStructureDeviceAddressInfoKHR accelerationDeviceAddressInfo{}; accelerationDeviceAddressInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR; diff --git a/examples/raytracingcallable/raytracingcallable.cpp b/examples/raytracingcallable/raytracingcallable.cpp index b2e56af5..fbcd125c 100644 --- a/examples/raytracingcallable/raytracingcallable.cpp +++ b/examples/raytracingcallable/raytracingcallable.cpp @@ -199,27 +199,15 @@ public: } std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfos[0], &accelerationStructureBuildRangeInfos[1], &accelerationStructureBuildRangeInfos[2] }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); } @@ -299,27 +287,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); instancesBuffer.destroy(); diff --git a/examples/raytracingreflections/raytracingreflections.cpp b/examples/raytracingreflections/raytracingreflections.cpp index 6b6dfdd1..0358aec7 100644 --- a/examples/raytracingreflections/raytracingreflections.cpp +++ b/examples/raytracingreflections/raytracingreflections.cpp @@ -137,27 +137,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); } @@ -237,27 +225,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); instancesBuffer.destroy(); diff --git a/examples/raytracingshadows/raytracingshadows.cpp b/examples/raytracingshadows/raytracingshadows.cpp index a7cd474e..3f186caa 100644 --- a/examples/raytracingshadows/raytracingshadows.cpp +++ b/examples/raytracingshadows/raytracingshadows.cpp @@ -136,28 +136,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); } @@ -238,28 +225,15 @@ public: accelerationStructureBuildRangeInfo.transformOffset = 0; std::vector accelerationBuildStructureRangeInfos = { &accelerationStructureBuildRangeInfo }; - if (accelerationStructureFeatures.accelerationStructureHostCommands) - { - // Implementation supports building acceleration structure building on host - // Implementation supports building acceleration structure building on host - vkBuildAccelerationStructuresKHR( - device, - VK_NULL_HANDLE, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - } - else - { - // Acceleration structure needs to be build on the device - VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); - vkCmdBuildAccelerationStructuresKHR( - commandBuffer, - 1, - &accelerationBuildGeometryInfo, - accelerationBuildStructureRangeInfos.data()); - vulkanDevice->flushCommandBuffer(commandBuffer, queue); - } + // Build the acceleration structure on the device via a one-time command buffer submission + // Some implementations may support acceleration structure building on the host (VkPhysicalDeviceAccelerationStructureFeaturesKHR->accelerationStructureHostCommands), but we prefer device builds + VkCommandBuffer commandBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + vkCmdBuildAccelerationStructuresKHR( + commandBuffer, + 1, + &accelerationBuildGeometryInfo, + accelerationBuildStructureRangeInfos.data()); + vulkanDevice->flushCommandBuffer(commandBuffer, queue); deleteScratchBuffer(scratchBuffer); instancesBuffer.destroy();