Change log for March 24, 2017 Vulkan 1.0.45 spec update:

* Bump API patch number and header version number to 45 for this update.

Github Issues:

  * Defined the lifetime of the memory pointed to by
    slink:VkDisplayPropertiesKHR::pname:displayName to be equal to that of
    its associated display handle (public issue 460).
  * Correct several cases where the sparse memory feature name
    pname:residencyNonResidentStrict was written as
    pname:sparseResidencyNonResidentStrict (public issue 475).

Internal Issues:

  * Fix ptext:pNext member of slink:VkPhysicalDeviceGroupPropertiesKHX to be
    a non-const pointer. Properties structures return values, so the chain
    should be non-const.
  * Clarify definition of memory aliasing to consistently use the terms
    "linear" and "non-linear" when referring to resources, and define what
    those terms mean.
  * Modified XML schema and implicit validity scripts to generate language
    for all ptext:pNext values in a ptext:pNext chain instead of just the
    top level struct, and made `noautovalidity` functional for ptext:sType
    and ptext:pNext (internal issue 535).
  * Add more detail for BT2020 and scRGB color spaces in
    `VK_EXT_swapchain_colorspace` extension (internal issue 632).
  * Add naming rules for Extension Structure Names (structures added to the
    ptext:pNext chain of a base structure) to the style guide (internal
    issue 706).
  * Define the glossary term "ptext:pNext chain", and use it consistently in
    the spec (internal issue 744).

New Extensions:
This commit is contained in:
Jon Leech 2017-03-25 01:46:58 -07:00
parent 43f1fd5550
commit e8cbffbd25
44 changed files with 746 additions and 390 deletions

View File

@ -8,6 +8,41 @@ public issues.
-----------------------------------------------------
Change log for March 24, 2017 Vulkan 1.0.45 spec update:
* Bump API patch number and header version number to 45 for this update.
Github Issues:
* Defined the lifetime of the memory pointed to by
slink:VkDisplayPropertiesKHR::pname:displayName to be equal to that of
its associated display handle (public issue 460).
* Correct several cases where the sparse memory feature name
pname:residencyNonResidentStrict was written as
pname:sparseResidencyNonResidentStrict (public issue 475).
Internal Issues:
* Fix ptext:pNext member of slink:VkPhysicalDeviceGroupPropertiesKHX to be
a non-const pointer. Properties structures return values, so the chain
should be non-const.
* Clarify definition of memory aliasing to consistently use the terms
"linear" and "non-linear" when referring to resources, and define what
those terms mean.
* Modified XML schema and implicit validity scripts to generate language
for all ptext:pNext values in a ptext:pNext chain instead of just the
top level struct, and made `noautovalidity` functional for ptext:sType
and ptext:pNext (internal issue 535).
* Add more detail for BT2020 and scRGB color spaces in
`VK_EXT_swapchain_colorspace` extension (internal issue 632).
* Add naming rules for Extension Structure Names (structures added to the
ptext:pNext chain of a base structure) to the style guide (internal
issue 706).
* Define the glossary term "ptext:pNext chain", and use it consistently in
the spec (internal issue 744).
-----------------------------------------------------
Change log for March 17, 2017 Vulkan 1.0.44 spec update:
* Bump API patch number and header version number to 44 for this update.

View File

@ -86,7 +86,7 @@ VERBOSE =
# $(EXTENSIONS))
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
SPECREVISION = 1.0.44
SPECREVISION = 1.0.45
# Spell out RFC2822 format as not all date commands support -R
SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`)

View File

@ -731,6 +731,8 @@ gem install --pre asciidoctor-pdf
[[ruby-enum-downgrade]]
==== Ruby Gem Versioning Errors
*ruby-enum*
As of 2017-03-06, there appears to be a problem with the ruby-enum version
0.7.1 gem which breaks the PDF build. Make sure you are using ruby-enum
0.7.0, as follows:
@ -743,9 +745,20 @@ https://github.com/gjtorikian/mathematical/issues/69 for a report of this
problem.
*prawn*
As of 2017-03-20, there are incompatibilities between asciidoctor-pdf and
certain versions of prawn and prawn-templates affecting the PDF build. Make
sure to update to prawn 2.2.1 and prawn-templates 0.0.5. See
https://github.com/KhronosGroup/Vulkan-Docs/issues/476
[[history]]
== Revision History
* 2017-03-20 - Add description of prawn versioning problem and how to fix
it.
* 2017-03-06 - Add description of ruby-enum versioning problem and how to
fix it.
* 2017-02-13 - Move some comments here from ../../../README.md. Tweak

View File

@ -8,7 +8,7 @@
*Registered Extension Number*::
105
*Last Modified Date*::
2017-01-13
2017-03-15
*Revision*::
1
*IP Status*::
@ -21,107 +21,13 @@
*Contacts*::
- Courtney Goeltzenleuchter, Google
This extension defines enums for elink:VkColorSpaceKHR that correspond to
the following color spaces::
[[VK_EXT_swapchain_colorspace-table]]
.Color Spaces and Attributes
[options="header"]
|====
| Name | Red Primary | Green Primary | Blue Primary | White-point | OETF
| DCI-P3 | 0.680, 0.320 | 0.265, 0.690 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Gamma 2.6
| Display-P3 | 0.680, 0.320 | 0.265, 0.690 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | sRGB
| BT709 | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | SMPTE 170M
| sRGB | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | sRGB
| scRGB | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | scRGB
| BT2020 | 0.708, 0.292 | 0.170, 0.797 | 0.131, 0.046 | 0.3127, 0.3290 (D65) | SMPTE 170M
| AdobeRGB | 0.640, 0.330 | 0.210, 0.710 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Gamma 2.2
|====
For Opto-Electrical Transfer Function (OETF), unless otherwise specified,
the values of [eq]#L# and [eq]#E# are defined as:
[eq]#L# - luminance of image [eq]#0 {leq} L {leq} 1# for conventional
colorimetry
[eq]#E# - corresponding electrical signal (value stored in memory)
=== sRGB OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\ 0.0031308 \leq L \leq 1 \\
12.92 \times L & \text{for}\ 0 \leq L < 0.0031308
\end{cases}
\end{aligned}
+++++++++++++++++++
=== scRGB OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\ 0.0031308 \leq L \leq 7.5913 \\
12.92 \times L & \text{for}\ 0 \leq L < 0.0031308 \\
-E \times -L & \text{for}\ L < 0
\end{cases}
\end{aligned}
+++++++++++++++++++
[eq]#L# - luminance of image is within [eq]#[-0.6038, 7.5913]#.
[eq]#E# can be negative and/or > 1.
That is how scRGB specifies colors outside the standard sRGB gamut.
=== SMPTE 170M OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.099 \times L^0.45 - 0.099 & \text{for}\ 0.018 \leq L \leq 1 \\
4.5 \times L & \text{for}\ 0 \leq L < 0.018
\end{cases}
\end{aligned}
+++++++++++++++++++
=== Display Gamma 2.2 OETF
latexmath:[$E = L^{1 \over 2.2}$]
=== Display Gamma 2.6 OETF
latexmath:[$E = L^{1 \over 2.6}$]
An implementation supporting this extension indicates support for these
color spaces via slink:VkSurfaceFormatKHR structures returned from
flink:vkGetPhysicalDeviceSurfaceFormatsKHR.
Specifying the supported surface color space when calling
flink:vkCreateSwapchainKHR will create a swapchain using that color space.
Vulkan requires that all implementations support the sRGB OETF and EOTF when
using an SRGB pixel format.
Other transfer functions, such as SMPTE 170M, must: not be performed by the
implementation, but can: be performed by the application shader.
=== New Enum Constants
* Extending elink:VkColorSpaceKHR:
** ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT - supports the Display-P3
color space and applies a linear OETF.
** ename:VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT - supports the Display-P3
color space and applies the sRGB OETF.
** ename:VK_COLOR_SPACE_SCRGB_LINEAR_EXT - supports the scRGB color space
and applies a linear OETF.
** ename:VK_COLOR_SPACE_SCRGB_NONLINEAR_EXT - supports the scRGB color
space and applies the scRGB OETF.
color space and applies an sRGB-like OETF.
** ename:VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT - supports the extended
sRGB color space and applies a linear OETF.
** ename:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT - supports the DCI-P3 color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT - supports the DCI-P3 color
@ -132,12 +38,19 @@ implementation, but can: be performed by the application shader.
space and applies the SMPTE 170M OETF.
** ename:VK_COLOR_SPACE_BT2020_LINEAR_EXT - supports the BT2020 color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_BT2020_NONLINEAR_EXT - supports the BT2020 color
space and applies the SMPTE 170M OETF.
** ename:VK_COLOR_SPACE_HDR10_ST2084_EXT - supports HDR10 (BT2020 color
space and applies the SMPTE ST2084 Perceptual Quantizer (PQ) OETF).
** ename:VK_COLOR_SPACE_DOLBYVISION_EXT - supports Dolby Vision (BT2020
color space, proprietary encoding, and applies the SMPTE ST2084 OETF).
** ename:VK_COLOR_SPACE_HDR10_HLG_EXT - supports HDR10 (BT2020 color space
and applies the Hybrid Log Gamma (HLG) OETF).
** ename:VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT - supports the AdobeRGB color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT - supports the AdobeRGB
color space and applies the Gamma 2.2 OETF.
** ename:VK_COLOR_SPACE_PASS_THROUGH_EXT - color components used "as is".
Intended to allow application to supply data for color spaces not
described here.
=== Issues
@ -157,8 +70,14 @@ function for a colorspace?
*RESOLVED*: Extension indicates that implementation must: not do the OETF
encoding if it is not sRGB.
That responsibility falls to the application shaders.
Any other native OETF / EOTF functions supported by an implementation can be
described by separate extension.
=== Version History
* Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
- Initial version
* Revision 2, 2017-01-19 (Courtney Goeltzenleuchter)
- Add pass through and multiple options for BT2020.
- Clean up some issues with equations not displaying properly.

View File

@ -29,14 +29,16 @@
This extension provides new entry points to query device features, device
properties, and format properties in a way that can be easily extended by
other extensions, without introducing any further entry points.
The Vulkan 1.0 feature/limit/formatproperty structures do not include an
sType/pNext, this extension wraps them in new structures with sType/pNext so
an application can query a chain of feature/limit/formatproperty structures
by constructing the chain and letting the implementation fill them in.
The Vulkan 1.0 feature/limit/formatproperty structures do not include
ptext:sType/ptext:pNext members.
This extension wraps them in new structures with ptext:sType/ptext:pNext
members, so an application can query a chain of feature/limit/formatproperty
structures by constructing the chain and letting the implementation fill
them in.
A new command is added for each ftext:vkGetPhysicalDevice* command in core
Vulkan 1.0.
The new feature structure (and a chain of extensions) can also be passed in
to device creation to enable features.
The new feature structure (and a chain of extension structures) can also be
passed in to device creation to enable features.
This extension also allows applications to use the physical-device
components of device extensions before flink:vkCreateDevice is called.

View File

@ -606,6 +606,13 @@ Invocation Group::
execute the same control flow path in order for control flow to be
considered dynamically uniform.
[[glossary-linear-resource]]
Linear Resource::
A resource is _linear_ if it is a slink:VkBuffer, or a slink:VkImage
created with ename:VK_IMAGE_TILING_LINEAR.
A resource is _non-linear_ if it is a slink:VkImage created with
ename:VK_IMAGE_TILING_OPTIMAL.
Local Workgroup::
A collection of compute shader invocations invoked by a single dispatch
command, which share shared memory and can synchronize with each other.
@ -742,6 +749,10 @@ Pipeline Stage::
A logically independent execution unit that performs some of the
operations defined by an action command.
pname:pNext Chain::
A set of structures <<fundamentals-validusage-pNext,chained together>>
through their ptext:pNext members.
Point Sampling (Rasterization)::
A rule that determines whether a fragment sample location is covered by
a polygon primitive by testing whether the sample location is in the

View File

@ -61,27 +61,26 @@ include::../api/structs/VkDebugReportCallbackCreateInfoEXT.txt[]
// refBegin VkDebugReportFlagBitsEXT Bitmask specifying events which cause a debug report callback
include::../api/enums/VkDebugReportFlagBitsEXT.txt[]
* ename:VK_DEBUG_REPORT_ERROR_BIT_EXT indicates an error that may cause
undefined results, including an application crash.
* ename:VK_DEBUG_REPORT_WARNING_BIT_EXT indicates use of Vulkan that may
expose an app bug.
Such cases may not be immediately harmful, such as a fragment shader
outputting to a location with no attachment.
Other cases may point to behavior that is almost certainly bad when
unintended such as using an image whose memory has not been filled.
In general if you see a warning but you know that the behavior is
intended/desired, then simply ignore the warning.
* ename:VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT indicates a
potentially non-optimal use of Vulkan.
E.g. using flink:vkCmdClearColorImage when a RenderPass load_op would
have worked.
* ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT indicates an informational
message such as resource details that may be handy when debugging an
application.
* ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT indicates diagnostic information
from the loader and layers.
** ename:VK_DEBUG_REPORT_ERROR_BIT_EXT indicates an error that may cause
undefined results, including an application crash.
** ename:VK_DEBUG_REPORT_WARNING_BIT_EXT indicates use of Vulkan that may
expose an app bug.
Such cases may not be immediately harmful, such as a fragment shader
outputting to a location with no attachment.
Other cases may point to behavior that is almost certainly bad when
unintended such as using an image whose memory has not been filled.
In general if you see a warning but you know that the behavior is
intended/desired, then simply ignore the warning.
** ename:VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT indicates a
potentially non-optimal use of Vulkan.
E.g. using flink:vkCmdClearColorImage when a RenderPass load_op would
have worked.
** ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT indicates an informational
message such as resource details that may be handy when debugging an
application.
** ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT indicates diagnostic information
from the loader and layers.
--
+
* pname:pfnCallback is the application callback function to call.
* pname:pUserData is user data to be passed to the callback.

View File

@ -27,8 +27,7 @@ include::../../api/structs/VkDisplayPowerInfoEXT.txt[]
--
// refBegin VkDisplayPowerStateEXT Possible power states for a VkDisplay
include::../../api/enums/VkDisplayPowerStateEXT.txt[]
--
+
** ename:VK_DISPLAY_POWER_STATE_OFF_EXT means the display is powered down.
** ename:VK_DISPLAY_POWER_STATE_SUSPEND_EXT means the display is in a low
power mode, but may: be able to transition back to
@ -36,5 +35,6 @@ include::../../api/enums/VkDisplayPowerStateEXT.txt[]
ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
This state may: be the same as ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
** ename:VK_DISPLAY_POWER_STATE_ON_EXT is powered on.
--
include::../../validity/structs/VkDisplayPowerInfoEXT.txt[]

View File

@ -36,12 +36,12 @@ include::../../api/structs/VkDeviceEventInfoEXT.txt[]
--
// refBegin VkDeviceEventTypeEXT Events that can occur on a device object
include::../../api/enums/VkDeviceEventTypeEXT.txt[]
--
+
** ename:VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT occurs when a display is
plugged into or unplugged from the specified device.
Applications can: use this notification to determine when they need to
re-enumerate the available displays on a device.
--
include::../../validity/structs/VkDeviceEventInfoEXT.txt[]
@ -78,10 +78,10 @@ include::../../api/structs/VkDisplayEventInfoEXT.txt[]
--
// refBegin VkDisplayEventTypeEXT Events that can occur on a display object
include::../../api/enums/VkDisplayEventTypeEXT.txt[]
--
+
** ename:VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT occurs when the first
pixel of the next display refresh cycle leaves the display engine for
the display.
--
include::../../validity/structs/VkDisplayEventInfoEXT.txt[]

View File

@ -15,7 +15,8 @@ include::../../api/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]
fname:vkGetPhysicalDeviceSurfaceCapabilities2EXT behaves similarly to
flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to return
extended information via chained output structures.
extended information by adding extension structures to its pname:pNext
chain.
include::../../validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]

View File

@ -17,7 +17,8 @@ include::../api/structs/VkValidationFlagsEXT.txt[]
--
// refBegin VkValidationCheckEXT Specify validation checks to disable
include::../api/enums/VkValidationCheckEXT.txt[]
--
** ename:VK_VALIDATION_CHECK_ALL_EXT disables all validation checks.
--
include::../validity/structs/VkValidationFlagsEXT.txt[]

View File

@ -32,7 +32,7 @@ include::../../api/structs/VkPresentTimesInfoGOOGLE.txt[]
****
* pname:swapchainCount must: be the same value as
sname:VkPresentInfoKHR::pname:swapchainCount, where
sname:VkPresentInfoKHR is in the pNext-chain of this
sname:VkPresentInfoKHR is in the pname:pNext chain of this
sname:VkPresentTimesInfoGOOGLE structure.
****

View File

@ -67,6 +67,8 @@ include::../../api/structs/VkDisplayPropertiesKHR.txt[]
the name of the display.
Generally, this will be the name provided by the display's EDID.
It can: be `NULL` if no suitable name is available.
If not `NULL`, the memory it points to must: remain accessible as long
as pname:display is valid.
* pname:physicalDimensions describes the physical width and height of the
visible portion of the display, in millimeters.
* pname:physicalResolution describes the physical, native, or preferred

View File

@ -455,34 +455,228 @@ The ename:VkColorSpaceKHR is defined as follows:
include::../../api/enums/VkColorSpaceKHR.txt[]
ifndef::VK_EXT_swapchain_colorspace[]
* ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR: The presentation engine
supports the sRGB color space.
endif::VK_EXT_swapchain_colorspace[]
ifdef::VK_EXT_swapchain_colorspace[]
** ename:VK_COLOR_SPACE_SCRGB_LINEAR_EXT - supports the scRGB color space
* ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR: The presentation engine
supports the sRGB color space.
* ename:VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT - supports the Display-P3
color space and applies an sRGB-like OETF (defined below).
* ename:VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT - supports the extended
sRGB color space and applies a linear OETF.
* ename:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT - supports the DCI-P3 color space
and applies a linear OETF.
** ename:VK_COLOR_SPACE_SCRGB_NONLINEAR_EXT - supports the scRGB color
space and applies the scRGB OETF.
** ename:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT - supports the DCI-P3 color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT - supports the DCI-P3 color
* ename:VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT - supports the DCI-P3 color
space and applies the Gamma 2.6 OETF.
** ename:VK_COLOR_SPACE_BT709_LINEAR_EXT - supports the BT709 color space
* ename:VK_COLOR_SPACE_BT709_LINEAR_EXT - supports the BT709 color space
and applies a linear OETF.
** ename:VK_COLOR_SPACE_BT709_NONLINEAR_EXT - supports the BT709 color
* ename:VK_COLOR_SPACE_BT709_NONLINEAR_EXT - supports the BT709 color
space and applies the SMPTE 170M OETF.
** ename:VK_COLOR_SPACE_BT2020_LINEAR_EXT - supports the BT2020 color
* ename:VK_COLOR_SPACE_BT2020_LINEAR_EXT - supports the BT2020 color space
and applies a linear OETF.
* ename:VK_COLOR_SPACE_HDR10_ST2084_EXT - supports HDR10 (BT2020 color)
space and applies the SMPTE ST2084 Perceptual Quantizer (PQ) OETF.
* ename:VK_COLOR_SPACE_DOLBYVISION_EXT - supports Dolby Vision (BT2020
color space), proprietary encoding, and applies the SMPTE ST2084 OETF.
* ename:VK_COLOR_SPACE_HDR10_HLG_EXT - supports HDR10 (BT2020 color space)
and applies the Hybrid Log Gamma (HLG) OETF.
* ename:VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT - supports the AdobeRGB color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_BT2020_NONLINEAR_EXT - supports the BT2020 color
space and applies the SMPTE 170M OETF.
** ename:VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT - supports the AdobeRGB color
space and applies a linear OETF.
** ename:VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT - supports the AdobeRGB
* ename:VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT - supports the AdobeRGB
color space and applies the Gamma 2.2 OETF.
* ename:VK_COLOR_SPACE_PASS_THROUGH_EXT - color components used "as is".
Intended to allow application to supply data for color spaces not
described here.
The color components of Non-linear color space swap chain images have had
the appropriate transfer function applied.
Vulkan requires that all implementations support the sRGB OETF and EOTF
transfer functions when using an SRGB pixel format.
Other transfer functions, such as SMPTE 170M or SMPTE2084, must: not be
performed by the implementation, but can: be performed by the application
shader.
This extension defines enums for elink:VkColorSpaceKHR that correspond to
the following color spaces::
[[VK_EXT_swapchain_colorspace-table]]
.Color Spaces and Attributes
[options="header"]
|====
| Name | Red Primary | Green Primary | Blue Primary | White-point | OETF
| DCI-P3 | 0.680, 0.320 | 0.265, 0.690 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Gamma 2.6
| Display-P3 | 0.680, 0.320 | 0.265, 0.690 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Display-P3
| BT709 | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | SMPTE 170M
| sRGB | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | sRGB
| extended sRGB | 0.640, 0.330 | 0.300, 0.600 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | extended sRGB
| HDR10_ST2084 | 0.708, 0.292 | 0.170, 0.797 | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084
| DOLBYVISION | 0.708, 0.292 | 0.170, 0.797 | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084
| HDR10_HLG | 0.708, 0.292 | 0.170, 0.797 | 0.131, 0.046 | 0.3127, 0.3290 (D65) | HLG
| AdobeRGB | 0.640, 0.330 | 0.210, 0.710 | 0.150, 0.060 | 0.3127, 0.3290 (D65) | AdobeRGB
|====
For Opto-Electrical Transfer Function (OETF), unless otherwise specified,
the values of [eq]#L# and [eq]#E# are defined as:
[eq]#L# - linear luminance of image latexmath:[0 \leq L \leq 1] for
conventional colorimetry
[eq]#E# - corresponding electrical signal (value stored in memory)
=== sRGB OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\ 0.0031308 \leq L \leq 1 \\
12.92 \times L & \text{for}\ 0 \leq L < 0.0031308
\end{cases}
\end{aligned}
+++++++++++++++++++
=== Display-P3 EOTF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
(a \times L + b)^{2.4} & \text{for}\ 0.039 \leq L \leq 1 \\
b \times L & \text{for}\ 0 \leq L < 0.039
\end{cases}
\end{aligned}
+++++++++++++++++++
latexmath:[a = 0.948] +
latexmath:[b = 0.052] +
latexmath:[c = 0.077] +
=== Display-P3 OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\ 0.0030186 \leq L \leq 1 \\
12.92 \times L & \text{for}\ 0 \leq L < 0.0030186
\end{cases}
\end{aligned}
+++++++++++++++++++
[NOTE]
.Note
====
For most uses, the sRGB OETF is equivalent.
====
=== Extended sRGB OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\ 0.0031308 \leq L \leq 7.5913 \\
12.92 \times L & \text{for}\ 0 \leq L < 0.0031308 \\
-f(-L) & \text{for}\ L < 0
\end{cases}
\end{aligned}
+++++++++++++++++++
[eq]#L# - luminance of image is within [eq]#[-0.6038, 7.5913]#.
[eq]#E# can be negative and/or > 1.
That is how extended sRGB specifies colors outside the standard sRGB gamut.
This means extended sRGB needs a floating point pixel format to cover the
intended color range.
=== SMPTE 170M OETF
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
\alpha \times L^{0.45} - (1 - \alpha) & \text{for}\ \beta \leq L \leq 1 \\
4.5 \times L & \text{for}\ 0 \leq L < \beta
\end{cases}
\end{aligned}
+++++++++++++++++++
latexmath:[\alpha = 1.099 \text{ and } \beta = 0.018 \text{ for 10-bits and
less per sample system (the values given in Rec. 709)}] +
latexmath:[\alpha = 1.0993 \text{ and } \beta = 0.0181 \text{ for 12-bits
per sample system}]
=== SMPTE ST2084 OETF (Inverse-EOTF)
[latexmath]
+++++++++++++++++++
\[
E = (\frac{c_1 + c_2 \times L^{m_1}}{1 + c_3 \times L^{m_1}})^{m_2}
\]
+++++++++++++++++++
where:
latexmath:[m_1 = 2610 / 4096 \times \frac{1}{4} = 0.1593017578125] +
latexmath:[m_2 = 2523 / 4096 \times 128 = 78.84375] +
latexmath:[c_1 = 3424 / 4096 = 0.8359375 = c3 - c2 + 1] +
latexmath:[c_2 = 2413 / 4096 \times 32 = 18.8515625] +
latexmath:[c_3 = 2392 / 4096 \times 32 = 18.6875] +
=== Hybrid Log Gamma (HLG)
[latexmath]
+++++++++++++++++++
\begin{aligned}
E & =
\begin{cases}
r \sqrt{L} & \text{for}\ 0 \leq L \leq 1 \\
a \times \ln(L - b) + c & \text{for}\ 1 < L
\end{cases}
\end{aligned}
+++++++++++++++++++
latexmath:[L \text{ - is the signal normalized by the reference white
level}] +
latexmath:[r \text{ - is the reference white level and has a signal value of
0.5}] +
latexmath:[a = 0.17883277 \text{ and } b = 0.28466892 \text{, and } c =
0.55991073]
=== AdobeRGB OETF
latexmath:[E = L^\frac{1}{2.19921875}]
=== Gamma 2.6 OETF
latexmath:[E = L^\frac{1}{2.6}]
An implementation supporting this extension indicates support for these
color spaces via slink:VkSurfaceFormatKHR structures returned from
flink:vkGetPhysicalDeviceSurfaceFormatsKHR.
Specifying the supported surface color space when calling
flink:vkCreateSwapchainKHR will create a swapchain using that color space.
Vulkan requires that all implementations support the sRGB Opto-Electrical
Transfer Function (OETF) and Electro-optical transfer function (EOTF) when
using an SRGB pixel format.
Other transfer functions, such as SMPTE 170M, must: not be performed by the
implementation, but can: be performed by the application shader.
endif::VK_EXT_swapchain_colorspace[]
@ -611,6 +805,7 @@ equivalent to the behavior of {wgl|glX}SwapBuffers with a swap interval of
ifdef::VK_KHR_swapchain[]
ifdef::VK_KHX_device_group[]
== Device Group Queries
// refBegin vkGetDeviceGroupPresentCapabilitiesKHX Query present capabilities from other physical devices
@ -651,7 +846,7 @@ include::../../api/structs/VkDeviceGroupPresentCapabilitiesKHX.txt[]
--
// refBegin VkDeviceGroupPresentModeFlagBitsKHX Bitmask specifying supported device group present modes
include::../../api/enums/VkDeviceGroupPresentModeFlagBitsKHX.txt[]
--
** if pname:modes contains
ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX, any physical device
with a presentation engine can: present its own swapchain images.
@ -666,6 +861,7 @@ include::../../api/enums/VkDeviceGroupPresentModeFlagBitsKHX.txt[]
ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX, multiple
physical devices with a presentation engine can: each present their own
swapchain images.
--
pname:modes always has ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX set.

View File

@ -48,10 +48,10 @@ include::../../api/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[]
include::../../validity/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[]
The sname:VkPipelineViewportWScalingStateCreateInfoNV state is set by
chaining an instance of this structino to the pname:pNext of an instance of
the sname:VkPipelineViewportStateCreateInfo structure and setting the
graphics pipeline state with flink:vkCreateGraphicsPipelines.
The sname:VkPipelineViewportWScalingStateCreateInfoNV state is set by adding
an instance of this structure to the pname:pNext chain of an instance of the
sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
pipeline state with flink:vkCreateGraphicsPipelines.
// refBegin vkCmdSetViewportWScalingNV Set the viewport W scaling on a command buffer

View File

@ -173,8 +173,7 @@ include::../api/structs/VkCommandPoolCreateInfo.txt[]
--
// refBegin VkCommandPoolCreateFlagBits Bitmask specifying usage behavior for a command pool
include::../api/enums/VkCommandPoolCreateFlagBits.txt[]
--
+
** ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT indicates that command
buffers allocated from the pool will be short-lived, meaning that they
will be reset or freed in a relatively short timeframe.
@ -187,6 +186,7 @@ include::../api/enums/VkCommandPoolCreateFlagBits.txt[]
flink:vkBeginCommandBuffer.
If this flag is not set on a pool, then fname:vkResetCommandBuffer
must: not be called for any command buffer allocated from that pool.
--
* pname:queueFamilyIndex designates a queue family as described in section
<<devsandqueues-queueprops,Queue Family Properties>>.
All command buffers allocated from this command pool must: be submitted
@ -274,11 +274,11 @@ include::../api/protos/vkResetCommandPool.txt[]
--
// refBegin VkCommandPoolResetFlagBits Bitmask controlling behavior of a command pool reset
include::../api/enums/VkCommandPoolResetFlagBits.txt[]
--
+
If pname:flags includes ename:VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT,
resetting a command pool recycles all of the resources from the command pool
back to the system.
--
Resetting a command pool recycles all of the resources from all of the
command buffers allocated from the command pool back to the command pool.
@ -381,7 +381,6 @@ include::../api/structs/VkCommandBufferAllocateInfo.txt[]
// refBegin VkCommandBufferLevel Structure specifying a command buffer level
include::../api/enums/VkCommandBufferLevel.txt[]
--
+
* pname:commandBufferCount is the number of command buffers to allocate
from the pool.
@ -408,8 +407,7 @@ include::../api/protos/vkResetCommandBuffer.txt[]
--
// refBegin VkCommandBufferResetFlagBits Bitmask controlling behavior of a command buffer reset
include::../api/enums/VkCommandBufferResetFlagBits.txt[]
--
+
If pname:flags includes ename:VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT,
then most or all memory resources currently owned by the command buffer
should: be returned to the parent command pool.
@ -417,6 +415,7 @@ If this flag is not set, then the command buffer may: hold onto memory
resources and reuse them when recording commands.
pname:commandBuffer is moved to the <<commandbuffers-lifecycle, initial
state>>.
--
Any primary command buffer that is in the <<commandbuffers-lifecycle,
recording or executable state>> and has pname:commandBuffer recorded into
@ -512,8 +511,7 @@ include::../api/structs/VkCommandBufferBeginInfo.txt[]
--
// refBegin VkCommandBufferUsageFlagBits Bitmask specifying usage behavior for command buffer
include::../api/enums/VkCommandBufferUsageFlagBits.txt[]
--
+
** ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT indicates that each
recording of the command buffer will only be submitted once, and the
command buffer will be reset and recorded again between each
@ -525,6 +523,7 @@ include::../api/enums/VkCommandBufferUsageFlagBits.txt[]
** Setting ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT allows the
command buffer to be resubmitted to a queue while it is in the _pending
state_, and recorded into multiple primary command buffers.
--
* pname:pInheritanceInfo is a pointer to a
sname:VkCommandBufferInheritanceInfo structure, which is used if
pname:commandBuffer is a secondary command buffer.
@ -903,14 +902,14 @@ pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry is ignored.
.Valid Usage
****
* pname:waitSemaphoreValuesCount must: be the same value as
sname:VkSubmitInfo::pname:waitSemaphoreCount, where sname:SubmitInfo is
in the pNext-chain of this sname:VkD3D12FenceSubmitInfoKHX structure.
in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHX
structure.
* pname:signalSemaphoreValuesCount must: be the same value as
sname:VkSubmitInfo::pname:signalSemaphoreCount, where sname:SubmitInfo
is in the pNext-chain of this sname:VkD3D12FenceSubmitInfoKHX structure.
is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHX
structure.
****
include::../validity/structs/VkD3D12FenceSubmitInfoKHX.txt[]

View File

@ -613,6 +613,14 @@ include::../api/structs/VkDescriptorSetLayoutCreateInfo.txt[]
// refBegin VkDescriptorSetLayoutCreateFlagBits Bitmask specifying descriptor set layout properties
include::../api/enums/VkDescriptorSetLayoutCreateFlagBits.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) This section looks odd unless `VK_KHR_push_descriptor` is enabled,
since no bits are defined for the type.
====
endif::editing-notes[]
ifdef::VK_KHR_push_descriptor[]
If pname:flags contains
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then
@ -1272,8 +1280,7 @@ include::../api/structs/VkDescriptorPoolCreateInfo.txt[]
--
// refBegin VkDescriptorPoolCreateFlagBits Bitmask specifying certain supported operations on a descriptor pool
include::../api/enums/VkDescriptorPoolCreateFlagBits.txt[]
--
+
If pname:flags includes
ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, then descriptor
sets can: return their individual allocations to the pool, i.e. all of
@ -1282,7 +1289,7 @@ fname:vkResetDescriptorPool are allowed.
Otherwise, descriptor sets allocated from the pool must: not be individually
freed back to the pool, i.e. only fname:vkAllocateDescriptorSets and
fname:vkResetDescriptorPool are allowed.
+
--
* pname:maxSets is the maximum number of descriptor sets that can: be
allocated from the pool.
* pname:poolSizeCount is the number of elements in pname:pPoolSizes.
@ -1793,12 +1800,12 @@ This means that ename:VK_WHOLE_SIZE is not typically useful in the common
case where uniform buffer descriptors are suballocated from a buffer that is
much larger than pname:maxUniformBufferRange.
====
--
+
For ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC and
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC descriptor types,
pname:offset is the base offset from which the dynamic offset is applied and
pname:range is the static size used for all dynamic offsets.
--
.Valid Usage
****

View File

@ -415,7 +415,7 @@ include::../api/protos/vkGetPhysicalDeviceQueueFamilyProperties2KHR.txt[]
fname:vkGetPhysicalDeviceQueueFamilyProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceQueueFamilyProperties, with the ability to return
extended information via chained output structures.
extended information in a pname:pNext chain of output structures.
include::../validity/protos/vkGetPhysicalDeviceQueueFamilyProperties2KHR.txt[]

View File

@ -24,9 +24,10 @@ slink:VkPhysicalDeviceFeatures and slink:VkPhysicalDeviceLimits), as well as
extensible structures (sname:VkPhysicalDeviceFeatures2KHR and
sname:VkPhysicalDeviceProperties2KHR) which were added in
code:VK_KHR_get_physical_device_properties2.
It is expected that when new features or limits are added in a future Vulkan
version or extensions, each extension should introduce one new feature
structure and/or limit structure (as needed) which can: be chained from the
When new features or limits are added in future Vulkan version or
extensions, each extension should: introduce one new feature structure
and/or limit structure (as needed).
These structures can: be added to the pname:pNext chain of the
sname:VkPhysicalDeviceFeatures2KHR and sname:VkPhysicalDeviceProperties2KHR
structures, respectively.
====
@ -175,7 +176,6 @@ considered out of bounds even if the members at the end are not statically
used.
====
--
+
*** If any buffer access in a given SPIR-V block is determined to be out
of bounds, then any other access of the same type (load, store, or
atomic) in the same SPIR-V block that accesses an address less than 16
@ -377,11 +377,10 @@ used.
* ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
* ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK
* ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
--
+
flink:vkGetPhysicalDeviceFormatProperties is used to check for the supported
properties of individual formats.
+
--
* [[features-features-textureCompressionASTC_LDR]]
pname:textureCompressionASTC_LDR indicates whether the ASTC LDR
compressed texture formats are supported.
@ -417,11 +416,10 @@ properties of individual formats.
* ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
* ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK
* ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
--
+
flink:vkGetPhysicalDeviceFormatProperties is used to check for the supported
properties of individual formats.
+
--
* [[features-features-textureCompressionBC]] pname:textureCompressionBC
indicates whether the BC compressed texture formats are supported.
If this feature is not enabled, the following formats must: not be used
@ -444,11 +442,10 @@ properties of individual formats.
* ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
* ename:VK_FORMAT_BC7_UNORM_BLOCK
* ename:VK_FORMAT_BC7_SRGB_BLOCK
--
+
flink:vkGetPhysicalDeviceFormatProperties is used to check for the supported
properties of individual formats.
+
--
* [[features-features-occlusionQueryPrecise]] pname:occlusionQueryPrecise
indicates whether occlusion queries returning actual sample counts are
supported.
@ -1195,7 +1192,6 @@ just an example and the amount of contribution should: be covered by
different equations in the spec).
====
--
+
* [[features-limits-maxDrawIndexedIndexValue]]
pname:maxDrawIndexedIndexValue is the maximum index value that can: be
used for indexed draw calls when using 32-bit indices.
@ -1487,13 +1483,13 @@ endif::VK_EXT_discard_rectangles[]
--
// refBegin VkSampleCountFlagBits Bitmask specifying sample counts supported for an image used for storage operations
include::../api/enums/VkSampleCountFlagBits.txt[]
--
+
The sample count limits defined above represent the minimum supported sample
counts for each image type.
Individual images may: support additional sample counts, which are queried
using flink:vkGetPhysicalDeviceImageFormatProperties as described in
<<features-supported-sample-counts, Supported Sample Counts>>.
--
include::../validity/structs/VkPhysicalDeviceLimits.txt[]
@ -3431,18 +3427,16 @@ flink:vkGetPhysicalDeviceFormatProperties::pname:format:
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT.
+
If the format being queried is a depth/stencil format, this bit only
indicates that the depth aspect (not the stencil aspect) of an image of
this format supports linear filtering, and that linear filtering of the
depth aspect is supported whether depth compare is enabled in the
sampler or not.
If this bit is not present, linear filtering with depth compare disabled
is unsupported and linear filtering with depth compare enabled is
supported, but may: compute the filtered value in an
implementation-dependent manner which differs from the normal rules of
linear filtering.
The resulting value must: be in the range [eq]#[0,1]# and should: be
proportional to, or a weighted average of, the number of comparison
passes or failures.
indicates that the depth aspect (not the stencil aspect) of an image of this
format supports linear filtering, and that linear filtering of the depth
aspect is supported whether depth compare is enabled in the sampler or not.
If this bit is not present, linear filtering with depth compare disabled is
unsupported and linear filtering with depth compare enabled is supported,
but may: compute the filtered value in an implementation-dependent manner
which differs from the normal rules of linear filtering.
The resulting value must: be in the range [eq]#[0,1]# and should: be
proportional to, or a weighted average of, the number of comparison passes
or failures.
ifdef::VK_KHR_maintenance1[]
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR::
@ -3516,7 +3510,7 @@ include::../api/protos/vkGetPhysicalDeviceFormatProperties2KHR.txt[]
fname:vkGetPhysicalDeviceFormatProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceFormatProperties, with the ability to return
extended information via chained output structures.
extended information in a pname:pNext chain of output structures.
include::../validity/protos/vkGetPhysicalDeviceFormatProperties2KHR.txt[]
@ -4169,7 +4163,7 @@ include::../api/protos/vkGetPhysicalDeviceImageFormatProperties2KHR.txt[]
fname:vkGetPhysicalDeviceImageFormatProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceImageFormatProperties, with the ability to return
extended information via chained output structures.
extended information in a pname:pNext chain of output structures.
If the loader implementation emulates
fname:vkGetPhysicalDeviceImageFormatProperties2KHR on a device that does not
@ -4246,8 +4240,7 @@ include::../api/structs/VkPhysicalDeviceExternalImageFormatInfoKHX.txt[]
--
// refBegin VkExternalMemoryHandleTypeFlagBitsKHX - Bitmask of valid external memory handle types
include::../api/enums/VkExternalMemoryHandleTypeFlagBitsKHX.txt[]
--
+
** ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHX is a POSIX file
descriptor handle that has only limited valid usage outside of Vulkan
and other compatible APIs.
@ -4291,6 +4284,7 @@ include::../api/enums/VkExternalMemoryHandleTypeFlagBitsKHX.txt[]
handle returned by sname:ID3D12Device::fname:CreateSharedHandle
referring to a Direct3D 12 committed resource.
It owns a reference to the memory used by the Direct3D resource.
--
If pname:handleType is 0, flink:vkGetPhysicalDeviceImageFormatProperties2KHR
will behave as if slink:VkPhysicalDeviceExternalImageFormatInfoKHX was not
@ -4583,8 +4577,7 @@ include::../api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHX.txt[]
--
// refBegin VkExternalSemaphoreHandleTypeFlagBitsKHX - Bitmask of valid external semaphore handle types
include::../api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHX.txt[]
--
+
** ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHX is a POSIX
file descriptor handle that has only limited valid usage outside of
Vulkan and other compatible APIs.
@ -4624,6 +4617,7 @@ include::../api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHX.txt[]
Implementations which support importing this handle type must: accept
any type of fence FD supported by the native system they are running
on.
--
[NOTE]
.Note

View File

@ -74,8 +74,8 @@ include::../api/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.txt[]
include::../validity/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.txt[]
The sname:VkPipelineDiscardRectangleStateCreateInfoEXT state is set by
chaining an instance of this structure to the pname:pNext of an instance of
the sname:VkGraphicsPipelineCreateInfo structure and setting the graphics
adding an instance of this structure to the pname:pNext chain of an instance
of the sname:VkGraphicsPipelineCreateInfo structure and setting the graphics
pipeline state with flink:vkCreateGraphicsPipelines.
If the bound pipeline state object was not created with the
@ -562,7 +562,7 @@ include::../api/protos/vkCmdSetStencilCompareMask.txt[]
--
// refBegin VkStencilFaceFlagBits Bitmask specifying sets of stencil state for which to update the compare mask
include::../api/enums/VkStencilFaceFlagBits.txt[]
--
** ename:VK_STENCIL_FACE_FRONT_BIT indicates that only the front set of
stencil state is updated.
** ename:VK_STENCIL_FACE_BACK_BIT indicates that only the back set of
@ -570,6 +570,7 @@ include::../api/enums/VkStencilFaceFlagBits.txt[]
** ename:VK_STENCIL_FRONT_AND_BACK is the combination of
ename:VK_STENCIL_FACE_FRONT_BIT and ename:VK_STENCIL_FACE_BACK_BIT and
indicates that both sets of stencil state are updated.
--
* pname:compareMask is the new value to use as the stencil compare mask.
.Valid Usage

View File

@ -788,12 +788,14 @@ valid structure defined by an extension, containing ptext:sType and
ptext:pNext members as described in the <<vulkan-styleguide,Vulkan
Documentation and Extensions>> document in the section "`Extension
Interactions`".
The set of structures connected by ptext:pNext pointers is referred to as a
_pname:pNext chain_.
If that extension is supported by the implementation, then it must: be
enabled.
Any component of the implementation (the loader, any enabled layers, and
drivers) must: skip over, without processing (other than reading the
pname:sType and pname:pNext members) any chained structures with pname:sType
values not defined by extensions supported by that component.
pname:sType and pname:pNext members) any structures in the chain with
pname:sType values not defined by extensions supported by that component.
Extension structures are not described in the base Vulkan specification, but
either in layered specifications incorporating those extensions, or in

View File

@ -327,11 +327,12 @@ include::../api/structs/VkVertexInputBindingDescription.txt[]
--
// refBegin VkVertexInputRate Specify rate at which vertex attributes are pulled from buffers
include::../api/enums/VkVertexInputRate.txt[]
--
** ename:VK_VERTEX_INPUT_RATE_VERTEX indicates that vertex attribute
addressing is a function of the vertex index.
** ename:VK_VERTEX_INPUT_RATE_INSTANCE indicates that vertex attribute
addressing is a function of the instance index.
--
.Valid Usage
****

View File

@ -136,7 +136,7 @@ Behavior is undefined if an extension physical-device command is called on a
physical device that does not support the extension.
Device extensions may: define structures that can: be added to the
pNext-chain of physical-device commands.
ptext:pNext chain of physical-device commands.
Behavior is undefined if such an extension structure is passed to a physical
device command for a physical device that does not support the extension.

View File

@ -584,7 +584,7 @@ include::../api/protos/vkGetPhysicalDeviceMemoryProperties2KHR.txt[]
fname:vkGetPhysicalDeviceMemoryProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceMemoryProperties, with the ability to return
extended information via chained output structures.
extended information in a pname:pNext chain of output structures.
include::../validity/protos/vkGetPhysicalDeviceMemoryProperties2KHR.txt[]
@ -617,7 +617,7 @@ include::../api/structs/VkMemoryHeap.txt[]
--
// refBegin VkMemoryHeapFlagBits Bitmask specifying attribute flags for a heap
include::../api/enums/VkMemoryHeapFlagBits.txt[]
--
** if pname:flags contains ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, it means
the heap corresponds to device local memory.
Device local memory may: have different performance characteristics
@ -630,6 +630,7 @@ ifdef::VK_KHX_device_group_creation[]
By default, an allocation from such a heap will be replicated to each
physical device's instance of the heap.
endif::VK_KHX_device_group_creation[]
--
include::../validity/structs/VkMemoryHeap.txt[]
@ -648,7 +649,7 @@ include::../api/structs/VkMemoryType.txt[]
--
// refBegin VkMemoryPropertyFlagBits Bitmask specifying properties for a memory type
include::../api/enums/VkMemoryPropertyFlagBits.txt[]
--
** if pname:propertyFlags has the
ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set, memory allocated
with this type is the most efficient for device access.
@ -676,6 +677,7 @@ include::../api/enums/VkMemoryPropertyFlagBits.txt[]
Additionally, the object's backing memory may: be provided by the
implementation lazily as specified in <<memory-device-lazy_allocation,
Lazily Allocated Memory>>.
--
include::../validity/structs/VkMemoryType.txt[]
@ -759,7 +761,7 @@ include::../api/structs/VkMemoryAllocateInfo.txt[]
will come from.
ifdef::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
If the pname:pNext extension chain contains an instance of
If the pname:pNext chain contains an instance of
ifdef::VK_KHX_external_memory_win32[]
slink:VkImportMemoryWin32HandleInfoKHX with a non-zero value for
sname:VkImportMemoryWin32HandleInfoKHX::pname:handleType,
@ -812,7 +814,7 @@ endif::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
and the calling command's sname:VkDevice
* pname:allocationSize must: be greater than `0`
ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
sname:VkExportMemoryAllocateInfoKHX, and any of the handle types
specified in sname:VkExportMemoryAllocateInfoKHX::pname:handleTypes
require a dedicated allocation, as reported by
@ -820,19 +822,19 @@ ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
sname:VkExternalImageFormatPropertiesKHX::pname:externalMemoryProperties::pname:externalMemoryFeatures
or
sname:VkExternalBufferPropertiesKHX::pname:externalMemoryProperties::pname:externalMemoryFeatures,
the pname:pNext extension chain must: contain an instance of
the pname:pNext chain must: contain an instance of
sname:VkDedicatedAllocationMemoryAllocateInfoNV with either its
pname:image or pname:buffer field set to a value other than
ename:VK_NULL_HANDLE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory+VK_NV_external_memory[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
slink:VkExportMemoryAllocateInfoKHX, it must: not contain an instance of
slink:VkExportMemoryAllocateInfoNV or
slink:VkExportMemoryWin32HandleInfoNV.
endif::VK_KHX_external_memory+VK_NV_external_memory[]
ifdef::VK_KHX_external_memory_win32+VK_NV_external_memory_win32[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
slink:VkImportMemoryWin32HandleInfoKHX, it must: not contain an instance
of slink:VkImportMemoryWin32HandleInfoNV.
endif::VK_KHX_external_memory_win32+VK_NV_external_memory_win32[]
@ -842,6 +844,19 @@ ifdef::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
pname:allocationSize and pname:memoryTypeIndex must: match those
specified when the memory object being imported was created.
endif::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
****
ifdef::editing-notes[]
[NOTE]
.editing-note
====
Split Valid Usage block into two parts to work around asciidoctor-pdf
problem (internal issue 683).
====
endif::editing-notes[]
.Valid Usage
****
ifdef::VK_KHX_external_memory+VK_KHX_device_group[]
* If the parameters define an import operation and the external handle
specified was created by the Vulkan API, the device mask specified by
@ -865,7 +880,7 @@ ifdef::VK_KHX_external_memory_win32[]
pname:allocationSize must: match the size reported in the memory
requirements of the pname:image or pname:buffer member of the instance
of sname:VkDedicatedAllocationMemoryAllocateInfoNV included in the
pname:pNext extension chain.
pname:pNext chain.
* If the parameters define an import operation and the external handle
type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHX,
pname:allocationSize must: match the size specified when creating the
@ -1290,10 +1305,10 @@ include::../api/structs/VkMemoryAllocateFlagsInfoKHX.txt[]
--
// refBegin VkMemoryAllocateFlagBitsKHX Bitmask specifying flags for a device memory allocation
include::../api/enums/VkMemoryAllocateFlagBitsKHX.txt[]
--
** if pname:flags contains ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX,
memory will be allocated for the devices in pname:deviceMask.
+
--
* pname:deviceMask is a mask of physical devices in the logical device,
indicating that memory must: be allocated on each device in the mask, if
ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX is set.
@ -1675,7 +1690,7 @@ include::../api/protos/vkGetDeviceGroupPeerMemoryFeaturesKHX.txt[]
--
// refBegin VkPeerMemoryFeatureFlagBitsKHX Bitmask specifying supported peer memory features
include::../api/enums/VkPeerMemoryFeatureFlagBitsKHX.txt[]
--
** if pname:pPeerMemoryFeatures contains
ename:VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX, the memory can: be
accessed as the source of a ftext:vkCmdCopy* command.
@ -1689,6 +1704,7 @@ include::../api/enums/VkPeerMemoryFeatureFlagBitsKHX.txt[]
ename:VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX, the memory can: be
written as any other memory access type.
Shader atomics are considered to be writes.
--
ename:VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX must: be supported for all
heaps.

View File

@ -1314,14 +1314,13 @@ include::../api/protos/vkCmdBindPipeline.txt[]
--
// refBegin VkPipelineBindPoint Specify the bind point of a pipeline object to a command buffer
include::../api/enums/VkPipelineBindPoint.txt[]
--
+
specifying whether pname:pipeline will be bound as a compute
(ename:VK_PIPELINE_BIND_POINT_COMPUTE) or graphics
(ename:VK_PIPELINE_BIND_POINT_GRAPHICS) pipeline.
There are separate bind points for each of graphics and compute, so binding
one does not disturb the other.
+
--
* pname:pipeline is the pipeline to be bound.
Once bound, a pipeline binding affects subsequent graphics or compute

View File

@ -70,10 +70,10 @@ include::../api/structs/VkPipelineRasterizationStateCreateInfo.txt[]
* pname:lineWidth is the width of rasterized line segments.
ifdef::VK_AMD_rasterization_order[]
The application can: also chain a
The application can: also add a
sname:VkPipelineRasterizationStateRasterizationOrderAMD structure to the
sname:VkPipelineRasterizationStateCreateInfo structure through its
pname:pNext member.
pname:pNext chain of a sname:VkPipelineRasterizationStateCreateInfo
structure.
This structure enables selecting the rasterization order to use when
rendering with the corresponding graphics pipeline as described in
<<primrast-order, Rasterization Order>>.
@ -199,9 +199,9 @@ include::../api/enums/VkRasterizationOrderAMD.txt[]
<<drawing-primitive-order, primitive order>>.
The rasterization order to use for a graphics pipeline is specified by
chaining a sname:VkPipelineRasterizationStateRasterizationOrderAMD structure
through the pname:pNext member to
slink:VkPipelineRasterizationStateCreateInfo.
adding a sname:VkPipelineRasterizationStateRasterizationOrderAMD structure
to the pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
structure.
The sname:VkPipelineRasterizationStateRasterizationOrderAMD structure is
defined as:

View File

@ -65,6 +65,14 @@ include::../api/structs/VkQueryPoolCreateInfo.txt[]
--
// refBegin VkQueryType Specify the type of queries managed by a query pool
include::../api/enums/VkQueryType.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of the enums here.
====
endif::editing-notes[]
--
* pname:queryCount is the number of queries managed by the pool.
* pname:pipelineStatistics is a bitmask indicating which counters will be
@ -398,8 +406,7 @@ include::../api/protos/vkGetQueryPoolResults.txt[]
--
// refBegin VkQueryResultFlagBits Bitmask specifying how and when query results are returned
include::../api/enums/VkQueryResultFlagBits.txt[]
--
+
** ename:VK_QUERY_RESULT_64_BIT indicates the results will be written as
an array of 64-bit unsigned integer values.
If this bit is not set, the results will be written as an array of
@ -410,6 +417,7 @@ include::../api/enums/VkQueryResultFlagBits.txt[]
availability status accompanies the results.
** ename:VK_QUERY_RESULT_PARTIAL_BIT indicates that returning partial
results is acceptable.
--
If no bits are set in pname:flags, and all requested queries are in the
available state, results are written as an array of 32-bit unsigned integer

View File

@ -356,6 +356,14 @@ include::../api/structs/VkAttachmentDescription.txt[]
--
// refBegin VkAttachmentDescriptionFlagBits Bitmask specifying additional properties of an attachment
include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of the enums here.
====
endif::editing-notes[]
--
* pname:format is a elink:VkFormat value specifying the format of the
image that will be used for the attachment.
@ -368,7 +376,7 @@ include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
--
// refBegin VkAttachmentLoadOp Specify how contents of an attachment are treated at the beginning of a subpass
include::../api/enums/VkAttachmentLoadOp.txt[]
--
** ename:VK_ATTACHMENT_LOAD_OP_LOAD means the previous contents of the
image within the render area will be preserved.
For attachments with a depth/stencil format, this uses the access type
@ -389,6 +397,7 @@ include::../api/enums/VkAttachmentLoadOp.txt[]
ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
For attachments with a color format, this uses the access type
ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
--
* pname:storeOp specifies how the contents of color and depth components
of the attachment are treated at the end of the subpass where it is last
used:
@ -396,7 +405,7 @@ include::../api/enums/VkAttachmentLoadOp.txt[]
--
// refBegin VkAttachmentStoreOp Specify how contents of an attachment are treated at the end of a subpass
include::../api/enums/VkAttachmentStoreOp.txt[]
--
** ename:VK_ATTACHMENT_STORE_OP_STORE means the contents generated during
the render pass and within the render area are written to memory.
For attachments with a depth/stencil format, this uses the access type
@ -410,6 +419,7 @@ include::../api/enums/VkAttachmentStoreOp.txt[]
ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
For attachments with a color format, this uses the access type
ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
--
* pname:stencilLoadOp specifies how the contents of stencil components of
the attachment are treated at the beginning of the subpass where it is
first used, and must: be one of the same values allowed for pname:loadOp
@ -578,9 +588,16 @@ include::../api/structs/VkSubpassDescription.txt[]
--
// refBegin VkSubpassDescriptionFlagBits Bitmask specifying usage of a subpass
include::../api/enums/VkSubpassDescriptionFlagBits.txt[]
--
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) This section looks odd unless `VK_NVX_multiview_per_view_attributes`
is enabled, since no bits are defined for the type.
====
endif::editing-notes[]
ifdef::VK_NVX_multiview_per_view_attributes[]
+
** ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX indicates that
shaders compiled for this subpass write the attributes for all views in
a single invocation of each vertex processing stage.
@ -592,6 +609,7 @@ ifdef::VK_NVX_multiview_per_view_attributes[]
only differ in value in the x component.
Per-view viewport mask can: also be used.
endif::VK_NVX_multiview_per_view_attributes[]
--
* pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
whether this is a compute or graphics subpass.
Currently, only graphics subpasses are supported.
@ -1285,8 +1303,7 @@ include::../api/protos/vkCmdBeginRenderPass.txt[]
--
// refBegin VkSubpassContents Specify how commands in the first subpass of a render pass are provided
include::../api/enums/VkSubpassContents.txt[]
--
+
If pname:contents is ename:VK_SUBPASS_CONTENTS_INLINE, the contents of the
subpass will be recorded inline in the primary command buffer, and secondary
command buffers must: not be executed within the subpass.
@ -1295,6 +1312,7 @@ the contents are recorded in secondary command buffers that will be called
from the primary command buffer, and fname:vkCmdExecuteCommands is the only
valid command on the command buffer until fname:vkCmdNextSubpass or
fname:vkCmdEndRenderPass.
--
After beginning a render pass instance, the command buffer is ready to
record the commands for the first subpass of that render pass.

View File

@ -176,12 +176,12 @@ ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
dedicated allocation, as reported by
flink:vkGetPhysicalDeviceExternalBufferPropertiesKHX in
sname:VkExternalBufferPropertiesKHX::pname:externalMemoryProperties::pname:externalMemoryFeatures,
the pname:pNext extension chain must: contain an instance of
the pname:pNext chain must: contain an instance of
sname:VkDedicatedAllocationBufferCreateInfoNV with its
pname:dedicatedAllocation field set to ename:VK_TRUE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext extension contains an instance of
slink:VkExternalMemoryBufferCreateInfoKHX, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalBufferPropertiesKHX::pname:externalMemoryProperties.pname:compatibleHandleTypes,
@ -765,23 +765,23 @@ endif::VK_KHR_maintenance1[]
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
ifdef::VK_NV_external_memory+VK_KHX_external_memory[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoNV, it must: not contain an
instance of slink:VkExternalMemoryImageCreateInfoKHX.
endif::VK_NV_external_memory+VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
sname:VkExternalMemoryImageCreateInfoKHX, and any of the handle types
specified in sname:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes
require a dedicated allocation, as reported by
flink:vkGetPhysicalDeviceImageFormatProperties2KHR in
sname:VkExternalImageFormatPropertiesKHX::pname:externalMemoryProperties::pname:externalMemoryFeatures,
the pname:pNext extension chain must: contain an instance of
the pname:pNext chain must: contain an instance of
sname:VkDedicatedAllocationImageCreateInfoNV with its
pname:dedicatedAllocation field set to ename:VK_TRUE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoKHX, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalImageFormatPropertiesKHX::pname:externalMemoryProperties::pname:compatibleHandleTypes,
@ -789,12 +789,11 @@ ifdef::VK_KHX_external_memory[]
pname:format, pname:type, pname:tiling, pname:usage, and pname:flags
equal to those in this structure, and with an instance of
slink:VkPhysicalDeviceExternalImageFormatInfoKHX in the pname:pNext
structure chain, with a pname:handleType equal to any one of the handle
types specified in
slink:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes
chain, with a pname:handleType equal to any one of the handle types
specified in slink:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes
endif::VK_KHX_external_memory[]
ifdef::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
* If the pname:pNext extension chain contains an instance of
* If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoNV, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryProperties::pname:compatibleHandleTypes,
@ -2439,14 +2438,10 @@ endif::VK_KHX_device_group[]
[[resources-bufferimagegranularity,Buffer-Image Granularity]]
.Buffer-Image Granularity
There is an implementation-dependent limit, pname:bufferImageGranularity,
which specifies a page-like granularity at which buffer, linear image and
optimal image resources must: be placed in adjacent memory locations to
avoid aliasing.
which specifies a page-like granularity at which linear and non-linear
resources must: be placed in adjacent memory locations to avoid aliasing.
Two resources which do not satisfy this granularity requirement are said to
<<resources-memory-aliasing,alias>>.
Linear image resource are images created with ename:VK_IMAGE_TILING_LINEAR
and optimal image resources are those created with
ename:VK_IMAGE_TILING_OPTIMAL.
pname:bufferImageGranularity is specified in bytes, and must: be a power of
two.
Implementations which do not require such an additional granularity may:
@ -2455,16 +2450,14 @@ report a value of one.
[NOTE]
.Note
====
pname:bufferImageGranularity is really a granularity between "linear"
resources, including buffers and images with linear tiling, vs.
"optimal" resources, i.e. images with optimal tiling.
It would have been better named "linearOptimalGranularity".
Despite its name, pname:bufferImageGranularity is really a granularity
between "linear" and "non-linear" resources.
====
Given resourceA at the lower memory offset and resourceB at the higher
memory offset in the same sname:VkDeviceMemory object, where one of the
resources is a buffer or a linear image and the other is an optimal image,
and the following:
memory offset in the same sname:VkDeviceMemory object, where one resource
linear and the other is non-linear (as defined in the
<<glossary-linear-resource,glossary>>), and the following:
[source,c]
---------------------------------------------------
@ -2486,10 +2479,9 @@ resource (B) must: be on separate "`pages`" of size
pname:bufferImageGranularity.
pname:bufferImageGranularity may: be different than the physical page size
of the memory heap.
This restriction is only needed when a buffer or a linear image is at
adjacent memory location with an optimal image and both will be used
simultaneously.
Adjacent buffers' or adjacent images' memory ranges can: be closer than
This restriction is only needed when a linear resource and a non-linear
resource are adjacent in memory and will be used simultaneously.
The memory ranges of adjacent resources can: be closer than
pname:bufferImageGranularity, provided they meet the pname:alignment
requirement for the objects in question.
@ -2607,8 +2599,8 @@ endif::VK_KHX_external_memory[]
== Memory Aliasing
A range of a sname:VkDeviceMemory allocation is _aliased_ if it is bound to
multiple resources simultaneously, via flink:vkBindImageMemory,
flink:vkBindBufferMemory,
multiple resources simultaneously, as described below, via
flink:vkBindImageMemory, flink:vkBindBufferMemory,
ifndef::VK_KHX_external_memory[]
or via <<sparsememory-resource-binding,sparse memory bindings>>.
endif::VK_KHX_external_memory[]
@ -2617,24 +2609,20 @@ via <<sparsememory-resource-binding,sparse memory bindings>>, or by binding
the memory to resources in multiple Vulkan instances or external APIs using
external memory handle export and import mechanisms.
endif::VK_KHX_external_memory[]
A memory range aliased between two images or two buffers is defined to be
the intersection of the memory ranges bound to the two resources.
A memory range aliased between two resources where one is a buffer or a
linear image, and the other is an optimal image, is defined to be the
intersection of the memory ranges bound to the two resources, where each
range is first padded to be aligned to the pname:bufferImageGranularity.
Consider two resources, resource~A~ and resource~B~, bound respectively to
memory range~A~ and range~B~.
Let paddedRange~A~ and paddedRange~B~ be, respectively, range~A~ and
range~B~ aligned to pname:bufferImageGranularity.
If the resources are both linear or both non-linear (as defined in the
<<glossary-linear-resource,glossary>>), then the resources _alias_ the
memory in the intersection of range~A~ and range~B~.
If one resource is linear and the other is non-linear, then the resources
_alias_ the memory in the intersection of paddedRange~A~ and paddedRange~B~.
Applications can: alias memory, but use of multiple aliases is subject to
several constraints.
ifdef::editing-notes[]
[NOTE]
.editing-note
==================
(Jon) Can simplify the conditional structure by rearranging the conditional
clause to precede end of sentence.
==================
endif::editing-notes[]
[NOTE]
.Note
====
@ -2662,7 +2650,7 @@ That is, the host has a well-defined addressing scheme to interpret the
contents, and thus the layout of the data in memory can: be consistently
interpreted across aliases if each of those aliases is a host-accessible
subresource.
Opaque images and linear image subresources in other layouts are not
Non-linear images, and linear image subresources in other layouts, are not
host-accessible.
If two aliases are both host-accessible, then they interpret the contents of

View File

@ -48,8 +48,15 @@ include::../api/structs/VkSamplerCreateInfo.txt[]
--
// refBegin VkFilter Specify filters used for texture lookups
include::../api/enums/VkFilter.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of the enums here.
====
endif::editing-notes[]
--
+
* pname:minFilter is the minification filter to apply to lookups, and is
of type elink:VkFilter.
* pname:mipmapMode is the mipmap filter to apply to lookups as described
@ -59,8 +66,15 @@ include::../api/enums/VkFilter.txt[]
--
// refBegin VkSamplerMipmapMode Specify mipmap mode used for texture lookups
include::../api/enums/VkSamplerMipmapMode.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of the enums here.
====
endif::editing-notes[]
--
+
* pname:addressModeU is the addressing mode for outside [0..1] range for U
coordinate.
See elink:VkSamplerAddressMode.
@ -99,8 +113,15 @@ include::../api/enums/VkSamplerMipmapMode.txt[]
--
// refBegin VkBorderColor Specify border color used for texture lookups
include::../api/enums/VkBorderColor.txt[]
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of the enums here.
====
endif::editing-notes[]
--
+
* [[samplers-unnormalizedCoordinates]] pname:unnormalizedCoordinates
controls whether to use unnormalized or normalized texel coordinates to
address texels of the image.

View File

@ -74,6 +74,15 @@ slink:VkPhysicalDeviceFeatures.
advertised on a finer grain via the following features:
+
--
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Something wrong with markup here - "`Sparse residency support`"
doesn't show up in the bullet point.
====
endif::editing-notes[]
*** <<features-features-sparseResidencyBuffer,pname:sparseResidencyBuffer>>:
Support for creating sname:VkBuffer objects with the
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT.
@ -538,7 +547,7 @@ Hardware that supports access to unbound pages without causing a fault may:
support pname:residencyNonResidentStrict.
Not faulting on access to unbound pages is not enough to support
pname:sparseResidencyNonResidentStrict.
pname:residencyNonResidentStrict.
An implementation must: also guarantee that reads after writes to unbound
regions of the resource always return data for the read as if the memory
contains zeros.
@ -547,7 +556,7 @@ be possible.
Hardware that does not fault, but does not guarantee correct read values
will not require dummy pages, but also must: not support
pname:sparseResidencyNonResidentStrict.
pname:residencyNonResidentStrict.
Hardware that cannot: access unbound pages without causing a fault will
require the implementation to bind the entire device virtual address range
@ -789,7 +798,7 @@ include::../api/structs/VkSparseImageFormatProperties.txt[]
--
// refBegin VkSparseImageFormatFlagBits Bitmask specifying additional information about a sparse image resource
include::../api/enums/VkSparseImageFormatFlagBits.txt[]
--
** If ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT is set, the image
uses a single mip tail region for all array layers.
** If ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is set, the first
@ -800,6 +809,7 @@ include::../api/enums/VkSparseImageFormatFlagBits.txt[]
image uses non-standard sparse image block dimensions, and the
pname:imageGranularity values do not match the standard sparse image
block dimensions for the given pixel format.
--
include::../validity/structs/VkSparseImageFormatProperties.txt[]
@ -889,7 +899,8 @@ include::../api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.txt[]
fname:vkGetPhysicalDeviceSparseImageFormatProperties2KHR behaves identically
to flink:vkGetPhysicalDeviceSparseImageFormatProperties, with the ability to
return extended information via chained output structures.
return extended information by adding extension structures to its
pname:pNext chain.
include::../validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.txt[]
@ -1206,10 +1217,10 @@ include::../api/structs/VkSparseMemoryBind.txt[]
--
// refBegin VkSparseMemoryBindFlagBits Bitmask specifying usage of a sparse memory binding operation
include::../api/enums/VkSparseMemoryBindFlagBits.txt[]
--
+
** ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT indicates that the memory
being bound is only for the metadata aspect.
--
The _binding range_ [eq]#[pname:resourceOffset, pname:resourceOffset {plus}
pname:size)# has different constraints based on pname:flags.

View File

@ -924,11 +924,11 @@ include::../api/structs/VkFenceCreateInfo.txt[]
--
// refBegin VkFenceCreateFlagBits Bitmask specifying initial state and behavior of a fence
include::../api/enums/VkFenceCreateFlagBits.txt[]
--
+
If pname:flags contains ename:VK_FENCE_CREATE_SIGNALED_BIT then the fence
object is created in the signaled state; otherwise it is created in the
unsignaled state.
--
include::../validity/structs/VkFenceCreateInfo.txt[]
@ -2143,10 +2143,18 @@ include::../api/protos/vkCmdPipelineBarrier.txt[]
--
// refBegin VkDependencyFlagBits Bitmask specifying how execution and memory dependencies are formed
include::../api/enums/VkDependencyFlagBits.txt[]
--
ifdef::editing-notes[]
[NOTE]
.editing-note
====
(Jon) Missing a description of some of the enums here.
====
endif::editing-notes[]
** ename:VK_DEPENDENCY_BY_REGION_BIT signifies that dependencies will be
<<synchronization-framebuffer-regions, framebuffer-local>>.
--
* pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
array.
* pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier

View File

@ -616,13 +616,14 @@ defined if pname:robustBufferAccess is enabled.
==================
endif::editing-notes[]
If the sname:VkPhysicalDeviceSparseProperties property
pname:residencyNonResidentStrict is true, a sparse unbound texel is replaced
with 0 or 0.0 values for integer and floating-point components of the image
format, respectively.
If the
slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
property is ename:VK_TRUE, a sparse unbound texel is replaced with 0 or 0.0
values for integer and floating-point components of the image format,
respectively.
If pname:residencyNonResidentStrict is false, the read must: be safe, but
the value of the sparse unbound texel is undefined.
If pname:residencyNonResidentStrict is ename:VK_FALSE, the read must: be
safe, but the value of the sparse unbound texel is undefined.
[[textures-depth-compare-operation]]
@ -795,9 +796,9 @@ no effect.
If the texel attempts to write to an unbound region of a sparse image, the
texel is a sparse unbound texel.
In such a case, if the sname:VkPhysicalDeviceSparseProperties property
pname:residencyNonResidentStrict is ename:VK_TRUE, the sparse unbound texel
write has no effect.
In such a case, if the
slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
property is ename:VK_TRUE, the sparse unbound texel write has no effect.
If pname:residencyNonResidentStrict is ename:VK_FALSE, the effect of the
write is undefined but must: be safe.
In addition, the write may: have a side effect that is visible to other

View File

@ -65,10 +65,10 @@ include::../api/structs/VkPipelineViewportSwizzleStateCreateInfoNV.txt[]
include::../validity/structs/VkPipelineViewportSwizzleStateCreateInfoNV.txt[]
The sname:VkPipelineViewportSwizzleStateCreateInfoNV state is set by
chaining an instance of this structure to the pname:pNext of an instance of
the sname:VkPipelineViewportStateCreateInfo structure and setting the
graphics pipeline state with flink:vkCreateGraphicsPipelines.
The sname:VkPipelineViewportSwizzleStateCreateInfoNV state is set by adding
an instance of this structure to the pname:pNext chain of an instance of the
sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
pipeline state with flink:vkCreateGraphicsPipelines.
Each viewport specified from 0 to pname:viewportCount - 1 has its x,y,z,w
swizzle state set to the corresponding pname:x, pname:y, pname:z and pname:w
@ -378,18 +378,18 @@ then the vertex's normalized device coordinates are
[latexmath]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\left(
\begin{array}{c}
x_d \\
y_d \\
z_d
\end{array}
\begin{array}{c}
x_d \\
y_d \\
z_d
\end{array}
\right) =
\left(
\begin{array}{c}
\frac{x_c}{w_c} \\
\frac{y_c}{w_c} \\
\frac{z_c}{w_c}
\end{array}
\begin{array}{c}
\frac{x_c}{w_c} \\
\frac{y_c}{w_c} \\
\frac{z_c}{w_c}
\end{array}
\right)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

@ -9,6 +9,7 @@ extensions['VK_EXT_direct_mode_display'] = [ 'VK_KHR_display', 'VK_KHR_surface'
extensions['VK_EXT_discard_rectangles'] = [ 'VK_KHR_get_physical_device_properties2' ]
extensions['VK_EXT_display_control'] = [ 'VK_EXT_display_surface_counter', 'VK_KHR_display', 'VK_KHR_surface', 'VK_KHR_swapchain' ]
extensions['VK_EXT_display_surface_counter'] = [ 'VK_KHR_display', 'VK_KHR_surface' ]
extensions['VK_EXT_swapchain_colorspace'] = [ 'VK_KHR_surface' ]
extensions['VK_GOOGLE_display_timing'] = [ 'VK_KHR_surface', 'VK_KHR_swapchain' ]
extensions['VK_KHR_android_surface'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_display'] = [ 'VK_KHR_surface' ]
@ -39,6 +40,6 @@ extensions['VK_NV_external_memory_win32'] = [ 'VK_NV_external_memory', 'VK_NV_ex
extensions['VK_NV_win32_keyed_mutex'] = [ 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32' ]
# Define lists of all / KHR / KHX extensions
allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_EXT_acquire_xlib_display', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ]
allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_EXT_acquire_xlib_display', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_swapchain_colorspace', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ]
khrExts = [ 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface' ]
khxExts = [ 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex' ]

View File

@ -9,6 +9,7 @@ extensions[VK_EXT_direct_mode_display]="VK_KHR_display VK_KHR_surface"
extensions[VK_EXT_discard_rectangles]="VK_KHR_get_physical_device_properties2"
extensions[VK_EXT_display_control]="VK_EXT_display_surface_counter VK_KHR_display VK_KHR_surface VK_KHR_swapchain"
extensions[VK_EXT_display_surface_counter]="VK_KHR_display VK_KHR_surface"
extensions[VK_EXT_swapchain_colorspace]="VK_KHR_surface"
extensions[VK_GOOGLE_display_timing]="VK_KHR_surface VK_KHR_swapchain"
extensions[VK_KHR_android_surface]="VK_KHR_surface"
extensions[VK_KHR_display]="VK_KHR_surface"
@ -39,6 +40,6 @@ extensions[VK_NV_external_memory_win32]="VK_NV_external_memory VK_NV_external_me
extensions[VK_NV_win32_keyed_mutex]="VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32"
# Define lists of all / KHR / KHX extensions
allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_EXT_acquire_xlib_display VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex"
allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_EXT_acquire_xlib_display VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_swapchain_colorspace VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex"
khrExts="VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface"
khxExts="VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex"

View File

@ -355,8 +355,15 @@ member.
==== Attributes of tag:member tags
* attr:validextensionstructs - only valid on the `pNext` member of a
struct. This is a comma-separated list of structures that may be
accepted by `pNext` instead of `NULL`
struct.
This is a comma-separated list of structures that may be accepted by
`pNext` instead of `NULL`.
This should usually only be put on the top-level structure that is
extended, for all possible chained structures - the chained structures
themselves should be tagged with attr:noautovalidity.
This will generate a validity statement on the top level structure
that validates the entire chain in one go, rather than each chained
structure repeating the list of valid structs.
* attr:values - only valid on the `sType` member of a struct. This is a
comma-separated list of enumerant values that are valid for the
structure type; usually there is only a single value.

View File

@ -789,3 +789,7 @@ If an extension needs a specific ordering of its extension structure with
respect to other extensions in a chain to provide deterministic results, it
must define the required ordering and expected behavior as part of its
specification.
Validation of such extended structure chains is automatically generated from
the registry, as described in the description of attr:validextensionstructs
in link:registry.html[the registry document].

View File

@ -110,6 +110,49 @@ typedef union VkClearColorValue {
----
[[naming-extension-structures]]
=== Extension Structure Names
Structures which extend other structures through the pname:pNext chain
should reflect the name of the base structure they extend.
Currently there are two examples of such naming schemes.
New structures which add extended object creation parameters to a base
structure should use this naming scheme:
.Extended Object Information Structures
[width="60%",options="header"]
|====
| Base Structure Name | Extension Structure Name
| `Vk__Object__CreateInfo`
| `Vk__ObjectName__CreateInfo__Author__`
|====
`_Object_` is the name of the object being created.
`_Name_` is a short name for the extension or the new information added by
that extension.
`_Author_` is the author ID of the extension.
New structures which extend API queries, such as the
`vkGetPhysicalDeviceFeatures2KHR` and `vkGetPhysicalDeviceProperties2KHR`
commands defined by the `VK_KHR_get_physical_device_properties2` extension,
should use this naming scheme:
.Extended Query Structures
[width="60%",options="header"]
|====
| Base Structure Name | Extension Structure Name
| `vkGetPhysicalDeviceFeatures2KHR`
| `VkPhysicalDevice__Name__Features__Author__`
| `vkGetPhysicalDeviceProperties2KHR`
| `VkPhysicalDevice__Name__Properties__Author__`
|====
`_Name_` is a short name for the extension, or for the new feature or
property being queried, such as `Multiview` or `DiscardRectangle`.
`_Author_` is the author ID of the extension.
== Enumerant Names
Enumerants include an underscore `_` as a delimiter between words, with

View File

@ -134,6 +134,10 @@ of a structure as a "`color space`" value.
miptail | "`mipmap *term*`" may be used in time
3+h| Exceptions
| mipmap | mip map | Exception for historical reasons
| pname:pNext chain
| pname:pNext-chain +
pname:pNext extension chain
|
| swapchain | swap chain | Exception due to heavy use in WSI extensions
| happen-before +
happen-after | happen before +

View File

@ -153,6 +153,8 @@ include::style/writing.txt[]
= Revision History
* 2017-03-19 - Add naming rule for <<naming-extension-structures, Extension
Structure Names>>.
* 2017-02-11 - Finish transitioning to asciidoctor markup.
* 2016-09-28 - Add asciidoc math markup guidelines.
* 2016-09-16 - Make style guide markup more consistent with its own

View File

@ -667,12 +667,10 @@ class ValidityOutputGenerator(OutputGenerator):
paramname = param.find('name')
paramtype = param.find('type')
asciidoc += self.makeParameterName(paramname.text)
validextensionstructs = param.attrib.get('validextensionstructs')
asciidoc += ' must: be `NULL`'
extensionstructs = []
if validextensionstructs is not None:
extensionstructs = []
# Check each structure name and skip it if not required by the
# generator. This allows tagging extension structs in the XML
# that are only included in validity when needed for the spec
@ -686,12 +684,23 @@ class ValidityOutputGenerator(OutputGenerator):
extensionstructs.append('slink:' + struct)
else:
self.logMsg('diag', 'makeStructureExtensionPointer: struct', struct, 'IS NOT required')
if len(extensionstructs) > 0:
asciidoc += ', or a pointer to a valid instance of '
if len(extensionstructs) == 1:
asciidoc += extensionstructs[0]
else:
asciidoc += (', ').join(extensionstructs[:-1]) + ', or ' + extensionstructs[-1]
if len(extensionstructs) == 0:
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be `NULL`'
elif len(extensionstructs) == 1:
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be `NULL` or a pointer to a valid instance of '
asciidoc += extensionstructs[0]
else:
asciidoc += 'Each '
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' member of any structure (including this one) in the pname:pNext chain must: be either `NULL` or a pointer to a valid instance of '
if len(extensionstructs) == 2:
asciidoc += extensionstructs[0] + ' or ' + extensionstructs[1]
else:
asciidoc += (', ').join(extensionstructs[:-1]) + ', or ' + extensionstructs[-1]
asciidoc += '\n'
@ -713,14 +722,15 @@ class ValidityOutputGenerator(OutputGenerator):
# Get the type's category
typecategory = self.getTypeCategory(paramtype.text)
# Generate language to independently validate a parameter
if paramtype.text == 'VkStructureType' and paramname.text == 'sType':
asciidoc += self.makeStructureType(blockname, param)
elif paramtype.text == 'void' and paramname.text == 'pNext':
asciidoc += self.makeStructureExtensionPointer(param)
else:
asciidoc += self.createValidationLineForParameter(param, params, typecategory)
if param.attrib.get('noautovalidity') is None:
# Generate language to independently validate a parameter
if paramtype.text == 'VkStructureType' and paramname.text == 'sType':
asciidoc += self.makeStructureType(blockname, param)
elif paramtype.text == 'void' and paramname.text == 'pNext':
asciidoc += self.makeStructureExtensionPointer(param)
else:
asciidoc += self.createValidationLineForParameter(param, params, typecategory)
# Ensure that any parenting is properly validated, and list that a handle was found
if typecategory == 'handle':

View File

@ -112,7 +112,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<type category="define">// Vulkan 1.0 version number
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)</type> <!-- The patch version here should never be set to anything other than 0 -->
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 44</type>
#define <name>VK_HEADER_VERSION</name> 45</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -1474,7 +1474,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkDisplayPresentInfoKHR">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDeviceGroupPresentInfoKHX,VkPresentTimesInfoGOOGLE">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkRect2D</type> <name>srcRect</name></member> <!-- Rectangle within the presentable image to read pixel data from when presenting to the display. -->
<member><type>VkRect2D</type> <name>dstRect</name></member> <!-- Rectangle within the current display mode's visible region to display srcRectangle in. -->
<member><type>VkBool32</type> <name>persistent</name></member> <!-- For smart displays, use buffered mode. If the display properties member "persistentMode" is VK_FALSE, this member must always be VK_FALSE. -->
@ -1587,7 +1587,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPipelineRasterizationStateRasterizationOrderAMD">
<member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkRasterizationOrderAMD</type> <name>rasterizationOrder</name></member> <!-- Rasterization order to use for the pipeline -->
</type>
<type category="struct" name="VkDebugMarkerObjectNameInfoEXT">
@ -1614,17 +1614,17 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkDedicatedAllocationImageCreateInfoNV">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this image uses a dedicated allocation -->
</type>
<type category="struct" name="VkDedicatedAllocationBufferCreateInfoNV">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this buffer uses a dedicated allocation -->
</type>
<type category="struct" name="VkDedicatedAllocationMemoryAllocateInfoNV">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkImage</type> <name>image</name></member> <!-- Image that this allocation will be bound to -->
<member optional="true"><type>VkBuffer</type> <name>buffer</name></member> <!-- Buffer that this allocation will be bound to -->
</type>
@ -1658,7 +1658,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoNV">
<member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>acquireCount</name></member>
<member len="acquireCount">const <type>VkDeviceMemory</type>* <name>pAcquireSyncs</name></member>
<member len="acquireCount">const <type>uint64_t</type>* <name>pAcquireKeys</name></member>
@ -1768,7 +1768,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<member><type>VkShaderStageFlags</type> <name>stageFlags</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceFeatures2KHR">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkPhysicalDeviceMultiviewFeaturesKHX"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkPhysicalDeviceFeatures</type> <name>features</name></member>
</type>
@ -1832,7 +1832,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPhysicalDeviceExternalImageFormatInfoKHX">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkExternalMemoryHandleTypeFlagBitsKHX</type> <name>handleType</name></member>
</type>
<type category="struct" name="VkExternalImageFormatPropertiesKHX" returnedonly="true">
@ -1906,7 +1906,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoKHX">
<member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>acquireCount</name></member>
<member len="acquireCount">const <type>VkDeviceMemory</type>* <name>pAcquireSyncs</name></member>
<member len="acquireCount">const <type>uint64_t</type>* <name>pAcquireKeys</name></member>
@ -1948,7 +1948,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkD3D12FenceSubmitInfoKHX">
<member values="VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreValuesCount</name></member>
<member optional="true" len="waitSemaphoreValuesCount">const <type>uint64_t</type>* <name>pWaitSemaphoreValues</name></member>
<member optional="true"><type>uint32_t</type> <name>signalSemaphoreValuesCount</name></member>
@ -1963,7 +1963,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPhysicalDeviceMultiviewFeaturesKHX">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>multiview</name></member> <!-- Multiple views in a renderpass -->
<member><type>VkBool32</type> <name>multiviewGeometryShader</name></member> <!-- Multiple views in a renderpass w/ geometry shader -->
<member><type>VkBool32</type> <name>multiviewTessellationShader</name></member> <!-- Multiple views in a renderpass w/ tessellation shader -->
@ -2021,14 +2021,14 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPhysicalDeviceGroupPropertiesKHX" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>uint32_t</type> <name>physicalDeviceCount</name></member>
<member><type>VkPhysicalDevice</type> <name>physicalDevices</name>[<enum>VK_MAX_DEVICE_GROUP_SIZE_KHX</enum>]</member>
<member><type>VkBool32</type> <name>subsetAllocation</name></member>
</type>
<type category="struct" name="VkMemoryAllocateFlagsInfoKHX">
<member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkMemoryAllocateFlagsKHX</type> <name>flags</name></member>
<member><type>uint32_t</type> <name>deviceMask</name></member>
</type>
@ -2054,19 +2054,19 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkDeviceGroupRenderPassBeginInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>uint32_t</type> <name>deviceMask</name></member>
<member optional="true"><type>uint32_t</type> <name>deviceRenderAreaCount</name></member>
<member len="deviceRenderAreaCount">const <type>VkRect2D</type>* <name>pDeviceRenderAreas</name></member>
</type>
<type category="struct" name="VkDeviceGroupCommandBufferBeginInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>uint32_t</type> <name>deviceMask</name></member>
</type>
<type category="struct" name="VkDeviceGroupSubmitInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member>
<member len="waitSemaphoreCount">const <type>uint32_t</type>* <name>pWaitSemaphoreDeviceIndices</name></member>
<member optional="true"><type>uint32_t</type> <name>commandBufferCount</name></member>
@ -2076,7 +2076,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkDeviceGroupBindSparseInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>uint32_t</type> <name>resourceDeviceIndex</name></member>
<member><type>uint32_t</type> <name>memoryDeviceIndex</name></member>
</type>
@ -2088,12 +2088,12 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkImageSwapchainCreateInfoKHX">
<member values="VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
</type>
<type category="struct" name="VkBindImageMemorySwapchainInfoKHX">
<member values="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
<member><type>uint32_t</type> <name>imageIndex</name></member>
</type>
@ -2108,20 +2108,20 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkDeviceGroupPresentInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDisplayPresentInfoKHR,VkPresentTimesInfoGOOGLE">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>swapchainCount</name></member>
<member len="swapchainCount">const <type>uint32_t</type>* <name>pDeviceMasks</name></member>
<member><type>VkDeviceGroupPresentModeFlagBitsKHX</type> <name>mode</name></member>
</type>
<type category="struct" name="VkDeviceGroupDeviceCreateInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>physicalDeviceCount</name></member>
<member len="physicalDeviceCount">const <type>VkPhysicalDevice</type>* <name>pPhysicalDevices</name></member>
</type>
<type category="struct" name="VkDeviceGroupSwapchainCreateInfoKHX">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDeviceGroupPresentModeFlagsKHX</type> <name>modes</name></member>
</type>
<type category="struct" name="VkDescriptorUpdateTemplateEntryKHR">
@ -2176,7 +2176,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPresentTimesInfoGOOGLE">
<member values="VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDisplayPresentInfoKHR,VkDeviceGroupPresentInfoKHX">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>uint32_t</type> <name>swapchainCount</name></member> <!-- Copy of VkPresentInfoKHR::swapchainCount -->
<member len="swapchainCount" optional="true">const <type>VkPresentTimeGOOGLE</type>* <name>pTimes</name></member> <!-- The earliest times to present images -->
</type>
@ -2202,7 +2202,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
</type>
<type category="struct" name="VkPipelineViewportWScalingStateCreateInfoNV">
<member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>viewportWScalingEnable</name></member>
<member><type>uint32_t</type> <name>viewportCount</name></member>
<member noautovalidity="true" len="viewportCount">const <type>VkViewportWScalingNV</type>* <name>pViewportWScalings</name></member>
@ -5152,7 +5152,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_ANDROID_native_buffer&quot;" name="VK_ANDROID_NATIVE_BUFFER_NAME"/>
</require>
</extension>
<extension name="VK_EXT_debug_report" number="12" type="instance" author="Google, Inc." contact="Courtney Goeltzenleuchter @courtney" supported="vulkan">
<extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney" supported="vulkan">
<require>
<enum value="5" name="VK_EXT_DEBUG_REPORT_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_debug_report&quot;" name="VK_EXT_DEBUG_REPORT_EXTENSION_NAME"/>
@ -5591,7 +5591,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum bitpos="0" extends="VkSwapchainCreateFlagBitsKHR" name="VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX" comment="Allow images with VK_IMAGE_CREATE_BIND_SFR_BIT_KHX"/>
</require>
</extension>
<extension name="VK_EXT_validation_flags" number="62" type="instance" author="Google, Inc." contact="Tobin Ehlis @tobine" supported="vulkan">
<extension name="VK_EXT_validation_flags" number="62" type="instance" author="GOOGLE" contact="Tobin Ehlis @tobine" supported="vulkan">
<require>
<enum value="1" name="VK_EXT_VALIDATION_FLAGS_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_validation_flags&quot;" name="VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"/>
@ -5678,6 +5678,9 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHX"/>
<enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHX"/>
<enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHX"/>
<enum offset="5" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHX"/> <!-- KHX-only. Remove for KHR -->
<enum offset="6" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHX"/> <!-- KHX-only. Remove for KHR -->
<enum offset="7" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHX"/> <!-- KHX-only. Remove for KHR -->
<enum name="VK_LUID_SIZE_KHX"/>
<type name="VkExternalMemoryHandleTypeFlagsKHX"/>
<type name="VkExternalMemoryHandleTypeFlagBitsKHX"/>
@ -6038,22 +6041,23 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_NV_extension_104&quot;" name="VK_NV_EXTENSION_104_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_swapchain_colorspace" number="105" type="device" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtneygo" requires="VK_KHR_surface" supported="disabled">
<extension name="VK_EXT_swapchain_colorspace" number="105" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtneygo" requires="VK_KHR_surface" supported="vulkan">
<require>
<enum value="1" name="VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"/>
<enum value="2" name="VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_swapchain_colorspace&quot;" name="VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME"/>
<enum offset="1" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"/>
<enum offset="2" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"/>
<enum offset="3" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_SCRGB_LINEAR_EXT"/>
<enum offset="4" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_SCRGB_NONLINEAR_EXT"/>
<enum offset="5" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"/>
<enum offset="6" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"/>
<enum offset="7" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT709_LINEAR_EXT"/>
<enum offset="8" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT709_NONLINEAR_EXT"/>
<enum offset="9" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT2020_LINEAR_EXT"/>
<enum offset="10" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT2020_NONLINEAR_EXT"/>
<enum offset="1" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"/>
<enum offset="2" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"/>
<enum offset="3" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"/>
<enum offset="4" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"/>
<enum offset="5" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT709_LINEAR_EXT"/>
<enum offset="6" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT709_NONLINEAR_EXT"/>
<enum offset="7" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_BT2020_LINEAR_EXT"/>
<enum offset="8" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_HDR10_ST2084_EXT"/>
<enum offset="9" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_DOLBYVISION_EXT"/>
<enum offset="10" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_HDR10_HLG_EXT"/>
<enum offset="11" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT"/>
<enum offset="12" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"/>
<enum offset="13" extends="VkColorSpaceKHR" name="VK_COLOR_SPACE_PASS_THROUGH_EXT"/>
</require>
</extension>
<extension name="VK_EXT_hdr_metadata" number="106" type="device" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtneygo" supported="vulkan">
@ -6206,10 +6210,10 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_KHR_extension_128&quot;" name="VK_KHR_EXTENSION_128_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_129" number="129" type="instance" author="EXT" contact="Mark Young @MarkY_LunarG" supported="disabled">
<extension name="VK_EXT_extension_129" number="129" author="LUNARG" contact="Mark Young @MarkY_LunarG" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_129_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_129&quot;" name="VK_KHR_EXTENSION_129_EXTENSION_NAME"/>
<enum value="&quot;VK_EXT_extension_129&quot;" name="VK_KHR_EXTENSION_129_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_130" number="130" author="KHR" contact="Jesse Hall @jessehall" supported="disabled">
@ -6224,5 +6228,11 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_KHR_extension_131&quot;" name="VK_KHR_EXTENSION_131_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_132" number="132" author="KHR" contact="Jan-Harald Fredriksen @janharald" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_132_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_132&quot;" name="VK_KHR_EXTENSION_132_EXTENSION_NAME"/>
</require>
</extension>
</extensions>
</registry>

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
#define VK_HEADER_VERSION 44
#define VK_HEADER_VERSION 45
#define VK_NULL_HANDLE 0
@ -261,6 +261,9 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHX = 1000071002,
VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHX = 1000071003,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHX = 1000071004,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHX = 1000071005,
VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHX = 1000071006,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHX = 1000071007,
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHX = 1000072000,
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHX = 1000072001,
VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHX = 1000072002,
@ -3295,6 +3298,19 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
typedef enum VkColorSpaceKHR {
VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003,
VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
@ -4758,7 +4774,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
typedef struct VkPhysicalDeviceGroupPropertiesKHX {
VkStructureType sType;
const void* pNext;
void* pNext;
uint32_t physicalDeviceCount;
VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
VkBool32 subsetAllocation;
@ -5684,6 +5700,11 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
const VkRect2D* pDiscardRectangles);
#endif
#define VK_EXT_swapchain_colorspace 1
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 2
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
#define VK_EXT_hdr_metadata 1
#define VK_EXT_HDR_METADATA_SPEC_VERSION 1
#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"