22
22
23
23
#include < array>
24
24
#include < functional>
25
+ #include < sstream>
25
26
#include < string>
26
27
#include < string_view>
27
28
@@ -75,25 +76,25 @@ class BufferAddressValidation {
75
76
[[nodiscard]] bool HasInvalidBuffer (vvl::span<vvl::Buffer* const > buffer_list) const noexcept ;
76
77
// For every vuid, build an error mentioning every buffer from buffer_list that violates it, then log this error
77
78
// using details provided by the other parameters.
78
- [[nodiscard]] bool LogInvalidBuffers (const CoreChecks& checker , vvl::span<vvl::Buffer* const > buffer_list,
79
+ [[nodiscard]] bool LogInvalidBuffers (const CoreChecks& validator , vvl::span<vvl::Buffer* const > buffer_list,
79
80
const Location& device_address_loc, const LogObjectList& objlist,
80
81
VkDeviceAddress device_address) const noexcept ;
81
82
82
- [[nodiscard]] bool LogErrorsIfNoValidBuffer (const CoreChecks& checker , vvl::span<vvl::Buffer* const > buffer_list,
83
+ [[nodiscard]] bool LogErrorsIfNoValidBuffer (const CoreChecks& validator , vvl::span<vvl::Buffer* const > buffer_list,
83
84
const Location& device_address_loc, const LogObjectList& objlist,
84
85
VkDeviceAddress device_address) const noexcept {
85
86
bool skip = false ;
86
87
if (!HasValidBuffer (buffer_list)) {
87
- skip |= LogInvalidBuffers (checker , buffer_list, device_address_loc, objlist, device_address);
88
+ skip |= LogInvalidBuffers (validator , buffer_list, device_address_loc, objlist, device_address);
88
89
}
89
90
return skip;
90
91
}
91
- [[nodiscard]] bool LogErrorsIfInvalidBufferFound (const CoreChecks& checker , vvl::span<vvl::Buffer* const > buffer_list,
92
+ [[nodiscard]] bool LogErrorsIfInvalidBufferFound (const CoreChecks& validator , vvl::span<vvl::Buffer* const > buffer_list,
92
93
const Location& device_address_loc, const LogObjectList& objlist,
93
94
VkDeviceAddress device_address) const noexcept {
94
95
bool skip = false ;
95
96
if (HasInvalidBuffer (buffer_list)) {
96
- skip |= LogInvalidBuffers (checker , buffer_list, device_address_loc, objlist, device_address);
97
+ skip |= LogInvalidBuffers (validator , buffer_list, device_address_loc, objlist, device_address);
97
98
}
98
99
return skip;
99
100
}
@@ -175,7 +176,7 @@ bool BufferAddressValidation<ChecksCount>::HasInvalidBuffer(vvl::span<vvl::Buffe
175
176
}
176
177
177
178
template <size_t ChecksCount>
178
- bool BufferAddressValidation<ChecksCount>::LogInvalidBuffers(const CoreChecks& checker , vvl::span<vvl::Buffer* const > buffer_list,
179
+ bool BufferAddressValidation<ChecksCount>::LogInvalidBuffers(const CoreChecks& validator , vvl::span<vvl::Buffer* const > buffer_list,
179
180
const Location& device_address_loc, const LogObjectList& objlist,
180
181
VkDeviceAddress device_address) const noexcept {
181
182
std::array<Error, ChecksCount> errors;
@@ -190,9 +191,7 @@ bool BufferAddressValidation<ChecksCount>::LogInvalidBuffers(const CoreChecks& c
190
191
}();
191
192
error_msg_beginning += " (" ;
192
193
error_msg_beginning += address_string;
193
- error_msg_beginning +=
194
- " ) has no buffer(s) associated to it such that valid usage passes. "
195
- " At least one buffer associated to this device address must be valid.\n " ;
194
+ error_msg_beginning += " ) has no buffer(s) associated that are valid.\n " ;
196
195
}
197
196
198
197
// For each buffer, and for each violated VUID, build an error message
@@ -223,7 +222,8 @@ bool BufferAddressValidation<ChecksCount>::LogInvalidBuffers(const CoreChecks& c
223
222
error_msg += ' \n ' ;
224
223
}
225
224
226
- error_msg += checker.FormatHandle (buffer->Handle ());
225
+ error_msg += " " ; // small indent help to visualize
226
+ error_msg += validator.FormatHandle (buffer->Handle ());
227
227
error_msg += " : " ;
228
228
error_msg += buffer_error;
229
229
}
@@ -236,10 +236,19 @@ bool BufferAddressValidation<ChecksCount>::LogInvalidBuffers(const CoreChecks& c
236
236
const auto & vuidAndValidation = vuidsAndValidationFunctions[i];
237
237
const auto & error = errors[i];
238
238
if (!error.Empty ()) {
239
- skip |=
240
- checker. LogError (vuidAndValidation. vuid . data (), error. objlist , device_address_loc, " %s \n " , error.error_msg .c_str ());
239
+ skip |= validator. LogError (vuidAndValidation. vuid . data (), error. objlist , device_address_loc, " %s \n " ,
240
+ error.error_msg .c_str ());
241
241
}
242
242
}
243
243
244
244
return skip;
245
245
}
246
+
247
+ [[maybe_unused]] static std::string PrintBufferRanges (const CoreChecks& validator, vvl::span<vvl::Buffer* const > buffers) {
248
+ std::ostringstream ss;
249
+ for (const auto & buffer : buffers) {
250
+ ss << " " << validator.FormatHandle (buffer->Handle ()) << " : range " << string_range_hex (buffer->DeviceAddressRange ())
251
+ << ' \n ' ;
252
+ }
253
+ return ss.str ();
254
+ }
0 commit comments