Change log for April 7, 2019 Vulkan 1.1.106 spec update:

* Update release number to 106.

Public Issues:

  * Add searchbox and generate search index for the chunked HTML target.
    Note that doing this requires several new toolchain components to build
    the `chunked` target (public issue 578 / internal issue 1352).
  * Remove descriptions of flink:vkCreateSampler sampler constraints which
    were repeated in the valid usage statements (public pull request 648).
  * Fix sense of conditional around a valid usage statement in the
    <<copies>> chapter (public issue 942).

Internal Issues:

  * Add missing pname:extent.width and pname:extent.height valid usage
    statements for flink:vkCmdClearAttachments (internal issue 1583).
  * Fix some inconsistencies in structures and corresponding pname:sType
    enumerant names by renaming
    sname:VkPhysicalDeviceShaderDrawParameterFeatures ->
    slink:slink:VkPhysicalDeviceShaderDrawParametersFeatures;
    sname:VkPhysicalDeviceVariablePointerFeatures ->
    slink:VkPhysicalDeviceVariablePointerFeatures;
    sname:VkPhysicalDeviceVariablePointerFeaturesKHR ->
    slink:VkPhysicalDeviceVariablePointerFeaturesKHR;
    sname:VkPhysicalDeviceBufferAddressFeaturesEXT ->
    slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
    ->
    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES ->
    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR ->
    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR;
    and etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
    ->
    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT.
    The old names are still available as aliases for backwards
    compatibility. This change required introducing valid XML markup which
    externally written XML processing scripts may need to be modified to
    accomodate, to support multiple aliases of a single command or token
    name (internal issue 1592).
  * Add slink:VkDevice as the first parameter to flink:vkSetLocalDimmingAMD
    (internal issue 1618).
  * Improve CI header compilation tests to test all Vulkan platform
    includes, using fake platform headers where needed, and change the
    `allchecks` Makefile target to use the more comprehensive
    `check_spec_links.py` script instead of the retired `checkinc` and
    `checklinks` targets.
  * Move descriptions of the ASTC compressed texture decode mode from the
    <<appendix-compressedtex-astc,appendix>> to the recently updated
    external Khronos Data Format Specification.
  * Fix minor markup and spelling issues in the `VK_NV_ray_tracing`
    extension.
This commit is contained in:
Jon Leech 2019-04-07 20:17:23 -07:00
parent 84fcf6fb4e
commit b1042a3204
42 changed files with 4268 additions and 437 deletions

View File

@ -68,6 +68,8 @@ hpp-generate:
allow_failure: true
# Compile a simple test program that uses vulkan.h
# The fake platform headers in tests/ allow compiling with all Vulkan
# platforms at once.
h-compile:
stage: test
dependencies:
@ -75,26 +77,9 @@ h-compile:
before_script:
- apt-get update -qq
- apt-get install -y -qq gcc clang
- echo "#include <vulkan/vulkan.h>" > /tmp/htest.c
- echo "int main()" >> /tmp/htest.c
- echo "{" >> /tmp/htest.c
- echo " const VkInstanceCreateInfo instance_info = {" >> /tmp/htest.c
- echo " .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO," >> /tmp/htest.c
- echo " .pNext = NULL," >> /tmp/htest.c
- echo " .flags = 0," >> /tmp/htest.c
- echo " .pApplicationInfo = NULL," >> /tmp/htest.c
- echo " .enabledLayerCount = 0," >> /tmp/htest.c
- echo " .ppEnabledLayerNames = NULL," >> /tmp/htest.c
- echo " .enabledExtensionCount = 0," >> /tmp/htest.c
- echo " .ppEnabledExtensionNames = NULL," >> /tmp/htest.c
- echo " };" >> /tmp/htest.c
- echo " VkInstance instance;" >> /tmp/htest.c
- echo " vkCreateInstance(&instance_info, NULL, &instance);" >> /tmp/htest.c
- echo " vkDestroyInstance(instance, NULL);" >>/tmp/htest.c
- echo "}" >> /tmp/htest.c
script:
- gcc -c -std=c11 -Iinclude -Wall -Wextra -Werror /tmp/htest.c
- clang -c -std=c11 -Iinclude -Wall -Wextra -Werror /tmp/htest.c
- gcc -c -std=c11 -Iinclude -Itests -Wall -Wextra -Werror tests/htest.c
- clang -c -std=c11 -Iinclude -Itests -Wall -Wextra -Werror tests/htest.c
# Compile a simple test program that uses vulkan.hpp
hpp-compile:
@ -105,14 +90,7 @@ hpp-compile:
before_script:
- apt-get update -qq
- apt-get install -y -qq g++ clang
- echo "#include <vulkan/vulkan.hpp>" > /tmp/hpptest.cpp
- echo "int main()" >> /tmp/hpptest.cpp
- echo "{" >> /tmp/hpptest.cpp
- echo " auto const instance_info = vk::InstanceCreateInfo();" >> /tmp/hpptest.cpp
- echo " vk::Instance instance;" >> /tmp/hpptest.cpp
- echo " vk::createInstance(&instance_info, nullptr, &instance);" >> /tmp/hpptest.cpp
- echo "}" >> /tmp/hpptest.cpp
script:
- g++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror /tmp/hpptest.cpp
- clang++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror /tmp/hpptest.cpp
- g++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror tests/hpptest.cpp
- clang++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror tests/hpptest.cpp
allow_failure: true

View File

@ -34,7 +34,7 @@ which builds an HTML5 specification output.
$ make all
builds the spec targets `html`, `pdf`, `styleguide`, `registry`, `manhtml`,
`manpdf`, `manhtmlpages`, `checkinc`, and `checklinks`.
`manpdf`, `manhtmlpages`, and `allchecks`
[NOTE]
.Note
@ -71,11 +71,8 @@ XML Registry schema document::
* `manpdf` -- Single-file PDF in `$(OUTDIR)/apispec.pdf`
* `manhtmlpages` -- File-per-entry-point HTML in `$(OUTDIR)/man/html/*`
<<validation-scripts,Validator output>>::
* `checkinc` -- List of commands, structs, etc.
missing from the API spec in `$(OUTDIR)/checks/notInSpec.txt`
* `checklinks` -- Validator script output for API spec in
`$(OUTDIR)/checks/specErrs.txt` and for reference pages in
`$(OUTDIR)/checks/manErrs.txt`
* None at present. The `allchecks` target writes to standard output unless
the underlying script is given additional options.
Valid usage database::
* `validusage` - json database of all valid usage statements in the
specification. Must be built with `./makeAllExts` (for now).
@ -209,38 +206,14 @@ builds.
[[validation-scripts]]
=== Validation Scripts
[NOTE]
.Note
====
The validation scripts have not been kept up to date, and probably don't
work properly at present due to numerous changes in the macro and
conditional markup used in the specification sources.
====
There are several Makefile targets which look for inconsistencies and
missing material between the specification and ref pages, and the canonical
description of the API in `vk.xml` :
* `checkinc`
* `checklinks`
* `allchecks` - both `checkinc` and `checklinks`
They are necessarily heuristic since they're dealing with lots of
hand-written material.
The `checkinc` target uses Unix filters to determine which autogenerated API
include files are used (and not used) in the spec.
It generates `notInSpec.txt` report.
This contains a list of the include files which are *not* referenced
anywhere in the spec, and probably correspond to undocumented material in
the spec.
The `checklinks` target validates the various internal tagged links in the
man pages and spec (e.g. the `fname:vkFuncBlah`, `sname:VkStructBlah`, etc.)
against the canonical description of the API in `vk.xml`.
It generates two output files, `manErrs.txt` and `specErrs.txt`, which
report problematic tags and the filenames/lines on which those tags were
found.
The `allchecks` Makefile target runs a Python script that looks for markup
errors, missing interfaces, macro misuse, and inconsistencies in the
specification text.
This script is necessarily heuristic, since it's dealing with lots of
hand-written material, but it identifies many problems and can suggest
solutions.
This script is also run as part of the CI tests in the internal Khronos
gitlab repository.
[[macros]]
@ -415,6 +388,7 @@ Fences are used with the +++<<vkQueueSubmit>>+++ command...
// editing-note: why would I though. There are xlink: macros for that.
[[depends]]
== Software Dependencies
@ -440,6 +414,24 @@ work at least as well.
This is for the PDF build, and it can still progress without it.
Ghostscript is used to optimize the size of the PDF, so it will be order
of magnitude smaller if it is included.
* The following dependencies are required only if building the
`chunked` target (chunked HTML output).
** Node (`nodejs`, version: 8.11.1)
*** Node Package Manager (`npm`, version: 5.8.0), for installing Lunr
** Lunr (`lunr`, version: 2.3.6), installed with npm.
One of the lunr files, `lunr.js`, is also incorporated into this
repository under `config/chunkindex/lunr.js`, so it will always be
available at spec load time. It is possible that there will be
incompatibilities between the installed version of lunr used to build
the index, and the copy of `lunr.js` included with the repository. If
so, update the repository copy of the file from your lunr distribution,
or install the specific lunr version 2.3.6 corresponding to the
repository copy.
*** Ensure that the installed `lunr` package is found by `node` at
runtime. This may require setting the environment variable NODE_PATH
to the path where `lunr` is installed. This path will probably be
`/usr/lib/node_modules`, if you install `nodejs` and `npm` from
deb.nodesource.com .
The following Ruby Gems and platform package dependencies must also be
installed.
@ -752,7 +744,7 @@ gem clean
[[depends-chunker]]
=== Asciidoctor-chunker
=== Asciidoctor-chunker and Index Generation
To generate the `chunked` HTML target, you must install
https://github.com/wshito/asciidoctor-chunker[`asciidoctor-chunker`] and
@ -767,6 +759,18 @@ Note that both Roswell and asciidoctor-chunker are installed outside the
scope of the Vulkan Specification repository (in system directories, and
in your home directory, respectively).
You must also install these Javascript dependencies to generate the
index, partly as system packages, and partly with npm. Note that npm is not
packaged for Debian 9, thus it's installed from deb.nodesource.com following
https://linuxize.com/post/how-to-install-node-js-on-debian-9/
----
curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
# nodejs also installs npm
sudo apt install nodejs
sudo npm install -g lunr@2.3.6
setenv NODE_PATH /usr/lib/node_modules
----
[[troubleshooting]]
== Troubleshooting

View File

@ -8,6 +8,64 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for April 7, 2019 Vulkan 1.1.106 spec update:
* Update release number to 106.
Public Issues:
* Add searchbox and generate search index for the chunked HTML target.
Note that doing this requires several new toolchain components to build
the `chunked` target (public issue 578 / internal issue 1352).
* Remove descriptions of flink:vkCreateSampler sampler constraints which
were repeated in the valid usage statements (public pull request 648).
* Fix sense of conditional around a valid usage statement in the
<<copies>> chapter (public issue 942).
Internal Issues:
* Add missing pname:extent.width and pname:extent.height valid usage
statements for flink:vkCmdClearAttachments (internal issue 1583).
* Fix some inconsistencies in structures and corresponding pname:sType
enumerant names by renaming
sname:VkPhysicalDeviceShaderDrawParameterFeatures ->
slink:slink:VkPhysicalDeviceShaderDrawParametersFeatures;
sname:VkPhysicalDeviceVariablePointerFeatures ->
slink:VkPhysicalDeviceVariablePointerFeatures;
sname:VkPhysicalDeviceVariablePointerFeaturesKHR ->
slink:VkPhysicalDeviceVariablePointerFeaturesKHR;
sname:VkPhysicalDeviceBufferAddressFeaturesEXT ->
slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
->
ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES ->
ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR ->
ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR;
and etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
->
ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT.
The old names are still available as aliases for backwards
compatibility. This change required introducing valid XML markup which
externally written XML processing scripts may need to be modified to
accomodate, to support multiple aliases of a single command or token
name (internal issue 1592).
* Add slink:VkDevice as the first parameter to flink:vkSetLocalDimmingAMD
(internal issue 1618).
* Improve CI header compilation tests to test all Vulkan platform
includes, using fake platform headers where needed, and change the
`allchecks` Makefile target to use the more comprehensive
`check_spec_links.py` script instead of the retired `checkinc` and
`checklinks` targets.
* Move descriptions of the ASTC compressed texture decode mode from the
<<appendix-compressedtex-astc,appendix>> to the recently updated
external Khronos Data Format Specification.
* Fix minor markup and spelling issues in the `VK_NV_ray_tracing`
extension.
-----------------------------------------------------
Change log for March 19, 2019 Vulkan 1.1.105 spec update (GDC edition):
* Update release number to 105.

View File

@ -59,8 +59,7 @@ IMAGEOPTS = inline
# manhtml - HTML5 single-page reference guide
# manpdf - PDF reference guide
# manhtmlpages - HTML5 separate per-feature reference pages
# checkinc - validator script for asciidoc include files
# checklinks - validator script for asciidoc xrefs
# allchecks - Python sanity checker for script markup and macro use
all: alldocs allchecks
@ -70,7 +69,8 @@ allspecs: html pdf styleguide registry
allman: manhtml manpdf manhtmlpages
allchecks: checkinc checklinks
allchecks:
$(PYTHON) $(SCRIPTS)/check_spec_links.py -Werror
# Note that the := assignments below are immediate, not deferred, and
# are therefore order-dependent in the Makefile
@ -78,6 +78,9 @@ allchecks: checkinc checklinks
QUIET ?= @
PYTHON ?= python3
ASCIIDOC ?= asciidoctor
RUBY = ruby
NODEJS = node
PATCH = patch
RM = rm -f
RMRF = rm -rf
MKDIR = mkdir -p
@ -118,7 +121,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 105
PATCHVERSION = 106
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else
@ -203,10 +206,22 @@ $(OUTDIR)/$(KATEXDIR)/README.md: katex/README.md
ROSWELL = ros
ROSWELLOPTS ?= dynamic-space-size=4000
CHUNKER = $(HOME)/common-lisp/asciidoctor-chunker/roswell/asciidoctor-chunker.ros
CHUNKINDEX = $(CURDIR)/config/chunkindex
# Only the $(ROSWELL) step is required unless the search index is to be
# generated and incorporated into the chunked spec.
#
# Dropped $(QUIET) for now
# Should set NODE_PATH=/usr/local/lib/node_modules or wherever, outside Makefile
# Copying chunked.js into target avoids a warning from the chunker
chunked: $(HTMLDIR)/vkspec.html $(SPECSRC) $(COMMONDOCS)
$(QUIET)$(PATCH) $(HTMLDIR)/vkspec.html -o $(HTMLDIR)/prechunked.html $(CHUNKINDEX)/custom.patch
$(QUIET)$(CP) $(CHUNKINDEX)/chunked.css $(CHUNKINDEX)/chunked.js \
$(CHUNKINDEX)/lunr.js $(HTMLDIR)
$(QUIET)$(ROSWELL) $(ROSWELLOPTS) $(CHUNKER) \
$(HTMLDIR)/vkspec.html -o $(HTMLDIR)
$(HTMLDIR)/prechunked.html -o $(HTMLDIR)
$(QUIET)$(RM) prechunked.html
$(QUIET)$(RUBY) $(CHUNKINDEX)/generate-index.rb $(HTMLDIR)/chap*html | \
$(NODEJS) $(CHUNKINDEX)/build-index.js > $(HTMLDIR)/search.index.js
html: $(HTMLDIR)/vkspec.html $(SPECSRC) $(COMMONDOCS)
@ -292,11 +307,12 @@ clean_man:
clean_checks:
$(QUIET)$(RMRF) $(CHECKDIR)
MANTRASH = $(filter-out $(MANDIR)/copyright-ccby.txt $(MANDIR)/footer.txt,$(wildcard $(MANDIR)/*.txt)) $(LOGFILE)
clean_generated:
$(QUIET)$(RMRF) api/* hostsynctable/* validity/* $(METADIR)/*
$(QUIET)$(RMRF) include/vulkan/vulkan_*.h $(SCRIPTS)/vkapi.py
$(QUIET)$(RM) config/extDependency.*
$(QUIET)$(RM) man/apispec.txt $(LOGFILE) man/[Vv][Kk]*.txt man/PFN*.txt
$(QUIET)$(RM) $(MANTRASH)
$(QUIET)$(RMRF) $(PDFMATHDIR)
clean_validusage:

View File

@ -47,9 +47,8 @@ ChangeLog.txt Change log summary for each public spec update
Makefile, make* Makefile and helper build scripts (see BUILD.adoc)
appendices/ Specification appendices
chapters/ Specification chapters
config/ Asciidoctor configuration
config/ Asciidoctor configuration, CSS, and index generator
images/ Images (figures, diagrams, icons)
include/vulkan/ Vulkan headers, generated from the Registry
man/ Reference (man) pages for the API; mostly extracted from the spec source
out/ Default directory for the generated documents
scripts/ Helper scripts used in specification, header, and reference page generation
@ -74,10 +73,9 @@ See link:xml/README.adoc[xml/README.adoc].
The header files (`include/vulkan/vulkan*.h`) and many parts of the
specification and reference page documents are generated from descriptions
in the XML API Registry (`xml/vk.xml`).
The generated files (with the exception of header files) are not checked
into the repository.
If you change `vk.xml`, you can regenerate the header by going into `xml/`
and running:
The generated files are not checked into the repository.
If you change `vk.xml`, you can regenerate the headers by going into
`xml/` and running:
$ make clean install

View File

@ -29,7 +29,7 @@ None
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
** ename:VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT
** ename:VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT
@ -48,7 +48,7 @@ None
=== New Structures
* slink:VkPhysicalDeviceBufferAddressFeaturesEXT
* slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
* slink:VkBufferDeviceAddressInfoEXT
* slink:VkBufferDeviceAddressCreateInfoEXT

View File

@ -33,6 +33,7 @@ ifdef::VK_VERSION_1_1[]
* Extending elink:VkDescriptorUpdateTemplateType
** ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
endif::VK_VERSION_1_1[]
=== New Enums
None.

View File

@ -42,7 +42,7 @@ The second, code:VariablePointers, is optional.
=== New Structures
* slink:VkPhysicalDeviceVariablePointerFeaturesKHR
* slink:VkPhysicalDeviceVariablePointersFeaturesKHR
=== New SPIR-V Capabilities

View File

@ -122,10 +122,8 @@ ifdef::VK_EXT_astc_decode_mode[]
=== ASTC decode mode
If the `VK_EXT_astc_decode_mode` extension is enabled the ASTC decoding
described in the <<data-format,Khronos Data Format Specification>> is
modified by replacing or modifying the corresponding sections as described
below.
If the `VK_EXT_astc_decode_mode` extension is enabled, the decode mode is
determined as follows:
.Mapping of Vulkan ASTC decoding format to ASTC decoding modes
[width="75%",options="header",cols="75%,25%"]
@ -136,243 +134,8 @@ below.
| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ^| decode_rgb9e5
|====
==== LDR and HDR Modes
[NOTE]
.Note
====
This replaces section 16.5 in the <<data-format,Khronos Data Format
Specification>>.
====
The decoding process for LDR content can be simplified if it is known in
advance that sRGB output is required.
This selection is therefore included as part of the global configuration.
The two modes differ in various ways, as shown in
<<appendix-compressedtex-astc-differences-between-ldr-and-hdr-modes, ASTC
differences between LDR and HDR modes>>.
[[appendix-compressedtex-astc-differences-between-ldr-and-hdr-modes]]
.ASTC differences between LDR and HDR modes
[width="75%",options="header"]
|====
| Operation | LDR Mode | HDR Mode
| Returned Value | Determined by decoding mode | Determined by decoding mode
| sRGB compatible | Yes | No
| LDR endpoint decoding precision | 16 bits, or 8 bits for sRGB | 16 bits
| HDR endpoint mode results | Error color | As decoded
| Error results | Error color | Vector of NaNs (0xFFFF)
|====
The type of the values returned by the decoding process is determined by the
decoding mode as shown in <<appendix-compressedtex-astc-decoding-modes, ASTC
decoding modes>>.
[[appendix-compressedtex-astc-decoding-modes]]
.ASTC decoding modes
[width="75%",options="header"]
|====
| Decode mode | LDR Mode | HDR Mode
| decode_float16 | Vector of FP16 values | Vector of FP16 values
| decode_unorm8 | Vector of 8-bit unsigned normalized values | invalid
| decode_rgb9e5 | Vector using a shared exponent format | Vector using a shared exponent format
|====
Using the decode_unorm8 decoding mode in HDR mode gives undefined results.
For sRGB, the decoding mode is ignored, and the decoding always returns a
vector of 8-bit unsigned normalized values.
The error color is opaque fully-saturated magenta [eq]#[(R,G,B,A) =
(0xFF,0x00,0xFF,0xFF)#.
This has been chosen as it is much more noticeable than black or white, and
occurs far less often in valid images.
For linear RGB decode, the error color may: be either opaque fully-saturated
magenta [eq]#(R,G,B,A) = (1.0,0.0,1.0,1.0)# or a vector of four NaNs
[eq]#(R,G,B,A) = (NaN,NaN,NaN,NaN)#.
In the latter case, the recommended [eq]#NaN# value returned is
[eq]#0xFFFF#.
When using the decode_rgb9e5 decoding mode in HDR mode, error results will
return the error color because NaN cannot be represented.
The error color is returned as an informative response to invalid
conditions, including invalid block encodings or use of reserved endpoint
modes.
Future, forward-compatible extensions to ASTC may define valid
interpretations of these conditions, which will decode to some other color.
Therefore, encoders and applications must not rely on invalid encodings as a
way of generating the error color.
[[appendix-compressedtex-astc-weight-application]]
[NOTE]
.Note
====
This replaces section 16.19 in the <<data-format,Khronos Data Format
Specification>>.
====
Once the effective weight _i_ for the texel has been calculated, the color
endpoints are interpolated and expanded.
For LDR endpoint modes, each color component C is calculated from the
corresponding 8-bit endpoint components C~0~ and C~1~ as follows:
If sRGB conversion is not enabled, or for the alpha channel in any case,
C~0~ and C~1~ are first expanded to 16 bits by bit replication:
-----
C0 = (C0 << 8) | C0; C1 = (C1 << 8) | C1;
-----
If sRGB conversion is enabled, C~0~ and C~1~ for the R, G, and B channels
are expanded to 16 bits differently, as follows:
-----
C0 = (C0 << 8) | 0x80; C1 = (C1 << 8) | 0x80;
-----
C~0~ and C~1~ are then interpolated to produce a UNORM16 result C:
-----
C = floor( (C0*(64-i) + C1*i + 32)/64 )
-----
If sRGB conversion is not enabled and the decoding mode is decode_float16,
then if C = 65535 the final result is 1.0 (0x3C00); otherwise C is divided
by 65536 and the infinite-precision result of the division is converted to
FP16 with round-to-zero semantics.
If sRGB conversion is not enabled and the decoding mode is decode_unorm8,
then top 8 bits of the interpolation result for the R, G, B, and A channels
are used as the final result.
If sRGB conversion is not enabled and the decoding mode is decode_rgb9e5,
then the final result is a combination of the (UNORM16) values of C for the
three color components (Cr, Cg, and Cb) computed as follows:
-----
int lz = clz17( Cr | Cg | Cb | 1);
if (Cr == 65535 ) { Cr = 65536; lz = 0; }
if (Cg == 65535 ) { Cg = 65536; lz = 0; }
if (Cb == 65535 ) { Cb = 65536; lz = 0; }
Cr <<= lz;
Cg <<= lz;
Cb <<= lz;
Cr = (Cr >> 8) & 0x1FF;
Cg = (Cg >> 8) & 0x1FF;
Cb = (Cb >> 8) & 0x1FF;
uint32_t exponent = 16 - lz;
uint32_t texel = (exponent << 27) | (Cb << 18) | (Cg << 9) | Cr;
-----
The clz17() function counts leading zeros in a 17-bit value.
If sRGB conversion is enabled, then the decoding mode is ignored, and the
top 8 bits of the interpolation result for the R, G and B channels are
passed to the external sRGB conversion block and used as the final result.
The A channle uses the decode_float16 decoding mode.
For HDR endpoint modes, color values are represented in a 12-bit
pseudo-logarithmic representation, and interpolation occurs in a
piecewise-approximate logarithmic manner as follows:
In LDR mode, the error result is returned.
In HDR mode, the color components from each endpoint, C~0~ and C~1~, are
initially shifted left 4 bits to become 16-bit integer values and these are
interpolated in the same way as LDR.
The 16-bit value C is then decomposed into the top five bits, E, and the
bottom 11 bits M, which are then processed and recombined with E to form the
final value C~f~:
-----
C = floor( (C0*(64-i) + C1*i + 32)/64 )
E = (C & 0xF800) >> 11; M = C & 0x7FF;
if (M < 512) { Mt = 3*M; }
else if (M >= 1536) { Mt = 5*M - 2048; }
else { Mt = 4*M - 512; }
Cf = (E<<10) + (Mt>>3)
-----
This interpolation is a considerably closer approximation to a logarithmic
space than simple 16-bit interpolation.
This final value C~f~ is interpreted as an IEEE FP16 value.
If the result is +Inf or NaN, it is converted to the bit pattern 0x7BFF,
which is the largest representable finite value.
If the decoding mode is decode_rgb9e5, then the final result is a
combination of the (IEEE FP16) values of Cf for the three color components
(Cr, Cg, and Cb) computed as follows:
-----
if( Cr > 0x7c00 ) Cr = 0; else if( Cr == 0x7c00 ) Cr = 0x7bff;
if( Cg > 0x7c00 ) Cg = 0; else if( Cg == 0x7c00 ) Cg = 0x7bff;
if( Cb > 0x7c00 ) Cb = 0; else if( Cb == 0x7c00 ) Cb = 0x7bff;
int Re = (Cr >> 10) & 0x1F;
int Ge = (Cg >> 10) & 0x1F;
int Be = (Cb >> 10) & 0x1F;
int Rex = Re == 0 ? 1 : Re;
int Gex = Ge == 0 ? 1 : Ge;
int Bex = Be == 0 ? 1 : Be;
int Xm = ((Cr | Cg | Cb) & 0x200) >> 9;
int Xe = Re | Ge | Be;
uint32_t rshift, gshift, bshift, expo;
if (Xe == 0)
{
expo = rshift = gshift = bshift = Xm;
}
else if (Re >= Ge && Re >= Be)
{
expo = Rex + 1;
rshift = 2;
gshift = Rex - Gex + 2;
bshift = Rex - Bex + 2;
}
else if (Ge >= Be)
{
expo = Gex + 1;
rshift = Gex - Rex + 2;
gshift = 2;
bshift = Gex - Bex + 2;
}
else
{
expo = Bex + 1;
rshift = Bex - Rex + 2;
gshift = Bex - Gex + 2;
bshift = 2;
}
int Rm = (Cr & 0x3FF) | (Re == 0 ? 0 : 0x400);
int Gm = (Cg & 0x3FF) | (Ge == 0 ? 0 : 0x400);
int Bm = (Cb & 0x3FF) | (Be == 0 ? 0 : 0x400);
Rm = (Rm >> rshift) & 0x1FF;
Gm = (Gm >> gshift) & 0x1FF;
Bm = (Bm >> bshift) & 0x1FF;
uint32_t texel = (expo << 27) | (Bm << 18) | (Gm << 9) | (Rm << 0);
-----
=== Void-Extent Blocks
[NOTE]
.Note
====
This modifies section 16.23 in the <<data-format,Khronos Data Format
Specification>>.
====
In the HDR case, if the decoding mode is decode_rgb9e5, then any negative
color component values are set to 0 before conversion to the shared exponent
format (as described in <<appendix-compressedtex-astc-weight-application,
Weight Application>>).
Otherwise, the ASTC decode mode is decode_float16.
endif::VK_EXT_astc_decode_mode[]
ifndef::VK_EXT_astc_decode_mode[]
The ASTC decode mode is decode_float16.
endif::VK_EXT_astc_decode_mode[]

View File

@ -174,7 +174,7 @@ command to <<vkEnumerateInstanceVersion, enumerate the instance version>>.
** ename:VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
** ename:VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES
@ -202,7 +202,7 @@ command to <<vkEnumerateInstanceVersion, enumerate the instance version>>.
** ename:VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
=== New Enums
@ -295,10 +295,10 @@ command to <<vkEnumerateInstanceVersion, enumerate the instance version>>.
* slink:VkPhysicalDeviceProtectedMemoryFeatures
* slink:VkPhysicalDeviceProtectedMemoryProperties
* slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures
* slink:VkPhysicalDeviceShaderDrawParameterFeatures
* slink:VkPhysicalDeviceShaderDrawParametersFeatures
* slink:VkPhysicalDeviceSparseImageFormatInfo2
* slink:VkPhysicalDeviceSubgroupProperties
* slink:VkPhysicalDeviceVariablePointerFeatures
* slink:VkPhysicalDeviceVariablePointersFeatures
* slink:VkPipelineTessellationDomainOriginStateCreateInfo
* slink:VkProtectedSubmitInfo
* slink:VkQueueFamilyProperties2

View File

@ -519,6 +519,7 @@ swapchain by calling:
include::../../api/protos/vkSetLocalDimmingAMD.txt[]
* pname:device is the device associated with pname:swapChain.
* pname:swapChain handle to enable local dimming.
* pname:localDimmingEnable specifies whether local dimming is enabled for
the swapchain.

View File

@ -1,14 +1,5 @@
// This section is included inside the Resource Descriptors chapter (descriptorsets.txt)
[[descriptorsets-accelerationstructure]]
=== Acceleration Structure
An _acceleration structure_
(ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV) is a descriptor type
that is used to retrieve scene geometry from within shaders bound to ray
tracing pipelines.
Shaders have read-only access to the memory.
[open,refpage='VkWriteDescriptorSetAccelerationStructureNV',desc='Structure specifying acceleration to query for memory requirements',type='structs']
--
The sname:VkWriteDescriptorSetAccelerationStructureNV structure is defined

View File

@ -232,7 +232,8 @@ include::../../api/protos/vkGetRayTracingShaderGroupHandlesNV.txt[]
* pname:pipeline is the ray tracing pipeline object that contains the
shaders.
* pname:firstGroup is the index of the first group to retrieve a handle
for from the sname:VkPipelineShaderStageCreateInfo::pname:pGroups array.
for from the slink:VkRayTracingShaderGroupCreateInfoNV::pname:pGroups
array.
* pname:groupCount is the number of shader handles to retrieve.
* pname:dataSize is the size in bytes of the buffer pointed to by
pname:pData.

View File

@ -557,7 +557,7 @@ include::../../api/protos/vkCmdBuildAccelerationStructureNV.txt[]
* [[VUID-vkCmdBuildAccelerationStructureNV-dst-02488]]
pname:dst must: have been created with compatible
slink:VkAccelerationStructureInfoNV where
slink:VkAccelerationStructureInfoNV:::pname:type and
slink:VkAccelerationStructureInfoNV::pname:type and
slink:VkAccelerationStructureInfoNV::pname:flags are identical,
slink:VkAccelerationStructureInfoNV::pname:instanceCount and
slink:VkAccelerationStructureInfoNV::pname:geometryCount for pname:dst

View File

@ -304,6 +304,12 @@ ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT stages.
contains ename:VK_IMAGE_ASPECT_STENCIL_BIT, then the current subpass'
depth/stencil attachment must: either be ename:VK_ATTACHMENT_UNUSED, or
must: have a stencil component
* [[VUID-vkCmdClearAttachments-rect-02682]]
The pname:rect member of each element of pname:pRects must: have an
pname:extent.width greater than `0`
* [[VUID-vkCmdClearAttachments-rect-02683]]
The pname:rect member of each element of pname:pRects must: have an
pname:extent.height greater than `0`
* [[VUID-vkCmdClearAttachments-pRects-00016]]
The rectangular region specified by each element of pname:pRects must:
be contained within the render area of the current render pass instance

View File

@ -54,7 +54,7 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage bit enabled and destination
buffers must: have been created with the
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage bit enabled.
ifdef::VK_EXT_separate_stencil_usage[]
ifndef::VK_EXT_separate_stencil_usage[]
* Source images must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
slink:VkImageCreateInfo::pname:usage

View File

@ -338,6 +338,15 @@ ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
shader.
[[descriptorsets-accelerationstructure]]
=== Acceleration Structure
An _acceleration structure_
(ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV) is a descriptor type
that is used to retrieve scene geometry from within shaders bound to ray
tracing pipelines.
Shaders have read-only access to the memory.
[[descriptorsets-sets]]
== Descriptor Sets

View File

@ -758,19 +758,19 @@ include::../validity/structs/VkPhysicalDeviceFeatures.txt[]
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
[open,refpage='VkPhysicalDeviceVariablePointerFeatures',desc='Structure describing variable pointers features that can be supported by an implementation',type='structs']
[open,refpage='VkPhysicalDeviceVariablePointersFeatures',desc='Structure describing variable pointers features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceVariablePointerFeatures structure is defined as:
The sname:VkPhysicalDeviceVariablePointersFeatures structure is defined as:
include::../api/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
include::../api/structs/VkPhysicalDeviceVariablePointersFeatures.txt[]
ifdef::VK_KHR_variable_pointers[]
or the equivalent
include::../api/structs/VkPhysicalDeviceVariablePointerFeaturesKHR.txt[]
include::../api/structs/VkPhysicalDeviceVariablePointersFeaturesKHR.txt[]
endif::VK_KHR_variable_pointers[]
The members of the sname:VkPhysicalDeviceVariablePointerFeatures structure
The members of the sname:VkPhysicalDeviceVariablePointersFeatures structure
describe the following features:
* [[features-variablePointersStorageBuffer]]
@ -784,20 +784,20 @@ describe the following features:
When this feature is not enabled, shader modules must: not declare the
`VariablePointers` capability.
If the sname:VkPhysicalDeviceVariablePointerFeatures structure is included
If the sname:VkPhysicalDeviceVariablePointersFeatures structure is included
in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is filled
with values indicating whether each feature is supported.
sname:VkPhysicalDeviceVariablePointerFeatures can: also be used in the
sname:VkPhysicalDeviceVariablePointersFeatures can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable the features.
.Valid Usage
****
* [[VUID-VkPhysicalDeviceVariablePointerFeatures-variablePointers-01431]]
* [[VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431]]
If pname:variablePointers is enabled then
pname:variablePointersStorageBuffer must: also be enabled.
****
include::../validity/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
include::../validity/structs/VkPhysicalDeviceVariablePointersFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
@ -1146,21 +1146,21 @@ include::../validity/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt
endif::VK_EXT_conditional_rendering[]
ifdef::VK_VERSION_1_1[]
[open,refpage='VkPhysicalDeviceShaderDrawParameterFeatures',desc='Structure describing shader draw parameter features that can be supported by an implementation',type='structs']
[open,refpage='VkPhysicalDeviceShaderDrawParametersFeatures',desc='Structure describing shader draw parameter features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShaderDrawParameterFeatures structure is defined
The sname:VkPhysicalDeviceShaderDrawParametersFeatures structure is defined
as:
include::../api/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
include::../api/structs/VkPhysicalDeviceShaderDrawParametersFeatures.txt[]
* [[features-shaderDrawParameters]] pname:shaderDrawParameters specifies
whether shader draw parameters are supported.
If the sname:VkPhysicalDeviceShaderDrawParameterFeatures structure is
If the sname:VkPhysicalDeviceShaderDrawParametersFeatures structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is
filled with a value indicating whether the feature is supported.
include::../validity/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
include::../validity/structs/VkPhysicalDeviceShaderDrawParametersFeatures.txt[]
--
endif::VK_VERSION_1_1[]
@ -1888,14 +1888,15 @@ endif::VK_EXT_memory_priority[]
ifdef::VK_EXT_buffer_device_address[]
[open,refpage='VkPhysicalDeviceBufferAddressFeaturesEXT',desc='Structure describing buffer address features that can be supported by an implementation',type='structs']
[open,refpage='VkPhysicalDeviceBufferDeviceAddressFeaturesEXT',desc='Structure describing buffer address features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceBufferAddressFeaturesEXT structure is defined as:
The sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.txt[]
include::../api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceBufferAddressFeaturesEXT structure
describe the following features:
The members of the sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
structure describe the following features:
* [[features-bufferDeviceAddress]] pname:bufferDeviceAddress indicates
that the implementation supports accessing buffer memory in shaders as
@ -1922,13 +1923,13 @@ support shared GPU virtual addresses for multi-device configurations.
See flink:vkGetBufferDeviceAddressEXT for more information.
If the sname:VkPhysicalDeviceBufferAddressFeaturesEXT structure is included
in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it is filled
with values indicating whether the feature is supported.
sname:VkPhysicalDeviceBufferAddressFeaturesEXT can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
If the sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether the feature is supported.
sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT can: also be used in
the pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.txt[]
include::../validity/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.txt[]
--
endif::VK_EXT_buffer_device_address[]

View File

@ -127,7 +127,7 @@ http://dx.doi.org/10.1109/IEEESTD.2008.4610935, August, 2008.
[[data-format]] A. Garrard, _Khronos Data Format Specification, version
1.2_,
https://www.khronos.org/registry/DataFormat/specs/1.2/dataformat.1.2.html,
September, 2017.
March, 2019.
// If the author name is placed on a standalone line, we see the mysterious
// asciidoc error 'list item index: expected 2 got 10'. Apparently the 'A.'

View File

@ -11,14 +11,14 @@ Some Vulkan commands specify geometric objects to be drawn or computational
work to be performed, while others specify state controlling how objects are
handled by the various pipeline stages, or control data transfer between
memory organized as images and buffers.
ifndef::VK_NV_raytracing[]
ifndef::VK_NV_ray_tracing[]
Commands are effectively sent through a processing pipeline, either a
_graphics pipeline_ or a _compute pipeline_.
endif::VK_NV_raytracing[]
ifdef::VK_NV_raytracing[]
endif::VK_NV_ray_tracing[]
ifdef::VK_NV_ray_tracing[]
Commands are effectively sent through a processing pipeline, either a
_graphics pipeline_, a _compute pipeline_, or a _ray tracing pipeline_.
endif::VK_NV_raytracing[]
endif::VK_NV_ray_tracing[]
ifdef::VK_NV_mesh_shader[]
The graphics pipeline can be operated in two modes, as either _primitive
@ -117,14 +117,14 @@ another.
[open,refpage='VkPipeline',desc='Opaque handle to a pipeline object',type='handles']
--
ifndef::VK_NV_raytracing[]
ifndef::VK_NV_ray_tracing[]
Compute and graphics pipelines are each represented by sname:VkPipeline
handles:
endif::VK_NV_raytracing[]
ifdef::VK_NV_raytracing[]
endif::VK_NV_ray_tracing[]
ifdef::VK_NV_ray_tracing[]
Compute, graphics, and ray tracing pipelines are each represented by
sname:VkPipeline handles:
endif::VK_NV_raytracing[]
endif::VK_NV_ray_tracing[]
include::../api/handles/VkPipeline.txt[]

View File

@ -23,3 +23,8 @@ using Docbook for PDFs.
## Stylesheets
`khronos.css` is the stylesheet used for HTML output.
## Chunked Spec Index
`chunkindex` contains scripts for building and using a search index for the
Vulkan chunked HTML specification.

View File

@ -0,0 +1,32 @@
ifdef::env-github[]
:note-caption: :information_source:
endif::[]
= Index Building For Vulkan Chunked HTML Output
This directory contains scripts which help a search index, and add a
searchbox using this index into each page of the Vulkan chunked HTML
specification output. These files include:
[options="compact"]
* README.adoc - this file
* build-index.js - build a JSON search index from generate-index.rb output
* chunked.css - CSS for the searchbox
* chunked.js - Script to load and execute the searchbox
* custom.patch - Patch to generated HTML to include chunked.js / chunked.css
* generate-index.rb - generate an index of the HTML documents
* lunr.js - utility functions taken from the lunr package
= Credits and Licenses
The indexing tools and toolchain was created by Baldur Karlsson in
https://github.com/baldurk/vkdocs-chunked-builder
Files created in that project are under the Apache 2.0 license.
Portions of the chunked.js script are taken from
https://github.com/filamentgroup/loadJS/blob/master/loadJS.js
These portions are copyright Scott Jehl, Filament Group, Inc., under an MIT
license.
The lunr.js script is taken from the 'lunr' npm package, version 2.3.6. It
is copyright Oliver Nightingale, under an MIT license.

View File

@ -0,0 +1,43 @@
// Copyright (c) 2019 Baldur Karlsson
//
// 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
var lunr = require('lunr'),
stdin = process.stdin,
stdout = process.stdout,
buffer = []
stdin.resume()
stdin.setEncoding('utf8')
stdin.on('data', function (data) {
buffer.push(data)
})
stdin.on('end', function () {
var documents = JSON.parse(buffer.join(''))
var idx = lunr(function () {
this.ref('id')
this.field('title')
this.field('body')
documents.forEach(function (doc) {
this.add(doc)
}, this)
})
stdout.write("var searchindex = " + JSON.stringify(idx) + ";\n")
var searchlookup = {};
for(var i=0; i < documents.length; i++) {
searchlookup[documents[i].id] = documents[i].title;
}
stdout.write("var searchlookup = " + JSON.stringify(searchlookup) + ";\n")
})

View File

@ -0,0 +1,82 @@
// Copyright (c) 2019 Baldur Karlsson
//
// 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
a.headerlink { display: none; text-decoration: none; }
h2:hover a.headerlink { display: inline; }
h3:hover a.headerlink { display: inline; }
h4:hover a.headerlink { display: inline; }
h5:hover a.headerlink { display: inline; }
h6:hover a.headerlink { display: inline; }
div.searchbox {
background-color: white;
margin-top: 20px;
}
@media only screen and (min-width: 768px) {
div#toc {
padding-top: 6em !important;
}
div.searchbox {
display: block;
position: fixed;
left: 0px;
max-width: 13.5em;
padding-left: 20px;
padding-top: 20px;
margin-top: 0px;
top: 0px;
//border-bottom: 1px solid black;
//box-shadow: 0px 10px 20px -10px #444444;
z-index: 1000;
}
}
@media only screen and (min-width: 1280px) {
div.searchbox {
max-width: 18em;
}
div.searchbox input {
width: 17em;
}
}
div.searchbox div.results {
border: 1px solid black;
}
div.searchbox label {
display: block;
width: 160px;
}
div.searchbox input {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
ol#results li a {
text-overflow: ellipsis;
overflow: hidden;
display: block;
}
.link {
position: absolute;
z-index: 1000;
right: 4em;
margin-top: 0.5em;
display: none;
}
.listingblock:hover .link {
display: block;
}

View File

@ -0,0 +1,185 @@
/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://goo.gl/REQGQ by Paul Irish). Licensed MIT */
(function( w ){
var loadJS = function( src, cb, ordered ){
"use strict";
var tmp;
var ref = w.document.getElementsByTagName( "script" )[ 0 ];
var script = w.document.createElement( "script" );
if (typeof(cb) === 'boolean') {
tmp = ordered;
ordered = cb;
cb = tmp;
}
script.src = src;
script.async = !ordered;
ref.parentNode.insertBefore( script, ref );
if (cb && typeof(cb) === "function") {
script.onload = cb;
}
return script;
};
// commonjs
if( typeof module !== "undefined" ){
module.exports = loadJS;
}
else {
w.loadJS = loadJS;
}
}( typeof global !== "undefined" ? global : this ));
/*! end loadJS */
// Remaining portions of this file are
//
// Copyright (c) 2019 Baldur Karlsson
//
// 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
var searchengine = undefined;
// scroll to the first <a> linking to a chapter
function scrollChapter(element, chapter) {
for(var i=0; i < element.children.length; i++) {
if(element.children[i].nodeName == "A" && element.children[i].href.indexOf(chapter) >= 0) {
element.children[i].scrollIntoView(true);
return true;
}
if(scrollChapter(element.children[i], chapter))
return true;
}
return false;
}
var results = undefined;
var searchbox = undefined;
var searchTimeout = undefined;
function clearSearch() {
while(results.children.length > 0) {
results.removeChild(results.children[0]);
}
document.getElementById("resultsdiv").classList.remove("results");
}
function doSearch() {
clearSearch();
var searchtext = searchbox.value;
if(searchtext == '')
return;
if(searchtext.indexOf(' ') == -1 && searchtext.indexOf('\t') == -1 && searchtext.indexOf('"') == -1)
searchtext = searchtext + ' ' + searchtext + '*';
searchtext = searchtext.replace(/"/g, '')
var searchresults = searchengine.search(searchtext);
if(searchresults.length == 0) {
var r = document.createElement('LI');
r.innerHTML = 'No results';
results.appendChild(r);
}
document.getElementById("resultsdiv").classList.add("results");
for(var i=0; i < 10 && i < searchresults.length; i++) {
var a = document.createElement('A');
a.setAttribute('href', searchresults[i].ref);
a.innerHTML = searchlookup[searchresults[i].ref];
var r = document.createElement('LI');
r.appendChild(a);
results.appendChild(r);
}
}
function searchInput(e) {
if(searchTimeout !== undefined)
clearTimeout(searchTimeout);
searchTimeout = setTimeout(doSearch, 50);
}
function searchKeyDown(e) {
if(e.keyCode == 27) {
// escape
if(searchTimeout !== undefined)
clearTimeout(searchTimeout);
searchbox.value = '';
clearSearch();
} else if(e.keyCode == 10 || e.keyCode == 13) {
// enter/return
doSearch();
} else if(e.keyCode == 8) {
clearSearch();
searchInput(e);
}
}
document.addEventListener("DOMContentLoaded", function(event) {
// get the chapter name from the current URL
var chap = window.location.pathname.replace(/.*\//, '');
var toc = document.getElementById("toc");
// Scroll the sidebar to the appropriate chapter
if(chap != "") {
scrollChapter(toc, chap);
toc.scrollTop -= 96;
}
// add anchor links
["h2","h3","h4","h5","h6"].forEach(function(hX) {
var headers = document.getElementsByTagName(hX);
for(var i=0; i < headers.length; i++) {
var header = headers[i];
if(header.id.length > 0) {
header.innerHTML += ' <a class="headerlink" href="#' + header.id + '\">\u00B6</a>';
}
}
});
var blocks = document.getElementsByClassName("listingblock")
for(var i=0; i < blocks.length; i++) {
if(blocks[i].id.length > 0) {
var a = document.createElement("A");
a.innerHTML = '\u00B6';
a.setAttribute('class', 'link');
a.setAttribute('href', '#' + blocks[i].id);
blocks[i].insertBefore(a, blocks[i].childNodes[0]);
}
}
results = document.getElementById('results');
searchbox = document.getElementById('searchbox');
loadJS("lunr.js", function() {
loadJS(searchindexurl, function() {
searchengine = lunr.Index.load(searchindex);
searchbox.value = '';
searchbox.disabled = false;
searchbox.addEventListener('keydown', searchKeyDown, false);
searchbox.addEventListener('input', searchInput, false);
}, true);
}, true);
});

View File

@ -0,0 +1,22 @@
--- vkspec.html 2018-08-26 12:27:18.567949774 +0100
+++ vkspec.html 2018-08-26 13:19:36.665955764 +0100
@@ -818,4 +818,7 @@
</style>
<link rel="stylesheet" href="../katex/katex.min.css">
+<link href="chunked.css?4" rel="stylesheet">
+<script>var searchindexurl = 'search.index.js?4' + (document.title.replace(/[^0-9.]/g, ''));</script>
+<script src="chunked.js?4"></script>
<script src="../katex/katex.min.js"></script>
<script src="../katex/contrib/auto-render.min.js"></script>
@@ -848,4 +851,5 @@
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1"><li><a href="#preamble">0. Preamble</a></li></ul>
<ul class="sectlevel1">
<li><a href="#introduction">1. Introduction</a>
@@ -1233,4 +1237,5 @@
</ul>
</div>
+<div class="searchbox"><label for="searchbox">Search: </label><input id="searchbox" type="text" disabled="disabled" value="Loading Search Data" /><div id="resultsdiv"><ol id="results"></ol></div></div>
</div>
<div id="content">

View File

@ -0,0 +1,64 @@
#!/usr/bin/env ruby
#
# Copyright (c) 2019 Baldur Karlsson
#
# 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
require 'pp'
require 'json'
data = []
ARGV.each do |file|
curdata = nil
extappendix = false
curext = ""
File.readlines(file).each do |line|
text = line.gsub(/<\/?[^>]*>/, "")
# Special case - set up high quality results for given structs
if line =~ /div id="([vV][kK][^"]*)"/ then
id = $1
data << { :id => File.basename(file) + "#" + id, :title => id, :body => id }
end
if line =~ /h[0-9]\s*id="([^"]*)"/ then
id = $1
if curdata != nil then
data << curdata
end
if text =~ /Appendix.*Extensions/ then
extappendix = true
end
if extappendix and text =~ /^VK_.*/ then
curext = text
elsif curext != "" then
text = "#{curext.strip} - #{text}"
end
curdata = { :id => File.basename(file) + "#" + id, :title => text, :body => "" }
elsif curdata != nil then
curdata[:body] += " " + text
end
end
if curdata != nil then
data << curdata
end
end
puts JSON.generate(data)

3471
config/chunkindex/lunr.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 2682
startVUID = 2684

18
tests/README.adoc Normal file
View File

@ -0,0 +1,18 @@
ifdef::env-github[]
:note-caption: :information_source:
endif::[]
= Vulkan^(R)^ API Header Tests
This directory contains simple compilation tests used by the CI script
(../.gitlab-ci.yml) for the Vulkan C headers generated here, and the
Vulkan-Hpp C++ headers generated by that project:
[options="compact"]
* htest.c - test C headers, including all Vulkan platform headers
** ggp_c/, wayland-client.h, windows.h, X11/, xcb/, zircon/ - fake platform
headers used when compiling in an environment without the actual
platform headers.
* hpptest.cpp - test C++ headers
The 'make test' target in ../xml also builds the C header test.

10
tests/X11/Xlib.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef _X11_XLIB_H_
#define _X11_XLIB_H_
// "X11/Xlib.h" for non-X11 compilation environment
typedef int Display;
typedef int Window;
typedef int VisualID;
#endif

View File

@ -0,0 +1,8 @@
#ifndef _XRANDR_H_
#define _XRANDR_H_
// "X11/extensions/Xrandr.h" for non-X11 compilation environment
typedef int RROutput;
#endif

View File

@ -0,0 +1,4 @@
// "ggp_c/vulkan_types.h" for non-GGP compilation environment
typedef int GgpStreamDescriptor;
typedef int GgpFrameToken;

7
tests/hpptest.cpp Normal file
View File

@ -0,0 +1,7 @@
#include <vulkan/vulkan.hpp>
int main()
{
auto const instance_info = vk::InstanceCreateInfo();
vk::Instance instance;
vk::createInstance(&instance_info, nullptr, &instance);
}

64
tests/htest.c Normal file
View File

@ -0,0 +1,64 @@
//% gcc -c -Wall -I. -I../include htest.c
// Simple compilation test for Vulkan headers, including all platform
// headers.
// To allow compilation in environments without one or more platforms, fake
// headers for different platforms are supplied. They provide just the types
// Vulkan platforms require.
// When a new Vulkan platform is defined, the corresponding USE_PLATFORM
// header definition, and any supporting fake platform headers, should be
// defined here, along with a trivial compilation test using a Vulkan type
// or function specific to that platform.
// Enable each platform when vulkan.h is included
#define VK_USE_PLATFORM_ANDROID_KHR // No headers needed
#define VK_USE_PLATFORM_FUCHSIA // <zircon/types.h>
#define VK_USE_PLATFORM_GGP // <ggp_c/vulkan_types.h>
#define VK_USE_PLATFORM_IOS_MVK // No headers needed
#define VK_USE_PLATFORM_MACOS_MVK // No headers needed
#define VK_USE_PLATFORM_METAL_EXT // No headers needed
#define VK_USE_PLATFORM_VI_NN // No headers needed
#define VK_USE_PLATFORM_WAYLAND_KHR // <wayland-client.h>
#define VK_USE_PLATFORM_WIN32_KHR // <windows.h>
#define VK_USE_PLATFORM_XCB_KHR // <xcb/xcb.h>
#define VK_USE_PLATFORM_XLIB_KHR // <X11/Xlib.h>
#define VK_USE_PLATFORM_XLIB_XRANDR_EXT // <X11/extensions/Xrandr.h>
#include <vulkan/vulkan.h>
// Sanity check with a type or function from each platform header in turn
VkAndroidSurfaceCreateFlagsKHR android_flags;
VkImagePipeSurfaceCreateFlagsFUCHSIA fuchsia_flags;
VkStreamDescriptorSurfaceCreateFlagsGGP ggp_flags;
VkIOSSurfaceCreateFlagsMVK ios_flags;
VkMacOSSurfaceCreateFlagsMVK macos_flags;
VkMetalSurfaceCreateFlagsEXT metal_flags;
VkViSurfaceCreateFlagsNN vi_flags;
VkWaylandSurfaceCreateFlagsKHR wayland_flags;
VkWin32SurfaceCreateFlagsKHR win32_flags;
VkXcbSurfaceCreateFlagsKHR xcb_flags;
VkXlibSurfaceCreateFlagsKHR xlib_flags;
int main(void) {
const VkInstanceCreateInfo instance_info = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.flags = 0,
.pApplicationInfo = NULL,
.enabledLayerCount = 0,
.ppEnabledLayerNames = NULL,
.enabledExtensionCount = 0,
.ppEnabledExtensionNames = NULL,
};
VkInstance instance;
vkCreateInstance(&instance_info, NULL, &instance);
vkDestroyInstance(instance, NULL);
// Test XLIB_XRANDR_EXT platform, which doesn't define a new type
VkResult xrandr_result = vkAcquireXlibDisplayEXT((VkPhysicalDevice)0, (Display *)NULL, (VkDisplayKHR)0);
(void)xrandr_result;
return 0;
}

0
tests/wayland-client.h Normal file
View File

9
tests/windows.h Normal file
View File

@ -0,0 +1,9 @@
// "windows.h" for non-Windows compilation environment
typedef int DWORD;
typedef int HANDLE;
typedef int HINSTANCE;
typedef int HMONITOR;
typedef int HWND;
typedef int LPCWSTR;
typedef int SECURITY_ATTRIBUTES;

5
tests/xcb/xcb.h Normal file
View File

@ -0,0 +1,5 @@
// "xcb/xcb.h" for non-X11 compilation environment
typedef int xcb_connection_t;
typedef int xcb_window_t;
typedef int xcb_visualid_t;

3
tests/zircon/types.h Normal file
View File

@ -0,0 +1,3 @@
// "zircon/types.h" for non-Zircon compilation environment
typedef int zx_handle_t;

View File

@ -37,6 +37,7 @@ GENOPTS =
# clean - remove installed and intermediate files.
INCLUDE = ../include
TESTS = ../tests
VULKAN = $(INCLUDE)/vulkan
SRC = ../src
@ -81,11 +82,11 @@ validate:
TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
test: $(HEADERS) $(VULKAN)/vulkan.h $(VULKAN)/vk_platform.h
gcc -Wall -pedantic -std=c99 -c -I$(INCLUDE) test.c
g++ -Wall -c -std=c++98 -I$(INCLUDE) test.c
g++ -Wall -c -std=c++11 -I$(INCLUDE) test.c
gcc $(TESTDEFS) -Wall -pedantic -std=c99 -c -I$(INCLUDE) test.c
rm test.o
gcc -Wall -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
gcc -Wall -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
g++ -Wall -c -std=c++98 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
g++ -Wall -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
rm -f $(TESTS)/test.o
################################################

View File

@ -1,44 +0,0 @@
/*% gcc -Wall -I.. -c test.c
* Tiny test to make sure vulkan.h compiles.
* Should be compiled with one or more platform-specific defines enabled:
*
* VK_USE_PLATFORM_ANDROID_KHR
* VK_USE_PLATFORM_IOS_MVK
* VK_USE_PLATFORM_MACOS_MVK
* VK_USE_PLATFORM_MIR_KHR
* VK_USE_PLATFORM_VI_NN
* VK_USE_PLATFORM_WAYLAND_KHR
* VK_USE_PLATFORM_WIN32_KHR
* VK_USE_PLATFORM_XCB_KHR
* VK_USE_PLATFORM_XLIB_KHR
*
* This relies on the model that all platform extensions go into a
* corresponding platform-specific header, so their presence can be tested.
*/
#include <stdio.h>
#include "vulkan/vulkan.h"
int main(int ac, const char **av) {
VkStructureType sType;
VkResult result;
// Suppress warnings about unused variables
(void)sType; (void)result;
sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
result = VK_SUBOPTIMAL_KHR;
result = VK_ERROR_OUT_OF_DATE_KHR;
printf("VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0x%08x\n",
(unsigned int)VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR);
printf("VK_SUBOPTIMAL_KHR = 0x%08x\n",
(unsigned int)VK_SUBOPTIMAL_KHR);
printf("VK_ERROR_OUT_OF_DATE_KHR = 0x%08x\n",
(unsigned int)VK_ERROR_OUT_OF_DATE_KHR);
printf("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x%08x\n",
(unsigned int)VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT);
printf("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x%08x\n",
(unsigned int)VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR);
return 0;
}

View File

@ -153,7 +153,7 @@ server.
<type category="define">// Vulkan 1.1 version number
#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_VERSION</type>(1, 1, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 105</type>
#define <name>VK_HEADER_VERSION</name> 106</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -2046,13 +2046,15 @@ typedef void <name>CAMetalLayer</name>;
<member noautovalidity="true"><type>VkExtent2D</type> <name>extent</name><comment>Dimensions of a rectangle that has not changed, in pixels of a presentation images</comment></member>
<member><type>uint32_t</type> <name>layer</name><comment>Layer of a swapchain's image(s), for stereoscopic-3D images</comment></member>
</type>
<type category="struct" name="VkPhysicalDeviceVariablePointerFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
<type category="struct" name="VkPhysicalDeviceVariablePointersFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>variablePointersStorageBuffer</name></member>
<member><type>VkBool32</type> <name>variablePointers</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceVariablePointerFeaturesKHR" alias="VkPhysicalDeviceVariablePointerFeatures"/>
<type category="struct" name="VkPhysicalDeviceVariablePointersFeaturesKHR" alias="VkPhysicalDeviceVariablePointersFeatures"/>
<type category="struct" name="VkPhysicalDeviceVariablePointerFeaturesKHR" alias="VkPhysicalDeviceVariablePointersFeatures"/>
<type category="struct" name="VkPhysicalDeviceVariablePointerFeatures" alias="VkPhysicalDeviceVariablePointersFeatures"/>
<type category="struct" name="VkExternalMemoryProperties" returnedonly="true">
<member><type>VkExternalMemoryFeatureFlags</type> <name>externalMemoryFeatures</name></member>
<member optional="true"><type>VkExternalMemoryHandleTypeFlags</type> <name>exportFromImportedHandleTypes</name></member>
@ -2971,11 +2973,12 @@ typedef void <name>CAMetalLayer</name>;
<member><type>VkBool32</type> <name>supported</name></member>
</type>
<type category="struct" name="VkDescriptorSetLayoutSupportKHR" alias="VkDescriptorSetLayoutSupport"/>
<type category="struct" name="VkPhysicalDeviceShaderDrawParameterFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
<type category="struct" name="VkPhysicalDeviceShaderDrawParametersFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>shaderDrawParameters</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceShaderDrawParameterFeatures" alias="VkPhysicalDeviceShaderDrawParametersFeatures"/>
<type category="struct" name="VkPhysicalDeviceFloat16Int8FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
@ -3761,13 +3764,14 @@ typedef void <name>CAMetalLayer</name>;
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>float</type> <name>priority</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceBufferAddressFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<type category="struct" name="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>bufferDeviceAddress</name></member>
<member><type>VkBool32</type> <name>bufferDeviceAddressCaptureReplay</name></member>
<member><type>VkBool32</type> <name>bufferDeviceAddressMultiDevice</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceBufferAddressFeaturesEXT" alias="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT"/>
<type category="struct" name="VkBufferDeviceAddressInfoEXT">
<member values="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
@ -6932,6 +6936,7 @@ typedef void <name>CAMetalLayer</name>;
</command>
<command>
<proto><type>void</type> <name>vkSetLocalDimmingAMD</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>VkSwapchainKHR</type> <name>swapChain</name></param>
<param><type>VkBool32</type> <name>localDimmingEnable</name></param>
</command>
@ -7720,8 +7725,10 @@ typedef void <name>CAMetalLayer</name>;
<type name="VkPhysicalDeviceMultiviewProperties"/>
</require>
<require comment="Promoted from VK_KHR_variable_pointers">
<enum extends="VkStructureType" extnumber="121" offset="0" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"/>
<enum extends="VkStructureType" extnumber="121" offset="0" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
<type name="VkPhysicalDeviceVariablePointerFeatures"/>
<type name="VkPhysicalDeviceVariablePointersFeatures"/>
</require>
<require comment="Originally based on VK_KHR_protected_memory (extension 146), which was never published; thus the mystifying large value= numbers below. These are not aliased since they weren't actually promoted from an extension.">
<enum extends="VkStructureType" extnumber="146" offset="0" name="VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"/>
@ -7890,8 +7897,10 @@ typedef void <name>CAMetalLayer</name>;
<command name="vkGetDescriptorSetLayoutSupport"/>
</require>
<require comment="Promoted from VK_KHR_shader_draw_parameters, with a feature support query added">
<enum extends="VkStructureType" extnumber="64" offset="0" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"/>
<enum extends="VkStructureType" extnumber="64" offset="0" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"/>
<type name="VkPhysicalDeviceShaderDrawParameterFeatures"/>
<type name="VkPhysicalDeviceShaderDrawParametersFeatures"/>
</require>
</feature>
@ -9312,7 +9321,9 @@ typedef void <name>CAMetalLayer</name>;
<enum value="1" name="VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_variable_pointers&quot;" name="VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"/>
<type name="VkPhysicalDeviceVariablePointerFeaturesKHR"/>
<type name="VkPhysicalDeviceVariablePointersFeaturesKHR"/>
</require>
</extension>
<extension name="VK_KHR_get_display_properties2" number="122" type="instance" requires="VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
@ -10028,6 +10039,8 @@ typedef void <name>CAMetalLayer</name>;
<require>
<enum value="0" name="VK_QCOM_extension_172_SPEC_VERSION"/>
<enum value="&quot;VK_QCOM_extension_172&quot;" name="VK_QCOM_extension_172_EXTENSION_NAME"/>
<enum bitpos="2" extends="VkSubpassDescriptionFlagBits" name="VK_SUBPASS_DESCRIPTION_RESERVED_2_BIT_QCOM"/>
<enum bitpos="3" extends="VkSubpassDescriptionFlagBits" name="VK_SUBPASS_DESCRIPTION_RESERVED_3_BIT_QCOM"/>
</require>
</extension>
<extension name="VK_QCOM_extension_173" number="173" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">
@ -10601,13 +10614,15 @@ typedef void <name>CAMetalLayer</name>;
<require>
<enum value="2" name="VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_buffer_device_address&quot;" name="VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"/>
<enum bitpos="17" extends="VkBufferUsageFlagBits" name="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT"/>
<enum bitpos="4" extends="VkBufferCreateFlagBits" name="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"/>
<enum offset="0" dir="-" extends="VkResult" name="VK_ERROR_INVALID_DEVICE_ADDRESS_EXT"/>
<type name="VkPhysicalDeviceBufferAddressFeaturesEXT"/>
<type name="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT"/>
<type name="VkBufferDeviceAddressInfoEXT"/>
<type name="VkBufferDeviceAddressCreateInfoEXT"/>
<command name="vkGetBufferDeviceAddressEXT"/>