Module: Mesa Branch: main Commit: 6242fe3923c4b0b0a09770aedf69460fac931344 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6242fe3923c4b0b0a09770aedf69460fac931344
Author: Konstantin Seurer <[email protected]> Date: Wed Feb 22 11:23:51 2023 +0100 anv: Use vk_acceleration_structure Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21047> --- src/intel/vulkan/anv_cmd_buffer.c | 2 +- src/intel/vulkan/anv_descriptor_set.c | 8 +- src/intel/vulkan/anv_private.h | 16 +--- src/intel/vulkan/genX_acceleration_structure.c | 116 +++++++------------------ src/intel/vulkan/genX_query.c | 8 +- 5 files changed, 44 insertions(+), 106 deletions(-) diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index d5b74466090..2d306f94cc5 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -968,7 +968,7 @@ void anv_CmdPushDescriptorSetKHR( assert(accel_write->accelerationStructureCount == write->descriptorCount); for (uint32_t j = 0; j < write->descriptorCount; j++) { - ANV_FROM_HANDLE(anv_acceleration_structure, accel, + ANV_FROM_HANDLE(vk_acceleration_structure, accel, accel_write->pAccelerationStructures[j]); anv_descriptor_set_write_acceleration_structure(cmd_buffer->device, set, accel, diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 85e1a5db144..5cab178a652 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -1624,7 +1624,7 @@ anv_descriptor_set_write_inline_uniform_data(struct anv_device *device, void anv_descriptor_set_write_acceleration_structure(struct anv_device *device, struct anv_descriptor_set *set, - struct anv_acceleration_structure *accel, + struct vk_acceleration_structure *accel, uint32_t binding, uint32_t element) { @@ -1641,7 +1641,7 @@ anv_descriptor_set_write_acceleration_structure(struct anv_device *device, struct anv_address_range_descriptor desc_data = { }; if (accel != NULL) { - desc_data.address = anv_address_physical(accel->address); + desc_data.address = vk_acceleration_structure_get_va(accel); desc_data.range = accel->size; } assert(sizeof(desc_data) <= bind_layout->descriptor_stride); @@ -1729,7 +1729,7 @@ void anv_UpdateDescriptorSets( assert(accel_write->accelerationStructureCount == write->descriptorCount); for (uint32_t j = 0; j < write->descriptorCount; j++) { - ANV_FROM_HANDLE(anv_acceleration_structure, accel, + ANV_FROM_HANDLE(vk_acceleration_structure, accel, accel_write->pAccelerationStructures[j]); anv_descriptor_set_write_acceleration_structure(device, set, accel, write->dstBinding, @@ -1892,7 +1892,7 @@ anv_descriptor_set_write_template(struct anv_device *device, for (uint32_t j = 0; j < entry->array_count; j++) { VkAccelerationStructureKHR *accel_obj = (VkAccelerationStructureKHR *)(data + entry->offset + j * entry->stride); - ANV_FROM_HANDLE(anv_acceleration_structure, accel, *accel_obj); + ANV_FROM_HANDLE(vk_acceleration_structure, accel, *accel_obj); anv_descriptor_set_write_acceleration_structure(device, set, accel, diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 94ea83e7625..4341172d517 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -67,6 +67,7 @@ #include "util/u_math.h" #include "util/vma.h" #include "util/xmlconfig.h" +#include "vk_acceleration_structure.h" #include "vk_alloc.h" #include "vk_buffer.h" #include "vk_command_buffer.h" @@ -107,7 +108,6 @@ struct anv_batch; struct anv_buffer; struct anv_buffer_view; struct anv_image_view; -struct anv_acceleration_structure; struct anv_instance; struct intel_aux_map_context; @@ -1779,7 +1779,7 @@ struct anv_descriptor { struct anv_buffer_view *buffer_view; - struct anv_acceleration_structure *accel_struct; + struct vk_acceleration_structure *accel_struct; }; }; @@ -1941,7 +1941,7 @@ anv_descriptor_write_surface_state(struct anv_device *device, void anv_descriptor_set_write_acceleration_structure(struct anv_device *device, struct anv_descriptor_set *set, - struct anv_acceleration_structure *accel, + struct vk_acceleration_structure *accel, uint32_t binding, uint32_t element); @@ -4132,13 +4132,6 @@ static inline uint32_t khr_perf_query_preamble_offset(const struct anv_query_poo return pool->pass_size * pass + 8; } -struct anv_acceleration_structure { - struct vk_object_base base; - - VkDeviceSize size; - struct anv_address address; -}; - struct anv_vid_mem { struct anv_device_memory *mem; VkDeviceSize offset; @@ -4283,9 +4276,6 @@ VK_DEFINE_HANDLE_CASTS(anv_physical_device, vk.base, VkPhysicalDevice, VK_OBJECT_TYPE_PHYSICAL_DEVICE) VK_DEFINE_HANDLE_CASTS(anv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) -VK_DEFINE_NONDISP_HANDLE_CASTS(anv_acceleration_structure, base, - VkAccelerationStructureKHR, - VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer, vk.base, VkBuffer, VK_OBJECT_TYPE_BUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer_view, base, VkBufferView, diff --git a/src/intel/vulkan/genX_acceleration_structure.c b/src/intel/vulkan/genX_acceleration_structure.c index 243c03bbb45..1de11c0cf0f 100644 --- a/src/intel/vulkan/genX_acceleration_structure.c +++ b/src/intel/vulkan/genX_acceleration_structure.c @@ -393,62 +393,6 @@ genX(GetAccelerationStructureBuildSizesKHR)( pSizeInfo->updateScratchSize = gpu_size_info.updateScratchSize; } -VkResult -genX(CreateAccelerationStructureKHR)( - VkDevice _device, - const VkAccelerationStructureCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkAccelerationStructureKHR* pAccelerationStructure) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer); - struct anv_acceleration_structure *accel; - - accel = vk_zalloc2(&device->vk.alloc, pAllocator, sizeof(*accel), 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (accel == NULL) - return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - - vk_object_base_init(&device->vk, &accel->base, - VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR); - - accel->size = pCreateInfo->size; - accel->address = anv_address_add(buffer->address, pCreateInfo->offset); - - *pAccelerationStructure = anv_acceleration_structure_to_handle(accel); - - return VK_SUCCESS; -} - -void -genX(DestroyAccelerationStructureKHR)( - VkDevice _device, - VkAccelerationStructureKHR accelerationStructure, - const VkAllocationCallbacks* pAllocator) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_acceleration_structure, accel, accelerationStructure); - - if (!accel) - return; - - vk_object_base_finish(&accel->base); - vk_free2(&device->vk.alloc, pAllocator, accel); -} - -VkDeviceAddress -genX(GetAccelerationStructureDeviceAddressKHR)( - VkDevice device, - const VkAccelerationStructureDeviceAddressInfoKHR* pInfo) -{ - ANV_FROM_HANDLE(anv_acceleration_structure, accel, - pInfo->accelerationStructure); - - assert(!anv_address_is_null(accel->address)); - - return anv_address_physical(accel->address); -} - void genX(GetDeviceAccelerationStructureCompatibilityKHR)( VkDevice _device, @@ -697,12 +641,12 @@ cmd_build_acceleration_structures( const uint32_t *pMaxPrimitiveCounts = ppMaxPrimitiveCounts ? ppMaxPrimitiveCounts[i] : NULL; - ANV_FROM_HANDLE(anv_acceleration_structure, dst_accel, + ANV_FROM_HANDLE(vk_acceleration_structure, dst_accel, pInfo->dstAccelerationStructure); bs->build_method = device->bvh_build_method; - bs->bvh_addr = dst_accel->address; + bs->bvh_addr = anv_address_from_u64(vk_acceleration_structure_get_va(dst_accel)); bs->estimate = get_gpu_size_estimate(pInfo, pBuildRangeInfos, pMaxPrimitiveCounts); @@ -1154,24 +1098,26 @@ genX(CmdCopyAccelerationStructureKHR)( const VkCopyAccelerationStructureInfoKHR* pInfo) { ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - ANV_FROM_HANDLE(anv_acceleration_structure, src_accel, pInfo->src); - ANV_FROM_HANDLE(anv_acceleration_structure, dst_accel, pInfo->dst); + ANV_FROM_HANDLE(vk_acceleration_structure, src_accel, pInfo->src); + ANV_FROM_HANDLE(vk_acceleration_structure, dst_accel, pInfo->dst); assert(pInfo->mode == VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR || pInfo->mode == VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR); if (pInfo->mode == VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR) { - struct anv_address src_size_addr = anv_address_add( - src_accel->address, - offsetof(struct BVHBase, Meta.allocationSize)); - genX(grl_copy_clone_indirect)(cmd_buffer, - anv_address_physical(dst_accel->address), - anv_address_physical(src_accel->address), - anv_address_physical(src_size_addr)); + uint64_t src_size_addr = + vk_acceleration_structure_get_va(src_accel) + + offsetof(struct BVHBase, Meta.allocationSize); + genX(grl_copy_clone_indirect)( + cmd_buffer, + vk_acceleration_structure_get_va(dst_accel), + vk_acceleration_structure_get_va(src_accel), + src_size_addr); } else { - genX(grl_copy_compact)(cmd_buffer, - anv_address_physical(dst_accel->address), - anv_address_physical(src_accel->address)); + genX(grl_copy_compact)( + cmd_buffer, + vk_acceleration_structure_get_va(dst_accel), + vk_acceleration_structure_get_va(src_accel)); } cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_END_OF_PIPE_SYNC_BIT; @@ -1183,19 +1129,20 @@ genX(CmdCopyAccelerationStructureToMemoryKHR)( const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo) { ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - ANV_FROM_HANDLE(anv_acceleration_structure, src_accel, pInfo->src); + ANV_FROM_HANDLE(vk_acceleration_structure, src_accel, pInfo->src); struct anv_device *device = cmd_buffer->device; - struct anv_address src_size_addr = anv_address_add( - src_accel->address, - offsetof(struct BVHBase, Meta.allocationSize)); + uint64_t src_size_addr = + vk_acceleration_structure_get_va(src_accel) + + offsetof(struct BVHBase, Meta.allocationSize); assert(pInfo->mode == VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR); - genX(grl_copy_serialize_indirect)(cmd_buffer, - pInfo->dst.deviceAddress, - anv_address_physical(src_accel->address), - anv_address_physical(device->rt_uuid_addr), - anv_address_physical(src_size_addr)); + genX(grl_copy_serialize_indirect)( + cmd_buffer, + pInfo->dst.deviceAddress, + vk_acceleration_structure_get_va(src_accel), + anv_address_physical(device->rt_uuid_addr), + src_size_addr); cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_END_OF_PIPE_SYNC_BIT; } @@ -1206,16 +1153,17 @@ genX(CmdCopyMemoryToAccelerationStructureKHR)( const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo) { ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - ANV_FROM_HANDLE(anv_acceleration_structure, dst_accel, pInfo->dst); + ANV_FROM_HANDLE(vk_acceleration_structure, dst_accel, pInfo->dst); assert(pInfo->mode == VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR); uint64_t src_size_addr = pInfo->src.deviceAddress + offsetof(struct SerializationHeader, DeserializedSizeInBytes); - genX(grl_copy_deserialize_indirect)(cmd_buffer, - anv_address_physical(dst_accel->address), - pInfo->src.deviceAddress, - src_size_addr); + genX(grl_copy_deserialize_indirect)( + cmd_buffer, + vk_acceleration_structure_get_va(dst_accel), + pInfo->src.deviceAddress, + src_size_addr); cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_END_OF_PIPE_SYNC_BIT; } diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index fca033e4017..f03185811c0 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -1603,27 +1603,27 @@ genX(CmdWriteAccelerationStructuresPropertiesKHR)( mi_builder_init(&b, cmd_buffer->device->info, &cmd_buffer->batch); for (uint32_t i = 0; i < accelerationStructureCount; i++) { - ANV_FROM_HANDLE(anv_acceleration_structure, accel, pAccelerationStructures[i]); + ANV_FROM_HANDLE(vk_acceleration_structure, accel, pAccelerationStructures[i]); struct anv_address query_addr = anv_address_add(anv_query_address(pool, firstQuery + i), 8); switch (queryType) { case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR: genX(grl_postbuild_info_compacted_size)(cmd_buffer, - anv_address_physical(accel->address), + vk_acceleration_structure_get_va(accel), anv_address_physical(query_addr)); break; case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR: genX(grl_postbuild_info_current_size)(cmd_buffer, - anv_address_physical(accel->address), + vk_acceleration_structure_get_va(accel), anv_address_physical(query_addr)); break; case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR: case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR: genX(grl_postbuild_info_serialized_size)(cmd_buffer, - anv_address_physical(accel->address), + vk_acceleration_structure_get_va(accel), anv_address_physical(query_addr)); break;
