mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-24 15:50:37 +02:00
vulkan: return default string for undefined enum
Instead of a unreachable.
This would avoid an assert on debug builds that uses vkfoo_to_str to
print structure types. This will become more common as some tests will
start to use VK_STRUCTURE_TYPE_MAX_ENUM to mark structures from
unsupported extensions more often.
v2 (Jason):
* Include enum name on the default message
* Handle MAX_ENUM as a special case
v3 (Jason):
* vk_ObjectType_to_ObjectName don't need to use ${enum.name}
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14525>
(cherry picked from commit 821c66e50c)
This commit is contained in:
parent
83011a9226
commit
2143a663da
2 changed files with 16 additions and 3 deletions
|
|
@ -4549,7 +4549,7 @@
|
|||
"description": "vulkan: return default string for undefined enum",
|
||||
"nominated": false,
|
||||
"nomination_type": null,
|
||||
"resolution": 4,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -78,8 +78,9 @@ C_TEMPLATE = Template(textwrap.dedent(u"""\
|
|||
case ${v}:
|
||||
return "${enum.values[v]}";
|
||||
% endfor
|
||||
case ${enum.max_enum_name}: return "${enum.max_enum_name}";
|
||||
default:
|
||||
unreachable("Undefined enum value.");
|
||||
return "Unknown ${enum.name} value.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -116,7 +117,7 @@ C_TEMPLATE = Template(textwrap.dedent(u"""\
|
|||
return "${object_types[0].enum_to_name[object_type]}";
|
||||
% endfor
|
||||
default:
|
||||
unreachable("Undefined enum value.");
|
||||
return "Unknown VkObjectType value.";
|
||||
}
|
||||
}
|
||||
"""))
|
||||
|
|
@ -246,12 +247,24 @@ class VkExtension(object):
|
|||
def CamelCase_to_SHOUT_CASE(s):
|
||||
return (s[:1] + re.sub(r'(?<![A-Z])([A-Z])', r'_\1', s[1:])).upper()
|
||||
|
||||
def compute_max_enum_name(s):
|
||||
max_enum_name = CamelCase_to_SHOUT_CASE(s)
|
||||
last_prefix = max_enum_name.rsplit('_', 1)[-1]
|
||||
# Those special prefixes need to be always at the end
|
||||
if last_prefix in ['AMD', 'EXT', 'INTEL', 'KHR', 'NV'] :
|
||||
max_enum_name = "_".join(max_enum_name.split('_')[:-1])
|
||||
max_enum_name = max_enum_name + "_MAX_ENUM_" + last_prefix
|
||||
else:
|
||||
max_enum_name = max_enum_name + "_MAX_ENUM"
|
||||
|
||||
return max_enum_name
|
||||
|
||||
class VkEnum(object):
|
||||
"""Simple struct-like class representing a single Vulkan Enum."""
|
||||
|
||||
def __init__(self, name, bitwidth=32, values=None):
|
||||
self.name = name
|
||||
self.max_enum_name = compute_max_enum_name(name)
|
||||
self.bitwidth = bitwidth
|
||||
self.extension = None
|
||||
# Maps numbers to names
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue