lavapipe: Implement ray_tracing_maintenance1 queries
Fixes: 1f729d9 ("lavapipe: Implement KHR_ray_tracing_maintenance1")
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28716>
This commit is contained in:
committed by
Marge Bot
parent
a26f96ed3d
commit
4335d006a7
@@ -4475,15 +4475,26 @@ handle_write_acceleration_structures_properties(struct vk_cmd_queue_entry *cmd,
|
||||
for (uint32_t i = 0; i < write->acceleration_structure_count; i++) {
|
||||
VK_FROM_HANDLE(vk_acceleration_structure, accel_struct, write->acceleration_structures[i]);
|
||||
|
||||
if (write->query_type == VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR) {
|
||||
switch ((uint32_t)pool->base_type) {
|
||||
case LVP_QUERY_ACCELERATION_STRUCTURE_COMPACTED_SIZE:
|
||||
dst[i] = accel_struct->size;
|
||||
continue;
|
||||
break;
|
||||
case LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE: {
|
||||
struct lvp_bvh_header *header = (void *)(uintptr_t)vk_acceleration_structure_get_va(accel_struct);
|
||||
dst[i] = header->serialization_size;
|
||||
break;
|
||||
}
|
||||
case LVP_QUERY_ACCELERATION_STRUCTURE_SIZE:
|
||||
dst[i] = accel_struct->size;
|
||||
break;
|
||||
case LVP_QUERY_ACCELERATION_STRUCTURE_INSTANCE_COUNT: {
|
||||
struct lvp_bvh_header *header = (void *)(uintptr_t)vk_acceleration_structure_get_va(accel_struct);
|
||||
dst[i] = header->instance_count;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
unreachable("Unsupported query type");
|
||||
}
|
||||
|
||||
assert (write->query_type == VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR);
|
||||
|
||||
struct lvp_bvh_header *header = (void *)(uintptr_t)vk_acceleration_structure_get_va(accel_struct);
|
||||
dst[i] = header->serialization_size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -628,6 +628,8 @@ struct lvp_buffer_view {
|
||||
|
||||
#define LVP_QUERY_ACCELERATION_STRUCTURE_COMPACTED_SIZE (PIPE_QUERY_TYPES)
|
||||
#define LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE (PIPE_QUERY_TYPES + 1)
|
||||
#define LVP_QUERY_ACCELERATION_STRUCTURE_SIZE (PIPE_QUERY_TYPES + 2)
|
||||
#define LVP_QUERY_ACCELERATION_STRUCTURE_INSTANCE_COUNT (PIPE_QUERY_TYPES + 3)
|
||||
|
||||
struct lvp_query_pool {
|
||||
struct vk_object_base base;
|
||||
|
||||
@@ -59,6 +59,14 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateQueryPool(
|
||||
query_size = sizeof(uint64_t);
|
||||
pipeq = LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE;
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
|
||||
query_size = sizeof(uint64_t);
|
||||
pipeq = LVP_QUERY_ACCELERATION_STRUCTURE_SIZE;
|
||||
break;
|
||||
case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:
|
||||
query_size = sizeof(uint64_t);
|
||||
pipeq = LVP_QUERY_ACCELERATION_STRUCTURE_INSTANCE_COUNT;
|
||||
break;
|
||||
default:
|
||||
return VK_ERROR_FEATURE_NOT_PRESENT;
|
||||
}
|
||||
@@ -96,8 +104,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_DestroyQueryPool(
|
||||
if (!pool)
|
||||
return;
|
||||
|
||||
if (pool->base_type != LVP_QUERY_ACCELERATION_STRUCTURE_COMPACTED_SIZE &&
|
||||
pool->base_type != LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE) {
|
||||
if (pool->base_type < PIPE_QUERY_TYPES) {
|
||||
for (unsigned i = 0; i < pool->count; i++)
|
||||
if (pool->queries[i])
|
||||
device->queue.ctx->destroy_query(device->queue.ctx, pool->queries[i]);
|
||||
@@ -127,8 +134,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_GetQueryPoolResults(
|
||||
union pipe_query_result result;
|
||||
bool ready = false;
|
||||
|
||||
if (pool->base_type == LVP_QUERY_ACCELERATION_STRUCTURE_COMPACTED_SIZE ||
|
||||
pool->base_type == LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE) {
|
||||
if (pool->base_type >= PIPE_QUERY_TYPES) {
|
||||
if (flags & VK_QUERY_RESULT_64_BIT) {
|
||||
uint64_t *dst = (uint64_t *)dest;
|
||||
uint64_t *src = (uint64_t *)pool->data;
|
||||
@@ -221,8 +227,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_ResetQueryPool(
|
||||
LVP_FROM_HANDLE(lvp_device, device, _device);
|
||||
LVP_FROM_HANDLE(lvp_query_pool, pool, queryPool);
|
||||
|
||||
if (pool->base_type == LVP_QUERY_ACCELERATION_STRUCTURE_COMPACTED_SIZE ||
|
||||
pool->base_type == LVP_QUERY_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE)
|
||||
if (pool->base_type >= PIPE_QUERY_TYPES)
|
||||
return;
|
||||
|
||||
for (uint32_t i = 0; i < queryCount; i++) {
|
||||
|
||||
Reference in New Issue
Block a user