annotate fuhtark_test/Vulkan-Headers-1.4.334/registry/vkconventions.py @ 1501:f40d9d814c08 default tip

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