2016-02-16 09:53:44 +00:00
|
|
|
|
// Copyright (c) 2015-2016 The Khronos Group Inc.
|
|
|
|
|
// Copyright notice at https://www.khronos.org/registry/speccopyright.html
|
|
|
|
|
|
|
|
|
|
[appendix]
|
|
|
|
|
[[spirvenv]]
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
= Vulkan Environment for SPIR-V
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
Shaders for Vulkan are defined by the <<Khronos SPIR-V Specification>> as
|
2016-02-16 09:53:44 +00:00
|
|
|
|
well as the <<Khronos SPIR-V Extended Instructions for GLSL Specification>>.
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
This appendix defines additional SPIR-V requirements applying to Vulkan
|
2016-02-16 09:53:44 +00:00
|
|
|
|
shaders.
|
|
|
|
|
|
|
|
|
|
== Required Versions and Formats
|
|
|
|
|
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
A Vulkan 1.0 implementation must: support the 1.0 version of SPIR-V and
|
2016-02-16 09:53:44 +00:00
|
|
|
|
the 1.0 version of the SPIR-V Extended Instructions for GLSL.
|
|
|
|
|
|
|
|
|
|
A SPIR-V module passed into flink:vkCreateShaderModule is interpreted as
|
|
|
|
|
a series of 32-bit words in host endianness, with literal strings packed
|
|
|
|
|
as described in section 2.2 of the SPIR-V Specification. The first few words
|
|
|
|
|
of the SPIR-V module must: be a magic number and a SPIR-V version number, as
|
|
|
|
|
described in section 2.3 of the SPIR-V Specification.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[spirvenv-capabilities]]
|
|
|
|
|
== Capabilities
|
|
|
|
|
|
|
|
|
|
Implementations must: support the following capability operands declared by
|
2016-04-21 08:08:38 +00:00
|
|
|
|
code:OpCapability:
|
|
|
|
|
|
|
|
|
|
- code:Matrix
|
|
|
|
|
- code:Shader
|
|
|
|
|
- code:InputAttachment
|
|
|
|
|
- code:Sampled1D
|
|
|
|
|
- code:Image1D
|
|
|
|
|
- code:SampledBuffer
|
|
|
|
|
- code:ImageBuffer
|
|
|
|
|
- code:ImageQuery
|
|
|
|
|
- code:DerivativeControl
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|
|
|
|
|
Implementations may: support features that are not required: by the
|
|
|
|
|
Specification, as described in the <<features-features,Features>> chapter.
|
|
|
|
|
If such a feature is supported, then any capability operand(s) corresponding
|
|
|
|
|
to that feature must: also be supported.
|
|
|
|
|
|
|
|
|
|
[[spirvenv-capabilities-table]]
|
|
|
|
|
.SPIR-V Capabilities which are not required:, and corresponding feature names
|
|
|
|
|
[options="header"]
|
|
|
|
|
|====
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
| SPIR-V OpCapability | Vulkan feature name
|
2016-04-21 08:08:38 +00:00
|
|
|
|
| code:Geometry | <<features-features-geometryShader,geometryShader>>
|
|
|
|
|
| code:Tessellation | <<features-features-tessellationShader,tessellationShader>>
|
|
|
|
|
| code:Float64 | <<features-features-shaderFloat64,shaderFloat64>>
|
|
|
|
|
| code:Int64 | <<features-features-shaderInt64,shaderInt64>>
|
|
|
|
|
| code:Int16 | <<features-features-shaderInt16,shaderInt16>>
|
|
|
|
|
| code:TessellationPointSize | <<features-features-shaderTessellationAndGeometryPointSize,shaderTessellationAndGeometryPointSize>>
|
|
|
|
|
| code:GeometryPointSize | <<features-features-shaderTessellationAndGeometryPointSize,shaderTessellationAndGeometryPointSize>>
|
|
|
|
|
| code:ImageGatherExtended | <<features-features-shaderImageGatherExtended,shaderImageGatherExtended>>
|
|
|
|
|
| code:StorageImageMultisample | <<features-features-shaderStorageImageMultisample,shaderStorageImageMultisample>>
|
|
|
|
|
| code:UniformBufferArrayDynamicIndexing | <<features-features-shaderUniformBufferArrayDynamicIndexing,shaderUniformBufferArrayDynamicIndexing>>
|
|
|
|
|
| code:SampledImageArrayDynamicIndexing | <<features-features-shaderSampledImageArrayDynamicIndexing,shaderSampledImageArrayDynamicIndexing>>
|
|
|
|
|
| code:StorageBufferArrayDynamicIndexing | <<features-features-shaderStorageBufferArrayDynamicIndexing,shaderStorageBufferArrayDynamicIndexing>>
|
|
|
|
|
| code:StorageImageArrayDynamicIndexing | <<features-features-shaderStorageImageArrayDynamicIndexing,shaderStorageImageArrayDynamicIndexing>>
|
|
|
|
|
| code:ClipDistance | <<features-features-shaderClipDistance,shaderClipDistance>>
|
|
|
|
|
| code:CullDistance | <<features-features-shaderCullDistance,shaderCullDistance>>
|
|
|
|
|
| code:ImageCubeArray | <<features-features-imageCubeArray,imageCubeArray>>
|
|
|
|
|
| code:SampleRateShading | <<features-features-sampleRateShading,sampleRateShading>>
|
|
|
|
|
| code:SparseResidency | <<features-features-shaderResourceResidency,shaderResourceResidency>>
|
|
|
|
|
| code:MinLod | <<features-features-shaderResourceMinLod,shaderResourceMinLod>>
|
|
|
|
|
| code:SampledCubeArray | <<features-features-imageCubeArray,imageCubeArray>>
|
|
|
|
|
| code:ImageMSArray | <<features-features-shaderStorageImageMultisample,shaderStorageImageMultisample>>
|
|
|
|
|
| code:StorageImageExtendedFormats | <<features-features-shaderStorageImageExtendedFormats,shaderStorageImageExtendedFormats>>
|
|
|
|
|
| code:InterpolationFunction | <<features-features-sampleRateShading,sampleRateShading>>
|
|
|
|
|
| code:StorageImageReadWithoutFormat | <<features-features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
|
|
|
|
|
| code:StorageImageWriteWithoutFormat | <<features-features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
|
|
|
|
|
| code:MultiViewport | <<features-features-multiViewport,multiViewport>>
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|====
|
|
|
|
|
|
2016-08-28 10:47:19 +00:00
|
|
|
|
ifdef::VK_AMD_shader_explicit_vertex_parameter[]
|
|
|
|
|
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
|
|
|
|
|
uses the +SPV_AMD_shader_explicit_vertex_parameter+ SPIR-V extension.
|
|
|
|
|
endif::VK_AMD_shader_explicit_vertex_parameter[]
|
|
|
|
|
|
|
|
|
|
ifdef::VK_AMD_gcn_shader[]
|
|
|
|
|
The application can:
|
|
|
|
|
pass a SPIR-V module to flink:vkCreateShaderModule that uses the +SPV_AMD_gcn_shader+
|
|
|
|
|
SPIR-V extension.
|
|
|
|
|
endif::VK_AMD_gcn_shader[]
|
|
|
|
|
|
|
|
|
|
ifdef::VK_AMD_shader_trinary_minmax[]
|
|
|
|
|
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
|
|
|
|
|
uses the +SPV_AMD_shader_trinary_minmax+ SPIR-V extension.
|
|
|
|
|
endif::VK_AMD_shader_trinary_minmax[]
|
|
|
|
|
|
2016-02-16 09:53:44 +00:00
|
|
|
|
The application mustnot: pass a SPIR-V module containing any of the
|
|
|
|
|
following to flink:vkCreateShaderModule:
|
|
|
|
|
|
|
|
|
|
- any OpCapability not listed above,
|
|
|
|
|
- an unsupported capability, or
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
- a capability which corresponds to a Vulkan feature which has not been
|
2016-02-16 09:53:44 +00:00
|
|
|
|
enabled.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[spirvenv-module-validation]]
|
|
|
|
|
== Validation Rules within a Module
|
|
|
|
|
|
|
|
|
|
A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
|
|
|
|
|
following rules:
|
|
|
|
|
|
|
|
|
|
* Every entry point must: have no return value and accept no arguments.
|
Change log for August 5, 2016 Vulkan 1.0.23 spec update:
* Bump API patch number and header version number to 23 for this update.
Github Issues:
* Add explicit valid value attributes to pname:sType members in vk.xml
(public issue 34).
* Clarify usage of flink:vkGetInstanceProcAddr and
flink:vkGetDeviceProcAddr (public issue 225).
* Fix a copy-and-paste error in the description of
pname:pSwapchainImageCount saying that it was the count of ``format
pairs'' instead of ``swapchain images'' (public issue 292).
* flink:vkCmdExecuteCommandBuffers requires all command buffers to be
allocated from command pools created for the same queue family (public
issue 296).
* Remove bogus +optional+ attribute for
flink:vkEnumerateDeviceLayerProperties::pname:physicalDevice from vk.xml
(public issue 301).
* Clean up the <<resources-image-views-compatibility,image and image view
compatibility table>> reference and contents. Use full enumerant names.
Refer to pname:layerCount in the ``view parameters'' column instead of
pname:arrayLayers. Require N >= 1 for the cube array subview row, not
just arrayLayers >= 6 N (public issue 304).
* Modify description of <<resources-memory-aliasing,memory aliasing>> to
be consistent with the description of
<<resources-bufferimagegranularity,buffer image granularity>> (public
issue 307).
Internal Issues:
* Describe remaining +vk_platform.h+ macros in the <<boilerplate,API
Boilerplate>> appendix (internal issue 6).
* Clarify
<<features-features-robustBufferAccess,pname:robustBufferAccess>>
feature behavior; what memory can be accessed, how bounds checking is
performed, and allowing for vectorization (internal issue 332).
* Document markup for automatic extraction of reference pages from the
spec sources in the style guide (internal issue 395).
* Allow flink:vkCreateDisplayModeKHR to return
ename:VK_ERROR_INITIALIZAION_FAILED_KHR if the user requests mode
parameters that the specified display does not support (internal issue
411).
* Remove atomic counters (atomic_uint style) from KHR_vulkan_glsl, and
more clearly remove the subroutine keyword alongside it (internal issue
421).
* Clarify behavior of flink:vkCmdBindDescriptorSets for descriptor sets
not contained in the layout (internal issue 427).
Other Commits:
* Change the order in which members of sname:VkAttachmentDescription and
sname:VkPipelineInputAssemblyStateCreateInfo are described to match
their order in the structures.
2016-08-05 12:11:02 +00:00
|
|
|
|
* Recursion: The static function-call graph for an entry point mustnot: contain cycles.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
* The *Logical* addressing model must: be selected.
|
|
|
|
|
* *Scope* for execution must: be limited to:
|
|
|
|
|
** *Workgroup*
|
|
|
|
|
** *Subgroup*
|
|
|
|
|
* *Scope* for memory must: be limited to:
|
|
|
|
|
** *Device*
|
|
|
|
|
** *Workgroup*
|
|
|
|
|
** *Invocation*
|
2016-04-21 08:08:38 +00:00
|
|
|
|
* The code:OriginLowerLeft execution mode mustnot: be used; fragment entry
|
|
|
|
|
points must: declare code:OriginUpperLeft.
|
|
|
|
|
* The code:PixelCenterInteger execution mode mustnot: be used. Pixels are
|
2016-02-16 09:53:44 +00:00
|
|
|
|
always centered at half-integer coordinates.
|
|
|
|
|
* Images
|
2016-04-21 08:08:38 +00:00
|
|
|
|
** code:OpTypeImage must: declare a scalar 32-bit float or 32-bit integer
|
|
|
|
|
type for the ``Sampled Type''. (code:RelaxedPrecision can: be applied
|
|
|
|
|
to a sampling instruction and to the variable holding the result of a
|
2016-02-16 09:53:44 +00:00
|
|
|
|
sampling instruction.)
|
2016-04-21 08:08:38 +00:00
|
|
|
|
** code:OpSampledImage must: only consume an ``Image'' operand whose type
|
|
|
|
|
has its ``Sampled'' operand set to 1.
|
|
|
|
|
** The ``(u, v)'' coordinates used for a code:SubpassData must: be the <id>
|
2016-02-16 09:53:44 +00:00
|
|
|
|
of a constant vector (0, 0), or if a layer coordinate is used, must: be
|
|
|
|
|
a vector that was formed with constant 0 for the ``u'' and ``v''
|
|
|
|
|
components.
|
2016-04-21 08:08:38 +00:00
|
|
|
|
** The ``Depth'' operand of code:OpTypeImage is ignored.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
* Decorations
|
2016-04-21 08:08:38 +00:00
|
|
|
|
** The code:GLSLShared and code:GLSLPacked decorations mustnot: be used.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
** The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
|
|
|
|
|
decorations mustnot: be used on variables with storage class other than
|
|
|
|
|
code:Input or on variables used in the interface of non-fragment shader
|
|
|
|
|
entry points.
|
|
|
|
|
** The code:Patch decoration mustnot: be used on variables in the
|
|
|
|
|
interface of a vertex, geometry, or fragment shader stage's entry
|
|
|
|
|
point.
|
2016-04-21 08:08:38 +00:00
|
|
|
|
* code:OpTypeRuntimeArray must: only be used for the last member of an
|
|
|
|
|
code:OpTypeStruct in the code:Uniform storage class.
|
|
|
|
|
* Linkage: See <<interfaces,Shader Interfaces>> for additional linking and
|
2016-02-16 09:53:44 +00:00
|
|
|
|
validation rules.
|
2016-04-21 08:08:38 +00:00
|
|
|
|
* Compute Shaders
|
|
|
|
|
** For each compute shader entry point, either a code:LocalSize execution mode
|
|
|
|
|
or an object decorated with the code:WorkgroupSize decoration must: be
|
|
|
|
|
specified.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[spirvenv-precision-operation]]
|
|
|
|
|
== Precision and Operation of SPIR-V Instructions
|
|
|
|
|
|
|
|
|
|
The following rules apply to both single and double-precision floating point
|
|
|
|
|
instructions:
|
|
|
|
|
|
|
|
|
|
- Positive and negative infinities and positive and negative zeros are
|
|
|
|
|
generated as dictated by <<IEEE 754>>, but subject to the precisions
|
|
|
|
|
allowed in the following table.
|
|
|
|
|
- Dividing a non-zero by a zero results in the appropriately signed <<IEEE
|
|
|
|
|
754>> infinity.
|
|
|
|
|
- Any denormalized value input into a shader or potentially generated by
|
|
|
|
|
any instruction in a shader may: be flushed to 0.
|
|
|
|
|
- The rounding mode cannot: be set and is undefined.
|
Change log for March 4, 2016 Vulkan 1.0.5 spec update:
* Bump API patch number to 5 for this update.
Github Issues:
* Correctly describe slink:VkPhysicalDeviceProperties pname:deviceName
member as a string, not a pointer to a string. Also one typo fix for
"hetereogeneous" (public issue 4).
* Replace maynot: macro with may: not, and "may: or maynot:" with
"may:" (public issue 4).
* Clarify that redundantly setting the state of a fence or event has
no effect (public issue 4).
* Minor fixes to ref pages to track descriptions of memory bits that
changed in the core spec. Fix name of a member in the description of
sname:sname:VkPipelineMultisampleStateCreateInfo (public issues 8,
13).
* Remove redundant validity statement for
sname:VkGraphicsPipelineCreateInfo::pname:stageCount (public issue
14).
* Fix typos in chapters 7-9 (public issue 14).
* Clarify the example demonstrating the behavior of
code:OpMemoryBarrier in the
<<shaders-execution-memory-ordering,shader memory acces
ordering>> section (public issue 16).
* Specify that freeing mapped memory implicitly unmaps the memory in
the description of flink:vkFreeMemory (public issue 17).
* Forbid allocation callbacks from calling into the API in the
<<memory-allocation,memory allocation>> section (public issue
20).
* Add missing validity rules about size being greater than 0 and
offset being less than size of object. Fix
flink:VkMappedMemoryRange's misinterpretation of offset (public
issues 27, 31).
* Add validity rule disallowing overlapping source/destination
descriptors in flink:VkCopyDescriptorSet (public issue 32).
* Clarify that array and matrix stride has to be a multiple of the
base alignment of the array or matrix in the
<<interfaces-resources-layout,Offset and Stride Assignment>>
section (public issue 38).
* Correct parenthesis floor nesting error in equation for
<<textures-RGB-sexp,RGB to shared exponent conversion>>.
Clarify case of when exp' is forced to 0, avoiding log2(0) undefined
problem (public issue 40).
* Remove redundant statement from the code:FragDepth description in
the <<interfaces-builtin-variables,Built-In Variables>>
section (public issue 47).
* Define the clamping of the
<<textures-level-of-detail-operation,bias added to the scale
factor>> by linking to the slink:VkPhysicalDevice feature
pname:maxSamplerLodBias (public issue 64).
* Fix typo "optimal linear resources" and clarify the set of resources
<<features-limits-bufferImageGranularity,the
pname:bufferImageGranularity resource>> applies to (public issue
67).
* Replace 'descriptor accessed by a pipeline' language for
sname:VkDescriptorSetAllocateInfo with more precise phrasing about
binding a descriptor set before a command that invokes work using
that set (public issue 69).
* tstripadj.svg contained an Inkscape tag which caused Firefox and IE
11 to fail to render it, and was illegal SVG. Generating Plain SVG
from the Inkscape SVG source fixes this (public issue 70).
* Fix validity for sname:VkVertexInputBindingDescription and
sname:VkVertexInputAttributeDescription numbers (public issue 72).
Internal Issues:
* Clarify the meaning of
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT in
elink:VkFormatFeatureFlagBits with respect to depth compare
(internal issue 107).
* Added a note explaining that ename:VK_QUEUE_TRANSFER_BIT may or may
not be reported for a queue family that already supports
ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT as the
former is a strict subset of the latter ones (internal issue 116).
* Add validity language for sname:VkDescriptorSetAllocateInfo about
exceeding the descriptor pool capacity (internal issue 140).
* Add ename:VK_INCOMPLETE success code for
flink:vkEnumeratePhysicalDevices query (internal issue 163).
Other Commits:
* Add the VK_NV_glsl_shader extension definitions to the API.
* Update GL_KHR_vulkan_glsl with 1) origin_upper_left as default 2)
specialization array constant semantics.
* Corrected/updated Data Format Specification date.
2016-03-03 13:06:18 +00:00
|
|
|
|
- NaNs may: not be generated. Instructions that operate on a NaN may: not
|
2016-02-16 09:53:44 +00:00
|
|
|
|
result in a NaN.
|
|
|
|
|
- Support for signaling NaNs is optional: and exceptions are never raised.
|
|
|
|
|
|
|
|
|
|
The precision of double-precision instructions is at least that of single
|
|
|
|
|
precision. For single precision (32 bit) instructions, precisions are
|
|
|
|
|
required: to be at least as follows, unless decorated with RelaxedPrecision:
|
|
|
|
|
|
2016-02-27 13:20:49 +00:00
|
|
|
|
.Precision of core SPIR-V Instructions
|
2016-02-16 09:53:44 +00:00
|
|
|
|
[options="header"]
|
|
|
|
|
|====
|
2016-04-21 08:08:38 +00:00
|
|
|
|
| Instruction | Precision
|
|
|
|
|
| code:OpFAdd | Correctly rounded.
|
|
|
|
|
| code:OpFSub | Correctly rounded.
|
|
|
|
|
| code:OpFMul | Correctly rounded.
|
|
|
|
|
| code:OpFOrdEqual, code:OpFUnordEqual | Correct result.
|
|
|
|
|
| code:OpFOrdLessThan, code:OpFUnordLessThan | Correct result.
|
|
|
|
|
| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan | Correct result.
|
|
|
|
|
| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual | Correct result.
|
|
|
|
|
| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual| Correct result.
|
|
|
|
|
| code:OpFDiv | 2.5 ULP for b in the range [2^-126^, 2^126^].
|
|
|
|
|
| conversions between types | Correctly rounded.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|====
|
|
|
|
|
|
Change log for July 15, 2016 Vulkan 1.0.21 spec update:
* Bump API patch number and header version number to 21 for this update.
Github Issues:
* Clarify how <<features-supported-sample-counts,sample count queries>>
relate to the limits in slink:VkPhysicalDeviceLimits. (public issue
185).
* Clarify in the <<interfaces-iointerfaces,Shader Input and Output
Interfaces>> section that shader output variables have undefined values
until the shader writes to them (public issue 240).
* Specify the implicit value of image parameters that cannot be set in
slink:VkSwapchainCreateInfo::pname:flags, pname:imageType,
pname:mipLevels, pname:samples, pname:tiling, and pname:initialLayout
(public issue 243).
* Make use of code:NULL and code:VK_NULL_HANDLE consistent in the
VK_KHR_swapchain extension (public issue 276).
Internal Issues:
* Clarify that presenting an image to a display surface swapchain applies
the display surface's mode, and that destroying a display surface
swapchain may reset the display's mode, in the VK_KHR_display_swapchain
extension (internal issue 247).
* Better describe what a slink:VkSurfaceKHR is, and that creating one does
not set a mode, in the VK_KHR_display extension. This is a round-about
way of pointing out that mode setting is not covered by the extension,
but rather is performed as a side effect of presentation (internal issue
247).
* Add more valid usage statements to flink:vkQueuePresentKHR command when
the VK_KHR_display_swapchain extension is present (internal issue
247).
* Add more includes to the VK_KHR_swapchain extension to better document
interactions with VK_KHR_display_swapchain (internal issue 247).
* Clarify restrictions on location aliasing in the
<<fxvertex,Fixed-Function Vertex Processing>> section (internal issue
370).
* Add mathematical description of blitting to flink:vkCmdBlitImage, and
link it to the <<textures,Image Operations>> chapter. Use mathematical
notation for ranges of texel coordinates in the <<textures,Image
Operations>> chapter. Fixed miscellaneous validity statements for
flink:vkCmdBlit and slink:VkImageBlit (internal issue 382).
Other Commits:
* Added a valid usage rule to flink:VkGraphicsPipelineCreateInfo that the
ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST topology must only be used when
tessellation shaders are used.
* Expand the style guide into a formal "Procedures and Conventions"
document. Add a API Naming Conventions section, move most of the API
Specification Appendix C (Layers and Extensions) content into the new
document, and define the resulting procedures as mandatory (where
relevant). This more clearly separates use vs. specification of Vulkan
APIs.
* Update vk_platform.h to handle 32-bit ARMv8 binaries.
* Various minor cleanups to the Makefile and build process.
2016-07-16 02:05:43 +00:00
|
|
|
|
.Precision of GLSL.std.450 Instructions
|
2016-02-16 09:53:44 +00:00
|
|
|
|
[options="header"]
|
|
|
|
|
|====
|
2016-04-21 08:08:38 +00:00
|
|
|
|
|Instruction | Precision
|
|
|
|
|
| code:fma() | Inherited from code:OpFMul followed by code:OpFAdd.
|
|
|
|
|
| code:exp(x), code:exp2(x) | latexmath:[$(3 + 2 \times \|x\|)$] ULP.
|
|
|
|
|
| code:log(), code:log2() | 3 ULP outside the range [0.5, 2.0]. Absolute error < 2^-21^ inside the range [0.5, 2.0].
|
|
|
|
|
| code:pow(x, y) | Inherited from code:exp2(y × code:log2(x)).
|
|
|
|
|
| code:sqrt() | Inherited from 1.0 / code:inversesqrt().
|
|
|
|
|
| code:inversesqrt() | 2 ULP.
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|====
|
|
|
|
|
|
|
|
|
|
GLSL.std.450 extended instructions specifically defined in terms of the
|
|
|
|
|
above instructions inherit the above errors. GLSL.std.450 extended
|
|
|
|
|
instructions not listed above and not defined in terms of the above have
|
|
|
|
|
undefined precision. These include, for example, the trigonometric functions
|
|
|
|
|
and determinant.
|
|
|
|
|
|
|
|
|
|
For the code:OpSRem and code:OpSMod instructions, if either operand is
|
|
|
|
|
negative the result is undefined.
|
|
|
|
|
|
|
|
|
|
[NOTE]
|
|
|
|
|
.Note
|
|
|
|
|
====
|
|
|
|
|
While the code:OpSRem and code:OpSMod instructions are supported by the
|
Change log for April 29, 2016 Vulkan 1.0.12 spec update:
* Bump API patch number and header version number to 12 for this
update.
Github Issues:
* Change valid usage statements intended to be "sub-points" to
be actual sub-points (public issue 66).
* Replace double negation in description of
slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
merge 142).
* Cleanup minor typos in spec, ref pages and XML, including those
proposed in public pull requests 144, 150, 151, 167, 168, 181, and
186.
* Use *strict subset* in describing the partial order of memory
property types for slink:VkMemoryType, and update the style guide
accordingly (public issue 190).
* Fix various "a image" -> "an image" typos (public issue 191).
* Note in the <<fundamentals-validusage,Valid Usage>> and
<<extensions-interactions,Extension Interactions>> sections that
structures defined by extensions which may be passed in structure
chains using the ptext:pNext member must: include initial
ptext:sType and ptext:pNext members (public issue 192).
Internal Issues:
* Remove duplicate language from the description of the pname:fence
parameter to flink:vkQueueSubmit and improve validity language
(internal issue 91).
* Added documentation for "optional" attribute to XML readme.tex/pdf
(internal issue 149).
* Clarify the host-side data validity rules and behavior of
flink:vkFlushMappedMemoryRanges and
flink:vkInvalidateMappedMemoryRanges (internal issue 266).
Other Commits:
* Added clarification to flink:vkCmdFillBuffer regarding the use of
ename:VK_WHOLE_SIZE.
* Fixed and documented implementation of "validextensionstructs"
attribute. in XML processing scripts and readme.tex/pdf.
* Add missing validity statements to flink:vkResetEvent and
flink:vkCmdResetEvent.
* Fix validity for the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
Correct all the draw/dispatch commands to mention optimally tiled
images as well as linear tiled images, and say image VIEWS instead
of images. Add validity statement to flink:vkCmdBlitImage
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
2016-04-29 12:53:46 +00:00
|
|
|
|
Vulkan environment, they require non-negative values and thus do not
|
2016-02-16 09:53:44 +00:00
|
|
|
|
enable additional functionality beyond what code:OpUMod provides.
|
|
|
|
|
====
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[spirvenv-image-formats]]
|
2016-08-28 10:47:19 +00:00
|
|
|
|
.Compatibility Between SPIR-V Image Formats And Vulkan Formats
|
|
|
|
|
|
|
|
|
|
Images which are read from or written to by shaders must: have SPIR-V image
|
|
|
|
|
formats compatible with the Vulkan image formats backing the image under the
|
|
|
|
|
circumstances described for <<textures-operation-validation,texture image
|
|
|
|
|
validation>>. The compatibile formats are:
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|
2016-08-28 10:47:19 +00:00
|
|
|
|
.SPIR-V and Vulkan Image Format Compatibility
|
2016-02-16 09:53:44 +00:00
|
|
|
|
[cols="2*", options="header"]
|
|
|
|
|
|===
|
2016-08-28 10:47:19 +00:00
|
|
|
|
|SPIR-V Image Format |Compatible Vulkan Format
|
2016-02-16 09:53:44 +00:00
|
|
|
|
|code:Rgba32f |ename:VK_FORMAT_R32G32B32A32_SFLOAT
|
|
|
|
|
|code:Rgba16f |ename:VK_FORMAT_R16G16B16A16_SFLOAT
|
|
|
|
|
|code:R32f |ename:VK_FORMAT_R32_SFLOAT
|
|
|
|
|
|code:Rgba8 |ename:VK_FORMAT_R8G8B8A8_UNORM
|
|
|
|
|
|code:Rgba8Snorm |ename:VK_FORMAT_R8G8B8A8_SNORM
|
|
|
|
|
|code:Rg32f |ename:VK_FORMAT_R32G32_SFLOAT
|
|
|
|
|
|code:Rg16f |ename:VK_FORMAT_R16G16_SFLOAT
|
|
|
|
|
|code:R11fG11fB10f |ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
|
|
|
|
|
|code:R16f |ename:VK_FORMAT_R16_SFLOAT
|
|
|
|
|
|code:Rgba16 |ename:VK_FORMAT_R16G16B16A16_UNORM
|
|
|
|
|
|code:Rgb10A2 |ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
|
|
|
|
|
|code:Rg16 |ename:VK_FORMAT_R16G16_UNORM
|
|
|
|
|
|code:Rg8 |ename:VK_FORMAT_R8G8_UNORM
|
|
|
|
|
|code:R16 |ename:VK_FORMAT_R16_UNORM
|
|
|
|
|
|code:R8 |ename:VK_FORMAT_R8_UNORM
|
|
|
|
|
|code:Rgba16Snorm |ename:VK_FORMAT_R16G16B16A16_SNORM
|
|
|
|
|
|code:Rg16Snorm |ename:VK_FORMAT_R16G16_SNORM
|
|
|
|
|
|code:Rg8Snorm |ename:VK_FORMAT_R8G8_SNORM
|
|
|
|
|
|code:R16Snorm |ename:VK_FORMAT_R16_SNORM
|
|
|
|
|
|code:R8Snorm |ename:VK_FORMAT_R8_SNORM
|
|
|
|
|
|code:Rgba32i |ename:VK_FORMAT_R32G32B32A32_SINT
|
|
|
|
|
|code:Rgba16i |ename:VK_FORMAT_R16G16B16A16_SINT
|
|
|
|
|
|code:Rgba8i |ename:VK_FORMAT_R8G8B8A8_SINT
|
|
|
|
|
|code:R32i |ename:VK_FORMAT_R32_SINT
|
|
|
|
|
|code:Rg32i |ename:VK_FORMAT_R32G32_SINT
|
|
|
|
|
|code:Rg16i |ename:VK_FORMAT_R16G16_SINT
|
|
|
|
|
|code:Rg8i |ename:VK_FORMAT_R8G8_SINT
|
|
|
|
|
|code:R16i |ename:VK_FORMAT_R16_SINT
|
|
|
|
|
|code:R8i |ename:VK_FORMAT_R8_SINT
|
|
|
|
|
|code:Rgba32ui |ename:VK_FORMAT_R32G32B32A32_UINT
|
|
|
|
|
|code:Rgba16ui |ename:VK_FORMAT_R16G16B16A16_UINT
|
|
|
|
|
|code:Rgba8ui |ename:VK_FORMAT_R8G8B8A8_UINT
|
|
|
|
|
|code:R32ui |ename:VK_FORMAT_R32_UINT
|
|
|
|
|
|code:Rgb10a2ui |ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
|
|
|
|
|
|code:Rg32ui |ename:VK_FORMAT_R32G32_UINT
|
|
|
|
|
|code:Rg16ui |ename:VK_FORMAT_R16G16_UINT
|
|
|
|
|
|code:Rg8ui |ename:VK_FORMAT_R8G8_UINT
|
|
|
|
|
|code:R16ui |ename:VK_FORMAT_R16_UINT
|
|
|
|
|
|code:R8ui |ename:VK_FORMAT_R8_UINT
|
|
|
|
|
|===
|