xref: /aosp_15_r20/external/mesa3d/src/vulkan/util/vk_extensions.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Workerimport copy
2*61046927SAndroid Build Coastguard Workerimport re
3*61046927SAndroid Build Coastguard Workerimport xml.etree.ElementTree as et
4*61046927SAndroid Build Coastguard Worker
5*61046927SAndroid Build Coastguard Workerdef get_api_list(s):
6*61046927SAndroid Build Coastguard Worker    apis = []
7*61046927SAndroid Build Coastguard Worker    for a in s.split(','):
8*61046927SAndroid Build Coastguard Worker        if a == 'disabled':
9*61046927SAndroid Build Coastguard Worker            continue
10*61046927SAndroid Build Coastguard Worker        assert a in ('vulkan', 'vulkansc')
11*61046927SAndroid Build Coastguard Worker        apis.append(a)
12*61046927SAndroid Build Coastguard Worker    return apis
13*61046927SAndroid Build Coastguard Worker
14*61046927SAndroid Build Coastguard Workerclass Extension:
15*61046927SAndroid Build Coastguard Worker    def __init__(self, name, number, ext_version):
16*61046927SAndroid Build Coastguard Worker        self.name = name
17*61046927SAndroid Build Coastguard Worker        self.type = None
18*61046927SAndroid Build Coastguard Worker        self.number = number
19*61046927SAndroid Build Coastguard Worker        self.platform = None
20*61046927SAndroid Build Coastguard Worker        self.provisional = False
21*61046927SAndroid Build Coastguard Worker        self.ext_version = int(ext_version)
22*61046927SAndroid Build Coastguard Worker        self.supported = []
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker    def from_xml(ext_elem):
25*61046927SAndroid Build Coastguard Worker        name = ext_elem.attrib['name']
26*61046927SAndroid Build Coastguard Worker        number = int(ext_elem.attrib['number'])
27*61046927SAndroid Build Coastguard Worker        supported = get_api_list(ext_elem.attrib['supported'])
28*61046927SAndroid Build Coastguard Worker        if name == 'VK_ANDROID_native_buffer':
29*61046927SAndroid Build Coastguard Worker            assert not supported
30*61046927SAndroid Build Coastguard Worker            supported = ['vulkan']
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker        if not supported:
33*61046927SAndroid Build Coastguard Worker            return Extension(name, number, 0)
34*61046927SAndroid Build Coastguard Worker
35*61046927SAndroid Build Coastguard Worker        version = None
36*61046927SAndroid Build Coastguard Worker        for enum_elem in ext_elem.findall('.require/enum'):
37*61046927SAndroid Build Coastguard Worker            if enum_elem.attrib['name'].endswith('_SPEC_VERSION'):
38*61046927SAndroid Build Coastguard Worker                # Skip alias SPEC_VERSIONs
39*61046927SAndroid Build Coastguard Worker                if 'value' in enum_elem.attrib:
40*61046927SAndroid Build Coastguard Worker                    assert version is None
41*61046927SAndroid Build Coastguard Worker                    version = int(enum_elem.attrib['value'])
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker        assert version is not None
44*61046927SAndroid Build Coastguard Worker        ext = Extension(name, number, version)
45*61046927SAndroid Build Coastguard Worker        ext.type = ext_elem.attrib['type']
46*61046927SAndroid Build Coastguard Worker        ext.platform = ext_elem.attrib.get('platform', None)
47*61046927SAndroid Build Coastguard Worker        ext.provisional = ext_elem.attrib.get('provisional', False)
48*61046927SAndroid Build Coastguard Worker        ext.supported = supported
49*61046927SAndroid Build Coastguard Worker
50*61046927SAndroid Build Coastguard Worker        return ext
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard Worker    def c_android_condition(self):
53*61046927SAndroid Build Coastguard Worker        # if it's an EXT or vendor extension, it's allowed
54*61046927SAndroid Build Coastguard Worker        if not self.name.startswith(ANDROID_EXTENSION_WHITELIST_PREFIXES):
55*61046927SAndroid Build Coastguard Worker            return 'true'
56*61046927SAndroid Build Coastguard Worker
57*61046927SAndroid Build Coastguard Worker        allowed_version = ALLOWED_ANDROID_VERSION.get(self.name, None)
58*61046927SAndroid Build Coastguard Worker        if allowed_version is None:
59*61046927SAndroid Build Coastguard Worker            return 'false'
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker        return 'ANDROID_API_LEVEL >= %d' % (allowed_version)
62*61046927SAndroid Build Coastguard Worker
63*61046927SAndroid Build Coastguard Workerclass ApiVersion:
64*61046927SAndroid Build Coastguard Worker    def __init__(self, version):
65*61046927SAndroid Build Coastguard Worker        self.version = version
66*61046927SAndroid Build Coastguard Worker
67*61046927SAndroid Build Coastguard Workerclass VkVersion:
68*61046927SAndroid Build Coastguard Worker    def __init__(self, string):
69*61046927SAndroid Build Coastguard Worker        split = string.split('.')
70*61046927SAndroid Build Coastguard Worker        self.major = int(split[0])
71*61046927SAndroid Build Coastguard Worker        self.minor = int(split[1])
72*61046927SAndroid Build Coastguard Worker        if len(split) > 2:
73*61046927SAndroid Build Coastguard Worker            assert len(split) == 3
74*61046927SAndroid Build Coastguard Worker            self.patch = int(split[2])
75*61046927SAndroid Build Coastguard Worker        else:
76*61046927SAndroid Build Coastguard Worker            self.patch = None
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker        # Sanity check.  The range bits are required by the definition of the
79*61046927SAndroid Build Coastguard Worker        # VK_MAKE_VERSION macro
80*61046927SAndroid Build Coastguard Worker        assert self.major < 1024 and self.minor < 1024
81*61046927SAndroid Build Coastguard Worker        assert self.patch is None or self.patch < 4096
82*61046927SAndroid Build Coastguard Worker        assert str(self) == string
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker    def __str__(self):
85*61046927SAndroid Build Coastguard Worker        ver_list = [str(self.major), str(self.minor)]
86*61046927SAndroid Build Coastguard Worker        if self.patch is not None:
87*61046927SAndroid Build Coastguard Worker            ver_list.append(str(self.patch))
88*61046927SAndroid Build Coastguard Worker        return '.'.join(ver_list)
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker    def c_vk_version(self):
91*61046927SAndroid Build Coastguard Worker        ver_list = [str(self.major), str(self.minor), str(self.patch or 0)]
92*61046927SAndroid Build Coastguard Worker        return 'VK_MAKE_VERSION(' + ', '.join(ver_list) + ')'
93*61046927SAndroid Build Coastguard Worker
94*61046927SAndroid Build Coastguard Worker    def __int_ver(self):
95*61046927SAndroid Build Coastguard Worker        # This is just an expansion of VK_VERSION
96*61046927SAndroid Build Coastguard Worker        return (self.major << 22) | (self.minor << 12) | (self.patch or 0)
97*61046927SAndroid Build Coastguard Worker
98*61046927SAndroid Build Coastguard Worker    def __gt__(self, other):
99*61046927SAndroid Build Coastguard Worker        # If only one of them has a patch version, "ignore" it by making
100*61046927SAndroid Build Coastguard Worker        # other's patch version match self.
101*61046927SAndroid Build Coastguard Worker        if (self.patch is None) != (other.patch is None):
102*61046927SAndroid Build Coastguard Worker            other = copy.copy(other)
103*61046927SAndroid Build Coastguard Worker            other.patch = self.patch
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker        return self.__int_ver() > other.__int_ver()
106*61046927SAndroid Build Coastguard Worker
107*61046927SAndroid Build Coastguard Worker# Sort the extension list the way we expect: KHR, then EXT, then vendors
108*61046927SAndroid Build Coastguard Worker# alphabetically. For digits, read them as a whole number sort that.
109*61046927SAndroid Build Coastguard Worker# eg.: VK_KHR_8bit_storage < VK_KHR_16bit_storage < VK_EXT_acquire_xlib_display
110*61046927SAndroid Build Coastguard Workerdef extension_order(ext):
111*61046927SAndroid Build Coastguard Worker    order = []
112*61046927SAndroid Build Coastguard Worker    for substring in re.split('(KHR|EXT|[0-9]+)', ext.name):
113*61046927SAndroid Build Coastguard Worker        if substring == 'KHR':
114*61046927SAndroid Build Coastguard Worker            order.append(1)
115*61046927SAndroid Build Coastguard Worker        if substring == 'EXT':
116*61046927SAndroid Build Coastguard Worker            order.append(2)
117*61046927SAndroid Build Coastguard Worker        elif substring.isdigit():
118*61046927SAndroid Build Coastguard Worker            order.append(int(substring))
119*61046927SAndroid Build Coastguard Worker        else:
120*61046927SAndroid Build Coastguard Worker            order.append(substring)
121*61046927SAndroid Build Coastguard Worker    return order
122*61046927SAndroid Build Coastguard Worker
123*61046927SAndroid Build Coastguard Workerdef get_all_exts_from_xml(xml, api='vulkan'):
124*61046927SAndroid Build Coastguard Worker    """ Get a list of all Vulkan extensions. """
125*61046927SAndroid Build Coastguard Worker
126*61046927SAndroid Build Coastguard Worker    xml = et.parse(xml)
127*61046927SAndroid Build Coastguard Worker
128*61046927SAndroid Build Coastguard Worker    extensions = []
129*61046927SAndroid Build Coastguard Worker    for ext_elem in xml.findall('.extensions/extension'):
130*61046927SAndroid Build Coastguard Worker        ext = Extension.from_xml(ext_elem)
131*61046927SAndroid Build Coastguard Worker        if api in ext.supported:
132*61046927SAndroid Build Coastguard Worker            extensions.append(ext)
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Worker    return sorted(extensions, key=extension_order)
135*61046927SAndroid Build Coastguard Worker
136*61046927SAndroid Build Coastguard Workerdef init_exts_from_xml(xml, extensions, platform_defines):
137*61046927SAndroid Build Coastguard Worker    """ Walk the Vulkan XML and fill out extra extension information. """
138*61046927SAndroid Build Coastguard Worker
139*61046927SAndroid Build Coastguard Worker    xml = et.parse(xml)
140*61046927SAndroid Build Coastguard Worker
141*61046927SAndroid Build Coastguard Worker    ext_name_map = {}
142*61046927SAndroid Build Coastguard Worker    for ext in extensions:
143*61046927SAndroid Build Coastguard Worker        ext_name_map[ext.name] = ext
144*61046927SAndroid Build Coastguard Worker
145*61046927SAndroid Build Coastguard Worker    # KHR_display is missing from the list.
146*61046927SAndroid Build Coastguard Worker    platform_defines.append('VK_USE_PLATFORM_DISPLAY_KHR')
147*61046927SAndroid Build Coastguard Worker    for platform in xml.findall('./platforms/platform'):
148*61046927SAndroid Build Coastguard Worker        platform_defines.append(platform.attrib['protect'])
149*61046927SAndroid Build Coastguard Worker
150*61046927SAndroid Build Coastguard Worker    for ext_elem in xml.findall('.extensions/extension'):
151*61046927SAndroid Build Coastguard Worker        ext_name = ext_elem.attrib['name']
152*61046927SAndroid Build Coastguard Worker        if ext_name not in ext_name_map:
153*61046927SAndroid Build Coastguard Worker            continue
154*61046927SAndroid Build Coastguard Worker
155*61046927SAndroid Build Coastguard Worker        ext = ext_name_map[ext_name]
156*61046927SAndroid Build Coastguard Worker        ext.type = ext_elem.attrib['type']
157*61046927SAndroid Build Coastguard Worker
158*61046927SAndroid Build Coastguard Workerclass Requirements:
159*61046927SAndroid Build Coastguard Worker    def __init__(self, core_version=None):
160*61046927SAndroid Build Coastguard Worker        self.core_version = core_version
161*61046927SAndroid Build Coastguard Worker        self.extensions = []
162*61046927SAndroid Build Coastguard Worker        self.guard = None
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker    def add_extension(self, ext):
165*61046927SAndroid Build Coastguard Worker        for e in self.extensions:
166*61046927SAndroid Build Coastguard Worker            if e == ext:
167*61046927SAndroid Build Coastguard Worker                return;
168*61046927SAndroid Build Coastguard Worker            assert e.name != ext.name
169*61046927SAndroid Build Coastguard Worker
170*61046927SAndroid Build Coastguard Worker        self.extensions.append(ext)
171*61046927SAndroid Build Coastguard Worker
172*61046927SAndroid Build Coastguard Workerdef filter_api(elem, api):
173*61046927SAndroid Build Coastguard Worker    if 'api' not in elem.attrib:
174*61046927SAndroid Build Coastguard Worker        return True
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker    return api in elem.attrib['api'].split(',')
177*61046927SAndroid Build Coastguard Worker
178*61046927SAndroid Build Coastguard Workerdef get_alias(aliases, name):
179*61046927SAndroid Build Coastguard Worker    if name in aliases:
180*61046927SAndroid Build Coastguard Worker        # in case the spec registry adds an alias chain later
181*61046927SAndroid Build Coastguard Worker        return get_alias(aliases, aliases[name])
182*61046927SAndroid Build Coastguard Worker    return name
183*61046927SAndroid Build Coastguard Worker
184*61046927SAndroid Build Coastguard Workerdef get_all_required(xml, thing, api, beta):
185*61046927SAndroid Build Coastguard Worker    things = {}
186*61046927SAndroid Build Coastguard Worker    aliases = {}
187*61046927SAndroid Build Coastguard Worker    for struct in xml.findall('./types/type[@category="struct"][@alias]'):
188*61046927SAndroid Build Coastguard Worker        if not filter_api(struct, api):
189*61046927SAndroid Build Coastguard Worker            continue
190*61046927SAndroid Build Coastguard Worker
191*61046927SAndroid Build Coastguard Worker        name = struct.attrib['name']
192*61046927SAndroid Build Coastguard Worker        alias = struct.attrib['alias']
193*61046927SAndroid Build Coastguard Worker        aliases[name] = alias
194*61046927SAndroid Build Coastguard Worker
195*61046927SAndroid Build Coastguard Worker    for feature in xml.findall('./feature'):
196*61046927SAndroid Build Coastguard Worker        if not filter_api(feature, api):
197*61046927SAndroid Build Coastguard Worker            continue
198*61046927SAndroid Build Coastguard Worker
199*61046927SAndroid Build Coastguard Worker        version = VkVersion(feature.attrib['number'])
200*61046927SAndroid Build Coastguard Worker        for t in feature.findall('./require/' + thing):
201*61046927SAndroid Build Coastguard Worker            name = t.attrib['name']
202*61046927SAndroid Build Coastguard Worker            assert name not in things
203*61046927SAndroid Build Coastguard Worker            things[name] = Requirements(core_version=version)
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker    for extension in xml.findall('.extensions/extension'):
206*61046927SAndroid Build Coastguard Worker        ext = Extension.from_xml(extension)
207*61046927SAndroid Build Coastguard Worker        if api not in ext.supported:
208*61046927SAndroid Build Coastguard Worker            continue
209*61046927SAndroid Build Coastguard Worker
210*61046927SAndroid Build Coastguard Worker        if beta != 'true' and ext.provisional:
211*61046927SAndroid Build Coastguard Worker            continue
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker        for require in extension.findall('./require'):
214*61046927SAndroid Build Coastguard Worker            if not filter_api(require, api):
215*61046927SAndroid Build Coastguard Worker                continue
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker            for t in require.findall('./' + thing):
218*61046927SAndroid Build Coastguard Worker                name = get_alias(aliases, t.attrib['name'])
219*61046927SAndroid Build Coastguard Worker                r = things.setdefault(name, Requirements())
220*61046927SAndroid Build Coastguard Worker                r.add_extension(ext)
221*61046927SAndroid Build Coastguard Worker
222*61046927SAndroid Build Coastguard Worker    platform_defines = {}
223*61046927SAndroid Build Coastguard Worker    for platform in xml.findall('./platforms/platform'):
224*61046927SAndroid Build Coastguard Worker        name = platform.attrib['name']
225*61046927SAndroid Build Coastguard Worker        define = platform.attrib['protect']
226*61046927SAndroid Build Coastguard Worker        platform_defines[name] = define
227*61046927SAndroid Build Coastguard Worker
228*61046927SAndroid Build Coastguard Worker    for req in things.values():
229*61046927SAndroid Build Coastguard Worker        if req.core_version is not None:
230*61046927SAndroid Build Coastguard Worker            continue
231*61046927SAndroid Build Coastguard Worker
232*61046927SAndroid Build Coastguard Worker        for ext in req.extensions:
233*61046927SAndroid Build Coastguard Worker            if ext.platform in platform_defines:
234*61046927SAndroid Build Coastguard Worker                req.guard = platform_defines[ext.platform]
235*61046927SAndroid Build Coastguard Worker                break
236*61046927SAndroid Build Coastguard Worker
237*61046927SAndroid Build Coastguard Worker    return things
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker# Mapping between extension name and the android version in which the extension
240*61046927SAndroid Build Coastguard Worker# was whitelisted in Android CTS's dEQP-VK.info.device_extensions and
241*61046927SAndroid Build Coastguard Worker# dEQP-VK.api.info.android.no_unknown_extensions, excluding those blocked by
242*61046927SAndroid Build Coastguard Worker# android.graphics.cts.VulkanFeaturesTest#testVulkanBlockedExtensions.
243*61046927SAndroid Build Coastguard WorkerALLOWED_ANDROID_VERSION = {
244*61046927SAndroid Build Coastguard Worker    # checkInstanceExtensions on oreo-cts-release
245*61046927SAndroid Build Coastguard Worker    "VK_KHR_surface": 26,
246*61046927SAndroid Build Coastguard Worker    "VK_KHR_display": 26,
247*61046927SAndroid Build Coastguard Worker    "VK_KHR_android_surface": 26,
248*61046927SAndroid Build Coastguard Worker    "VK_KHR_mir_surface": 26,
249*61046927SAndroid Build Coastguard Worker    "VK_KHR_wayland_surface": 26,
250*61046927SAndroid Build Coastguard Worker    "VK_KHR_win32_surface": 26,
251*61046927SAndroid Build Coastguard Worker    "VK_KHR_xcb_surface": 26,
252*61046927SAndroid Build Coastguard Worker    "VK_KHR_xlib_surface": 26,
253*61046927SAndroid Build Coastguard Worker    "VK_KHR_get_physical_device_properties2": 26,
254*61046927SAndroid Build Coastguard Worker    "VK_KHR_get_surface_capabilities2": 26,
255*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_memory_capabilities": 26,
256*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_semaphore_capabilities": 26,
257*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_fence_capabilities": 26,
258*61046927SAndroid Build Coastguard Worker    # on pie-cts-release
259*61046927SAndroid Build Coastguard Worker    "VK_KHR_device_group_creation": 28,
260*61046927SAndroid Build Coastguard Worker    "VK_KHR_get_display_properties2": 28,
261*61046927SAndroid Build Coastguard Worker    # on android10-tests-release
262*61046927SAndroid Build Coastguard Worker    "VK_KHR_surface_protected_capabilities": 29,
263*61046927SAndroid Build Coastguard Worker    # on android13-tests-release
264*61046927SAndroid Build Coastguard Worker    "VK_KHR_portability_enumeration": 33,
265*61046927SAndroid Build Coastguard Worker
266*61046927SAndroid Build Coastguard Worker    # checkDeviceExtensions on oreo-cts-release
267*61046927SAndroid Build Coastguard Worker    "VK_KHR_swapchain": 26,
268*61046927SAndroid Build Coastguard Worker    "VK_KHR_display_swapchain": 26,
269*61046927SAndroid Build Coastguard Worker    "VK_KHR_sampler_mirror_clamp_to_edge": 26,
270*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_draw_parameters": 26,
271*61046927SAndroid Build Coastguard Worker    "VK_KHR_maintenance1": 26,
272*61046927SAndroid Build Coastguard Worker    "VK_KHR_push_descriptor": 26,
273*61046927SAndroid Build Coastguard Worker    "VK_KHR_descriptor_update_template": 26,
274*61046927SAndroid Build Coastguard Worker    "VK_KHR_incremental_present": 26,
275*61046927SAndroid Build Coastguard Worker    "VK_KHR_shared_presentable_image": 26,
276*61046927SAndroid Build Coastguard Worker    "VK_KHR_storage_buffer_storage_class": 26,
277*61046927SAndroid Build Coastguard Worker    "VK_KHR_16bit_storage": 26,
278*61046927SAndroid Build Coastguard Worker    "VK_KHR_get_memory_requirements2": 26,
279*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_memory": 26,
280*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_memory_fd": 26,
281*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_memory_win32": 26,
282*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_semaphore": 26,
283*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_semaphore_fd": 26,
284*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_semaphore_win32": 26,
285*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_fence": 26,
286*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_fence_fd": 26,
287*61046927SAndroid Build Coastguard Worker    "VK_KHR_external_fence_win32": 26,
288*61046927SAndroid Build Coastguard Worker    "VK_KHR_win32_keyed_mutex": 26,
289*61046927SAndroid Build Coastguard Worker    "VK_KHR_dedicated_allocation": 26,
290*61046927SAndroid Build Coastguard Worker    "VK_KHR_variable_pointers": 26,
291*61046927SAndroid Build Coastguard Worker    "VK_KHR_relaxed_block_layout": 26,
292*61046927SAndroid Build Coastguard Worker    "VK_KHR_bind_memory2": 26,
293*61046927SAndroid Build Coastguard Worker    "VK_KHR_maintenance2": 26,
294*61046927SAndroid Build Coastguard Worker    "VK_KHR_image_format_list": 26,
295*61046927SAndroid Build Coastguard Worker    "VK_KHR_sampler_ycbcr_conversion": 26,
296*61046927SAndroid Build Coastguard Worker    # on oreo-mr1-cts-release
297*61046927SAndroid Build Coastguard Worker    "VK_KHR_draw_indirect_count": 27,
298*61046927SAndroid Build Coastguard Worker    # on pie-cts-release
299*61046927SAndroid Build Coastguard Worker    "VK_KHR_device_group": 28,
300*61046927SAndroid Build Coastguard Worker    "VK_KHR_multiview": 28,
301*61046927SAndroid Build Coastguard Worker    "VK_KHR_maintenance3": 28,
302*61046927SAndroid Build Coastguard Worker    "VK_KHR_create_renderpass2": 28,
303*61046927SAndroid Build Coastguard Worker    "VK_KHR_driver_properties": 28,
304*61046927SAndroid Build Coastguard Worker    # on android10-tests-release
305*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_float_controls": 29,
306*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_float16_int8": 29,
307*61046927SAndroid Build Coastguard Worker    "VK_KHR_8bit_storage": 29,
308*61046927SAndroid Build Coastguard Worker    "VK_KHR_depth_stencil_resolve": 29,
309*61046927SAndroid Build Coastguard Worker    "VK_KHR_swapchain_mutable_format": 29,
310*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_atomic_int64": 29,
311*61046927SAndroid Build Coastguard Worker    "VK_KHR_vulkan_memory_model": 29,
312*61046927SAndroid Build Coastguard Worker    "VK_KHR_swapchain_mutable_format": 29,
313*61046927SAndroid Build Coastguard Worker    "VK_KHR_uniform_buffer_standard_layout": 29,
314*61046927SAndroid Build Coastguard Worker    # on android11-tests-release
315*61046927SAndroid Build Coastguard Worker    "VK_KHR_imageless_framebuffer": 30,
316*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_subgroup_extended_types": 30,
317*61046927SAndroid Build Coastguard Worker    "VK_KHR_buffer_device_address": 30,
318*61046927SAndroid Build Coastguard Worker    "VK_KHR_separate_depth_stencil_layouts": 30,
319*61046927SAndroid Build Coastguard Worker    "VK_KHR_timeline_semaphore": 30,
320*61046927SAndroid Build Coastguard Worker    "VK_KHR_spirv_1_4": 30,
321*61046927SAndroid Build Coastguard Worker    "VK_KHR_pipeline_executable_properties": 30,
322*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_clock": 30,
323*61046927SAndroid Build Coastguard Worker    # blocked by testVulkanBlockedExtensions
324*61046927SAndroid Build Coastguard Worker    # "VK_KHR_performance_query": 30,
325*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_non_semantic_info": 30,
326*61046927SAndroid Build Coastguard Worker    "VK_KHR_copy_commands2": 30,
327*61046927SAndroid Build Coastguard Worker    # on android12-tests-release
328*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_terminate_invocation": 31,
329*61046927SAndroid Build Coastguard Worker    "VK_KHR_ray_tracing_pipeline": 31,
330*61046927SAndroid Build Coastguard Worker    "VK_KHR_ray_query": 31,
331*61046927SAndroid Build Coastguard Worker    "VK_KHR_acceleration_structure": 31,
332*61046927SAndroid Build Coastguard Worker    "VK_KHR_pipeline_library": 31,
333*61046927SAndroid Build Coastguard Worker    "VK_KHR_deferred_host_operations": 31,
334*61046927SAndroid Build Coastguard Worker    "VK_KHR_fragment_shading_rate": 31,
335*61046927SAndroid Build Coastguard Worker    "VK_KHR_zero_initialize_workgroup_memory": 31,
336*61046927SAndroid Build Coastguard Worker    "VK_KHR_workgroup_memory_explicit_layout": 31,
337*61046927SAndroid Build Coastguard Worker    "VK_KHR_synchronization2": 31,
338*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_integer_dot_product": 31,
339*61046927SAndroid Build Coastguard Worker    # on android13-tests-release
340*61046927SAndroid Build Coastguard Worker    "VK_KHR_dynamic_rendering": 33,
341*61046927SAndroid Build Coastguard Worker    "VK_KHR_format_feature_flags2": 33,
342*61046927SAndroid Build Coastguard Worker    "VK_KHR_global_priority": 33,
343*61046927SAndroid Build Coastguard Worker    "VK_KHR_maintenance4": 33,
344*61046927SAndroid Build Coastguard Worker    "VK_KHR_portability_subset": 33,
345*61046927SAndroid Build Coastguard Worker    "VK_KHR_present_id": 33,
346*61046927SAndroid Build Coastguard Worker    "VK_KHR_present_wait": 33,
347*61046927SAndroid Build Coastguard Worker    "VK_KHR_shader_subgroup_uniform_control_flow": 33,
348*61046927SAndroid Build Coastguard Worker
349*61046927SAndroid Build Coastguard Worker    # testNoUnknownExtensions on oreo-cts-release
350*61046927SAndroid Build Coastguard Worker    "VK_GOOGLE_display_timing": 26,
351*61046927SAndroid Build Coastguard Worker    # on pie-cts-release
352*61046927SAndroid Build Coastguard Worker    "VK_ANDROID_external_memory_android_hardware_buffer": 28,
353*61046927SAndroid Build Coastguard Worker    # on android11-tests-release
354*61046927SAndroid Build Coastguard Worker    "VK_GOOGLE_decorate_string": 30,
355*61046927SAndroid Build Coastguard Worker    "VK_GOOGLE_hlsl_functionality1": 30,
356*61046927SAndroid Build Coastguard Worker    # on android13-tests-release
357*61046927SAndroid Build Coastguard Worker    "VK_GOOGLE_surfaceless_query": 33,
358*61046927SAndroid Build Coastguard Worker
359*61046927SAndroid Build Coastguard Worker    # this HAL extension is always allowed and will be filtered out by the
360*61046927SAndroid Build Coastguard Worker    # loader
361*61046927SAndroid Build Coastguard Worker    "VK_ANDROID_native_buffer": 26,
362*61046927SAndroid Build Coastguard Worker}
363*61046927SAndroid Build Coastguard Worker
364*61046927SAndroid Build Coastguard Worker# Extensions with these prefixes are checked in Android CTS, and thus must be
365*61046927SAndroid Build Coastguard Worker# whitelisted per the preceding dict.
366*61046927SAndroid Build Coastguard WorkerANDROID_EXTENSION_WHITELIST_PREFIXES = (
367*61046927SAndroid Build Coastguard Worker    "VK_KHX",
368*61046927SAndroid Build Coastguard Worker    "VK_KHR",
369*61046927SAndroid Build Coastguard Worker    "VK_GOOGLE",
370*61046927SAndroid Build Coastguard Worker    "VK_ANDROID"
371*61046927SAndroid Build Coastguard Worker)
372