Mesa (main): radv: Add accel struct queries for maintenance1
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 8 20:56:26 UTC 2022
Module: Mesa
Branch: main
Commit: 5d56c2cfc0a36da5a3ba7fba344799655d74e992
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5d56c2cfc0a36da5a3ba7fba344799655d74e992
Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date: Tue May 10 16:21:46 2022 +0200
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 at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16430>
---
src/amd/vulkan/radv_acceleration_structure.c | 10 ++++++++++
src/amd/vulkan/radv_acceleration_structure.h | 1 +
src/amd/vulkan/radv_query.c | 18 +++++++++++++++++-
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c
index 4394ead136b..0ab407ba289 100644
--- a/src/amd/vulkan/radv_acceleration_structure.c
+++ b/src/amd/vulkan/radv_acceleration_structure.c
@@ -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);
diff --git a/src/amd/vulkan/radv_acceleration_structure.h b/src/amd/vulkan/radv_acceleration_structure.h
index 4953abbdced..2bc3ac0b80c 100644
--- a/src/amd/vulkan/radv_acceleration_structure.h
+++ b/src/amd/vulkan/radv_acceleration_structure.h
@@ -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 {
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 074ab33be5b..5a6030b84c1 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -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.");
}
More information about the mesa-commit
mailing list