mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-10 05:24:38 +00:00
476e3f422d
* Update release number to 104. Public Issues: * Remove the incorrect line from "`Initial`" to "`Invalid`" state in the <<commandbuffer-lifecycle-diagram, Lifecycle of a command buffer>> diagram (public issue 881). * Add Fuchsia platform to <<boilerplate-wsi-header-table, Window System Extensions and Headers>> table (public pull request 933). * Change the type of slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress from basetype:VkDeviceSize to basetype:VkDeviceAddress. These are both typedefs of code:uint64_t, so it is an ABI-compatible change (public issue 934). Internal Issues: * Remove generated header files and update the CI tests to build a copy of the headers for use by the hpp-generate / hpp-compile CI stages. Targets to generate the headers will not be removed, but keeping these generated files in the repository increased the frequency of conflicts between branches when merging to master (internal issue 745). * Reword "`undefined: behavior if *action*" to "`must: not do *action*`" in the places the old terminology was used, and add a new <<writing-undefined, Describing Undefined Behavior>> section of the style guide to explain how to write such language in the future (internal issue 1579). * Move almost all Python scripts into the toplevel `scripts/` directory. Apply extensive internal edits to clean up and simplify the scripts, and try to follow PEP8 guidelines. Generalize the scripts with the use of a Conventions object controlling many aspects of output generation, to enable their use in other Khronos projects with similar requirements. Autogenerate extension interface refpages (these are experimental and may be retired going forward). New Extensions: * `VK_AMD_display_native_hdr` * `VK_EXT_full_screen_exclusive` (internal issue 1439) * `VK_EXT_host_query_reset` * `VK_EXT_pipeline_creation_feedback` (internal issue 1560) * `VK_KHR_surface_protected_capabilities` (internal issue 1520)
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')
|
|
|