215 lines
6.8 KiB
Python
215 lines
6.8 KiB
Python
#!/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')
|
|
|