| 1671 | } |
| 1672 | |
| 1673 | Buffer AccelerationStructureNV::CreateScratchBuffer(const Device& device, VkBufferCreateInfo* pCreateInfo /*= nullptr*/, |
| 1674 | bool buffer_device_address /*= false*/) const { |
| 1675 | VkMemoryRequirements scratch_buffer_memory_requirements = BuildScratchMemoryRequirements().memoryRequirements; |
| 1676 | VkBufferCreateInfo create_info = vku::InitStructHelper(); |
| 1677 | create_info.size = scratch_buffer_memory_requirements.size; |
| 1678 | if (pCreateInfo) { |
| 1679 | create_info.usage = pCreateInfo->usage; |
| 1680 | } else { |
| 1681 | create_info.usage = VK_BUFFER_USAGE_RAY_TRACING_BIT_NV; |
| 1682 | if (buffer_device_address) create_info.usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT; |
| 1683 | } |
| 1684 | |
| 1685 | VkMemoryAllocateFlagsInfo alloc_flags = vku::InitStructHelper(); |
| 1686 | void* pNext = nullptr; |
| 1687 | if (buffer_device_address) { |
| 1688 | alloc_flags.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT; |
| 1689 | pNext = &alloc_flags; |
| 1690 | } |
| 1691 | |
| 1692 | return Buffer(device, create_info, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, pNext); |
| 1693 | } |
| 1694 | |
| 1695 | NON_DISPATCHABLE_HANDLE_DTOR(ShaderModule, vk::DestroyShaderModule) |
| 1696 | |