summaryrefslogtreecommitdiffhomepage
path: root/registry/vkconventions.py
diff options
context:
space:
mode:
Diffstat (limited to 'registry/vkconventions.py')
-rw-r--r--registry/vkconventions.py214
1 files changed, 214 insertions, 0 deletions
diff --git a/registry/vkconventions.py b/registry/vkconventions.py
new file mode 100644
index 0000000..64b4dd4
--- /dev/null
+++ b/registry/vkconventions.py
@@ -0,0 +1,214 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2013-2019 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Working-group-specific style conventions,
+# used in generation.
+
+from conventions import ConventionsBase
+
+
+class VulkanConventions(ConventionsBase):
+ def formatExtension(self, name):
+ """Mark up a name as an extension for the spec."""
+ return '`<<{}>>`'.format(name)
+
+ @property
+ def null(self):
+ """Preferred spelling of NULL."""
+ return '`NULL`'
+
+ @property
+ def constFlagBits(self):
+ """Returns True if static const flag bits should be generated, False if an enumerated type should be generated."""
+ return False
+
+ @property
+ def struct_macro(self):
+ return 'sname:'
+
+ @property
+ def external_macro(self):
+ return 'code:'
+
+ @property
+ def structtype_member_name(self):
+ """Return name of the structure type member"""
+ return 'sType'
+
+ @property
+ def nextpointer_member_name(self):
+ """Return name of the structure pointer chain member"""
+ return 'pNext'
+
+ @property
+ def valid_pointer_prefix(self):
+ """Return prefix to pointers which must themselves be valid"""
+ return 'valid'
+
+ def is_structure_type_member(self, paramtype, paramname):
+ """Determine if member type and name match the structure type member."""
+ return paramtype == 'VkStructureType' and paramname == self.structtype_member_name
+
+ def is_nextpointer_member(self, paramtype, paramname):
+ """Determine if member type and name match the next pointer chain member."""
+ return paramtype == 'void' and paramname == self.nextpointer_member_name
+
+ @property
+ def warning_comment(self):
+ """Return warning comment to be placed in header of generated Asciidoctor files"""
+ return '// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry'
+
+ @property
+ def file_suffix(self):
+ """Return suffix of generated Asciidoctor files"""
+ return '.txt'
+
+ @property
+ def api_name(self):
+ """Return API name"""
+ return 'Vulkan'
+
+ @property
+ def xml_supported_name_of_api(self):
+ """Return the supported= attribute used in API XML"""
+ return 'vulkan'
+
+ @property
+ def api_prefix(self):
+ """Return API token prefix"""
+ return 'VK_'
+
+ @property
+ def api_version_prefix(self):
+ """Return API core version token prefix"""
+ return 'VK_VERSION_'
+
+ @property
+ def KHR_prefix(self):
+ """Return extension name prefix for KHR extensions"""
+ return 'VK_KHR_'
+
+ @property
+ def EXT_prefix(self):
+ """Return extension name prefix for EXT extensions"""
+ return 'VK_EXT_'
+
+ @property
+ def write_contacts(self):
+ """Return whether contact list should be written to extension appendices"""
+ return True
+
+ @property
+ def write_refpage_include(self):
+ """Return whether refpage include should be written to extension appendices"""
+ return True
+
+ def writeFeature(self, featureExtraProtect, filename):
+ """Returns True if OutputGenerator.endFeature should write this feature.
+ Used in COutputGenerator
+ """
+ return True
+
+ def requires_error_validation(self, return_type):
+ """Returns True if the return_type element is an API result code
+ requiring error validation.
+ """
+ return False
+
+ @property
+ def required_errors(self):
+ """Return a list of required error codes for validation."""
+ return []
+
+ def is_externsync_command(self, protoname):
+ """Returns True if the protoname element is an API command requiring
+ external synchronization
+ """
+ return protoname is not None and 'vkCmd' in protoname
+
+ def is_api_name(self, name):
+ """Returns True if name is in the reserved API namespace.
+ For Vulkan, these are names with a case-insensitive 'vk' prefix, or
+ a 'PFN_vk' function pointer type prefix.
+ """
+ return name[0:2].lower() == 'vk' or name[0:6] == 'PFN_vk'
+
+ def is_voidpointer_alias(self, tag, text, tail):
+ """Return True if the declaration components (tag,text,tail) of an
+ element represents a void * type
+ """
+ return tag == 'type' and text == 'void' and tail.startswith('*')
+
+ def make_voidpointer_alias(self, tail):
+ """Reformat a void * declaration to include the API alias macro.
+ Vulkan doesn't have an API alias macro, so do nothing.
+ """
+ return tail
+
+ @property
+ def specURL(self):
+ """Return public registry URL which ref pages should link to for the
+ current all-extensions HTML specification, so xrefs in the
+ asciidoc source that aren't to ref pages can link into it
+ instead. N.b. this may need to change on a per-refpage basis if
+ there are multiple documents involved.
+ """
+ return 'https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html'
+
+ @property
+ def xml_api_name(self):
+ """Return the name used in the default API XML registry for the default API"""
+ return 'vulkan'
+
+ @property
+ def registry_path(self):
+ """Return relpath to the default API XML registry in this project."""
+ return 'xml/vk.xml'
+
+ @property
+ def specification_path(self):
+ """Return relpath to the Asciidoctor specification sources in this project."""
+ return '../appendices/meta'
+
+ @property
+ def extra_refpage_headers(self):
+ """Return any extra text to add to refpage headers."""
+ return 'include::../config/attribs.txt[]'
+
+ @property
+ def extension_index_prefixes(self):
+ """Return a list of extension prefixes used to group extension refpages."""
+ return ['VK_KHR', 'VK_EXT', 'VK']
+
+ @property
+ def unified_flag_refpages(self):
+ """Returns True if Flags/FlagBits refpages are unified, False if
+ they're separate.
+ """
+ return False
+
+ @property
+ def spec_reflow_path(self):
+ """Return the relative path to the spec source folder to reflow"""
+ return '.'
+
+ @property
+ def spec_no_reflow_dirs(self):
+ """Return a set of directories not to automatically descend into
+ when reflowing spec text
+ """
+ return ('scripts', 'style')
+