radv: Add accel struct queries for maintenance1
Implements the new VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR and VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR query types. The documentation is a bit lacking for now but the fist type probably refers to the instance count and the second type refers to the acceleration structure size which we already store in radv_acceleration_structure. To support size queries, this commit adds a size member to the acceleration structure header. Signed-off-by: Konstantin Seurer <konstantin.seurer@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16430>
This commit is contained in:
parent
d5dd0df65f
commit
5d56c2cfc0
|
@ -211,6 +211,12 @@ radv_WriteAccelerationStructuresPropertiesKHR(
|
|||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
value = header->serialization_size;
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
value = header->instance_count;
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
value = accel->size;
|
||||
break;
|
||||
default:
|
||||
unreachable("Unhandled acceleration structure query");
|
||||
}
|
||||
|
@ -755,6 +761,8 @@ build_bvh(struct radv_device *device, const VkAccelerationStructureBuildGeometry
|
|||
sizeof(uint64_t) * header->instance_count,
|
||||
128);
|
||||
|
||||
header->size = accel->size;
|
||||
|
||||
fail:
|
||||
device->ws->buffer_unmap(accel->bo);
|
||||
return result;
|
||||
|
@ -2281,6 +2289,8 @@ radv_CmdBuildAccelerationStructuresKHR(
|
|||
sizeof(uint64_t) * header.instance_count,
|
||||
128);
|
||||
|
||||
header.size = accel_struct->size;
|
||||
|
||||
radv_update_buffer_cp(cmd_buffer,
|
||||
radv_buffer_get_va(accel_struct->bo) + accel_struct->mem_offset + base,
|
||||
(const char *)&header + base, sizeof(header) - base);
|
||||
|
|
|
@ -54,6 +54,7 @@ struct radv_accel_struct_header {
|
|||
uint32_t copy_dispatch_size[3];
|
||||
uint64_t instance_offset;
|
||||
uint64_t instance_count;
|
||||
uint64_t size;
|
||||
};
|
||||
|
||||
struct radv_bvh_triangle_node {
|
||||
|
|
|
@ -934,6 +934,8 @@ radv_CreateQueryPool(VkDevice _device, const VkQueryPoolCreateInfo *pCreateInfo,
|
|||
case VK_QUERY_TYPE_TIMESTAMP:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
pool->stride = 8;
|
||||
break;
|
||||
case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
|
||||
|
@ -1000,7 +1002,9 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first
|
|||
switch (pool->type) {
|
||||
case VK_QUERY_TYPE_TIMESTAMP:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR: {
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR: {
|
||||
uint64_t const *src64 = (uint64_t const *)src;
|
||||
uint64_t value;
|
||||
|
||||
|
@ -1203,6 +1207,8 @@ radv_query_result_size(const struct radv_query_pool *pool, VkQueryResultFlags fl
|
|||
case VK_QUERY_TYPE_TIMESTAMP:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_OCCLUSION:
|
||||
values += 1;
|
||||
break;
|
||||
|
@ -1290,6 +1296,8 @@ radv_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPoo
|
|||
case VK_QUERY_TYPE_TIMESTAMP:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
if (flags & VK_QUERY_RESULT_WAIT_BIT) {
|
||||
for (unsigned i = 0; i < queryCount; ++i, dest_va += stride) {
|
||||
unsigned query = firstQuery + i;
|
||||
|
@ -1343,6 +1351,8 @@ query_clear_value(VkQueryType type)
|
|||
case VK_QUERY_TYPE_TIMESTAMP:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
return (uint32_t)TIMESTAMP_NOT_READY;
|
||||
default:
|
||||
return 0;
|
||||
|
@ -1755,6 +1765,12 @@ radv_CmdWriteAccelerationStructuresPropertiesKHR(
|
|||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:
|
||||
va += offsetof(struct radv_accel_struct_header, serialization_size);
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
va += offsetof(struct radv_accel_struct_header, instance_count);
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
va += offsetof(struct radv_accel_struct_header, size);
|
||||
break;
|
||||
default:
|
||||
unreachable("Unhandle accel struct query type.");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue