Mesa (staging/21.3): vulkan: return default string for undefined enum
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun Jan 23 20:57:29 UTC 2022
Module: Mesa
Branch: staging/21.3
Commit: 6ab2ecc4ecea848dc803ded552cfff3ff70f557c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6ab2ecc4ecea848dc803ded552cfff3ff70f557c
Author: Alejandro Piñeiro <apinheiro at igalia.com>
Date: Wed Jan 12 23:01:46 2022 +0100
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 at jlekstrand.net
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14525>
(cherry picked from commit 821c66e50cdaf89ca3e0282967fa17c6fd666308)
---
.pick_status.json | 2 +-
src/vulkan/util/gen_enum_to_str.py | 17 +++++++++++++++--
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index 9540016ef6d..a4c704822e5 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -3613,7 +3613,7 @@
"description": "vulkan: return default string for undefined enum",
"nominated": false,
"nomination_type": null,
- "resolution": 4,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
diff --git a/src/vulkan/util/gen_enum_to_str.py b/src/vulkan/util/gen_enum_to_str.py
index 7357b537fdd..8488b1830ec 100644
--- a/src/vulkan/util/gen_enum_to_str.py
+++ b/src/vulkan/util/gen_enum_to_str.py
@@ -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
More information about the mesa-commit
mailing list