Merge branch '1.0' into 1.0-VK_KHR_wayland_surface

This commit is contained in:
Jon Leech 2016-03-03 05:13:57 -08:00
commit 4f3c5d5f9e
62 changed files with 1492 additions and 576 deletions

View File

@ -33,8 +33,8 @@ Status
Version
Last Modified Date: 10-Feb-2016
Revision: 25
Last Modified Date: 28-Feb-2016
Revision: 27
Number
@ -82,6 +82,7 @@ Overview
* gl_FragColor will no longer indicate an implicit broadcast
* arrays of opaque uniforms take only one binding number for
the entire object, not one per array element
* the default origin is origin_upper_left instead of origin_lower_left
Each of these is discussed in more detail below.
@ -699,9 +700,26 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
(Making all stages have the same rule that dvec3 takes two locations...)
Change section 4.4.1.3 "Fragment Shader Inputs" from
"By default, gl_FragCoord assumes a lower-left origin for window
coordinates ... For example, the (x, y) location (0.5, 0.5) is
returned for the lowerleft-most pixel in a window. The origin can be
changed by redeclaring gl_FragCoord with the
origin_upper_left identifier."
To
"The gl_FragCoord built-in variable assumes an upper-left origin for
window coordinates ... For example, the (x, y) location (0.5, 0.5) is
returned for the upper-left-most pixel in a window. The origin can be
explicitly set by redeclaring gl_FragCoord with the origin_upper_left
identifier. It is a compile-time error to change it to
origin_lower_left."
Add to the end of section 4.4.3 Uniform Variable Layout Qualifiers:
The /push_constant/ identifier is used to declare an entire block, and
"The /push_constant/ identifier is used to declare an entire block, and
represents a set of "push constants", as defined by the API. It is a
compile-time error to apply this to anything other than a uniform block
declaration. The values in the block will be initialized through the
@ -712,22 +730,22 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
push-constant array can only be indexed with dynamically uniform indexes.
Uniform blocks declared with push_constant use different resources
than those without; and are accounted for separately. See the API
specification for more detail.
specification for more detail."
After the paragraphs about binding ("The binding identifier..."), add
The /set/ identifier specifies the descriptor set this object belongs to.
"The /set/ identifier specifies the descriptor set this object belongs to.
It is a compile-time error to apply to just a qualifier or a member of a
block. Any uniform or shader storage block declared without a /set/
identifier is assigned to descriptor set 0. Similarly, any sampler,
texture, or subpass input type declared as a uniform, but without a
/set/ identifier is also assigned to descriptor set 0.
If applied to an object declared as an array, all elements of the array
"If applied to an object declared as an array, all elements of the array
belong to the specified /set/.
It is a compile-time error for either the /set/ or /binding/ value
to exceed a front-end-configuration supplied maximum value.
"It is a compile-time error for either the /set/ or /binding/ value
to exceed a front-end-configuration supplied maximum value."
Change section 4.4.6 Opaque-Uniform Layout Qualifiers:
@ -802,6 +820,11 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
int d[aSize + pad]; // different type than a, b, or c
int e[aSize + 2]; // different type than a, b, c, or d
"Types containing arrays sized with a specialization constant cannot be
compared, assigned as aggregates, or used in initializers. They can,
however, be passed as arguments to functions having formal parameters of
the same type.
"Arrays inside a block may be sized with a specialization constant, but
the block will have a static layout. Changing the specialized size will
not re-layout the block. In the absence of explicit offsets, the layout
@ -1129,6 +1152,8 @@ Revision History
Rev. Date Author Changes
---- ----------- ------- --------------------------------------------
27 28-Feb-2016 JohnK Make the default by origin_upper_left
26 17-Feb-2016 JohnK Expand specialized array semantics
25 10-Feb-2016 JohnK Incorporate resolutions from the face to face
24 28-Jan-2016 JohnK Update the resolutions from the face to face
23 6-Jan-2016 Piers Remove support for gl_VertexID and

View File

@ -126,7 +126,7 @@ INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpo
COMMONDOCS := $(CHAPTERS) $(INCLUDES)
# A generate included file with the spec version, date, and git commit
SPECVERSION = specversion.txt
SPECREVISION = 1.0.4
SPECREVISION = 1.0.5
SPECREMARK =
# Spec targets

View File

@ -423,7 +423,7 @@ Mip Tail Region::
and opaquely.
Non-Dispatchable Handle::
A handle of an integer handle type. Handle values maynot: be unique,
A handle of an integer handle type. Handle values may: not be unique,
even for two objects of the same type.
Normalized::

View File

@ -145,7 +145,7 @@ instructions:
- Any denormalized value input into a shader or potentially generated by
any instruction in a shader may: be flushed to 0.
- The rounding mode cannot: be set and is undefined.
- NaNs maynot: be generated. Instructions that operate on a NaN maynot:
- NaNs may: not be generated. Instructions that operate on a NaN may: not
result in a NaN.
- Support for signaling NaNs is optional: and exceptions are never raised.

View File

@ -36,7 +36,7 @@ otherwise the behavior of executing that command buffer is undefined.
Unless otherwise specified, and without explicit synchronization, the
various commands submitted to a queue via command buffers may: execute in
arbitrary order relative to each other, and/or concurrently. Also, the
memory side-effects of those commands maynot: be directly visible to other
memory side-effects of those commands may: not be directly visible to other
commands without memory barriers. This is true within a command buffer, and
across command buffers submitted to a given queue. See
<<synchronization-events>>, <<synchronization-pipeline-barriers>> and

View File

@ -1168,10 +1168,13 @@ include::../validity/structs/VkDescriptorSetAllocateInfo.txt[]
When a descriptor set is allocated, the initial state is largely
uninitialized and all descriptors are undefined. However,
the descriptor set can: be bound
in a command buffer without causing errors or exceptions. Entries must: be
populated before they are accessed by a pipeline, but leaving uninitialized
entries that are not accessed by a pipeline will produce well-defined
results. This means applications need not populate unused entries with dummy
in a command buffer without causing errors or exceptions. All entries that
are statically used by a pipeline in a drawing or dispatching command must:
have been populated before the descriptor set is bound for use by that command.
Entries that are not statically used by a pipeline can: have uninitialized
descriptors or descriptors of resources that have been destroyed, and executing
a draw or dispatch with such a descriptor set bound does not cause undefined
behavior. This means applications need not populate unused entries with dummy
descriptors.
Allocated descriptor sets are freed by calling:
@ -1353,7 +1356,7 @@ sname:VkWriteDescriptorSet structure must: have identical
pname:descriptorType and pname:stageFlags, and must: all either use
immutable samplers or must: all not use immutable samplers.
Each element in the pname:pDescriptorCopies array in a
Each element in the pname:pDescriptorCopies array is a
sname:VkCopyDescriptorSet structure describing an operation copying
descriptors between sets. The definition of sname:VkCopyDescriptorSet is:

View File

@ -36,7 +36,10 @@ return the variable is overwritten with the number of structures actually
written to pname:pPhysicalDevices. If the value of
pname:pPhysicalDeviceCount is less than the number of physical devices
available, at most pname:pPhysicalDeviceCount structures will be
written.
written. If pname:pPhysicalDeviceCount is smaller than the number of
physical devices available, ename:VK_INCOMPLETE will be returned instead of
ename:VK_SUCCESS, to indicate that not all the available physical devices
were returned.
include::../validity/protos/vkEnumeratePhysicalDevices.txt[]
@ -69,8 +72,8 @@ The members of sname:VkPhysicalDeviceProperties have the following meanings:
devices available from the vendor.
* pname:deviceType is a elink:VkPhysicalDeviceType specifying the type of
device.
* pname:deviceName is a pointer to a null-terminated UTF-8 string
containing the name of the device.
* pname:deviceName is a null-terminated UTF-8 string containing the name
of the device.
* pname:pipelineCacheUUID is an array of size ename:VK_UUID_SIZE,
containing 8-bit values that represent a universally unique identifier
for the device.
@ -202,6 +205,17 @@ operations, at least one queue family of at least one physical device
exposed by the implementation must: support both graphics and compute
operations.
[NOTE]
.Note
====
All commands that are allowed on a queue that supports transfer operations
are also allowed on a queue that supports either graphics or compute
operations thus if the capabilities of a queue family include
ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT then
reporting the ename:VK_QUEUE_TRANSFER_BIT capability separately for that
queue family is optional:.
====
include::../validity/structs/VkQueueFamilyProperties.txt[]
For further details see <<devsandqueues-queues,Queues>>.
@ -408,7 +422,8 @@ error is largely informational and intended only to inform the user that
their hardware has probably developed a fault or become physically
disconnected, and should: be investigated further. In many cases, physical
device loss may: cause other more serious issues such as the operating
system crashing; in which case it maynot: be reported via the {apiname} API.
system crashing; in which case it may: not be reported via the {apiname}
API.
====
[NOTE]

View File

@ -73,8 +73,8 @@ pname:pProperties. If the value of pname:pPropertyCount is less than the
number of layer properties available, at most pname:pPropertyCount
structures will be written. If pname:pPropertyCount is smaller than the
number of layers available, ename:VK_INCOMPLETE will be returned instead of
ename:VK_SUCCESS, to indicate that not all the available properties were
returned.
ename:VK_SUCCESS, to indicate that not all the available layer properties
were returned.
The definition of sname:VkLayerProperties is:
@ -111,7 +111,7 @@ Extensions may: define new {apiname} commands, structures, and enumerants.
For compilation purposes, the interfaces defined by registered extensions,
including new structures and enumerants as well as function pointer types
for new commands, are defined in the Khronos-supplied +vulkan.h+ together
with the core API. However, commands defined by extensions maynot: be
with the core API. However, commands defined by extensions may: not be
available for static linking - in which case function pointers to these
commands should: be queried at runtime as described in
<<initialization-functionpointers>>. Extensions may: be provided by layers

View File

@ -1453,7 +1453,7 @@ the same whether or not the feature is enabled.
* 128.
--
+
It maynot: be possible to reach this limit in every stage.
It may: not be possible to reach this limit in every stage.
3::
Maximum image attachment size or maximum display size
@ -3060,9 +3060,18 @@ ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT::
pname:magFilter or pname:minFilter set to ename:VK_FILTER_LINEAR,
or pname:mipmapMode set to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR. 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 indicates that the
depth aspect is linearly filterable.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
+
If the format being queried is a depth/stencil format, this bit only indicates
that the depth aspect (not the stencil aspect) supports linear filtering,
and that linear filtering of the depth aspect is supported whether depth
compare is enabled in the sampler or not. If this bit is not present,
linear filtering with depth compare disabled is unsupported and linear
filtering with depth compare enabled is supported, but may: compute the
filtered value in an implementation-dependent manner which differs from
the normal rules of linear filtering. The resulting value must: be in the
range latexmath:[$[0,1\]$] and should: be proportional to, or a weighted
average of, the number of comparison passes or failures.
The pname:bufferFeatures member of the sname:VkFormatProperties structure
describes what features are supported by buffers.

View File

@ -216,7 +216,7 @@ a dispatchable type must: have a unique handle value during its lifetime.
_Non-dispatchable_ handle types are a 64-bit integer type whose meaning is
implementation-dependent, and may: encode object information directly in the
handle rather than pointing to a software structure. Objects of a
non-dispatchable type maynot: have unique handle values within a type or
non-dispatchable type may: not have unique handle values within a type or
across types. If handle values are not unique, then destroying one such
handle mustnot: cause identical handles of other types to become invalid,
and mustnot: cause identical handles of the same type to become invalid if

View File

@ -67,7 +67,7 @@ it.
endif::editing-notes[]
In order to support systems with multiple {apiname} implementations
comprising heterogenous collections of hardware and software, the function
comprising heterogeneous collections of hardware and software, the function
pointers returned by fname:vkGetInstanceProcAddr may: point to dispatch
code, which calls a different real implementation for different
sname:VkDevice objects (and objects created from them). The overhead of this

View File

@ -636,8 +636,8 @@ out according to the following rules.
** a column-major matrix has a base alignment equal to the base
alignment of the matrix column type
+
* Any code:ArrayStride or code:MatrixStride decoration must equal the base
alignment of the array or matrix from above.
* Any code:ArrayStride or code:MatrixStride decoration must: be an integer
multiple of the base alignment of the array or matrix from above.
[NOTE]
.Note
@ -754,8 +754,7 @@ code:FragDepth, a shader must: declare the code:DepthReplacing execution
mode. If a shader declares the code:DepthReplacing execution mode and there
is an execution path through the shader that does not set code:FragDepth,
then the fragment's depth value is undefined for executions of the shader
that take that path. That is, if the fragment shader enables depth
replacing, then it must: always write it.
that take that path.
+
The code:FragDepth decoration is only supported in fragment shaders.
+

View File

@ -183,7 +183,7 @@ August, 2008.
[[Khronos Data Format Specification]]:: A. Garrard, _Khronos Data Format
Specification, version 1.1_,
https://www.khronos.org/registry/dataformat/specs/1.1/dataformat.1.1.html,
February 16, 2015.
February 26, 2016.
[[Khronos SPIR-V Extended Instructions for GLSL Specification]]:: J.
Kessenich, _SPIR-V Extended Instructions for GLSL, Version 1.00_,

View File

@ -262,6 +262,8 @@ If pname:pfnAllocation or pname:pfnReallocation fail, the implementation
may: fail object creation and/or generate an
ename:VK_ERROR_OUT_OF_HOST_MEMORY error, as appropriate.
Allocation callbacks mustnot: call any {apiname} commands.
The following sets of rules define when an implementation is permitted to
call the allocator callbacks.
@ -559,7 +561,7 @@ buffers queued for execution. The memory can: remain bound to images or
buffers at the time the memory object is freed, but any further use of them
(on host or device) for anything other than destroying those objects will
result in undefined behavior. If there are still any bound images or
buffers, the memory maynot: be immediately released by the implementation,
buffers, the memory may: not be immediately released by the implementation,
but must: be released by the time all bound images and buffers have been
destroyed. Once memory is released, it is returned to the heap from which it
was allocated.
@ -567,6 +569,8 @@ was allocated.
How memory objects are bound to Images and Buffers is described in detail in
the <<resources-association, Resource Memory Association>> section.
If a memory object is mapped at the time it is freed, it is implicitly
unmapped.
[[memory-device-hostaccess]]
=== Host Access to Device Memory Objects
@ -614,14 +618,14 @@ endif::editing-notes[]
fname:vkMapMemory does not check whether the device memory is currently in
use before returning the host-accessible pointer. The application
must: guarantee that any previously submitted command that writes to this
sub-range has completed before the host reads from or writes to that
sub-range, and that any previously submitted command that reads from that
sub-range has completed before the host writes to that region (see
range has completed before the host reads from or writes to that
range, and that any previously submitted command that reads from that
range has completed before the host writes to that region (see
<<synchronization-fences-devicewrites, here>>
for details on fulfilling such a guarantee). If the device memory was
allocated without the ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set,
these guarantees must: be made for an extended sub-range: the application
must: round down the start of the sub-range to the previous multiple of
these guarantees must: be made for an extended range: the application
must: round down the start of the range to the nearest multiple of
sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, and round the end
of the range up to the nearest multiple of
sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize.

View File

@ -493,7 +493,7 @@ pipelines is achieved by passing the same pipeline cache object when
creating multiple related pipelines. Reuse across runs of an application is
achieved by retrieving pipeline cache contents in one run of an application,
saving the contents, and using them to preinitialize a pipeline cache on a
subsequent run. The contents and size of the pipeline cache objects is
subsequent run. The contents and size of the pipeline cache objects are
managed by the implementation. Applications can: control the amount of data
retrieved from a pipeline cache object.
@ -565,8 +565,8 @@ include::../validity/protos/vkMergePipelineCaches.txt[]
.Note
====
The details of the merge operation are implementation dependent, but
implementations are recommended: to merge the contents of the specified
pipelines and prune duplicate entries.
implementations should: merge the contents of the specified pipelines and
prune duplicate entries.
====
Data can: be retrieved from a pipeline cache object using the command:
@ -631,10 +631,14 @@ The first four bytes encode the length of the entire pipeline header, in
bytes. This value includes all fields in the header including the pipeline
cache version field and the size of the length field.
The next four bytes encode the pipeline cache version.
This field is a elink:VkPipelineCacheHeaderVersion value.
A consumer of the pipeline cache should use this value to interpret the
remainder of the cache header.
The next four bytes encode the pipeline cache version. This field is
interpreted as an elink:VkPipelineCacheHeaderVersion value, and must:
have one of the following values:
include::../enums/VkPipelineCacheHeaderVersion.txt[]
A consumer of the pipeline cache should use the cache version to interpret
the remainder of the cache header.
If the value of pname:dataSize is less than what is necessary to store this
header, nothing will be written to pname:pData and zero will be written to
@ -787,8 +791,6 @@ Now to specialize the above via the specialization constants mechanism:
[source,{basebackend@docbook:c++:cpp}]
---------------------------------------------------
VkSpecializationMapEntry entries[2];
const VkSpecializationMapEntry entries[] =
{
{

View File

@ -87,9 +87,9 @@ as follows:
is generated based on the value of the alpha component of the fragment's
first color output as specified in the <<fragops-covg,Multisample
Coverage>> section.
* pname:alphaToOneEnable controls whether the value of the alpha component of
the fragment's first color output is replaced with one as described in
<<fragops-covg,Multisample Coverage>>.
* pname:alphaToOneEnable controls whether the value of the alpha component
of the fragment's first color output is replaced with one as described
in <<fragops-covg,Multisample Coverage>>.
include::../validity/structs/VkPipelineMultisampleStateCreateInfo.txt[]

View File

@ -270,7 +270,7 @@ results for that query. In this case, fname:vkGetQueryPoolResults is
guaranteed to succeed and return ename:VK_SUCCESS if the queries
become available in a finite time (i.e. if they have been issued and not
reset). If queries will never finish (e.g. due to being reset but not
issued), then fname:vkGetQueryPoolResults maynot: return in finite time.
issued), then fname:vkGetQueryPoolResults may: not return in finite time.
[[queries-wait-bit-not-set]]
If ename:VK_QUERY_RESULT_WAIT_BIT and ename:VK_QUERY_RESULT_PARTIAL_BIT
@ -410,9 +410,9 @@ include::../validity/protos/vkCmdCopyQueryPoolResults.txt[]
[[queries-operation-undefined]]
Rendering operations such as clears, MSAA resolves, attachment load/store
operations, and blits may: or maynot: count towards the results of queries.
This behavior is implementation-dependent and may: vary depending on the
path used within an implementation. For example, some implementations have
operations, and blits may: count towards the results of queries. This
behavior is implementation-dependent and may: vary depending on the path
used within an implementation. For example, some implementations have
several types of clears, some of which may: include vertices and some not.
@ -490,14 +490,13 @@ These bits have the following meanings:
* If ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT is set,
queries managed by the pool will count the number of vertices processed
by the <<drawing,input assembly>> stage. Vertices
corresponding to incomplete primitives may: or maynot: contribute to the
count.
by the <<drawing,input assembly>> stage. Vertices corresponding to
incomplete primitives may: contribute to the count.
* If ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT is
set, queries managed by the pool will count the number of primitives
processed by the <<drawing,input assembly>> stage. If
primitive restart is enabled, restarting the primitive topology has no
effect on the count. Incomplete primitives may: or maynot: be counted.
processed by the <<drawing,input assembly>> stage. If primitive restart
is enabled, restarting the primitive topology has no effect on the
count. Incomplete primitives may: be counted.
* If ename:VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT is
set, queries managed by the pool will count the number of vertex shader
invocations. This counter's value is incremented each time a vertex
@ -571,7 +570,7 @@ multiple times, affecting some of the counts.
If a pipeline has pname:rasterizerDiscardEnable enabled, implementations
may: discard primitives after the final vertex processing stage. As a
result, if pname:rasterizerDiscardEnable is enabled, the clipping input and
output primitives counters maynot: be incremented.
output primitives counters may: not be incremented.
When a pipeline statistics query finishes, the result for that query is
marked as available. The application can: copy the result to a

View File

@ -196,7 +196,7 @@ pname:storeOp apply only to the depth data, while pname:stencilLoadOp and
pname:stencilStoreOp define how the stencil data is handled.
[[renderpass-precision]]
During a renderpass instance, input/color attachments with color formats
During a render pass instance, input/color attachments with color formats
that have a component size of 8, 16, or 32 bits must: be represented in the
attachment's format throughout the instance. Attachments with other
floating- or fixed-point color formats, or with depth components may: be
@ -357,7 +357,7 @@ The sname:VkSubpassDependency structure is defined as:
include::../structs/VkSubpassDependency.txt[]
* pname:srcSubpass and pname:dstSubpass are the subpass indexes of the
* pname:srcSubpass and pname:dstSubpass are the subpass indices of the
producer and consumer subpasses, respectively. pname:srcSubpass and
pname:dstSubpass can: also have the special value
ename:VK_SUBPASS_EXTERNAL. The source subpass must: always be a lower
@ -770,9 +770,9 @@ restricted to the pixels whose x and y coordinates fall within the render
area on all attachments. The render area extends to all layers of
pname:framebuffer. The application must: ensure (using scissor if necessary)
that all rendering is contained within the render area, otherwise the pixels
outside of the render area become undefined and shader side effects may: or
maynot: occur for fragments outside the render area. The render area must:
be contained within the framebuffer dimensions.
outside of the render area become undefined and shader side effects may:
occur for fragments outside the render area. The render area must: be
contained within the framebuffer dimensions.
[NOTE]
.Note
@ -823,7 +823,7 @@ include::../protos/vkCmdNextSubpass.txt[]
include::../validity/protos/vkCmdNextSubpass.txt[]
The subpasses indices for a render pass begin at zero when
The subpass index for a render pass begins at zero when
fname:vkCmdBeginRenderPass is recorded, and increments each time
fname:vkCmdNextSubpass is recorded.

View File

@ -286,7 +286,7 @@ flink:vkGetPhysicalDeviceImageFormatProperties command.
Images created with pname:tiling equal to ename:VK_IMAGE_TILING_LINEAR have
further restrictions on their limits and capabilities compared to images
created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL. Creation
of images with tiling ename:VK_IMAGE_TILING_LINEAR maynot: be supported
of images with tiling ename:VK_IMAGE_TILING_LINEAR may: not be supported
unless other parameters meet all of the constraints:
* pname:imageType is ename:VK_IMAGE_TYPE_2D
@ -1017,14 +1017,14 @@ optimal image resources must be placed in adjacent memory locations for
simultaneous usage. Two resources which do not satisfy this granularity
requirement are said to <<resources-memory-aliasing,alias>>. Linear image
resource are images created with ename:VK_IMAGE_TILING_LINEAR and optimal
linear resources are those created with ename:VK_IMAGE_TILING_OPTIMAL.
image resources are those created with ename:VK_IMAGE_TILING_OPTIMAL.
pname:bufferImageGranularity is specified in bytes, and must: be a power of
two. Implementations which do not require such an additional granularity
may: report a value of one.
Given resourceA at the lower memory offset and resourceB at the higher
memory offset, where one of the resources is a buffer and the other is an
image, and the following:
memory offset, where one of the resources is a buffer or a linear image
and the other is an optimal image, and the following:
resourceA.end = resourceA.memoryOffset + resourceA.size - 1
resourceA.endPage = resourceA.end & ~(bufferImageGranularity-1)
@ -1039,8 +1039,9 @@ That is, the end of the first resource (A) and the beginning of the second
resource (B) must: be on separate ``pages'' of size
pname:bufferImageGranularity. pname:bufferImageGranularity may: be
different than the physical page size of the memory heap. This
restriction is only needed for adjacent image and buffer memory locations
which will be used simultaneously. Adjacent buffers' or adjacent images'
restriction is only needed when a buffer or a linear image is at adjacent
memory location with an optimal image and both will be used simultaneously.
Adjacent buffers' or adjacent images'
memory ranges can: be closer than pname:bufferImageGranularity, provided
they meet the pname:alignment requirement for the objects in question.

View File

@ -147,18 +147,21 @@ will complete its writes in finite time.
====
Stores issued to different memory locations within a single shader
invocation maynot: be visible to other invocations in the order they were
performed. The OpMemoryBarrier instruction can: be used to provide stronger
ordering of reads and writes performed by a single invocation.
OpMemoryBarrier guarantees that any memory transactions issued by the shader
invocation prior to the instruction complete prior to the memory
invocation may: not be visible to other invocations in the order they were
performed. The code:OpMemoryBarrier instruction can: be used to provide
stronger ordering of reads and writes performed by a single invocation.
code:OpMemoryBarrier guarantees that any memory transactions issued by the
shader invocation prior to the instruction complete prior to the memory
transactions issued after the instruction. Memory barriers are needed for
algorithms that require multiple invocations to access the same memory and
require the operations to be performed in a partially-defined relative
order. For example, if one shader invocation does a series of writes,
followed by an OpMemoryBarrier instruction, followed by another write, then
another invocation that sees the results of the final write will also see
the previous writes. Without the memory barrier, the final write may: be
followed by an code:OpMemoryBarrier instruction, followed by another write,
then the results of the series of writes before the barrier become visible to
other shader invocations at a time earlier or equal to when the results of
the final write become visible to those invocations. In practice it means
that another invocation that sees the results of the final write would also
see the previous writes. Without the memory barrier, the final write may: be
visible before the previous writes.
The built-in atomic memory transaction instructions can: be used to read and
@ -308,7 +311,7 @@ executed.
Fragment shaders are invoked as the result of rasterization in a graphics
pipeline. Each fragment shader invocation operates on a single fragment and
its associated data. With few exceptions, fragment shaders do not have
access to any data associated with other fragments and is considered to
access to any data associated with other fragments and are considered to
execute in isolation of fragment shader invocations associated with other
fragments.
@ -316,15 +319,15 @@ fragments.
[[shaders-fragment-execution]]
=== Fragment Shader Execution
For each fragment generated by rasterization, a fragment shader may: or
maynot: be invoked. A fragment shader mustnot: be invoked if the
<<fragops-early,Early Per-Fragment Tests>> cause it to have no coverage.
For each fragment generated by rasterization, a fragment shader may: be
invoked. A fragment shader mustnot: be invoked if the <<fragops-early,Early
Per-Fragment Tests>> cause it to have no coverage.
Furthermore, if it is determined that a fragment generated as the result of
rasterizing a first primitive will have its outputs entirely overwritten by
a fragment generated as the result of rasterizing a second primitive in the
same subpass, and the fragment shader used for the fragment has no other
side effects, then the fragment shader maynot: be executed for the fragment
side effects, then the fragment shader may: not be executed for the fragment
from the first primitive.
Relative ordering of execution of different fragment shader invocations is

View File

@ -493,7 +493,7 @@ Not faulting on access to unbound pages is not enough to support
pname:sparseResidencyNonResidentStrict. An implementation must: also
guarantee that reads after writes to unbound regions of the resource always
return data for the read as if the memory contains zeros. Depending on the
cache implementation of the hardware this maynot: always be possible.
cache implementation of the hardware this may: not always be possible.
Hardware that does not fault, but does not guarantee correct read values
will not require dummy pages, but also mustnot: support

View File

@ -107,8 +107,8 @@ which is one of:
* ename:VK_SUCCESS indicates that the fence is signaled.
* ename:VK_NOT_READY indicates that the fence is unsignaled.
To reset the status of one or more fences to the unsignaled state, so that
they can: be reused after a queue submission completes, use the command:
To reset the status of one or more fences to the unsignaled state, use the
command:
include::../protos/vkResetFences.txt[]
@ -119,6 +119,9 @@ include::../protos/vkResetFences.txt[]
include::../validity/protos/vkResetFences.txt[]
If a fence is already in the unsignaled state, then resetting it has no
effect.
To cause the host to wait until any one or all of a group of fences
is signaled, use the command:
@ -299,7 +302,7 @@ When a queue signals or waits upon a semaphore, certain
<<synchronization-implicit-ordering,implicit ordering guarantees>> are
provided.
Semaphore operations maynot: make the side effects of commands visible to
Semaphore operations may: not make the side effects of commands visible to
the host.
@ -372,7 +375,8 @@ with the following return codes:
The state of an event can: be updated by the host. The state of the event is
immediately changed, and subsequent calls to fname:vkGetEventStatus will
return the new state.
return the new state. If an event is already in the requested state, then
updating it to the same state has no effect.
To set the state of an event to signaled from the host, call:
@ -463,10 +467,10 @@ fname:vkCmdSetEvent to become signaled. Logically, it has three phases:
<<synchronization-memory-barriers>>).
. Resume execution of pipeline stages specified by pname:dstStageMask
Implementations maynot: execute commands in a pipelined manner,
so fname:vkCmdWaitEvents maynot: observe the results of a subsequent
fname:vkCmdSetEvent or fname:vkCmdResetEvent command, even if the stages
in pname:dstStageMask occur after the stages in pname:srcStageMask.
Implementations may: not execute commands in a pipelined manner, so
fname:vkCmdWaitEvents may: not observe the results of a subsequent
fname:vkCmdSetEvent or fname:vkCmdResetEvent command, even if the stages in
pname:dstStageMask occur after the stages in pname:srcStageMask.
Commands that update the state of events in different pipeline stages
may: execute out of order, unless the ordering is enforced by execution
@ -480,9 +484,9 @@ events. For example, an event should: only be reset if no
fname:vkCmdWaitEvents command is executing that waits upon that event.
====
An act of setting or resetting an event in one queue maynot: affect or be
visible to other queues. For cross-queue synchronization, semaphores
can: be used.
An act of setting or resetting an event in one queue may: not affect or be
visible to other queues. For cross-queue synchronization, semaphores can: be
used.
[[synchronization-execution-and-memory-dependencies]]

View File

@ -224,10 +224,13 @@ A preliminary shared exponent latexmath:[$exp'$] is computed:
[latexmath]
+++++++++++++++++++
\begin{align*}
exp' = \max(-B-1,
\left \lfloor
\log_2(max_{clamped}+1+B)
\right \rfloor)
exp' =
\begin{cases}
\left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1)
& \textrm{for } max_{clamped} > 2^{-(B+1)} \\
0
& \textrm{for } max_{clamped} \leq 2^{-(B+1)}
\end{cases}
\end{align*}
+++++++++++++++++++
@ -1251,7 +1254,7 @@ follows:
shaderOp.Lod & \textrm{(from optional SPIR-V operand)} \\
\log_2 \left ( \frac{\rho_{max}}{N} \right ) & \textrm{otherwise}
\end{cases} \\
\lambda'(x,y) & = \lambda_{base} + \operatorname{clamp}(sampler.bias + shaderOp.bias) \\
\lambda'(x,y) & = \lambda_{base} + \operatorname{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\
\lambda & =
\begin{cases}
lod_{max}, & \lambda' > lod_{max} \\
@ -1285,6 +1288,10 @@ lod_{max} & = maxLod & \textrm{(from sampler descriptor)}
\end{align*}
++++++++++++++++++++++++
and latexmath:[$maxSamplerLodBias$] is the value of the
slink:VkPhysicalDeviceLimits feature
<<features-limits-maxSamplerLodBias,pname:maxSamplerLodBias>>.
==== Image Level(s) Selection

View File

@ -14,7 +14,7 @@ typedef enum VkShaderStageFlagBits {
VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F,
VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
} VkShaderStageFlagBits;
------------------------------------------------------------------------------

View File

@ -21,18 +21,23 @@
INKSCAPE ?= inkscape
# PDFs to regenerate from SVGs - everything except pipeline.pdf
SVGEXCLUDES = pipeline.svg vulkantexture0.svg
SVGEXCLUDES = pipeline.svg tstripadj.svg vulkantexture0.svg
SVGSRC = $(filter-out $(SVGEXCLUDES),$(wildcard [A-Za-z]*.svg))
PDFDST = $(SVGSRC:%.svg=%.pdf)
SVGDST = pipeline.svg
PDFDST = $(SVGSRC:%.svg=%.pdf) tstripadj.pdf
SVGDST = pipeline.svg tstripadj.svg
all: $(PDFDST) $(SVGDST)
$(PDFDST): %.pdf: %.svg
$(INKSCAPE) -f $< -A $@
# This came from PowerPoint originally (I think)
pipeline.svg: pipeline.pdf
$(INKSCAPE) -f $< -l $@
# This doesn't render properly in Firefox/IE 11 due to Inkscape markup.
tstripadj.svg: Source/tstripadj.svg
$(INKSCAPE) -f $< -l $@
clean:
-rm -f $(PDFDST) $(SVGDST)

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created by diasvg.py -->
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
@ -7,15 +7,10 @@
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"
version="1.1"
width="109.04823"
height="87.048225"
viewBox="-108.050 3.950 -13.183 76.817"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="new.svg">
id="svg2">
<metadata
id="metadata272">
<rdf:RDF>
@ -24,55 +19,23 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs270" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1092"
inkscape:window-height="1015"
id="namedview268"
showgrid="false"
units="cm"
fit-margin-top="0.2"
fit-margin-left="0.2"
fit-margin-bottom="0.2"
fit-margin-right="0.2"
inkscape:zoom="8.5833578"
inkscape:cx="54.524117"
inkscape:cy="43.524113"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<ellipse
cx="-44.617001"
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse4"
sodipodi:cx="-44.617001"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text6"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">0</text>
<ellipse
@ -80,19 +43,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse8"
sodipodi:cx="-44.617001"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text10"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">2</text>
<ellipse
@ -100,19 +56,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse12"
sodipodi:cx="-54.617001"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="60.532112"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text14"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">1</text>
<ellipse
@ -120,19 +69,12 @@
cy="45.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse16"
sodipodi:cx="-44.617001"
sodipodi:cy="45.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="48.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text18"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">5</text>
<ellipse
@ -140,19 +82,12 @@
cy="75.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse20"
sodipodi:cx="-34.617001"
sodipodi:cy="75.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="78.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text22"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">3</text>
<ellipse
@ -160,19 +95,12 @@
cy="75.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse24"
sodipodi:cx="-24.617001"
sodipodi:cy="75.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="90.532112"
y="78.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text26"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">7</text>
<ellipse
@ -180,19 +108,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse28"
sodipodi:cx="-34.617001"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text30"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">4</text>
<ellipse
@ -200,19 +121,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse32"
sodipodi:cx="-34.617001"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text34"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">6</text>
<ellipse
@ -220,19 +134,12 @@
cy="45.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse36"
sodipodi:cx="-34.617001"
sodipodi:cy="45.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="48.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text38"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">9</text>
<ellipse
@ -240,19 +147,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse40"
sodipodi:cx="-24.617001"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="90.532112"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text42"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">8</text>
<ellipse
@ -260,19 +160,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse44"
sodipodi:cx="-24.617001"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="90.532112"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text46"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">10</text>
<ellipse
@ -280,19 +173,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse48"
sodipodi:cx="-14.617"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="100.53211"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text50"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">11</text>
<polyline
@ -405,19 +291,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse94"
sodipodi:cx="-96.616997"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="18.532118"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text96"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">0</text>
<ellipse
@ -425,19 +304,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse98"
sodipodi:cx="-96.616997"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="18.532118"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text100"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">2</text>
<ellipse
@ -445,19 +317,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse102"
sodipodi:cx="-106.617"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="8.5321178"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text104"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">1</text>
<ellipse
@ -465,19 +330,12 @@
cy="45.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse106"
sodipodi:cx="-96.616997"
sodipodi:cy="45.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="18.532118"
y="48.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text108"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">5</text>
<ellipse
@ -485,19 +343,12 @@
cy="75.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse110"
sodipodi:cx="-86.616997"
sodipodi:cy="75.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="78.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text112"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">3</text>
<ellipse
@ -505,19 +356,12 @@
cy="75.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse114"
sodipodi:cx="-76.616997"
sodipodi:cy="75.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="38.532116"
y="78.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text116"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">7</text>
<ellipse
@ -525,19 +369,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse118"
sodipodi:cx="-86.616997"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text120"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">4</text>
<ellipse
@ -545,19 +382,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse122"
sodipodi:cx="-86.616997"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text124"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">6</text>
<ellipse
@ -565,19 +395,12 @@
cy="65.383003"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse126"
sodipodi:cx="-76.616997"
sodipodi:cy="65.383003"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="38.532116"
y="68.998741"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text128"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">8</text>
<ellipse
@ -585,19 +408,12 @@
cy="55.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse130"
sodipodi:cx="-76.616997"
sodipodi:cy="55.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="38.532116"
y="58.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text132"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">9</text>
<polyline
@ -690,19 +506,12 @@
cy="25.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse168"
sodipodi:cx="-44.617001"
sodipodi:cy="25.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="28.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text170"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">0</text>
<ellipse
@ -710,19 +519,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse172"
sodipodi:cx="-44.617001"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text174"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">2</text>
<ellipse
@ -730,19 +532,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse176"
sodipodi:cx="-54.617001"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="60.532112"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text178"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">1</text>
<ellipse
@ -750,19 +545,12 @@
cy="5.3829999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse180"
sodipodi:cx="-44.617001"
sodipodi:cy="5.3829999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="70.532112"
y="8.9987392"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text182"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">5</text>
<ellipse
@ -770,19 +558,12 @@
cy="35.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse184"
sodipodi:cx="-34.617001"
sodipodi:cy="35.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="38.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text186"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">3</text>
<ellipse
@ -790,19 +571,12 @@
cy="25.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse188"
sodipodi:cx="-34.617001"
sodipodi:cy="25.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="28.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text190"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">4</text>
<ellipse
@ -810,19 +584,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse192"
sodipodi:cx="-34.617001"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="80.532112"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text194"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">6</text>
<ellipse
@ -830,19 +597,12 @@
cy="25.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse196"
sodipodi:cx="-24.617001"
sodipodi:cy="25.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="90.532112"
y="28.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text198"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">7</text>
<polyline
@ -915,19 +675,12 @@
cy="25.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse226"
sodipodi:cx="-96.616997"
sodipodi:cy="25.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="18.532118"
y="28.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text228"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">0</text>
<ellipse
@ -935,19 +688,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse230"
sodipodi:cx="-96.616997"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="18.532118"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text232"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">2</text>
<ellipse
@ -955,19 +701,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse234"
sodipodi:cx="-106.617"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="8.5321178"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text236"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">1</text>
<ellipse
@ -975,19 +714,12 @@
cy="35.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse238"
sodipodi:cx="-86.616997"
sodipodi:cy="35.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="38.998737"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text240"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">3</text>
<ellipse
@ -995,19 +727,12 @@
cy="25.382999"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse242"
sodipodi:cx="-86.616997"
sodipodi:cy="25.382999"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="28.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text244"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">4</text>
<ellipse
@ -1015,19 +740,12 @@
cy="15.383"
rx="1.383"
ry="1.383"
transform="translate(115.14911,3.1491142)"
id="ellipse246"
sodipodi:cx="-86.616997"
sodipodi:cy="15.383"
sodipodi:rx="1.383"
sodipodi:ry="1.383"
style="fill:none;stroke:#000000;stroke-width:0.1"
transform="translate(115.14911,3.1491142)" />
style="fill:none;stroke:#000000;stroke-width:0.1" />
<text
x="28.532118"
y="18.998739"
font-size="1.69"
font-style="normal"
font-weight="400"
id="text248"
style="font-size:1.69000006px;font-style:normal;font-weight:400;text-anchor:middle;fill:#000000;font-family:sans">5</text>
<polyline

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -14,23 +14,22 @@ include::../flags/VkMemoryPropertyFlags.txt[]
Constants
---------
ename:VK_MEMORY_PROPERTY_DEVICE_ONLY::
Unless any other flag is used to enable other uses this constant
identifies memory that's only accessible by the device.
ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT::
Identifies a memory pool that is the most efficient for device access.
ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT::
Identifies a memory pool that can be mapped into host memory address
space and thus is accessible by the host.
ename:VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT::
Identifies a memory pool where accesses beteen the host and the
coherency domain are not conherent. Memory with this property needs
ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT::
Identifies a memory pool where accesses between the host and the
coherency domain are coherent. Memory without this property requires
explicit use of flink:vkFlushMappedMemoryRanges after host writes to
this type of memory, and use of flink:vkInvalidateMappedMemoryRanges
before host reads from that memory.
ename:VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT::
Identifies memory that is not cached by the host.
ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT::
Identifies memory that is cached by the host.
ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT::
Identifies memory where an object's backing may be provided lazily

View File

@ -58,20 +58,22 @@ pname:propertyFlags member of the slink:VkMemoryType structure is defined as fol
include::../enums/VkMemoryPropertyFlagBits.txt[]
* ename:VK_MEMORY_PROPERTY_DEVICE_ONLY represents the case where no bits are set and signifies
that the memory is private to the device.
* ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT signifies that the memory is the
most efficient type for device access (e.g. local device memory).
* ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT indicates that memory with this property is visible
to the host. That is, a valid host address may be obtained and allocations from this memory
type may be mapped.
* ename:VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT indicates that accesses to mapped memory of this
type is not coherent with accesses to the same memory by the device. Such access must be marhsalled
using calls to flink:vkFlushMappedMemoryRanges or by unmapping the memory.
* ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT indicates that accesses to
mapped memory of this type is coherent with accesses to the same memory
by the device. Such access do not need to be marshalled using calls to
flink:vkFlushMappedMemoryRanges or by unmapping the memory.
* ename:VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT indicates that data stored in memory of this type is not
cached by the host and as such, it is likely that reads from such regions by the host will
be suboptimal.
* ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT indicates that data stored in
memory of this type is cached by the host and as such, it is likely that
reads from such regions by the host will be faster than reads from uncached
memory.
* ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT indicates that allocations from this type of memory
may be made on an as-needed basis. In general, allocations from this type of memory will almost

View File

@ -376,7 +376,6 @@ table:
| can{cl} | can:
| cannot{cl} | cannot:
| may{cl} | may:
| maynot{cl} | maynot:
| must{cl} | must:
| mustnot{cl} | mustnot:
| optional{cl} | optional:
@ -388,10 +387,10 @@ table:
|=====
Because asciidoc macro names cannot contain spaces, macros which correspond
to multiple words (maynot{cl}, mustnot{cl}, and shouldnot{cl}) drop those
spaces. Also note that the macros are lower-case only, so language should be
written such that these terms do not appear at the beginning of a sentence
(if really necessary, additional capitalized macros could be added).
to multiple words (mustnot{cl}, and shouldnot{cl}) drop those spaces. Also
note that the macros are lower-case only, so language should be written such
that these terms do not appear at the beginning of a sentence (if really
necessary, additional capitalized macros could be added).
==== Optional Behavior
@ -402,6 +401,9 @@ conformance, use the terms _may:_ or _optional:_ to describe it.
If a described usage pattern by the application is allowed but
not necessary, use the term _can:_ to describe it.
If language flows more logically using the term "may not", use the term
_may: not_ to describe it.
==== Optional Functionality
@ -543,8 +545,11 @@ existing API Specification.
| Combined format implicit in the name.
| device | GPU
| Implementations on non-GPU devices are possible.
| heterogeneous | heterogenous | More common
| homogeneous | homogenous | More common
| host endianness | platform endianness |
| implementation| system |
| indices | indexes | More common
| it is | it's | In general, avoid contractions.
| member | field |
| pname:parameter are/is
@ -942,6 +947,7 @@ for this structure:
= Revision History
* February 26, 2016 - Replace use of the "maynot{cl}" macro with "may{cl} not".
* February 16, 2016 - Place asciidoc conversion post-release.
* February 9, 2016 - Added quotation mark convention.
* February 1, 2016 - add the Oxford Comma section and issue resolution.

View File

@ -20,7 +20,7 @@ endif::doctype-manpage[]
* If pname:buffer was created with the ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
* If pname:buffer was created with the ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
* pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer
* The sum of pname:memoryOffset and the size of pname:buffer must: be less than or equal to the size of pname:memory
* The size of pname:buffer must: be less than or equal to the size of pname:memory minus pname:memoryOffset
* pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer
ifndef::doctype-manpage[]
********************************************************************************

View File

@ -18,7 +18,7 @@ endif::doctype-manpage[]
* pname:memoryOffset must: be less than the size of pname:memory
* pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image
* pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image
* pname:memory must: have storage from pname:memoryOffset onwards equal to or greater than the pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image
* The pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image must: be less than or equal to the size of pname:memory minus pname:memoryOffset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -16,8 +16,11 @@ endif::doctype-manpage[]
* This command must: only be called outside of a render pass instance
* The value of pname:regionCount must: be greater than `0`
* Each of pname:commandBuffer, pname:srcBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice
* The sum of the pname:srcOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer
* The sum of the pname:dstOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer
* The pname:copySize member of a given element of pname:pRegions must: be greater than `0`
* The pname:srcOffset member of a given element of pname:pRegions must: be less than the size of pname:srcBuffer
* The pname:dstOffset member of a given element of pname:pRegions must: be less than the size of pname:dstBuffer
* The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer minus pname:srcOffset
* The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset
* The union of the source regions, and the union of the destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory
* pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
* pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag

View File

@ -15,6 +15,7 @@ endif::doctype-manpage[]
* The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations
* This command must: only be called outside of a render pass instance
* Each of pname:commandBuffer, pname:queryPool and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice
* pname:dstOffset must: be less than the size of pname:dstBuffer
* pname:firstQuery must: be less than the number of queries in pname:queryPool
* The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool
* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must be multiples of `4`

View File

@ -13,10 +13,12 @@ endif::doctype-manpage[]
* The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations
* This command must: only be called outside of a render pass instance
* Each of pname:commandBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice
* If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:dstOffset and pname:size must: be less than or equal to the size of pname:dstBuffer
* pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* pname:size must: be greater than `0`
* pname:dstOffset must: be less than the size of pname:dstBuffer
* pname:dstOffset must: be a multiple of `4`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4`
* pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -19,6 +19,8 @@ endif::doctype-manpage[]
* pname:stageFlags must: match exactly the shader stages used in pname:layout for the range specified by pname:offset and pname:size
* pname:offset must: be a multiple of `4`
* pname:size must: be a multiple of `4`
* pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
* pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -14,10 +14,11 @@ endif::doctype-manpage[]
* The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations
* This command must: only be called outside of a render pass instance
* Each of pname:commandBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice
* The sum of pname:dstOffset and pname:dataSize must: be less than or equal to the size of pname:dstBuffer
* The value of pname:dataSize must: be greater than `0`
* The value of pname:dstOffset must: be less than the size of pname:dstBuffer
* The value of pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset
* pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* The value of pname:dstOffset must: be a multiple of `4`
* The value of pname:dataSize must: be greater than `0`
* The value of pname:dataSize must: be less than or equal to `65536`
* The value of pname:dataSize must: be a multiple of `4`
ifndef::doctype-manpage[]

View File

@ -29,6 +29,7 @@ ifdef::doctype-manpage[]
On success, this command returns::
endif::doctype-manpage[]
* ename:VK_SUCCESS
* ename:VK_INCOMPLETE
ifndef::doctype-manpage[]
<<fundamentals-errorcodes,Failure>>::
endif::doctype-manpage[]

View File

@ -10,7 +10,6 @@ endif::doctype-manpage[]
* pname:device must: be a valid sname:VkDevice handle
* pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures
* The value of pname:memoryRangeCount must: be greater than `0`
* The memory ranges specified by pname:pMemoryRanges must: all currently be mapped
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -9,7 +9,7 @@ Valid Usage
endif::doctype-manpage[]
* pname:device must: be a valid sname:VkDevice handle
* pname:pQueue must: be a pointer to a sname:VkQueue handle
* pname:queueFamilyIndex must: be one of the queue family indexes specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure
* pname:queueFamilyIndex must: be one of the queue family indices specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure
* pname:queueIndex must: be less than the number of queues created for the specified queue family index when pname:device was created, via the pname:queueCount member of the sname:VkDeviceQueueCreateInfo structure
ifndef::doctype-manpage[]
********************************************************************************

View File

@ -10,7 +10,6 @@ endif::doctype-manpage[]
* pname:device must: be a valid sname:VkDevice handle
* pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures
* The value of pname:memoryRangeCount must: be greater than `0`
* The memory ranges specified by pname:pMemoryRanges must: all currently be mapped
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -15,7 +15,8 @@ endif::doctype-manpage[]
* Each of pname:device and pname:memory must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice
* pname:memory mustnot: currently be mapped
* pname:offset must: be less than the size of pname:memory
* If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the pname:size of the pname:memory
* pname:size must: be greater than `0`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset
* pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
ifndef::doctype-manpage[]
********************************************************************************

View File

@ -13,7 +13,8 @@ endif::doctype-manpage[]
* pname:dstAccessMask must: be a valid combination of elink:VkAccessFlagBits values
* pname:buffer must: be a valid sname:VkBuffer handle
* The value of pname:offset must: be less than the size of pname:buffer
* The sum of pname:offset and pname:size must: be less than or equal to than the size of pname:buffer
* The value of pname:size must: be greater than `0`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset
* If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
* If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <<devsandqueues-queueprops>>)
* If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are valid queue families, at least one of them must: be the same as the family of the queue that will execute this barrier

View File

@ -12,9 +12,10 @@ endif::doctype-manpage[]
* pname:flags must: be `0`
* pname:buffer must: be a valid sname:VkBuffer handle
* pname:format must: be a valid elink:VkFormat value
* The value of pname:offset must: be less than the size of pname:buffer
* The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
* The value of pname:range must: be greater than `0`
* If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer
* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset
* If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format
* The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
* pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

View File

@ -16,6 +16,7 @@ endif::doctype-manpage[]
* The sum of pname:srcArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:srcBinding, and all applicable consecutive bindings, as described by <<descriptorsets-updates-consecutive>>
* pname:dstBinding must: be a valid binding within pname:dstSet
* The sum of pname:dstArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:dstBinding, and all applicable consecutive bindings, as described by <<descriptorsets-updates-consecutive>>
* If pname:srcSet is equal to pname:dstSet, then the source and destination ranges of descriptors mustnot: overlap, where the ranges may: include array elements from consecutive bindings as described by <<descriptorsets-updates-consecutive>>
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -8,7 +8,9 @@ Valid Usage
-----------
endif::doctype-manpage[]
* pname:buffer must: be a valid sname:VkBuffer handle
* If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer
* pname:offset must: be less than the size of pname:buffer
* The value of pname:range must: be greater than `0`
* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -14,6 +14,7 @@ endif::doctype-manpage[]
* The value of pname:descriptorSetCount must: be greater than `0`
* Each of pname:descriptorPool and the elements of pname:pSetLayouts must: have been created, allocated or retrieved from the same sname:VkDevice
* The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool
* pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -24,7 +24,6 @@ endif::doctype-manpage[]
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1`
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a graphics sname:VkPipeline
* pname:stageCount must: be greater than or equal to `1`
* The pname:stage member of each element of pname:pStages must: be unique
* The pname:stage member of one element of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT
* The pname:stage member of any given element of pname:pStages mustnot: be ename:VK_SHADER_STAGE_COMPUTE_BIT

View File

@ -11,9 +11,10 @@ endif::doctype-manpage[]
* pname:pNext must: be `NULL`
* pname:memory must: be a valid sname:VkDeviceMemory handle
* pname:memory must: currently be mapped
* pname:offset must: be less than the size of the currently mapped range of pname:memory
* If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the size of the currently mapped range of pname:memory
* pname:offset and pname:size must: each be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and pname:size must: specify a range contained within the currently mapped range of pname:memory
* If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be within the currently mapped range of pname:memory
* pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -9,9 +9,10 @@ Valid Usage
endif::doctype-manpage[]
* pname:stageFlags must: be a valid combination of elink:VkShaderStageFlagBits values
* pname:stageFlags mustnot: be `0`
* The sum of pname:offset and pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
* The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
* The value of pname:size must: be greater than `0`
* The value of pname:size must: be a multiple of `4`
* The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -11,10 +11,11 @@ endif::doctype-manpage[]
* pname:flags must: be a valid combination of elink:VkSparseMemoryBindFlagBits values
* If pname:memory is not sname:VK_NULL_HANDLE, pname:memory and pname:memoryOffset must: match the memory requirements of the resource, as described in section <<resources-association>>
* If pname:memory is not sname:VK_NULL_HANDLE, pname:memory mustnot: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set
* pname:size must: be greater than `0`
* pname:resourceOffset must: be less than the size of the resource
* The sum of pname:resourceOffset and pname:size must: be less than or equal to the size of the resource
* pname:size must: be less than or equal to the size of the resource minus pname:resourceOffset
* pname:memoryOffset must: be less than the size of pname:memory
* The sum of pname:memoryOffset and pname:size must: be less than or equal to the size of pname:memory
* pname:size must: be less than or equal to the size of pname:memory minus pname:memoryOffset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -10,7 +10,7 @@ endif::doctype-manpage[]
* If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer to an array of pname:mapEntryCount sname:VkSpecializationMapEntry structures
* If pname:dataSize is not `0`, pname:pData must: be a pointer to an array of pname:dataSize bytes
* The pname:offset member of any given element of pname:pMapEntries must: be less than pname:dataSize
* The sum of the pname:offset and pname:size members of any given element of pname:pMapEntries must: be less than or equal to pname:dataSize
* For any given element of pname:pMapEntries, pname:size must be less than or equal to pname:dataSize minus pname:offset
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]

View File

@ -8,6 +8,7 @@ Valid Usage
-----------
endif::doctype-manpage[]
* pname:format must: be a valid elink:VkFormat value
* pname:location must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
* pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:offset must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
* pname:format must: be allowed as a vertex buffer format, as specified by the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties

View File

@ -8,7 +8,7 @@ Valid Usage
-----------
endif::doctype-manpage[]
* pname:inputRate must: be a valid elink:VkVertexInputRate value
* pname:binding must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:stride must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
ifndef::doctype-manpage[]
********************************************************************************

View File

@ -47,9 +47,9 @@ consts['VK_SUBOPTIMAL_KHR'] = 'VkResult'
consts['VK_ERROR_OUT_OF_DATE_KHR'] = 'VkResult'
consts['VK_ERROR_INCOMPATIBLE_DISPLAY_KHR'] = 'VkResult'
consts['VK_ERROR_VALIDATION_FAILED_EXT'] = 'VkResult'
consts['VK_NV_EXTENSION_0_ERROR'] = 'VkResult'
consts['VK_ERROR_INVALID_SHADER_NV'] = 'VkResult'
consts['VK_NV_EXTENSION_1_ERROR'] = 'VkResult'
enums['VkResult'] = ['VK_SUCCESS', 'VK_NOT_READY', 'VK_TIMEOUT', 'VK_EVENT_SET', 'VK_EVENT_RESET', 'VK_INCOMPLETE', 'VK_ERROR_OUT_OF_HOST_MEMORY', 'VK_ERROR_OUT_OF_DEVICE_MEMORY', 'VK_ERROR_INITIALIZATION_FAILED', 'VK_ERROR_DEVICE_LOST', 'VK_ERROR_MEMORY_MAP_FAILED', 'VK_ERROR_LAYER_NOT_PRESENT', 'VK_ERROR_EXTENSION_NOT_PRESENT', 'VK_ERROR_FEATURE_NOT_PRESENT', 'VK_ERROR_INCOMPATIBLE_DRIVER', 'VK_ERROR_TOO_MANY_OBJECTS', 'VK_ERROR_FORMAT_NOT_SUPPORTED', 'VK_ERROR_SURFACE_LOST_KHR', 'VK_ERROR_NATIVE_WINDOW_IN_USE_KHR', 'VK_SUBOPTIMAL_KHR', 'VK_ERROR_OUT_OF_DATE_KHR', 'VK_ERROR_INCOMPATIBLE_DISPLAY_KHR', 'VK_ERROR_VALIDATION_FAILED_EXT', 'VK_NV_EXTENSION_0_ERROR', 'VK_NV_EXTENSION_1_ERROR']
enums['VkResult'] = ['VK_SUCCESS', 'VK_NOT_READY', 'VK_TIMEOUT', 'VK_EVENT_SET', 'VK_EVENT_RESET', 'VK_INCOMPLETE', 'VK_ERROR_OUT_OF_HOST_MEMORY', 'VK_ERROR_OUT_OF_DEVICE_MEMORY', 'VK_ERROR_INITIALIZATION_FAILED', 'VK_ERROR_DEVICE_LOST', 'VK_ERROR_MEMORY_MAP_FAILED', 'VK_ERROR_LAYER_NOT_PRESENT', 'VK_ERROR_EXTENSION_NOT_PRESENT', 'VK_ERROR_FEATURE_NOT_PRESENT', 'VK_ERROR_INCOMPATIBLE_DRIVER', 'VK_ERROR_TOO_MANY_OBJECTS', 'VK_ERROR_FORMAT_NOT_SUPPORTED', 'VK_ERROR_SURFACE_LOST_KHR', 'VK_ERROR_NATIVE_WINDOW_IN_USE_KHR', 'VK_SUBOPTIMAL_KHR', 'VK_ERROR_OUT_OF_DATE_KHR', 'VK_ERROR_INCOMPATIBLE_DISPLAY_KHR', 'VK_ERROR_VALIDATION_FAILED_EXT', 'VK_ERROR_INVALID_SHADER_NV', 'VK_NV_EXTENSION_1_ERROR']
consts['VK_STRUCTURE_TYPE_APPLICATION_INFO'] = 'VkStructureType'
consts['VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO'] = 'VkStructureType'
consts['VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO'] = 'VkStructureType'

View File

@ -9,21 +9,21 @@
related documents. It is updated by hand periodically by Jon Leech. </p>
<ul>
<li> The <a href="core/styleguide.html">Vulkan Style Guide</a> is a work
<li> The <a href="1.0/styleguide.html">Vulkan Style Guide</a> is a work
in progress (but significantly complete) document, useful when
writing and modifying Specification and reference page language.
<li> <b> Core API Specifications </b>
<ul>
<li> <a href="core/xhtml/vkspec.html">Single document</a> (XHTML from 'a2x') </li>
<li> <a href="core/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
<!-- <li> <a href="core/vkspec.chunked/index.html">Chunked HTML</a> (may be out of date or not present) </li> -->
<li> <a href="1.0/xhtml/vkspec.html">Single document</a> (XHTML from 'a2x') </li>
<li> <a href="1.0/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
<!-- <li> <a href="1.0/vkspec.chunked/index.html">Chunked HTML</a> (may be out of date or not present) </li> -->
</ul>
</li>
<li> <b> Core+WSI API Specifications </b>
<ul>
<li> <a href="wsi/xhtml/vkspec.html">Single document</a> (XHTML from 'a2x') </li>
<li> <a href="wsi/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
<!-- <li> <a href="wsi/vkspec.chunked/index.html">Chunked HTML</a> (may be out of date or not present) </li> -->
<li> <a href="1.0-wsi_extensions/xhtml/vkspec.html">Single document</a> (XHTML from 'a2x') </li>
<li> <a href="1.0-wsi_extensions/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
<!-- <li> <a href="1.0-wsi_extensions/vkspec.chunked/index.html">Chunked HTML</a> (may be out of date or not present) </li> -->
</ul>
</li>
<li> <b> Khronos Data Format 1.1 Specification </b>
@ -34,27 +34,27 @@
</li>
<li> <b> Validator script output (Core API only)</b>
<ul>
<li> <a href="core/checks/notInSpec.txt">List of commands, structs, etc. not included in API spec</a></li>
<li> <a href="core/checks/specErrs.txt">Validator script output for API specification</a>
<li> <a href="core/checks/manErrs.txt">Validator script output for man pages</a>
<li> <a href="1.0/checks/notInSpec.txt">List of commands, structs, etc. not included in API spec</a></li>
<li> <a href="1.0/checks/specErrs.txt">Validator script output for API specification</a>
<li> <a href="1.0/checks/manErrs.txt">Validator script output for man pages</a>
</ul>
</li>
<li> <b> Reference pages (Core API only)</b>
<ul>
<li> <a href="core/apispec.html">Vulkan ref pages</a> (HTML, single document) </li>
<li> <a href="core/apispec.pdf">Vulkan ref pages</a> (PDF, single document) </li>
<li> <a href="core/man/html/">Vulkan ref pages</a> (HTML, separate files) </li>
<li> <a href="core/man/3/">Vulkan ref pages</a> (nroff / Unix man page markup, separate files) </li>
<li> <a href="1.0/apispec.html">Vulkan ref pages</a> (HTML, single document) </li>
<li> <a href="1.0/apispec.pdf">Vulkan ref pages</a> (PDF, single document) </li>
<li> <a href="1.0/man/html/">Vulkan ref pages</a> (HTML, separate files) </li>
<li> <a href="1.0/man/3/">Vulkan ref pages</a> (nroff / Unix man page markup, separate files) </li>
</ul>
</li>
<li> <b> The following targets are for internal use only and are probably
not included in, or if included, not up to date in the sandbox
</b> </li>
not included in, or if included, not up to date in the sandbox
</b> </li>
<ul>
<li> Core API <a href="core/html/vkspec.html">Single document</a> (HTML from
'asciibook') </li>
<li> Core+WSI API <a href="wsi/html/vkspec.html">Single
document</a> (HTML from 'asciibook') </li>
<li> Core API <a href="1.0/html/vkspec.html">Single document</a> (HTML from
'asciibook') </li>
<li> Core+WSI API <a href="1.0-wsi_extensions/html/vkspec.html">Single
document</a> (HTML from 'asciibook') </li>
</ul>
</li>
</ul>

View File

@ -97,7 +97,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<type category="define">#define <name>VK_VERSION_PATCH</name>(version) ((uint32_t)(version) &amp; 0xfff)</type>
<type category="define">// Vulkan API version supported by this file
#define <name>VK_API_VERSION</name> <type>VK_MAKE_VERSION</type>(1, 0, 4)</type>
#define <name>VK_API_VERSION</name> <type>VK_MAKE_VERSION</type>(1, 0, 5)</type>
<type category="define">
@ -573,13 +573,14 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE -->
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDeviceMemory</type> <name>memory</name></member> <!-- Mapped memory object -->
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Offset within the mapped memory the range starts from -->
<member><type>VkDeviceSize</type> <name>size</name></member> <!-- Size of the range within the mapped memory -->
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Offset within the memory object where the range starts -->
<member><type>VkDeviceSize</type> <name>size</name></member> <!-- Size of the range within the memory object -->
<validity>
<usage>pname:memory must: currently be mapped</usage>
<usage>pname:offset must: be less than the size of the currently mapped range of pname:memory</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the size of the currently mapped range of pname:memory</usage>
<usage>pname:offset and pname:size must: each be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and pname:size must: specify a range contained within the currently mapped range of pname:memory</usage>
<usage>If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be within the currently mapped range of pname:memory</usage>
<usage>pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize</usage>
</validity>
</type>
<type category="struct" name="VkFormatProperties" returnedonly="true">
@ -599,7 +600,9 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Base offset from buffer start in bytes to update in the descriptor set. -->
<member><type>VkDeviceSize</type> <name>range</name></member> <!-- Size in bytes of the buffer resource for this descriptor update. -->
<validity>
<usage>If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer</usage>
<usage>pname:offset must: be less than the size of pname:buffer</usage>
<usage>The value of pname:range must: be greater than `0`</usage>
<usage>If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset</usage>
</validity>
</type>
<type category="struct" name="VkDescriptorImageInfo">
@ -653,6 +656,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>The sum of pname:srcArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:srcBinding, and all applicable consecutive bindings, as described by &lt;&lt;descriptorsets-updates-consecutive&gt;&gt;</usage>
<usage>pname:dstBinding must: be a valid binding within pname:dstSet</usage>
<usage>The sum of pname:dstArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:dstBinding, and all applicable consecutive bindings, as described by &lt;&lt;descriptorsets-updates-consecutive&gt;&gt;</usage>
<usage>If pname:srcSet is equal to pname:dstSet, then the source and destination ranges of descriptors mustnot: overlap, where the ranges may: include array elements from consecutive bindings as described by &lt;&lt;descriptorsets-updates-consecutive&gt;&gt;</usage>
</validity>
</type>
<type category="struct" name="VkBufferCreateInfo">
@ -683,9 +687,10 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Specified in bytes -->
<member><type>VkDeviceSize</type> <name>range</name></member> <!-- View size specified in bytes -->
<validity>
<usage>The value of pname:offset must: be less than the size of pname:buffer</usage>
<usage>The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment</usage>
<usage>The value of pname:range must: be greater than `0`</usage>
<usage>If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer</usage>
<usage>If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset</usage>
<usage>If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format</usage>
<usage>The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements</usage>
<usage>pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</usage>
@ -743,7 +748,8 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDeviceSize</type> <name>size</name></member> <!-- Amount of bytes to sync -->
<validity>
<usage>The value of pname:offset must: be less than the size of pname:buffer</usage>
<usage>The sum of pname:offset and pname:size must: be less than or equal to than the size of pname:buffer</usage>
<usage>The value of pname:size must: be greater than `0`</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset</usage>
<usage>If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED</usage>
<usage>If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see &lt;&lt;devsandqueues-queueprops&gt;&gt;)</usage>
<usage>If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are valid queue families, at least one of them must: be the same as the family of the queue that will execute this barrier</usage>
@ -839,7 +845,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</usage>
</validity>
</type>
<type category="struct" name="VkSubresourceLayout">
<type category="struct" name="VkSubresourceLayout" returnedonly="true">
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Specified in bytes -->
<member><type>VkDeviceSize</type> <name>size</name></member> <!-- Specified in bytes -->
<member><type>VkDeviceSize</type> <name>rowPitch</name></member> <!-- Specified in bytes -->
@ -889,10 +895,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<validity>
<usage>If pname:memory is not sname:VK_NULL_HANDLE, pname:memory and pname:memoryOffset must: match the memory requirements of the resource, as described in section &lt;&lt;resources-association&gt;&gt;</usage>
<usage>If pname:memory is not sname:VK_NULL_HANDLE, pname:memory mustnot: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set</usage>
<usage>pname:size must: be greater than `0`</usage>
<usage>pname:resourceOffset must: be less than the size of the resource</usage>
<usage>The sum of pname:resourceOffset and pname:size must: be less than or equal to the size of the resource</usage>
<usage>pname:size must: be less than or equal to the size of the resource minus pname:resourceOffset</usage>
<usage>pname:memoryOffset must: be less than the size of pname:memory</usage>
<usage>The sum of pname:memoryOffset and pname:size must: be less than or equal to the size of pname:memory</usage>
<usage>pname:size must: be less than or equal to the size of pname:memory minus pname:memoryOffset</usage>
</validity>
</type>
<type category="struct" name="VkSparseImageMemoryBind">
@ -1095,6 +1102,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member len="descriptorSetCount">const <type>VkDescriptorSetLayout</type>* <name>pSetLayouts</name></member>
<validity>
<usage>The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool</usage>
<usage>pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts</usage>
</validity>
</type>
<type category="struct" name="VkSpecializationMapEntry">
@ -1109,7 +1117,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member len="dataSize">const <type>void</type>* <name>pData</name></member> <!-- Pointer to SpecConstant data -->
<validity>
<usage>The pname:offset member of any given element of pname:pMapEntries must: be less than pname:dataSize</usage>
<usage>The sum of the pname:offset and pname:size members of any given element of pname:pMapEntries must: be less than or equal to pname:dataSize</usage>
<usage>For any given element of pname:pMapEntries, pname:size must be less than or equal to pname:dataSize minus pname:offset</usage>
</validity>
</type>
<type category="struct" name="VkPipelineShaderStageCreateInfo">
@ -1163,7 +1171,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>uint32_t</type> <name>stride</name></member> <!-- Distance between vertices in bytes (0 = no advancement) -->
<member><type>VkVertexInputRate</type> <name>inputRate</name></member> <!-- The rate at which the vertex data is consumed -->
<validity>
<usage>pname:binding must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings</usage>
<usage>pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings</usage>
<usage>pname:stride must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride</usage>
</validity>
</type>
@ -1173,6 +1181,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkFormat</type> <name>format</name></member> <!-- format of source data -->
<member><type>uint32_t</type> <name>offset</name></member> <!-- Offset of first element in bytes from base of vertex -->
<validity>
<usage>pname:location must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes</usage>
<usage>pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings</usage>
<usage>pname:offset must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset</usage>
<usage>pname:format must: be allowed as a vertex buffer format, as specified by the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties</usage>
@ -1357,7 +1366,6 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1`</usage>
<usage>If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle</usage>
<usage>If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a graphics sname:VkPipeline</usage>
<usage>pname:stageCount must: be greater than or equal to `1`</usage>
<usage>The pname:stage member of each element of pname:pStages must: be unique</usage>
<usage>The pname:stage member of one element of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT</usage>
<usage>The pname:stage member of any given element of pname:pStages mustnot: be ename:VK_SHADER_STAGE_COMPUTE_BIT</usage>
@ -1409,9 +1417,10 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>uint32_t</type> <name>offset</name></member> <!-- Start of the range, in bytes -->
<member><type>uint32_t</type> <name>size</name></member> <!-- Size of the range, in bytes -->
<validity>
<usage>The sum of pname:offset and pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize</usage>
<usage>The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize</usage>
<usage>The value of pname:size must: be greater than `0`</usage>
<usage>The value of pname:size must: be a multiple of `4`</usage>
<usage>The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset</usage>
</validity>
</type>
<type category="struct" name="VkPipelineLayoutCreateInfo">
@ -2698,7 +2707,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<enum bitpos="3" name="VK_SHADER_STAGE_GEOMETRY_BIT"/>
<enum bitpos="4" name="VK_SHADER_STAGE_FRAGMENT_BIT"/>
<enum bitpos="5" name="VK_SHADER_STAGE_COMPUTE_BIT"/>
<enum value="0x1F" name="VK_SHADER_STAGE_ALL_GRAPHICS"/>
<enum value="0x0000001F" name="VK_SHADER_STAGE_ALL_GRAPHICS"/>
<enum value="0x7FFFFFFF" name="VK_SHADER_STAGE_ALL"/>
</enums>
<enums name="VkImageUsageFlagBits" type="bitmask">
@ -2934,7 +2943,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>If no sname:VkAllocationCallbacks were provided when pname:instance was created, pname:pAllocator must: be `NULL`</usage>
</validity>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
<proto><type>VkResult</type> <name>vkEnumeratePhysicalDevices</name></proto>
<param><type>VkInstance</type> <name>instance</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pPhysicalDeviceCount</name></param>
@ -3048,7 +3057,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>uint32_t</type> <name>queueIndex</name></param>
<param><type>VkQueue</type>* <name>pQueue</name></param>
<validity>
<usage>pname:queueFamilyIndex must: be one of the queue family indexes specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure</usage>
<usage>pname:queueFamilyIndex must: be one of the queue family indices specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure</usage>
<usage>pname:queueIndex must: be less than the number of queues created for the specified queue family index when pname:device was created, via the pname:queueCount member of the sname:VkDeviceQueueCreateInfo structure</usage>
</validity>
</command>
@ -3104,7 +3113,8 @@ maintained in the master branch of the Khronos Vulkan Github project.
<validity>
<usage>pname:memory mustnot: currently be mapped</usage>
<usage>pname:offset must: be less than the size of pname:memory</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the pname:size of the pname:memory</usage>
<usage>pname:size must: be greater than `0`</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset</usage>
<usage>pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</usage>
</validity>
</command>
@ -3121,18 +3131,12 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>VkDevice</type> <name>device</name></param>
<param><type>uint32_t</type> <name>memoryRangeCount</name></param>
<param len="memoryRangeCount">const <type>VkMappedMemoryRange</type>* <name>pMemoryRanges</name></param>
<validity>
<usage>The memory ranges specified by pname:pMemoryRanges must: all currently be mapped</usage>
</validity>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkInvalidateMappedMemoryRanges</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>uint32_t</type> <name>memoryRangeCount</name></param>
<param len="memoryRangeCount">const <type>VkMappedMemoryRange</type>* <name>pMemoryRanges</name></param>
<validity>
<usage>The memory ranges specified by pname:pMemoryRanges must: all currently be mapped</usage>
</validity>
</command>
<command>
<proto><type>void</type> <name>vkGetDeviceMemoryCommitment</name></proto>
@ -3163,7 +3167,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>If pname:buffer was created with the ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment</usage>
<usage>If pname:buffer was created with the ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment</usage>
<usage>pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer</usage>
<usage>The sum of pname:memoryOffset and the size of pname:buffer must: be less than or equal to the size of pname:memory</usage>
<usage>The size of pname:buffer must: be less than or equal to the size of pname:memory minus pname:memoryOffset</usage>
<usage>pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer</usage>
</validity>
</command>
@ -3185,7 +3189,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>pname:memoryOffset must: be less than the size of pname:memory</usage>
<usage>pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image</usage>
<usage>pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image</usage>
<usage>pname:memory must: have storage from pname:memoryOffset onwards equal to or greater than the pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image</usage>
<usage>The pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image must: be less than or equal to the size of pname:memory minus pname:memoryOffset</usage>
</validity>
</command>
<command>
@ -4047,8 +4051,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>uint32_t</type> <name>regionCount</name></param>
<param len="regionCount">const <type>VkBufferCopy</type>* <name>pRegions</name></param>
<validity>
<usage>The sum of the pname:srcOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer</usage>
<usage>The sum of the pname:dstOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer</usage>
<usage>The pname:copySize member of a given element of pname:pRegions must: be greater than `0`</usage>
<usage>The pname:srcOffset member of a given element of pname:pRegions must: be less than the size of pname:srcBuffer</usage>
<usage>The pname:dstOffset member of a given element of pname:pRegions must: be less than the size of pname:dstBuffer</usage>
<usage>The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer minus pname:srcOffset</usage>
<usage>The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset</usage>
<usage>The union of the source regions, and the union of the destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory</usage>
<usage>pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag</usage>
<usage>pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag</usage>
@ -4152,10 +4159,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>VkDeviceSize</type> <name>dataSize</name></param>
<param len="latexmath:[$dataSize \over 4$]">const <type>uint32_t</type>* <name>pData</name></param>
<validity>
<usage>The sum of pname:dstOffset and pname:dataSize must: be less than or equal to the size of pname:dstBuffer</usage>
<usage>The value of pname:dataSize must: be greater than `0`</usage>
<usage>The value of pname:dstOffset must: be less than the size of pname:dstBuffer</usage>
<usage>The value of pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset</usage>
<usage>pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag</usage>
<usage>The value of pname:dstOffset must: be a multiple of `4`</usage>
<usage>The value of pname:dataSize must: be greater than `0`</usage>
<usage>The value of pname:dataSize must: be less than or equal to `65536`</usage>
<usage>The value of pname:dataSize must: be a multiple of `4`</usage>
</validity>
@ -4168,10 +4176,12 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>VkDeviceSize</type> <name>size</name></param>
<param><type>uint32_t</type> <name>data</name></param>
<validity>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:dstOffset and pname:size must: be less than or equal to the size of pname:dstBuffer</usage>
<usage>pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag</usage>
<usage>pname:size must: be greater than `0`</usage>
<usage>pname:dstOffset must: be less than the size of pname:dstBuffer</usage>
<usage>pname:dstOffset must: be a multiple of `4`</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset</usage>
<usage>If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4`</usage>
<usage>pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag</usage>
</validity>
</command>
<command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
@ -4363,6 +4373,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param><type>VkDeviceSize</type> <name>stride</name></param>
<param optional="true"><type>VkQueryResultFlags</type> <name>flags</name></param>
<validity>
<usage>pname:dstOffset must: be less than the size of pname:dstBuffer</usage>
<usage>pname:firstQuery must: be less than the number of queries in pname:queryPool</usage>
<usage>The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool</usage>
<usage>If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must be multiples of `4`</usage>
@ -4383,6 +4394,8 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>pname:stageFlags must: match exactly the shader stages used in pname:layout for the range specified by pname:offset and pname:size</usage>
<usage>pname:offset must: be a multiple of `4`</usage>
<usage>pname:size must: be a multiple of `4`</usage>
<usage>pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize</usage>
<usage>pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset</usage>
</validity>
</command>
<command queues="graphics" renderpass="outside" cmdbufferlevel="primary">
@ -4670,7 +4683,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice</usage>
</validity>
</command>
<command>
<command successcodes="VK_SUCCESS">
<proto><type>VkResult</type> <name>vkCreateDebugReportCallbackEXT</name></proto>
<param><type>VkInstance</type> <name>instance</name></param>
<param>const <type>VkDebugReportCallbackCreateInfoEXT</type>* <name>pCreateInfo</name></param>
@ -5088,11 +5101,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<command name="vkDebugReportMessageEXT"/>
</require>
</extension>
<extension name="VK_NV_extension_0" number="13" author="NVIDIA" contact="Piers Daniell @pdaniell" supported="disabled">
<extension name="VK_NV_glsl_shader" number="13" author="NVIDIA" contact="Piers Daniell @pdaniell" supported="vulkan">
<require>
<enum value="0" name="VK_NV_EXTENSION_0_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_0&quot;" name="VK_NV_EXTENSION_0_EXTENSION_NAME"/>
<enum offset="0" dir="-" extends="VkResult" name="VK_NV_EXTENSION_0_ERROR"/>
<enum value="1" name="VK_NV_GLSL_SHADER_SPEC_VERSION"/>
<enum value="&quot;VK_NV_glsl_shader&quot;" name="VK_NV_GLSL_SHADER_EXTENSION_NAME"/>
<enum offset="0" dir="-" extends="VkResult" name="VK_ERROR_INVALID_SHADER_NV"/>
</require>
</extension>
<extension name="VK_NV_extension_1" number="14" author="NVIDIA" contact="Piers Daniell @pdaniell" supported="disabled">

View File

@ -41,7 +41,7 @@ extern "C" {
(((major) << 22) | ((minor) << 12) | (patch))
// Vulkan API version supported by this file
#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 4)
#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 5)
#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
@ -142,6 +142,7 @@ typedef enum VkResult {
VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
VK_ERROR_INVALID_SHADER_NV = -1000012000,
VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
VK_RESULT_END_RANGE = VK_INCOMPLETE,
VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
@ -979,7 +980,7 @@ typedef enum VkShaderStageFlagBits {
VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F,
VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
} VkShaderStageFlagBits;
typedef VkFlags VkPipelineVertexInputStateCreateFlags;
@ -3774,6 +3775,11 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
const char* pMessage);
#endif
#define VK_NV_glsl_shader 1
#define VK_NV_GLSL_SHADER_SPEC_VERSION 1
#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader"
#ifdef __cplusplus
}
#endif