Change log for February 3, 2019 Vulkan 1.1.99 spec update:

* Update release number to 99.

Public Issues:

  * Add missing pname:pMemoryHostPointerProperties description to
    flink:vkGetMemoryHostPointerPropertiesEXT.txt (public pull request 896).
  * Minor markup fixes (public pull request 900).
  * Minor update to `khronos.css` and markup fixes (originally proposed in
    public pull request 901, but done via an internal MR).

Internal Issues:

  * Document restrictions on image queries for Y'CbCr formats in the
    <<features-formats-requiring-sampler-ycbcr-conversion>> table as well as
    for slink:sname:VkImageFormatProperties and slink:VkImageCreateInfo
    (internal issue 1361).
  * Correct type of the code:FragSizeEXT built-in in the
    <<interfaces-builtin-variables, Built-In Variables>> section (internal
    issue 1526).
  * Clean up math in the <<textures, Image Operations>> chapter by
    refactoring, using better naming conventions, updating diagrams to use
    the correct orientation, etc. (internal merge request 2968).
  * Fix minor typos for slink:VkImageCreateInfo and
    slink:VkImageStencilUsageCreateInfoEXT.
  * Add missing documentation for tlink:VkResolveModeFlagsKHR.
  * Fix extension dependency of pname:scalarBlockLayout in the
    <<features-features-requirements, Feature Requirements>> section.
  * Fix indexing math for shader binding table calculations in the
    <<shader-binding-table-indexing-rules, Indexing Rules>> section, and use
    spelling "`any-hit`" consistently.
  * Reconcile valid usage statement and text for sampled image layouts in
    slink:VkWriteDescriptorSet
    (https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/551).
  * Make SPIR-V code:OpConvertUToPtr and code:OpConvertPtrToU operations
    require a 64-bit integer for physical storage buffer pointers in the
    <<spirvenv-module-validation, Validation Rules within a Module>>
    section.
  * Update to KaTeX 10.0.

New Extensions:

  * `VK_EXT_filter_cubic`
  * `VK_NV_dedicated_allocation_image_aliasing`
This commit is contained in:
Jon Leech 2019-02-04 01:26:23 -08:00
parent e666c587df
commit b59ec03ee3
144 changed files with 42802 additions and 11589 deletions

View File

@ -7,11 +7,15 @@ spec-generate:
- apt-get update -qq
- apt-get install -y -qq gcc git python3 python3-termcolor python3-pytest ruby
- apt-get install -y -qq cmake bison flex libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev libpango1.0-dev ttf-lyx
# Force-install an older version of i18n so the 1.5.2 version, which
# won't work with ruby 2.1, doesn't abort the CI job when installing
# other gems which need it.
- gem install i18n -v 1.5.1
- gem install asciidoctor asciidoctor-mathematical coderay json-schema
script:
- ./makeAllExts QUIET= -j${nproc} -Otarget html styleguide registry manhtmlpages checkinc checklinks validusage
# Internal self-test of the script
# Internal self-test of the check_spec_links script
- ( cd xml && py.test-3 )
- mkdir -p out/checks
- xml/check_spec_links.py --html=out/checks/problems.html > /dev/null || true
# Breaking the build if # of errors increases. We should manually ratchet ignore_count down as errors get fixed.
# If there are unfixable errors, add '--ignore_count #' where '#' is the
@ -19,6 +23,8 @@ spec-generate:
# errors" but simpler than the alternatives (running against master,
# diff, etc)
- xml/check_spec_links.py -Werror --ignore_count 0
# Build the actual spec
- ./makeAllExts QUIET= -j${nproc} -Otarget checkinc checklinks validusage html styleguide registry manhtmlpages
artifacts:
when: always
paths:

View File

@ -8,6 +8,54 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for February 3, 2019 Vulkan 1.1.99 spec update:
* Update release number to 99.
Public Issues:
* Add missing pname:pMemoryHostPointerProperties description to
flink:vkGetMemoryHostPointerPropertiesEXT.txt (public pull request 896).
* Minor markup fixes (public pull request 900).
* Minor update to `khronos.css` and markup fixes (originally proposed in
public pull request 901, but done via an internal MR).
Internal Issues:
* Document restrictions on image queries for Y'CbCr formats in the
<<features-formats-requiring-sampler-ycbcr-conversion>> table as well as
for slink:sname:VkImageFormatProperties and slink:VkImageCreateInfo
(internal issue 1361).
* Correct type of the code:FragSizeEXT built-in in the
<<interfaces-builtin-variables, Built-In Variables>> section (internal
issue 1526).
* Clean up math in the <<textures, Image Operations>> chapter by
refactoring, using better naming conventions, updating diagrams to use
the correct orientation, etc. (internal merge request 2968).
* Fix minor typos for slink:VkImageCreateInfo and
slink:VkImageStencilUsageCreateInfoEXT.
* Add missing documentation for tlink:VkResolveModeFlagsKHR.
* Fix extension dependency of pname:scalarBlockLayout in the
<<features-features-requirements, Feature Requirements>> section.
* Fix indexing math for shader binding table calculations in the
<<shader-binding-table-indexing-rules, Indexing Rules>> section, and use
spelling "`any-hit`" consistently.
* Reconcile valid usage statement and text for sampled image layouts in
slink:VkWriteDescriptorSet
(https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/551).
* Make SPIR-V code:OpConvertUToPtr and code:OpConvertPtrToU operations
require a 64-bit integer for physical storage buffer pointers in the
<<spirvenv-module-validation, Validation Rules within a Module>>
section.
* Update to KaTeX 10.0.
New Extensions:
* `VK_EXT_filter_cubic`
* `VK_NV_dedicated_allocation_image_aliasing`
-----------------------------------------------------
Change log for January 13, 2019 Vulkan 1.1.98 spec update:
* Update release number to 98.

View File

@ -115,7 +115,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 98
PATCHVERSION = 99
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else

View File

@ -0,0 +1,35 @@
include::meta/VK_EXT_filter_cubic.txt[]
*Last Modified Date*::
2019-01-24
*Contact
- Bill Licea-Kane, Qualcomm Technologies, Inc.
*Contributors*::
- Andrew Garrard, Samsung
- Daniel Koch, NVIDIA
- Donald Scorgie, Imagination Technologies
- Graeme Leese, Broadcom
- Jan-Herald Fredericksen, ARM
- Jeff Leger, Qualcomm Technologies, Inc.
- Tobias Hector, AMD
- Tom Olson, ARM
- Stuart Smith, Imagination Technologies
`VK_EXT_filter_cubic` extends VK_IMG_filter_cubic.
It documents cubic filtering of other image view types.
It adds new structures which may be added to the pname:pNext chain of
VkPhysicalDeviceImageFormatInfo2 and VkImageFormatProperties2 which can: be
used to determine which image types and which image view types support cubic
filtering.
=== New Structures
* slink:VkPhysicalDeviceImageViewImageFormatInfoEXT
* slink:VkFilterCubicImageViewImageFormatPropertiesEXT
=== Version History
* Revision 1, 2019-01-24 (wwlk)
- Initial version

0
appendices/VK_KHR_vulkan_memory_model.txt Executable file → Normal file
View File

View File

@ -0,0 +1,48 @@
include::meta/VK_NV_dedicated_allocation_image_aliasing.txt[]
*Last Modified Date*::
2019-01-04
*Contributors*::
- Nuno Subtil, NVIDIA
- Jeff Bolz, NVIDIA
- Eric Werness, NVIDIA
- Axel Gneiting, id Software
This extension allows applications to alias images on dedicated allocations,
subject to specific restrictions: the extent and the number of layers in the
image being aliased must be smaller than or equal to those of the original
image for which the allocation was created, and every other image parameter
must match.
=== New Object Types
None.
=== New Enum Constants
* Extending elink:VkStructureType
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV
=== New Enums
None.
=== New Structures
* slink:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
=== New Functions
None.
=== Issues
None.
=== Version History
* Revision 1, 2019-01-04 (Nuno Subtil)
- Internal revisions

0
appendices/memorymodel.txt Executable file → Normal file
View File

View File

@ -857,11 +857,11 @@ ifdef::VK_EXT_transform_feedback[]
endif::VK_EXT_transform_feedback[]
ifdef::VK_NV_ray_tracing[]
* code:RayPayloadNV storage class must: only be used in ray generation,
any hit, closest hit or miss shaders.
any-hit, closest hit or miss shaders.
* code:IncomingRayPayloadNV storage class must: only be used in closest
hit, any hit, or miss shaders.
hit, any-hit, or miss shaders.
* code:HitAttributeNV storage class must: only be used in intersection,
any hit, or closest hit shaders.
any-hit, or closest hit shaders.
* code:CallableDataNV storage class must: only be used in ray generation,
closest hit, miss, and callable shaders.
* code:IncomingCallableDataNV storage class must only be used in callable
@ -889,6 +889,8 @@ ifdef::VK_EXT_buffer_device_address[]
** Any access chain instruction that accesses into a code:RowMajor matrix
must: only be used as the code:Pointer operand to code:OpLoad or
code:OpStore.
** code:OpConvertUToPtr and code:OpConvertPtrToU must: use an integer type
whose code:Width is 64.
endif::VK_EXT_buffer_device_address[]

View File

@ -139,15 +139,15 @@ include::../../api/structs/VkCmdProcessCommandsInfoNVX.txt[]
If pname:targetCommandBuffer is provided, the pname:maxSequencesCount
must: not exceed the reservation's pname:maxSequencesCount
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01338]]
If pname:sequencesCountBuffer is used, its usage flag must: have
the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
If pname:sequencesCountBuffer is used, its usage flag must: have the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01339]]
If pname:sequencesCountBuffer is used, pname:sequencesCountOffset must:
be aligned to
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:minSequenceCountBufferOffsetAlignment
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01340]]
If pname:sequencesIndexBuffer is used, its usage flag must: have
the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
If pname:sequencesIndexBuffer is used, its usage flag must: have the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01341]]
If pname:sequencesIndexBuffer is used, pname:sequencesIndexOffset must:
be aligned to

View File

@ -143,7 +143,7 @@ include::../../api/structs/VkRayTracingShaderGroupCreateInfoNV.txt[]
ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV and
ename:VK_SHADER_UNUSED_NV otherwise.
* pname:anyHitShader is the optional index of the any hit shader from
* pname:anyHitShader is the optional index of the any-hit shader from
sname:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
the shader group has pname:type of
ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or

View File

@ -55,13 +55,13 @@ forcibly terminated.
The any-hit shader is executed after the intersection shader reports an
intersection that lies within the current [eq]#[tmin,tmax]# of the ray.
The main use of any hit shaders is to programmatically decide whether or not
The main use of any-hit shaders is to programmatically decide whether or not
an intersection will be accepted.
The intersection will be accepted unless the shader calls the
code:OpIgnoreIntersectionNV instruction.
[[shaders-any-hit-execution]]
=== Any Hit Shader Execution
=== Any-Hit Shader Execution
The order in which intersections are found along a ray, and therefore the
order in which any-hit shaders are executed, is unspecified.

View File

@ -319,37 +319,68 @@ The code:sbtRecordStride and code:sbtRecordOffset values are passed in as
parameters to code:traceNV() calls made in the shaders.
See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
Specification for more details.
In SPIR-V, these correspond to the code:SBTOffset and code:SBTStride
parameters to the code:OpTraceNV instruction.
The result of this computation is then added to
pname:hitProgramShaderBindingTableBaseIndex, a base index passed to
pname:hitShaderBindingOffset, a base offset passed to
flink:vkCmdTraceRaysNV.
The complete rule to compute a hit shader binding table record index is:
The complete rule to compute a hit shader binding table record address in
the pname:hitShaderBindingTableBuffer is:
:: [eq]#code:instanceShaderBindingTableRecordOffset {plus}
code:hitProgramShaderBindingTableBaseIndex {plus} _geometryIndex_
{times} code:sbtRecordStride {plus} code:sbtRecordOffset#
:: [eq]#pname:hitShaderBindingOffset {plus} pname:hitShaderBindingStride
{times} ( code:instanceShaderBindingTableRecordOffset {plus}
_geometryIndex_ {times} code:sbtRecordStride {plus}
code:sbtRecordOffset )#
==== Miss Shaders
A Miss shader is executed whenever a ray query fails to find an intersection
A miss shader is executed whenever a ray query fails to find an intersection
for the given scene geometry.
Multiple miss shaders may: be executed throughout a ray tracing dispatch.
The base for the computation of miss shader locations is
code:missProgramShaderBindingTableBaseIndex, a base index passed into
pname:missShaderBindingOffset, a base offset passed into
flink:vkCmdTraceRaysNV.
The code:missIndex value is passed in as parameters to code:traceNV() calls
made in the shaders.
See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
Specification for more details.
In SPIR-V, this corresponds to the code:MissIndex parameter to the
code:OpTraceNV instruction.
The complete rule to compute a miss shader binding table record address is:
The complete rule to compute a miss shader binding table record address in
the pname:missShaderBindingTableBuffer is:
:: [eq]#code:missProgramShaderBindingTableBaseIndex {times}
pname:missShaderBindingStride {plus} code:missIndex#
:: [eq]#pname:missShaderBindingOffset {plus} pname:missShaderBindingStride
{times} code:missIndex#
==== Callable Shaders
A callable shader is executed when requested by a ray tracing shader.
Multiple callable shaders may: be executed throughout a ray tracing
dispatch.
The base for the computation of callable shader locations is
code:callableShaderBindingOffset, a base offset passed into
flink:vkCmdTraceRaysNV.
The code:sbtRecordIndex value is passed in as a parameter to
code:executeCallableNV() calls made in the shaders.
See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
Specification for more details.
In SPIR-V, this corresponds to the code:SBTIndex parameter to the
code:OpExecuteCallableNV instruction.
The complete rule to compute a callable shader binding table record address
in the pname:callableShaderBindingTableBuffer is:
:: [eq]#code:callableShaderBindingOffset {plus}
pname:callableShaderBindingStride {times} code:sbtRecordIndex#
[[acceleration-structure]]

View File

@ -1615,16 +1615,16 @@ endif::VK_KHR_shared_presentable_image[]
If pname:filter is ename:VK_FILTER_LINEAR, then the
<<resources-image-format-features,format features>> of pname:srcImage
must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdBlitImage-filter-02002]]
If pname:filter is ename:VK_FILTER_CUBIC_IMG, then the
If pname:filter is ename:VK_FILTER_CUBIC_EXT, then the
<<resources-image-format-features,format features>> of pname:srcImage
must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT.
* [[VUID-vkCmdBlitImage-filter-00237]]
If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have
If pname:filter is ename:VK_FILTER_CUBIC_EXT, pname:srcImage must: have
a elink:VkImageType of ename:VK_IMAGE_TYPE_2D
endif::VK_IMG_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdBlitImage-commandBuffer-01834]]
If pname:commandBuffer is an unprotected command buffer, then

View File

@ -2746,10 +2746,10 @@ endif::VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkWriteDescriptorSet-descriptorType-01403]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageLayout
member of each element of pname:pImageInfo must: be
ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
member of each element of pname:pImageInfo must: be a member of the list
given in <<descriptorsets-sampledimage, Sampled Image>> or
<<descriptorsets-combinedimagesampler, Combined Image Sampler>>,
corresponding to its type
* [[VUID-VkWriteDescriptorSet-descriptorType-00338]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
the pname:imageView member of each element of pname:pImageInfo must:
@ -2871,8 +2871,8 @@ include::../api/structs/VkDescriptorBufferInfo.txt[]
====
When setting pname:range to ename:VK_WHOLE_SIZE, the effective range must:
not be larger than the maximum range for the descriptor type
(<<features-limits-maxUniformBufferRange, maxUniformBufferRange>> or
<<features-limits-maxStorageBufferRange, maxStorageBufferRange>>).
(<<features-limits-maxUniformBufferRange, pname:maxUniformBufferRange>> or
<<features-limits-maxStorageBufferRange, pname:maxStorageBufferRange>>).
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.

View File

@ -104,18 +104,36 @@ local workgroups is assembled.
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatch-None-02006]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT.
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatch-None-00400]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatch-filterCubic-02609]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDispatch-filterCubicMinmax-02610]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDispatch-commandBuffer-01844]]
If pname:commandBuffer is an unprotected command buffer, and any
@ -240,18 +258,36 @@ at pname:offset.
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatchIndirect-None-02008]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT.
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatchIndirect-None-00416]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDispatchIndirect-filterCubic-02611]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDispatchIndirect-filterCubicMinmax-02612]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDispatchIndirect-commandBuffer-01847]]
If pname:commandBuffer is an unprotected command buffer, and any

View File

@ -632,18 +632,36 @@ The assembled primitives execute the bound graphics pipeline.
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDraw-None-02010]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDraw-None-00452]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDraw-filterCubic-02613]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDraw-filterCubicMinmax-02614]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDraw-maxMultiviewInstanceIndex-00453]]
If the draw is recorded in a render pass instance with multiview
@ -777,9 +795,9 @@ The assembled primitives execute the bound graphics pipeline.
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndexed-indexSize-00463]]
[eq]#(code:indexSize * (pname:firstIndex {plus} pname:indexCount)
{plus} pname:offset)# must: be less than or equal to the size of the
bound index buffer, with code:indexSize being based on the type specified by
[eq]#(code:indexSize * (pname:firstIndex {plus} pname:indexCount) {plus}
pname:offset)# must: be less than or equal to the size of the bound
index buffer, with code:indexSize being based on the type specified by
pname:indexType, where the index buffer, pname:indexType, and
pname:offset are specified via fname:vkCmdBindIndexBuffer
* [[VUID-vkCmdDrawIndexed-None-00464]]
@ -826,18 +844,36 @@ The assembled primitives execute the bound graphics pipeline.
* [[VUID-vkCmdDrawIndexed-None-01500]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexed-None-02012]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexed-None-00472]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexed-filterCubic-02615]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndexed-filterCubicMinmax-02616]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-00473]]
If the draw is recorded in a render pass instance with multiview
@ -1029,18 +1065,36 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
* [[VUID-vkCmdDrawIndirect-None-01501]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirect-None-02014]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirect-None-00498]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirect-filterCubic-02617]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndirect-filterCubicMinmax-02618]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-00499]]
If the draw is recorded in a render pass instance with multiview
@ -1277,18 +1331,36 @@ located at pname:countBufferOffset and use this as the draw count.
* [[VUID-vkCmdDrawIndirectCountKHR-None-03131]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectCountKHR-None-02016]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectCountKHR-None-03170]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectCountKHR-filterCubic-02619]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndirectCountKHR-filterCubicMinmax-02620]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndirectCountKHR-maxMultiviewInstanceIndex-03132]]
If the draw is recorded in a render pass instance with multiview
@ -1690,18 +1762,36 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
* [[VUID-vkCmdDrawIndexedIndirect-None-01503]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirect-None-02019]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirect-None-00550]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirect-filterCubic-02621]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02622]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-00551]]
If the draw is recorded in a render pass instance with multiview
@ -1773,11 +1863,11 @@ the similarly named parameters of flink:vkCmdDrawIndexed.
entirely contained within the corresponding vertex buffer binding, as
described in <<fxvertex-input>>
* [[VUID-VkDrawIndexedIndirectCommand-indexSize-00553]]
[eq]#(code:indexSize * (pname:firstIndex {plus} pname:indexCount)
{plus} pname:offset)# must: be less than or equal to the size of the
bound index buffer, with code:indexSize being based on the type
specified by pname:indexType, where the index buffer, pname:indexType,
and pname:offset are specified via fname:vkCmdBindIndexBuffer
[eq]#(code:indexSize * (pname:firstIndex {plus} pname:indexCount) {plus}
pname:offset)# must: be less than or equal to the size of the bound
index buffer, with code:indexSize being based on the type specified by
pname:indexType, where the index buffer, pname:indexType, and
pname:offset are specified via fname:vkCmdBindIndexBuffer
* [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]]
If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
@ -1946,18 +2036,36 @@ located at pname:countBufferOffset and use this as the draw count.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03163]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-02021]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03173]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-filterCubic-02623]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-filterCubicMinmax-02624]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-maxMultiviewInstanceIndex-03164]]
If the draw is recorded in a render pass instance with multiview
@ -2372,18 +2480,36 @@ The effective pname:firstVertex is zero.
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectByteCountEXT-None-02306]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectByteCountEXT-None-02307]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02625]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02626]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN_EXT or
VK_SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must: have
a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02308]]
If the draw is recorded in a render pass instance with multiview

177
chapters/features.txt Executable file → Normal file
View File

@ -1955,6 +1955,36 @@ include::../validity/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.txt[]
endif::VK_EXT_buffer_device_address[]
ifdef::VK_NV_dedicated_allocation_image_aliasing[]
[open,refpage='VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',desc='Structure describing dedicated allocation image aliasing features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
structure is defined as:
include::../api/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.txt[]
The members of the
sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV structure
describe the following features:
* [[features-features-dedicatedAllocationImageAliasing]]
pname:dedicatedAllocationImageAliasing indicates that the implementation
supports aliasing of compatible image objects on a dedicated allocation.
If the sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
structure is included in the pname:pNext chain of
slink:VkPhysicalDeviceFeatures2KHR, it is filled with values indicating
whether each feature is supported.
sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV can: also
be used in the pname:pNext chain of slink:VkDeviceCreateInfo to enable
features.
include::../validity/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.txt[]
--
endif::VK_NV_dedicated_allocation_image_aliasing[]
[[features-features-requirements]]
=== Feature Requirements
@ -2012,19 +2042,21 @@ ifdef::VK_EXT_descriptor_indexing[]
pname:descriptorBindingPartiallyBound>>
** <<features-features-runtimeDescriptorArray,
pname:runtimeDescriptorArray>>
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_inline_uniform_block[]
* <<features-features-inlineUniformBlock,pname:inlineUniformBlock>>, if
the `<<VK_EXT_inline_uniform_block>>` extension is supported.
ifdef::VK_EXT_descriptor_indexing[]
* <<features-features-descriptorBindingInlineUniformBlockUpdateAfterBind,
pname:descriptorBindingInlineUniformBlockUpdateAfterBind>>, if the
`<<VK_EXT_inline_uniform_block>>` and `<<VK_EXT_descriptor_indexing>>`
extensions are both supported.
endif::VK_EXT_descriptor_indexing[]
endif::VK_EXT_inline_uniform_block[]
ifdef::VK_EXT_scalar_block_layout[]
* If the `<<VK_EXT_scalar_block_layout>>` extension is supported:
** <<features-features-scalarBlockLayout,pname:scalarBlockLayout>>
* <<features-features-scalarBlockLayout,pname:scalarBlockLayout>>, if the
`<<VK_EXT_scalar_block_layout>>` extension is supported.
endif::VK_EXT_scalar_block_layout[]
endif::VK_EXT_descriptor_indexing[]
All other features defined in the Specification are optional:.
@ -2859,7 +2891,6 @@ endif::VK_KHR_push_descriptor[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
@ -6965,17 +6996,17 @@ ifdef::VK_EXT_sampler_filter_minmax[]
This bit must: only be exposed for formats that also support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_IMG_filter_cubic[]
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG specifies
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT specifies
that sname:VkImage can: be used with a sampler that has either of
pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_IMG, or
pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or
be the source image for a blit with pname:filter set to
ename:VK_FILTER_CUBIC_IMG.
ename:VK_FILTER_CUBIC_EXT.
This bit must: only be exposed for formats that also support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
If the format being queried is a depth/stencil format, this only
specifies that the depth aspect is cubic filterable.
endif::VK_IMG_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an
application can: define a <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
@ -7756,9 +7787,17 @@ one of: this table, <<features-formats-mandatory-features-bcn>>, or
<<features-formats-mandatory-features-etc>>.
|====
ifdef::VK_IMG_filter_cubic[]
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG must: be
supported for the following formats:
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
If cubic filtering is supported,
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
supported for the following image view types:
* ename:VK_IMAGE_VIEW_TYPE_1D
* ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY
* ename:VK_IMAGE_VIEW_TYPE_2D
* ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following formats:
* ename:VK_FORMAT_R4G4_UNORM_PACK8
* ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
@ -7794,8 +7833,14 @@ supported for the following formats:
* ename:VK_FORMAT_A8B8G8R8_SINT_PACK32
* ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
If ETC2 compressed formats are supported, the following additional formats
must: support ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG:
If ETC compressed formats are supported,
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
supported for the following image view types:
* ename:VK_IMAGE_VIEW_TYPE_2D
* ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following additional formats:
* ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
@ -7803,7 +7848,21 @@ must: support ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG:
* ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
endif::VK_IMG_filter_cubic[]
If cubic filtering is supported for any other uncompressed formats, the
following image view types must: be supported for those formats:
* ename:VK_IMAGE_VIEW_TYPE_1D
* ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY
* ename:VK_IMAGE_VIEW_TYPE_2D
* ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
If cubic filtering is supported for any other compressed formats, the
following image view types must: be supported for those formats:
* ename:VK_IMAGE_VIEW_TYPE_2D
* ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
@ -7856,7 +7915,8 @@ s| Format s| Planes
| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM | 3 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM | 2 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM | 3 | | | | | | | | | |
12+| Format features marked {sym1} must: be supported only if slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled
12+| Format features marked {sym1} must: be supported only if slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled,
and only with elink:VkImageType ename:VK_IMAGE_TYPE_2D
|====
Implementations are not required to support the
@ -7980,16 +8040,17 @@ ifdef::VK_EXT_fragment_density_map[]
** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
endif::VK_EXT_fragment_density_map[]
* pname:maxArrayLayers is the maximum number of array layers.
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
pname:maxArrayLayers must: either be equal to 1 or be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is
ename:VK_IMAGE_TYPE_3D, then pname:maxArrayLayers must: either be equal
to 1 or be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is not
ename:VK_IMAGE_TYPE_3D, then pname:maxArrayLayers must: be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
pname:maxArrayLayers must: be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, except when one
of the following conditions is true, in which case it may: instead be
`1`:
** pname:tiling is ename:VK_IMAGE_TILING_LINEAR
** pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is
ename:VK_IMAGE_TYPE_3D
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
** pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_EXT_image_drm_format_modifier[]
* If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
pname:maxArrayLayers must: not be 0.
@ -8664,6 +8725,66 @@ include::../validity/structs/VkAndroidHardwareBufferUsageANDROID.txt[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_EXT_filter_cubic[]
To determine if cubic filtering can be used with a given image format and a
given image view type add slink:VkPhysicalDeviceImageViewImageFormatInfoEXT
to the pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2
structure and slink:VkFilterCubicImageViewImageFormatPropertiesEXT to the
pname:pNext chain of the slink:VkImageFormatProperties2 structure.
[open,refpage='VkPhysicalDeviceImageViewImageFormatInfoEXT',desc='Structure for providing image view type',type='structs']
--
The sname:VkPhysicalDeviceImageViewImageFormatInfoEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:imageViewType is a elink:VkImageViewType value specifying the type
of the image view.
include::../validity/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.txt[]
--
[open,refpage='VkFilterCubicImageViewImageFormatPropertiesEXT',desc='Structure for querying cubic filtering capabilities of an image view type',type='structs']
--
The sname:VkFilterCubicImageViewImageFormatPropertiesEXT structure is
defined as:
include::../api/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:filterCubic tells if image format, image type and image view type
can: be used with cubic filtering.
This field is set by the implementation.
User-specified value is ignored.
* pname:filterCubicMinmax tells if image format, image type and image view
type can: be used with cubic filtering and minmax filtering.
This field is set by the implementation.
User-specified value is ignored.
include::../validity/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.txt[]
.Valid Usage
****
* [[VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627]]
If the pname:pNext chain of the slink:VkImageFormatProperties2 structure
contains an instance of
slink:VkFilterCubicImageViewImageFormatPropertiesEXT, the pname:pNext
chain of the slink:VkPhysicalDeviceImageFormatInfo2 structure must:
contain an instance of slink:VkPhysicalDeviceImageViewImageFormatInfoEXT
with an pname:imageViewType that is compatible with pname:imageType.
****
--
endif::VK_EXT_filter_cubic[]
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
@ -8688,6 +8809,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
external handle type for which multisampled image support is not
required.
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_NV_shading_rate_image[]
* pname:usage contains ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
endif::VK_NV_shading_rate_image[]

View File

@ -1522,7 +1522,7 @@ The variable decorated with code:FragSizeEXT must: be declared using the
code:Input storage class.
+
The variable decorated with code:FragSizeEXT must: be declared as a
two-component vector of 32-bit unsigned integer values.
two-component vector of 32-bit integers.
endif::VK_EXT_fragment_density_map[]
@ -1685,7 +1685,7 @@ A variable decorated with the code:HitKindNV decoration will describe the
intersection that triggered the execution of the current shader.
The values are determined by the intersection shader.
+
The code:HitKindNV decoration must: only be used in any hit and closest hit
The code:HitKindNV decoration must: only be used in any-hit and closest hit
shaders.
+
Any variable decorated with code:HitKindNV must: be declared using the
@ -1700,7 +1700,7 @@ code:HitTNV::
A variable decorated with the code:HitTNV decoration is equivalent to a
variable decorated with the code:RayTmaxNV decoration.
+
The code:HitTNV decoration must: only be used in any hit and closest hit
The code:HitTNV decoration must: only be used in any-hit and closest hit
shaders.
+
Any variable decorated with code:HitTNV must: be declared using the
@ -1716,7 +1716,7 @@ A variable with the code:IncomingRayFlagsNV decoration will contain the ray
flags passed in to the trace call that invoked this particular shader.
+
The code:IncomingRayFlagsNV decoration must: only be used in the
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:IncomingRayFlagsNV must: be declared using
the code:Input storage class.
@ -1733,7 +1733,7 @@ current ray.
Only the lower 24 bits are valid, the upper 8 bits will be ignored.
+
The code:InstanceCustomIndexNV decoration must: only be used in the
intersection, any hit, and closest hit shaders.
intersection, any-hit, and closest hit shaders.
+
Any variable decorated with code:InstanceCustomIndexNV must: be declared
using the code:Input storage class.
@ -1836,7 +1836,7 @@ All shader invocations inherit the same value for variables decorated with
code:LaunchIDNV.
+
The code:LaunchIDNV decoration must: only be used within the ray generation,
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:LaunchIDNV must: be declared using the
code:Input storage class.
@ -1854,7 +1854,7 @@ The pname:width is in the first component, the pname:height is in the second
component, and the pname:depth is in the third component.
+
The code:LaunchSizeNV decoration must: only be used within ray generation,
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:LaunchSizeNV must: be declared using the
code:Input storage class.
@ -2099,7 +2099,7 @@ A variable decorated with the code:ObjectRayDirectionNV decoration will
specify the direction of the ray being processed, in object space.
+
The code:ObjectRayDirectionNV decoration must: only be used within
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:ObjectRayDirectionNV must: be declared
using the code:Input storage class.
@ -2114,7 +2114,7 @@ A variable decorated with the code:ObjectRayOriginNV decoration will specify
the origin of the ray being processed, in object space.
+
The code:ObjectRayOriginNV decoration must: only be used within
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:ObjectRayOriginNV must: be declared using
the code:Input storage class.
@ -2130,7 +2130,7 @@ the current object-to-world transformation matrix, which is determined by
the instance of the current intersection.
+
The code:ObjectToWorldNV decoration must: only be used within intersection,
any hit, and closest hit shaders.
any-hit, and closest hit shaders.
+
Any variable decorated with code:ObjectToWorldNV must: be declared using the
code:Input storage class.
@ -2352,7 +2352,7 @@ would have been presented as input to the geometry shader had it been
present.
ifdef::VK_NV_ray_tracing[]
+
In an intersection, any hit, or closest hit shader, it will contain the
In an intersection, any-hit, or closest hit shader, it will contain the
index of the triangle or bounding box being processed.
endif::VK_NV_ray_tracing[]
+
@ -2373,14 +2373,14 @@ ifdef::VK_NV_mesh_shader[]
mesh,
endif::VK_NV_mesh_shader[]
ifdef::VK_NV_ray_tracing[]
intersection, any hit, closest hit,
intersection, any-hit, closest hit,
endif::VK_NV_ray_tracing[]
fragment, tessellation control, tessellation evaluation, and geometry
shaders.
+
In
ifdef::VK_NV_ray_tracing[]
an intersection, any hit, closest hit,
an intersection, any-hit, closest hit,
endif::VK_NV_ray_tracing[]
ifndef::VK_NV_ray_tracing[]
a
@ -2460,18 +2460,18 @@ The pname:tmax value changes throughout the lifetime of the ray query that
produced the intersection.
In the closest hit shader, the value reflects the closest distance to the
intersected primitive.
In the any hit shader, it reflects the distance to the primitive currently
In the any-hit shader, it reflects the distance to the primitive currently
being intersected.
In the intersection shader, it reflects the distance to the closest
primitive intersected so far.
The value can change in the intersection shader after calling
code:OpReportIntersectionNV if the corresponding any hit shader does not
code:OpReportIntersectionNV if the corresponding any-hit shader does not
ignore the intersection.
In a miss shader, the value is identical to the parameter passed into
code:OpTraceNV.
+
The code:RayTmaxNV decoration must: only be used with the intersection, any
hit, closest hit, and miss shaders.
The code:RayTmaxNV decoration must: only be used with the intersection,
any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:RayTmaxNV must: be declared with the
code:Input storage class.
@ -2488,8 +2488,8 @@ The values are independent of the space in which the ray and origin exist.
+
The code:tmin value remains constant for the duration of the ray query.
+
The code:RayTminNV decoration must: only be used with the intersection, any
hit, closest hit, and miss shaders.
The code:RayTminNV decoration must: only be used with the intersection,
any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:RayTminNV must: be declared with the
code:Input storage class.
@ -3136,7 +3136,7 @@ A variable decorated with the code:WorldRayDirectionNV decoration will
specify the direction of the ray being processed, in world space.
+
The code:WorldRayDirectionNV decoration must: only be used within
intersection, any hit, closest hit, and miss shaders.
intersection, any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:WorldRayDirectionNV must: be declared using
the code:Input storage class.
@ -3151,7 +3151,7 @@ A variable decorated with the code:WorldRayOriginNV decoration will specify
the origin of the ray being processed, in world space.
+
The code:WorldRayOriginNV decoration must: only be used within intersection,
any hit, closest hit, and miss shaders.
any-hit, closest hit, and miss shaders.
+
Any variable decorated with code:WorldRayOriginNV must: be declared using
the code:Input storage class.
@ -3167,7 +3167,7 @@ the current world-to-object transformation matrix, which is determined by
the instance of the current intersection.
+
The code:WorldToObjectNV decoration must: only be used within intersection,
any hit, and closest hit shaders.
any-hit, and closest hit shaders.
+
Any variable decorated with code:WorldToObjectNV must: be declared using the
code:Input storage class.

View File

@ -424,7 +424,7 @@ endif::VK_NV_mesh_shader[]
additional stages which are introduced by extensions.
ifdef::VK_NV_ray_tracing[]
* ename:VK_SHADER_STAGE_RAYGEN_BIT_NV specifies the ray generation stage.
* ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV specifies the any hit stage.
* ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV specifies the any-hit stage.
* ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV specifies the closest hit
stage.
* ename:VK_SHADER_STAGE_MISS_BIT_NV specifies the miss stage.

View File

@ -1977,6 +1977,14 @@ include::../api/enums/VkResolveModeFlagBitsKHR.txt[]
* ename:VK_RESOLVE_MODE_MAX_BIT_KHR indicates that result of the resolve
operation is the maximum of the sample values.
--
[open,refpage='VkResolveModeFlagsKHR',desc='Bitmask of VkResolveModeFlagBitsKHR',type='flags']
--
include::../api/flags/VkResolveModeFlagsKHR.txt[]
tname:VkResolveModeFlagsKHR is a bitmask type for setting a mask of zero or
more elink:VkResolveModeFlagBitsKHR.
--
endif::VK_KHR_depth_stencil_resolve[]

View File

@ -702,6 +702,22 @@ supported unless other parameters meet all of the constraints:
* pname:usage only includes ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and/or
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Images created with a pname:format from one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>> have further
restrictions on their limits and capabilities compared to images created
with other formats.
Creation of images with a format requiring
<<features-formats-requiring-sampler-ycbcr-conversion, Y'C~B~C~R~
conversion>> may: not be supported unless other parameters meet all of the
constraints:
* pname:imageType is ename:VK_IMAGE_TYPE_2D
* pname:mipLevels is 1
* pname:arrayLayers is 1
* pname:samples is ename:VK_SAMPLE_COUNT_1_BIT
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Implementations may: support additional limits and capabilities beyond those
listed above.
@ -1266,7 +1282,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
<<features-formats-requiring-sampler-ycbcr-conversion>>,
pname:arrayLayers must: be 1
* [[VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260]]
If pame:format is a _multi-planar_ format, and if
If pname:format is a _multi-planar_ format, and if
pname:imageCreateFormatFeatures (as defined in
<<resources-image-creation-limits,Image Creation Limits>>) does not
contain ename:VK_FORMAT_FEATURE_DISJOINT_BIT, then pname:flags must: not
@ -1436,13 +1452,13 @@ matches that of sname:VkImageCreateInfo::pname:usage.
When this structure is present sname:VkImageCreateInfo::pname:usage
specifies the intended usage of the depth aspect of the image and
sname:VkImageStencilUsageCreateInfoEXT::stencilUsage specifies the intended
usage of the stencil aspect of the image.
sname:VkImageStencilUsageCreateInfoEXT::pname:stencilUsage specifies the
intended usage of the stencil aspect of the image.
However, for the purposes of determining image specific valid usage
conditions, the image itself is considered to be created with a particular
elink:VkImageUsageFlagBits value if either
sname:VkImageCreateInfo::pname:usage or
sname:VkImageStencilUsageCreateInfoEXT::stencil usage includes that bit
sname:VkImageStencilUsageCreateInfoEXT::pname:stencilUsage includes that bit
value.
This structure can: also be included in the pname:pNext chain of
@ -3704,8 +3720,8 @@ include::../api/structs/VkImageViewASTCDecodeModeEXT.txt[]
ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
* [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231]]
If the <<features-features-astc-decodeModeSharedExponent,
decodeModeSharedExponent>> feature is not enabled, pname:decodeMode
must: not be ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
pname:decodeModeSharedExponent>> feature is not enabled,
pname:decodeMode must: not be ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
* [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232]]
If pname:decodeMode is ename:VK_FORMAT_R8G8B8A8_UNORM the image view
must: not include blocks using any of the ASTC HDR modes
@ -4760,6 +4776,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
slink:VkMemoryDedicatedRequirements::requiresDedicatedAllocation for
pname:image), pname:memory must: have been created with
slink:VkMemoryDedicatedAllocateInfo::pname:image equal to pname:image
ifndef::VK_NV_dedicated_allocation_image_aliasing[]
* [[VUID-vkBindImageMemory-memory-01509]]
If the sname:VkMemoryAllocateInfo provided when pname:memory was
allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in
@ -4768,6 +4785,34 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
dlink:VK_NULL_HANDLE, then pname:image must: equal
slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
must: be zero.
endif::VK_NV_dedicated_allocation_image_aliasing[]
ifdef::VK_NV_dedicated_allocation_image_aliasing[]
* [[VUID-vkBindImageMemory-memory-02628]]
If the <<features-features-dedicatedAllocationImageAliasing,dedicated
allocation image aliasing>> feature is not enabled, and the
sname:VkMemoryAllocateInfo provided when pname:memory was allocated
included an instance of slink:VkMemoryDedicatedAllocateInfo in its
pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
was not dlink:VK_NULL_HANDLE, then pname:image must: equal
slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
must: be zero.
* [[VUID-vkBindImageMemory-memory-02629]]
If the <<features-features-dedicatedAllocationImageAliasing,dedicated
allocation image aliasing>> feature is enabled, and the
sname:VkMemoryAllocateInfo provided when pname:memory was allocated
included an instance of slink:VkMemoryDedicatedAllocateInfo in its
pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
was not dlink:VK_NULL_HANDLE, then pname:memoryOffset must: be zero, and
pname:image must: be either equal to
slink:VkMemoryDedicatedAllocateInfo::pname:image or an image that was
created using the same parameters in sname:VkImageCreateInfo, with the
exception that pname:extent and pname:arrayLayers may: differ subject to
the following restrictions: every dimension in the pname:extent
parameter of the image being bound must: be equal to or smaller than the
original image for which the allocation was created; and the
pname:arrayLayers parameter of the image being bound must: be equal to
or smaller than the original image for which the allocation was created.
endif::VK_NV_dedicated_allocation_image_aliasing[]
endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkBindImageMemory-None-01901]]
@ -4940,6 +4985,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
pname:image), pname:memory must: have been created with
slink:VkMemoryDedicatedAllocateInfo::pname:image equal to pname:image
and pname:memoryOffset must: be zero
ifndef::VK_NV_dedicated_allocation_image_aliasing[]
* [[VUID-VkBindImageMemoryInfo-memory-01903]]
If the sname:VkMemoryAllocateInfo provided when pname:memory was
allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in
@ -4948,6 +4994,34 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
dlink:VK_NULL_HANDLE, then pname:image must: equal
slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
must: be zero.
endif::VK_NV_dedicated_allocation_image_aliasing[]
ifdef::VK_NV_dedicated_allocation_image_aliasing[]
* [[VUID-VkBindImageMemoryInfo-memory-02630]]
If the <<features-features-dedicatedAllocationImageAliasing,dedicated
allocation image aliasing>> feature is not enabled, and the
sname:VkMemoryAllocateInfo provided when pname:memory was allocated
included an instance of slink:VkMemoryDedicatedAllocateInfo in its
pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
was not dlink:VK_NULL_HANDLE, then pname:image must: equal
slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
must: be zero.
* [[VUID-VkBindImageMemoryInfo-memory-02631]]
If the <<features-features-dedicatedAllocationImageAliasing,dedicated
allocation image aliasing>> feature is enabled, and the
sname:VkMemoryAllocateInfo provided when pname:memory was allocated
included an instance of slink:VkMemoryDedicatedAllocateInfo in its
pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
was not dlink:VK_NULL_HANDLE, then pname:memoryOffset must: be zero, and
pname:image must: be either equal to
slink:VkMemoryDedicatedAllocateInfo::pname:image or an image that was
created using the same parameters in sname:VkImageCreateInfo, with the
exception that pname:extent and pname:arrayLayers may: differ subject to
the following restrictions: every dimension in the pname:extent
parameter of the image being bound must: be equal to or smaller than the
original image for which the allocation was created; and the
pname:arrayLayers parameter of the image being bound must: be equal to
or smaller than the original image for which the allocation was created.
endif::VK_NV_dedicated_allocation_image_aliasing[]
endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
ifdef::VK_NV_dedicated_allocation[]
* [[VUID-VkBindImageMemoryInfo-image-01623]]

View File

@ -229,18 +229,20 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkSamplerCreateInfo-compareEnable-01080]]
If pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a
valid elink:VkCompareOp value
ifdef::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-VkSamplerCreateInfo-magFilter-01081]]
If either pname:magFilter or pname:minFilter is
ename:VK_FILTER_CUBIC_IMG, pname:anisotropyEnable must: be
ename:VK_FILTER_CUBIC_EXT, pname:anisotropyEnable must: be
ename:VK_FALSE
endif::VK_IMG_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
ifndef::VK_EXT_filter_cubic[]
* [[VUID-VkSamplerCreateInfo-magFilter-01422]]
If either pname:magFilter or pname:minFilter is
ename:VK_FILTER_CUBIC_IMG, the pname:reductionMode member of
ename:VK_FILTER_CUBIC_EXT, the pname:reductionMode member of
slink:VkSamplerReductionModeCreateInfoEXT must: be
ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
ifdef::VK_EXT_sampler_filter_minmax[]
* [[VUID-VkSamplerCreateInfo-compareEnable-01423]]
@ -371,9 +373,9 @@ include::../api/enums/VkFilter.txt[]
* ename:VK_FILTER_NEAREST specifies nearest filtering.
* ename:VK_FILTER_LINEAR specifies linear filtering.
ifdef::VK_IMG_filter_cubic[]
* ename:VK_FILTER_CUBIC_IMG specifies cubic filtering.
endif::VK_IMG_filter_cubic[]
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* ename:VK_FILTER_CUBIC_EXT specifies cubic filtering.
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
These filters are described in detail in <<textures-texel-filtering, Texel
Filtering>>.

File diff suppressed because it is too large Load Diff

View File

@ -712,3 +712,6 @@ code { -webkit-border-radius: 4px; border-radius: 4px; }
p.tableblock.header { color: #6d6e71; }
.literalblock pre, .listingblock pre { background: #eee; }
/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
a code { color: inherit; }

View File

@ -77,7 +77,7 @@ endif::ratified_core_spec[]
Vulkan and Khronos are registered trademarks of The Khronos Group Inc.
ASTC is a trademark of ARM Holdings PLC; OpenCL is a trademark of Apple
Inc.; and OpenGL is a registered trademark of Silicon Graphics
International, all used under license by Khronos. All other product names,
Inc.; and OpenGL and OpenGL ES are registered trademarks of Hewlett Packard
Enterprise, all used under license by Khronos. All other product names,
trademarks, and/or company names are used solely for identification and
belong to their respective owners.

View File

@ -204,7 +204,7 @@
x="0 5.7638516 11.039961 15.60358 17.642841 23.882374 26.157471"
y="0"
sodipodi:role="line"
id="tspan3815">Any Hit</tspan></text>
id="tspan3815">Any-Hit</tspan></text>
</g><path
d="m 2226,5063 h -6 1 l -6,-2 -4,-2 -5,-3 -5,-4 -5,-5 -6,-5 -5,-7 -5,-7 -5,-8 -5,-9 -5,-10 -5,-10 -4,-11 -5,-11 -4,-13 -5,-12 -4,-13 -3,-14 -4,-14 -3,-14 -4,-15 -5,-31 -5,-31 -3,-32 -2,-33 -1,-33 1,-17 v -16 l 2,-16 2,-17 2,-16 3,-16 3,-16 3,-15 4,-16 5,-15 5,-14 5,-15 5,-14 6,-13 6,-13 7,-13 6,-12 7,-11 7,-11 8,-10 7,-10 8,-9 8,-8 8,-8 8,-6 8,-6 8,-5 -1,1 11,-4 -5,-13 -11,4 h -1 l -9,6 -9,6 -9,7 -8,8 -8,9 -9,9 -7,11 -8,10 -8,12 -7,12 -7,12 -6,13 -7,13 -5,14 -6,15 -5,14 -5,16 -5,15 -4,16 -4,16 -3,16 -3,16 -2,17 -2,16 -1,17 -1,17 v 51 l 2,33 4,33 4,32 6,31 3,15 4,15 3,14 4,14 4,13 5,13 4,13 5,11 5,12 5,10 5,11 5,9 6,9 5,8 6,7 6,6 6,6 7,5 6,4 7,3 6,1 c 0,0 0,0 1,0 l 6,1 z m 30,-675 35,-30 -46,-10"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
@ -235,4 +235,4 @@
y="0"
sodipodi:role="line"
id="tspan3831">yesno</tspan></text>
</g></g></g></svg>
</g></g></g></svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 69 KiB

1205
images/vulkantexture0-ll.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 71 KiB

1019
images/vulkantexture1-ll.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,510 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="316.03922"
height="316.03922"
viewBox="0 0 83.618714 83.618707"
version="1.1"
id="svg8"
inkscape:version="0.48.4 r9939"
sodipodi:docname="vulkantexture2-ll.svg">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-0"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path977-6"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1483-7"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
inkscape:connector-curvature="0"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1481-0" />
</marker>
<marker
inkscape:stockid="Arrow2Sstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Sstart-2"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1056-6"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send-6"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1041-8"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Sstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Sstart-2-0"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1056-6-3"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send-6-3"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1041-8-6"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Sstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Sstart-2-5"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1056-6-0"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send-6-2"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1041-8-9"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Sstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Sstart-2-5-6"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1056-6-0-6"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send-6-2-9"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1041-8-9-7"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="162.12843"
inkscape:cy="160.27895"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-text-baseline="true"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="1928"
inkscape:window-y="31"
inkscape:window-maximized="0"
fit-margin-top="1"
fit-margin-right="1"
fit-margin-bottom="1"
fit-margin-left="1"
units="px"
inkscape:snap-center="true">
<inkscape:grid
type="xygrid"
id="grid12"
originx="-44.673178"
originy="-42.027352"
dotted="false" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-52.423029,41.958581)">
<g
id="g1463"
transform="matrix(3.5000002,0,0,3.5000002,-68.979321,-98.562563)"
style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none">
<g
id="g3211">
<circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4517"
cx="42.333332"
cy="21.833345"
r="0.52778977"
d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
<circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4517-7"
cx="52.916668"
cy="21.833345"
r="0.52778977"
d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
<path
style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.041666,16.541679 21.166656,-4e-6 5e-6,21.166664 -21.166661,4e-6 V 16.541679 m 10.583334,0 -10e-7,21.166664 m 10.583323,-10.583334 -21.166655,4e-6"
id="path1171"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4517-6"
cx="42.333332"
cy="32.416679"
r="0.52778977"
d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
<circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4517-7-3"
cx="52.916668"
cy="32.416679"
r="0.52778977"
d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
</g>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.5291667px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
d="m 60.666509,38.708309 34.395846,1e-5 m 5.291665,0 34.39583,-1e-5"
id="path972-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333358999999998px;line-height:30%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664000000002"
x="97.724724"
y="39.86277"
id="text121-3-7-3-3-5"
sodipodi:linespacing="30%"><tspan
sodipodi:role="line"
id="tspan3044">X</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5291667px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
d="m 55.374849,33.416642 5e-6,-34.39582401 m 0,-5.29166679 -5e-6,-34.3958442"
id="path1607-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
id="text1611-4"
y="-2.1615388"
x="55.153679"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333358999999998px;line-height:30%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664000000002"
xml:space="preserve"
sodipodi:linespacing="30%"><tspan
sodipodi:role="line"
id="tspan3046">Y</tspan></text>
<path
style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Sstart-2);marker-end:url(#Arrow1Send-6)"
d="M 81.833183,-22.145859 H 113.58318"
id="path8722-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Sstart-2-0);marker-end:url(#Arrow1Send-6-3)"
d="M 81.833183,14.895812 H 113.58318"
id="path8722-9-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Sstart-2-5);marker-end:url(#Arrow1Send-6-2)"
d="m 79.187349,-19.500023 v 31.75"
id="path8722-9-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Sstart-2-5-6);marker-end:url(#Arrow1Send-6-2-9)"
d="m 116.22902,-19.500025 v 31.75"
id="path8722-9-0-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
id="g1020"
transform="matrix(0.26458334,0,0,0.26458334,84.872125,-22.011222)">
<g
id="g5766"
transform="translate(-33.403644,-1.4186198)">
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
x="59.062431"
y="-5.2611041"
id="text5070-2-2-0"><tspan
sodipodi:role="line"
id="tspan5068-0-3-1"
x="59.062431"
y="-5.2611041"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.52916664">dPdx</tspan></text>
<text
xml:space="preserve"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
x="97.567635"
y="-0.92451537"
id="text12872-4"><tspan
sodipodi:role="line"
id="tspan12870-45"
x="97.567635"
y="-0.92451537"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'">1</tspan></text>
</g>
</g>
<g
id="g1020-3"
transform="matrix(0.26458334,0,0,0.26458334,84.872125,20.322112)">
<g
id="g5766-4"
transform="translate(-33.403644,-1.4186198)">
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
x="59.062431"
y="-5.2611041"
id="text5070-2-2-0-8"><tspan
sodipodi:role="line"
id="tspan5068-0-3-1-1"
x="59.062431"
y="-5.2611041"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.52916664">dPdx</tspan></text>
<text
xml:space="preserve"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
x="97.567635"
y="-0.92451537"
id="text12872-4-0"><tspan
sodipodi:role="line"
id="tspan12870-45-9"
x="97.567635"
y="-0.92451537"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'">0</tspan></text>
</g>
</g>
<g
id="g1020-2"
transform="matrix(0,-0.26458334,0.26458334,0,121.65532,9.2110479)">
<g
id="g5766-8"
transform="translate(-33.403644,-1.4186198)">
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
x="59.062431"
y="-5.2611041"
id="text5070-2-2-0-7"><tspan
sodipodi:role="line"
id="tspan5068-0-3-1-3"
x="59.062431"
y="-5.2611041"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.52916664">dPdy</tspan></text>
<text
xml:space="preserve"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
x="97.567635"
y="-0.92451537"
id="text12872-4-9"><tspan
sodipodi:role="line"
id="tspan12870-45-2"
x="97.567635"
y="-0.92451537"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'">1</tspan></text>
</g>
</g>
<g
id="g1020-2-0"
transform="matrix(0,-0.26458334,0.26458334,0,79.321981,9.2110479)">
<g
id="g5766-8-2"
transform="translate(-33.403644,-1.4186198)">
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
x="59.062431"
y="-5.2611041"
id="text5070-2-2-0-7-5"><tspan
sodipodi:role="line"
id="tspan5068-0-3-1-3-5"
x="59.062431"
y="-5.2611041"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.52916664">dPdy</tspan></text>
<text
xml:space="preserve"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
x="97.567635"
y="-0.92451537"
id="text12872-4-9-8"><tspan
sodipodi:role="line"
id="tspan12870-45-2-3"
x="97.567635"
y="-0.92451537"
style="font-size:10.66666698px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'">0</tspan></text>
</g>
</g>
<g
id="g3134">
<g
transform="translate(0.52916672,1.0142766e-6)"
id="g3645">
<text
sodipodi:linespacing="30.000001%"
id="text121"
y="-27.69998"
x="77.357597"
style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:30.00000119%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
xml:space="preserve"><tspan
y="-27.69998"
x="77.357597"
id="tspan4363"
sodipodi:role="line"
style="font-size:4.23333359px">2</tspan></text>
<text
sodipodi:linespacing="30.000001%"
id="text121-6"
y="-27.699984"
x="114.39923"
style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:30.00000119%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
xml:space="preserve"
inkscape:transform-center-x="94.092779"
inkscape:transform-center-y="27.815922"><tspan
y="-27.699984"
x="114.39923"
id="tspan4363-4"
sodipodi:role="line"
style="font-size:4.23333359px">3</tspan></text>
</g>
<g
id="g3645-0"
transform="translate(0.52916672,50.800011)">
<text
sodipodi:linespacing="30.000001%"
id="text121-3"
y="-26.641645"
x="77.357597"
style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:30.00000119%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
xml:space="preserve"><tspan
y="-26.641645"
x="77.357597"
id="tspan4363-5"
sodipodi:role="line"
style="font-size:4.23333359px">0</tspan></text>
<text
sodipodi:linespacing="30.000001%"
id="text121-6-8"
y="-26.641649"
x="114.39923"
style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:30.00000119%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
xml:space="preserve"
inkscape:transform-center-x="94.092779"
inkscape:transform-center-y="27.815922"><tspan
y="-26.641649"
x="114.39923"
id="tspan4363-4-5"
sodipodi:role="line"
style="font-size:4.23333359px">1</tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

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 98
#define VK_HEADER_VERSION 99
#define VK_NULL_HANDLE 0
@ -431,6 +431,8 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000,
VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = 1000177000,
VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
@ -466,6 +468,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000,
VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = 1000244000,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = 1000244001,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
@ -1140,7 +1143,7 @@ typedef enum VkDynamicState {
typedef enum VkFilter {
VK_FILTER_NEAREST = 0,
VK_FILTER_LINEAR = 1,
VK_FILTER_CUBIC_IMG = 1000015000,
VK_FILTER_CUBIC_EXT = 1000015000,
VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
@ -1340,7 +1343,7 @@ typedef enum VkFormatFeatureFlagBits {
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = 0x00010000,
VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
@ -6382,6 +6385,10 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
#define VK_IMG_filter_cubic 1
#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1
#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
#define VK_FILTER_CUBIC_EXT 1000015000
#define VK_FILTER_CUBIC_IMG VK_FILTER_CUBIC_EXT
#define VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT 0x00002000
#define VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
#define VK_AMD_rasterization_order 1
@ -8552,6 +8559,25 @@ typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV {
#define VK_EXT_filter_cubic 1
#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 1
#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic"
typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
VkStructureType sType;
void* pNext;
VkImageViewType imageViewType;
} VkPhysicalDeviceImageViewImageFormatInfoEXT;
typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 filterCubic;
VkBool32 filterCubicMinmax ;
} VkFilterCubicImageViewImageFormatPropertiesEXT;
#define VK_EXT_global_priority 1
#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
@ -9004,6 +9030,18 @@ typedef struct VkMemoryPriorityAllocateInfoEXT {
#define VK_NV_dedicated_allocation_image_aliasing 1
#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1
#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing"
typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 dedicatedAllocationImageAliasing;
} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
#define VK_EXT_buffer_device_address 1
typedef uint64_t VkDeviceAddress;

View File

@ -1,63 +1,85 @@
# [<img src="https://khan.github.io/KaTeX/katex-logo.svg" width="130" alt="KaTeX">](https://khan.github.io/KaTeX/) [![Build Status](https://travis-ci.org/Khan/KaTeX.svg?branch=master)](https://travis-ci.org/Khan/KaTeX)
[![Join the chat at https://gitter.im/Khan/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Khan/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# [<img src="https://cdn.rawgit.com/Khan/KaTeX/84189cd3adae24d92e766d14eb80d6e54f3c7dca/katex-logo.svg" width="130" alt="KaTeX">](https://katex.org/)
[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex)
[![CircleCI](https://circleci.com/gh/Khan/KaTeX.svg?style=shield)](https://circleci.com/gh/Khan/KaTeX)
[![codecov](https://codecov.io/gh/Khan/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/Khan/KaTeX)
[![Join the chat at https://gitter.im/Khan/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Khan/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Greenkeeper badge](https://badges.greenkeeper.io/Khan/KaTeX.svg)](https://greenkeeper.io/)
[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex)
![](https://img.badgesize.io/Khan/KaTeX/v0.10.0/dist/katex.min.js?compression=gzip)
KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
* **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://jsperf.com/katex-vs-mathjax/).
* **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://www.intmath.com/cg5/katex-mathjax-comparison.php).
* **Print quality:** KaTeXs layout is based on Donald Knuths TeX, the gold standard for math typesetting.
* **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
* **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, and IE 8 - IE 11. A list of supported commands can be on the [wiki](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX).
KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 911.
## Usage
KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html).
You can [download KaTeX](https://github.com/khan/katex/releases) and host it on your server or include the `katex.min.js` and `katex.min.css` files on your page directly from a CDN:
Try out KaTeX [on the demo page](https://katex.org/#demo)!
## Getting started
### Starter template
```html
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.js"></script>
<!DOCTYPE html>
<!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly -->
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.css" integrity="sha384-9eLZqc9ds8eNjO3TmqPeYcDj8n+Qfa4nuSiGYa6DjLNcv9BtN69ZIulL9+8CqC9Y" crossorigin="anonymous">
<!-- The loading of KaTeX is deferred to speed up page rendering -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.js" integrity="sha384-K3vbOmF2BtaVai+Qk37uypf7VrgBubhQreNQe9aGsz9lB63dIFiQVlJbr92dw2Lx" crossorigin="anonymous"></script>
<!-- To automatically render math in text elements, include the auto-render extension: -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/contrib/auto-render.min.js" integrity="sha384-kmZOZB5ObwgQnS/DuDg6TScgOiWWBiVt0plIRkZCmE6rDZGrEOQeHM5PcHi+nyqe" crossorigin="anonymous"
onload="renderMathInElement(document.body);"></script>
</head>
...
</html>
```
#### In-browser rendering
You can also [download KaTeX](https://github.com/khan/katex/releases) and host it yourself.
Call `katex.render` with a TeX expression and a DOM element to render into:
For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html).
```js
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);
```
If KaTeX can't parse the expression, it throws a `katex.ParseError` error.
#### Server side rendering or rendering to a string
To generate HTML on the server or to generate an HTML string of the rendered math, you can use `katex.renderToString`:
```js
var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
// '<span class="katex">...</span>'
```
Make sure to include the CSS and font files, but there is no need to include the JavaScript. Like `render`, `renderToString` throws if it can't parse the expression.
#### Rendering options
You can provide an object of options as the last argument to `katex.render` and `katex.renderToString`. Available options are:
- `displayMode`: `boolean`. If `true` the math will be rendered in display mode, which will put the math in display style (so `\int` and `\sum` are large, for example), and will center the math on the page on its own line. If `false` the math will be rendered in inline mode. (default: `false`)
- `throwOnError`: `boolean`. If `true`, KaTeX will throw a `ParseError` when it encounters an unsupported command. If `false`, KaTeX will render the unsupported command as text in the color given by `errorColor`. (default: `true`)
- `errorColor`: `string`. A color string given in the format `"#XXX"` or `"#XXXXXX"`. This option determines the color which unsupported commands are rendered in. (default: `#cc0000`)
### API
Call `katex.render` to render a TeX expression directly into a DOM element.
For example:
```js
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { displayMode: true });
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, {
throwOnError: false
});
```
#### Automatic rendering of math on a page
Call `katex.renderToString` to generate an HTML string of the rendered math,
e.g., for server-side rendering. For example:
Math on the page can be automatically rendered using the auto-render extension. See [the Auto-render README](contrib/auto-render/README.md) for more information.
```js
var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", {
throwOnError: false
});
// '<span class="katex">...</span>'
```
Make sure to include the CSS and font files in both cases.
If you are doing all rendering on the server, there is no need to include the
JavaScript on the client.
The examples above use the `throwOnError: false` option, which renders invalid
inputs as the TeX source code in red (by default), with the error message as
hover text. For other available options, see the
[API documentation](https://katex.org/docs/api.html),
[options documentation](https://katex.org/docs/options.html), and
[handling errors documentation](https://katex.org/docs/error.html).
## Demo and Documentation
Learn more about using KaTeX [on the website](https://katex.org)!
## Contributing

View File

@ -0,0 +1,335 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("katex"));
else if(typeof define === 'function' && define.amd)
define(["katex"], factory);
else if(typeof exports === 'object')
exports["renderMathInElement"] = factory(require("katex"));
else
root["renderMathInElement"] = factory(root["katex"]);
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// EXTERNAL MODULE: external "katex"
var external_katex_ = __webpack_require__(0);
var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_);
// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
/* eslint no-constant-condition:0 */
var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
// Adapted from
// https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
var index = startIndex;
var braceLevel = 0;
var delimLength = delimiter.length;
while (index < text.length) {
var character = text[index];
if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
return index;
} else if (character === "\\") {
index++;
} else if (character === "{") {
braceLevel++;
} else if (character === "}") {
braceLevel--;
}
index++;
}
return -1;
};
var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
var finalData = [];
for (var i = 0; i < startData.length; i++) {
if (startData[i].type === "text") {
var text = startData[i].data;
var lookingForLeft = true;
var currIndex = 0;
var nextIndex = void 0;
nextIndex = text.indexOf(leftDelim);
if (nextIndex !== -1) {
currIndex = nextIndex;
finalData.push({
type: "text",
data: text.slice(0, currIndex)
});
lookingForLeft = false;
}
while (true) {
if (lookingForLeft) {
nextIndex = text.indexOf(leftDelim, currIndex);
if (nextIndex === -1) {
break;
}
finalData.push({
type: "text",
data: text.slice(currIndex, nextIndex)
});
currIndex = nextIndex;
} else {
nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
if (nextIndex === -1) {
break;
}
finalData.push({
type: "math",
data: text.slice(currIndex + leftDelim.length, nextIndex),
rawData: text.slice(currIndex, nextIndex + rightDelim.length),
display: display
});
currIndex = nextIndex + rightDelim.length;
}
lookingForLeft = !lookingForLeft;
}
finalData.push({
type: "text",
data: text.slice(currIndex)
});
} else {
finalData.push(startData[i]);
}
}
return finalData;
};
/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters);
// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
/* eslint no-console:0 */
var auto_render_splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
var data = [{
type: "text",
data: text
}];
for (var i = 0; i < delimiters.length; i++) {
var delimiter = delimiters[i];
data = auto_render_splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
}
return data;
};
/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
* API, we should copy it before mutating.
*/
var auto_render_renderMathInText = function renderMathInText(text, optionsCopy) {
var data = auto_render_splitWithDelimiters(text, optionsCopy.delimiters);
var fragment = document.createDocumentFragment();
for (var i = 0; i < data.length; i++) {
if (data[i].type === "text") {
fragment.appendChild(document.createTextNode(data[i].data));
} else {
var span = document.createElement("span");
var math = data[i].data; // Override any display mode defined in the settings with that
// defined by the text itself
optionsCopy.displayMode = data[i].display;
try {
external_katex_default.a.render(math, span, optionsCopy);
} catch (e) {
if (!(e instanceof external_katex_default.a.ParseError)) {
throw e;
}
optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
fragment.appendChild(document.createTextNode(data[i].rawData));
continue;
}
fragment.appendChild(span);
}
}
return fragment;
};
var renderElem = function renderElem(elem, optionsCopy) {
for (var i = 0; i < elem.childNodes.length; i++) {
var childNode = elem.childNodes[i];
if (childNode.nodeType === 3) {
// Text node
var frag = auto_render_renderMathInText(childNode.textContent, optionsCopy);
i += frag.childNodes.length - 1;
elem.replaceChild(frag, childNode);
} else if (childNode.nodeType === 1) {
(function () {
// Element node
var className = ' ' + childNode.className + ' ';
var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) {
return className.indexOf(' ' + x + ' ') === -1;
});
if (shouldRender) {
renderElem(childNode, optionsCopy);
}
})();
} // Otherwise, it's something else, and ignore it.
}
};
var renderMathInElement = function renderMathInElement(elem, options) {
if (!elem) {
throw new Error("No element provided to render");
}
var optionsCopy = {}; // Object.assign(optionsCopy, option)
for (var option in options) {
if (options.hasOwnProperty(option)) {
optionsCopy[option] = options[option];
}
} // default options
optionsCopy.delimiters = optionsCopy.delimiters || [{
left: "$$",
right: "$$",
display: true
}, {
left: "\\(",
right: "\\)",
display: false
}, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
// {left: "$", right: "$", display: false},
// \[…\] must come last in this array. Otherwise, renderMathInElement
// will search for \[ before it searches for $$ or \(
// That makes it susceptible to finding a \\[0.3em] row delimiter and
// treating it as if it were the start of a KaTeX math zone.
{
left: "\\[",
right: "\\]",
display: true
}];
optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
// math elements within a single call to `renderMathInElement`.
optionsCopy.macros = optionsCopy.macros || {};
renderElem(elem, optionsCopy);
};
/* harmony default export */ var auto_render = __webpack_exports__["default"] = (renderMathInElement);
/***/ })
/******/ ])["default"];
});

View File

@ -1 +1 @@
(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.renderMathInElement=e()}})(function(){var e,t,r;return function n(e,t,r){function a(o,l){if(!t[o]){if(!e[o]){var f=typeof require=="function"&&require;if(!l&&f)return f(o,!0);if(i)return i(o,!0);var d=new Error("Cannot find module '"+o+"'");throw d.code="MODULE_NOT_FOUND",d}var s=t[o]={exports:{}};e[o][0].call(s.exports,function(t){var r=e[o][1][t];return a(r?r:t)},s,s.exports,n,e,t,r)}return t[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)a(r[o]);return a}({1:[function(e,t,r){var n=e("./splitAtDelimiters");var a=function(e,t){var r=[{type:"text",data:e}];for(var a=0;a<t.length;a++){var i=t[a];r=n(r,i.left,i.right,i.display||false)}return r};var i=function(e,t){var r=a(e,t);var n=document.createDocumentFragment();for(var i=0;i<r.length;i++){if(r[i].type==="text"){n.appendChild(document.createTextNode(r[i].data))}else{var o=document.createElement("span");var l=r[i].data;try{katex.render(l,o,{displayMode:r[i].display})}catch(f){if(!(f instanceof katex.ParseError)){throw f}console.error("KaTeX auto-render: Failed to parse `"+r[i].data+"` with ",f);n.appendChild(document.createTextNode(r[i].rawData));continue}n.appendChild(o)}}return n};var o=function(e,t,r){for(var n=0;n<e.childNodes.length;n++){var a=e.childNodes[n];if(a.nodeType===3){var l=i(a.textContent,t);n+=l.childNodes.length-1;e.replaceChild(l,a)}else if(a.nodeType===1){var f=r.indexOf(a.nodeName.toLowerCase())===-1;if(f){o(a,t,r)}}}};var l={delimiters:[{left:"$$",right:"$$",display:true},{left:"\\[",right:"\\]",display:true},{left:"\\(",right:"\\)",display:false}],ignoredTags:["script","noscript","style","textarea","pre","code"]};var f=function(e){var t;var r;for(var n=1,a=arguments.length;n<a;n++){t=arguments[n];for(r in t){if(Object.prototype.hasOwnProperty.call(t,r)){e[r]=t[r]}}}return e};var d=function(e,t){if(!e){throw new Error("No element provided to render")}t=f({},l,t);o(e,t.delimiters,t.ignoredTags)};t.exports=d},{"./splitAtDelimiters":2}],2:[function(e,t,r){var n=function(e,t,r){var n=r;var a=0;var i=e.length;while(n<t.length){var o=t[n];if(a<=0&&t.slice(n,n+i)===e){return n}else if(o==="\\"){n++}else if(o==="{"){a++}else if(o==="}"){a--}n++}return-1};var a=function(e,t,r,a){var i=[];for(var o=0;o<e.length;o++){if(e[o].type==="text"){var l=e[o].data;var f=true;var d=0;var s;s=l.indexOf(t);if(s!==-1){d=s;i.push({type:"text",data:l.slice(0,d)});f=false}while(true){if(f){s=l.indexOf(t,d);if(s===-1){break}i.push({type:"text",data:l.slice(d,s)});d=s}else{s=n(r,l,d+t.length);if(s===-1){break}i.push({type:"math",data:l.slice(d+t.length,s),rawData:l.slice(d,s+r.length),display:a});d=s+r.length}f=!f}i.push({type:"text",data:l.slice(d)})}else{i.push(e[o])}}return i};t.exports=a},{}]},{},[1])(1)});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(r){return function(r){var n={};function o(e){if(n[e])return n[e].exports;var t=n[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=r,o.c=n,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(r,n,function(e){return t[e]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=1)}([function(e,t){e.exports=r},function(e,t,r){"use strict";r.r(t);var n=r(0),l=r.n(n),s=function(e,t,r){for(var n=r,o=0,a=e.length;n<t.length;){var i=t[n];if(o<=0&&t.slice(n,n+a)===e)return n;"\\"===i?n++:"{"===i?o++:"}"===i&&o--,n++}return-1},d=function(e,t,r,n){for(var o=[],a=0;a<e.length;a++)if("text"===e[a].type){var i=e[a].data,l=!0,d=0,f=void 0;for(-1!==(f=i.indexOf(t))&&(d=f,o.push({type:"text",data:i.slice(0,d)}),l=!1);;){if(l){if(-1===(f=i.indexOf(t,d)))break;o.push({type:"text",data:i.slice(d,f)}),d=f}else{if(-1===(f=s(r,i,d+t.length)))break;o.push({type:"math",data:i.slice(d+t.length,f),rawData:i.slice(d,f+r.length),display:n}),d=f+r.length}l=!l}o.push({type:"text",data:i.slice(d)})}else o.push(e[a]);return o},i=function(e,t){for(var r=function(e,t){for(var r=[{type:"text",data:e}],n=0;n<t.length;n++){var o=t[n];r=d(r,o.left,o.right,o.display||!1)}return r}(e,t.delimiters),n=document.createDocumentFragment(),o=0;o<r.length;o++)if("text"===r[o].type)n.appendChild(document.createTextNode(r[o].data));else{var a=document.createElement("span"),i=r[o].data;t.displayMode=r[o].display;try{l.a.render(i,a,t)}catch(e){if(!(e instanceof l.a.ParseError))throw e;t.errorCallback("KaTeX auto-render: Failed to parse `"+r[o].data+"` with ",e),n.appendChild(document.createTextNode(r[o].rawData));continue}n.appendChild(a)}return n};t.default=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},function e(t,r){for(var n=0;n<t.childNodes.length;n++){var o=t.childNodes[n];if(3===o.nodeType){var a=i(o.textContent,r);n+=a.childNodes.length-1,t.replaceChild(a,o)}else 1===o.nodeType&&function(){var t=" "+o.className+" ";-1===r.ignoredTags.indexOf(o.nodeName.toLowerCase())&&r.ignoredClasses.every(function(e){return-1===t.indexOf(" "+e+" ")})&&e(o,r)}()}}(e,r)}}]).default});

View File

@ -0,0 +1,14 @@
/* Force selection of entire .katex/.katex-display blocks, so that we can
* copy/paste the entire source code. If you omit this CSS, partial
* selections of a formula will work, but will copy the ugly HTML
* representation instead of the LaTeX source code. (Full selections will
* still produce the LaTeX source code.)
*/
.katex,
.katex-display {
user-select: all;
-moz-user-select: all;
-webkit-user-select: all;
-ms-user-select: all;
}

208
katex/contrib/copy-tex.js Normal file
View File

@ -0,0 +1,208 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})((typeof self !== 'undefined' ? self : this), function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 2);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
// extracted by mini-css-extract-plugin
/***/ }),
/* 1 */,
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
var copy_tex = __webpack_require__(0);
// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
// Set these to how you want inline and display math to be delimited.
var defaultCopyDelimiters = {
inline: ['$', '$'],
// alternative: ['\(', '\)']
display: ['$$', '$$'] // alternative: ['\[', '\]']
}; // Replace .katex elements with their TeX source (<annotation> element).
// Modifies fragment in-place. Useful for writing your own 'copy' handler,
// as in copy-tex.js.
var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
if (copyDelimiters === void 0) {
copyDelimiters = defaultCopyDelimiters;
}
// Remove .katex-html blocks that are preceded by .katex-mathml blocks
// (which will get replaced below).
var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
for (var i = 0; i < katexHtml.length; i++) {
var element = katexHtml[i];
if (element.remove) {
element.remove(null);
} else {
element.parentNode.removeChild(element);
}
} // Replace .katex-mathml elements with their annotation (TeX source)
// descendant, with inline delimiters.
var katexMathml = fragment.querySelectorAll('.katex-mathml');
for (var _i = 0; _i < katexMathml.length; _i++) {
var _element = katexMathml[_i];
var texSource = _element.querySelector('annotation');
if (texSource) {
if (_element.replaceWith) {
_element.replaceWith(texSource);
} else {
_element.parentNode.replaceChild(texSource, _element);
}
texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
}
} // Switch display math to display delimiters.
var displays = fragment.querySelectorAll('.katex-display annotation');
for (var _i2 = 0; _i2 < displays.length; _i2++) {
var _element2 = displays[_i2];
_element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
}
return fragment;
};
/* harmony default export */ var katex2tex = (katexReplaceWithTex);
// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
// Global copy handler to modify behavior on .katex elements.
document.addEventListener('copy', function (event) {
var selection = window.getSelection();
if (selection.isCollapsed) {
return; // default action OK if selection is empty
}
var fragment = selection.getRangeAt(0).cloneContents();
if (!fragment.querySelector('.katex-mathml')) {
return; // default action OK if no .katex-mathml elements
} // Preserve usual HTML copy/paste behavior.
var html = [];
for (var i = 0; i < fragment.childNodes.length; i++) {
html.push(fragment.childNodes[i].outerHTML);
}
event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling.
event.preventDefault();
});
/***/ })
/******/ ])["default"];
});

1
katex/contrib/copy-tex.min.css vendored Normal file
View File

@ -0,0 +1 @@
.katex,.katex-display{-moz-user-select:all;-ms-user-select:all;-webkit-user-select:all;user-select:all}

1
katex/contrib/copy-tex.min.js vendored Normal file
View File

@ -0,0 +1 @@
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,function(){return function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=2)}([function(e,t,n){},,function(e,t,n){"use strict";n.r(t);n(0);var p={inline:["$","$"],display:["$$","$$"]},l=function(e,t){void 0===t&&(t=p);for(var n=e.querySelectorAll(".katex-mathml + .katex-html"),r=0;r<n.length;r++){var o=n[r];o.remove?o.remove(null):o.parentNode.removeChild(o)}for(var l=e.querySelectorAll(".katex-mathml"),i=0;i<l.length;i++){var a=l[i],u=a.querySelector("annotation");u&&(a.replaceWith?a.replaceWith(u):a.parentNode.replaceChild(u,a),u.innerHTML=t.inline[0]+u.innerHTML+t.inline[1])}for(var f=e.querySelectorAll(".katex-display annotation"),c=0;c<f.length;c++){var d=f[c];d.innerHTML=t.display[0]+d.innerHTML.substr(t.inline[0].length,d.innerHTML.length-t.inline[0].length-t.inline[1].length)+t.display[1]}return e};document.addEventListener("copy",function(e){var t=window.getSelection();if(!t.isCollapsed){var n=t.getRangeAt(0).cloneContents();if(n.querySelector(".katex-mathml")){for(var r=[],o=0;o<n.childNodes.length;o++)r.push(n.childNodes[o].outerHTML);e.clipboardData.setData("text/html",r.join("")),e.clipboardData.setData("text/plain",l(n).textContent),e.preventDefault()}}})}]).default});

View File

@ -0,0 +1,137 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("katex"));
else if(typeof define === 'function' && define.amd)
define(["katex"], factory);
else {
var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
var scripts = document.body.getElementsByTagName("script");
scripts = Array.prototype.slice.call(scripts);
scripts.forEach(function (script) {
if (!script.type || !script.type.match(/math\/tex/i)) {
return -1;
}
var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
var katexElement = document.createElement(display ? "div" : "span");
katexElement.setAttribute("class", display ? "equation" : "inline-equation");
try {
katex__WEBPACK_IMPORTED_MODULE_0___default.a.render(script.text, katexElement, {
displayMode: display
});
} catch (err) {
//console.error(err); linter doesn't like this
katexElement.textContent = script.text;
}
script.parentNode.replaceChild(katexElement, script);
});
/***/ })
/******/ ])["default"];
});

View File

@ -0,0 +1 @@
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,function(r){return function(r){var n={};function o(e){if(n[e])return n[e].exports;var t=n[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=r,o.c=n,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(r,n,function(e){return t[e]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=1)}([function(e,t){e.exports=r},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),u=document.body.getElementsByTagName("script");(u=Array.prototype.slice.call(u)).forEach(function(t){if(!t.type||!t.type.match(/math\/tex/i))return-1;var e=null!=t.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(e?"div":"span");r.setAttribute("class",e?"equation":"inline-equation");try{o.a.render(t.text,r,{displayMode:e})}catch(e){r.textContent=t.text}t.parentNode.replaceChild(r,t)})}]).default});

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More