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