Skip to content

Commit 5468ffc

Browse files
committed
gpuav: Validate BLAS ref alignment in TLAS build
1 parent 6c9a26e commit 5468ffc

File tree

5 files changed

+202
-190
lines changed

5 files changed

+202
-190
lines changed

layers/gpuav/shaders/gpuav_error_codes.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,11 @@ const int kErrorSubCodePreCopyMemoryToImageIndirectSrcAddressInvalid = 9;
165165

166166
// Pre Build Acceleration Structures
167167
//
168-
const int kErrorSubCode_PreBuildAccelerationStructures_InvalidAS = 1;
169-
const int kErrorSubCode_PreBuildAccelerationStructures_DestroyedASBuffer = 2;
170-
const int kErrorSubCode_PreBuildAccelerationStructures_InvalidASType = 3;
171-
const int kErrorSubCode_PreBuildAccelerationStructures_BlasMemoryOverlap = 4;
168+
const int kErrorSubCode_PreBuildAccelerationStructures_BlasAddrAlignment = 1;
169+
const int kErrorSubCode_PreBuildAccelerationStructures_InvalidAS = 2;
170+
const int kErrorSubCode_PreBuildAccelerationStructures_DestroyedASBuffer = 3;
171+
const int kErrorSubCode_PreBuildAccelerationStructures_InvalidASType = 4;
172+
const int kErrorSubCode_PreBuildAccelerationStructures_BlasMemoryOverlap = 5;
172173

173174
#ifdef __cplusplus
174175
} // namespace glsl

layers/gpuav/shaders/validation_cmd/build_acceleration_structures.comp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ void main() {
5656

5757
uint error_subcode = 0;
5858

59-
if (pc.validation_mode == kBuildASValidationMode_invalid_AS) {
59+
if ((blas_addr % 16u ) != 0) {
60+
error_subcode = kErrorSubCode_PreBuildAccelerationStructures_BlasAddrAlignment;
61+
} else if (pc.validation_mode == kBuildASValidationMode_invalid_AS) {
6062
error_subcode = kErrorSubCode_PreBuildAccelerationStructures_InvalidAS;
6163
const uint as_count = pc.ptr_to_ptr_to_accel_structs_arrays.as_arrays_ptrs.addresses_ptr.count;
6264
for (uint as_i = 0; as_i < as_count; ++as_i) {

layers/gpuav/validation_cmd/gpuav_ray_tracing.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,11 @@ void BuildAccelerationStructures(Validator& gpuav, const Location& loc, CommandB
625625
// ---
626626
const uint32_t error_sub_code = GetSubError(error_record);
627627
switch (error_sub_code) {
628+
case kErrorSubCode_PreBuildAccelerationStructures_BlasAddrAlignment: {
629+
skip |= gpuav.LogError("VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03717", objlist, loc_with_debug_region,
630+
"%s is not aligned to 16 bytes.", invalid_blas_loc_str.c_str());
631+
break;
632+
}
628633
case kErrorSubCode_PreBuildAccelerationStructures_InvalidAS: {
629634
skip |= gpuav.LogError("VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-12281", objlist, loc_with_debug_region,
630635
"%s is an invalid acceleration structure reference.", invalid_blas_loc_str.c_str());

0 commit comments

Comments
 (0)