// Copyright 2015-2022 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 // This text fragment is used many times in the Devices and Queues, and // Limits chapters for different behavior, property, and limit queries. ifdef::hidden[] // tag::limits_desc[] If the sname:{refpage} structure is included in the pname:pNext chain of the slink:VkPhysicalDeviceProperties2 structure passed to flink:vkGetPhysicalDeviceProperties2, it is filled in with each corresponding implementation-dependent property. // end::limits_desc[] endif::hidden[] [[limits]] = Limits _Limits_ are implementation-dependent minimums, maximums, and other device characteristics that an application may: need to be aware of. ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] [NOTE] .Note ==== Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as well as the extensible structure sname:VkPhysicalDeviceProperties2, which was added in `apiext:VK_KHR_get_physical_device_properties2` and included in Vulkan 1.1. When limits are added in future Vulkan versions or extensions, each extension should: introduce one new limit structure, if needed. This structure can: be added to the pname:pNext chain of the sname:VkPhysicalDeviceProperties2 structure. ==== endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] [open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs'] -- The sname:VkPhysicalDeviceLimits structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceLimits.adoc[] The sname:VkPhysicalDeviceLimits are properties of the physical device. These are available in the pname:limits member of the slink:VkPhysicalDeviceProperties structure which is returned from flink:vkGetPhysicalDeviceProperties. * [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest dimension (pname:width) that is guaranteed to be supported for all images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D. Some combinations of image parameters (format, usage, etc.) may: allow support for larger dimensions, which can: be queried using flink:vkGetPhysicalDeviceImageFormatProperties. * [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest dimension (pname:width or pname:height) that is guaranteed to be supported for all images created with an pname:imageType of ename:VK_IMAGE_TYPE_2D and without ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags. Some combinations of image parameters (format, usage, etc.) may: allow support for larger dimensions, which can: be queried using flink:vkGetPhysicalDeviceImageFormatProperties. * [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest dimension (pname:width, pname:height, or pname:depth) that is guaranteed to be supported for all images created with an pname:imageType of ename:VK_IMAGE_TYPE_3D. Some combinations of image parameters (format, usage, etc.) may: allow support for larger dimensions, which can: be queried using flink:vkGetPhysicalDeviceImageFormatProperties. * [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the largest dimension (pname:width or pname:height) that is guaranteed to be supported for all images created with an pname:imageType of ename:VK_IMAGE_TYPE_2D and with ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags. Some combinations of image parameters (format, usage, etc.) may: allow support for larger dimensions, which can: be queried using flink:vkGetPhysicalDeviceImageFormatProperties. * [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum number of layers (pname:arrayLayers) for an image. * [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the maximum number of addressable texels for a buffer view created on a buffer which was created with the ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage member of the slink:VkBufferCreateInfo structure. * [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the maximum value that can: be specified in the pname:range member of a slink:VkDescriptorBufferInfo structure passed to flink:vkUpdateDescriptorSets for descriptors of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC. * [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the maximum value that can: be specified in the pname:range member of a slink:VkDescriptorBufferInfo structure passed to flink:vkUpdateDescriptorSets for descriptors of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC. * [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the maximum size, in bytes, of the pool of push constant memory. For each of the push constant ranges indicated by the pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or equal to this limit. * [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is the maximum number of device memory allocations, as created by flink:vkAllocateMemory, which can: simultaneously exist. * [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is the maximum number of sampler objects, as created by flink:vkCreateSampler, which can: simultaneously exist on a device. * [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the granularity, in bytes, at which buffer or linear image resources, and optimal image resources can: be bound to adjacent offsets in the same sname:VkDeviceMemory object without aliasing. See <> for more details. * [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the total amount of address space available, in bytes, for sparse memory resources. This is an upper bound on the sum of the sizes of all sparse resources, regardless of whether any memory is bound to them. * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the maximum number of descriptor sets that can: be simultaneously used by a pipeline. All code:DescriptorSet decorations in shader modules must: have a value less than pname:maxBoundDescriptorSets. See <>. * [[limits-maxPerStageDescriptorSamplers]] pname:maxPerStageDescriptorSamplers is the maximum number of samplers that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See <> and <>. * [[limits-maxPerStageDescriptorUniformBuffers]] pname:maxPerStageDescriptorUniformBuffers is the maximum number of uniform buffers that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See <> and <>. * [[limits-maxPerStageDescriptorStorageBuffers]] pname:maxPerStageDescriptorStorageBuffers is the maximum number of storage buffers that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a pipeline shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See <> and <>. * [[limits-maxPerStageDescriptorSampledImages]] pname:maxPerStageDescriptorSampledImages is the maximum number of sampled images that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a pipeline shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See <>, <>, and <>. * [[limits-maxPerStageDescriptorStorageImages]] pname:maxPerStageDescriptorStorageImages is the maximum number of storage images that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a pipeline shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See <>, and <>. * [[limits-maxPerStageDescriptorInputAttachments]] pname:maxPerStageDescriptorInputAttachments is the maximum number of input attachments that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] A descriptor is accessible to a pipeline shader stage when the pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. These are only supported for the fragment stage. See <>. * [[limits-maxPerStageResources]] pname:maxPerStageResources is the maximum number of resources that can: be accessible to a single shader stage in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] For the fragment shader stage the framebuffer color attachments also count against this limit. * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is the maximum number of samplers that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <> and <>. * [[limits-maxDescriptorSetUniformBuffers]] pname:maxDescriptorSetUniformBuffers is the maximum number of uniform buffers that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <> and <>. * [[limits-maxDescriptorSetUniformBuffersDynamic]] pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of dynamic uniform buffers that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <>. * [[limits-maxDescriptorSetStorageBuffers]] pname:maxDescriptorSetStorageBuffers is the maximum number of storage buffers that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <> and <>. * [[limits-maxDescriptorSetStorageBuffersDynamic]] pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of dynamic storage buffers that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <>. * [[limits-maxDescriptorSetSampledImages]] pname:maxDescriptorSetSampledImages is the maximum number of sampled images that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <>, <>, and <>. * [[limits-maxDescriptorSetStorageImages]] pname:maxDescriptorSetStorageImages is the maximum number of storage images that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <>, and <>. * [[limits-maxDescriptorSetInputAttachments]] pname:maxDescriptorSetInputAttachments is the maximum number of input attachments that can: be included in a pipeline layout. Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptors in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] See <>. * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is the maximum number of vertex input attributes that can: be specified for a graphics pipeline. These are described in the array of sname:VkVertexInputAttributeDescription structures that are provided at graphics pipeline creation time via the pname:pVertexAttributeDescriptions member of the slink:VkPipelineVertexInputStateCreateInfo structure. See <> and <>. * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the maximum number of vertex buffers that can: be specified for providing vertex attributes to a graphics pipeline. These are described in the array of sname:VkVertexInputBindingDescription structures that are provided at graphics pipeline creation time via the pname:pVertexBindingDescriptions member of the slink:VkPipelineVertexInputStateCreateInfo structure. The pname:binding member of sname:VkVertexInputBindingDescription must: be less than this limit. See <>. * [[limits-maxVertexInputAttributeOffset]] pname:maxVertexInputAttributeOffset is the maximum vertex input attribute offset that can: be added to the vertex input binding stride. The pname:offset member of the sname:VkVertexInputAttributeDescription structure must: be less than or equal to this limit. See <>. * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride is the maximum vertex input binding stride that can: be specified in a vertex input binding. The pname:stride member of the sname:VkVertexInputBindingDescription structure must: be less than or equal to this limit. See <>. * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is the maximum number of components of output variables which can: be output by a vertex shader. See <>. * [[limits-maxTessellationGenerationLevel]] pname:maxTessellationGenerationLevel is the maximum tessellation generation level supported by the fixed-function tessellation primitive generator. See <>. * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is the maximum patch size, in vertices, of patches that can: be processed by the tessellation control shader and tessellation primitive generator. The pname:patchControlPoints member of the slink:VkPipelineTessellationStateCreateInfo structure specified at pipeline creation time and the value provided in the code:OutputVertices execution mode of shader modules must: be less than or equal to this limit. See <>. * [[limits-maxTessellationControlPerVertexInputComponents]] pname:maxTessellationControlPerVertexInputComponents is the maximum number of components of input variables which can: be provided as per-vertex inputs to the tessellation control shader stage. * [[limits-maxTessellationControlPerVertexOutputComponents]] pname:maxTessellationControlPerVertexOutputComponents is the maximum number of components of per-vertex output variables which can: be output from the tessellation control shader stage. * [[limits-maxTessellationControlPerPatchOutputComponents]] pname:maxTessellationControlPerPatchOutputComponents is the maximum number of components of per-patch output variables which can: be output from the tessellation control shader stage. * [[limits-maxTessellationControlTotalOutputComponents]] pname:maxTessellationControlTotalOutputComponents is the maximum total number of components of per-vertex and per-patch output variables which can: be output from the tessellation control shader stage. * [[limits-maxTessellationEvaluationInputComponents]] pname:maxTessellationEvaluationInputComponents is the maximum number of components of input variables which can: be provided as per-vertex inputs to the tessellation evaluation shader stage. * [[limits-maxTessellationEvaluationOutputComponents]] pname:maxTessellationEvaluationOutputComponents is the maximum number of components of per-vertex output variables which can: be output from the tessellation evaluation shader stage. * [[limits-maxGeometryShaderInvocations]] pname:maxGeometryShaderInvocations is the maximum invocation count supported for instanced geometry shaders. The value provided in the code:Invocations execution mode of shader modules must: be less than or equal to this limit. See <>. * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents is the maximum number of components of input variables which can: be provided as inputs to the geometry shader stage. * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents is the maximum number of components of output variables which can: be output from the geometry shader stage. * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is the maximum number of vertices which can: be emitted by any geometry shader. * [[limits-maxGeometryTotalOutputComponents]] pname:maxGeometryTotalOutputComponents is the maximum total number of components of output variables, across all emitted vertices, which can: be output from the geometry shader stage. * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents is the maximum number of components of input variables which can: be provided as inputs to the fragment shader stage. * [[limits-maxFragmentOutputAttachments]] pname:maxFragmentOutputAttachments is the maximum number of output attachments which can: be written to by the fragment shader stage. * [[limits-maxFragmentDualSrcAttachments]] pname:maxFragmentDualSrcAttachments is the maximum number of output attachments which can: be written to by the fragment shader stage when blending is enabled and one of the dual source blend modes is in use. See <> and <>. * [[limits-maxFragmentCombinedOutputResources]] pname:maxFragmentCombinedOutputResources is the total number of storage buffers, storage images, and output code:Location decorated color attachments (described in <>) which can: be used in the fragment shader stage. * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize is the maximum total storage size, in bytes, available for variables declared with the code:Workgroup storage class in shader modules (or with the code:shared storage qualifier in GLSL) in the compute shader stage. ifdef::VK_KHR_workgroup_memory_explicit_layout[] When variables declared with the code:Workgroup storage class are explicitly laid out (hence they are also decorated with code:Block), the amount of storage consumed is the size of the largest Block variable, not counting any padding at the end. endif::VK_KHR_workgroup_memory_explicit_layout[] The amount of storage consumed by the ifdef::VK_KHR_workgroup_memory_explicit_layout[] non-Block endif::VK_KHR_workgroup_memory_explicit_layout[] variables declared with the code:Workgroup storage class is implementation-dependent. However, the amount of storage consumed may not exceed the largest block size that would be obtained if all active ifdef::VK_KHR_workgroup_memory_explicit_layout[] non-Block endif::VK_KHR_workgroup_memory_explicit_layout[] variables declared with code:Workgroup storage class were assigned offsets in an arbitrary order by successively taking the smallest valid offset according to the <> rules, and with code:Boolean values considered as 32-bit integer values for the purpose of this calculation. (This is equivalent to using the GLSL std430 layout rules.) * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is the maximum number of local workgroups that can: be dispatched by a single dispatching command. These three values represent the maximum number of local workgroups for the X, Y, and Z dimensions, respectively. The workgroup count parameters to the dispatching commands must: be less than or equal to the corresponding limit. See <>. * [[limits-maxComputeWorkGroupInvocations]] pname:maxComputeWorkGroupInvocations is the maximum total number of compute shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode in shader modules or by the object decorated by the code:WorkgroupSize decoration, must: be less than or equal to this limit. * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is the maximum size of a local compute workgroup, per dimension. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode or by the object decorated by the code:WorkgroupSize decoration in shader modules, must: be less than or equal to the corresponding limit. * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the number of bits of subpixel precision in framebuffer coordinates [eq]#x~f~# and [eq]#y~f~#. See <>. * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the number of bits of precision in the division along an axis of an image used for minification and magnification filters. [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions along each axis of the image represented. Sub-texel values calculated during image sampling will snap to these locations when generating the filtered results. * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number of bits of division that the LOD calculation for mipmap fetching get snapped to when determining the contribution from each mip level to the mip filtered results. [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions. * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is the maximum index value that can: be used for indexed draw calls when using 32-bit indices. This excludes the primitive restart index value of 0xFFFFFFFF. See <>. * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the maximum draw count that is supported for indirect drawing calls. See <>. * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum absolute sampler LOD bias. The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo structure and the code:Bias operand of image sampling operations in shader modules (or 0 if no code:Bias operand is provided to an image sampling operation) are clamped to the range [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#. See <>. * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the maximum degree of sampler anisotropy. The maximum degree of anisotropic filtering used for an image sampling operation is the minimum of the pname:maxAnisotropy member of the slink:VkSamplerCreateInfo structure and this limit. See <>. * [[limits-maxViewports]] pname:maxViewports is the maximum number of active viewports. The pname:viewportCount member of the slink:VkPipelineViewportStateCreateInfo structure that is provided at pipeline creation must: be less than or equal to this limit. * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the maximum viewport dimensions in the X (width) and Y (height) dimensions, respectively. The maximum viewport dimensions must: be greater than or equal to the largest image which can: be created and used as a framebuffer attachment. See <>. * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the [eq]#[minimum, maximum]# range that the corners of a viewport must: be contained in. This range must: be at least [eq]#[-2 {times} pname:size, 2 {times} pname:size - 1]#, where [eq]#pname:size = max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#. See <>. + [NOTE] .Note ==== The intent of the pname:viewportBoundsRange limit is to allow a maximum sized viewport to be arbitrarily shifted relative to the output target as long as at least some portion intersects. This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times} pname:size - 1]# which would allow all possible non-empty-set intersections of the output target and the viewport. Since these numbers are typically powers of two, picking the signed number range using the smallest possible number of bits ends up with the specified range. ==== * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number of bits of subpixel precision for viewport bounds. The subpixel precision that floating-point viewport bounds are interpreted at is given by this limit. * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the minimum required: alignment, in bytes, of host visible memory allocations within the host address space. When mapping a memory allocation with flink:vkMapMemory, subtracting pname:offset bytes from the returned pointer will always produce an integer multiple of this limit. See <>. The value must: be a power of two. * [[limits-minTexelBufferOffsetAlignment]] pname:minTexelBufferOffsetAlignment is the minimum required: alignment, in bytes, for the pname:offset member of the slink:VkBufferViewCreateInfo structure for texel buffers. The value must: be a power of two. ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[] If <> is enabled, this limit is equivalent to the maximum of the <> and <> members of slink:VkPhysicalDeviceTexelBufferAlignmentProperties, but smaller alignment is optionally: allowed by <> and <>. If <> is not enabled, endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[] slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this value. * [[limits-minUniformBufferOffsetAlignment]] pname:minUniformBufferOffsetAlignment is the minimum required: alignment, in bytes, for the pname:offset member of the sname:VkDescriptorBufferInfo structure for uniform buffers. When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the pname:offset must: be an integer multiple of this limit. Similarly, dynamic offsets for uniform buffers must: be multiples of this limit. The value must: be a power of two. * [[limits-minStorageBufferOffsetAlignment]] pname:minStorageBufferOffsetAlignment is the minimum required: alignment, in bytes, for the pname:offset member of the sname:VkDescriptorBufferInfo structure for storage buffers. When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the pname:offset must: be an integer multiple of this limit. Similarly, dynamic offsets for storage buffers must: be multiples of this limit. The value must: be a power of two. * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset value for the code:ConstOffset image operand of any of the code:OpImageSample* or code:OpImageFetch* image instructions. * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset value for the code:ConstOffset image operand of any of the code:OpImageSample* or code:OpImageFetch* image instructions. * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the minimum offset value for the code:Offset, code:ConstOffset, or code:ConstOffsets image operands of any of the code:OpImage*Gather image instructions. * [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the maximum offset value for the code:Offset, code:ConstOffset, or code:ConstOffsets image operands of any of the code:OpImage*Gather image instructions. * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the base minimum (inclusive) negative offset value for the code:Offset operand of the code:InterpolateAtOffset extended instruction. * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the base maximum (inclusive) positive offset value for the code:Offset operand of the code:InterpolateAtOffset extended instruction. * [[limits-subPixelInterpolationOffsetBits]] pname:subPixelInterpolationOffsetBits is the number of fractional bits that the code:x and code:y offsets to the code:InterpolateAtOffset extended instruction may: be rounded to as fixed-point values. * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum width for a framebuffer. The pname:width member of the slink:VkFramebufferCreateInfo structure must: be less than or equal to this limit. * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the maximum height for a framebuffer. The pname:height member of the slink:VkFramebufferCreateInfo structure must: be less than or equal to this limit. * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the maximum layer count for a layered framebuffer. The pname:layers member of the slink:VkFramebufferCreateInfo structure must: be less than or equal to this limit. * [[limits-framebufferColorSampleCounts]] pname:framebufferColorSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the color sample counts that are supported for all framebuffer color attachments with floating- or fixed-point formats. ifndef::VK_VERSION_1_2[] There is no limit specifying the color sample counts that are supported for all color attachments with integer formats. endif::VK_VERSION_1_2[] ifdef::VK_VERSION_1_2[] For color attachments with integer formats, see <>. endif::VK_VERSION_1_2[] * [[limits-framebufferDepthSampleCounts]] pname:framebufferDepthSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the supported depth sample counts for all framebuffer depth/stencil attachments, when the format includes a depth component. * [[limits-framebufferStencilSampleCounts]] pname:framebufferStencilSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the supported stencil sample counts for all framebuffer depth/stencil attachments, when the format includes a stencil component. * [[limits-framebufferNoAttachmentsSampleCounts]] pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the supported sample counts for a <>. * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum number of color attachments that can: be used by a subpass in a render pass. The pname:colorAttachmentCount member of the sname:VkSubpassDescription ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[] or sname:VkSubpassDescription2 endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[] structure must: be less than or equal to this limit. * [[limits-sampledImageColorSampleCounts]] pname:sampledImageColorSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color format. * [[limits-sampledImageIntegerSampleCounts]] pname:sampledImageIntegerSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color format. * [[limits-sampledImageDepthSampleCounts]] pname:sampledImageDepthSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format. * [[limits-sampledImageStencilSampleCounts]] pname:sampledImageStencilSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format. * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT. * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum number of array elements of a variable decorated with the code:SampleMask built-in decoration. * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics specifies support for timestamps on all graphics and compute queues. If this limit is set to ename:VK_TRUE, all queues that advertise the ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the sname:VkQueueFamilyProperties::pname:queueFlags support sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36. See <>. * [[limits-timestampPeriod]] pname:timestampPeriod is the number of nanoseconds required: for a timestamp query to be incremented by 1. See <>. * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number of clip distances that can: be used in a single shader stage. The size of any array declared with the code:ClipDistance built-in decoration in a shader module must: be less than or equal to this limit. * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number of cull distances that can: be used in a single shader stage. The size of any array declared with the code:CullDistance built-in decoration in a shader module must: be less than or equal to this limit. * [[limits-maxCombinedClipAndCullDistances]] pname:maxCombinedClipAndCullDistances is the maximum combined number of clip and cull distances that can: be used in a single shader stage. The sum of the sizes of any pair of arrays declared with the code:ClipDistance and code:CullDistance built-in decoration used by a single shader stage in a shader module must: be less than or equal to this limit. * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the number of discrete priorities that can: be assigned to a queue based on the value of each member of slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities. This must: be at least 2, and levels must: be spread evenly over the range, with at least one level at 1.0, and another at 0.0. See <>. * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range [eq]#[pname:minimum,pname:maximum]# of supported sizes for points. Values written to variables decorated with the code:PointSize built-in decoration are clamped to this range. * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range [eq]#[pname:minimum,pname:maximum]# of supported widths for lines. Values specified by the pname:lineWidth member of the slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth parameter to fname:vkCmdSetLineWidth are clamped to this range. * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the granularity of supported point sizes. Not all point sizes in the range defined by pname:pointSizeRange are supported. This limit specifies the granularity (or increment) between successive supported point sizes. * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the granularity of supported line widths. Not all line widths in the range defined by pname:lineWidthRange are supported. This limit specifies the granularity (or increment) between successive supported line widths. * [[limits-strictLines]] pname:strictLines specifies whether lines are rasterized according to the preferred method of rasterization. If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set of rules. If set to ename:VK_TRUE, lines are rasterized as per the strict definition. See <>. * [[limits-standardSampleLocations]] pname:standardSampleLocations specifies whether rasterization uses the standard sample locations as documented in <>. If set to ename:VK_TRUE, the implementation uses the documented sample locations. If set to ename:VK_FALSE, the implementation may: use different sample locations. * [[limits-optimalBufferCopyOffsetAlignment]] pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset alignment in bytes for ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[] flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer. endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[] flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage, flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer. endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] The per texel alignment requirements are enforced, but applications should: use the optimal alignment for optimal performance and power use. The value must: be a power of two. * [[limits-optimalBufferCopyRowPitchAlignment]] pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch alignment in bytes for ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[] flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer. endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[] flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage, flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer. endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] Row pitch is the number of bytes between texels with the same X coordinate in adjacent rows (Y coordinates differ by one). The per texel alignment requirements are enforced, but applications should: use the optimal alignment for optimal performance and power use. The value must: be a power of two. * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and alignment in bytes that bounds concurrent access to <>. The value must: be a power of two. 1:: For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits defined above represent the minimum supported sample counts for each image type. Individual images may: support additional sample counts, which are queried using flink:vkGetPhysicalDeviceImageFormatProperties as described in <>. include::{generated}/validity/structs/VkPhysicalDeviceLimits.adoc[] -- [open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums'] -- Bits which may: be set in the sample count limits returned by slink:VkPhysicalDeviceLimits, as well as in other queries and structures representing image sample counts, are: include::{generated}/api/enums/VkSampleCountFlagBits.adoc[] * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per pixel. * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel. * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel. * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel. * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per pixel. * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per pixel. * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per pixel. -- [open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags'] -- include::{generated}/api/flags/VkSampleCountFlags.adoc[] tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or more elink:VkSampleCountFlagBits. -- ifdef::VK_KHR_push_descriptor[] [open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum number of descriptors that can: be used in a descriptor set created with ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set. :refpage: VkPhysicalDevicePushDescriptorPropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[] -- endif::VK_KHR_push_descriptor[] ifdef::VK_VERSION_1_1,VK_KHR_multiview[] [open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceMultiviewProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.adoc[] ifdef::VK_KHR_multiview[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.adoc[] endif::VK_KHR_multiview[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_multiview-properties[] * [[{anchor-prefix}limits-maxMultiviewViewCount]] pname:maxMultiviewViewCount is one greater than the maximum view index that can: be used in a subpass. * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]] pname:maxMultiviewInstanceIndex is the maximum valid value of instance index allowed to be generated by a drawing command recorded within a subpass of a multiview render pass instance. // end::VK_KHR_multiview-properties[] :refpage: VkPhysicalDeviceMultiviewProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.adoc[] -- endif::VK_VERSION_1_1,VK_KHR_multiview[] ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[] [open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR'] -- The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.adoc[] ifdef::VK_KHR_shader_float_controls[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.adoc[] endif::VK_KHR_shader_float_controls[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_shader_float_controls-properties[] * [[{anchor-prefix}features-denormBehaviorIndependence]] pname:denormBehaviorIndependence is a elink:VkShaderFloatControlsIndependence value indicating whether, and how, denorm behavior can be set independently for different bit widths. * [[{anchor-prefix}features-roundingModeIndependence]] pname:roundingModeIndependence is a elink:VkShaderFloatControlsIndependence value indicating whether, and how, rounding modes can be set independently for different bit widths. * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]] pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value indicating whether sign of a zero, [eq]##Nan##s and latexmath:[\pm\infty] can: be preserved in 16-bit floating-point computations. It also indicates whether the code:SignedZeroInfNanPreserve execution mode can: be used for 16-bit floating-point types. * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]] pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value indicating whether sign of a zero, [eq]##Nan##s and latexmath:[\pm\infty] can: be preserved in 32-bit floating-point computations. It also indicates whether the code:SignedZeroInfNanPreserve execution mode can: be used for 32-bit floating-point types. * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]] pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value indicating whether sign of a zero, [eq]##Nan##s and latexmath:[\pm\infty] can: be preserved in 64-bit floating-point computations. It also indicates whether the code:SignedZeroInfNanPreserve execution mode can: be used for 64-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]] pname:shaderDenormPreserveFloat16 is a boolean value indicating whether denormals can: be preserved in 16-bit floating-point computations. It also indicates whether the code:DenormPreserve execution mode can: be used for 16-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]] pname:shaderDenormPreserveFloat32 is a boolean value indicating whether denormals can: be preserved in 32-bit floating-point computations. It also indicates whether the code:DenormPreserve execution mode can: be used for 32-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]] pname:shaderDenormPreserveFloat64 is a boolean value indicating whether denormals can: be preserved in 64-bit floating-point computations. It also indicates whether the code:DenormPreserve execution mode can: be used for 64-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]] pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating whether denormals can: be flushed to zero in 16-bit floating-point computations. It also indicates whether the code:DenormFlushToZero execution mode can: be used for 16-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]] pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating whether denormals can: be flushed to zero in 32-bit floating-point computations. It also indicates whether the code:DenormFlushToZero execution mode can: be used for 32-bit floating-point types. * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]] pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating whether denormals can: be flushed to zero in 64-bit floating-point computations. It also indicates whether the code:DenormFlushToZero execution mode can: be used for 64-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]] pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 16-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTE execution mode can: be used for 16-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]] pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 32-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTE execution mode can: be used for 32-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]] pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 64-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTE execution mode can: be used for 64-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]] pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 16-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTZ execution mode can: be used for 16-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]] pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 32-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTZ execution mode can: be used for 32-bit floating-point types. * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]] pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 64-bit floating-point arithmetic and conversion instructions. It also indicates whether the code:RoundingModeRTZ execution mode can: be used for 64-bit floating-point types. // end::VK_KHR_shader_float_controls-properties[] ifdef::editing-notes[] [NOTE] .editing-note ==== Implementations may not be able to control behavior of denorms for floating-point atomics. This needs to be taken into account when such atomics will be added to Vulkan. ==== endif::editing-notes[] :refpage: VkPhysicalDeviceFloatControlsProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.adoc[] -- [open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR'] -- Values which may: be returned in the pname:denormBehaviorIndependence and pname:roundingModeIndependence fields of sname:VkPhysicalDeviceFloatControlsProperties are: include::{generated}/api/enums/VkShaderFloatControlsIndependence.adoc[] ifdef::VK_KHR_shader_float_controls[] or the equivalent include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.adoc[] endif::VK_KHR_shader_float_controls[] * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that shader float controls for 32-bit floating point can: be set independently; other bit widths must: be set identically to each other. * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader float controls for all bit widths can: be set independently. * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader float controls for all bit widths must: be set identically. -- endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[] ifdef::VK_EXT_discard_rectangles[] [open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the maximum number of active discard rectangles that can: be specified. :refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[] -- endif::VK_EXT_discard_rectangles[] ifdef::VK_EXT_sample_locations[] [open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts supporting custom sample locations. * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is the maximum size of the pixel grid in which sample locations can: vary that is supported for all sample counts in pname:sampleLocationSampleCounts. * [[limits-sampleLocationCoordinateRange]] pname:sampleLocationCoordinateRange[2] is the range of supported sample location coordinates. * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits is the number of bits of subpixel precision for sample locations. * [[limits-variableSampleLocations]] pname:variableSampleLocations specifies whether the sample locations used by all pipelines that will be bound to a command buffer during a subpass must: match. If set to ename:VK_TRUE, the implementation supports variable sample locations in a subpass. If set to ename:VK_FALSE, then the sample locations must: stay constant in each subpass. :refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[] -- endif::VK_EXT_sample_locations[] ifdef::VK_EXT_external_memory_host[] [open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-minImportedHostPointerAlignment]] pname:minImportedHostPointerAlignment is the minimum required: alignment, in bytes, for the base address and size of host pointers that can: be imported to a Vulkan memory object. The value must: be a power of two. :refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[] -- endif::VK_EXT_external_memory_host[] ifdef::VK_NVX_multiview_per_view_attributes[] [open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-perViewPositionAllComponents]] pname:perViewPositionAllComponents is ename:VK_TRUE if the implementation supports per-view position values that differ in components other than the X component. :refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[] -- endif::VK_NVX_multiview_per_view_attributes[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] [open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs'] -- The sname:VkPhysicalDevicePointClippingProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.adoc[] ifdef::VK_KHR_maintenance2[] or the equivalent include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.adoc[] endif::VK_KHR_maintenance2[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_maintenance2-properties[] * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a elink:VkPointClippingBehavior value specifying the point clipping behavior supported by the implementation. // end::VK_KHR_maintenance2-properties[] :refpage: VkPhysicalDevicePointClippingProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.adoc[] -- endif::VK_VERSION_1_1,VK_KHR_maintenance2[] ifdef::VK_VERSION_1_1[] [open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs'] -- The sname:VkPhysicalDeviceSubgroupProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_subgroup-properties[] * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the default number of invocations in each subgroup. pname:subgroupSize is at least 1 if any of the physical device's queues support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT. pname:subgroupSize is a power-of-two. * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield of elink:VkShaderStageFlagBits describing the shader stages that <> with <> are supported in. pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical device's queues support ename:VK_QUEUE_COMPUTE_BIT. * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of <> with <> supported on this device. pname:supportedOperations will have the ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical device's queues support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT. * [[limits-subgroup-quadOperationsInAllStages]] pname:quadOperationsInAllStages is a boolean specifying whether <> are available in all stages, or are restricted to fragment and compute stages. // end::VK_KHR_subgroup-properties[] :refpage: VkPhysicalDeviceSubgroupProperties include::{chapters}/limits.adoc[tag=limits_desc] If pname:supportedOperations includes <>, ifdef::VK_KHR_shader_subgroup_uniform_control_flow[] or <> is enabled, endif::VK_KHR_shader_subgroup_uniform_control_flow[] pname:subgroupSize must: be greater than or equal to 4. include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.adoc[] -- [open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums'] -- Bits which can: be set in slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations ifdef::VK_VERSION_1_2[] and slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations endif::VK_VERSION_1_2[] to specify supported <> with <> are: include::{generated}/api/enums/VkSubgroupFeatureFlagBits.adoc[] * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniform capability. * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformVote capability. * [[features-subgroup-arithmetic]] ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformArithmetic capability. * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformBallot capability. * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformShuffle capability. * [[features-subgroup-shuffle-relative]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformShuffleRelative capability. * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformClustered capability. * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformQuad capability. ifdef::VK_NV_shader_subgroup_partitioned[] * [[features-subgroup-partitioned]] ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will accept SPIR-V shader modules containing the code:GroupNonUniformPartitionedNV capability. endif::VK_NV_shader_subgroup_partitioned[] -- [open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags'] -- include::{generated}/api/flags/VkSubgroupFeatureFlags.adoc[] tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or more elink:VkSubgroupFeatureFlagBits. -- ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[] [open,refpage='VkPhysicalDeviceSubgroupSizeControlProperties',desc='Structure describing the control subgroup size properties of an implementation',type='structs',alias='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT'] -- The sname:VkPhysicalDeviceSubgroupSizeControlProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[] ifdef::VK_EXT_subgroup_size_control[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.adoc[] endif::VK_EXT_subgroup_size_control[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_3[:anchor-prefix: extension-] ifndef::VK_VERSION_1_3[:anchor-prefix:] // tag::VK_EXT_subgroup_size_control-properties[] * [[{anchor-prefix}limits-minSubgroupSize]] pname:minSubgroupSize is the minimum subgroup size supported by this device. pname:minSubgroupSize is at least one if any of the physical device's queues support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT. pname:minSubgroupSize is a power-of-two. pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize. pname:minSubgroupSize is less than or equal to <>. * [[{anchor-prefix}limits-maxSubgroupSize]] pname:maxSubgroupSize is the maximum subgroup size supported by this device. pname:maxSubgroupSize is at least one if any of the physical device's queues support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT. pname:maxSubgroupSize is a power-of-two. pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize. pname:maxSubgroupSize is greater than or equal to <>. * [[{anchor-prefix}limits-maxComputeWorkgroupSubgroups]] pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups supported by the implementation within a workgroup. * [[{anchor-prefix}limits-requiredSubgroupSizeStages]] pname:requiredSubgroupSizeStages is a bitfield of what shader stages support having a required subgroup size specified. // end::VK_EXT_subgroup_size_control-properties[] :refpage: VkPhysicalDeviceSubgroupSizeControlProperties include::{chapters}/limits.adoc[tag=limits_desc] If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations includes <>, pname:minSubgroupSize must: be greater than or equal to 4. include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[] -- endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[] endif::VK_VERSION_1_1[] ifdef::VK_EXT_blend_operation_advanced[] [open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-advancedBlendMaxColorAttachments]] pname:advancedBlendMaxColorAttachments is one greater than the highest color attachment index that can: be used in a subpass, for a pipeline that uses an <>. * [[limits-advancedBlendIndependentBlend]] pname:advancedBlendIndependentBlend specifies whether advanced blend operations can: vary per-attachment. * [[limits-advancedBlendNonPremultipliedSrcColor]] pname:advancedBlendNonPremultipliedSrcColor specifies whether the source color can: be treated as non-premultiplied. If this is ename:VK_FALSE, then slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied must: be ename:VK_TRUE. * [[limits-advancedBlendNonPremultipliedDstColor]] pname:advancedBlendNonPremultipliedDstColor specifies whether the destination color can: be treated as non-premultiplied. If this is ename:VK_FALSE, then slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied must: be ename:VK_TRUE. * [[limits-advancedBlendCorrelatedOverlap]] pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode can: be treated as correlated. If this is ename:VK_FALSE, then slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT. * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations specifies whether all advanced blend operation enums are supported. See the valid usage of slink:VkPipelineColorBlendAttachmentState. :refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[] -- endif::VK_EXT_blend_operation_advanced[] ifdef::VK_EXT_vertex_attribute_divisor[] [open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the maximum value of the number of instances that will repeat the value of vertex attribute data when instanced rendering is enabled. :refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[] -- endif::VK_EXT_vertex_attribute_divisor[] ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] [open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT'] -- The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[] ifdef::VK_EXT_sampler_filter_minmax[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.adoc[] endif::VK_EXT_sampler_filter_minmax[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_EXT_sampler_filter_minmax-properties[] * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]] pname:filterMinmaxSingleComponentFormats is a boolean value indicating whether a minimum set of required formats support min/max filtering. * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]] pname:filterMinmaxImageComponentMapping is a boolean value indicating whether the implementation supports non-identity component mapping of the image when doing min/max filtering. // end::VK_EXT_sampler_filter_minmax-properties[] :refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties include::{chapters}/limits.adoc[tag=limits_desc] [[limits-filterMinmaxSingleComponentFormats-minimum-requirements]] If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following formats must: support the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with ename:VK_IMAGE_TILING_OPTIMAL, if they support ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT: * ename:VK_FORMAT_R8_UNORM * ename:VK_FORMAT_R8_SNORM * ename:VK_FORMAT_R16_UNORM * ename:VK_FORMAT_R16_SNORM * ename:VK_FORMAT_R16_SFLOAT * ename:VK_FORMAT_R32_SFLOAT * ename:VK_FORMAT_D16_UNORM * ename:VK_FORMAT_X8_D24_UNORM_PACK32 * ename:VK_FORMAT_D32_SFLOAT * ename:VK_FORMAT_D16_UNORM_S8_UINT * ename:VK_FORMAT_D24_UNORM_S8_UINT * ename:VK_FORMAT_D32_SFLOAT_S8_UINT If the format is a depth/stencil format, this bit only specifies that the depth aspect (not the stencil aspect) of an image of this format supports min/max filtering, and that min/max filtering of the depth aspect is supported when depth compare is disabled in the sampler. If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component mapping of the image view used with min/max filtering must: have been created with the pname:r component set to the <>. Only the pname:r component of the sampled image value is defined and the other component values are undefined:. If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction does not apply and image component mapping works as normal. include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[] -- endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] ifdef::VK_VERSION_1_1[] [open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_protected_memory-properties[] * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault specifies how an implementation behaves when an application attempts to write to unprotected memory in a protected queue operation, read from protected memory in an unprotected queue operation, or perform a query in a protected queue operation. If this limit is ename:VK_TRUE, such writes will be discarded or have undefined: values written, reads and queries will return undefined: values. If this limit is ename:VK_FALSE, applications must: not perform these operations. See <> for more information. // end::VK_KHR_protected_memory-properties[] :refpage: VkPhysicalDeviceProtectedMemoryProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[] -- endif::VK_VERSION_1_1[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[] [open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs'] -- The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.adoc[] ifdef::VK_KHR_maintenance3[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.adoc[] endif::VK_KHR_maintenance3[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_maintenance3-properties[] * [[{anchor-prefix}limits-maxPerSetDescriptors]] pname:maxPerSetDescriptors is a maximum number of descriptors (summed over all descriptor types) in a single descriptor set that is guaranteed to satisfy any implementation-dependent constraints on the size of a descriptor set itself. Applications can: query whether a descriptor set that goes beyond this limit is supported using flink:vkGetDescriptorSetLayoutSupport. * [[{anchor-prefix}limits-maxMemoryAllocationSize]] pname:maxMemoryAllocationSize is the maximum size of a memory allocation that can: be created, even if there is more space available in the heap. // end::VK_KHR_maintenance3-properties[] :refpage: VkPhysicalDeviceMaintenance3Properties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.adoc[] -- endif::VK_VERSION_1_1,VK_KHR_maintenance3[] ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[] [open,refpage='VkPhysicalDeviceMaintenance4Properties',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs',alias='VkPhysicalDeviceMaintenance4PropertiesKHR'] -- The sname:VkPhysicalDeviceMaintenance4Properties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMaintenance4Properties.adoc[] ifdef::VK_KHR_maintenance4[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.adoc[] endif::VK_KHR_maintenance4[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_3[:anchor-prefix: extension-] ifndef::VK_VERSION_1_3[:anchor-prefix:] // tag::VK_KHR_maintenance4-properties[] * [[{anchor-prefix}limits-maxBufferSize]] pname:maxBufferSize is the maximum size sname:VkBuffer that can: be created. // end::VK_KHR_maintenance4-properties[] :refpage: VkPhysicalDeviceMaintenance4Properties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4Properties.adoc[] -- endif::VK_VERSION_1_3,VK_KHR_maintenance4[] ifdef::VK_NV_mesh_shader[] [open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs'] -- The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:maxDrawMeshTasksCount is the maximum number of local workgroups that can: be launched by a single draw mesh tasks command. See <>. * pname:maxTaskWorkGroupInvocations is the maximum total number of task shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode in shader modules or by the object decorated by the code:WorkgroupSize decoration, must: be less than or equal to this limit. * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task workgroup. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode or by the object decorated by the code:WorkgroupSize decoration in shader modules, must: be less than or equal to the corresponding limit. * pname:maxTaskTotalMemorySize is the maximum number of bytes that the task shader can use in total for shared and output memory combined. * pname:maxTaskOutputCount is the maximum number of output tasks a single task shader workgroup can emit. * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode in shader modules or by the object decorated by the code:WorkgroupSize decoration, must: be less than or equal to this limit. * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh workgroup. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes, as specified by the code:LocalSize ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId] execution mode or by the object decorated by the code:WorkgroupSize decoration in shader modules, must: be less than or equal to the corresponding limit. * pname:maxMeshTotalMemorySize is the maximum number of bytes that the mesh shader can use in total for shared and output memory combined. * pname:maxMeshOutputVertices is the maximum number of vertices a mesh shader output can store. * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh shader output can store. * pname:maxMeshMultiviewViewCount is the maximum number of multiview views a mesh shader can use. * pname:meshOutputPerVertexGranularity is the granularity with which mesh vertex outputs are allocated. The value can be used to compute the memory size used by the mesh shader, which must be less than or equal to pname:maxMeshTotalMemorySize. * pname:meshOutputPerPrimitiveGranularity is the granularity with which mesh outputs qualified as per-primitive are allocated. The value can be used to compute the memory size used by the mesh shader, which must be less than or equal to pname:maxMeshTotalMemorySize. :refpage: VkPhysicalDeviceMeshShaderPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[] -- endif::VK_NV_mesh_shader[] ifdef::VK_EXT_mesh_shader[] [open,refpage='VkPhysicalDeviceMeshShaderPropertiesEXT',desc='Structure describing mesh shading properties',type='structs'] -- The sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[] The members of the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure describe the following implementation-dependent limits: * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxTaskWorkGroupTotalCount]] pname:maxTaskWorkGroupTotalCount is the maximum number of total local workgroups that can: be launched by a single mesh tasks drawing command. See <>. * [[limits-maxTaskWorkGroupCount]] pname:maxTaskWorkGroupCount[3] is the maximum number of local workgroups that can: be launched by a single mesh tasks drawing command. These three values represent the maximum number of local workgroups for the X, Y, and Z dimensions, respectively. The workgroup count parameters to the drawing commands must: be less than or equal to the corresponding limit. The product of these dimensions must: be less than or equal to pname:maxTaskWorkGroupTotalCount. * [[limits-maxTaskWorkGroupInvocations]] pname:maxTaskWorkGroupInvocations is the maximum total number of task shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the code:LocalSize ifdef::VK_KHR_maintenance4[or code:LocalSizeId] execution mode in shader modules or by the object decorated by the code:WorkgroupSize decoration, must: be less than or equal to this limit. * [[limits-maxTaskWorkGroupSize]] pname:maxTaskWorkGroupSize[3] is the maximum size of a local task workgroup, per dimension. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes, as specified by the code:LocalSize ifdef::VK_KHR_maintenance4[or code:LocalSizeId] execution mode or by the object decorated by the code:WorkgroupSize decoration in shader modules, must: be less than or equal to the corresponding limit. * [[limits-maxTaskPayloadSize]] pname:maxTaskPayloadSize is the maximum total storage size, in bytes, available for variables declared with the code:TaskPayloadWorkgroupEXT storage class in shader modules in the task shader stage. * [[limits-maxTaskSharedMemorySize]] pname:maxTaskSharedMemorySize is the maximum total storage size, in bytes, available for variables declared with the code:Workgroup storage class in shader modules in the task shader stage. * [[limits-maxTaskPayloadAndSharedMemorySize]] pname:maxTaskPayloadAndSharedMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the code:TaskPayloadWorkgroupEXT or code:Workgroup storage class, in shader modules in the task shader stage. * [[limits-maxMeshWorkGroupTotalCount]] pname:maxMeshWorkGroupTotalCount is the maximum number of local output tasks a single task shader workgroup can emit. * [[limits-maxMeshWorkGroupCount]] pname:maxMeshWorkGroupCount[3] is the maximum number of local output tasks a single task shader workgroup can emit, per dimension. These three values represent the maximum number of local output tasks for the X, Y, and Z dimensions, respectively. The workgroup count parameters to the code:OpEmitMeshTasksEXT must: be less than or equal to the corresponding limit. The product of these dimensions must: be less than or equal to pname:maxMeshWorkGroupTotalCount. * [[limits-maxMeshWorkGroupInvocations]] pname:maxMeshWorkGroupInvocations is the maximum total number of mesh shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the code:LocalSize ifdef::VK_KHR_maintenance4[or code:LocalSizeId] execution mode in shader modules or by the object decorated by the code:WorkgroupSize decoration, must: be less than or equal to this limit. * [[limits-maxMeshWorkGroupSize]] pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh workgroup, per dimension. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes, as specified by the code:LocalSize ifdef::VK_KHR_maintenance4[or code:LocalSizeId] execution mode or by the object decorated by the code:WorkgroupSize decoration in shader modules, must: be less than or equal to the corresponding limit. * [[limits-maxMeshSharedMemorySize]] pname:maxMeshSharedMemorySize is the maximum total storage size, in bytes, available for variables declared with the code:Workgroup storage class in shader modules in the mesh shader stage. * [[limits-maxMeshPayloadAndSharedMemorySize]] pname:maxMeshPayloadAndSharedMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the code:TaskPayloadWorkgroupEXT or code:Workgroup storage class in shader modules in the mesh shader stage. * [[limits-maxMeshOutputMemorySize]] pname:maxMeshOutputMemorySize is the maximum total storage size, in bytes, available for output variables in shader modules in the mesh shader stage, according to the formula in <>. * [[limits-maxMeshPayloadAndOutputMemorySize]] pname:maxMeshPayloadAndOutputMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the code:TaskPayloadWorkgroupEXT storage class, or output variables in shader modules in the mesh shader stage, according to the formula in <>. * [[limits-maxMeshOutputComponents]] pname:maxMeshOutputComponents is the maximum number of components of output variables which can: be output from the mesh shader stage. * [[limits-maxMeshOutputVertices]] pname:maxMeshOutputVertices is the maximum number of vertices which can: be emitted by a single mesh shader workgroup. * [[limits-maxMeshOutputPrimitives]] pname:maxMeshOutputPrimitives is the maximum number of primitives which can: be emitted by a single mesh shader workgroup. * [[limits-maxMeshOutputLayers]] pname:maxMeshOutputLayers is one greater than the maximum layer index that can: be output from the mesh shader stage. * [[limits-maxMeshMultiviewViewCount]] pname:maxMeshMultiviewViewCount is one greater than the maximum view index that can: be used by any mesh shader. * [[limits-meshOutputPerVertexGranularity]] pname:meshOutputPerVertexGranularity is the granularity of vertex allocation. The number of output vertices allocated for the mesh shader stage is padded to a multiple of this number. The value can be used to calculate the required storage size for output variables in shader modules in the mesh shader stage, which must: be less than or equal to pname:maxMeshOutputMemorySize. * [[limits-meshOutputPerPrimitiveGranularity]] pname:meshOutputPerPrimitiveGranularity is the granularity of primitive allocation. The number of output primitives allocated for the mesh shader stage is padded to a multiple of this number. The value can be used to calculate the required storage size for output variables in shader modules in the mesh shader stage, which must: be less than or equal to pname:maxMeshOutputMemorySize. * [[limits-maxPreferredTaskWorkGroupInvocations]] pname:maxPreferredTaskWorkGroupInvocations is the maximum number of task shader invocations in a single workgroup that is preferred by the implementation for optimal performance. The value is guaranteed to be a multiple of a supported subgroup size for the task shader stage. * [[limits-maxPreferredMeshWorkGroupInvocations]] pname:maxPreferredMeshWorkGroupInvocations is the maximum number of mesh shader invocations in a single workgroup that is preferred by the implementation for optimal performance. The value is guaranteed to be a multiple of a supported subgroup size for the mesh shader stage. * [[limits-prefersLocalInvocationVertexOutput]] pname:prefersLocalInvocationVertexOutput specifies whether writes to the vertex output array in a mesh shader yield best performance when the array index matches code:LocalInvocationIndex. * [[limits-prefersLocalInvocationPrimitiveOutput]] pname:prefersLocalInvocationPrimitiveOutput specifies whether writes to the primitive output array in a mesh shader yield best performance when the array index matches code:LocalInvocationIndex. * [[limits-prefersCompactVertexOutput]] pname:prefersCompactVertexOutput specifies whether output vertices should be compacted after custom culling in the mesh shader for best performance, otherwise keeping the vertices at their original location may be better. * [[limits-prefersCompactPrimitiveOutput]] pname:prefersCompactPrimitiveOutput specifies whether output primitives should be compacted after custom culling in the mesh shader for best performance, otherwise the use of code:CullPrimitiveEXT may be better. If the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled with the implementation-dependent limits. include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[] -- endif::VK_EXT_mesh_shader[] ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] [open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT'] -- The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[] ifdef::VK_EXT_descriptor_indexing[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.adoc[] endif::VK_EXT_descriptor_indexing[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_EXT_descriptor_indexing-properties[] * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]] pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of descriptors (summed over all descriptor types) that can: be created across all pools that are created with the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set. Pool creation may: fail when this limit is exceeded, or when the space this limit represents is unable to satisfy a pool creation due to fragmentation. * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]] pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean value indicating whether uniform buffer descriptors natively support nonuniform indexing. If this is ename:VK_FALSE, then a single dynamic instance of an instruction that nonuniformly indexes an array of uniform buffers may: execute multiple times in order to access all the descriptors. * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]] pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value indicating whether sampler and image descriptors natively support nonuniform indexing. If this is ename:VK_FALSE, then a single dynamic instance of an instruction that nonuniformly indexes an array of samplers or images may: execute multiple times in order to access all the descriptors. * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]] pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean value indicating whether storage buffer descriptors natively support nonuniform indexing. If this is ename:VK_FALSE, then a single dynamic instance of an instruction that nonuniformly indexes an array of storage buffers may: execute multiple times in order to access all the descriptors. * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]] pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value indicating whether storage image descriptors natively support nonuniform indexing. If this is ename:VK_FALSE, then a single dynamic instance of an instruction that nonuniformly indexes an array of storage images may: execute multiple times in order to access all the descriptors. * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]] pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean value indicating whether input attachment descriptors natively support nonuniform indexing. If this is ename:VK_FALSE, then a single dynamic instance of an instruction that nonuniformly indexes an array of input attachments may: execute multiple times in order to access all the descriptors. * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]] pname:robustBufferAccessUpdateAfterBind is a boolean value indicating whether <> can: be enabled on a device simultaneously with pname:descriptorBindingUniformBufferUpdateAfterBind, pname:descriptorBindingStorageBufferUpdateAfterBind, pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or pname:descriptorBindingStorageTexelBufferUpdateAfterBind. If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be disabled or all of these update-after-bind features must: be disabled. * [[{anchor-prefix}limits-quadDivergentImplicitLod]] pname:quadDivergentImplicitLod is a boolean value indicating whether implicit level of detail calculations for image operations have well-defined results when the image and/or sampler objects used for the instruction are not uniform within a quad. See <>. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]] pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to pname:maxPerStageDescriptorSamplers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]] pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to pname:maxPerStageDescriptorUniformBuffers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]] pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to pname:maxPerStageDescriptorStorageBuffers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]] pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to pname:maxPerStageDescriptorSampledImages but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]] pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to pname:maxPerStageDescriptorStorageImages but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]] pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to pname:maxPerStageDescriptorInputAttachments but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]] pname:maxPerStageUpdateAfterBindResources is similar to pname:maxPerStageResources but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]] pname:maxDescriptorSetUpdateAfterBindSamplers is similar to pname:maxDescriptorSetSamplers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]] pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to pname:maxDescriptorSetUniformBuffers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]] pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. While an application can: allocate dynamic uniform buffer descriptors from a pool created with the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, bindings for these descriptors must: not be present in any descriptor set layout that includes bindings created with ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]] pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to pname:maxDescriptorSetStorageBuffers but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]] pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. While an application can: allocate dynamic storage buffer descriptors from a pool created with the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, bindings for these descriptors must: not be present in any descriptor set layout that includes bindings created with ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]] pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to pname:maxDescriptorSetSampledImages but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]] pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to pname:maxDescriptorSetStorageImages but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]] pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to pname:maxDescriptorSetInputAttachments but counts descriptors from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. // end::VK_EXT_descriptor_indexing-properties[] :refpage: VkPhysicalDeviceDescriptorIndexingProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[] -- endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] [open,refpage='VkPhysicalDeviceInlineUniformBlockProperties',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceInlineUniformBlockPropertiesEXT'] -- The sname:VkPhysicalDeviceInlineUniformBlockProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[] ifdef::VK_EXT_inline_uniform_block[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.adoc[] endif::VK_EXT_inline_uniform_block[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_3[:anchor-prefix: extension-] ifndef::VK_VERSION_1_3[:anchor-prefix:] // tag::VK_EXT_inline_uniform_block-properties[] * [[{anchor-prefix}limits-maxInlineUniformBlockSize]] pname:maxInlineUniformBlockSize is the maximum size in bytes of an <> binding. * [[{anchor-prefix}limits-maxPerStageDescriptorInlineUniformBlocks]] pname:maxPerStageDescriptorInlineUniformBlock is the maximum number of inline uniform block bindings that can: be accessible to a single shader stage in a pipeline layout. Descriptor bindings with a descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptor bindings in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]] pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved for future use. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts descriptor bindings from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] * [[{anchor-prefix}limits-maxDescriptorSetInlineUniformBlocks]] pname:maxDescriptorSetInlineUniformBlocks is the maximum number of inline uniform block bindings that can: be included in descriptor bindings in a pipeline layout across all pipeline shader stages and descriptor set numbers. Descriptor bindings with a descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit. ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] Only descriptor bindings in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]] pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for future use. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] is similar to pname:maxDescriptorSetInlineUniformBlocks but counts descriptor bindings from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] // end::VK_EXT_inline_uniform_block-properties[] :refpage: VkPhysicalDeviceInlineUniformBlockProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[] -- endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] ifdef::VK_EXT_conservative_rasterization[] [open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize is the size in pixels the generating primitive is increased at each of its edges during conservative rasterization overestimation mode. Even with a size of 0.0, conservative rasterization overestimation rules still apply and if any part of the pixel rectangle is covered by the generating primitive, fragments are generated for the entire pixel. However implementations may: make the pixel coverage area even more conservative by increasing the size of the generating primitive. * [[limits-maxExtraPrimitiveOverestimationSize]] pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels of extra overestimation the implementation supports in the pipeline state. A value of 0.0 means the implementation does not support any additional overestimation of the generating primitive during conservative rasterization. A value above 0.0 allows the application to further increase the size of the generating primitive during conservative rasterization overestimation. * [[limits-extraPrimitiveOverestimationSizeGranularity]] pname:extraPrimitiveOverestimationSizeGranularity is the granularity of extra overestimation that can be specified in the pipeline state between 0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive. A value of 0.0 means the implementation can use the smallest representable non-zero value in the screen space pixel fixed-point grid. * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is ename:VK_TRUE if the implementation supports the ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative rasterization mode in addition to ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT. Otherwise the implementation only supports ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT. * [[limits-conservativePointAndLineRasterization]] pname:conservativePointAndLineRasterization is ename:VK_TRUE if the implementation supports conservative rasterization of point and line primitives as well as triangle primitives. Otherwise the implementation only supports triangle primitives. * [[limits-degenerateTrianglesRasterized]] pname:degenerateTrianglesRasterized is ename:VK_FALSE if the implementation culls primitives generated from triangles that become zero area after they are quantized to the fixed-point rasterization pixel grid. pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives are not culled and the provoking vertex attributes and depth value are used for the fragments. The primitive area calculation is done on the primitive generated from the clipped triangle if applicable. Zero area primitives are backfacing and the application can: enable backface culling if desired. * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is ename:VK_FALSE if the implementation culls lines that become zero length after they are quantized to the fixed-point rasterization pixel grid. pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines are not culled and the provoking vertex attributes and depth value are used for the fragments. * [[limits-fullyCoveredFragmentShaderInputVariable]] pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the implementation supports the SPIR-V builtin fragment shader input variable code:FullyCoveredEXT specifying that conservative rasterization is enabled and the fragment area is fully covered by the generating primitive. * [[limits-conservativeRasterizationPostDepthCoverage]] ifdef::VK_EXT_post_depth_coverage[] pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the implementation supports conservative rasterization with the code:PostDepthCoverage execution mode enabled. Otherwise the code:PostDepthCoverage execution mode must: not be used when conservative rasterization is enabled. endif::VK_EXT_post_depth_coverage[] ifndef::VK_EXT_post_depth_coverage[] pname:conservativeRasterizationPostDepthCoverage must: be ename:VK_FALSE. endif::VK_EXT_post_depth_coverage[] :refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[] -- endif::VK_EXT_conservative_rasterization[] ifdef::VK_EXT_fragment_density_map[] [open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-minFragmentDensityTexelSize]] pname:minFragmentDensityTexelSize is the minimum <>. * [[limits-maxFragmentDensityTexelSize]] pname:maxFragmentDensityTexelSize is the maximum fragment density texel size. * [[limits-fragmentDensityInvocations]] pname:fragmentDensityInvocations specifies whether the implementation may: invoke additional fragment shader invocations for each covered sample. :refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[] -- ifdef::VK_EXT_fragment_density_map2[] [open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing image data read with load operations on subsampled attachments will be resampled to the fragment density of the render pass * [[limits-subsampledCoarseReconstructionEarlyAccess]] pname:subsampledCoarseReconstructionEarlyAccess specifies if performing image data read with samplers created with pname:flags containing ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in fragment shader will trigger additional reads during ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is the maximum number of slink:VkImageView array layers for usages supporting subsampled samplers * [[limits-maxDescriptorSetSubsampledSamplers]] pname:maxDescriptorSetSubsampledSamplers is the maximum number of subsampled samplers that can: be included in a slink:VkPipelineLayout :refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[] -- endif::VK_EXT_fragment_density_map2[] ifdef::VK_QCOM_fragment_density_map_offset[] [open,refpage='VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM',desc='Structure describing fragment density map offset properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-fragmentdensityoffsetgranularity]] pname:fragmentDensityOffsetGranularity is the granularity for <>. :refpage: VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[] -- endif::VK_QCOM_fragment_density_map_offset[] endif::VK_EXT_fragment_density_map[] ifdef::VK_AMD_shader_core_properties[] [open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned integer value indicating the number of shader engines found inside the shader core of the physical device. * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount is an unsigned integer value indicating the number of shader arrays inside a shader engine. Each shader array has its own scan converter, set of compute units, and a render back end (color and depth attachments). Shader arrays within a shader engine share shader processor input (wave launcher) and shader export (export buffer) units. Currently, a shader engine can have one or two shader arrays. * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray is an unsigned integer value indicating the physical number of compute units within a shader array. The active number of compute units in a shader array may: be lower. A compute unit houses a set of SIMDs along with a sequencer module and a local data store. * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned integer value indicating the number of SIMDs inside a compute unit. Each SIMD processes a single instruction at a time. * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer value indicating the maximum size of a subgroup. * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value indicating the number of physical Scalar General Purpose Registers (SGPRs) per SIMD. * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned integer value indicating the minimum number of SGPRs allocated for a wave. * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned integer value indicating the maximum number of SGPRs allocated for a wave. * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is an unsigned integer value indicating the granularity of SGPR allocation for a wave. * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value indicating the number of physical Vector General Purpose Registers (VGPRs) per SIMD. * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned integer value indicating the minimum number of VGPRs allocated for a wave. * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned integer value indicating the maximum number of VGPRs allocated for a wave. * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is an unsigned integer value indicating the granularity of VGPR allocation for a wave. :refpage: VkPhysicalDeviceShaderCorePropertiesAMD include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[] -- endif::VK_AMD_shader_core_properties[] ifdef::VK_AMD_shader_core_properties2[] [open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features supported by the shader core. * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an unsigned integer value indicating the number of compute units that have been enabled. :refpage: VkPhysicalDeviceShaderCoreProperties2AMD include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[] -- [open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD'] -- Bits for this type may: be defined by future extensions, or new versions of the `apiext:VK_AMD_shader_core_properties2` extension. Possible values of the pname:flags member of tlink:VkShaderCorePropertiesFlagsAMD are: include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.adoc[] -- [open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD'] -- include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.adoc[] tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or more elink:VkShaderCorePropertiesFlagBitsAMD. -- endif::VK_AMD_shader_core_properties2[] ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[] [open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR'] -- The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[] ifdef::VK_KHR_depth_stencil_resolve[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.adoc[] endif::VK_KHR_depth_stencil_resolve[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_depth_stencil_resolve-properties[] * [[{anchor-prefix}features-depthResolveModes]] pname:supportedDepthResolveModes is a bitmask of elink:VkResolveModeFlagBits indicating the set of supported depth resolve modes. ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but implementations may: support additional modes. * [[{anchor-prefix}features-stencilResolveModes]] pname:supportedStencilResolveModes is a bitmask of elink:VkResolveModeFlagBits indicating the set of supported stencil resolve modes. ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but implementations may: support additional modes. ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set. * [[{anchor-prefix}features-independentResolveNone]] pname:independentResolveNone is ename:VK_TRUE if the implementation supports setting the depth and stencil resolve modes to different values when one of those modes is ename:VK_RESOLVE_MODE_NONE. Otherwise the implementation only supports setting both modes to the same value. * [[{anchor-prefix}features-independentResolve]] pname:independentResolve is ename:VK_TRUE if the implementation supports all combinations of the supported depth and stencil resolve modes, including setting either depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE. An implementation that supports pname:independentResolve must: also support pname:independentResolveNone. // end::VK_KHR_depth_stencil_resolve-properties[] :refpage: VkPhysicalDeviceDepthStencilResolveProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[] -- endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[] ifdef::VK_KHR_performance_query[] include::{chapters}/VK_KHR_performance_query/props.adoc[] endif::VK_KHR_performance_query[] ifdef::VK_NV_shading_rate_image[] [open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-shadingRateTexelSize]] pname:shadingRateTexelSize indicates the width and height of the portion of the framebuffer corresponding to each texel in the shading rate image. * [[limits-shadingRatePaletteSize]] pname:shadingRatePaletteSize indicates the maximum number of palette entries supported for the shading rate image. * [[limits-shadingRateMaxCoarseSamples]] pname:shadingRateMaxCoarseSamples specifies the maximum number of coverage samples supported in a single fragment. If the product of the fragment size derived from the base shading rate and the number of coverage samples per pixel exceeds this limit, the final shading rate will be adjusted so that its product does not exceed the limit. :refpage: VkPhysicalDeviceShadingRateImagePropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] These properties are related to the <> feature. include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[] -- endif::VK_NV_shading_rate_image[] ifdef::VK_NV_memory_decompression[] [open,refpage='VkPhysicalDeviceMemoryDecompressionPropertiesNV',desc='Structure describing supported memory decompression methods by an implementation',type='structs'] -- The sname:VkPhysicalDeviceMemoryDecompressionPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:decompressionMethods is a bitmask of elink:VkMemoryDecompressionMethodFlagBitsNV specifying memory decompression methods supported by the implementation. * pname:maxDecompressionIndirectCount specifies the maximum supported count value in the pname:countBuffer of flink:vkCmdDecompressMemoryIndirectCountNV :refpage: VkPhysicalDeviceMemoryDecompressionPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[] -- endif::VK_NV_memory_decompression[] ifdef::VK_EXT_transform_feedback[] [open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams is the maximum number of vertex streams that can be output from geometry shaders declared with the code:GeometryStreams capability. If the implementation does not support sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams then pname:maxTransformFeedbackStreams must: be set to `1`. * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers is the maximum number of transform feedback buffers that can be bound for capturing shader outputs from the last <>. * [[limits-maxTransformFeedbackBufferSize]] pname:maxTransformFeedbackBufferSize is the maximum size that can be specified when binding a buffer for transform feedback in flink:vkCmdBindTransformFeedbackBuffersEXT. * [[limits-maxTransformFeedbackStreamDataSize]] pname:maxTransformFeedbackStreamDataSize is the maximum amount of data in bytes for each vertex that captured to one or more transform feedback buffers associated with a specific vertex stream. * [[limits-maxTransformFeedbackBufferDataSize]] pname:maxTransformFeedbackBufferDataSize is the maximum amount of data in bytes for each vertex that can be captured to a specific transform feedback buffer. * [[limits-maxTransformFeedbackBufferDataStride]] pname:maxTransformFeedbackBufferDataStride is the maximum stride between each capture of vertex data to the buffer. * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is ename:VK_TRUE if the implementation supports the ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type. pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type cannot: be created. * [[limits-transformFeedbackStreamsLinesTriangles]] pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the implementation supports the geometry shader code:OpExecutionMode of code:OutputLineStrip and code:OutputTriangleStrip in addition to code:OutputPoints when more than one vertex stream is output. If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the implementation only supports an code:OpExecutionMode of code:OutputPoints when more than one vertex stream is output from the geometry shader. * [[limits-transformFeedbackRasterizationStreamSelect]] pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the implementation supports the code:GeometryStreams SPIR-V capability and the application can use slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which vertex stream output is used for rasterization. Otherwise vertex stream `0` must: always be used for rasterization. * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is ename:VK_TRUE if the implementation supports the flink:vkCmdDrawIndirectByteCountEXT function otherwise the function must: not be called. :refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[] -- endif::VK_EXT_transform_feedback[] ifdef::VK_NV_copy_memory_indirect[] [open,refpage='VkPhysicalDeviceCopyMemoryIndirectPropertiesNV',desc='Structure describing supported queues for indirect copy',type='structs'] -- The sname:VkPhysicalDeviceCopyMemoryIndirectPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:supportedQueues is a bitmask of elink:VkQueueFlagBits indicating the queues on which <> are supported. If the <> feature is supported, pname:supportedQueues must: return at least one supported queue. :refpage: VkPhysicalDeviceCopyMemoryIndirectPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[] -- endif::VK_NV_copy_memory_indirect[] ifdef::VK_NV_ray_tracing[] [open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs'] -- The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:shaderGroupHandleSize is the size in bytes of the shader header. * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum number of levels of recursion allowed in a trace command. * pname:maxShaderGroupStride is the maximum stride in bytes allowed between shader groups in the shader binding table. * pname:shaderGroupBaseAlignment is the required: alignment in bytes for the base of the shader binding table. * pname:maxGeometryCount is the maximum number of geometries in the bottom level acceleration structure. * pname:maxInstanceCount is the maximum number of instances in the top level acceleration structure. * pname:maxTriangleCount is the maximum number of triangles in all geometries in the bottom level acceleration structure. * pname:maxDescriptorSetAccelerationStructures is the maximum number of acceleration structure descriptors that are allowed in a descriptor set. Due to the fact that the geometry, instance, and triangle counts are specified at acceleration structure creation as 32-bit values, pname:maxGeometryCount, pname:maxInstanceCount, and pname:maxTriangleCount must: not exceed [eq]#2^32^-1#. :refpage: VkPhysicalDeviceRayTracingPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] ifdef::VK_KHR_ray_tracing_pipeline[] Limits specified by this structure must: match those specified with the same name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR. endif::VK_KHR_ray_tracing_pipeline[] include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[] -- endif::VK_NV_ray_tracing[] ifdef::VK_KHR_acceleration_structure[] [open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs'] -- The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxGeometryCount]] pname:maxGeometryCount is the maximum number of geometries in the bottom level acceleration structure. * [[limits-maxInstanceCount]] pname:maxInstanceCount is the maximum number of instances in the top level acceleration structure. * [[limits-maxPrimitiveCount]] pname:maxPrimitiveCount is the maximum number of triangles or AABBs in all geometries in the bottom level acceleration structure. * [[limits-maxPerStageDescriptorAccelerationStructures]] pname:maxPerStageDescriptorAccelerationStructures is the maximum number of acceleration structure bindings that can: be accessible to a single shader stage in a pipeline layout. Descriptor bindings with a descriptor type of ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this limit. Only descriptor bindings in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]] pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is similar to pname:maxPerStageDescriptorAccelerationStructures but counts descriptor bindings from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[limits-maxDescriptorSetAccelerationStructures]] pname:maxDescriptorSetAccelerationStructures is the maximum number of acceleration structure descriptors that can: be included in descriptor bindings in a pipeline layout across all pipeline shader stages and descriptor set numbers. Descriptor bindings with a descriptor type of ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this limit. Only descriptor bindings in descriptor set layouts created without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set count against this limit. * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]] pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar to pname:maxDescriptorSetAccelerationStructures but counts descriptor bindings from descriptor sets created with or without the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set. * [[limits-minAccelerationStructureScratchOffsetAlignment]] pname:minAccelerationStructureScratchOffsetAlignment is the minimum required: alignment, in bytes, for scratch data passed in to an acceleration structure build command. The value must: be a power of two. Due to the fact that the geometry, instance, and primitive counts are specified at acceleration structure creation as 32-bit values, <>, <>, and <> must: not exceed [eq]#2^32^-1#. :refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] ifdef::VK_NV_ray_tracing[] Limits specified by this structure must: match those specified with the same name in slink:VkPhysicalDeviceRayTracingPropertiesNV. endif::VK_NV_ray_tracing[] include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[] -- endif::VK_KHR_acceleration_structure[] ifdef::VK_KHR_ray_tracing_pipeline[] [open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs'] -- The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:shaderGroupHandleSize is the size in bytes of the shader header. * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the maximum number of levels of ray recursion allowed in a trace command. * pname:maxShaderGroupStride is the maximum stride in bytes allowed between shader groups in the shader binding table. * pname:shaderGroupBaseAlignment is the required: alignment in bytes for the base of the shader binding table. * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the information required to do capture and replay for shader group handles. * pname:maxRayDispatchInvocationCount is the maximum number of ray generation shader invocations which may: be produced by a single flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command. * pname:shaderGroupHandleAlignment is the required: alignment in bytes for each shader binding table entry. The value must: be a power of two. * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray attribute structure :refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] ifdef::VK_NV_ray_tracing[] Limits specified by this structure must: match those specified with the same name in slink:VkPhysicalDeviceRayTracingPropertiesNV. endif::VK_NV_ray_tracing[] include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[] -- endif::VK_KHR_ray_tracing_pipeline[] ifdef::VK_NV_cooperative_matrix[] [open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-cooperativeMatrixSupportedStages]] pname:cooperativeMatrixSupportedStages is a bitfield of elink:VkShaderStageFlagBits describing the shader stages that cooperative matrix instructions are supported in. pname:cooperativeMatrixSupportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical device's queues support ename:VK_QUEUE_COMPUTE_BIT. :refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[] -- endif::VK_NV_cooperative_matrix[] ifdef::VK_NV_shader_sm_builtins[] [open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the device. * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number of simultaneously executing warps on an SM. :refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[] -- endif::VK_NV_shader_sm_builtins[] ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[] [open,refpage='VkPhysicalDeviceTexelBufferAlignmentProperties',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs',alias='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT'] -- The sname:VkPhysicalDeviceTexelBufferAlignmentProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[] ifdef::VK_EXT_texel_buffer_alignment[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.adoc[] endif::VK_EXT_texel_buffer_alignment[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_3[:anchor-prefix: extension-] ifndef::VK_VERSION_1_3[:anchor-prefix:] // tag::VK_EXT_texel_buffer_alignment-properties[] * [[{anchor-prefix}limits-storageTexelBufferOffsetAlignmentBytes]] pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is sufficient for a storage texel buffer of any format. The value must: be a power of two. * [[{anchor-prefix}limits-storageTexelBufferOffsetSingleTexelAlignment]] pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether single texel alignment is sufficient for a storage texel buffer of any format. * [[{anchor-prefix}limits-uniformTexelBufferOffsetAlignmentBytes]] pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is sufficient for a uniform texel buffer of any format. The value must: be a power of two. * [[{anchor-prefix}limits-uniformTexelBufferOffsetSingleTexelAlignment]] pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether single texel alignment is sufficient for a uniform texel buffer of any format. // end::VK_EXT_texel_buffer_alignment-properties[] :refpage: VkPhysicalDeviceTexelBufferAlignmentProperties include::{chapters}/limits.adoc[tag=limits_desc] If the single texel alignment property is ename:VK_FALSE, then the buffer view's offset must: be aligned to the corresponding byte alignment value. If the single texel alignment property is ename:VK_TRUE, then the buffer view's offset must: be aligned to the lesser of the corresponding byte alignment value or the size of a single texel, based on slink:VkBufferViewCreateInfo::pname:format. If the size of a single texel is a multiple of three bytes, then the size of a single component of the format is used instead. These limits must: not advertise a larger alignment than the <> maximum minimum value of slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any format that supports use as a texel buffer. include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[] -- endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[] ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] [open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR'] -- The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[] ifdef::VK_KHR_timeline_semaphore[] or the equivalent include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.adoc[] endif::VK_KHR_timeline_semaphore[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. // Must have preceding whitespace ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] ifndef::VK_VERSION_1_2[:anchor-prefix:] // tag::VK_KHR_timeline_semaphore-properties[] * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]] pname:maxTimelineSemaphoreValueDifference indicates the maximum difference allowed by the implementation between the current value of a timeline semaphore and any pending signal or wait operations. // end::VK_KHR_timeline_semaphore-properties[] :refpage: VkPhysicalDeviceTimelineSemaphoreProperties include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[] -- endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] ifdef::VK_EXT_line_rasterization[] [open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is the number of bits of subpixel precision in framebuffer coordinates [eq]#x~f~# and [eq]#y~f~# when rasterizing <>. :refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[] -- endif::VK_EXT_line_rasterization[] ifdef::VK_EXT_robustness2[] [open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-robustStorageBufferAccessSizeAlignment]] pname:robustStorageBufferAccessSizeAlignment is the number of bytes that the range of a storage buffer descriptor is rounded up to when used for bounds-checking when the <> feature is enabled. This value must: be either 1 or 4. * [[limits-robustUniformBufferAccessSizeAlignment]] pname:robustUniformBufferAccessSizeAlignment is the number of bytes that the range of a uniform buffer descriptor is rounded up to when used for bounds-checking when the <> feature is enabled. This value must: be a power of two in the range [1, 256]. :refpage: VkPhysicalDeviceRobustness2PropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[] -- endif::VK_EXT_robustness2[] ifdef::VK_NV_device_generated_commands[] [open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV. * pname:maxIndirectSequenceCount is the maximum number of sequences in slink:VkGeneratedCommandsInfoNV and in slink:VkGeneratedCommandsMemoryRequirementsInfoNV. * pname:maxIndirectCommandsTokenCount is the maximum number of tokens in slink:VkIndirectCommandsLayoutCreateInfoNV. * pname:maxIndirectCommandsStreamCount is the maximum number of streams in slink:VkIndirectCommandsLayoutCreateInfoNV. * pname:maxIndirectCommandsTokenOffset is the maximum offset in slink:VkIndirectCommandsLayoutTokenNV. * pname:maxIndirectCommandsStreamStride is the maximum stream stride in slink:VkIndirectCommandsLayoutCreateInfoNV. * pname:minSequencesCountBufferOffsetAlignment is the minimum alignment for memory addresses which can: be used in slink:VkGeneratedCommandsInfoNV. * pname:minSequencesIndexBufferOffsetAlignment is the minimum alignment for memory addresses which can: be used in slink:VkGeneratedCommandsInfoNV. * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment for memory addresses used in slink:VkIndirectCommandsStreamNV, and as preprocess buffer in slink:VkGeneratedCommandsInfoNV. :refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[] -- endif::VK_NV_device_generated_commands[] ifdef::VK_KHR_portability_subset[] [open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs'] -- The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-minVertexInputBindingStrideAlignment]] pname:minVertexInputBindingStrideAlignment indicates the minimum alignment for vertex input strides. slink:VkVertexInputBindingDescription::pname:stride must: be a multiple of, and at least as large as, this value. The value must: be a power of two. :refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[] -- endif::VK_KHR_portability_subset[] ifdef::VK_KHR_fragment_shading_rate[] [open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-minFragmentShadingRateAttachmentTexelSize]] pname:minFragmentShadingRateAttachmentTexelSize indicates minimum supported width and height of the portion of the framebuffer corresponding to each texel in a fragment shading rate attachment. Each value must: be less than or equal to the values in pname:maxFragmentShadingRateAttachmentTexelSize. Each value must: be a power-of-two. It must: be [eq]#(0,0)# if the <> feature is not supported. * [[limits-maxFragmentShadingRateAttachmentTexelSize]] pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum supported width and height of the portion of the framebuffer corresponding to each texel in a fragment shading rate attachment. Each value must: be greater than or equal to the values in pname:minFragmentShadingRateAttachmentTexelSize. Each value must: be a power-of-two. It must: be [eq]#(0,0)# if the <> feature is not supported. * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]] pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the maximum ratio between the width and height of the portion of the framebuffer corresponding to each texel in a fragment shading rate attachment. pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a power-of-two value, and must: be less than or equal to [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width / pname:minFragmentShadingRateAttachmentTexelSize.height, pname:maxFragmentShadingRateAttachmentTexelSize.height / pname:minFragmentShadingRateAttachmentTexelSize.width)#. It must: be 0 if the <> feature is not supported. * [[limits-primitiveFragmentShadingRateWithMultipleViewports]] pname:primitiveFragmentShadingRateWithMultipleViewports specifies whether the <> can: be used when multiple viewports are used. If this value is ename:VK_FALSE, only a single viewport must: be used, and applications must: not write to the ifdef::VK_NV_viewport_array2[] code:ViewportMaskNV or endif::VK_NV_viewport_array2[] code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR. It must: be ename:VK_FALSE if ifdef::VK_VERSION_1_2[] the <> feature, endif::VK_VERSION_1_2[] ifdef::VK_EXT_shader_viewport_index_layer[] the `apiext:VK_EXT_shader_viewport_index_layer` extension, endif::VK_EXT_shader_viewport_index_layer[] ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or] the <> feature is not supported, or if the <> feature is not supported. * [[limits-layeredShadingRateAttachments]] pname:layeredShadingRateAttachments specifies whether a shading rate attachment image view can: be created with multiple layers. If this value is ename:VK_FALSE, when creating an image view with a pname:usage that includes ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, pname:layerCount must: be `1`. It must: be ename:VK_FALSE if ifdef::VK_VERSION_1_1,VK_KHR_multiview[] the <> feature, endif::VK_VERSION_1_1,VK_KHR_multiview[] ifdef::VK_VERSION_1_2[] the <> feature, endif::VK_VERSION_1_2[] ifdef::VK_EXT_shader_viewport_index_layer[] the `apiext:VK_EXT_shader_viewport_index_layer` extension, endif::VK_EXT_shader_viewport_index_layer[] ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or] the <> feature is not supported, or if the <> feature is not supported. * [[limits-fragmentShadingRateNonTrivialCombinerOps]] pname:fragmentShadingRateNonTrivialCombinerOps specifies whether elink:VkFragmentShadingRateCombinerOpKHR enums other than ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used. It must: be ename:VK_FALSE unless either the <> or <> feature is supported. * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum supported width and height of a fragment. Its pname:width and pname:height members must: both be power-of-two values. This limit is purely informational, and is not validated. * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio indicates the maximum ratio between the width and height of a fragment. pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and must: be less than or equal to the maximum of the pname:width and pname:height members of pname:maxFragmentSize. This limit is purely informational, and is not validated. * [[limits-maxFragmentShadingRateCoverageSamples]] pname:maxFragmentShadingRateCoverageSamples specifies the maximum number of coverage samples supported in a single fragment. pname:maxFragmentShadingRateCoverageSamples must: be less than or equal to the product of the pname:width and pname:height members of pname:maxFragmentSize, and the sample count reported by pname:maxFragmentShadingRateRasterizationSamples. pname:maxFragmentShadingRateCoverageSamples must: be less than or equal to [eq]#pname:maxSampleMaskWords {times} 32# if pname:fragmentShadingRateWithShaderSampleMask is supported. This limit is purely informational, and is not validated. * [[limits-maxFragmentShadingRateRasterizationSamples]] pname:maxFragmentShadingRateRasterizationSamples is a elink:VkSampleCountFlagBits value specifying the maximum sample rate supported when a fragment covers multiple pixels. This limit is purely informational, and is not validated. * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]] pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether the implementation supports writing code:FragDepth ifdef::VK_EXT_shader_stencil_export[] or code:FragStencilRefEXT endif::VK_EXT_shader_stencil_export[] from a fragment shader for multi-pixel fragments. If this value is ename:VK_FALSE, writing to those built-ins will clamp the fragment shading rate to [eq]#(1,1)#. * [[limits-fragmentShadingRateWithSampleMask]] pname:fragmentShadingRateWithSampleMask specifies whether the the implementation supports setting valid bits of slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for multi-pixel fragments. If this value is ename:VK_FALSE, zeroing valid bits in the sample mask will clamp the fragment shading rate to [eq]#(1,1)#. * [[limits-fragmentShadingRateWithShaderSampleMask]] pname:fragmentShadingRateWithShaderSampleMask specifies whether the implementation supports reading or writing code:SampleMask for multi-pixel fragments. If this value is ename:VK_FALSE, using that built-in will clamp the fragment shading rate to [eq]#(1,1)#. * [[limits-fragmentShadingRateWithConservativeRasterization]] pname:fragmentShadingRateWithConservativeRasterization ifndef::VK_EXT_conservative_rasterization[] is reserved for future use. endif::VK_EXT_conservative_rasterization[] ifdef::VK_EXT_conservative_rasterization[] specifies whether <> is supported for multi-pixel fragments. It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization` is not supported. If this value is ename:VK_FALSE, using <> will clamp the fragment shading rate to [eq]#(1,1)#. endif::VK_EXT_conservative_rasterization[] * [[limits-fragmentShadingRateWithFragmentShaderInterlock]] pname:fragmentShadingRateWithFragmentShaderInterlock ifndef::VK_EXT_fragment_shader_interlock[] is reserved for future use. endif::VK_EXT_fragment_shader_interlock[] ifdef::VK_EXT_fragment_shader_interlock[] specifies whether <> is supported for multi-pixel fragments. It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock` is not supported. If this value is ename:VK_FALSE, using <> will clamp the fragment shading rate to [eq]#(1,1)#. endif::VK_EXT_fragment_shader_interlock[] * [[limits-fragmentShadingRateWithCustomSampleLocations]] pname:fragmentShadingRateWithCustomSampleLocations ifndef::VK_EXT_sample_locations[] is reserved for future use. endif::VK_EXT_sample_locations[] ifdef::VK_EXT_sample_locations[] specifies whether <> are supported for multi-pixel fragments. It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not supported. If this value is ename:VK_FALSE, using <> will clamp the fragment shading rate to [eq]#(1,1)#. endif::VK_EXT_sample_locations[] * [[limits-fragmentShadingRateStrictMultiplyCombiner]] pname:fragmentShadingRateStrictMultiplyCombiner specifies whether ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a multiplication or not. Implementations where this value is ename:VK_FALSE will instead combine rates with an addition. If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE, implementations must: report this as ename:VK_FALSE. If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE, implementations should: report this as ename:VK_TRUE. [NOTE] .Note ==== Multiplication of the combiner rates using the fragment width/height in linear space is equivalent to an addition of those values in log2 space. Some implementations inadvertently implemented an addition in linear space due to unclear requirements originating outside of this specification. This resulted in <> being added. Fortunately, this only affects situations where a rate of 1 in either dimension is combined with another rate of 1. All other combinations result in the exact same result as if multiplication was performed in linear space due to the clamping logic, and the fact that both the sum and product of 2 and 2 are equal. In many cases, this limit will not affect the correct operation of applications. ==== :refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] These properties are related to <>. include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[] -- endif::VK_KHR_fragment_shading_rate[] ifdef::VK_NV_fragment_shading_rate_enums[] [open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxFragmentShadingRateInvocationCount]] pname:maxFragmentShadingRateInvocationCount is a elink:VkSampleCountFlagBits value indicating the maximum number of fragment shader invocations per fragment supported in pipeline, primitive, and attachment fragment shading rates. :refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] These properties are related to <>. include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[] -- endif::VK_NV_fragment_shading_rate_enums[] ifdef::VK_EXT_custom_border_color[] [open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[] * [[limits-maxCustomBorderColorSamplers]] pname:maxCustomBorderColorSamplers indicates the maximum number of samplers with custom border colors which can: simultaneously exist on a device. :refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[] -- endif::VK_EXT_custom_border_color[] ifdef::VK_EXT_provoking_vertex[] [open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-provokingVertexModePerPipeline]] pname:provokingVertexModePerPipeline indicates whether the implementation supports graphics pipelines with different provoking vertex modes within the same render pass instance. * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]] pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates whether the implementation can preserve the provoking vertex order when writing triangle fan vertices to transform feedback. :refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[] -- endif::VK_EXT_provoking_vertex[] ifdef::VK_EXT_descriptor_buffer[] [open,refpage='VkPhysicalDeviceDescriptorBufferPropertiesEXT',desc='Structure describing descriptor buffer properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-combinedImageSamplerDescriptorSingleArray]] pname:combinedImageSamplerDescriptorSingleArray indicates that the implementation does not require an array of `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors to be written into a descriptor buffer as an array of image descriptors, immediately followed by an array of sampler descriptors. * [[limits-bufferlessPushDescriptors]] pname:bufferlessPushDescriptors indicates that the implementation does not require a buffer created with `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` to be bound when using push descriptors. * [[limits-allowSamplerImageViewPostSubmitCreation]] pname:allowSamplerImageViewPostSubmitCreation indicates that the implementation does not restrict when the slink:VkSampler or slink:VkImageView objects used to retrieve descriptor data can: be created in relation to command buffer submission. If this value is ename:VK_FALSE, then the application must: create any slink:VkSampler or slink:VkImageView objects whose descriptor data is accessed during the execution of a command buffer, before the flink:vkQueueSubmit ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[] , or flink:vkQueueSubmit2, endif::VK_VERSION_1_3,VK_KHR_synchronization2[] call that submits that command buffer. * [[limits-descriptorBufferOffsetAlignment]] pname:descriptorBufferOffsetAlignment indicates the required: alignment in bytes when setting offsets into the descriptor buffer. * [[limits-maxDescriptorBufferBindings]] pname:maxDescriptorBufferBindings indicates the maximum sum total number of descriptor buffers and embedded immutable sampler sets that can: be bound. * [[limits-maxResourceDescriptorBufferBindings]] pname:maxResourceDescriptorBufferBindings indicates the maximum number of resource descriptor buffers that can: be bound. * [[limits-maxSamplerDescriptorBufferBindings]] pname:maxSamplerDescriptorBufferBindings indicates the maximum number of sampler descriptor buffers that can: be bound. * [[limits-maxEmbeddedImmutableSamplerBindings]] pname:maxEmbeddedImmutableSamplerBindings indicates the maximum number of embedded immutable sampler sets that can: be bound. * [[limits-maxEmbeddedImmutableSamplers]] pname:maxEmbeddedImmutableSamplers indicates the maximum number of unique immutable samplers in descriptor set layouts created with ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, and pipeline layouts created from them, which can: simultaneously exist on a device. * [[limits-bufferCaptureReplayDescriptorDataSize]] pname:bufferCaptureReplayDescriptorDataSize indicates the maximum size in bytes of the opaque data used for capture and replay with buffers. * [[limits-imageCaptureReplayDescriptorDataSize]] pname:imageCaptureReplayDescriptorDataSize indicates the maximum size in bytes of the opaque data used for capture and replay with images. * [[limits-imageViewCaptureReplayDescriptorDataSize]] pname:imageViewCaptureReplayDescriptorDataSize indicates the maximum size in bytes of the opaque data used for capture and replay with image views. * [[limits-samplerCaptureReplayDescriptorDataSize]] pname:samplerCaptureReplayDescriptorDataSize indicates the maximum size in bytes of the opaque data used for capture and replay with samplers. * [[limits-accelerationStructureCaptureReplayDescriptorDataSize]] pname:accelerationStructureCaptureReplayDescriptorDataSize indicates the maximum size in bytes of the opaque data used for capture and replay with acceleration structures. * [[limits-samplerDescriptorSize]] pname:samplerDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor. * [[limits-combinedImageSamplerDescriptorSize]] pname:combinedImageSamplerDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor. * [[limits-sampledImageDescriptorSize]] pname:sampledImageDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE descriptor. * [[limits-storageImageDescriptorSize]] pname:storageImageDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE descriptor. * [[limits-uniformTexelBufferDescriptorSize]] pname:uniformTexelBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the <> feature is not enabled. * [[limits-robustUniformTexelBufferDescriptorSize]] pname:robustUniformTexelBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the <> feature is enabled. * [[limits-storageTexelBufferDescriptorSize]] pname:storageTexelBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the <> feature is not enabled. * [[limits-robustStorageTexelBufferDescriptorSize]] pname:robustStorageTexelBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the <> feature is enabled. * [[limits-uniformBufferDescriptorSize]] pname:uniformBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor. * [[limits-robustUniformBufferDescriptorSize]] pname:robustUniformBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor if the <> feature is enabled. * [[limits-storageBufferDescriptorSize]] pname:storageBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor. * [[limits-robustStorageBufferDescriptorSize]] pname:robustStorageBufferDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor if the <> feature is enabled. * [[limits-inputAttachmentDescriptorSize]] pname:inputAttachmentDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor. * [[limits-accelerationStructureDescriptorSize]] pname:accelerationStructureDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor. * [[limits-maxSamplerDescriptorBufferRange]] pname:maxSamplerDescriptorBufferRange indicates the maximum range in bytes from the address of a sampler descriptor buffer binding that is accessible to a shader. * [[limits-maxResourceDescriptorBufferRange]] pname:maxResourceDescriptorBufferRange indicates the maximum range in bytes from the address of a resource descriptor buffer binding that is accessible to a shader. * [[limits-samplerDescriptorBufferAddressSpaceSize]] pname:samplerDescriptorBufferAddressSpaceSize indicates the total size in bytes of the address space available for descriptor buffers created with ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT. * [[limits-resourceDescriptorBufferAddressSpaceSize]] pname:resourceDescriptorBufferAddressSpaceSize indicates the total size in bytes of the address space available for descriptor buffers created with ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT. * [[limits-descriptorBufferAddressSpaceSize]] pname:descriptorBufferAddressSpaceSize indicates the total size in bytes of the address space available for descriptor buffers created with both ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT and ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT. ifdef::VK_VALVE_mutable_descriptor_type[] A descriptor binding with type ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE has a descriptor size which is implied by the descriptor types included in the slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes list. The descriptor size is equal to the maximum size of any descriptor type included in the pname:pDescriptorTypes list. endif::VK_VALVE_mutable_descriptor_type[] ifdef::VK_EXT_pipeline_robustness[] As there is no way to request robust and non-robust descriptors separately, or specify robust/non-robust descriptors in the set layout, if <> is enabled then robust descriptors are always used. endif::VK_EXT_pipeline_robustness[] :refpage: VkPhysicalDeviceDescriptorBufferPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[] -- ifdef::VK_EXT_fragment_density_map[] [open,refpage='VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT',desc='Structure describing descriptor buffer density map properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-combinedImageSamplerDensityMapDescriptorSize]] pname:combinedImageSamplerDensityMapDescriptorSize indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor when creating the descriptor with ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT set. :refpage: VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[] -- endif::VK_EXT_fragment_density_map[] endif::VK_EXT_descriptor_buffer[] ifdef::VK_HUAWEI_subpass_shading[] [open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]] pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum ratio between the width and height of the portion of the subpass shading shader workgroup size. pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two value, and must: be less than or equal to max(code:WorkgroupSize.x / code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x). :refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[] -- endif::VK_HUAWEI_subpass_shading[] ifdef::VK_EXT_multi_draw[] [open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs'] -- The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[] The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure describe the following features: * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the maximum number of draw calls which can: be batched into a single multidraw. :refpage: VkPhysicalDeviceMultiDrawPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[] -- endif::VK_EXT_multi_draw[] ifdef::VK_EXT_graphics_pipeline_library[] [open,refpage='VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',desc='Structure describing additional properties of graphics pipeline libraries',type='structs'] -- The sname:VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[] * [[limits-graphicsPipelineLibraryFastLinking]] pname:graphicsPipelineLibraryFastLinking indicates whether fast linking of graphics pipelines is supported. If it is ename:VK_TRUE, creating a graphics pipeline entirely from pipeline libraries without ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT is comparable in cost to recording a command in a command buffer. * [[limits-graphicsPipelineLibraryIndependentInterpolationDecoration]] pname:graphicsPipelineLibraryIndependentInterpolationDecoration indicates whether code:NoPerspective and code:Flat interpolation decorations in the last vertex processing stage and the fragment shader are required to match when using graphics pipeline libraries. If it is ename:VK_TRUE, the interpolation decorations do not need to match. If it is ename:VK_FALSE, these decorations must: either be present in both stages or neither stage in order for a given interface variable to match. :refpage: VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[] -- endif::VK_EXT_graphics_pipeline_library[] ifdef::VK_KHR_fragment_shader_barycentric[] [open,refpage='VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR',desc='Structure describing fragment shader barycentric limits of an implementation',type='structs'] -- The sname:VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[] * [[limits-triStripVertexOrderIndependentOfProvokingVertex]] pname:triStripVertexOrderIndependentOfProvokingVertex indicates that the implementation does not change its vertex numbering for triangle strip primitives when the <> is ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, as shown in the <>. :refpage: VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[] -- endif::VK_KHR_fragment_shader_barycentric[] ifdef::VK_EXT_shader_module_identifier[] [open,refpage='VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT',desc='Structure describing shader module identifier properties of an implementation',type='structs'] -- The sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[] The members of the sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT structure describe the following: * [[limits-shaderModuleIdentifierAlgorithmUUID]] pname:shaderModuleIdentifierAlgorithmUUID is an array of ename:VK_UUID_SIZE code:uint8_t values which uniquely represents the algorithm used to compute an identifier in flink:vkGetShaderModuleIdentifierEXT and flink:vkGetShaderModuleCreateInfoIdentifierEXT. Implementations should: not change this value in different driver versions if the algorithm used to compute an identifier is the same. [NOTE] .Note ==== The algorithm UUID may be the same in different ICDs if the algorithms are guaranteed to produce the same results. This may happen in driver stacks which support different kinds of hardware with shared code. Khronos' conformance testing can not guarantee that pname:shaderModuleIdentifierAlgorithmUUID values are actually unique, so implementors should make their own best efforts to ensure that their UUID is unlikely to conflict with other implementations which may use a different algorithm. In particular, hard-coded values which easily conflict, such as all-`0` bits, should: never be used. Hard-coded values are acceptable if best effort is ensured that the value will not accidentally conflict. ==== :refpage: VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[] -- endif::VK_EXT_shader_module_identifier[] ifdef::VK_EXT_pipeline_robustness[] [open,refpage='VkPhysicalDevicePipelineRobustnessPropertiesEXT',desc='Structure describing the default robustness behavior of a physical device',type='structs'] -- The sname:VkPhysicalDevicePipelineRobustnessPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:defaultRobustnessStorageBuffers describes the behaviour of out of bounds accesses made to storage buffers when no robustness features are enabled * pname:defaultRobustnessUniformBuffers describes the behaviour of out of bounds accesses made to uniform buffers when no robustness features are enabled * pname:defaultRobustnessVertexInputs describes the behaviour of out of bounds accesses made to vertex input attributes when no robustness features are enabled * pname:defaultRobustnessImages describes the behaviour of out of bounds accesses made to images when no robustness features are enabled Some implementations of Vulkan may be able to guarantee that certain types of accesses are always performed with robustness even when the Vulkan API's robustness features are not explicitly enabled. Even when an implementation reports that accesses to a given resource type are robust by default, it remains invalid to make an out of bounds access without requesting the appropriate robustness feature. :refpage: VkPhysicalDevicePipelineRobustnessPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[] -- endif::VK_EXT_pipeline_robustness[] ifdef::VK_EXT_extended_dynamic_state3[] [open,refpage='VkPhysicalDeviceExtendedDynamicState3PropertiesEXT',desc='Structure describing capabilities of extended dynamic state',type='structs'] -- The sname:VkPhysicalDeviceExtendedDynamicState3PropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[] * [[limits-dynamicPrimitiveTopologyUnrestricted]] pname:dynamicPrimitiveTopologyUnrestricted indicates that the implementation allows fname:vkCmdSetPrimitiveTopology to use a different <> to the one specified in the active graphics pipeline. :refpage: VkPhysicalDeviceExtendedDynamicState3PropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[] -- endif::VK_EXT_extended_dynamic_state3[] ifdef::VK_NV_optical_flow[] [open,refpage='VkPhysicalDeviceOpticalFlowPropertiesNV',desc='Structure describing properties supported by VK_NV_optical_flow',type='structs'] -- The sname:VkPhysicalDeviceOpticalFlowPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-supportedOutputGridSizes]] pname:supportedOutputGridSizes are the supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified in sname:VkOpticalFlowSessionCreateInfoNV::pname:outputGridSize. * [[limits-supportedHintGridSizes]] pname:supportedHintGridSizes are the supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified in sname:VkOpticalFlowSessionCreateInfoNV::pname:hintGridSize. * [[limits-hintSupported]] pname:hintSupported is a boolean describing whether using hint flow vector map is supported in an optical flow session. * [[limits-costSupported]] pname:costSupported is a boolean describing whether cost map generation is supported in an optical flow session. * [[limits-bidirectionalFlowSupported]] pname:bidirectionalFlowSupported is a boolean describing whether bi-directional flow generation is supported in an optical flow session. * [[limits-globalFlowSupported]] pname:globalFlowSupported is a boolean describing whether global flow vector map generation is supported in an optical flow session. * [[limits-minWidth]] pname:minWidth is the minimum width in pixels for images used in an optical flow session. * [[limits-minHeight]] pname:minHeight is the minimum height in pixels for images used in an optical flow session. * [[limits-maxWidth]] pname:maxWidth is the maximum width in pixels for images used in an optical flow session. * [[limits-maxHeight]] pname:maxHeight is the maximum height in pixels for images used in an optical flow session. * [[limits-maxNumRegionsOfInterest]] pname:maxNumRegionsOfInterest is the maximum number of regions of interest which can be used in an optical flow session. If this pname:maxNumRegionsOfInterest is 0, regions of interest are not supported in an optical flow session. :refpage: VkPhysicalDeviceOpticalFlowPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[] -- endif::VK_NV_optical_flow[] ifdef::VK_EXT_opacity_micromap[] [open,refpage='VkPhysicalDeviceOpacityMicromapPropertiesEXT',desc='Structure describing the opacity micromap properties of a physical device',type='structs'] -- The sname:VkPhysicalDeviceOpacityMicromapPropertiesEXT structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:maxOpacity2StateSubdivisionLevel is the maximum allowed pname:subdivisionLevel when pname:format is ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT * pname:maxOpacity4StateSubdivisionLevel is the maximum allowed pname:subdivisionLevel when pname:format is ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT :refpage: VkPhysicalDeviceOpacityMicromapPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[] -- endif::VK_EXT_opacity_micromap[] ifdef::VK_ARM_shader_core_builtins[] [open,refpage='VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM',desc='Structure describing shader core builtins properties supported by an implementation',type='structs'] -- The sname:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * [[limits-shaderCoreMask]] pname:shaderCoreMask is a bitfield where each bit set represents the presence of a shader core whose ID is the bit position. The highest ID for any shader core on the device is the position of the most significant bit set. * [[limits-shaderCoreCount]] pname:shaderCoreCount is the number of shader cores on the device. * [[limits-shaderWarpsPerCore]] pname:shaderWarpsPerCore is the maximum number of simultaneously executing warps on a shader core. :refpage: VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[] -- endif::VK_ARM_shader_core_builtins[] ifdef::VK_NV_ray_tracing_invocation_reorder[] [open,refpage='VkRayTracingInvocationReorderModeNV',desc='Enum providing a hint on how the application may: reorder',type='enums'] -- Values which may: be returned in the pname:rayTracingInvocationReorderReorderingHint field of sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV are: include::{generated}/api/enums/VkRayTracingInvocationReorderModeNV.adoc[] * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV indicates that the implementation is likely to not reorder at reorder calls. * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV indicates that the implementation is likely to reorder at reorder calls. -- [open,refpage='VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV',desc='Structure describing shader module identifier properties of an implementation',type='structs'] -- The sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV structure is defined as: include::{generated}/api/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[] * pname:rayTracingInvocationReorderReorderingHint is a hint indicating if the implementation will actually reorder at the reorder calls. [NOTE] .Note ==== Because the extension changes how hits are managed there is a compatibility reason to expose the extension even when an implementation does not have sorting active. ==== :refpage: VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV include::{chapters}/limits.adoc[tag=limits_desc] include::{generated}/validity/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[] -- endif::VK_NV_ray_tracing_invocation_reorder[] [[limits-minmax]] == Limit Requirements The following table specifies the required: minimum/maximum for all Vulkan graphics implementations. Where a limit corresponds to a fine-grained device feature which is optional:, the feature name is listed with two required: limits, one when the feature is supported and one when it is not supported. If an implementation supports a feature, the limits reported are the same whether or not the feature is enabled. [[limits-types]] .Required Limit Types [width="100%",cols="<20%,<50%,<30%",options="header"] |==== | Type | Limit | Feature | code:uint32_t | pname:maxImageDimension1D | - | code:uint32_t | pname:maxImageDimension2D | - | code:uint32_t | pname:maxImageDimension3D | - | code:uint32_t | pname:maxImageDimensionCube | - | code:uint32_t | pname:maxImageArrayLayers | - | code:uint32_t | pname:maxTexelBufferElements | - | code:uint32_t | pname:maxUniformBufferRange | - | code:uint32_t | pname:maxStorageBufferRange | - | code:uint32_t | pname:maxPushConstantsSize | - | code:uint32_t | pname:maxMemoryAllocationCount | - | code:uint32_t | pname:maxSamplerAllocationCount | - | basetype:VkDeviceSize | pname:bufferImageGranularity | - | basetype:VkDeviceSize | pname:sparseAddressSpaceSize | pname:sparseBinding | code:uint32_t | pname:maxBoundDescriptorSets | - | code:uint32_t | pname:maxPerStageDescriptorSamplers | - | code:uint32_t | pname:maxPerStageDescriptorUniformBuffers | - | code:uint32_t | pname:maxPerStageDescriptorStorageBuffers | - | code:uint32_t | pname:maxPerStageDescriptorSampledImages | - | code:uint32_t | pname:maxPerStageDescriptorStorageImages | - | code:uint32_t | pname:maxPerStageDescriptorInputAttachments| - | code:uint32_t | pname:maxPerStageResources | - | code:uint32_t | pname:maxDescriptorSetSamplers | - | code:uint32_t | pname:maxDescriptorSetUniformBuffers | - | code:uint32_t | pname:maxDescriptorSetUniformBuffersDynamic| - | code:uint32_t | pname:maxDescriptorSetStorageBuffers | - | code:uint32_t | pname:maxDescriptorSetStorageBuffersDynamic| - | code:uint32_t | pname:maxDescriptorSetSampledImages | - | code:uint32_t | pname:maxDescriptorSetStorageImages | - | code:uint32_t | pname:maxDescriptorSetInputAttachments | - | code:uint32_t | pname:maxVertexInputAttributes | - | code:uint32_t | pname:maxVertexInputBindings | - | code:uint32_t | pname:maxVertexInputAttributeOffset | - | code:uint32_t | pname:maxVertexInputBindingStride | - | code:uint32_t | pname:maxVertexOutputComponents | - | code:uint32_t | pname:maxTessellationGenerationLevel | pname:tessellationShader | code:uint32_t | pname:maxTessellationPatchSize | pname:tessellationShader | code:uint32_t | pname:maxTessellationControlPerVertexInputComponents | pname:tessellationShader | code:uint32_t | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader | code:uint32_t | pname:maxTessellationControlPerPatchOutputComponents | pname:tessellationShader | code:uint32_t | pname:maxTessellationControlTotalOutputComponents | pname:tessellationShader | code:uint32_t | pname:maxTessellationEvaluationInputComponents | pname:tessellationShader | code:uint32_t | pname:maxTessellationEvaluationOutputComponents | pname:tessellationShader | code:uint32_t | pname:maxGeometryShaderInvocations | pname:geometryShader | code:uint32_t | pname:maxGeometryInputComponents | pname:geometryShader | code:uint32_t | pname:maxGeometryOutputComponents | pname:geometryShader | code:uint32_t | pname:maxGeometryOutputVertices | pname:geometryShader | code:uint32_t | pname:maxGeometryTotalOutputComponents | pname:geometryShader | code:uint32_t | pname:maxFragmentInputComponents | - | code:uint32_t | pname:maxFragmentOutputAttachments | - | code:uint32_t | pname:maxFragmentDualSrcAttachments | pname:dualSrcBlend | code:uint32_t | pname:maxFragmentCombinedOutputResources | - | code:uint32_t | pname:maxComputeSharedMemorySize | - | 3 {times} code:uint32_t | pname:maxComputeWorkGroupCount | - | code:uint32_t | pname:maxComputeWorkGroupInvocations | - | 3 {times} code:uint32_t | pname:maxComputeWorkGroupSize | - | code:uint32_t | pname:subPixelPrecisionBits | - | code:uint32_t | pname:subTexelPrecisionBits | - | code:uint32_t | pname:mipmapPrecisionBits | - | code:uint32_t | pname:maxDrawIndexedIndexValue | pname:fullDrawIndexUint32 | code:uint32_t | pname:maxDrawIndirectCount | pname:multiDrawIndirect | code:float | pname:maxSamplerLodBias | - | code:float | pname:maxSamplerAnisotropy | pname:samplerAnisotropy | code:uint32_t | pname:maxViewports | pname:multiViewport | 2 {times} code:uint32_t | pname:maxViewportDimensions | - | 2 {times} code:float | pname:viewportBoundsRange | - | code:uint32_t | pname:viewportSubPixelBits | - | code:size_t | pname:minMemoryMapAlignment | - | basetype:VkDeviceSize | pname:minTexelBufferOffsetAlignment | - | basetype:VkDeviceSize | pname:minUniformBufferOffsetAlignment | - | basetype:VkDeviceSize | pname:minStorageBufferOffsetAlignment | - | code:int32_t | pname:minTexelOffset | - | code:uint32_t | pname:maxTexelOffset | - | code:int32_t | pname:minTexelGatherOffset | pname:shaderImageGatherExtended | code:uint32_t | pname:maxTexelGatherOffset | pname:shaderImageGatherExtended | code:float | pname:minInterpolationOffset | pname:sampleRateShading | code:float | pname:maxInterpolationOffset | pname:sampleRateShading | code:uint32_t | pname:subPixelInterpolationOffsetBits | pname:sampleRateShading | code:uint32_t | pname:maxFramebufferWidth | - | code:uint32_t | pname:maxFramebufferHeight | - | code:uint32_t | pname:maxFramebufferLayers | - | tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts | - ifdef::VK_VERSION_1_2[] | tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts | - endif::VK_VERSION_1_2[] | tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts | - | tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts | - | tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | - | code:uint32_t | pname:maxColorAttachments | - | tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts | - | tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts | - | tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts | - | tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts | - | tlink:VkSampleCountFlags | pname:storageImageSampleCounts | pname:shaderStorageImageMultisample | code:uint32_t | pname:maxSampleMaskWords | - | basetype:VkBool32 | pname:timestampComputeAndGraphics | - | code:float | pname:timestampPeriod | - | code:uint32_t | pname:maxClipDistances | pname:shaderClipDistance | code:uint32_t | pname:maxCullDistances | pname:shaderCullDistance | code:uint32_t | pname:maxCombinedClipAndCullDistances | pname:shaderCullDistance | code:uint32_t | pname:discreteQueuePriorities | - | 2 {times} code:float | pname:pointSizeRange | pname:largePoints | 2 {times} code:float | pname:lineWidthRange | pname:wideLines | code:float | pname:pointSizeGranularity | pname:largePoints | code:float | pname:lineWidthGranularity | pname:wideLines | basetype:VkBool32 | pname:strictLines | - | basetype:VkBool32 | pname:standardSampleLocations | - | basetype:VkDeviceSize | pname:optimalBufferCopyOffsetAlignment | - | basetype:VkDeviceSize | pname:optimalBufferCopyRowPitchAlignment | - | basetype:VkDeviceSize | pname:nonCoherentAtomSize | - ifdef::VK_EXT_discard_rectangles[] | code:uint32_t | pname:maxDiscardRectangles | `apiext:VK_EXT_discard_rectangles` endif::VK_EXT_discard_rectangles[] ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] | basetype:VkBool32 | pname:filterMinmaxSingleComponentFormats | ifdef::VK_VERSION_1_2[`<>` ] ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`] | basetype:VkBool32 | pname:filterMinmaxImageComponentMapping | ifdef::VK_VERSION_1_2[`<>` ] ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`] endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[] | basetype:VkDeviceSize | pname:maxBufferSize | `<>` endif::VK_VERSION_1_3,VK_KHR_maintenance4[] ifdef::VK_EXT_conservative_rasterization[] | code:float | pname:primitiveOverestimationSize | `apiext:VK_EXT_conservative_rasterization` | basetype:VkBool32 | pname:maxExtraPrimitiveOverestimationSize | `apiext:VK_EXT_conservative_rasterization` | code:float | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization` | basetype:VkBool32 | pname:degenerateTriangleRasterized | `apiext:VK_EXT_conservative_rasterization` | code:float | pname:degenerateLinesRasterized | `apiext:VK_EXT_conservative_rasterization` | basetype:VkBool32 | pname:fullyCoveredFragmentShaderInputVariable | `apiext:VK_EXT_conservative_rasterization` | basetype:VkBool32 | pname:conservativeRasterizationPostDepthCoverage | `apiext:VK_EXT_conservative_rasterization` endif::VK_EXT_conservative_rasterization[] ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] | code:uint32_t | pname:maxUpdateAfterBindDescriptorsInAllPools | `<>` | basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative | - | basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative | - | basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative | - | basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative | - | basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative | - | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindSamplers | `<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | `<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | `<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindSampledImages | `<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindStorageImages | `<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<>` | code:uint32_t | pname:maxPerStageUpdateAfterBindResources | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindSamplers | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindUniformBuffers | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageBuffers | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindSampledImages | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageImages | `<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindInputAttachments | `<>` endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] | code:uint32_t | pname:maxInlineUniformBlockSize |`<>` | code:uint32_t | pname:maxPerStageDescriptorInlineUniformBlocks |`<>` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks |`<>` | code:uint32_t | pname:maxDescriptorSetInlineUniformBlocks |`<>` | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks |`<>` endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] ifdef::VK_VERSION_1_3[] | code:uint32_t | pname:maxInlineUniformTotalSize |`<>` endif::VK_VERSION_1_3[] ifdef::VK_EXT_vertex_attribute_divisor[] | code:uint32_t | pname:maxVertexAttribDivisor | `apiext:VK_EXT_vertex_attribute_divisor` endif::VK_EXT_vertex_attribute_divisor[] ifdef::VK_NV_mesh_shader[] | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations | `apiext:VK_NV_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations | `apiext:VK_NV_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity | `apiext:VK_NV_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity | `apiext:VK_NV_mesh_shader` endif::VK_NV_mesh_shader[] ifdef::VK_EXT_mesh_shader[] | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount | `apiext:VK_EXT_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations | `apiext:VK_EXT_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount | `apiext:VK_EXT_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations | `apiext:VK_EXT_mesh_shader` | 3 {times} code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations | `apiext:VK_EXT_mesh_shader` | code:uint32_t | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations | `apiext:VK_EXT_mesh_shader` | basetype:VkBool32 | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput | `apiext:VK_EXT_mesh_shader` | basetype:VkBool32 | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput | `apiext:VK_EXT_mesh_shader` | basetype:VkBool32 | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput | `apiext:VK_EXT_mesh_shader` | basetype:VkBool32 | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput | `apiext:VK_EXT_mesh_shader` endif::VK_EXT_mesh_shader[] ifdef::VK_EXT_transform_feedback[] | code:uint32_t | pname:maxTransformFeedbackStreams | `apiext:VK_EXT_transform_feedback` | code:uint32_t | pname:maxTransformFeedbackBuffers | `apiext:VK_EXT_transform_feedback` | basetype:VkDeviceSize | pname:maxTransformFeedbackBufferSize | `apiext:VK_EXT_transform_feedback` | code:uint32_t | pname:maxTransformFeedbackStreamDataSize | `apiext:VK_EXT_transform_feedback` | code:uint32_t | pname:maxTransformFeedbackBufferDataSize | `apiext:VK_EXT_transform_feedback` | code:uint32_t | pname:maxTransformFeedbackBufferDataStride | `apiext:VK_EXT_transform_feedback` | basetype:VkBool32 | pname:transformFeedbackQueries | `apiext:VK_EXT_transform_feedback` | basetype:VkBool32 | pname:transformFeedbackStreamsLinesTriangles | `apiext:VK_EXT_transform_feedback` | basetype:VkBool32 | pname:transformFeedbackRasterizationStreamSelect | `apiext:VK_EXT_transform_feedback` | basetype:VkBool32 | pname:transformFeedbackDraw | `apiext:VK_EXT_transform_feedback` endif::VK_EXT_transform_feedback[] ifdef::VK_EXT_fragment_density_map[] | slink:VkExtent2D | pname:minFragmentDensityTexelSize | `<>` | slink:VkExtent2D | pname:maxFragmentDensityTexelSize | `<>` | basetype:VkBool32 | pname:fragmentDensityInvocations | `<>` ifdef::VK_EXT_fragment_density_map2[] | basetype:VkBool32 | pname:subsampledLoads | `apiext:VK_EXT_fragment_density_map2` | basetype:VkBool32 | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2` | code:uint32_t | pname:maxSubsampledArrayLayers | `apiext:VK_EXT_fragment_density_map2` | code:uint32_t | pname:maxDescriptorSetSubsampledSamplers | `apiext:VK_EXT_fragment_density_map2` endif::VK_EXT_fragment_density_map2[] ifdef::VK_QCOM_fragment_density_map_offset[] | slink:VkExtent2D | pname:fragmentDensityOffsetGranularity | `<>` endif::VK_QCOM_fragment_density_map_offset[] endif::VK_EXT_fragment_density_map[] ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] | code:uint32_t | pname:maxGeometryCount | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` | code:uint32_t | pname:maxInstanceCount | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] | code:uint32_t | pname:shaderGroupHandleSize | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:maxShaderGroupStride | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:shaderGroupBaseAlignment | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] ifdef::VK_NV_ray_tracing[] | code:uint32_t | pname:maxRecursionDepth | `apiext:VK_NV_ray_tracing` | code:uint32_t | pname:maxTriangleCount | `apiext:VK_NV_ray_tracing` endif::VK_NV_ray_tracing[] ifdef::VK_KHR_acceleration_structure[] | code:uint32_t | pname:maxPerStageDescriptorAccelerationStructures | `apiext:VK_KHR_acceleration_structure` | code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures | `apiext:VK_KHR_acceleration_structure` endif::VK_KHR_acceleration_structure[] ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] | code:uint32_t | pname:maxDescriptorSetAccelerationStructures | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] ifdef::VK_KHR_acceleration_structure[] | code:uint32_t | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures | `apiext:VK_KHR_acceleration_structure` | code:uint32_t | pname:minAccelerationStructureScratchOffsetAlignment | `apiext:VK_KHR_acceleration_structure` endif::VK_KHR_acceleration_structure[] ifdef::VK_KHR_ray_tracing_pipeline[] | code:uint32_t | pname:maxRayRecursionDepth | `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:shaderGroupHandleCaptureReplaySize | `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:maxRayDispatchInvocationCount | `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:shaderGroupHandleAlignment | `apiext:VK_KHR_ray_tracing_pipeline` | code:uint32_t | pname:maxRayHitAttributeSize | `apiext:VK_KHR_ray_tracing_pipeline` endif::VK_KHR_ray_tracing_pipeline[] ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] | code:uint64_t | pname:maxTimelineSemaphoreValueDifference | `<>` endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] ifdef::VK_EXT_line_rasterization[] | code:uint32_t | pname:lineSubPixelPrecisionBits | `apiext:VK_EXT_line_rasterization` endif::VK_EXT_line_rasterization[] ifdef::VK_EXT_custom_border_color[] | code:uint32_t | pname:maxCustomBorderColorSamplers | `apiext:VK_EXT_custom_border_color` endif::VK_EXT_custom_border_color[] ifdef::VK_EXT_robustness2[] | basetype:VkDeviceSize | pname:robustStorageBufferAccessSizeAlignment | `apiext:VK_EXT_robustness2` | basetype:VkDeviceSize | pname:robustUniformBufferAccessSizeAlignment | `apiext:VK_EXT_robustness2` endif::VK_EXT_robustness2[] ifdef::VK_KHR_fragment_shading_rate[] | 2 {times} code:uint32_t | pname:minFragmentShadingRateAttachmentTexelSize | `<>` | 2 {times} code:uint32_t | pname:maxFragmentShadingRateAttachmentTexelSize | `<>` | code:uint32_t | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<>` | basetype:VkBool32 | pname:primitiveFragmentShadingRateWithMultipleViewports | `<>` | basetype:VkBool32 | pname:layeredShadingRateAttachments | `<>` | basetype:VkBool32 | pname:fragmentShadingRateNonTrivialCombinerOps | `<>` | 2 {times} code:uint32_t | pname:maxFragmentSize | `<>` | code:uint32_t | pname:maxFragmentSizeAspectRatio | `<>` | code:uint32_t | pname:maxFragmentShadingRateCoverageSamples | `<>` | elink:VkSampleCountFlagBits | pname:maxFragmentShadingRateRasterizationSamples | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithShaderDepthStencilWrites | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithSampleMask | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithShaderSampleMask | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithConservativeRasterization | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithFragmentShaderInterlock | `<>` | basetype:VkBool32 | pname:fragmentShadingRateWithCustomSampleLocations | `<>` | basetype:VkBool32 | pname:fragmentShadingRateStrictMultiplyCombiner | `<>` endif::VK_KHR_fragment_shading_rate[] ifdef::VK_NV_fragment_shading_rate_enums[] | elink:VkSampleCountFlagBits | pname:maxFragmentShadingRateInvocationCount | `<>` endif::VK_NV_fragment_shading_rate_enums[] ifdef::VK_EXT_descriptor_buffer[] | basetype:VkBool32 | pname:combinedImageSamplerDescriptorSingleArray | `<>` | basetype:VkBool32 | pname:bufferlessPushDescriptors | `<>` | basetype:VkBool32 | pname:allowSamplerImageViewPostSubmitCreation | `<>` | basetype:VkDeviceSize | pname:descriptorBufferOffsetAlignment | `<>` | code:uint32_t | pname:maxDescriptorBufferBindings | `<>` | code:uint32_t | pname:maxResourceDescriptorBufferBindings | `<>` | code:uint32_t | pname:maxSamplerDescriptorBufferBindings | `<>` | code:uint32_t | pname:maxEmbeddedImmutableSamplerBindings | `<>` | code:uint32_t | pname:maxEmbeddedImmutableSamplers | `<>` | code:size_t | pname:bufferCaptureReplayDescriptorDataSize | `<>` | code:size_t | pname:imageCaptureReplayDescriptorDataSize | `<>` | code:size_t | pname:imageViewCaptureReplayDescriptorDataSize | `<>` | code:size_t | pname:samplerCaptureReplayDescriptorDataSize | `<>` | code:size_t | pname:accelerationStructureCaptureReplayDescriptorDataSize | `<>` | code:size_t | pname:samplerDescriptorSize | `<>` | code:size_t | pname:combinedImageSamplerDescriptorSize | `<>` | code:size_t | pname:sampledImageDescriptorSize | `<>` | code:size_t | pname:storageImageDescriptorSize | `<>` | code:size_t | pname:uniformTexelBufferDescriptorSize | `<>` | code:size_t | pname:robustUniformTexelBufferDescriptorSize | `<>` | code:size_t | pname:storageTexelBufferDescriptorSize | `<>` | code:size_t | pname:robustStorageTexelBufferDescriptorSize | `<>` | code:size_t | pname:uniformBufferDescriptorSize | `<>` | code:size_t | pname:robustUniformBufferDescriptorSize | `<>` | code:size_t | pname:storageBufferDescriptorSize | `<>` | code:size_t | pname:robustStorageBufferDescriptorSize | `<>` | code:size_t | pname:inputAttachmentDescriptorSize | `<>` | code:size_t | pname:accelerationStructureDescriptorSize | `<>` | basetype:VkDeviceSize | pname:maxSamplerDescriptorBufferRange | `<>` | basetype:VkDeviceSize | pname:maxResourceDescriptorBufferRange | `<>` | basetype:VkDeviceSize | pname:samplerDescriptorBufferAddressSpaceSize | `<>` | basetype:VkDeviceSize | pname:resourceDescriptorBufferAddressSpaceSize | `<>` | basetype:VkDeviceSize | pname:descriptorBufferAddressSpaceSize | `<>` ifdef::VK_EXT_fragment_density_map[] | code:size_t | pname:combinedImageSamplerDensityMapDescriptorSize | `<>` endif::VK_EXT_fragment_density_map[] endif::VK_EXT_descriptor_buffer[] ifdef::VK_HUAWEI_subpass_shading[] | code:uint32_t | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<>` endif::VK_HUAWEI_subpass_shading[] ifdef::VK_EXT_graphics_pipeline_library[] | basetype:VkBool32 | pname:graphicsPipelineLibraryFastLinking | `<>` | basetype:VkBool32 | pname:graphicsPipelineLibraryIndependentInterpolationDecoration | `<>` endif::VK_EXT_graphics_pipeline_library[] ifdef::VK_KHR_fragment_shader_barycentric[] | basetype:VkBool32 | pname:triStripVertexOrderIndependentOfProvokingVertex | - endif::VK_KHR_fragment_shader_barycentric[] ifdef::VK_QCOM_image_processing[] | code:uint32_t | pname:maxWeightFilterPhases | `<>` | 2 {times} code:uint32_t | pname:maxWeightFilterDimension | `<>` | 2 {times} code:uint32_t | pname:maxBlockMatchRegion | `<>` | 2 {times} code:uint32_t | pname:maxBoxFilterBlockSize | `<>` endif::VK_QCOM_image_processing[] ifdef::VK_EXT_extended_dynamic_state3[] | basetype:VkBool32 | pname:dynamicPrimitiveTopologyUnrestricted | `apiext:VK_EXT_extended_dynamic_state3` endif::VK_EXT_extended_dynamic_state3[] ifdef::VK_EXT_opacity_micromap[] | code:uint32_t | pname:maxOpacity2StateSubdivisionLevel | `apiext:VK_EXT_opacity_micromap` | code:uint32_t | pname:maxOpacity4StateSubdivisionLevel | `apiext:VK_EXT_opacity_micromap` endif::VK_EXT_opacity_micromap[] ifdef::VK_NV_memory_decompression[] | code:uint64_t | pname:maxDecompressionIndirectCount | `apiext:VK_NV_memory_decompression` endif::VK_NV_memory_decompression[] |==== [[limits-required]] .Required Limits [width="100%",cols="<35,<9,<14,<11",options="header"] |==== | Limit | Unsupported Limit | Supported Limit | Limit Type^1^ | pname:maxImageDimension1D | - | 4096 | min | pname:maxImageDimension2D | - | 4096 | min | pname:maxImageDimension3D | - | 256 | min | pname:maxImageDimensionCube | - | 4096 | min | pname:maxImageArrayLayers | - | 256 | min | pname:maxTexelBufferElements | - | 65536 | min | pname:maxUniformBufferRange | - | 16384 | min | pname:maxStorageBufferRange | - | 2^27^ | min | pname:maxPushConstantsSize | - | 128 | min | pname:maxMemoryAllocationCount | - | 4096 | min | pname:maxSamplerAllocationCount | - | 4000 | min | pname:bufferImageGranularity | - | 131072 | max | pname:sparseAddressSpaceSize | 0 | 2^31^ | min | pname:maxBoundDescriptorSets | - | 4 | min | pname:maxPerStageDescriptorSamplers | - | 16 | min | pname:maxPerStageDescriptorUniformBuffers | - | 12 | min | pname:maxPerStageDescriptorStorageBuffers | - | 4 | min | pname:maxPerStageDescriptorSampledImages | - | 16 | min | pname:maxPerStageDescriptorStorageImages | - | 4 | min | pname:maxPerStageDescriptorInputAttachments| - | 4 | min | pname:maxPerStageResources | - | 128 ^2^ | min | pname:maxDescriptorSetSamplers | - | 96 ^8^ | min, _n_ {times} PerStage | pname:maxDescriptorSetUniformBuffers | - | 72 ^8^ | min, _n_ {times} PerStage | pname:maxDescriptorSetUniformBuffersDynamic| - | 8 | min | pname:maxDescriptorSetStorageBuffers | - | 24 ^8^ | min, _n_ {times} PerStage | pname:maxDescriptorSetStorageBuffersDynamic| - | 4 | min | pname:maxDescriptorSetSampledImages | - | 96 ^8^ | min, _n_ {times} PerStage | pname:maxDescriptorSetStorageImages | - | 24 ^8^ | min, _n_ {times} PerStage | pname:maxDescriptorSetInputAttachments | - | 4 | min | pname:maxVertexInputAttributes | - | 16 | min ifndef::VK_KHR_portability_subset[] | pname:maxVertexInputBindings | - | 16 | min endif::VK_KHR_portability_subset[] ifdef::VK_KHR_portability_subset[] | pname:maxVertexInputBindings | - | 16 ^10^ | min endif::VK_KHR_portability_subset[] | pname:maxVertexInputAttributeOffset | - | 2047 | min | pname:maxVertexInputBindingStride | - | 2048 | min | pname:maxVertexOutputComponents | - | 64 | min | pname:maxTessellationGenerationLevel | 0 | 64 | min | pname:maxTessellationPatchSize | 0 | 32 | min | pname:maxTessellationControlPerVertexInputComponents | 0 |64 | min | pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min | pname:maxTessellationControlPerPatchOutputComponents | 0 |120 | min | pname:maxTessellationControlTotalOutputComponents | 0 |2048 | min | pname:maxTessellationEvaluationInputComponents | 0 |64 | min | pname:maxTessellationEvaluationOutputComponents | 0 |64 | min | pname:maxGeometryShaderInvocations | 0 | 32 | min | pname:maxGeometryInputComponents | 0 | 64 | min | pname:maxGeometryOutputComponents | 0 | 64 | min | pname:maxGeometryOutputVertices | 0 | 256 | min | pname:maxGeometryTotalOutputComponents | 0 | 1024 | min | pname:maxFragmentInputComponents | - | 64 | min | pname:maxFragmentOutputAttachments | - | 4 | min | pname:maxFragmentDualSrcAttachments | 0 | 1 | min | pname:maxFragmentCombinedOutputResources | - | 4 | min | pname:maxComputeSharedMemorySize | - | 16384 | min | pname:maxComputeWorkGroupCount | - | (65535,65535,65535) | min | pname:maxComputeWorkGroupInvocations | - | 128 | min | pname:maxComputeWorkGroupSize | - | (128,128,64) | min | pname:subPixelPrecisionBits | - | 4 | min | pname:subTexelPrecisionBits | - | 4 | min | pname:mipmapPrecisionBits | - | 4 | min | pname:maxDrawIndexedIndexValue | 2^24^-1 | 2^32^-1 | min | pname:maxDrawIndirectCount | 1 | 2^16^-1 | min | pname:maxSamplerLodBias | - | 2 | min | pname:maxSamplerAnisotropy | 1 | 16 | min | pname:maxViewports | 1 | 16 | min | pname:maxViewportDimensions | - | (4096,4096) ^3^ | min | pname:viewportBoundsRange | - | (-8192,8191) ^4^ | (max,min) | pname:viewportSubPixelBits | - | 0 | min | pname:minMemoryMapAlignment | - | 64 | min | pname:minTexelBufferOffsetAlignment | - | 256 | max | pname:minUniformBufferOffsetAlignment | - | 256 | max | pname:minStorageBufferOffsetAlignment | - | 256 | max | pname:minTexelOffset | - | -8 | max | pname:maxTexelOffset | - | 7 | min | pname:minTexelGatherOffset | 0 | -8 | max | pname:maxTexelGatherOffset | 0 | 7 | min | pname:minInterpolationOffset |0.0| -0.5 ^5^ | max | pname:maxInterpolationOffset |0.0| 0.5 - (1 ULP) ^5^ | min | pname:subPixelInterpolationOffsetBits | 0 | 4 ^5^ | min | pname:maxFramebufferWidth | - | 4096 | min | pname:maxFramebufferHeight | - | 4096 | min | pname:maxFramebufferLayers | - | 256 | min | pname:framebufferColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min ifdef::VK_VERSION_1_2[] | pname:framebufferIntegerColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT) | min endif::VK_VERSION_1_2[] | pname:framebufferDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:framebufferStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:maxColorAttachments | - | 4 | min | pname:sampledImageColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:sampledImageIntegerSampleCounts | - | ename:VK_SAMPLE_COUNT_1_BIT | min | pname:sampledImageDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:sampledImageStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:storageImageSampleCounts | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min | pname:maxSampleMaskWords | - | 1 | min | pname:timestampComputeAndGraphics | - | - |implementation-dependent | pname:timestampPeriod | - | - |duration | pname:maxClipDistances | 0 | 8 | min | pname:maxCullDistances | 0 | 8 | min | pname:maxCombinedClipAndCullDistances | 0 | 8 | min | pname:discreteQueuePriorities | - | 2 | min | pname:pointSizeRange | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min) | pname:lineWidthRange | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min) | pname:pointSizeGranularity | 0.0 | 1.0 ^6^ | max, fixed point increment | pname:lineWidthGranularity | 0.0 | 1.0 ^7^ | max, fixed point increment | pname:strictLines | - | - | implementation-dependent | pname:standardSampleLocations | - | - | implementation-dependent | pname:optimalBufferCopyOffsetAlignment | - | - | recommendation | pname:optimalBufferCopyRowPitchAlignment | - | - | recommendation | pname:nonCoherentAtomSize | - | 256 | max ifdef::VK_KHR_push_descriptor[] | pname:maxPushDescriptors | - | 32 | min endif::VK_KHR_push_descriptor[] ifdef::VK_VERSION_1_1,VK_KHR_multiview[] | pname:maxMultiviewViewCount | - | 6 | min | pname:maxMultiviewInstanceIndex | - | 2^27^-1 | min endif::VK_VERSION_1_1,VK_KHR_multiview[] ifdef::VK_EXT_discard_rectangles[] | pname:maxDiscardRectangles | 0 | 4 | min endif::VK_EXT_discard_rectangles[] ifdef::VK_EXT_sample_locations[] | pname:sampleLocationSampleCounts | - | ename:VK_SAMPLE_COUNT_4_BIT | min | pname:maxSampleLocationGridSize | - | (1,1) | min | pname:sampleLocationCoordinateRange | - | (0.0, 0.9375) | (max,min) | pname:sampleLocationSubPixelBits | - | 4 | min | pname:variableSampleLocations | - |false| implementation-dependent endif::VK_EXT_sample_locations[] ifdef::VK_EXT_external_memory_host[] | pname:minImportedHostPointerAlignment | - | 65536 | max endif::VK_EXT_external_memory_host[] ifdef::VK_NVX_multiview_per_view_attributes[] | pname:perViewPositionAllComponents | - | - | implementation-dependent endif::VK_NVX_multiview_per_view_attributes[] ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] | pname:filterMinmaxSingleComponentFormats | - | - | implementation-dependent | pname:filterMinmaxImageComponentMapping | - | - | implementation-dependent endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] ifdef::VK_EXT_blend_operation_advanced[] | pname:advancedBlendMaxColorAttachments | - | 1 | min | pname:advancedBlendIndependentBlend | - |false| implementation-dependent | pname:advancedBlendNonPremultipliedSrcColor | - |false| implementation-dependent | pname:advancedBlendNonPremultipliedDstColor | - |false| implementation-dependent | pname:advancedBlendCorrelatedOverlap | - |false| implementation-dependent | pname:advancedBlendAllOperations | - |false| implementation-dependent endif::VK_EXT_blend_operation_advanced[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[] | pname:maxPerSetDescriptors | - |1024 | min | pname:maxMemoryAllocationSize | - | 2^30^ | min endif::VK_VERSION_1_1,VK_KHR_maintenance3[] ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[] | pname:maxBufferSize | - | 2^30^ | min endif::VK_VERSION_1_3,VK_KHR_maintenance4[] ifdef::VK_EXT_conservative_rasterization[] | pname:primitiveOverestimationSize | - |0.0 | min | pname:maxExtraPrimitiveOverestimationSize | - |0.0 | min | pname:extraPrimitiveOverestimationSizeGranularity | - |0.0 | min | pname:primitiveUnderestimation | - |false | implementation-dependent | pname:conservativePointAndLineRasterization | - |false | implementation-dependent | pname:degenerateTrianglesRasterized | - |false | implementation-dependent | pname:degenerateLinesRasterized | - |false | implementation-dependent | pname:fullyCoveredFragmentShaderInputVariable | - |false | implementation-dependent | pname:conservativeRasterizationPostDepthCoverage | - |false | implementation-dependent endif::VK_EXT_conservative_rasterization[] ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] | pname:maxUpdateAfterBindDescriptorsInAllPools | 0 |500000| min | pname:shaderUniformBufferArrayNonUniformIndexingNative | - |false| implementation-dependent | pname:shaderSampledImageArrayNonUniformIndexingNative | - |false| implementation-dependent | pname:shaderStorageBufferArrayNonUniformIndexingNative | - |false| implementation-dependent | pname:shaderStorageImageArrayNonUniformIndexingNative | - |false| implementation-dependent | pname:shaderInputAttachmentArrayNonUniformIndexingNative | - |false| implementation-dependent | pname:maxPerStageDescriptorUpdateAfterBindSamplers | 0^9^ |500000 ^9^ | min | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | 0^9^ |12 ^9^ | min | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | 0^9^ |500000 ^9^ | min | pname:maxPerStageDescriptorUpdateAfterBindSampledImages | 0^9^ |500000 ^9^ | min | pname:maxPerStageDescriptorUpdateAfterBindStorageImages | 0^9^ |500000 ^9^ | min | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min | pname:maxPerStageUpdateAfterBindResources | 0^9^ |500000 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindSamplers | 0^9^ |500000 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindUniformBuffers | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindStorageBuffers | 0^9^ |500000 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindSampledImages | 0^9^ |500000 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindStorageImages | 0^9^ |500000 ^9^ | min | pname:maxDescriptorSetUpdateAfterBindInputAttachments | 0^9^ |4 ^9^ | min endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] | pname:maxInlineUniformBlockSize | - | 256 | min | pname:maxPerStageDescriptorInlineUniformBlocks | - | 4 | min | pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4 | min | pname:maxDescriptorSetInlineUniformBlocks | - | 4 | min | pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks | - | 4 | min endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[] ifdef::VK_VERSION_1_3[] | pname:maxInlineUniformTotalSize | - | 256 | min endif::VK_VERSION_1_3[] ifdef::VK_EXT_vertex_attribute_divisor[] | pname:maxVertexAttribDivisor | - | 2^16^-1 | min endif::VK_EXT_vertex_attribute_divisor[] ifdef::VK_NV_mesh_shader[] | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount | - | 2^16^-1 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations | - | 32 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize | - | (32,1,1) | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize | - | 16384 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount | - | 2^16^-1 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations | - | 32 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize | - | (32,1,1) | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize | - | 16384 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices | - | 256 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives | - | 256 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount | - | 1 | min | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity | - | - | implementation-dependent endif::VK_NV_mesh_shader[] ifdef::VK_EXT_mesh_shader[] | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount | - | 2^22 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount | - | (65535,65535,65535) | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations | - | 128 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize | - | (128,128,128) | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize | - | 16384 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize | - | 32768 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize | - | 32768 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount | - | 2^22 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount | - | (65535,65535,65535) | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations | - | 128 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize | - | (128,128,128) | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize | - | 28672 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize | - | 28672 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize | - | 32768 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize | - | 48128 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents | - | 128 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices | - | 256 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives | - | 256 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers | - | 8 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount | - | 1 | min | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity | 0 | 32 | max | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity | 0 | 32 | max | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput | - | - | implementation-dependent | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput | - | - | implementation-dependent endif::VK_EXT_mesh_shader[] ifdef::VK_EXT_transform_feedback[] | pname:maxTransformFeedbackStreams | - | 1 | min | pname:maxTransformFeedbackBuffers | - | 1 | min | pname:maxTransformFeedbackBufferSize | - | 2^27^ | min | pname:maxTransformFeedbackStreamDataSize | - | 512 | min | pname:maxTransformFeedbackBufferDataSize | - | 512 | min | pname:maxTransformFeedbackBufferDataStride | - | 512 | min | pname:transformFeedbackQueries | - | false | implementation-dependent | pname:transformFeedbackStreamsLinesTriangles | - | false | implementation-dependent | pname:transformFeedbackRasterizationStreamSelect | - | false | implementation-dependent | pname:transformFeedbackDraw | - | false | implementation-dependent endif::VK_EXT_transform_feedback[] ifdef::VK_EXT_fragment_density_map[] | pname:minFragmentDensityTexelSize | - | (1,1) | min | pname:maxFragmentDensityTexelSize | - | (1,1) | min | pname:fragmentDensityInvocations | - | - | implementation-dependent ifdef::VK_EXT_fragment_density_map2[] | pname:subsampledLoads | true | false | implementation-dependent | pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent | pname:maxSubsampledArrayLayers | 2 | 2 | min | pname:maxDescriptorSetSubsampledSamplers | 1 | 1 | min endif::VK_EXT_fragment_density_map2[] ifdef::VK_QCOM_fragment_density_map_offset[] | pname:fragmentDensityOffsetGranularity | - | (1024,1024) | max endif::VK_QCOM_fragment_density_map_offset[] endif::VK_EXT_fragment_density_map[] ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] ifdef::VK_NV_ray_tracing[] | slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16 | min | slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth | - | 31 | min endif::VK_NV_ray_tracing[] ifdef::VK_KHR_ray_tracing_pipeline[] | slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32 | exact | slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth | - | 1 | min endif::VK_KHR_ray_tracing_pipeline[] | pname:maxShaderGroupStride | - | 4096 | min | pname:shaderGroupBaseAlignment | - | 64 | max | pname:maxGeometryCount | - | 2^24^-1 | min | pname:maxInstanceCount | - | 2^24^-1 | min ifdef::VK_NV_ray_tracing[] | pname:maxTriangleCount | - | 2^29^-1 | min endif::VK_NV_ray_tracing[] ifdef::VK_KHR_acceleration_structure[] | pname:maxPrimitiveCount | - | 2^29^-1 | min | pname:maxPerStageDescriptorAccelerationStructures | - | 16 | min | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures | - | 500000 ^9^ | min endif::VK_KHR_acceleration_structure[] | pname:maxDescriptorSetAccelerationStructures | - | 16 | min endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] ifdef::VK_KHR_acceleration_structure[] | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures | - | 500000 ^9^ | min | pname:minAccelerationStructureScratchOffsetAlignment | - | 256 | max endif::VK_KHR_acceleration_structure[] ifdef::VK_KHR_ray_tracing_pipeline[] | pname:shaderGroupHandleCaptureReplaySize | - | 64 | max | pname:maxRayDispatchInvocationCount | - | 2^30^ | min | pname:shaderGroupHandleAlignment | - | 32 | max | pname:maxRayHitAttributeSize | - | 32 | min endif::VK_KHR_ray_tracing_pipeline[] ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] | pname:maxTimelineSemaphoreValueDifference | - | 2^31^-1 | min endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] ifdef::VK_EXT_line_rasterization[] | pname:lineSubPixelPrecisionBits | - | 4 | min endif::VK_EXT_line_rasterization[] ifdef::VK_NV_device_generated_commands[] | pname:maxGraphicsShaderGroupCount | - | 2^12^ | min | pname:maxIndirectSequenceCount | - | 2^20^ | min | pname:maxIndirectCommandsTokenCount | - | 16 | min | pname:maxIndirectCommandsStreamCount | - | 16 | min | pname:maxIndirectCommandsTokenOffset | - | 2047 | min | pname:maxIndirectCommandsStreamStride | - | 2048 | min | pname:minSequencesCountBufferOffsetAlignment | - | 256 | max | pname:minSequencesIndexBufferOffsetAlignment | - | 256 | max | pname:minIndirectCommandsBufferOffsetAlignment | - | 256 | max endif::VK_NV_device_generated_commands[] ifdef::VK_EXT_custom_border_color[] | pname:maxCustomBorderColorSamplers | - | 32 | min endif::VK_EXT_custom_border_color[] ifdef::VK_EXT_robustness2[] | pname:robustStorageBufferAccessSizeAlignment | - | 4 | max | pname:robustUniformBufferAccessSizeAlignment | - | 256 | max endif::VK_EXT_robustness2[] ifdef::VK_KHR_fragment_shading_rate[] | pname:minFragmentShadingRateAttachmentTexelSize | (0,0) | (32,32) | max | pname:maxFragmentShadingRateAttachmentTexelSize | (0,0) | (8,8) | min | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | 0 | 1 | min | pname:primitiveFragmentShadingRateWithMultipleViewports | false | false | implementation-dependent | pname:layeredShadingRateAttachments | false | false | implementation-dependent | pname:fragmentShadingRateNonTrivialCombinerOps | - | false | implementation-dependent | pname:maxFragmentSize | - | (2,2) | min | pname:maxFragmentSizeAspectRatio | - | 2 | min | pname:maxFragmentShadingRateCoverageSamples | - | 16 | min | pname:maxFragmentShadingRateRasterizationSamples | - | ename:VK_SAMPLE_COUNT_4_BIT | min | pname:fragmentShadingRateWithShaderDepthStencilWrites | - | false | implementation-dependent | pname:fragmentShadingRateWithSampleMask | - | false | implementation-dependent | pname:fragmentShadingRateWithShaderSampleMask | - | false | implementation-dependent | pname:fragmentShadingRateWithConservativeRasterization | - | false | implementation-dependent | pname:fragmentShadingRateWithFragmentShaderInterlock | - | false | implementation-dependent | pname:fragmentShadingRateWithCustomSampleLocations | - | false | implementation-dependent | pname:fragmentShadingRateStrictMultiplyCombiner | - | false | implementation-dependent endif::VK_KHR_fragment_shading_rate[] ifdef::VK_NV_fragment_shading_rate_enums[] | pname:maxFragmentShadingRateInvocationCount | - | ename:VK_SAMPLE_COUNT_4_BIT | min endif::VK_NV_fragment_shading_rate_enums[] ifdef::VK_EXT_descriptor_buffer[] | pname:combinedImageSamplerDescriptorSingleArray | - | false | implementation-dependent | pname:bufferlessPushDescriptors | - | false | implementation-dependent | pname:allowSamplerImageViewPostSubmitCreation | - | false | implementation-dependent | pname:descriptorBufferOffsetAlignment | - | 256 | max | pname:maxDescriptorBufferBindings | - | 3 | min | pname:maxResourceDescriptorBufferBindings | - | 1 | min | pname:maxSamplerDescriptorBufferBindings | - | 1 | min | pname:maxEmbeddedImmutableSamplerBindings | - | 1 | min | pname:maxEmbeddedImmutableSamplers | - | 2032 | min | pname:bufferCaptureReplayDescriptorDataSize | - | 64 | max | pname:imageCaptureReplayDescriptorDataSize | - | 64 | max | pname:imageViewCaptureReplayDescriptorDataSize | - | 64 | max | pname:samplerCaptureReplayDescriptorDataSize | - | 64 | max | pname:accelerationStructureCaptureReplayDescriptorDataSize | - | 64 | max | pname:samplerDescriptorSize | - | 64 | max | pname:combinedImageSamplerDescriptorSize | - | 128 | max | pname:sampledImageDescriptorSize | - | 64 | max | pname:storageImageDescriptorSize | - | 128 | max | pname:uniformTexelBufferDescriptorSize | - | 64 | max | pname:robustUniformTexelBufferDescriptorSize | - | 64 | max | pname:storageTexelBufferDescriptorSize | - | 128 | max | pname:robustStorageTexelBufferDescriptorSize | - | 128 | max | pname:uniformBufferDescriptorSize | - | 64 | max | pname:robustUniformBufferDescriptorSize | - | 64 | max | pname:storageBufferDescriptorSize | - | 128 | max | pname:robustStorageBufferDescriptorSize | - | 128 | max | pname:inputAttachmentDescriptorSize | - | 64 | max | pname:accelerationStructureDescriptorSize | - | 64 | max | pname:maxSamplerDescriptorBufferRange | - | [eq]#2^11^ {times} pname:samplerDescriptorSize# | min | pname:maxResourceDescriptorBufferRange | - | [eq]#(2^20^ - 2^15^) {times} ptext:maxResourceDescriptorSize# ^11^ | min | pname:samplerDescriptorBufferAddressSpaceSize | - | 2^27^ | min | pname:resourceDescriptorBufferAddressSpaceSize | - | 2^27^ | min | pname:descriptorBufferAddressSpaceSize | - | 2^27^ | min ifdef::VK_EXT_fragment_density_map[] | pname:combinedImageSamplerDensityMapDescriptorSize | - | 192 | max endif::VK_EXT_fragment_density_map[] endif::VK_EXT_descriptor_buffer[] ifdef::VK_HUAWEI_subpass_shading[] | pname:maxSubpassShadingWorkgroupSizeAspectRatio | 0 | 1 | min endif::VK_HUAWEI_subpass_shading[] ifdef::VK_EXT_multi_draw[] | pname:maxMultiDrawCount | - | 1024 | min endif::VK_EXT_multi_draw[] ifdef::VK_EXT_graphics_pipeline_library[] | pname:graphicsPipelineLibraryFastLinking | - | false | implementation-dependent | pname:graphicsPipelineLibraryIndependentInterpolationDecoration | - | false | implementation-dependent endif::VK_EXT_graphics_pipeline_library[] ifdef::VK_KHR_fragment_shader_barycentric[] | pname:triStripVertexOrderIndependentOfProvokingVertex | - | false | implementation-dependent endif::VK_KHR_fragment_shader_barycentric[] ifdef::VK_QCOM_image_processing[] | pname:maxWeightFilterPhases | - | 1024 | min | pname:maxWeightFilterDimension | - | (64,64) | min | pname:maxBlockMatchRegion | - | (64,64) | min | pname:maxBoxFilterBlockSize | - | (64,64) | min endif::VK_QCOM_image_processing[] ifdef::VK_EXT_extended_dynamic_state3[] | pname:dynamicPrimitiveTopologyUnrestricted | - | - | implementation-dependent endif::VK_EXT_extended_dynamic_state3[] ifdef::VK_EXT_opacity_micromap[] | pname:maxOpacity2StateSubdivisionLevel | - | 3 | min | pname:maxOpacity4StateSubdivisionLevel | - | 3 | min endif::VK_EXT_opacity_micromap[] ifdef::VK_NV_memory_decompression[] | pname:maxDecompressionIndirectCount | 1 | 2^16^-1 | min endif::VK_NV_memory_decompression[] |==== 1:: The *Limit Type* column specifies the limit is either the minimum limit all implementations must: support, the maximum limit all implementations must: support, or the exact value all implementations must: support. For bitmasks a minimum limit is the least bits all implementations must: set, but they may: have additional bits set beyond this minimum. 2:: The pname:maxPerStageResources must: be at least the smallest of the following: + * the sum of the pname:maxPerStageDescriptorUniformBuffers, pname:maxPerStageDescriptorStorageBuffers, pname:maxPerStageDescriptorSampledImages, pname:maxPerStageDescriptorStorageImages, pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments limits, or * 128. + It may: not be possible to reach this limit in every stage. 3:: See <> for the required: relationship to other limits. 4:: See <> for the required: relationship to other limits. 5:: The values pname:minInterpolationOffset and pname:maxInterpolationOffset describe the closed interval of supported interpolation offsets: [pname:minInterpolationOffset, pname:maxInterpolationOffset]. The ULP is determined by pname:subPixelInterpolationOffsetBits. If pname:subPixelInterpolationOffsetBits is 4, this provides increments of (1/2^4^) = 0.0625, and thus the range of supported interpolation offsets would be [eq]#[-0.5, 0.4375]#. 6:: The point size ULP is determined by pname:pointSizeGranularity. If the pname:pointSizeGranularity is 0.125, the range of supported point sizes must: be at least [1.0, 63.875]. 7:: The line width ULP is determined by pname:lineWidthGranularity. If the pname:lineWidthGranularity is 0.0625, the range of supported line widths must: be at least [1.0, 7.9375]. 8:: The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is the number of shader stages supported by the slink:VkPhysicalDevice. If all shader stages are supported, _n_ = 6 (vertex, tessellation control, tessellation evaluation, geometry, fragment, compute). ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 9:: The ptext:UpdateAfterBind descriptor limits must: each be greater than or equal to the corresponding ptext:non-UpdateAfterBind limit. endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] ifdef::VK_KHR_portability_subset[] 10:: If the `apiext:VK_KHR_portability_subset` extension is enabled, the required minimum value of pname:maxVertexInputBindings is code:8. endif::VK_KHR_portability_subset[] ifdef::VK_EXT_descriptor_buffer[] 11:: ptext:maxResourceDescriptorSize is defined as the maximum value of pname:storageImageDescriptorSize, pname:sampledImageDescriptorSize, pname:robustUniformTexelBufferDescriptorSize, pname:robustStorageTexelBufferDescriptorSize, pname:robustUniformBufferDescriptorSize, pname:robustStorageBufferDescriptorSize, pname:inputAttachmentDescriptorSize, and pname:accelerationStructureDescriptorSize. endif::VK_EXT_descriptor_buffer[] ifdef::VK_EXT_sample_locations[] [[limits-multisample]] == Additional Multisampling Capabilities [open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos'] -- To query additional multisampling capabilities which may: be supported for a specific sample count, beyond the minimum capabilities described for <> above, call: include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[] * pname:physicalDevice is the physical device from which to query the additional multisampling capabilities. * pname:samples is a elink:VkSampleCountFlagBits value specifying the sample count to query capabilities for. * pname:pMultisampleProperties is a pointer to a slink:VkMultisamplePropertiesEXT structure in which information about additional multisampling capabilities specific to the sample count is returned. include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[] -- [open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs'] -- The sname:VkMultisamplePropertiesEXT structure is defined as include::{generated}/api/structs/VkMultisamplePropertiesEXT.adoc[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in which sample locations can: vary. include::{generated}/validity/structs/VkMultisamplePropertiesEXT.adoc[] -- If the sample count for which additional multisampling capabilities are requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set in <> the pname:width and pname:height members of sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be greater than or equal to the corresponding members of <>, respectively, otherwise both members must: be `0`. endif::VK_EXT_sample_locations[] // If you are adding a new features structure, it must be placed at the end // of the previous section (immediately before [[limits-multisample]]). ifdef::VK_VERSION_1_3[] [[profile-limits]] == Profile Limits [[profile-limits-roadmap-2022]] === Roadmap 2022 Implementations that claim support for the <> profile must: satisfy the following additional limit requirements: [width="100%",cols="<35,<14,<11",options="header"] |==== | Limit | Supported Limit | Limit Type^1^ | pname:maxImageDimension1D | 8192 | min | pname:maxImageDimension2D | 8192 | min | pname:maxImageDimensionCube | 8192 | min | pname:maxImageArrayLayers | 2048 | min | pname:maxUniformBufferRange | 65536 | min | pname:bufferImageGranularity | 4096 | max | pname:maxPerStageDescriptorSamplers | 64 | min | pname:maxPerStageDescriptorUniformBuffers | 15 | min | pname:maxPerStageDescriptorStorageBuffers | 30 | min | pname:maxPerStageDescriptorSampledImages | 200 | min | pname:maxPerStageDescriptorStorageImages | 16 | min | pname:maxPerStageResources | 200 | min | pname:maxDescriptorSetSamplers | 576 | min | pname:maxDescriptorSetUniformBuffers | 90 | min | pname:maxDescriptorSetStorageBuffers | 96 | min | pname:maxDescriptorSetSampledImages | 1800 | min | pname:maxDescriptorSetStorageImages | 144 | min | pname:maxFragmentCombinedOutputResources | 16 | min | pname:maxComputeWorkGroupInvocations | 256 | min | pname:maxComputeWorkGroupSize | (256,256,64) | min | pname:subTexelPrecisionBits | 8 | min | pname:mipmapPrecisionBits | 6 | min | pname:maxSamplerLodBias | 14 | min | pname:pointSizeGranularity | 0.125 | max | pname:lineWidthGranularity | 0.5 | max | pname:standardSampleLocations | ename:VK_TRUE | Boolean | pname:maxColorAttachments | 7 | min | pname:subgroupSize | 4 | min | pname:subgroupSupportedStages | ename:VK_SHADER_STAGE_COMPUTE_BIT + ename:VK_SHADER_STAGE_FRAGMENT_BIT | bitfield | pname:subgroupSupportedOperations | ename:VK_SUBGROUP_FEATURE_BASIC_BIT + ename:VK_SUBGROUP_FEATURE_VOTE_BIT + ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT + ename:VK_SUBGROUP_FEATURE_BALLOT_BIT + ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT + ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT + ename:VK_SUBGROUP_FEATURE_QUAD_BIT | bitfield | pname:shaderSignedZeroInfNanPreserveFloat16 | ename:VK_TRUE | Boolean | pname:shaderSignedZeroInfNanPreserveFloat32 | ename:VK_TRUE | Boolean | pname:maxSubgroupSize | 4 | min | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 7 | min |==== endif::VK_VERSION_1_3[]