From 6905c258298b8cf6653692a82dd1473936b8a766 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Sat, 15 Oct 2022 12:02:05 +0200 Subject: [PATCH] radv/rra: Use the accel struct type for header validation Reviewed-by: Friedrich Vock Part-of: --- src/amd/vulkan/radv_acceleration_structure.c | 1 + src/amd/vulkan/radv_acceleration_structure.h | 1 + src/amd/vulkan/radv_rra.c | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c index d0786ff6f55..b7217acfda4 100644 --- a/src/amd/vulkan/radv_acceleration_structure.c +++ b/src/amd/vulkan/radv_acceleration_structure.c @@ -212,6 +212,7 @@ radv_CreateAccelerationStructureKHR(VkDevice _device, accel->size = pCreateInfo->size; accel->bo = buffer->bo; accel->va = radv_buffer_get_va(accel->bo) + accel->mem_offset; + accel->type = pCreateInfo->type; *pAccelerationStructure = radv_acceleration_structure_to_handle(accel); return VK_SUCCESS; diff --git a/src/amd/vulkan/radv_acceleration_structure.h b/src/amd/vulkan/radv_acceleration_structure.h index fde3a0c5150..df738d89cf1 100644 --- a/src/amd/vulkan/radv_acceleration_structure.h +++ b/src/amd/vulkan/radv_acceleration_structure.h @@ -35,6 +35,7 @@ struct radv_acceleration_structure { uint64_t mem_offset; uint64_t size; uint64_t va; + VkAccelerationStructureTypeKHR type; }; VK_DEFINE_NONDISP_HANDLE_CASTS(radv_acceleration_structure, base, VkAccelerationStructureKHR, diff --git a/src/amd/vulkan/radv_rra.c b/src/amd/vulkan/radv_rra.c index 8c41f7bea88..536840a3f72 100644 --- a/src/amd/vulkan/radv_rra.c +++ b/src/amd/vulkan/radv_rra.c @@ -419,6 +419,12 @@ rra_validate_header(struct radv_acceleration_structure *accel_struct, { bool result = true; + if (accel_struct->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR && + header->instance_count > 0) { + rra_accel_struct_validation_fail(0, "BLAS contains instances"); + result = false; + } + if (header->bvh_offset >= accel_struct->size) { rra_accel_struct_validation_fail(0, "Invalid BVH offset %u", header->bvh_offset); result = false;