@@ -455,8 +455,11 @@ void BuildAccelerationStructures(Validator& gpuav, const Location& loc, CommandB
455455 for (const vvl::AccelerationStructureKHR* as : gpuav.device_state ->as_with_addresses .array ) {
456456 as_addresses_ptr[written_count] = as->acceleration_structure_address ;
457457 uint32_t metadata = 0 ;
458- metadata |= SET_BUILD_AS_METADATA_BUFFER_STATUS (as->buffer_state && !as->buffer_state ->Destroyed ());
458+ const bool is_buffer_destroyed = as->buffer_state && !as->buffer_state ->Destroyed ();
459+ const bool is_buffer_bound_to_memory = is_buffer_destroyed && as->buffer_state ->IsMemoryBound ();
460+ metadata |= SET_BUILD_AS_METADATA_BUFFER_STATUS (is_buffer_destroyed);
459461 metadata |= SET_BUILD_AS_METADATA_AS_TYPE (as->create_info .type );
462+ metadata |= SET_BUILD_AS_METADATA_BUFFER_MEMORY_STATUS (is_buffer_bound_to_memory);
460463 as_metadatas_ptr[written_count] = metadata;
461464 const vvl::range<VkDeviceAddress> as_buffer_addr_range = as->GetDeviceAddressRange ();
462465 as_buffer_addr_ranges_ptr[2 * written_count] = as_buffer_addr_range.begin ;
@@ -636,10 +639,10 @@ void BuildAccelerationStructures(Validator& gpuav, const Location& loc, CommandB
636639 break ;
637640 }
638641 case kErrorSubCode_PreBuildAccelerationStructures_DestroyedASBuffer : {
639- skip |= gpuav.LogError (
640- " VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-12281 " , objlist, loc_with_debug_region,
641- " %s is an invalid acceleration structure reference - underlying buffer %shas been destroyed. %s." ,
642- invalid_blas_loc_str.c_str (), ss_buffer_str.c_str (), ss_as_str.c_str ());
642+ skip |= gpuav.LogError (" VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-12281 " , objlist, loc_with_debug_region,
643+ " %s is an invalid acceleration structure reference - underlying buffer %swas already "
644+ " destroyed when build command started execution . %s." ,
645+ invalid_blas_loc_str.c_str (), ss_buffer_str.c_str (), ss_as_str.c_str ());
643646 break ;
644647 }
645648 case kErrorSubCode_PreBuildAccelerationStructures_InvalidASType : {
@@ -654,6 +657,13 @@ void BuildAccelerationStructures(Validator& gpuav, const Location& loc, CommandB
654657 ss_as_type_str.c_str (), ss_as_str.c_str ());
655658 break ;
656659 }
660+ case kErrorSubCode_PreBuildAccelerationStructures_DestroyedASMemory : {
661+ skip |= gpuav.LogError (" VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03709" , objlist, loc_with_debug_region,
662+ " %s is an invalid acceleration structure reference - underlying buffer %swas not bound to "
663+ " memory anymore when build command started execution. Memory was probably destroyed. %s." ,
664+ invalid_blas_loc_str.c_str (), ss_buffer_str.c_str (), ss_as_str.c_str ());
665+ break ;
666+ }
657667 case kErrorSubCode_PreBuildAccelerationStructures_BlasMemoryOverlap : {
658668 const uint32_t blas_built_in_cmd_i = error_record[kValCmdErrorPayloadDword_4 ];
659669 const BlasBuiltInCmd& blas_built_in_cmd = blas_built_in_cmd_array[blas_built_in_cmd_i];
0 commit comments