aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorPetr Kraus <petr_kraus@email.cz>2019-08-12 00:53:58 +0200
committerMark Lobodzinski <mark@lunarg.com>2019-08-16 10:01:59 -0600
commit52758be62c01542003ada6cb0ceb3764897548d2 (patch)
tree637acb7669ab641b9f3ecdab4d129aff8ddb31b5 /scripts
parent22a1c99af4c696e78f41cb38874b7491903e8825 (diff)
downloadvulkan-validation-layers-52758be62c01542003ada6cb0ceb3764897548d2.tar.gz
layers: Rewrite flag validation
- use proper VUID - eliminate dependency on std::bitset - do not use raw bool parameters - make single bit, and unknown bit checks independent - merge single bit and Flags generation script
Diffstat (limited to 'scripts')
-rw-r--r--scripts/parameter_validation_generator.py39
1 files changed, 20 insertions, 19 deletions
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py
index e283c1c9d..1a12599b9 100644
--- a/scripts/parameter_validation_generator.py
+++ b/scripts/parameter_validation_generator.py
@@ -1197,25 +1197,26 @@ class ParameterValidationOutputGenerator(OutputGenerator):
elif value.type in self.handleTypes:
if not self.isHandleOptional(value, None):
usedLines.append('skip |= validate_required_handle("{}", {ppp}"{}"{pps}, {}{});\n'.format(funcName, valueDisplayName, valuePrefix, value.name, **postProcSpec))
- elif value.type in self.flags:
- flagBitsName = value.type.replace('Flags', 'FlagBits')
- if not flagBitsName in self.flagBits:
- vuid = self.GetVuid(vuid_name_tag, "%s-zerobitmask" % (value.name))
- usedLines.append('skip |= validate_reserved_flags("{}", {ppp}"{}"{pps}, {pf}{}, {});\n'.format(funcName, valueDisplayName, value.name, vuid, pf=valuePrefix, **postProcSpec))
- else:
- if value.isoptional:
- flagsRequired = 'false'
- vuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name))
- else:
- flagsRequired = 'true'
- vuid = self.GetVuid(vuid_name_tag, "%s-requiredbitmask" % (value.name))
- allFlagsName = 'All' + flagBitsName
- usedLines.append('skip |= validate_flags("{}", {ppp}"{}"{pps}, "{}", {}, {pf}{}, {}, false, {});\n'.format(funcName, valueDisplayName, flagBitsName, allFlagsName, value.name, flagsRequired, vuid, pf=valuePrefix, **postProcSpec))
- elif value.type in self.flagBits:
- flagsRequired = 'false' if value.isoptional else 'true'
- allFlagsName = 'All' + value.type
- vuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name))
- usedLines.append('skip |= validate_flags("{}", {ppp}"{}"{pps}, "{}", {}, {pf}{}, {}, true, {});\n'.format(funcName, valueDisplayName, value.type, allFlagsName, value.name, flagsRequired, vuid, pf=valuePrefix, **postProcSpec))
+ elif value.type in self.flags and value.type.replace('Flags', 'FlagBits') not in self.flagBits:
+ vuid = self.GetVuid(vuid_name_tag, "%s-zerobitmask" % (value.name))
+ usedLines.append('skip |= validate_reserved_flags("{}", {ppp}"{}"{pps}, {pf}{}, {});\n'.format(funcName, valueDisplayName, value.name, vuid, pf=valuePrefix, **postProcSpec))
+ elif value.type in self.flags or value.type in self.flagBits:
+ if value.type in self.flags:
+ flagBitsName = value.type.replace('Flags', 'FlagBits')
+ flagsType = 'kOptionalFlags' if value.isoptional else 'kRequiredFlags'
+ invalidVuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name))
+ zeroVuid = self.GetVuid(vuid_name_tag, "%s-requiredbitmask" % (value.name))
+ elif value.type in self.flagBits:
+ flagBitsName = value.type
+ flagsType = 'kOptionalSingleBit' if value.isoptional else 'kRequiredSingleBit'
+ invalidVuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name))
+ zeroVuid = invalidVuid
+ allFlagsName = 'All' + flagBitsName
+
+ invalid_vuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name))
+ allFlagsName = 'All' + flagBitsName
+ zeroVuidArg = '' if value.isoptional else ', ' + zeroVuid
+ usedLines.append('skip |= validate_flags("{}", {ppp}"{}"{pps}, "{}", {}, {pf}{}, {}, {}{});\n'.format(funcName, valueDisplayName, flagBitsName, allFlagsName, value.name, flagsType, invalidVuid, zeroVuidArg, pf=valuePrefix, **postProcSpec))
elif value.isbool:
usedLines.append('skip |= validate_bool32("{}", {ppp}"{}"{pps}, {}{});\n'.format(funcName, valueDisplayName, valuePrefix, value.name, **postProcSpec))
elif value.israngedenum: