venus: implement VK_KHR_acceleration_structure - Part I

Implement all cmds except query updates.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33907>
This commit is contained in:
Yiwei Zhang
2025-03-02 17:04:17 -08:00
committed by Marge Bot
parent eb0ad64e80
commit c0f4d9861d
2 changed files with 143 additions and 0 deletions
@@ -5,8 +5,100 @@
#include "vn_acceleration_structure.h"
#include "venus-protocol/vn_protocol_driver_acceleration_structure.h"
#include "vn_device.h"
VkResult
vn_CreateAccelerationStructureKHR(
VkDevice device,
const VkAccelerationStructureCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkAccelerationStructureKHR *pAccelerationStructure)
{
struct vn_device *dev = vn_device_from_handle(device);
const VkAllocationCallbacks *alloc =
pAllocator ? pAllocator : &dev->base.base.alloc;
struct vn_acceleration_structure *accel =
vk_zalloc(alloc, sizeof(*accel), VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!accel)
return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
vn_object_base_init(&accel->base,
VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, &dev->base);
VkAccelerationStructureKHR accel_handle =
vn_acceleration_structure_to_handle(accel);
vn_async_vkCreateAccelerationStructureKHR(
dev->primary_ring, device, pCreateInfo, NULL, &accel_handle);
*pAccelerationStructure = accel_handle;
return VK_SUCCESS;
}
void
vn_DestroyAccelerationStructureKHR(
VkDevice device,
VkAccelerationStructureKHR accelerationStructure,
const VkAllocationCallbacks *pAllocator)
{
struct vn_device *dev = vn_device_from_handle(device);
struct vn_acceleration_structure *accel =
vn_acceleration_structure_from_handle(accelerationStructure);
const VkAllocationCallbacks *alloc =
pAllocator ? pAllocator : &dev->base.base.alloc;
if (!accel)
return;
vn_async_vkDestroyAccelerationStructureKHR(dev->primary_ring, device,
accelerationStructure, NULL);
vn_object_base_fini(&accel->base);
vk_free(alloc, accel);
}
void
vn_GetAccelerationStructureBuildSizesKHR(
VkDevice device,
VkAccelerationStructureBuildTypeKHR buildType,
const VkAccelerationStructureBuildGeometryInfoKHR *pBuildInfo,
const uint32_t *pMaxPrimitiveCounts,
VkAccelerationStructureBuildSizesInfoKHR *pSizeInfo)
{
struct vn_device *dev = vn_device_from_handle(device);
vn_call_vkGetAccelerationStructureBuildSizesKHR(
dev->primary_ring, device, buildType, pBuildInfo, pMaxPrimitiveCounts,
pSizeInfo);
}
VkDeviceAddress
vn_GetAccelerationStructureDeviceAddressKHR(
VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR *pInfo)
{
struct vn_device *dev = vn_device_from_handle(device);
return vn_call_vkGetAccelerationStructureDeviceAddressKHR(
dev->primary_ring, device, pInfo);
}
void
vn_GetDeviceAccelerationStructureCompatibilityKHR(
VkDevice device,
const VkAccelerationStructureVersionInfoKHR *pVersionInfo,
VkAccelerationStructureCompatibilityKHR *pCompatibility)
{
struct vn_device *dev = vn_device_from_handle(device);
/* TODO per device cache */
vn_call_vkGetDeviceAccelerationStructureCompatibilityKHR(
dev->primary_ring, device, pVersionInfo, pCompatibility);
}
VkResult
vn_BuildAccelerationStructuresKHR(
VkDevice device,
+51
View File
@@ -2666,3 +2666,54 @@ vn_CmdSetRenderingInputAttachmentIndices(
VN_CMD_ENQUEUE(vkCmdSetRenderingInputAttachmentIndices, commandBuffer,
pInputAttachmentIndexInfo);
}
void
vn_CmdBuildAccelerationStructuresIndirectKHR(
VkCommandBuffer commandBuffer,
uint32_t infoCount,
const VkAccelerationStructureBuildGeometryInfoKHR *pInfos,
const VkDeviceAddress *pIndirectDeviceAddresses,
const uint32_t *pIndirectStrides,
const uint32_t *const *ppMaxPrimitiveCounts)
{
VN_CMD_ENQUEUE(vkCmdBuildAccelerationStructuresIndirectKHR, commandBuffer,
infoCount, pInfos, pIndirectDeviceAddresses,
pIndirectStrides, ppMaxPrimitiveCounts);
}
void
vn_CmdBuildAccelerationStructuresKHR(
VkCommandBuffer commandBuffer,
uint32_t infoCount,
const VkAccelerationStructureBuildGeometryInfoKHR *pInfos,
const VkAccelerationStructureBuildRangeInfoKHR *const *ppBuildRangeInfos)
{
VN_CMD_ENQUEUE(vkCmdBuildAccelerationStructuresKHR, commandBuffer,
infoCount, pInfos, ppBuildRangeInfos);
}
void
vn_CmdCopyAccelerationStructureKHR(
VkCommandBuffer commandBuffer,
const VkCopyAccelerationStructureInfoKHR *pInfo)
{
VN_CMD_ENQUEUE(vkCmdCopyAccelerationStructureKHR, commandBuffer, pInfo);
}
void
vn_CmdCopyAccelerationStructureToMemoryKHR(
VkCommandBuffer commandBuffer,
const VkCopyAccelerationStructureToMemoryInfoKHR *pInfo)
{
VN_CMD_ENQUEUE(vkCmdCopyAccelerationStructureToMemoryKHR, commandBuffer,
pInfo);
}
void
vn_CmdCopyMemoryToAccelerationStructureKHR(
VkCommandBuffer commandBuffer,
const VkCopyMemoryToAccelerationStructureInfoKHR *pInfo)
{
VN_CMD_ENQUEUE(vkCmdCopyMemoryToAccelerationStructureKHR, commandBuffer,
pInfo);
}