Skip to content

Commit a179a05

Browse files
authored
Merge pull request #176 from rpavlik/layer-improvements
Layer improvements
2 parents 7ab0351 + 5f000fb commit a179a05

4 files changed

Lines changed: 26 additions & 33 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
validation layer: Simplify some generated code, and minor performance improvements.

src/api_layers/core_validation.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,24 @@ void InvalidStructureType(GenValidUsageXrInstanceInfo *instance_info, const std:
426426
}
427427
}
428428

429+
std::string StructTypesToString(GenValidUsageXrInstanceInfo *instance_info, const std::vector<XrStructureType> &structs) {
430+
char struct_type_buffer[XR_MAX_STRUCTURE_NAME_SIZE];
431+
std::string error_message;
432+
if (nullptr == instance_info) {
433+
error_message = "UNKNOWN - no instance info available";
434+
return error_message;
435+
}
436+
bool wrote_struct = false;
437+
for (auto &s : structs)
438+
if (XR_SUCCESS == instance_info->dispatch_table->StructureTypeToString(instance_info->instance, s, struct_type_buffer)) {
439+
if (wrote_struct) {
440+
error_message += ", ";
441+
}
442+
wrote_struct = true;
443+
error_message += struct_type_buffer;
444+
}
445+
return error_message;
446+
}
429447
// NOTE: Can't validate the following VUIDs since the command never enters a layer:
430448
// Command: xrEnumerateApiLayerProperties
431449
// VUIDs: "VUID-xrEnumerateApiLayerProperties-propertyCountOutput-parameter"

src/api_layers/validation_utils.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ typedef std::unique_ptr<CoreValidationMessengerInfo, CoreValidationMessengerInfo
7878
struct GenValidUsageXrInstanceInfo {
7979
GenValidUsageXrInstanceInfo(XrInstance inst, PFN_xrGetInstanceProcAddr next_get_instance_proc_addr);
8080
~GenValidUsageXrInstanceInfo();
81-
const XrInstance instance;
81+
XrInstance const instance;
8282
XrGeneratedDispatchTable *dispatch_table;
8383
std::vector<std::string> enabled_extensions;
8484
std::vector<UniqueCoreValidationMessengerInfo> debug_messengers;
@@ -208,6 +208,8 @@ void InvalidStructureType(GenValidUsageXrInstanceInfo *instance_info, const std:
208208
const char *vuid = nullptr, XrStructureType expected = XrStructureType(0),
209209
const char *expected_name = "");
210210

211+
std::string StructTypesToString(GenValidUsageXrInstanceInfo *instance_info, const std::vector<XrStructureType> &structs);
212+
211213
// -- Only implementations of templates follow --//
212214

213215
template <typename HT, typename IT>

src/scripts/validation_layer_generator.py

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ def outputValidationInternalProtos(self):
389389
validation_internal_protos += ' XrObjectType handle2_type, const uint64_t handle2,\n'
390390
validation_internal_protos += ' bool check_this);\n'
391391
validation_internal_protos += '\n// Function to check if an extension has been enabled\n'
392-
validation_internal_protos += 'bool ExtensionEnabled(std::vector<std::string> &extensions, const char* const check_extension_name);\n'
392+
validation_internal_protos += 'bool ExtensionEnabled(const std::vector<std::string> &extensions, const char* const check_extension_name);\n'
393393
validation_internal_protos += '\n// Functions to validate structures\n'
394394
for xr_struct in self.api_structures:
395395
if xr_struct.protect_value:
@@ -605,9 +605,9 @@ def outputValidationHeaderInfo(self):
605605
# Generate C++ utility functions to verify that all the required extensions have been enabled.
606606
# self the ValidationSourceOutputGenerator object
607607
def writeVerifyExtensions(self):
608-
verify_extensions = 'bool ExtensionEnabled(std::vector<std::string> &extensions, const char* const check_extension_name) {\n'
608+
verify_extensions = 'bool ExtensionEnabled(const std::vector<std::string> &extensions, const char* const check_extension_name) {\n'
609609
verify_extensions += self.writeIndent(1)
610-
verify_extensions += 'for (auto enabled_extension: extensions) {\n'
610+
verify_extensions += 'for (const auto& enabled_extension: extensions) {\n'
611611
verify_extensions += self.writeIndent(2)
612612
verify_extensions += 'if (enabled_extension == check_extension_name) {\n'
613613
verify_extensions += self.writeIndent(3)
@@ -1007,35 +1007,7 @@ def writeValidateStructNextCheck(self, struct_type, struct_name, member, indent)
10071007
validate_struct_next += self.writeIndent(indent + 1)
10081008
validate_struct_next += 'error_message += "%s : ";\n' % struct_type
10091009
validate_struct_next += self.writeIndent(indent + 1)
1010-
validate_struct_next += 'if (nullptr != instance_info) {\n'
1011-
validate_struct_next += self.writeIndent(indent + 2)
1012-
validate_struct_next += 'bool wrote_struct = false;\n'
1013-
validate_struct_next += self.writeIndent(indent + 2)
1014-
validate_struct_next += 'for (uint32_t dup = 0; dup < duplicate_ext_structs.size(); ++dup) {\n'
1015-
validate_struct_next += self.writeIndent(indent + 3)
1016-
validate_struct_next += 'if (XR_SUCCESS == instance_info->dispatch_table->StructureTypeToString(instance_info->instance,\n'
1017-
validate_struct_next += self.writeIndent(indent + 3)
1018-
validate_struct_next += ' duplicate_ext_structs[dup],\n'
1019-
validate_struct_next += self.writeIndent(indent + 3)
1020-
validate_struct_next += ' struct_type_buffer)) {\n'
1021-
validate_struct_next += self.writeIndent(indent + 4)
1022-
validate_struct_next += 'if (wrote_struct) {\n'
1023-
validate_struct_next += self.writeIndent(indent + 5)
1024-
validate_struct_next += 'error_message += ", ";\n'
1025-
validate_struct_next += self.writeIndent(indent + 4)
1026-
validate_struct_next += '} else {\n'
1027-
validate_struct_next += self.writeIndent(indent + 5)
1028-
validate_struct_next += 'wrote_struct = true;\n'
1029-
validate_struct_next += self.writeIndent(indent + 4)
1030-
validate_struct_next += '}\n'
1031-
validate_struct_next += self.writeIndent(indent + 4)
1032-
validate_struct_next += 'error_message += struct_type_buffer;\n'
1033-
validate_struct_next += self.writeIndent(indent + 3)
1034-
validate_struct_next += '}\n'
1035-
validate_struct_next += self.writeIndent(indent + 2)
1036-
validate_struct_next += '}\n'
1037-
validate_struct_next += self.writeIndent(indent + 1)
1038-
validate_struct_next += '}\n'
1010+
validate_struct_next += 'error_message += StructTypesToString(instance_info, duplicate_ext_structs);\n'
10391011
validate_struct_next += self.writeIndent(indent + 1)
10401012
validate_struct_next += 'CoreValidLogMessage(instance_info, "VUID-%s-next-unique",\n' % struct_type
10411013
validate_struct_next += self.writeIndent(indent + 1)

0 commit comments

Comments
 (0)