xref: /aosp_15_r20/external/vulkan-headers/registry/vkconventions.py (revision 902771965e4c6d39c75c62130a6a330c08b024db)
1*90277196SAndroid Build Coastguard Worker#!/usr/bin/env python3 -i
2*90277196SAndroid Build Coastguard Worker#
3*90277196SAndroid Build Coastguard Worker# Copyright 2013-2024 The Khronos Group Inc.
4*90277196SAndroid Build Coastguard Worker#
5*90277196SAndroid Build Coastguard Worker# SPDX-License-Identifier: Apache-2.0
6*90277196SAndroid Build Coastguard Worker
7*90277196SAndroid Build Coastguard Worker# Working-group-specific style conventions,
8*90277196SAndroid Build Coastguard Worker# used in generation.
9*90277196SAndroid Build Coastguard Worker
10*90277196SAndroid Build Coastguard Workerimport re
11*90277196SAndroid Build Coastguard Workerimport os
12*90277196SAndroid Build Coastguard Worker
13*90277196SAndroid Build Coastguard Workerfrom spec_tools.conventions import ConventionsBase
14*90277196SAndroid Build Coastguard Worker
15*90277196SAndroid Build Coastguard Worker# Modified from default implementation - see category_requires_validation() below
16*90277196SAndroid Build Coastguard WorkerCATEGORIES_REQUIRING_VALIDATION = set(('handle', 'enum', 'bitmask'))
17*90277196SAndroid Build Coastguard Worker
18*90277196SAndroid Build Coastguard Worker# Tokenize into "words" for structure types, approximately per spec "Implicit Valid Usage" section 2.7.2
19*90277196SAndroid Build Coastguard Worker# This first set is for things we recognize explicitly as words,
20*90277196SAndroid Build Coastguard Worker# as exceptions to the general regex.
21*90277196SAndroid Build Coastguard Worker# Ideally these would be listed in the spec as exceptions, as OpenXR does.
22*90277196SAndroid Build Coastguard WorkerSPECIAL_WORDS = set((
23*90277196SAndroid Build Coastguard Worker    '16Bit',  # VkPhysicalDevice16BitStorageFeatures
24*90277196SAndroid Build Coastguard Worker    '2D',     # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT
25*90277196SAndroid Build Coastguard Worker    '3D',     # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT
26*90277196SAndroid Build Coastguard Worker    '8Bit',  # VkPhysicalDevice8BitStorageFeaturesKHR
27*90277196SAndroid Build Coastguard Worker    'AABB',  # VkGeometryAABBNV
28*90277196SAndroid Build Coastguard Worker    'ASTC',  # VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
29*90277196SAndroid Build Coastguard Worker    'D3D12',  # VkD3D12FenceSubmitInfoKHR
30*90277196SAndroid Build Coastguard Worker    'Float16',  # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR
31*90277196SAndroid Build Coastguard Worker    'ImagePipe',  # VkImagePipeSurfaceCreateInfoFUCHSIA
32*90277196SAndroid Build Coastguard Worker    'Int64',  # VkPhysicalDeviceShaderAtomicInt64FeaturesKHR
33*90277196SAndroid Build Coastguard Worker    'Int8',  # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR
34*90277196SAndroid Build Coastguard Worker    'MacOS',  # VkMacOSSurfaceCreateInfoMVK
35*90277196SAndroid Build Coastguard Worker    'RGBA10X6', # VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
36*90277196SAndroid Build Coastguard Worker    'Uint8',  # VkPhysicalDeviceIndexTypeUint8FeaturesEXT
37*90277196SAndroid Build Coastguard Worker    'Win32',  # VkWin32SurfaceCreateInfoKHR
38*90277196SAndroid Build Coastguard Worker))
39*90277196SAndroid Build Coastguard Worker# A regex to match any of the SPECIAL_WORDS
40*90277196SAndroid Build Coastguard WorkerEXCEPTION_PATTERN = r'(?P<exception>{})'.format(
41*90277196SAndroid Build Coastguard Worker    '|'.join('(%s)' % re.escape(w) for w in SPECIAL_WORDS))
42*90277196SAndroid Build Coastguard WorkerMAIN_RE = re.compile(
43*90277196SAndroid Build Coastguard Worker    # the negative lookahead is to prevent the all-caps pattern from being too greedy.
44*90277196SAndroid Build Coastguard Worker    r'({}|([0-9]+)|([A-Z][a-z]+)|([A-Z][A-Z]*(?![a-z])))'.format(EXCEPTION_PATTERN))
45*90277196SAndroid Build Coastguard Worker
46*90277196SAndroid Build Coastguard Worker
47*90277196SAndroid Build Coastguard Workerclass VulkanConventions(ConventionsBase):
48*90277196SAndroid Build Coastguard Worker    @property
49*90277196SAndroid Build Coastguard Worker    def null(self):
50*90277196SAndroid Build Coastguard Worker        """Preferred spelling of NULL."""
51*90277196SAndroid Build Coastguard Worker        return '`NULL`'
52*90277196SAndroid Build Coastguard Worker
53*90277196SAndroid Build Coastguard Worker    def formatVersion(self, name, apivariant, major, minor):
54*90277196SAndroid Build Coastguard Worker        """Mark up an API version name as a link in the spec."""
55*90277196SAndroid Build Coastguard Worker        version = f'{major}.{minor}'
56*90277196SAndroid Build Coastguard Worker        if apivariant == 'VKSC':
57*90277196SAndroid Build Coastguard Worker            # Vulkan SC has a different anchor pattern for version appendices
58*90277196SAndroid Build Coastguard Worker            if version == '1.0':
59*90277196SAndroid Build Coastguard Worker                return 'Vulkan SC 1.0'
60*90277196SAndroid Build Coastguard Worker            else:
61*90277196SAndroid Build Coastguard Worker                return f'<<versions-sc-{version}, Vulkan SC Version {version}>>'
62*90277196SAndroid Build Coastguard Worker        else:
63*90277196SAndroid Build Coastguard Worker            return f'<<versions-{version}, Vulkan Version {version}>>'
64*90277196SAndroid Build Coastguard Worker
65*90277196SAndroid Build Coastguard Worker    def formatExtension(self, name):
66*90277196SAndroid Build Coastguard Worker        """Mark up an extension name as a link in the spec."""
67*90277196SAndroid Build Coastguard Worker        return f'apiext:{name}'
68*90277196SAndroid Build Coastguard Worker
69*90277196SAndroid Build Coastguard Worker    @property
70*90277196SAndroid Build Coastguard Worker    def struct_macro(self):
71*90277196SAndroid Build Coastguard Worker        """Get the appropriate format macro for a structure.
72*90277196SAndroid Build Coastguard Worker
73*90277196SAndroid Build Coastguard Worker        Primarily affects generated valid usage statements.
74*90277196SAndroid Build Coastguard Worker        """
75*90277196SAndroid Build Coastguard Worker
76*90277196SAndroid Build Coastguard Worker        return 'slink:'
77*90277196SAndroid Build Coastguard Worker
78*90277196SAndroid Build Coastguard Worker    @property
79*90277196SAndroid Build Coastguard Worker    def constFlagBits(self):
80*90277196SAndroid Build Coastguard Worker        """Returns True if static const flag bits should be generated, False if an enumerated type should be generated."""
81*90277196SAndroid Build Coastguard Worker        return False
82*90277196SAndroid Build Coastguard Worker
83*90277196SAndroid Build Coastguard Worker    @property
84*90277196SAndroid Build Coastguard Worker    def structtype_member_name(self):
85*90277196SAndroid Build Coastguard Worker        """Return name of the structure type member"""
86*90277196SAndroid Build Coastguard Worker        return 'sType'
87*90277196SAndroid Build Coastguard Worker
88*90277196SAndroid Build Coastguard Worker    @property
89*90277196SAndroid Build Coastguard Worker    def nextpointer_member_name(self):
90*90277196SAndroid Build Coastguard Worker        """Return name of the structure pointer chain member"""
91*90277196SAndroid Build Coastguard Worker        return 'pNext'
92*90277196SAndroid Build Coastguard Worker
93*90277196SAndroid Build Coastguard Worker    @property
94*90277196SAndroid Build Coastguard Worker    def valid_pointer_prefix(self):
95*90277196SAndroid Build Coastguard Worker        """Return prefix to pointers which must themselves be valid"""
96*90277196SAndroid Build Coastguard Worker        return 'valid'
97*90277196SAndroid Build Coastguard Worker
98*90277196SAndroid Build Coastguard Worker    def is_structure_type_member(self, paramtype, paramname):
99*90277196SAndroid Build Coastguard Worker        """Determine if member type and name match the structure type member."""
100*90277196SAndroid Build Coastguard Worker        return paramtype == 'VkStructureType' and paramname == self.structtype_member_name
101*90277196SAndroid Build Coastguard Worker
102*90277196SAndroid Build Coastguard Worker    def is_nextpointer_member(self, paramtype, paramname):
103*90277196SAndroid Build Coastguard Worker        """Determine if member type and name match the next pointer chain member."""
104*90277196SAndroid Build Coastguard Worker        return paramtype == 'void' and paramname == self.nextpointer_member_name
105*90277196SAndroid Build Coastguard Worker
106*90277196SAndroid Build Coastguard Worker    def generate_structure_type_from_name(self, structname):
107*90277196SAndroid Build Coastguard Worker        """Generate a structure type name, like VK_STRUCTURE_TYPE_CREATE_INSTANCE_INFO"""
108*90277196SAndroid Build Coastguard Worker
109*90277196SAndroid Build Coastguard Worker        structure_type_parts = []
110*90277196SAndroid Build Coastguard Worker        # Tokenize into "words"
111*90277196SAndroid Build Coastguard Worker        for elem in MAIN_RE.findall(structname):
112*90277196SAndroid Build Coastguard Worker            word = elem[0]
113*90277196SAndroid Build Coastguard Worker            if word == 'Vk':
114*90277196SAndroid Build Coastguard Worker                structure_type_parts.append('VK_STRUCTURE_TYPE')
115*90277196SAndroid Build Coastguard Worker            else:
116*90277196SAndroid Build Coastguard Worker                structure_type_parts.append(word.upper())
117*90277196SAndroid Build Coastguard Worker        name = '_'.join(structure_type_parts)
118*90277196SAndroid Build Coastguard Worker
119*90277196SAndroid Build Coastguard Worker        # The simple-minded rules need modification for some structure names
120*90277196SAndroid Build Coastguard Worker        subpats = [
121*90277196SAndroid Build Coastguard Worker            [ r'_H_(26[45])_',              r'_H\1_' ],
122*90277196SAndroid Build Coastguard Worker            [ r'_AV_1_',                    r'_AV1_' ],
123*90277196SAndroid Build Coastguard Worker            [ r'_VULKAN_([0-9])([0-9])_',   r'_VULKAN_\1_\2_' ],
124*90277196SAndroid Build Coastguard Worker            [ r'_VULKAN_SC_([0-9])([0-9])_',r'_VULKAN_SC_\1_\2_' ],
125*90277196SAndroid Build Coastguard Worker            [ r'_DIRECT_FB_',               r'_DIRECTFB_' ],
126*90277196SAndroid Build Coastguard Worker            [ r'_VULKAN_SC_10',             r'_VULKAN_SC_1_0' ],
127*90277196SAndroid Build Coastguard Worker
128*90277196SAndroid Build Coastguard Worker        ]
129*90277196SAndroid Build Coastguard Worker
130*90277196SAndroid Build Coastguard Worker        for subpat in subpats:
131*90277196SAndroid Build Coastguard Worker            name = re.sub(subpat[0], subpat[1], name)
132*90277196SAndroid Build Coastguard Worker        return name
133*90277196SAndroid Build Coastguard Worker
134*90277196SAndroid Build Coastguard Worker    @property
135*90277196SAndroid Build Coastguard Worker    def warning_comment(self):
136*90277196SAndroid Build Coastguard Worker        """Return warning comment to be placed in header of generated Asciidoctor files"""
137*90277196SAndroid Build Coastguard Worker        return '// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry'
138*90277196SAndroid Build Coastguard Worker
139*90277196SAndroid Build Coastguard Worker    @property
140*90277196SAndroid Build Coastguard Worker    def file_suffix(self):
141*90277196SAndroid Build Coastguard Worker        """Return suffix of generated Asciidoctor files"""
142*90277196SAndroid Build Coastguard Worker        return '.adoc'
143*90277196SAndroid Build Coastguard Worker
144*90277196SAndroid Build Coastguard Worker    def api_name(self, spectype='api'):
145*90277196SAndroid Build Coastguard Worker        """Return API or specification name for citations in ref pages.ref
146*90277196SAndroid Build Coastguard Worker           pages should link to for
147*90277196SAndroid Build Coastguard Worker
148*90277196SAndroid Build Coastguard Worker           spectype is the spec this refpage is for: 'api' is the Vulkan API
149*90277196SAndroid Build Coastguard Worker           Specification. Defaults to 'api'. If an unrecognized spectype is
150*90277196SAndroid Build Coastguard Worker           given, returns None.
151*90277196SAndroid Build Coastguard Worker        """
152*90277196SAndroid Build Coastguard Worker        if spectype == 'api' or spectype is None:
153*90277196SAndroid Build Coastguard Worker            return 'Vulkan'
154*90277196SAndroid Build Coastguard Worker        else:
155*90277196SAndroid Build Coastguard Worker            return None
156*90277196SAndroid Build Coastguard Worker
157*90277196SAndroid Build Coastguard Worker    @property
158*90277196SAndroid Build Coastguard Worker    def api_prefix(self):
159*90277196SAndroid Build Coastguard Worker        """Return API token prefix"""
160*90277196SAndroid Build Coastguard Worker        return 'VK_'
161*90277196SAndroid Build Coastguard Worker
162*90277196SAndroid Build Coastguard Worker    @property
163*90277196SAndroid Build Coastguard Worker    def write_contacts(self):
164*90277196SAndroid Build Coastguard Worker        """Return whether contact list should be written to extension appendices"""
165*90277196SAndroid Build Coastguard Worker        return True
166*90277196SAndroid Build Coastguard Worker
167*90277196SAndroid Build Coastguard Worker    @property
168*90277196SAndroid Build Coastguard Worker    def write_refpage_include(self):
169*90277196SAndroid Build Coastguard Worker        """Return whether refpage include should be written to extension appendices"""
170*90277196SAndroid Build Coastguard Worker        return True
171*90277196SAndroid Build Coastguard Worker
172*90277196SAndroid Build Coastguard Worker    @property
173*90277196SAndroid Build Coastguard Worker    def member_used_for_unique_vuid(self):
174*90277196SAndroid Build Coastguard Worker        """Return the member name used in the VUID-...-...-unique ID."""
175*90277196SAndroid Build Coastguard Worker        return self.structtype_member_name
176*90277196SAndroid Build Coastguard Worker
177*90277196SAndroid Build Coastguard Worker    def is_externsync_command(self, protoname):
178*90277196SAndroid Build Coastguard Worker        """Returns True if the protoname element is an API command requiring
179*90277196SAndroid Build Coastguard Worker           external synchronization
180*90277196SAndroid Build Coastguard Worker        """
181*90277196SAndroid Build Coastguard Worker        return protoname is not None and 'vkCmd' in protoname
182*90277196SAndroid Build Coastguard Worker
183*90277196SAndroid Build Coastguard Worker    def is_api_name(self, name):
184*90277196SAndroid Build Coastguard Worker        """Returns True if name is in the reserved API namespace.
185*90277196SAndroid Build Coastguard Worker        For Vulkan, these are names with a case-insensitive 'vk' prefix, or
186*90277196SAndroid Build Coastguard Worker        a 'PFN_vk' function pointer type prefix.
187*90277196SAndroid Build Coastguard Worker        """
188*90277196SAndroid Build Coastguard Worker        return name[0:2].lower() == 'vk' or name[0:6] == 'PFN_vk'
189*90277196SAndroid Build Coastguard Worker
190*90277196SAndroid Build Coastguard Worker    def specURL(self, spectype='api'):
191*90277196SAndroid Build Coastguard Worker        """Return public registry URL which ref pages should link to for the
192*90277196SAndroid Build Coastguard Worker           current all-extensions HTML specification, so xrefs in the
193*90277196SAndroid Build Coastguard Worker           asciidoc source that are not to ref pages can link into it
194*90277196SAndroid Build Coastguard Worker           instead. N.b. this may need to change on a per-refpage basis if
195*90277196SAndroid Build Coastguard Worker           there are multiple documents involved.
196*90277196SAndroid Build Coastguard Worker        """
197*90277196SAndroid Build Coastguard Worker        return 'https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html'
198*90277196SAndroid Build Coastguard Worker
199*90277196SAndroid Build Coastguard Worker    @property
200*90277196SAndroid Build Coastguard Worker    def xml_api_name(self):
201*90277196SAndroid Build Coastguard Worker        """Return the name used in the default API XML registry for the default API"""
202*90277196SAndroid Build Coastguard Worker        return 'vulkan'
203*90277196SAndroid Build Coastguard Worker
204*90277196SAndroid Build Coastguard Worker    @property
205*90277196SAndroid Build Coastguard Worker    def registry_path(self):
206*90277196SAndroid Build Coastguard Worker        """Return relpath to the default API XML registry in this project."""
207*90277196SAndroid Build Coastguard Worker        return 'xml/vk.xml'
208*90277196SAndroid Build Coastguard Worker
209*90277196SAndroid Build Coastguard Worker    @property
210*90277196SAndroid Build Coastguard Worker    def specification_path(self):
211*90277196SAndroid Build Coastguard Worker        """Return relpath to the Asciidoctor specification sources in this project."""
212*90277196SAndroid Build Coastguard Worker        return '{generated}/meta'
213*90277196SAndroid Build Coastguard Worker
214*90277196SAndroid Build Coastguard Worker    @property
215*90277196SAndroid Build Coastguard Worker    def special_use_section_anchor(self):
216*90277196SAndroid Build Coastguard Worker        """Return asciidoctor anchor name in the API Specification of the
217*90277196SAndroid Build Coastguard Worker        section describing extension special uses in detail."""
218*90277196SAndroid Build Coastguard Worker        return 'extendingvulkan-compatibility-specialuse'
219*90277196SAndroid Build Coastguard Worker
220*90277196SAndroid Build Coastguard Worker    @property
221*90277196SAndroid Build Coastguard Worker    def extension_index_prefixes(self):
222*90277196SAndroid Build Coastguard Worker        """Return a list of extension prefixes used to group extension refpages."""
223*90277196SAndroid Build Coastguard Worker        return ['VK_KHR', 'VK_EXT', 'VK']
224*90277196SAndroid Build Coastguard Worker
225*90277196SAndroid Build Coastguard Worker    @property
226*90277196SAndroid Build Coastguard Worker    def unified_flag_refpages(self):
227*90277196SAndroid Build Coastguard Worker        """Return True if Flags/FlagBits refpages are unified, False if
228*90277196SAndroid Build Coastguard Worker           they are separate.
229*90277196SAndroid Build Coastguard Worker        """
230*90277196SAndroid Build Coastguard Worker        return False
231*90277196SAndroid Build Coastguard Worker
232*90277196SAndroid Build Coastguard Worker    @property
233*90277196SAndroid Build Coastguard Worker    def spec_reflow_path(self):
234*90277196SAndroid Build Coastguard Worker        """Return the path to the spec source folder to reflow"""
235*90277196SAndroid Build Coastguard Worker        return os.getcwd()
236*90277196SAndroid Build Coastguard Worker
237*90277196SAndroid Build Coastguard Worker    @property
238*90277196SAndroid Build Coastguard Worker    def spec_no_reflow_dirs(self):
239*90277196SAndroid Build Coastguard Worker        """Return a set of directories not to automatically descend into
240*90277196SAndroid Build Coastguard Worker           when reflowing spec text
241*90277196SAndroid Build Coastguard Worker        """
242*90277196SAndroid Build Coastguard Worker        return ('scripts', 'style')
243*90277196SAndroid Build Coastguard Worker
244*90277196SAndroid Build Coastguard Worker    @property
245*90277196SAndroid Build Coastguard Worker    def zero(self):
246*90277196SAndroid Build Coastguard Worker        return '`0`'
247*90277196SAndroid Build Coastguard Worker
248*90277196SAndroid Build Coastguard Worker    def category_requires_validation(self, category):
249*90277196SAndroid Build Coastguard Worker        """Return True if the given type 'category' always requires validation.
250*90277196SAndroid Build Coastguard Worker
251*90277196SAndroid Build Coastguard Worker        Overridden because Vulkan does not require "valid" text for basetype
252*90277196SAndroid Build Coastguard Worker        in the spec right now."""
253*90277196SAndroid Build Coastguard Worker        return category in CATEGORIES_REQUIRING_VALIDATION
254*90277196SAndroid Build Coastguard Worker
255*90277196SAndroid Build Coastguard Worker    @property
256*90277196SAndroid Build Coastguard Worker    def should_skip_checking_codes(self):
257*90277196SAndroid Build Coastguard Worker        """Return True if more than the basic validation of return codes should
258*90277196SAndroid Build Coastguard Worker        be skipped for a command.
259*90277196SAndroid Build Coastguard Worker
260*90277196SAndroid Build Coastguard Worker        Vulkan mostly relies on the validation layers rather than API
261*90277196SAndroid Build Coastguard Worker        builtin error checking, so these checks are not appropriate.
262*90277196SAndroid Build Coastguard Worker
263*90277196SAndroid Build Coastguard Worker        For example, passing in a VkFormat parameter will not potentially
264*90277196SAndroid Build Coastguard Worker        generate a VK_ERROR_FORMAT_NOT_SUPPORTED code."""
265*90277196SAndroid Build Coastguard Worker
266*90277196SAndroid Build Coastguard Worker        return True
267*90277196SAndroid Build Coastguard Worker
268*90277196SAndroid Build Coastguard Worker    def extension_file_path(self, name):
269*90277196SAndroid Build Coastguard Worker        """Return file path to an extension appendix relative to a directory
270*90277196SAndroid Build Coastguard Worker           containing all such appendices.
271*90277196SAndroid Build Coastguard Worker           - name - extension name"""
272*90277196SAndroid Build Coastguard Worker
273*90277196SAndroid Build Coastguard Worker        return f'{name}{self.file_suffix}'
274*90277196SAndroid Build Coastguard Worker
275*90277196SAndroid Build Coastguard Worker    def valid_flag_bit(self, bitpos):
276*90277196SAndroid Build Coastguard Worker        """Return True if bitpos is an allowed numeric bit position for
277*90277196SAndroid Build Coastguard Worker           an API flag bit.
278*90277196SAndroid Build Coastguard Worker
279*90277196SAndroid Build Coastguard Worker           Vulkan uses 32 bit Vk*Flags types, and assumes C compilers may
280*90277196SAndroid Build Coastguard Worker           cause Vk*FlagBits values with bit 31 set to result in a 64 bit
281*90277196SAndroid Build Coastguard Worker           enumerated type, so disallows such flags."""
282*90277196SAndroid Build Coastguard Worker        return bitpos >= 0 and bitpos < 31
283*90277196SAndroid Build Coastguard Worker
284*90277196SAndroid Build Coastguard Worker    @property
285*90277196SAndroid Build Coastguard Worker    def extra_refpage_headers(self):
286*90277196SAndroid Build Coastguard Worker        """Return any extra text to add to refpage headers."""
287*90277196SAndroid Build Coastguard Worker        return 'include::{config}/attribs.adoc[]'
288*90277196SAndroid Build Coastguard Worker
289*90277196SAndroid Build Coastguard Worker    @property
290*90277196SAndroid Build Coastguard Worker    def extra_refpage_body(self):
291*90277196SAndroid Build Coastguard Worker        """Return any extra text (following the title) for generated
292*90277196SAndroid Build Coastguard Worker           reference pages."""
293*90277196SAndroid Build Coastguard Worker        return 'include::{generated}/specattribs.adoc[]'
294*90277196SAndroid Build Coastguard Worker
295*90277196SAndroid Build Coastguard Worker
296*90277196SAndroid Build Coastguard Workerclass VulkanSCConventions(VulkanConventions):
297*90277196SAndroid Build Coastguard Worker
298*90277196SAndroid Build Coastguard Worker    def specURL(self, spectype='api'):
299*90277196SAndroid Build Coastguard Worker        """Return public registry URL which ref pages should link to for the
300*90277196SAndroid Build Coastguard Worker           current all-extensions HTML specification, so xrefs in the
301*90277196SAndroid Build Coastguard Worker           asciidoc source that are not to ref pages can link into it
302*90277196SAndroid Build Coastguard Worker           instead. N.b. this may need to change on a per-refpage basis if
303*90277196SAndroid Build Coastguard Worker           there are multiple documents involved.
304*90277196SAndroid Build Coastguard Worker        """
305*90277196SAndroid Build Coastguard Worker        return 'https://registry.khronos.org/vulkansc/specs/1.0-extensions/html/vkspec.html'
306*90277196SAndroid Build Coastguard Worker
307*90277196SAndroid Build Coastguard Worker    @property
308*90277196SAndroid Build Coastguard Worker    def xml_api_name(self):
309*90277196SAndroid Build Coastguard Worker        """Return the name used in the default API XML registry for the default API"""
310*90277196SAndroid Build Coastguard Worker        return 'vulkansc'
311*90277196SAndroid Build Coastguard Worker
312