Path: blob/21.2-virgl/src/intel/vulkan/anv_acceleration_structure.c
4547 views
/*1* Copyright © 2020 Intel Corporation2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING19* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS20* IN THE SOFTWARE.21*/2223#include "anv_private.h"2425void26anv_GetAccelerationStructureBuildSizesKHR(27VkDevice device,28VkAccelerationStructureBuildTypeKHR buildType,29const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo,30const uint32_t* pMaxPrimitiveCounts,31VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo)32{33assert(pSizeInfo->sType ==34VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR);3536uint64_t max_prim_count = 0;37for (uint32_t i = 0; i < pBuildInfo->geometryCount; i++)38max_prim_count += pMaxPrimitiveCounts[i];3940pSizeInfo->accelerationStructureSize = 0; /* TODO */4142uint64_t cpu_build_scratch_size = 0; /* TODO */43uint64_t cpu_update_scratch_size = cpu_build_scratch_size;4445uint64_t gpu_build_scratch_size = 0; /* TODO */46uint64_t gpu_update_scratch_size = gpu_build_scratch_size;4748switch (buildType) {49case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR:50pSizeInfo->buildScratchSize = cpu_build_scratch_size;51pSizeInfo->updateScratchSize = cpu_update_scratch_size;52break;5354case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR:55pSizeInfo->buildScratchSize = gpu_build_scratch_size;56pSizeInfo->updateScratchSize = gpu_update_scratch_size;57break;5859case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR:60pSizeInfo->buildScratchSize = MAX2(cpu_build_scratch_size,61gpu_build_scratch_size);62pSizeInfo->updateScratchSize = MAX2(cpu_update_scratch_size,63gpu_update_scratch_size);64break;6566default:67unreachable("Invalid acceleration structure build type");68}69}7071VkResult72anv_CreateAccelerationStructureKHR(73VkDevice _device,74const VkAccelerationStructureCreateInfoKHR* pCreateInfo,75const VkAllocationCallbacks* pAllocator,76VkAccelerationStructureKHR* pAccelerationStructure)77{78ANV_FROM_HANDLE(anv_device, device, _device);79ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer);80struct anv_acceleration_structure *accel;8182accel = vk_zalloc2(&device->vk.alloc, pAllocator, sizeof(*accel), 8,83VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);84if (accel == NULL)85return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);8687vk_object_base_init(&device->vk, &accel->base,88VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR);8990accel->size = pCreateInfo->size;91accel->address = anv_address_add(buffer->address, pCreateInfo->offset);9293*pAccelerationStructure = anv_acceleration_structure_to_handle(accel);9495return VK_SUCCESS;96}9798void99anv_DestroyAccelerationStructureKHR(100VkDevice _device,101VkAccelerationStructureKHR accelerationStructure,102const VkAllocationCallbacks* pAllocator)103{104ANV_FROM_HANDLE(anv_device, device, _device);105ANV_FROM_HANDLE(anv_acceleration_structure, accel, accelerationStructure);106107if (!accel)108return;109110vk_object_base_finish(&accel->base);111vk_free2(&device->vk.alloc, pAllocator, accel);112}113114VkDeviceAddress115anv_GetAccelerationStructureDeviceAddressKHR(116VkDevice device,117const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)118{119ANV_FROM_HANDLE(anv_acceleration_structure, accel,120pInfo->accelerationStructure);121122assert(!anv_address_is_null(accel->address));123assert(accel->address.bo->flags & EXEC_OBJECT_PINNED);124125return anv_address_physical(accel->address);126}127128void129anv_GetDeviceAccelerationStructureCompatibilityKHR(130VkDevice device,131const VkAccelerationStructureVersionInfoKHR* pVersionInfo,132VkAccelerationStructureCompatibilityKHR* pCompatibility)133{134unreachable("Unimplemented");135}136137VkResult138anv_BuildAccelerationStructuresKHR(139VkDevice device,140VkDeferredOperationKHR deferredOperation,141uint32_t infoCount,142const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,143const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)144{145unreachable("Unimplemented");146return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);147}148149VkResult150anv_CopyAccelerationStructureKHR(151VkDevice device,152VkDeferredOperationKHR deferredOperation,153const VkCopyAccelerationStructureInfoKHR* pInfo)154{155unreachable("Unimplemented");156return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);157}158159VkResult160anv_CopyAccelerationStructureToMemoryKHR(161VkDevice device,162VkDeferredOperationKHR deferredOperation,163const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)164{165unreachable("Unimplemented");166return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);167}168169VkResult170anv_CopyMemoryToAccelerationStructureKHR(171VkDevice device,172VkDeferredOperationKHR deferredOperation,173const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)174{175unreachable("Unimplemented");176return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);177}178179VkResult180anv_WriteAccelerationStructuresPropertiesKHR(181VkDevice device,182uint32_t accelerationStructureCount,183const VkAccelerationStructureKHR* pAccelerationStructures,184VkQueryType queryType,185size_t dataSize,186void* pData,187size_t stride)188{189unreachable("Unimplemented");190return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);191}192193void194anv_CmdBuildAccelerationStructuresKHR(195VkCommandBuffer commandBuffer,196uint32_t infoCount,197const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,198const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)199{200unreachable("Unimplemented");201}202203void204anv_CmdBuildAccelerationStructuresIndirectKHR(205VkCommandBuffer commandBuffer,206uint32_t infoCount,207const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,208const VkDeviceAddress* pIndirectDeviceAddresses,209const uint32_t* pIndirectStrides,210const uint32_t* const* ppMaxPrimitiveCounts)211{212unreachable("Unimplemented");213}214215void216anv_CmdCopyAccelerationStructureKHR(217VkCommandBuffer commandBuffer,218const VkCopyAccelerationStructureInfoKHR* pInfo)219{220unreachable("Unimplemented");221}222223void224anv_CmdCopyAccelerationStructureToMemoryKHR(225VkCommandBuffer commandBuffer,226const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)227{228unreachable("Unimplemented");229}230231void232anv_CmdCopyMemoryToAccelerationStructureKHR(233VkCommandBuffer commandBuffer,234const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)235{236unreachable("Unimplemented");237}238239void240anv_CmdWriteAccelerationStructuresPropertiesKHR(241VkCommandBuffer commandBuffer,242uint32_t accelerationStructureCount,243const VkAccelerationStructureKHR* pAccelerationStructures,244VkQueryType queryType,245VkQueryPool queryPool,246uint32_t firstQuery)247{248unreachable("Unimplemented");249}250251252