1// Copyright 2015-2021 The Khronos Group, Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5// This text fragment is used many times in the Devices and Queues, and 6// Limits chapters for different behavior, property, and limit queries. 7ifdef::hidden[] 8// tag::limits_desc[] 9If the sname:{refpage} structure is included in the pname:pNext chain of the 10slink:VkPhysicalDeviceProperties2 structure passed to 11flink:vkGetPhysicalDeviceProperties2, it is filled in with each 12corresponding implementation-dependent property. 13// end::limits_desc[] 14endif::hidden[] 15 16 17[[limits]] 18= Limits 19 20_Limits_ are implementation-dependent minimums, maximums, and other device 21characteristics that an application may: need to be aware of. 22 23ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] 24[NOTE] 25.Note 26==== 27Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as 28well as the extensible structure sname:VkPhysicalDeviceProperties2, which 29was added in `apiext:VK_KHR_get_physical_device_properties2` and included in 30Vulkan 1.1. 31When limits are added in future Vulkan versions or extensions, each 32extension should: introduce one new limit structure, if needed. 33This structure can: be added to the pname:pNext chain of the 34sname:VkPhysicalDeviceProperties2 structure. 35==== 36endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] 37 38[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs'] 39-- 40The sname:VkPhysicalDeviceLimits structure is defined as: 41 42include::{generated}/api/structs/VkPhysicalDeviceLimits.txt[] 43 44The sname:VkPhysicalDeviceLimits are properties of the physical device. 45These are available in the pname:limits member of the 46slink:VkPhysicalDeviceProperties structure which is returned from 47flink:vkGetPhysicalDeviceProperties. 48 49 * [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest 50 dimension (pname:width) that is guaranteed to be supported for all 51 images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D. 52 Some combinations of image parameters (format, usage, etc.) may: allow 53 support for larger dimensions, which can: be queried using 54 flink:vkGetPhysicalDeviceImageFormatProperties. 55 * [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest 56 dimension (pname:width or pname:height) that is guaranteed to be 57 supported for all images created with an pname:imageType of 58 ename:VK_IMAGE_TYPE_2D and without 59 ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags. 60 Some combinations of image parameters (format, usage, etc.) may: allow 61 support for larger dimensions, which can: be queried using 62 flink:vkGetPhysicalDeviceImageFormatProperties. 63 * [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest 64 dimension (pname:width, pname:height, or pname:depth) that is guaranteed 65 to be supported for all images created with an pname:imageType of 66 ename:VK_IMAGE_TYPE_3D. 67 Some combinations of image parameters (format, usage, etc.) may: allow 68 support for larger dimensions, which can: be queried using 69 flink:vkGetPhysicalDeviceImageFormatProperties. 70 * [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the 71 largest dimension (pname:width or pname:height) that is guaranteed to be 72 supported for all images created with an pname:imageType of 73 ename:VK_IMAGE_TYPE_2D and with 74 ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags. 75 Some combinations of image parameters (format, usage, etc.) may: allow 76 support for larger dimensions, which can: be queried using 77 flink:vkGetPhysicalDeviceImageFormatProperties. 78 * [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum 79 number of layers (pname:arrayLayers) for an image. 80 * [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the 81 maximum number of addressable texels for a buffer view created on a 82 buffer which was created with the 83 ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or 84 ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage 85 member of the slink:VkBufferCreateInfo structure. 86 * [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the 87 maximum value that can: be specified in the pname:range member of a 88 slink:VkDescriptorBufferInfo structure passed to 89 flink:vkUpdateDescriptorSets for descriptors of type 90 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or 91 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC. 92 * [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the 93 maximum value that can: be specified in the pname:range member of a 94 slink:VkDescriptorBufferInfo structure passed to 95 flink:vkUpdateDescriptorSets for descriptors of type 96 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or 97 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC. 98 * [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the 99 maximum size, in bytes, of the pool of push constant memory. 100 For each of the push constant ranges indicated by the 101 pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo 102 structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or 103 equal to this limit. 104 * [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is 105 the maximum number of device memory allocations, as created by 106 flink:vkAllocateMemory, which can: simultaneously exist. 107 * [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is 108 the maximum number of sampler objects, as created by 109 flink:vkCreateSampler, which can: simultaneously exist on a device. 110 * [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the 111 granularity, in bytes, at which buffer or linear image resources, and 112 optimal image resources can: be bound to adjacent offsets in the same 113 sname:VkDeviceMemory object without aliasing. 114 See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for 115 more details. 116 * [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the 117 total amount of address space available, in bytes, for sparse memory 118 resources. 119 This is an upper bound on the sum of the sizes of all sparse resources, 120 regardless of whether any memory is bound to them. 121 * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the 122 maximum number of descriptor sets that can: be simultaneously used by a 123 pipeline. 124 All code:DescriptorSet decorations in shader modules must: have a value 125 less than pname:maxBoundDescriptorSets. 126 See <<descriptorsets-sets>>. 127 * [[limits-maxPerStageDescriptorSamplers]] 128 pname:maxPerStageDescriptorSamplers is the maximum number of samplers 129 that can: be accessible to a single shader stage in a pipeline layout. 130 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or 131 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this 132 limit. 133ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 134 Only descriptors in descriptor set layouts created without the 135 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 136 count against this limit. 137endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 138 A descriptor is accessible to a shader stage when the pname:stageFlags 139 member of the sname:VkDescriptorSetLayoutBinding structure has the bit 140 for that shader stage set. 141 See <<descriptorsets-sampler>> and 142 <<descriptorsets-combinedimagesampler>>. 143 * [[limits-maxPerStageDescriptorUniformBuffers]] 144 pname:maxPerStageDescriptorUniformBuffers is the maximum number of 145 uniform buffers that can: be accessible to a single shader stage in a 146 pipeline layout. 147 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or 148 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this 149 limit. 150ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 151 Only descriptors in descriptor set layouts created without the 152 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 153 count against this limit. 154endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 155 A descriptor is accessible to a shader stage when the pname:stageFlags 156 member of the sname:VkDescriptorSetLayoutBinding structure has the bit 157 for that shader stage set. 158 See <<descriptorsets-uniformbuffer>> and 159 <<descriptorsets-uniformbufferdynamic>>. 160 * [[limits-maxPerStageDescriptorStorageBuffers]] 161 pname:maxPerStageDescriptorStorageBuffers is the maximum number of 162 storage buffers that can: be accessible to a single shader stage in a 163 pipeline layout. 164 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or 165 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this 166 limit. 167ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 168 Only descriptors in descriptor set layouts created without the 169 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 170 count against this limit. 171endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 172 A descriptor is accessible to a pipeline shader stage when the 173 pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding 174 structure has the bit for that shader stage set. 175 See <<descriptorsets-storagebuffer>> and 176 <<descriptorsets-storagebufferdynamic>>. 177 * [[limits-maxPerStageDescriptorSampledImages]] 178 pname:maxPerStageDescriptorSampledImages is the maximum number of 179 sampled images that can: be accessible to a single shader stage in a 180 pipeline layout. 181 Descriptors with a type of 182 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 183 ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or 184 ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit. 185ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 186 Only descriptors in descriptor set layouts created without the 187 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 188 count against this limit. 189endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 190 A descriptor is accessible to a pipeline shader stage when the 191 pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding 192 structure has the bit for that shader stage set. 193 See <<descriptorsets-combinedimagesampler>>, 194 <<descriptorsets-sampledimage>>, and 195 <<descriptorsets-uniformtexelbuffer>>. 196 * [[limits-maxPerStageDescriptorStorageImages]] 197 pname:maxPerStageDescriptorStorageImages is the maximum number of 198 storage images that can: be accessible to a single shader stage in a 199 pipeline layout. 200 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or 201 ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit. 202ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 203 Only descriptors in descriptor set layouts created without the 204 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 205 count against this limit. 206endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 207 A descriptor is accessible to a pipeline shader stage when the 208 pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding 209 structure has the bit for that shader stage set. 210 See <<descriptorsets-storageimage>>, and 211 <<descriptorsets-storagetexelbuffer>>. 212 * [[limits-maxPerStageDescriptorInputAttachments]] 213 pname:maxPerStageDescriptorInputAttachments is the maximum number of 214 input attachments that can: be accessible to a single shader stage in a 215 pipeline layout. 216 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT 217 count against this limit. 218ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 219 Only descriptors in descriptor set layouts created without the 220 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 221 count against this limit. 222endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 223 A descriptor is accessible to a pipeline shader stage when the 224 pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding 225 structure has the bit for that shader stage set. 226 These are only supported for the fragment stage. 227 See <<descriptorsets-inputattachment>>. 228 * [[limits-maxPerStageResources]] pname:maxPerStageResources is the 229 maximum number of resources that can: be accessible to a single shader 230 stage in a pipeline layout. 231 Descriptors with a type of 232 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 233 ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 234 ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 235 ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 236 ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 237 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 238 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 239 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 240 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or 241 ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. 242ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 243 Only descriptors in descriptor set layouts created without the 244 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 245 count against this limit. 246endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 247 For the fragment shader stage the framebuffer color attachments also 248 count against this limit. 249 * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is 250 the maximum number of samplers that can: be included in a pipeline 251 layout. 252 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or 253 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this 254 limit. 255ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 256 Only descriptors in descriptor set layouts created without the 257 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 258 count against this limit. 259endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 260 See <<descriptorsets-sampler>> and 261 <<descriptorsets-combinedimagesampler>>. 262 * [[limits-maxDescriptorSetUniformBuffers]] 263 pname:maxDescriptorSetUniformBuffers is the maximum number of uniform 264 buffers that can: be included in a pipeline layout. 265 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or 266 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this 267 limit. 268ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 269 Only descriptors in descriptor set layouts created without the 270 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 271 count against this limit. 272endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 273 See <<descriptorsets-uniformbuffer>> and 274 <<descriptorsets-uniformbufferdynamic>>. 275 * [[limits-maxDescriptorSetUniformBuffersDynamic]] 276 pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of 277 dynamic uniform buffers that can: be included in a pipeline layout. 278 Descriptors with a type of 279 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this 280 limit. 281ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 282 Only descriptors in descriptor set layouts created without the 283 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 284 count against this limit. 285endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 286 See <<descriptorsets-uniformbufferdynamic>>. 287 * [[limits-maxDescriptorSetStorageBuffers]] 288 pname:maxDescriptorSetStorageBuffers is the maximum number of storage 289 buffers that can: be included in a pipeline layout. 290 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or 291 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this 292 limit. 293ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 294 Only descriptors in descriptor set layouts created without the 295 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 296 count against this limit. 297endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 298 See <<descriptorsets-storagebuffer>> and 299 <<descriptorsets-storagebufferdynamic>>. 300 * [[limits-maxDescriptorSetStorageBuffersDynamic]] 301 pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of 302 dynamic storage buffers that can: be included in a pipeline layout. 303 Descriptors with a type of 304 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this 305 limit. 306ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 307 Only descriptors in descriptor set layouts created without the 308 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 309 count against this limit. 310endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 311 See <<descriptorsets-storagebufferdynamic>>. 312 * [[limits-maxDescriptorSetSampledImages]] 313 pname:maxDescriptorSetSampledImages is the maximum number of sampled 314 images that can: be included in a pipeline layout. 315 Descriptors with a type of 316 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 317 ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or 318 ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit. 319ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 320 Only descriptors in descriptor set layouts created without the 321 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 322 count against this limit. 323endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 324 See <<descriptorsets-combinedimagesampler>>, 325 <<descriptorsets-sampledimage>>, and 326 <<descriptorsets-uniformtexelbuffer>>. 327 * [[limits-maxDescriptorSetStorageImages]] 328 pname:maxDescriptorSetStorageImages is the maximum number of storage 329 images that can: be included in a pipeline layout. 330 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or 331 ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit. 332ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 333 Only descriptors in descriptor set layouts created without the 334 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 335 count against this limit. 336endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 337 See <<descriptorsets-storageimage>>, and 338 <<descriptorsets-storagetexelbuffer>>. 339 * [[limits-maxDescriptorSetInputAttachments]] 340 pname:maxDescriptorSetInputAttachments is the maximum number of input 341 attachments that can: be included in a pipeline layout. 342 Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT 343 count against this limit. 344ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 345 Only descriptors in descriptor set layouts created without the 346 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 347 count against this limit. 348endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 349 See <<descriptorsets-inputattachment>>. 350 * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is 351 the maximum number of vertex input attributes that can: be specified for 352 a graphics pipeline. 353 These are described in the array of 354 sname:VkVertexInputAttributeDescription structures that are provided at 355 graphics pipeline creation time via the 356 pname:pVertexAttributeDescriptions member of the 357 slink:VkPipelineVertexInputStateCreateInfo structure. 358 See <<fxvertex-attrib>> and <<fxvertex-input>>. 359 * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the 360 maximum number of vertex buffers that can: be specified for providing 361 vertex attributes to a graphics pipeline. 362 These are described in the array of 363 sname:VkVertexInputBindingDescription structures that are provided at 364 graphics pipeline creation time via the pname:pVertexBindingDescriptions 365 member of the slink:VkPipelineVertexInputStateCreateInfo structure. 366 The pname:binding member of sname:VkVertexInputBindingDescription must: 367 be less than this limit. 368 See <<fxvertex-input>>. 369 * [[limits-maxVertexInputAttributeOffset]] 370 pname:maxVertexInputAttributeOffset is the maximum vertex input 371 attribute offset that can: be added to the vertex input binding stride. 372 The pname:offset member of the sname:VkVertexInputAttributeDescription 373 structure must: be less than or equal to this limit. 374 See <<fxvertex-input>>. 375 * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride 376 is the maximum vertex input binding stride that can: be specified in a 377 vertex input binding. 378 The pname:stride member of the sname:VkVertexInputBindingDescription 379 structure must: be less than or equal to this limit. 380 See <<fxvertex-input>>. 381 * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is 382 the maximum number of components of output variables which can: be 383 output by a vertex shader. 384 See <<shaders-vertex>>. 385 * [[limits-maxTessellationGenerationLevel]] 386 pname:maxTessellationGenerationLevel is the maximum tessellation 387 generation level supported by the fixed-function tessellation primitive 388 generator. 389 See <<tessellation>>. 390 * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is 391 the maximum patch size, in vertices, of patches that can: be processed 392 by the tessellation control shader and tessellation primitive generator. 393 The pname:patchControlPoints member of the 394 slink:VkPipelineTessellationStateCreateInfo structure specified at 395 pipeline creation time and the value provided in the code:OutputVertices 396 execution mode of shader modules must: be less than or equal to this 397 limit. 398 See <<tessellation>>. 399 * [[limits-maxTessellationControlPerVertexInputComponents]] 400 pname:maxTessellationControlPerVertexInputComponents is the maximum 401 number of components of input variables which can: be provided as 402 per-vertex inputs to the tessellation control shader stage. 403 * [[limits-maxTessellationControlPerVertexOutputComponents]] 404 pname:maxTessellationControlPerVertexOutputComponents is the maximum 405 number of components of per-vertex output variables which can: be output 406 from the tessellation control shader stage. 407 * [[limits-maxTessellationControlPerPatchOutputComponents]] 408 pname:maxTessellationControlPerPatchOutputComponents is the maximum 409 number of components of per-patch output variables which can: be output 410 from the tessellation control shader stage. 411 * [[limits-maxTessellationControlTotalOutputComponents]] 412 pname:maxTessellationControlTotalOutputComponents is the maximum total 413 number of components of per-vertex and per-patch output variables which 414 can: be output from the tessellation control shader stage. 415 * [[limits-maxTessellationEvaluationInputComponents]] 416 pname:maxTessellationEvaluationInputComponents is the maximum number of 417 components of input variables which can: be provided as per-vertex 418 inputs to the tessellation evaluation shader stage. 419 * [[limits-maxTessellationEvaluationOutputComponents]] 420 pname:maxTessellationEvaluationOutputComponents is the maximum number of 421 components of per-vertex output variables which can: be output from the 422 tessellation evaluation shader stage. 423 * [[limits-maxGeometryShaderInvocations]] 424 pname:maxGeometryShaderInvocations is the maximum invocation count 425 supported for instanced geometry shaders. 426 The value provided in the code:Invocations execution mode of shader 427 modules must: be less than or equal to this limit. 428 See <<geometry>>. 429 * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents 430 is the maximum number of components of input variables which can: be 431 provided as inputs to the geometry shader stage. 432 * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents 433 is the maximum number of components of output variables which can: be 434 output from the geometry shader stage. 435 * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is 436 the maximum number of vertices which can: be emitted by any geometry 437 shader. 438 * [[limits-maxGeometryTotalOutputComponents]] 439 pname:maxGeometryTotalOutputComponents is the maximum total number of 440 components of output variables, across all emitted vertices, which can: 441 be output from the geometry shader stage. 442 * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents 443 is the maximum number of components of input variables which can: be 444 provided as inputs to the fragment shader stage. 445 * [[limits-maxFragmentOutputAttachments]] 446 pname:maxFragmentOutputAttachments is the maximum number of output 447 attachments which can: be written to by the fragment shader stage. 448 * [[limits-maxFragmentDualSrcAttachments]] 449 pname:maxFragmentDualSrcAttachments is the maximum number of output 450 attachments which can: be written to by the fragment shader stage when 451 blending is enabled and one of the dual source blend modes is in use. 452 See <<framebuffer-dsb>> and <<features-dualSrcBlend,dualSrcBlend>>. 453 * [[limits-maxFragmentCombinedOutputResources]] 454 pname:maxFragmentCombinedOutputResources is the total number of storage 455 buffers, storage images, and output code:Location decorated color 456 attachments (described in <<interfaces-fragmentoutput, Fragment Output 457 Interface>>) which can: be used in the fragment shader stage. 458 * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize 459 is the maximum total storage size, in bytes, available for variables 460 declared with the code:Workgroup storage class in shader modules (or 461 with the code:shared storage qualifier in GLSL) in the compute shader 462 stage. 463ifdef::VK_KHR_workgroup_memory_explicit_layout[] 464 When variables declared with the code:Workgroup storage class are 465 explicitly laid out (hence they are also decorated with code:Block), the 466 amount of storage consumed is the size of the largest Block variable, 467 not counting any padding at the end. 468endif::VK_KHR_workgroup_memory_explicit_layout[] 469 The amount of storage consumed by the 470ifdef::VK_KHR_workgroup_memory_explicit_layout[] 471 non-Block 472endif::VK_KHR_workgroup_memory_explicit_layout[] 473 variables declared with the code:Workgroup storage class is 474 implementation-dependent. 475 However, the amount of storage consumed may not exceed the largest block 476 size that would be obtained if all active 477ifdef::VK_KHR_workgroup_memory_explicit_layout[] 478 non-Block 479endif::VK_KHR_workgroup_memory_explicit_layout[] 480 variables declared with code:Workgroup storage class were assigned 481 offsets in an arbitrary order by successively taking the smallest valid 482 offset according to the <<interfaces-resources-standard-layout,Standard 483 Storage Buffer Layout>> rules. 484 (This is equivalent to using the GLSL std430 layout rules.) 485 * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is 486 the maximum number of local workgroups that can: be dispatched by a 487 single dispatching command. 488 These three values represent the maximum number of local workgroups for 489 the X, Y, and Z dimensions, respectively. 490 The workgroup count parameters to the dispatching commands must: be less 491 than or equal to the corresponding limit. 492 See <<dispatch>>. 493 * [[limits-maxComputeWorkGroupInvocations]] 494 pname:maxComputeWorkGroupInvocations is the maximum total number of 495 compute shader invocations in a single local workgroup. 496 The product of the X, Y, and Z sizes, as specified by the code:LocalSize 497ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 498 execution mode in shader modules or by the object decorated by the 499 code:WorkgroupSize decoration, must: be less than or equal to this 500 limit. 501 * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is 502 the maximum size of a local compute workgroup, per dimension. 503 These three values represent the maximum local workgroup size in the X, 504 Y, and Z dimensions, respectively. 505 The pname:x, pname:y, and pname:z sizes, as specified by the 506 code:LocalSize 507ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 508 execution mode or by the object decorated by the code:WorkgroupSize 509 decoration in shader modules, must: be less than or equal to the 510 corresponding limit. 511 * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the 512 number of bits of subpixel precision in framebuffer coordinates 513 [eq]#x~f~# and [eq]#y~f~#. 514 See <<primsrast>>. 515 * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the 516 number of bits of precision in the division along an axis of an image 517 used for minification and magnification filters. 518 [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions 519 along each axis of the image represented. 520 Sub-texel values calculated during image sampling will snap to these 521 locations when generating the filtered results. 522 * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number 523 of bits of division that the LOD calculation for mipmap fetching get 524 snapped to when determining the contribution from each mip level to the 525 mip filtered results. 526 [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions. 527 * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is 528 the maximum index value that can: be used for indexed draw calls when 529 using 32-bit indices. 530 This excludes the primitive restart index value of 0xFFFFFFFF. 531 See <<features-fullDrawIndexUint32,fullDrawIndexUint32>>. 532 * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the 533 maximum draw count that is supported for indirect drawing calls. 534 See <<features-multiDrawIndirect,multiDrawIndirect>>. 535 * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum 536 absolute sampler LOD bias. 537 The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo 538 structure and the code:Bias operand of image sampling operations in 539 shader modules (or 0 if no code:Bias operand is provided to an image 540 sampling operation) are clamped to the range 541 [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#. 542 See <<samplers-mipLodBias>>. 543 * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the 544 maximum degree of sampler anisotropy. 545 The maximum degree of anisotropic filtering used for an image sampling 546 operation is the minimum of the pname:maxAnisotropy member of the 547 slink:VkSamplerCreateInfo structure and this limit. 548 See <<samplers-maxAnisotropy>>. 549 * [[limits-maxViewports]] pname:maxViewports is the maximum number of 550 active viewports. 551 The pname:viewportCount member of the 552 slink:VkPipelineViewportStateCreateInfo structure that is provided at 553 pipeline creation must: be less than or equal to this limit. 554 * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the 555 maximum viewport dimensions in the X (width) and Y (height) dimensions, 556 respectively. 557 The maximum viewport dimensions must: be greater than or equal to the 558 largest image which can: be created and used as a framebuffer 559 attachment. 560 See <<vertexpostproc-viewport,Controlling the Viewport>>. 561 * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the 562 [eq]#[minimum, maximum]# range that the corners of a viewport must: be 563 contained in. 564 This range must: be at least [eq]#[-2 {times} pname:size, 2 {times} 565 pname:size - 1]#, where [eq]#pname:size = 566 max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#. 567 See <<vertexpostproc-viewport,Controlling the Viewport>>. 568+ 569[NOTE] 570.Note 571==== 572The intent of the pname:viewportBoundsRange limit is to allow a maximum 573sized viewport to be arbitrarily shifted relative to the output target as 574long as at least some portion intersects. 575This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times} 576pname:size - 1]# which would allow all possible non-empty-set intersections 577of the output target and the viewport. 578Since these numbers are typically powers of two, picking the signed number 579range using the smallest possible number of bits ends up with the specified 580range. 581==== 582 * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number 583 of bits of subpixel precision for viewport bounds. 584 The subpixel precision that floating-point viewport bounds are 585 interpreted at is given by this limit. 586 * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the 587 minimum required: alignment, in bytes, of host visible memory 588 allocations within the host address space. 589 When mapping a memory allocation with flink:vkMapMemory, subtracting 590 pname:offset bytes from the returned pointer will always produce an 591 integer multiple of this limit. 592 See <<memory-device-hostaccess>>. 593 * [[limits-minTexelBufferOffsetAlignment]] 594 pname:minTexelBufferOffsetAlignment is the minimum required: alignment, 595 in bytes, for the pname:offset member of the 596 slink:VkBufferViewCreateInfo structure for texel buffers. 597ifdef::VK_EXT_texel_buffer_alignment[] 598 If <<features-texelBufferAlignment,texelBufferAlignment>> is enabled, 599 this limit is equivalent to the maximum of the 600 <<limits-uniformTexelBufferOffsetAlignmentBytes, 601 pname:uniformTexelBufferOffsetAlignmentBytes>> and 602 <<limits-storageTexelBufferOffsetAlignmentBytes, 603 pname:storageTexelBufferOffsetAlignmentBytes>> members of 604 slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT, but smaller 605 alignment is optionally: allowed by 606 <<limits-storageTexelBufferOffsetSingleTexelAlignment, 607 pname:storageTexelBufferOffsetSingleTexelAlignment>> and 608 <<limits-uniformTexelBufferOffsetSingleTexelAlignment, 609 pname:uniformTexelBufferOffsetSingleTexelAlignment>>. 610 If <<features-texelBufferAlignment,texelBufferAlignment>> is not 611 enabled, 612endif::VK_EXT_texel_buffer_alignment[] 613 slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this 614 value. 615 * [[limits-minUniformBufferOffsetAlignment]] 616 pname:minUniformBufferOffsetAlignment is the minimum required: 617 alignment, in bytes, for the pname:offset member of the 618 sname:VkDescriptorBufferInfo structure for uniform buffers. 619 When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or 620 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the 621 pname:offset must: be an integer multiple of this limit. 622 Similarly, dynamic offsets for uniform buffers must: be multiples of 623 this limit. 624 * [[limits-minStorageBufferOffsetAlignment]] 625 pname:minStorageBufferOffsetAlignment is the minimum required: 626 alignment, in bytes, for the pname:offset member of the 627 sname:VkDescriptorBufferInfo structure for storage buffers. 628 When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or 629 ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the 630 pname:offset must: be an integer multiple of this limit. 631 Similarly, dynamic offsets for storage buffers must: be multiples of 632 this limit. 633 * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset 634 value for the code:ConstOffset image operand of any of the 635 code:OpImageSample* or code:OpImageFetch* image instructions. 636 * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset 637 value for the code:ConstOffset image operand of any of the 638 code:OpImageSample* or code:OpImageFetch* image instructions. 639 * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the 640 minimum offset value for the code:Offset, code:ConstOffset, or 641 code:ConstOffsets image operands of any of the code:OpImage*Gather image 642 instructions. 643 * [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the 644 maximum offset value for the code:Offset, code:ConstOffset, or 645 code:ConstOffsets image operands of any of the code:OpImage*Gather image 646 instructions. 647 * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the 648 base minimum (inclusive) negative offset value for the code:Offset 649 operand of the code:InterpolateAtOffset extended instruction. 650 * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the 651 base maximum (inclusive) positive offset value for the code:Offset 652 operand of the code:InterpolateAtOffset extended instruction. 653 * [[limits-subPixelInterpolationOffsetBits]] 654 pname:subPixelInterpolationOffsetBits is the number of fractional bits 655 that the code:x and code:y offsets to the code:InterpolateAtOffset 656 extended instruction may: be rounded to as fixed-point values. 657 * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum 658 width for a framebuffer. 659 The pname:width member of the slink:VkFramebufferCreateInfo structure 660 must: be less than or equal to this limit. 661 * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the 662 maximum height for a framebuffer. 663 The pname:height member of the slink:VkFramebufferCreateInfo structure 664 must: be less than or equal to this limit. 665 * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the 666 maximum layer count for a layered framebuffer. 667 The pname:layers member of the slink:VkFramebufferCreateInfo structure 668 must: be less than or equal to this limit. 669 * [[limits-framebufferColorSampleCounts]] 670 pname:framebufferColorSampleCounts is a bitmask^1^ of 671 elink:VkSampleCountFlagBits indicating the color sample counts that are 672 supported for all framebuffer color attachments with floating- or 673 fixed-point formats. 674ifndef::VK_VERSION_1_2[] 675 There is no limit specifying the color sample counts that are supported 676 for all color attachments with integer formats. 677endif::VK_VERSION_1_2[] 678ifdef::VK_VERSION_1_2[] 679 For color attachments with integer formats, see 680 <<limits-framebufferIntegerColorSampleCounts, 681 pname:framebufferIntegerColorSampleCounts>>. 682endif::VK_VERSION_1_2[] 683 * [[limits-framebufferDepthSampleCounts]] 684 pname:framebufferDepthSampleCounts is a bitmask^1^ of 685 elink:VkSampleCountFlagBits indicating the supported depth sample counts 686 for all framebuffer depth/stencil attachments, when the format includes 687 a depth component. 688 * [[limits-framebufferStencilSampleCounts]] 689 pname:framebufferStencilSampleCounts is a bitmask^1^ of 690 elink:VkSampleCountFlagBits indicating the supported stencil sample 691 counts for all framebuffer depth/stencil attachments, when the format 692 includes a stencil component. 693 * [[limits-framebufferNoAttachmentsSampleCounts]] 694 pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of 695 elink:VkSampleCountFlagBits indicating the supported sample counts for a 696 <<renderpass-noattachments, subpass which uses no attachments>>. 697 * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum 698 number of color attachments that can: be used by a subpass in a render 699 pass. 700 The pname:colorAttachmentCount member of the sname:VkSubpassDescription 701ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[] 702 or sname:VkSubpassDescription2 703endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[] 704 structure must: be less than or equal to this limit. 705 * [[limits-sampledImageColorSampleCounts]] 706 pname:sampledImageColorSampleCounts is a bitmask^1^ of 707 elink:VkSampleCountFlagBits indicating the sample counts supported for 708 all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage 709 containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color 710 format. 711 * [[limits-sampledImageIntegerSampleCounts]] 712 pname:sampledImageIntegerSampleCounts is a bitmask^1^ of 713 elink:VkSampleCountFlagBits indicating the sample counts supported for 714 all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage 715 containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color 716 format. 717 * [[limits-sampledImageDepthSampleCounts]] 718 pname:sampledImageDepthSampleCounts is a bitmask^1^ of 719 elink:VkSampleCountFlagBits indicating the sample counts supported for 720 all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage 721 containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format. 722 * [[limits-sampledImageStencilSampleCounts]] 723 pname:sampledImageStencilSampleCounts is a bitmask^1^ of 724 elink:VkSampleCountFlagBits indicating the sample counts supported for 725 all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage 726 containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format. 727 * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a 728 bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts 729 supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, 730 and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT. 731 * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum 732 number of array elements of a variable decorated with the 733 code:SampleMask built-in decoration. 734 * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics 735 specifies support for timestamps on all graphics and compute queues. 736 If this limit is set to ename:VK_TRUE, all queues that advertise the 737 ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the 738 sname:VkQueueFamilyProperties::pname:queueFlags support 739 sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36. 740 See <<queries-timestamps, Timestamp Queries>>. 741 * [[limits-timestampPeriod]] pname:timestampPeriod is the number of 742 nanoseconds required: for a timestamp query to be incremented by 1. 743 See <<queries-timestamps, Timestamp Queries>>. 744 * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number 745 of clip distances that can: be used in a single shader stage. 746 The size of any array declared with the code:ClipDistance built-in 747 decoration in a shader module must: be less than or equal to this limit. 748 * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number 749 of cull distances that can: be used in a single shader stage. 750 The size of any array declared with the code:CullDistance built-in 751 decoration in a shader module must: be less than or equal to this limit. 752 * [[limits-maxCombinedClipAndCullDistances]] 753 pname:maxCombinedClipAndCullDistances is the maximum combined number of 754 clip and cull distances that can: be used in a single shader stage. 755 The sum of the sizes of any pair of arrays declared with the 756 code:ClipDistance and code:CullDistance built-in decoration used by a 757 single shader stage in a shader module must: be less than or equal to 758 this limit. 759 * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the 760 number of discrete priorities that can: be assigned to a queue based on 761 the value of each member of 762 slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities. 763 This must: be at least 2, and levels must: be spread evenly over the 764 range, with at least one level at 1.0, and another at 0.0. 765 See <<devsandqueues-priority>>. 766 * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range 767 [eq]#[pname:minimum,pname:maximum]# of supported sizes for points. 768 Values written to variables decorated with the code:PointSize built-in 769 decoration are clamped to this range. 770 * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range 771 [eq]#[pname:minimum,pname:maximum]# of supported widths for lines. 772 Values specified by the pname:lineWidth member of the 773 slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth 774 parameter to fname:vkCmdSetLineWidth are clamped to this range. 775 * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the 776 granularity of supported point sizes. 777 Not all point sizes in the range defined by pname:pointSizeRange are 778 supported. 779 This limit specifies the granularity (or increment) between successive 780 supported point sizes. 781 * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the 782 granularity of supported line widths. 783 Not all line widths in the range defined by pname:lineWidthRange are 784 supported. 785 This limit specifies the granularity (or increment) between successive 786 supported line widths. 787 * [[limits-strictLines]] pname:strictLines specifies whether lines are 788 rasterized according to the preferred method of rasterization. 789 If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set 790 of rules. 791 If set to ename:VK_TRUE, lines are rasterized as per the strict 792 definition. 793 See <<primsrast-lines-basic,Basic Line Segment Rasterization>>. 794 * [[limits-standardSampleLocations]] pname:standardSampleLocations 795 specifies whether rasterization uses the standard sample locations as 796 documented in <<primsrast-multisampling,Multisampling>>. 797 If set to ename:VK_TRUE, the implementation uses the documented sample 798 locations. 799 If set to ename:VK_FALSE, the implementation may: use different sample 800 locations. 801 * [[limits-optimalBufferCopyOffsetAlignment]] 802 pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset 803 alignment in bytes for 804ifndef::VK_KHR_copy_commands2[] 805 flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer. 806endif::VK_KHR_copy_commands2[] 807ifdef::VK_KHR_copy_commands2[] 808 flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage, 809 flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer. 810endif::VK_KHR_copy_commands2[] 811 The per texel alignment requirements are enforced, but applications 812 should: use the optimal alignment for optimal performance and power use. 813 * [[limits-optimalBufferCopyRowPitchAlignment]] 814 pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch 815 alignment in bytes for 816ifndef::VK_KHR_copy_commands2[] 817 flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer. 818endif::VK_KHR_copy_commands2[] 819ifdef::VK_KHR_copy_commands2[] 820 flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage, 821 flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer. 822endif::VK_KHR_copy_commands2[] 823 Row pitch is the number of bytes between texels with the same X 824 coordinate in adjacent rows (Y coordinates differ by one). 825 The per texel alignment requirements are enforced, but applications 826 should: use the optimal alignment for optimal performance and power use. 827 * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and 828 alignment in bytes that bounds concurrent access to 829 <<memory-device-hostaccess, host-mapped device memory>>. 830 8311:: 832 For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits 833 defined above represent the minimum supported sample counts for each 834 image type. 835 Individual images may: support additional sample counts, which are 836 queried using flink:vkGetPhysicalDeviceImageFormatProperties as 837 described in <<features-supported-sample-counts, Supported Sample 838 Counts>>. 839 840include::{generated}/validity/structs/VkPhysicalDeviceLimits.txt[] 841-- 842 843 844[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums'] 845-- 846Bits which may: be set in the sample count limits returned by 847slink:VkPhysicalDeviceLimits, as well as in other queries and structures 848representing image sample counts, are: 849 850include::{generated}/api/enums/VkSampleCountFlagBits.txt[] 851 852 * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per 853 pixel. 854 * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel. 855 * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel. 856 * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel. 857 * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per 858 pixel. 859 * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per 860 pixel. 861 * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per 862 pixel. 863-- 864 865[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags'] 866-- 867include::{generated}/api/flags/VkSampleCountFlags.txt[] 868 869tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or 870more elink:VkSampleCountFlagBits. 871-- 872 873ifdef::VK_KHR_push_descriptor[] 874[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs'] 875-- 876The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined 877as: 878 879include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[] 880 881 * pname:sType is the type of this structure. 882 * pname:pNext is `NULL` or a pointer to a structure extending this 883 structure. 884 * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum 885 number of descriptors that can: be used in a descriptor set created with 886 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set. 887 888:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR 889include::{chapters}/limits.txt[tag=limits_desc] 890 891include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[] 892-- 893endif::VK_KHR_push_descriptor[] 894 895ifdef::VK_VERSION_1_1,VK_KHR_multiview[] 896[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs'] 897-- 898The sname:VkPhysicalDeviceMultiviewProperties structure is defined as: 899 900include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.txt[] 901 902ifdef::VK_KHR_multiview[] 903or the equivalent 904 905include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[] 906endif::VK_KHR_multiview[] 907 908 * pname:sType is the type of this structure. 909 * pname:pNext is `NULL` or a pointer to a structure extending this 910 structure. 911 912// Must have preceding whitespace 913ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 914ifndef::VK_VERSION_1_2[:anchor-prefix:] 915// tag::VK_KHR_multiview-properties[] 916 * [[{anchor-prefix}limits-maxMultiviewViewCount]] 917 pname:maxMultiviewViewCount is one greater than the maximum view index 918 that can: be used in a subpass. 919 * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]] 920 pname:maxMultiviewInstanceIndex is the maximum valid value of instance 921 index allowed to be generated by a drawing command recorded within a 922 subpass of a multiview render pass instance. 923// end::VK_KHR_multiview-properties[] 924 925:refpage: VkPhysicalDeviceMultiviewProperties 926include::{chapters}/limits.txt[tag=limits_desc] 927 928include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.txt[] 929-- 930endif::VK_VERSION_1_1,VK_KHR_multiview[] 931 932ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[] 933[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR'] 934-- 935The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as: 936 937include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.txt[] 938 939ifdef::VK_KHR_shader_float_controls[] 940or the equivalent 941 942include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[] 943endif::VK_KHR_shader_float_controls[] 944 945 * pname:sType is the type of this structure. 946 * pname:pNext is `NULL` or a pointer to a structure extending this 947 structure. 948 949// Must have preceding whitespace 950ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 951ifndef::VK_VERSION_1_2[:anchor-prefix:] 952// tag::VK_KHR_shader_float_controls-properties[] 953 * [[{anchor-prefix}features-denormBehaviorIndependence]] 954 pname:denormBehaviorIndependence is a 955 elink:VkShaderFloatControlsIndependence value indicating whether, and 956 how, denorm behavior can be set independently for different bit widths. 957 * [[{anchor-prefix}features-roundingModeIndependence]] 958 pname:roundingModeIndependence is a 959 elink:VkShaderFloatControlsIndependence value indicating whether, and 960 how, rounding modes can be set independently for different bit widths. 961 * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]] 962 pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value 963 indicating whether sign of a zero, [eq]##Nan##s and 964 latexmath:[\pm\infty] can: be preserved in 16-bit floating-point 965 computations. 966 It also indicates whether the code:SignedZeroInfNanPreserve execution 967 mode can: be used for 16-bit floating-point types. 968 * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]] 969 pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value 970 indicating whether sign of a zero, [eq]##Nan##s and 971 latexmath:[\pm\infty] can: be preserved in 32-bit floating-point 972 computations. 973 It also indicates whether the code:SignedZeroInfNanPreserve execution 974 mode can: be used for 32-bit floating-point types. 975 * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]] 976 pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value 977 indicating whether sign of a zero, [eq]##Nan##s and 978 latexmath:[\pm\infty] can: be preserved in 64-bit floating-point 979 computations. 980 It also indicates whether the code:SignedZeroInfNanPreserve execution 981 mode can: be used for 64-bit floating-point types. 982 * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]] 983 pname:shaderDenormPreserveFloat16 is a boolean value indicating whether 984 denormals can: be preserved in 16-bit floating-point computations. 985 It also indicates whether the code:DenormPreserve execution mode can: be 986 used for 16-bit floating-point types. 987 * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]] 988 pname:shaderDenormPreserveFloat32 is a boolean value indicating whether 989 denormals can: be preserved in 32-bit floating-point computations. 990 It also indicates whether the code:DenormPreserve execution mode can: be 991 used for 32-bit floating-point types. 992 * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]] 993 pname:shaderDenormPreserveFloat64 is a boolean value indicating whether 994 denormals can: be preserved in 64-bit floating-point computations. 995 It also indicates whether the code:DenormPreserve execution mode can: be 996 used for 64-bit floating-point types. 997 * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]] 998 pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating 999 whether denormals can: be flushed to zero in 16-bit floating-point 1000 computations. 1001 It also indicates whether the code:DenormFlushToZero execution mode can: 1002 be used for 16-bit floating-point types. 1003 * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]] 1004 pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating 1005 whether denormals can: be flushed to zero in 32-bit floating-point 1006 computations. 1007 It also indicates whether the code:DenormFlushToZero execution mode can: 1008 be used for 32-bit floating-point types. 1009 * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]] 1010 pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating 1011 whether denormals can: be flushed to zero in 64-bit floating-point 1012 computations. 1013 It also indicates whether the code:DenormFlushToZero execution mode can: 1014 be used for 64-bit floating-point types. 1015 * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]] 1016 pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether 1017 an implementation supports the round-to-nearest-even rounding mode for 1018 16-bit floating-point arithmetic and conversion instructions. 1019 It also indicates whether the code:RoundingModeRTE execution mode can: 1020 be used for 16-bit floating-point types. 1021 * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]] 1022 pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether 1023 an implementation supports the round-to-nearest-even rounding mode for 1024 32-bit floating-point arithmetic and conversion instructions. 1025 It also indicates whether the code:RoundingModeRTE execution mode can: 1026 be used for 32-bit floating-point types. 1027 * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]] 1028 pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether 1029 an implementation supports the round-to-nearest-even rounding mode for 1030 64-bit floating-point arithmetic and conversion instructions. 1031 It also indicates whether the code:RoundingModeRTE execution mode can: 1032 be used for 64-bit floating-point types. 1033 * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]] 1034 pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether 1035 an implementation supports the round-towards-zero rounding mode for 1036 16-bit floating-point arithmetic and conversion instructions. 1037 It also indicates whether the code:RoundingModeRTZ execution mode can: 1038 be used for 16-bit floating-point types. 1039 * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]] 1040 pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether 1041 an implementation supports the round-towards-zero rounding mode for 1042 32-bit floating-point arithmetic and conversion instructions. 1043 It also indicates whether the code:RoundingModeRTZ execution mode can: 1044 be used for 32-bit floating-point types. 1045 * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]] 1046 pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether 1047 an implementation supports the round-towards-zero rounding mode for 1048 64-bit floating-point arithmetic and conversion instructions. 1049 It also indicates whether the code:RoundingModeRTZ execution mode can: 1050 be used for 64-bit floating-point types. 1051// end::VK_KHR_shader_float_controls-properties[] 1052 1053ifdef::editing-notes[] 1054[NOTE] 1055.editing-note 1056==== 1057Implementations may not be able to control behavior of denorms for 1058floating-point atomics. 1059This needs to be taken into account when such atomics will be added to 1060Vulkan. 1061==== 1062endif::editing-notes[] 1063 1064:refpage: VkPhysicalDeviceFloatControlsProperties 1065include::{chapters}/limits.txt[tag=limits_desc] 1066 1067include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.txt[] 1068-- 1069 1070[open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR'] 1071-- 1072Values which may: be returned in the pname:denormBehaviorIndependence and 1073pname:roundingModeIndependence fields of 1074sname:VkPhysicalDeviceFloatControlsProperties are: 1075 1076include::{generated}/api/enums/VkShaderFloatControlsIndependence.txt[] 1077 1078ifdef::VK_KHR_shader_float_controls[] 1079or the equivalent 1080 1081include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.txt[] 1082endif::VK_KHR_shader_float_controls[] 1083 1084 * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that 1085 shader float controls for 32-bit floating point can: be set 1086 independently; other bit widths must: be set identically to each other. 1087 * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader 1088 float controls for all bit widths can: be set independently. 1089 * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader 1090 float controls for all bit widths must: be set identically. 1091-- 1092endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[] 1093 1094ifdef::VK_EXT_discard_rectangles[] 1095[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs'] 1096-- 1097The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined 1098as: 1099 1100include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[] 1101 1102 * pname:sType is the type of this structure. 1103 * pname:pNext is `NULL` or a pointer to a structure extending this 1104 structure. 1105 * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the 1106 maximum number of active discard rectangles that can: be specified. 1107 1108:refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT 1109include::{chapters}/limits.txt[tag=limits_desc] 1110 1111include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[] 1112-- 1113endif::VK_EXT_discard_rectangles[] 1114 1115ifdef::VK_EXT_sample_locations[] 1116[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs'] 1117-- 1118The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined 1119as: 1120 1121include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[] 1122 1123 * pname:sType is the type of this structure. 1124 * pname:pNext is `NULL` or a pointer to a structure extending this 1125 structure. 1126 * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts 1127 is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts 1128 supporting custom sample locations. 1129 * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is 1130 the maximum size of the pixel grid in which sample locations can: vary 1131 that is supported for all sample counts in 1132 pname:sampleLocationSampleCounts. 1133 * [[limits-sampleLocationCoordinateRange]] 1134 pname:sampleLocationCoordinateRange[2] is the range of supported sample 1135 location coordinates. 1136 * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits 1137 is the number of bits of subpixel precision for sample locations. 1138 * [[limits-variableSampleLocations]] pname:variableSampleLocations 1139 specifies whether the sample locations used by all pipelines that will 1140 be bound to a command buffer during a subpass must: match. 1141 If set to ename:VK_TRUE, the implementation supports variable sample 1142 locations in a subpass. 1143 If set to ename:VK_FALSE, then the sample locations must: stay constant 1144 in each subpass. 1145 1146:refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT 1147include::{chapters}/limits.txt[tag=limits_desc] 1148 1149include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[] 1150-- 1151endif::VK_EXT_sample_locations[] 1152 1153ifdef::VK_EXT_external_memory_host[] 1154[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs'] 1155-- 1156The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is 1157defined as: 1158 1159include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[] 1160 1161 * pname:sType is the type of this structure. 1162 * pname:pNext is `NULL` or a pointer to a structure extending this 1163 structure. 1164 * [[limits-minImportedHostPointerAlignment]] 1165 pname:minImportedHostPointerAlignment is the minimum required: 1166 alignment, in bytes, for the base address and size of host pointers that 1167 can: be imported to a Vulkan memory object. 1168 The value must: be a power of two. 1169 1170:refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT 1171include::{chapters}/limits.txt[tag=limits_desc] 1172 1173include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[] 1174-- 1175endif::VK_EXT_external_memory_host[] 1176 1177ifdef::VK_NVX_multiview_per_view_attributes[] 1178[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs'] 1179-- 1180The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure 1181is defined as: 1182 1183include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[] 1184 1185 * pname:sType is the type of this structure. 1186 * pname:pNext is `NULL` or a pointer to a structure extending this 1187 structure. 1188 * [[limits-perViewPositionAllComponents]] 1189 pname:perViewPositionAllComponents is ename:VK_TRUE if the 1190 implementation supports per-view position values that differ in 1191 components other than the X component. 1192 1193:refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX 1194include::{chapters}/limits.txt[tag=limits_desc] 1195 1196include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[] 1197-- 1198endif::VK_NVX_multiview_per_view_attributes[] 1199 1200ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] 1201[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs'] 1202-- 1203The sname:VkPhysicalDevicePointClippingProperties structure is defined as: 1204 1205include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.txt[] 1206 1207ifdef::VK_KHR_maintenance2[] 1208or the equivalent 1209 1210include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.txt[] 1211endif::VK_KHR_maintenance2[] 1212 1213 * pname:sType is the type of this structure. 1214 * pname:pNext is `NULL` or a pointer to a structure extending this 1215 structure. 1216 1217// Must have preceding whitespace 1218ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1219ifndef::VK_VERSION_1_2[:anchor-prefix:] 1220// tag::VK_KHR_maintenance2-properties[] 1221 * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a 1222 elink:VkPointClippingBehavior value specifying the point clipping 1223 behavior supported by the implementation. 1224// end::VK_KHR_maintenance2-properties[] 1225 1226:refpage: VkPhysicalDevicePointClippingProperties 1227include::{chapters}/limits.txt[tag=limits_desc] 1228 1229include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.txt[] 1230-- 1231endif::VK_VERSION_1_1,VK_KHR_maintenance2[] 1232 1233ifdef::VK_VERSION_1_1[] 1234[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs'] 1235-- 1236The sname:VkPhysicalDeviceSubgroupProperties structure is defined as: 1237 1238include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.txt[] 1239 1240 * pname:sType is the type of this structure. 1241 * pname:pNext is `NULL` or a pointer to a structure extending this 1242 structure. 1243 1244// Must have preceding whitespace 1245ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1246ifndef::VK_VERSION_1_2[:anchor-prefix:] 1247// tag::VK_KHR_subgroup-properties[] 1248 * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the 1249 default number of invocations in each subgroup. 1250 pname:subgroupSize is at least 1 if any of the physical device's queues 1251 support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT. 1252 pname:subgroupSize is a power-of-two. 1253 * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield 1254 of elink:VkShaderStageFlagBits describing the shader stages that 1255 <<shaders-group-operations, group operations>> with 1256 <<shaders-scope-subgroup, subgroup scope>> are supported in. 1257 pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT 1258 bit set if any of the physical device's queues support 1259 ename:VK_QUEUE_COMPUTE_BIT. 1260 * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a 1261 bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of 1262 <<shaders-group-operations, group operations>> with 1263 <<shaders-scope-subgroup, subgroup scope>> supported on this device. 1264 pname:supportedOperations will have the 1265 ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical 1266 device's queues support ename:VK_QUEUE_GRAPHICS_BIT or 1267 ename:VK_QUEUE_COMPUTE_BIT. 1268 * [[limits-subgroup-quadOperationsInAllStages]] 1269 pname:quadOperationsInAllStages is a boolean specifying whether 1270 <<shaders-quad-operations,quad group operations>> are available in all 1271 stages, or are restricted to fragment and compute stages. 1272// end::VK_KHR_subgroup-properties[] 1273 1274:refpage: VkPhysicalDeviceSubgroupProperties 1275include::{chapters}/limits.txt[tag=limits_desc] 1276 1277If pname:supportedOperations includes <<features-subgroup-quad, 1278ename:VK_SUBGROUP_FEATURE_QUAD_BIT,>> 1279ifdef::VK_KHR_shader_subgroup_uniform_control_flow[] 1280or <<features-shaderSubgroupUniformControlFlow, 1281pname:shaderSubgroupUniformControlFlow>> is enabled, 1282endif::VK_KHR_shader_subgroup_uniform_control_flow[] 1283pname:subgroupSize must: be greater than or equal to 4. 1284 1285include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.txt[] 1286-- 1287 1288[open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums'] 1289-- 1290Bits which can: be set in 1291slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations 1292ifdef::VK_VERSION_1_2[] 1293and 1294slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations 1295endif::VK_VERSION_1_2[] 1296to specify supported <<shaders-group-operations, group operations>> with 1297<<shaders-scope-subgroup, subgroup scope>> are: 1298 1299include::{generated}/api/enums/VkSubgroupFeatureFlagBits.txt[] 1300 1301 * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT 1302 specifies the device will accept SPIR-V shader modules containing the 1303 code:GroupNonUniform capability. 1304 * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies 1305 the device will accept SPIR-V shader modules containing the 1306 code:GroupNonUniformVote capability. 1307 * [[features-subgroup-arithmetic]] 1308 ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will 1309 accept SPIR-V shader modules containing the 1310 code:GroupNonUniformArithmetic capability. 1311 * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT 1312 specifies the device will accept SPIR-V shader modules containing the 1313 code:GroupNonUniformBallot capability. 1314 * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT 1315 specifies the device will accept SPIR-V shader modules containing the 1316 code:GroupNonUniformShuffle capability. 1317 * [[features-subgroup-shuffle-relative]] 1318 ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will 1319 accept SPIR-V shader modules containing the 1320 code:GroupNonUniformShuffleRelative capability. 1321 * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT 1322 specifies the device will accept SPIR-V shader modules containing the 1323 code:GroupNonUniformClustered capability. 1324 * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies 1325 the device will accept SPIR-V shader modules containing the 1326 code:GroupNonUniformQuad capability. 1327ifdef::VK_NV_shader_subgroup_partitioned[] 1328 * [[features-subgroup-partitioned]] 1329 ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will 1330 accept SPIR-V shader modules containing the 1331 code:GroupNonUniformPartitionedNV capability. 1332endif::VK_NV_shader_subgroup_partitioned[] 1333-- 1334 1335[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags'] 1336-- 1337include::{generated}/api/flags/VkSubgroupFeatureFlags.txt[] 1338 1339tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or 1340more elink:VkSubgroupFeatureFlagBits. 1341-- 1342 1343ifdef::VK_EXT_subgroup_size_control[] 1344[open,refpage='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT',desc='Structure describing the control subgroup size properties of an implementation',type='structs'] 1345-- 1346The sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is 1347defined as: 1348 1349include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[] 1350 1351 * pname:sType is the type of this structure. 1352 * pname:pNext is `NULL` or a pointer to a structure extending this 1353 structure. 1354 * [[limits-min-subgroup-size]] pname:minSubgroupSize is the minimum 1355 subgroup size supported by this device. 1356 pname:minSubgroupSize is at least one if any of the physical device's 1357 queues support ename:VK_QUEUE_GRAPHICS_BIT or 1358 ename:VK_QUEUE_COMPUTE_BIT. 1359 pname:minSubgroupSize is a power-of-two. 1360 pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize. 1361 pname:minSubgroupSize is less than or equal to 1362 <<limits-subgroup-size,subgroupSize>>. 1363 * [[limits-max-subgroup-size]] pname:maxSubgroupSize is the maximum 1364 subgroup size supported by this device. 1365 pname:maxSubgroupSize is at least one if any of the physical device's 1366 queues support ename:VK_QUEUE_GRAPHICS_BIT or 1367 ename:VK_QUEUE_COMPUTE_BIT. 1368 pname:maxSubgroupSize is a power-of-two. 1369 pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize. 1370 pname:maxSubgroupSize is greater than or equal to 1371 <<limits-subgroup-size,subgroupSize>>. 1372 * [[limits-max-subgroups-per-workgroup]] 1373 pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups 1374 supported by the implementation within a workgroup. 1375 * [[limits-required-subgroup-size-stages]] 1376 pname:requiredSubgroupSizeStages is a bitfield of what shader stages 1377 support having a required subgroup size specified. 1378 1379:refpage: VkPhysicalDeviceSubgroupSizeControlPropertiesEXT 1380include::{chapters}/limits.txt[tag=limits_desc] 1381 1382If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations 1383includes <<features-subgroup-quad, ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>, 1384pname:minSubgroupSize must: be greater than or equal to 4. 1385 1386include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[] 1387-- 1388endif::VK_EXT_subgroup_size_control[] 1389endif::VK_VERSION_1_1[] 1390 1391ifdef::VK_EXT_blend_operation_advanced[] 1392[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs'] 1393-- 1394The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is 1395defined as: 1396 1397include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[] 1398 1399 * pname:sType is the type of this structure. 1400 * pname:pNext is `NULL` or a pointer to a structure extending this 1401 structure. 1402 * [[limits-advancedBlendMaxColorAttachments]] 1403 pname:advancedBlendMaxColorAttachments is one greater than the highest 1404 color attachment index that can: be used in a subpass, for a pipeline 1405 that uses an <<framebuffer-blend-advanced,advanced blend operation>>. 1406 * [[limits-advancedBlendIndependentBlend]] 1407 pname:advancedBlendIndependentBlend specifies whether advanced blend 1408 operations can: vary per-attachment. 1409 * [[limits-advancedBlendNonPremultipliedSrcColor]] 1410 pname:advancedBlendNonPremultipliedSrcColor specifies whether the source 1411 color can: be treated as non-premultiplied. 1412 If this is ename:VK_FALSE, then 1413 slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied 1414 must: be ename:VK_TRUE. 1415 * [[limits-advancedBlendNonPremultipliedDstColor]] 1416 pname:advancedBlendNonPremultipliedDstColor specifies whether the 1417 destination color can: be treated as non-premultiplied. 1418 If this is ename:VK_FALSE, then 1419 slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied 1420 must: be ename:VK_TRUE. 1421 * [[limits-advancedBlendCorrelatedOverlap]] 1422 pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode 1423 can: be treated as correlated. 1424 If this is ename:VK_FALSE, then 1425 slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap 1426 must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT. 1427 * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations 1428 specifies whether all advanced blend operation enums are supported. 1429 See the valid usage of slink:VkPipelineColorBlendAttachmentState. 1430 1431:refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT 1432include::{chapters}/limits.txt[tag=limits_desc] 1433 1434include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[] 1435-- 1436endif::VK_EXT_blend_operation_advanced[] 1437 1438ifdef::VK_EXT_vertex_attribute_divisor[] 1439[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs'] 1440-- 1441The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is 1442defined as: 1443 1444include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[] 1445 1446 * pname:sType is the type of this structure. 1447 * pname:pNext is `NULL` or a pointer to a structure extending this 1448 structure. 1449 * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the 1450 maximum value of the number of instances that will repeat the value of 1451 vertex attribute data when instanced rendering is enabled. 1452 1453:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT 1454include::{chapters}/limits.txt[tag=limits_desc] 1455 1456include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[] 1457-- 1458endif::VK_EXT_vertex_attribute_divisor[] 1459 1460ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 1461[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT'] 1462-- 1463The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined 1464as: 1465 1466include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[] 1467 1468ifdef::VK_EXT_sampler_filter_minmax[] 1469or the equivalent 1470 1471include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[] 1472endif::VK_EXT_sampler_filter_minmax[] 1473 1474 * pname:sType is the type of this structure. 1475 * pname:pNext is `NULL` or a pointer to a structure extending this 1476 structure. 1477 1478// Must have preceding whitespace 1479ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1480ifndef::VK_VERSION_1_2[:anchor-prefix:] 1481// tag::VK_EXT_sampler_filter_minmax-properties[] 1482 * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]] 1483 pname:filterMinmaxSingleComponentFormats is a boolean value indicating 1484 whether a minimum set of required formats support min/max filtering. 1485 * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]] 1486 pname:filterMinmaxImageComponentMapping is a boolean value indicating 1487 whether the implementation supports non-identity component mapping of 1488 the image when doing min/max filtering. 1489// end::VK_EXT_sampler_filter_minmax-properties[] 1490 1491:refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties 1492include::{chapters}/limits.txt[tag=limits_desc] 1493 1494[[limits-filterMinmaxSingleComponentFormats-minimum-requirements]] 1495If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following 1496formats must: support the 1497ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with 1498ename:VK_IMAGE_TILING_OPTIMAL, if they support 1499ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT: 1500 1501 * ename:VK_FORMAT_R8_UNORM 1502 * ename:VK_FORMAT_R8_SNORM 1503 * ename:VK_FORMAT_R16_UNORM 1504 * ename:VK_FORMAT_R16_SNORM 1505 * ename:VK_FORMAT_R16_SFLOAT 1506 * ename:VK_FORMAT_R32_SFLOAT 1507 * ename:VK_FORMAT_D16_UNORM 1508 * ename:VK_FORMAT_X8_D24_UNORM_PACK32 1509 * ename:VK_FORMAT_D32_SFLOAT 1510 * ename:VK_FORMAT_D16_UNORM_S8_UINT 1511 * ename:VK_FORMAT_D24_UNORM_S8_UINT 1512 * ename:VK_FORMAT_D32_SFLOAT_S8_UINT 1513 1514If the format is a depth/stencil format, this bit only specifies that the 1515depth aspect (not the stencil aspect) of an image of this format supports 1516min/max filtering, and that min/max filtering of the depth aspect is 1517supported when depth compare is disabled in the sampler. 1518 1519If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component 1520mapping of the image view used with min/max filtering must: have been 1521created with the pname:r component set to the 1522<<resources-image-views-identity-mappings,identity swizzle>>. 1523Only the pname:r component of the sampled image value is defined and the 1524other component values are undefined:. 1525If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction 1526does not apply and image component mapping works as normal. 1527 1528include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[] 1529-- 1530endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 1531 1532ifdef::VK_VERSION_1_1[] 1533[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs'] 1534-- 1535The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as: 1536 1537include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[] 1538 1539 * pname:sType is the type of this structure. 1540 * pname:pNext is `NULL` or a pointer to a structure extending this 1541 structure. 1542 1543// Must have preceding whitespace 1544ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1545ifndef::VK_VERSION_1_2[:anchor-prefix:] 1546// tag::VK_KHR_protected_memory-properties[] 1547 * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault 1548 specifies how an implementation behaves when an application attempts to 1549 write to unprotected memory in a protected queue operation, read from 1550 protected memory in an unprotected queue operation, or perform a query 1551 in a protected queue operation. 1552 If this limit is ename:VK_TRUE, such writes will be discarded or have 1553 undefined: values written, reads and queries will return undefined: 1554 values. 1555 If this limit is ename:VK_FALSE, applications must: not perform these 1556 operations. 1557 See <<memory-protected-access-rules>> for more information. 1558// end::VK_KHR_protected_memory-properties[] 1559 1560:refpage: VkPhysicalDeviceProtectedMemoryProperties 1561include::{chapters}/limits.txt[tag=limits_desc] 1562 1563include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[] 1564-- 1565endif::VK_VERSION_1_1[] 1566 1567ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[] 1568[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs'] 1569-- 1570The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as: 1571 1572include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.txt[] 1573 1574ifdef::VK_KHR_maintenance3[] 1575or the equivalent 1576 1577include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.txt[] 1578endif::VK_KHR_maintenance3[] 1579 1580 * pname:sType is the type of this structure. 1581 * pname:pNext is `NULL` or a pointer to a structure extending this 1582 structure. 1583 1584// Must have preceding whitespace 1585ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1586ifndef::VK_VERSION_1_2[:anchor-prefix:] 1587// tag::VK_KHR_maintenance3-properties[] 1588 * [[{anchor-prefix}limits-maxPerSetDescriptors]] 1589 pname:maxPerSetDescriptors is a maximum number of descriptors (summed 1590 over all descriptor types) in a single descriptor set that is guaranteed 1591 to satisfy any implementation-dependent constraints on the size of a 1592 descriptor set itself. 1593 Applications can: query whether a descriptor set that goes beyond this 1594 limit is supported using flink:vkGetDescriptorSetLayoutSupport. 1595 * [[{anchor-prefix}limits-maxMemoryAllocationSize]] 1596 pname:maxMemoryAllocationSize is the maximum size of a memory allocation 1597 that can: be created, even if there is more space available in the heap. 1598// end::VK_KHR_maintenance3-properties[] 1599 1600:refpage: VkPhysicalDeviceMaintenance3Properties 1601include::{chapters}/limits.txt[tag=limits_desc] 1602 1603include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[] 1604-- 1605endif::VK_VERSION_1_1,VK_KHR_maintenance3[] 1606 1607ifdef::VK_KHR_maintenance4[] 1608[open,refpage='VkPhysicalDeviceMaintenance4PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs'] 1609-- 1610The sname:VkPhysicalDeviceMaintenance4PropertiesKHR structure is defined as: 1611 1612include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[] 1613 1614 * pname:sType is the type of this structure. 1615 * pname:pNext is `NULL` or a pointer to a structure extending this 1616 structure. 1617 * [[limits-maxBufferSize]] pname:maxBufferSize is the maximum size 1618 sname:VkBuffer that can: be created. 1619 1620:refpage: VkPhysicalDeviceMaintenance4PropertiesKHR 1621include::{chapters}/limits.txt[tag=limits_desc] 1622 1623include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[] 1624-- 1625endif::VK_KHR_maintenance4[] 1626 1627ifdef::VK_NV_mesh_shader[] 1628[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs'] 1629-- 1630The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as: 1631 1632include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[] 1633 1634 * pname:sType is the type of this structure. 1635 * pname:pNext is `NULL` or a pointer to a structure extending this 1636 structure. 1637 * pname:maxDrawMeshTasksCount is the maximum number of local workgroups 1638 that can: be launched by a single draw mesh tasks command. 1639 See <<drawing-mesh-shading>>. 1640 * pname:maxTaskWorkGroupInvocations is the maximum total number of task 1641 shader invocations in a single local workgroup. 1642 The product of the X, Y, and Z sizes, as specified by the code:LocalSize 1643ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 1644 execution mode in shader modules or by the object decorated by the 1645 code:WorkgroupSize decoration, must: be less than or equal to this 1646 limit. 1647 * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task 1648 workgroup. 1649 These three values represent the maximum local workgroup size in the X, 1650 Y, and Z dimensions, respectively. 1651 The pname:x, pname:y, and pname:z sizes, as specified by the 1652 code:LocalSize 1653ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 1654 execution mode or by the object decorated by the code:WorkgroupSize 1655 decoration in shader modules, must: be less than or equal to the 1656 corresponding limit. 1657 * pname:maxTaskTotalMemorySize is the maximum number of bytes that the 1658 task shader can use in total for shared and output memory combined. 1659 * pname:maxTaskOutputCount is the maximum number of output tasks a single 1660 task shader workgroup can emit. 1661 * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh 1662 shader invocations in a single local workgroup. 1663 The product of the X, Y, and Z sizes, as specified by the code:LocalSize 1664ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 1665 execution mode in shader modules or by the object decorated by the 1666 code:WorkgroupSize decoration, must: be less than or equal to this 1667 limit. 1668 * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh 1669 workgroup. 1670 These three values represent the maximum local workgroup size in the X, 1671 Y, and Z dimensions, respectively. 1672 The pname:x, pname:y, and pname:z sizes, as specified by the 1673 code:LocalSize 1674ifdef::VK_KHR_maintenance4[or code:LocalSizeId] 1675 execution mode or by the object decorated by the code:WorkgroupSize 1676 decoration in shader modules, must: be less than or equal to the 1677 corresponding limit. 1678 * pname:maxMeshTotalMemorySize is the maximum number of bytes that the 1679 mesh shader can use in total for shared and output memory combined. 1680 * pname:maxMeshOutputVertices is the maximum number of vertices a mesh 1681 shader output can store. 1682 * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh 1683 shader output can store. 1684 * pname:maxMeshMultiviewViewCount is the maximum number of multi-view 1685 views a mesh shader can use. 1686 * pname:meshOutputPerVertexGranularity is the granularity with which mesh 1687 vertex outputs are allocated. 1688 The value can be used to compute the memory size used by the mesh 1689 shader, which must be less than or equal to 1690 pname:maxMeshTotalMemorySize. 1691 * pname:meshOutputPerPrimitiveGranularity is the granularity with which 1692 mesh outputs qualified as per-primitive are allocated. 1693 The value can be used to compute the memory size used by the mesh 1694 shader, which must be less than or equal to 1695 pname:maxMeshTotalMemorySize. 1696 1697:refpage: VkPhysicalDeviceMeshShaderPropertiesNV 1698include::{chapters}/limits.txt[tag=limits_desc] 1699 1700include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[] 1701-- 1702endif::VK_NV_mesh_shader[] 1703 1704ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1705[open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT'] 1706-- 1707The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined 1708as: 1709 1710include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[] 1711 1712ifdef::VK_EXT_descriptor_indexing[] 1713or the equivalent 1714 1715include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[] 1716endif::VK_EXT_descriptor_indexing[] 1717 1718 * pname:sType is the type of this structure. 1719 * pname:pNext is `NULL` or a pointer to a structure extending this 1720 structure. 1721 1722// Must have preceding whitespace 1723ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 1724ifndef::VK_VERSION_1_2[:anchor-prefix:] 1725// tag::VK_EXT_descriptor_indexing-properties[] 1726 * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]] 1727 pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of 1728 descriptors (summed over all descriptor types) that can: be created 1729 across all pools that are created with the 1730 ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set. 1731 Pool creation may: fail when this limit is exceeded, or when the space 1732 this limit represents is unable to satisfy a pool creation due to 1733 fragmentation. 1734 * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]] 1735 pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean 1736 value indicating whether uniform buffer descriptors natively support 1737 nonuniform indexing. 1738 If this is ename:VK_FALSE, then a single dynamic instance of an 1739 instruction that nonuniformly indexes an array of uniform buffers may: 1740 execute multiple times in order to access all the descriptors. 1741 * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]] 1742 pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value 1743 indicating whether sampler and image descriptors natively support 1744 nonuniform indexing. 1745 If this is ename:VK_FALSE, then a single dynamic instance of an 1746 instruction that nonuniformly indexes an array of samplers or images 1747 may: execute multiple times in order to access all the descriptors. 1748 * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]] 1749 pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean 1750 value indicating whether storage buffer descriptors natively support 1751 nonuniform indexing. 1752 If this is ename:VK_FALSE, then a single dynamic instance of an 1753 instruction that nonuniformly indexes an array of storage buffers may: 1754 execute multiple times in order to access all the descriptors. 1755 * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]] 1756 pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value 1757 indicating whether storage image descriptors natively support nonuniform 1758 indexing. 1759 If this is ename:VK_FALSE, then a single dynamic instance of an 1760 instruction that nonuniformly indexes an array of storage images may: 1761 execute multiple times in order to access all the descriptors. 1762 * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]] 1763 pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean 1764 value indicating whether input attachment descriptors natively support 1765 nonuniform indexing. 1766 If this is ename:VK_FALSE, then a single dynamic instance of an 1767 instruction that nonuniformly indexes an array of input attachments may: 1768 execute multiple times in order to access all the descriptors. 1769 * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]] 1770 pname:robustBufferAccessUpdateAfterBind is a boolean value indicating 1771 whether <<features-robustBufferAccess, pname:robustBufferAccess>> can: 1772 be enabled in a device simultaneously with 1773 pname:descriptorBindingUniformBufferUpdateAfterBind, 1774 pname:descriptorBindingStorageBufferUpdateAfterBind, 1775 pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or 1776 pname:descriptorBindingStorageTexelBufferUpdateAfterBind. 1777 If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be 1778 disabled or all of these update-after-bind features must: be disabled. 1779 * [[{anchor-prefix}limits-quadDivergentImplicitLod]] 1780 pname:quadDivergentImplicitLod is a boolean value indicating whether 1781 implicit level of detail calculations for image operations have 1782 well-defined results when the image and/or sampler objects used for the 1783 instruction are not uniform within a quad. 1784 See <<textures-derivative-image-operations,Derivative Image 1785 Operations>>. 1786 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]] 1787 pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to 1788 pname:maxPerStageDescriptorSamplers but counts descriptors from 1789 descriptor sets created with or without the 1790 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1791 set. 1792 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]] 1793 pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to 1794 pname:maxPerStageDescriptorUniformBuffers but counts descriptors from 1795 descriptor sets created with or without the 1796 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1797 set. 1798 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]] 1799 pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to 1800 pname:maxPerStageDescriptorStorageBuffers but counts descriptors from 1801 descriptor sets created with or without the 1802 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1803 set. 1804 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]] 1805 pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to 1806 pname:maxPerStageDescriptorSampledImages but counts descriptors from 1807 descriptor sets created with or without the 1808 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1809 set. 1810 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]] 1811 pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to 1812 pname:maxPerStageDescriptorStorageImages but counts descriptors from 1813 descriptor sets created with or without the 1814 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1815 set. 1816 * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]] 1817 pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to 1818 pname:maxPerStageDescriptorInputAttachments but counts descriptors from 1819 descriptor sets created with or without the 1820 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1821 set. 1822 * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]] 1823 pname:maxPerStageUpdateAfterBindResources is similar to 1824 pname:maxPerStageResources but counts descriptors from descriptor sets 1825 created with or without the 1826 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1827 set. 1828 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]] 1829 pname:maxDescriptorSetUpdateAfterBindSamplers is similar to 1830 pname:maxDescriptorSetSamplers but counts descriptors from descriptor 1831 sets created with or without the 1832 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1833 set. 1834 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]] 1835 pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to 1836 pname:maxDescriptorSetUniformBuffers but counts descriptors from 1837 descriptor sets created with or without the 1838 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1839 set. 1840 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]] 1841 pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to 1842 pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from 1843 descriptor sets created with or without the 1844 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1845 set. 1846 While an application can: allocate dynamic uniform buffer descriptors 1847 from a pool created with the 1848 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, 1849 bindings for these descriptors must: not be present in any descriptor 1850 set layout that includes bindings created with 1851 ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT. 1852 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]] 1853 pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to 1854 pname:maxDescriptorSetStorageBuffers but counts descriptors from 1855 descriptor sets created with or without the 1856 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1857 set. 1858 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]] 1859 pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to 1860 pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from 1861 descriptor sets created with or without the 1862 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1863 set. 1864 While an application can: allocate dynamic storage buffer descriptors 1865 from a pool created with the 1866 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, 1867 bindings for these descriptors must: not be present in any descriptor 1868 set layout that includes bindings created with 1869 ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT. 1870 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]] 1871 pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to 1872 pname:maxDescriptorSetSampledImages but counts descriptors from 1873 descriptor sets created with or without the 1874 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1875 set. 1876 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]] 1877 pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to 1878 pname:maxDescriptorSetStorageImages but counts descriptors from 1879 descriptor sets created with or without the 1880 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1881 set. 1882 * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]] 1883 pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to 1884 pname:maxDescriptorSetInputAttachments but counts descriptors from 1885 descriptor sets created with or without the 1886 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1887 set. 1888// end::VK_EXT_descriptor_indexing-properties[] 1889 1890:refpage: VkPhysicalDeviceDescriptorIndexingProperties 1891include::{chapters}/limits.txt[tag=limits_desc] 1892 1893include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[] 1894-- 1895endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1896 1897ifdef::VK_EXT_inline_uniform_block[] 1898[open,refpage='VkPhysicalDeviceInlineUniformBlockPropertiesEXT',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs'] 1899-- 1900The sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is 1901defined as: 1902 1903include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[] 1904 1905 * pname:sType is the type of this structure. 1906 * pname:pNext is `NULL` or a pointer to a structure extending this 1907 structure. 1908 * [[limits-maxInlineUniformBlockSize]] pname:maxInlineUniformBlockSize is 1909 the maximum size in bytes of an <<descriptorsets-inlineuniformblock, 1910 inline uniform block>> binding. 1911 * [[limits-maxPerStageDescriptorInlineUniformBlocks]] 1912 pname:maxPerStageDescriptorInlineUniformBlock is the maximum number of 1913 inline uniform block bindings that can: be accessible to a single shader 1914 stage in a pipeline layout. 1915 Descriptor bindings with a descriptor type of 1916 ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this 1917 limit. 1918ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1919 Only descriptor bindings in descriptor set layouts created without the 1920 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 1921 count against this limit. 1922endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1923 * [[limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]] 1924 pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks 1925ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1926 equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved 1927 for future use. 1928endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1929ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1930 is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts 1931 descriptor bindings from descriptor sets created with or without the 1932 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1933 set. 1934endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1935 * [[limits-maxDescriptorSetInlineUniformBlocks]] 1936 pname:maxDescriptorSetInlineUniformBlocks is the maximum number of 1937 inline uniform block bindings that can: be included in descriptor 1938 bindings in a pipeline layout across all pipeline shader stages and 1939 descriptor set numbers. 1940 Descriptor bindings with a descriptor type of 1941 ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this 1942 limit. 1943ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1944 Only descriptor bindings in descriptor set layouts created without the 1945 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 1946 count against this limit. 1947endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1948 * [[limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]] 1949 pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks 1950ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1951 equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for 1952 future use. 1953endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1954ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1955 is similar to pname:maxDescriptorSetInlineUniformBlocks but counts 1956 descriptor bindings from descriptor sets created with or without the 1957 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 1958 set. 1959endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 1960 1961:refpage: VkPhysicalDeviceInlineUniformBlockPropertiesEXT 1962include::{chapters}/limits.txt[tag=limits_desc] 1963 1964include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[] 1965-- 1966endif::VK_EXT_inline_uniform_block[] 1967 1968ifdef::VK_EXT_conservative_rasterization[] 1969[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs'] 1970-- 1971The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure 1972is defined as: 1973 1974include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[] 1975 1976 * pname:sType is the type of this structure. 1977 * pname:pNext is `NULL` or a pointer to a structure extending this 1978 structure. 1979 * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize 1980 is the size in pixels the generating primitive is increased at each of 1981 its edges during conservative rasterization overestimation mode. 1982 Even with a size of 0.0, conservative rasterization overestimation rules 1983 still apply and if any part of the pixel rectangle is covered by the 1984 generating primitive, fragments are generated for the entire pixel. 1985 However implementations may: make the pixel coverage area even more 1986 conservative by increasing the size of the generating primitive. 1987 * [[limits-maxExtraPrimitiveOverestimationSize]] 1988 pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels 1989 of extra overestimation the implementation supports in the pipeline 1990 state. 1991 A value of 0.0 means the implementation does not support any additional 1992 overestimation of the generating primitive during conservative 1993 rasterization. 1994 A value above 0.0 allows the application to further increase the size of 1995 the generating primitive during conservative rasterization 1996 overestimation. 1997 * [[limits-extraPrimitiveOverestimationSizeGranularity]] 1998 pname:extraPrimitiveOverestimationSizeGranularity is the granularity of 1999 extra overestimation that can be specified in the pipeline state between 2000 0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive. 2001 A value of 0.0 means the implementation can use the smallest 2002 representable non-zero value in the screen space pixel fixed-point grid. 2003 * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is 2004 ename:VK_TRUE if the implementation supports the 2005 ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative 2006 rasterization mode in addition to 2007 ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT. 2008 Otherwise the implementation only supports 2009 ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT. 2010 * [[limits-conservativePointAndLineRasterization]] 2011 pname:conservativePointAndLineRasterization is ename:VK_TRUE if the 2012 implementation supports conservative rasterization of point and line 2013 primitives as well as triangle primitives. 2014 Otherwise the implementation only supports triangle primitives. 2015 * [[limits-degenerateTrianglesRasterized]] 2016 pname:degenerateTrianglesRasterized is ename:VK_FALSE if the 2017 implementation culls primitives generated from triangles that become 2018 zero area after they are quantized to the fixed-point rasterization 2019 pixel grid. 2020 pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives 2021 are not culled and the provoking vertex attributes and depth value are 2022 used for the fragments. 2023 The primitive area calculation is done on the primitive generated from 2024 the clipped triangle if applicable. 2025 Zero area primitives are backfacing and the application can: enable 2026 backface culling if desired. 2027 * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is 2028 ename:VK_FALSE if the implementation culls lines that become zero length 2029 after they are quantized to the fixed-point rasterization pixel grid. 2030 pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines 2031 are not culled and the provoking vertex attributes and depth value are 2032 used for the fragments. 2033 * [[limits-fullyCoveredFragmentShaderInputVariable]] 2034 pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the 2035 implementation supports the SPIR-V builtin fragment shader input 2036 variable code:FullyCoveredEXT specifying that conservative rasterization 2037 is enabled and the fragment area is fully covered by the generating 2038 primitive. 2039 * [[limits-conservativeRasterizationPostDepthCoverage]] 2040ifdef::VK_EXT_post_depth_coverage[] 2041 pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the 2042 implementation supports conservative rasterization with the 2043 code:PostDepthCoverage execution mode enabled. 2044 Otherwise the code:PostDepthCoverage execution mode must: not be used 2045 when conservative rasterization is enabled. 2046endif::VK_EXT_post_depth_coverage[] 2047ifndef::VK_EXT_post_depth_coverage[] 2048 pname:conservativeRasterizationPostDepthCoverage must: be 2049 ename:VK_FALSE. 2050endif::VK_EXT_post_depth_coverage[] 2051 2052:refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT 2053include::{chapters}/limits.txt[tag=limits_desc] 2054 2055include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[] 2056-- 2057endif::VK_EXT_conservative_rasterization[] 2058 2059ifdef::VK_EXT_fragment_density_map[] 2060[open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs'] 2061-- 2062The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is 2063defined as: 2064 2065include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[] 2066 2067 * pname:sType is the type of this structure. 2068 * pname:pNext is `NULL` or a pointer to a structure extending this 2069 structure. 2070 * [[limits-minfragmentdensitytexelsize]] pname:minFragmentDensityTexelSize 2071 is the minimum <<glossary-fragment-density-texel-size,fragment density 2072 texel size>>. 2073 * [[limits-maxfragmentdensitytexelsize]] pname:maxFragmentDensityTexelSize 2074 is the maximum fragment density texel size. 2075 * [[limits-fragmentdensityinvocations]] pname:fragmentDensityInvocations 2076 specifies whether the implementation may: invoke additional fragment 2077 shader invocations for each covered sample. 2078 2079:refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT 2080include::{chapters}/limits.txt[tag=limits_desc] 2081 2082include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[] 2083-- 2084endif::VK_EXT_fragment_density_map[] 2085 2086ifdef::VK_EXT_fragment_density_map2[] 2087[open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs'] 2088-- 2089The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is 2090defined as: 2091 2092include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[] 2093 2094 * pname:sType is the type of this structure. 2095 * pname:pNext is `NULL` or a pointer to a structure extending this 2096 structure. 2097 * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing 2098 image data read with load operations on subsampled attachments will be 2099 resampled to the fragment density of the render pass 2100 * [[limits-subsampledCoarseReconstructionEarlyAccess]] 2101 pname:subsampledCoarseReconstructionEarlyAccess specifies if performing 2102 image data read with samplers created with pname:flags containing 2103 ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in 2104 fragment shader will trigger additional reads during 2105 ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT 2106 * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is 2107 the maximum number of slink:VkImageView array layers for usages 2108 supporting subsampled samplers 2109 * [[limits-maxDescriptorSetSubsampledSamplers]] 2110 pname:maxDescriptorSetSubsampledSamplers is the maximum number of 2111 subsampled samplers that can: be included in a slink:VkPipelineLayout 2112 2113:refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT 2114include::{chapters}/limits.txt[tag=limits_desc] 2115 2116include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[] 2117-- 2118endif::VK_EXT_fragment_density_map2[] 2119 2120ifdef::VK_AMD_shader_core_properties[] 2121[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs'] 2122-- 2123The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as: 2124 2125include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[] 2126 2127 * pname:sType is the type of this structure. 2128 * pname:pNext is `NULL` or a pointer to a structure extending this 2129 structure. 2130 * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned 2131 integer value indicating the number of shader engines found inside the 2132 shader core of the physical device. 2133 * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount 2134 is an unsigned integer value indicating the number of shader arrays 2135 inside a shader engine. 2136 Each shader array has its own scan converter, set of compute units, and 2137 a render back end (color and depth attachments). 2138 Shader arrays within a shader engine share shader processor input (wave 2139 launcher) and shader export (export buffer) units. 2140 Currently, a shader engine can have one or two shader arrays. 2141 * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray 2142 is an unsigned integer value indicating the physical number of compute 2143 units within a shader array. 2144 The active number of compute units in a shader array may: be lower. 2145 A compute unit houses a set of SIMDs along with a sequencer module and a 2146 local data store. 2147 * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned 2148 integer value indicating the number of SIMDs inside a compute unit. 2149 Each SIMD processes a single instruction at a time. 2150 * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer 2151 value indicating the maximum size of a subgroup. 2152 * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value 2153 indicating the number of physical Scalar General Purpose Registers 2154 (SGPRs) per SIMD. 2155 * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned 2156 integer value indicating the minimum number of SGPRs allocated for a 2157 wave. 2158 * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned 2159 integer value indicating the maximum number of SGPRs allocated for a 2160 wave. 2161 * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is 2162 an unsigned integer value indicating the granularity of SGPR allocation 2163 for a wave. 2164 * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value 2165 indicating the number of physical Vector General Purpose Registers 2166 (VGPRs) per SIMD. 2167 * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned 2168 integer value indicating the minimum number of VGPRs allocated for a 2169 wave. 2170 * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned 2171 integer value indicating the maximum number of VGPRs allocated for a 2172 wave. 2173 * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is 2174 an unsigned integer value indicating the granularity of VGPR allocation 2175 for a wave. 2176 2177:refpage: VkPhysicalDeviceShaderCorePropertiesAMD 2178include::{chapters}/limits.txt[tag=limits_desc] 2179 2180include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[] 2181-- 2182endif::VK_AMD_shader_core_properties[] 2183 2184ifdef::VK_AMD_shader_core_properties2[] 2185[open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs'] 2186-- 2187The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as: 2188 2189include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[] 2190 2191 * pname:sType is the type of this structure. 2192 * pname:pNext is `NULL` or a pointer to a structure extending this 2193 structure. 2194 * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of 2195 elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features 2196 supported by the shader core. 2197 * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an 2198 unsigned integer value indicating the number of compute units that have 2199 been enabled. 2200 2201:refpage: VkPhysicalDeviceShaderCoreProperties2AMD 2202include::{chapters}/limits.txt[tag=limits_desc] 2203 2204include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[] 2205-- 2206 2207[open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD'] 2208-- 2209Bits for this type may: be defined by future extensions, or new versions of 2210the `apiext:VK_AMD_shader_core_properties2` extension. 2211Possible values of the pname:flags member of 2212tlink:VkShaderCorePropertiesFlagsAMD are: 2213 2214include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.txt[] 2215-- 2216 2217[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD'] 2218-- 2219include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.txt[] 2220 2221tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or 2222more elink:VkShaderCorePropertiesFlagBitsAMD. 2223-- 2224endif::VK_AMD_shader_core_properties2[] 2225 2226ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[] 2227[open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR'] 2228-- 2229The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined 2230as: 2231 2232include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[] 2233 2234ifdef::VK_KHR_depth_stencil_resolve[] 2235or the equivalent 2236 2237include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.txt[] 2238endif::VK_KHR_depth_stencil_resolve[] 2239 2240 * pname:sType is the type of this structure. 2241 * pname:pNext is `NULL` or a pointer to a structure extending this 2242 structure. 2243 2244// Must have preceding whitespace 2245ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 2246ifndef::VK_VERSION_1_2[:anchor-prefix:] 2247// tag::VK_KHR_depth_stencil_resolve-properties[] 2248 * [[{anchor-prefix}features-depthResolveModes]] 2249 pname:supportedDepthResolveModes is a bitmask of 2250 elink:VkResolveModeFlagBits indicating the set of supported depth 2251 resolve modes. 2252 ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but 2253 implementations may: support additional modes. 2254 * [[{anchor-prefix}features-stencilResolveModes]] 2255 pname:supportedStencilResolveModes is a bitmask of 2256 elink:VkResolveModeFlagBits indicating the set of supported stencil 2257 resolve modes. 2258 ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but 2259 implementations may: support additional modes. 2260 ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set. 2261 * [[{anchor-prefix}features-independentResolveNone]] 2262 pname:independentResolveNone is ename:VK_TRUE if the implementation 2263 supports setting the depth and stencil resolve modes to different values 2264 when one of those modes is ename:VK_RESOLVE_MODE_NONE. 2265 Otherwise the implementation only supports setting both modes to the 2266 same value. 2267 * [[{anchor-prefix}features-independentResolve]] pname:independentResolve 2268 is ename:VK_TRUE if the implementation supports all combinations of the 2269 supported depth and stencil resolve modes, including setting either 2270 depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE. 2271 An implementation that supports pname:independentResolve must: also 2272 support pname:independentResolveNone. 2273// end::VK_KHR_depth_stencil_resolve-properties[] 2274 2275:refpage: VkPhysicalDeviceDepthStencilResolveProperties 2276include::{chapters}/limits.txt[tag=limits_desc] 2277 2278include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[] 2279-- 2280endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[] 2281 2282ifdef::VK_KHR_performance_query[] 2283include::{chapters}/VK_KHR_performance_query/props.txt[] 2284endif::VK_KHR_performance_query[] 2285 2286ifdef::VK_NV_shading_rate_image[] 2287[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs'] 2288-- 2289The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined 2290as: 2291 2292include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[] 2293 2294 * pname:sType is the type of this structure. 2295 * pname:pNext is `NULL` or a pointer to a structure extending this 2296 structure. 2297 * [[limits-shading-rate-texel-size]] pname:shadingRateTexelSize indicates 2298 the width and height of the portion of the framebuffer corresponding to 2299 each texel in the shading rate image. 2300 * [[limits-shading-rate-palette-size]] pname:shadingRatePaletteSize 2301 indicates the maximum number of palette entries supported for the 2302 shading rate image. 2303 * [[limits-shading-rate-max-coarse-samples]] 2304 pname:shadingRateMaxCoarseSamples specifies the maximum number of 2305 coverage samples supported in a single fragment. 2306 If the product of the fragment size derived from the base shading rate 2307 and the number of coverage samples per pixel exceeds this limit, the 2308 final shading rate will be adjusted so that its product does not exceed 2309 the limit. 2310 2311:refpage: VkPhysicalDeviceShadingRateImagePropertiesNV 2312include::{chapters}/limits.txt[tag=limits_desc] 2313 2314These properties are related to the <<primsrast-shading-rate-image, shading 2315rate image>> feature. 2316 2317include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[] 2318-- 2319endif::VK_NV_shading_rate_image[] 2320 2321ifdef::VK_EXT_transform_feedback[] 2322[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs'] 2323-- 2324The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is 2325defined as: 2326 2327include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[] 2328 2329 * pname:sType is the type of this structure. 2330 * pname:pNext is `NULL` or a pointer to a structure extending this 2331 structure. 2332 * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams 2333 is the maximum number of vertex streams that can be output from geometry 2334 shaders declared with the code:GeometryStreams capability. 2335 If the implementation does not support 2336 sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams 2337 then pname:maxTransformFeedbackStreams must: be set to `1`. 2338 * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers 2339 is the maximum number of transform feedback buffers that can be bound 2340 for capturing shader outputs from the last 2341 <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader 2342 stage>>. 2343 * [[limits-maxTransformFeedbackBufferSize]] 2344 pname:maxTransformFeedbackBufferSize is the maximum size that can be 2345 specified when binding a buffer for transform feedback in 2346 flink:vkCmdBindTransformFeedbackBuffersEXT. 2347 * [[limits-maxTransformFeedbackStreamDataSize]] 2348 pname:maxTransformFeedbackStreamDataSize is the maximum amount of data 2349 in bytes for each vertex that captured to one or more transform feedback 2350 buffers associated with a specific vertex stream. 2351 * [[limits-maxTransformFeedbackBufferDataSize]] 2352 pname:maxTransformFeedbackBufferDataSize is the maximum amount of data 2353 in bytes for each vertex that can be captured to a specific transform 2354 feedback buffer. 2355 * [[limits-maxTransformFeedbackBufferDataStride]] 2356 pname:maxTransformFeedbackBufferDataStride is the maximum stride between 2357 each capture of vertex data to the buffer. 2358 * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is 2359 ename:VK_TRUE if the implementation supports the 2360 ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type. 2361 pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type 2362 cannot: be created. 2363 * [[limits-transformFeedbackStreamsLinesTriangles]] 2364 pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the 2365 implementation supports the geometry shader code:OpExecutionMode of 2366 code:OutputLineStrip and code:OutputTriangleStrip in addition to 2367 code:OutputPoints when more than one vertex stream is output. 2368 If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the 2369 implementation only supports an code:OpExecutionMode of 2370 code:OutputPoints when more than one vertex stream is output from the 2371 geometry shader. 2372 * [[limits-transformFeedbackRasterizationStreamSelect]] 2373 pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the 2374 implementation supports the code:GeometryStreams SPIR-V capability and 2375 the application can use 2376 slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which 2377 vertex stream output is used for rasterization. 2378 Otherwise vertex stream `0` must: always be used for rasterization. 2379 * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is 2380 ename:VK_TRUE if the implementation supports the 2381 flink:vkCmdDrawIndirectByteCountEXT function otherwise the function 2382 must: not be called. 2383 2384:refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT 2385include::{chapters}/limits.txt[tag=limits_desc] 2386 2387include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[] 2388-- 2389endif::VK_EXT_transform_feedback[] 2390 2391ifdef::VK_NV_ray_tracing[] 2392[open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs'] 2393-- 2394The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as: 2395 2396include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[] 2397 2398 * pname:sType is the type of this structure. 2399 * pname:pNext is `NULL` or a pointer to a structure extending this 2400 structure. 2401 * pname:shaderGroupHandleSize is the size in bytes of the shader header. 2402 * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum 2403 number of levels of recursion allowed in a trace command. 2404 * pname:maxShaderGroupStride is the maximum stride in bytes allowed 2405 between shader groups in the shader binding table. 2406 * pname:shaderGroupBaseAlignment is the required: alignment in bytes for 2407 the base of the shader binding table. 2408 * pname:maxGeometryCount is the maximum number of geometries in the bottom 2409 level acceleration structure. 2410 * pname:maxInstanceCount is the maximum number of instances in the top 2411 level acceleration structure. 2412 * pname:maxTriangleCount is the maximum number of triangles in all 2413 geometries in the bottom level acceleration structure. 2414 * pname:maxDescriptorSetAccelerationStructures is the maximum number of 2415 acceleration structure descriptors that are allowed in a descriptor set. 2416 2417Due to the fact that the geometry, instance, and triangle counts are 2418specified at acceleration structure creation as 32-bit values, 2419pname:maxGeometryCount, pname:maxInstanceCount, and pname:maxTriangleCount 2420must: not exceed [eq]#2^32^-1#. 2421 2422:refpage: VkPhysicalDeviceRayTracingPropertiesNV 2423include::{chapters}/limits.txt[tag=limits_desc] 2424 2425ifdef::VK_KHR_ray_tracing_pipeline[] 2426Limits specified by this structure must: match those specified with the same 2427name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and 2428slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR. 2429endif::VK_KHR_ray_tracing_pipeline[] 2430 2431include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[] 2432-- 2433endif::VK_NV_ray_tracing[] 2434 2435ifdef::VK_KHR_acceleration_structure[] 2436[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs'] 2437-- 2438The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is 2439defined as: 2440 2441include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[] 2442 2443 * pname:sType is the type of this structure. 2444 * pname:pNext is `NULL` or a pointer to a structure extending this 2445 structure. 2446 * [[limits-maxGeometryCount]] pname:maxGeometryCount is the maximum number 2447 of geometries in the bottom level acceleration structure. 2448 * [[limits-maxInstanceCount]] pname:maxInstanceCount is the maximum number 2449 of instances in the top level acceleration structure. 2450 * [[limits-maxPrimitiveCount]] pname:maxPrimitiveCount is the maximum 2451 number of triangles or AABBs in all geometries in the bottom level 2452 acceleration structure. 2453 * [[limits-maxPerStageDescriptorAccelerationStructures]] 2454 pname:maxPerStageDescriptorAccelerationStructures is the maximum number 2455 of acceleration structure bindings that can: be accessible to a single 2456 shader stage in a pipeline layout. 2457 Descriptor bindings with a descriptor type of 2458 ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this 2459 limit. 2460 Only descriptor bindings in descriptor set layouts created without the 2461 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 2462 count against this limit. 2463 * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]] 2464 pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is 2465 similar to pname:maxPerStageDescriptorAccelerationStructures but counts 2466 descriptor bindings from descriptor sets created with or without the 2467 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 2468 set. 2469 * [[limits-maxDescriptorSetAccelerationStructures]] 2470 pname:maxDescriptorSetAccelerationStructures is the maximum number of 2471 acceleration structure descriptors that can: be included in descriptor 2472 bindings in a pipeline layout across all pipeline shader stages and 2473 descriptor set numbers. 2474 Descriptor bindings with a descriptor type of 2475 ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this 2476 limit. 2477 Only descriptor bindings in descriptor set layouts created without the 2478 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set 2479 count against this limit. 2480 * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]] 2481 pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar 2482 to pname:maxDescriptorSetAccelerationStructures but counts descriptor 2483 bindings from descriptor sets created with or without the 2484 ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit 2485 set. 2486 * [[limits-minAccelerationStructureScratchOffsetAlignment]] 2487 pname:minAccelerationStructureScratchOffsetAlignment is the minimum 2488 required: alignment, in bytes, for scratch data passed in to an 2489 acceleration structure build command. 2490 2491Due to the fact that the geometry, instance, and primitive counts are 2492specified at acceleration structure creation as 32-bit values, 2493<<limits-maxGeometryCount,pname:maxGeometryCount>>, 2494<<limits-maxInstanceCount, pname:maxInstanceCount>>, and 2495<<limits-maxPrimitiveCount, pname:maxPrimitiveCount>> must: not exceed 2496[eq]#2^32^-1#. 2497 2498:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR 2499include::{chapters}/limits.txt[tag=limits_desc] 2500 2501ifdef::VK_NV_ray_tracing[] 2502Limits specified by this structure must: match those specified with the same 2503name in slink:VkPhysicalDeviceRayTracingPropertiesNV. 2504endif::VK_NV_ray_tracing[] 2505 2506include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[] 2507-- 2508endif::VK_KHR_acceleration_structure[] 2509 2510ifdef::VK_KHR_ray_tracing_pipeline[] 2511[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs'] 2512-- 2513The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is 2514defined as: 2515 2516include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[] 2517 2518 * pname:sType is the type of this structure. 2519 * pname:pNext is `NULL` or a pointer to a structure extending this 2520 structure. 2521 * pname:shaderGroupHandleSize is the size in bytes of the shader header. 2522 * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the 2523 maximum number of levels of ray recursion allowed in a trace command. 2524 * pname:maxShaderGroupStride is the maximum stride in bytes allowed 2525 between shader groups in the shader binding table. 2526 * pname:shaderGroupBaseAlignment is the required: alignment in bytes for 2527 the base of the shader binding table. 2528 * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the 2529 information required to do capture and replay for shader group handles. 2530 * pname:maxRayDispatchInvocationCount is the maximum number of ray 2531 generation shader invocations which may: be produced by a single 2532 flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command. 2533 * pname:shaderGroupHandleAlignment is the required: alignment in bytes for 2534 each shader binding table entry. 2535 * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray 2536 attribute structure 2537 2538:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR 2539include::{chapters}/limits.txt[tag=limits_desc] 2540 2541ifdef::VK_NV_ray_tracing[] 2542Limits specified by this structure must: match those specified with the same 2543name in slink:VkPhysicalDeviceRayTracingPropertiesNV. 2544endif::VK_NV_ray_tracing[] 2545 2546include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[] 2547-- 2548endif::VK_KHR_ray_tracing_pipeline[] 2549 2550ifdef::VK_NV_cooperative_matrix[] 2551[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs'] 2552-- 2553The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined 2554as: 2555 2556include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[] 2557 2558 * pname:sType is the type of this structure. 2559 * pname:pNext is `NULL` or a pointer to a structure extending this 2560 structure. 2561 * [[limits-cooperativeMatrixSupportedStages]] 2562 pname:cooperativeMatrixSupportedStages is a bitfield of 2563 elink:VkShaderStageFlagBits describing the shader stages that 2564 cooperative matrix instructions are supported in. 2565 pname:cooperativeMatrixSupportedStages will have the 2566 ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical 2567 device's queues support ename:VK_QUEUE_COMPUTE_BIT. 2568 2569:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV 2570include::{chapters}/limits.txt[tag=limits_desc] 2571 2572include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[] 2573-- 2574endif::VK_NV_cooperative_matrix[] 2575 2576ifdef::VK_NV_shader_sm_builtins[] 2577[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs'] 2578-- 2579The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined 2580as: 2581 2582include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[] 2583 2584 * pname:sType is the type of this structure. 2585 * pname:pNext is `NULL` or a pointer to a structure extending this 2586 structure. 2587 * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the 2588 device. 2589 * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number 2590 of simultaneously executing warps on an SM. 2591 2592:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV 2593include::{chapters}/limits.txt[tag=limits_desc] 2594 2595include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[] 2596-- 2597endif::VK_NV_shader_sm_builtins[] 2598 2599ifdef::VK_EXT_texel_buffer_alignment[] 2600[open,refpage='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs'] 2601-- 2602The sname:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT structure is 2603defined as: 2604 2605include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[] 2606 2607 * pname:sType is the type of this structure. 2608 * pname:pNext is `NULL` or a pointer to a structure extending this 2609 structure. 2610 * [[limits-storageTexelBufferOffsetAlignmentBytes]] 2611 pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is 2612 sufficient for a storage texel buffer of any format. 2613 * [[limits-storageTexelBufferOffsetSingleTexelAlignment]] 2614 pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether 2615 single texel alignment is sufficient for a storage texel buffer of any 2616 format. 2617 * [[limits-uniformTexelBufferOffsetAlignmentBytes]] 2618 pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is 2619 sufficient for a uniform texel buffer of any format. 2620 * [[limits-uniformTexelBufferOffsetSingleTexelAlignment]] 2621 pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether 2622 single texel alignment is sufficient for a uniform texel buffer of any 2623 format. 2624 2625:refpage: VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT 2626include::{chapters}/limits.txt[tag=limits_desc] 2627 2628If the single texel alignment property is ename:VK_FALSE, then the buffer 2629view's offset must: be aligned to the corresponding byte alignment value. 2630If the single texel alignment property is ename:VK_TRUE, then the buffer 2631view's offset must: be aligned to the lesser of the corresponding byte 2632alignment value or the size of a single texel, based on 2633slink:VkBufferViewCreateInfo::pname:format. 2634If the size of a single texel is a multiple of three bytes, then the size of 2635a single component of the format is used instead. 2636 2637These limits must: not advertise a larger alignment than the 2638<<limits-required,required>> maximum minimum value of 2639slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any 2640format that supports use as a texel buffer. 2641 2642include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[] 2643-- 2644endif::VK_EXT_texel_buffer_alignment[] 2645 2646ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 2647[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR'] 2648-- 2649The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined 2650as: 2651 2652include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[] 2653 2654ifdef::VK_KHR_timeline_semaphore[] 2655or the equivalent 2656 2657include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.txt[] 2658endif::VK_KHR_timeline_semaphore[] 2659 2660 * pname:sType is the type of this structure. 2661 * pname:pNext is `NULL` or a pointer to a structure extending this 2662 structure. 2663 2664// Must have preceding whitespace 2665ifdef::VK_VERSION_1_2[:anchor-prefix: extension-] 2666ifndef::VK_VERSION_1_2[:anchor-prefix:] 2667// tag::VK_KHR_timeline_semaphore-properties[] 2668 * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]] 2669 pname:maxTimelineSemaphoreValueDifference indicates the maximum 2670 difference allowed by the implementation between the current value of a 2671 timeline semaphore and any pending signal or wait operations. 2672// end::VK_KHR_timeline_semaphore-properties[] 2673 2674:refpage: VkPhysicalDeviceTimelineSemaphoreProperties 2675include::{chapters}/limits.txt[tag=limits_desc] 2676 2677include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[] 2678-- 2679endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 2680 2681ifdef::VK_EXT_line_rasterization[] 2682[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs'] 2683-- 2684The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is 2685defined as: 2686 2687include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[] 2688 2689 * pname:sType is the type of this structure. 2690 * pname:pNext is `NULL` or a pointer to a structure extending this 2691 structure. 2692 * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is 2693 the number of bits of subpixel precision in framebuffer coordinates 2694 [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line 2695 segments>>. 2696 2697:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT 2698include::{chapters}/limits.txt[tag=limits_desc] 2699 2700include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[] 2701-- 2702endif::VK_EXT_line_rasterization[] 2703 2704ifdef::VK_EXT_robustness2[] 2705[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs'] 2706-- 2707The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as: 2708 2709include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[] 2710 2711 * pname:sType is the type of this structure. 2712 * pname:pNext is `NULL` or a pointer to a structure extending this 2713 structure. 2714 * [[limits-robustStorageBufferAccessSizeAlignment]] 2715 pname:robustStorageBufferAccessSizeAlignment is the number of bytes that 2716 the range of a storage buffer descriptor is rounded up to when used for 2717 bounds-checking when 2718 <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled. 2719 This value is either 1 or 4. 2720 * [[limits-robustUniformBufferAccessSizeAlignment]] 2721 pname:robustUniformBufferAccessSizeAlignment is the number of bytes that 2722 the range of a uniform buffer descriptor is rounded up to when used for 2723 bounds-checking when 2724 <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled. 2725 This value is a power of two in the range [1, 256]. 2726 2727:refpage: VkPhysicalDeviceRobustness2PropertiesEXT 2728include::{chapters}/limits.txt[tag=limits_desc] 2729 2730include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[] 2731-- 2732endif::VK_EXT_robustness2[] 2733 2734ifdef::VK_NV_device_generated_commands[] 2735[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs'] 2736-- 2737The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is 2738defined as: 2739 2740include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[] 2741 2742 * pname:sType is the type of this structure. 2743 * pname:pNext is `NULL` or a pointer to a structure extending this 2744 structure. 2745 * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups 2746 in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV. 2747 * pname:maxIndirectSequenceCount is the maximum number of sequences in 2748 slink:VkGeneratedCommandsInfoNV and in 2749 slink:VkGeneratedCommandsMemoryRequirementsInfoNV. 2750 * pname:maxIndirectCommandsLayoutTokenCount is the maximum number of 2751 tokens in slink:VkIndirectCommandsLayoutCreateInfoNV. 2752 * pname:maxIndirectCommandsStreamCount is the maximum number of streams in 2753 slink:VkIndirectCommandsLayoutCreateInfoNV. 2754 * pname:maxIndirectCommandsTokenOffset is the maximum offset in 2755 sname:VkIndirectCommandsLayoutTokenNV. 2756 * pname:maxIndirectCommandsStreamStride is the maximum stream stride in 2757 slink:VkIndirectCommandsLayoutCreateInfoNV. 2758 * pname:minSequenceCountBufferOffsetAlignment is the minimum alignment for 2759 memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV. 2760 * pname:minSequenceIndexBufferOffsetAlignment is the minimum alignment for 2761 memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV. 2762 * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment 2763 for memory addresses used in sname:VkIndirectCommandsStreamNV, and as 2764 preprocess buffer in sname:VkGeneratedCommandsInfoNV. 2765 2766:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV 2767include::{chapters}/limits.txt[tag=limits_desc] 2768 2769include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[] 2770-- 2771 2772endif::VK_NV_device_generated_commands[] 2773 2774ifdef::VK_KHR_portability_subset[] 2775[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs'] 2776-- 2777The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is 2778defined as: 2779 2780include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[] 2781 2782 * pname:sType is the type of this structure. 2783 * pname:pNext is `NULL` or a pointer to a structure extending this 2784 structure. 2785 * [[limits-minVertexInputBindingStrideAlignment]] 2786 pname:minVertexInputBindingStrideAlignment indicates the minimum 2787 alignment for vertex input strides. 2788 slink:VkVertexInputBindingDescription::pname:stride must: be a multiple 2789 of, and at least as large as, this value. 2790 2791:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR 2792include::{chapters}/limits.txt[tag=limits_desc] 2793 2794include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[] 2795-- 2796endif::VK_KHR_portability_subset[] 2797 2798 2799ifdef::VK_KHR_fragment_shading_rate[] 2800[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs'] 2801-- 2802The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is 2803defined as: 2804 2805include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[] 2806 2807 * pname:sType is the type of this structure. 2808 * pname:pNext is `NULL` or a pointer to a structure extending this 2809 structure. 2810 * [[limits-minFragmentShadingRateAttachmentTexelSize]] 2811 pname:minFragmentShadingRateAttachmentTexelSize indicates minimum 2812 supported width and height of the portion of the framebuffer 2813 corresponding to each texel in a fragment shading rate attachment. 2814 Each value must: be less than or equal to the values in 2815 pname:maxFragmentShadingRateAttachmentTexelSize. 2816 Each value must: be a power-of-two. 2817 It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate, 2818 pname:attachmentFragmentShadingRate>> feature is not supported. 2819 * [[limits-maxFragmentShadingRateAttachmentTexelSize]] 2820 pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum 2821 supported width and height of the portion of the framebuffer 2822 corresponding to each texel in a fragment shading rate attachment. 2823 Each value must: be greater than or equal to the values in 2824 pname:minFragmentShadingRateAttachmentTexelSize. 2825 Each value must: be a power-of-two. 2826 It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate, 2827 pname:attachmentFragmentShadingRate>> feature is not supported. 2828 * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]] 2829 pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the 2830 maximum ratio between the width and height of the portion of the 2831 framebuffer corresponding to each texel in a fragment shading rate 2832 attachment. 2833 pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a 2834 power-of-two value, and must: be less than or equal to 2835 [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width / 2836 pname:minFragmentShadingRateAttachmentTexelSize.height, 2837 pname:maxFragmentShadingRateAttachmentTexelSize.height / 2838 pname:minFragmentShadingRateAttachmentTexelSize.width)#. 2839 It must: be 0 if the <<features-attachmentFragmentShadingRate, 2840 pname:attachmentFragmentShadingRate>> feature is not supported. 2841 * [[limits-primitiveFragmentShadingRateWithMultipleViewports]] 2842 pname:primitiveFragmentShadingRateWithMultipleViewports specifies 2843 whether the <<primsrast-fragment-shading-rate-primitive,primitive 2844 fragment shading rate>> can: be used when multiple viewports are used. 2845 If this value is ename:VK_FALSE, only a single viewport must: be used, 2846 and applications must: not write to the 2847ifdef::VK_NV_viewport_array2[] 2848 code:ViewportMaskNV or 2849endif::VK_NV_viewport_array2[] 2850 code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR. 2851 It must: be ename:VK_FALSE if 2852ifdef::VK_VERSION_1_2[] 2853 the <<features-shaderOutputViewportIndex, 2854 pname:shaderOutputViewportIndex>> feature, 2855endif::VK_VERSION_1_2[] 2856ifdef::VK_EXT_shader_viewport_index_layer[] 2857 the `apiext:VK_EXT_shader_viewport_index_layer` extension, 2858endif::VK_EXT_shader_viewport_index_layer[] 2859ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or] 2860 the <<features-geometryShader, pname:geometryShader>> feature is not 2861 supported, or if the <<features-primitiveFragmentShadingRate, 2862 pname:primitiveFragmentShadingRate>> feature is not supported. 2863 * [[limits-layeredShadingRateAttachments]] 2864 pname:layeredShadingRateAttachments specifies whether a shading rate 2865 attachment image view can: be created with multiple layers. 2866 If this value is ename:VK_FALSE, when creating an image view with a 2867 pname:usage that includes 2868 ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, 2869 pname:layerCount must: be `1`. 2870 It must: be ename:VK_FALSE if 2871ifdef::VK_VERSION_1_1,VK_KHR_multiview[] 2872 the <<features-multiview,pname:multiview>> feature, 2873endif::VK_VERSION_1_1,VK_KHR_multiview[] 2874ifdef::VK_VERSION_1_2[] 2875 the <<features-shaderOutputViewportIndex, 2876 pname:shaderOutputViewportIndex>> feature, 2877endif::VK_VERSION_1_2[] 2878ifdef::VK_EXT_shader_viewport_index_layer[] 2879 the `apiext:VK_EXT_shader_viewport_index_layer` extension, 2880endif::VK_EXT_shader_viewport_index_layer[] 2881ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or] 2882 the <<features-geometryShader, pname:geometryShader>> feature is not 2883 supported, or if the <<features-attachmentFragmentShadingRate, 2884 pname:attachmentFragmentShadingRate>> feature is not supported. 2885 * [[limits-fragmentShadingRateNonTrivialCombinerOps]] 2886 pname:fragmentShadingRateNonTrivialCombinerOps specifies whether 2887 elink:VkFragmentShadingRateCombinerOpKHR enums other than 2888 ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or 2889 ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used. 2890 It must: be ename:VK_FALSE unless either the 2891 <<features-primitiveFragmentShadingRate, 2892 pname:primitiveFragmentShadingRate>> or 2893 <<features-attachmentFragmentShadingRate, 2894 pname:attachmentFragmentShadingRate>> feature is supported. 2895 * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum 2896 supported width and height of a fragment. 2897 Its pname:width and pname:height members must: both be power-of-two 2898 values. 2899 This limit is purely informational, and is not validated. 2900 * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio 2901 indicates the maximum ratio between the width and height of a fragment. 2902 pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and 2903 must: be less than or equal to the maximum of the pname:width and 2904 pname:height members of pname:maxFragmentSize. 2905 This limit is purely informational, and is not validated. 2906 * [[limits-maxFragmentShadingRateCoverageSamples]] 2907 pname:maxFragmentShadingRateCoverageSamples specifies the maximum number 2908 of coverage samples supported in a single fragment. 2909 pname:maxFragmentShadingRateCoverageSamples must: be less than or equal 2910 to the product of the pname:width and pname:height members of 2911 pname:maxFragmentSize, and the sample count reported by 2912 pname:maxFragmentShadingRateRasterizationSamples. 2913 pname:maxFragmentShadingRateCoverageSamples must: be less than or equal 2914 to [eq]#pname:maxSampleMaskWords {times} 32# if 2915 pname:fragmentShadingRateWithShaderSampleMask is supported. 2916 This limit is purely informational, and is not validated. 2917 * [[limits-maxFragmentShadingRateRasterizationSamples]] 2918 pname:maxFragmentShadingRateRasterizationSamples is a 2919 elink:VkSampleCountFlagBits value specifying the maximum sample rate 2920 supported when a fragment covers multiple pixels. 2921 This limit is purely informational, and is not validated. 2922 * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]] 2923 pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether 2924 the implementation supports writing code:FragDepth 2925ifdef::VK_EXT_shader_stencil_export[] 2926 or code:FragStencilRefEXT 2927endif::VK_EXT_shader_stencil_export[] 2928 from a fragment shader for multi-pixel fragments. 2929 If this value is ename:VK_FALSE, writing to those built-ins will clamp 2930 the fragment shading rate to [eq]#(1,1)#. 2931 * [[limits-fragmentShadingRateWithSampleMask]] 2932 pname:fragmentShadingRateWithSampleMask specifies whether the the 2933 implementation supports setting valid bits of 2934 slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for 2935 multi-pixel fragments. 2936 If this value is ename:VK_FALSE, zeroing valid bits in the sample mask 2937 will clamp the fragment shading rate to [eq]#(1,1)#. 2938 * [[limits-fragmentShadingRateWithShaderSampleMask]] 2939 pname:fragmentShadingRateWithShaderSampleMask specifies whether the 2940 implementation supports reading or writing code:SampleMask for 2941 multi-pixel fragments. 2942 If this value is ename:VK_FALSE, using that built-in will clamp the 2943 fragment shading rate to [eq]#(1,1)#. 2944 * [[limits-fragmentShadingRateWithConservativeRasterization]] 2945 pname:fragmentShadingRateWithConservativeRasterization 2946ifndef::VK_EXT_conservative_rasterization[] 2947 is reserved for future use. 2948endif::VK_EXT_conservative_rasterization[] 2949ifdef::VK_EXT_conservative_rasterization[] 2950 specifies whether <<primsrast-conservativeraster, conservative 2951 rasterization>> is supported for multi-pixel fragments. 2952 It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization` 2953 is not supported. 2954 If this value is ename:VK_FALSE, using <<primsrast-conservativeraster, 2955 conservative rasterization>> will clamp the fragment shading rate to 2956 [eq]#(1,1)#. 2957endif::VK_EXT_conservative_rasterization[] 2958 * [[limits-fragmentShadingRateWithFragmentShaderInterlock]] 2959 pname:fragmentShadingRateWithFragmentShaderInterlock 2960ifndef::VK_EXT_fragment_shader_interlock[] 2961 is reserved for future use. 2962endif::VK_EXT_fragment_shader_interlock[] 2963ifdef::VK_EXT_fragment_shader_interlock[] 2964 specifies whether <<fragops-shader-interlock, fragment shader 2965 interlock>> is supported for multi-pixel fragments. 2966 It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock` 2967 is not supported. 2968 If this value is ename:VK_FALSE, using <<fragops-shader-interlock, 2969 fragment shader interlock>> will clamp the fragment shading rate to 2970 [eq]#(1,1)#. 2971endif::VK_EXT_fragment_shader_interlock[] 2972 * [[limits-fragmentShadingRateWithCustomSampleLocations]] 2973 pname:fragmentShadingRateWithCustomSampleLocations 2974ifndef::VK_EXT_sample_locations[] 2975 is reserved for future use. 2976endif::VK_EXT_sample_locations[] 2977ifdef::VK_EXT_sample_locations[] 2978 specifies whether <<primsrast-samplelocations, custom sample locations>> 2979 are supported for multi-pixel fragments. 2980 It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not 2981 supported. 2982 If this value is ename:VK_FALSE, using <<primsrast-samplelocations, 2983 custom sample locations>> will clamp the fragment shading rate to 2984 [eq]#(1,1)#. 2985endif::VK_EXT_sample_locations[] 2986 * [[limits-fragmentShadingRateStrictMultiplyCombiner]] 2987 pname:fragmentShadingRateStrictMultiplyCombiner specifies whether 2988 ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a 2989 multiplication or not. 2990 Implementations where this value is ename:VK_FALSE will instead combine 2991 rates with an addition. 2992 If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE, 2993 implementations must: report this as ename:VK_FALSE. 2994 If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE, 2995 implementations should: report this as ename:VK_TRUE. 2996 2997[NOTE] 2998.Note 2999==== 3000Multiplication of the combiner rates using the fragment width/height in 3001linear space is equivalent to an addition of those values in log2 space. 3002Some implementations inadvertently implemented an addition in linear space 3003due to unclear requirements originating outside of this specification. 3004This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner, 3005pname:fragmentShadingRateStrictMultiplyCombiner>> being added. 3006Fortunately, this only affects situations where a rate of 1 in either 3007dimension is combined with another rate of 1. 3008All other combinations result in the exact same result as if multiplication 3009was performed in linear space due to the clamping logic, and the fact that 3010both the sum and product of 2 and 2 are equal. 3011In many cases, this limit will not affect the correct operation of 3012applications. 3013==== 3014 3015:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR 3016include::{chapters}/limits.txt[tag=limits_desc] 3017 3018These properties are related to <<primsrast-fragment-shading-rate, fragment 3019shading rates>>. 3020 3021include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[] 3022-- 3023endif::VK_KHR_fragment_shading_rate[] 3024 3025ifdef::VK_NV_fragment_shading_rate_enums[] 3026[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs'] 3027-- 3028The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is 3029defined as: 3030 3031include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[] 3032 3033 * pname:sType is the type of this structure. 3034 * pname:pNext is `NULL` or a pointer to a structure extending this 3035 structure. 3036 * [[limits-maxFragmentShadingRateInvocationCount]] 3037 pname:maxFragmentShadingRateInvocationCount is a 3038 elink:VkSampleCountFlagBits value indicating the maximum number of 3039 fragment shader invocations per fragment supported in pipeline, 3040 primitive, and attachment fragment shading rates. 3041 3042:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV 3043include::{chapters}/limits.txt[tag=limits_desc] 3044 3045These properties are related to <<primsrast-fragment-shading-rate, fragment 3046shading rates>>. 3047 3048include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[] 3049-- 3050endif::VK_NV_fragment_shading_rate_enums[] 3051 3052ifdef::VK_EXT_custom_border_color[] 3053[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs'] 3054-- 3055The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is 3056defined as: 3057 3058include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[] 3059 3060 * [[limits-maxCustomBorderColorSamplers]] 3061 pname:maxCustomBorderColorSamplers indicates the maximum number of 3062 samplers with custom border colors which can: simultaneously exist on a 3063 device. 3064 3065:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT 3066include::{chapters}/limits.txt[tag=limits_desc] 3067 3068include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[] 3069-- 3070endif::VK_EXT_custom_border_color[] 3071 3072ifdef::VK_EXT_provoking_vertex[] 3073[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs'] 3074-- 3075The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined 3076as: 3077 3078include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[] 3079 3080 * pname:sType is the type of this structure. 3081 * pname:pNext is `NULL` or a pointer to a structure extending this 3082 structure. 3083 * [[limits-provokingVertexModePerPipeline]] 3084 pname:provokingVertexModePerPipeline indicates whether the 3085 implementation supports graphics pipelines with different provoking 3086 vertex modes within the same render pass instance. 3087 * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]] 3088 pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates 3089 whether the implementation can preserve the provoking vertex order when 3090 writing triangle fan vertices to transform feedback. 3091 3092:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT 3093include::{chapters}/limits.txt[tag=limits_desc] 3094 3095include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[] 3096-- 3097endif::VK_EXT_provoking_vertex[] 3098 3099ifdef::VK_HUAWEI_subpass_shading[] 3100[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs'] 3101-- 3102The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is 3103defined as: 3104 3105include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[] 3106 3107 * pname:sType is the type of this structure. 3108 * pname:pNext is `NULL` or a pointer to a structure extending this 3109 structure. 3110 * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]] 3111 pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum 3112 ratio between the width and height of the portion of the subpass shading 3113 shader workgroup size. 3114 pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two 3115 value, and must: be less than or equal to max(code:WorkgroupSize.x / 3116 code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x). 3117 3118:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI 3119include::{chapters}/limits.txt[tag=limits_desc] 3120 3121include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[] 3122-- 3123endif::VK_HUAWEI_subpass_shading[] 3124 3125ifdef::VK_EXT_multi_draw[] 3126 3127[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs'] 3128-- 3129The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as: 3130 3131include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[] 3132 3133The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure 3134describe the following features: 3135 3136 * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the 3137 maximum number of draw calls which can: be batched into a single 3138 multidraw. 3139 3140:refpage: VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT 3141include::{chapters}/limits.txt[tag=limits_desc] 3142 3143include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[] 3144-- 3145 3146endif::VK_EXT_multi_draw[] 3147 3148[[limits-minmax]] 3149== Limit Requirements 3150 3151The following table specifies the required: minimum/maximum for all Vulkan 3152graphics implementations. 3153Where a limit corresponds to a fine-grained device feature which is 3154optional:, the feature name is listed with two required: limits, one when 3155the feature is supported and one when it is not supported. 3156If an implementation supports a feature, the limits reported are the same 3157whether or not the feature is enabled. 3158 3159[[limits-types]] 3160.Required Limit Types 3161[width="100%",cols="<20%,<50%,<30%",options="header"] 3162|==== 3163| Type | Limit | Feature 3164| code:uint32_t | pname:maxImageDimension1D | - 3165| code:uint32_t | pname:maxImageDimension2D | - 3166| code:uint32_t | pname:maxImageDimension3D | - 3167| code:uint32_t | pname:maxImageDimensionCube | - 3168| code:uint32_t | pname:maxImageArrayLayers | - 3169| code:uint32_t | pname:maxTexelBufferElements | - 3170| code:uint32_t | pname:maxUniformBufferRange | - 3171| code:uint32_t | pname:maxStorageBufferRange | - 3172| code:uint32_t | pname:maxPushConstantsSize | - 3173| code:uint32_t | pname:maxMemoryAllocationCount | - 3174| code:uint32_t | pname:maxSamplerAllocationCount | - 3175| basetype:VkDeviceSize | pname:bufferImageGranularity | - 3176| basetype:VkDeviceSize | pname:sparseAddressSpaceSize | pname:sparseBinding 3177| code:uint32_t | pname:maxBoundDescriptorSets | - 3178| code:uint32_t | pname:maxPerStageDescriptorSamplers | - 3179| code:uint32_t | pname:maxPerStageDescriptorUniformBuffers | - 3180| code:uint32_t | pname:maxPerStageDescriptorStorageBuffers | - 3181| code:uint32_t | pname:maxPerStageDescriptorSampledImages | - 3182| code:uint32_t | pname:maxPerStageDescriptorStorageImages | - 3183| code:uint32_t | pname:maxPerStageDescriptorInputAttachments| - 3184| code:uint32_t | pname:maxPerStageResources | - 3185| code:uint32_t | pname:maxDescriptorSetSamplers | - 3186| code:uint32_t | pname:maxDescriptorSetUniformBuffers | - 3187| code:uint32_t | pname:maxDescriptorSetUniformBuffersDynamic| - 3188| code:uint32_t | pname:maxDescriptorSetStorageBuffers | - 3189| code:uint32_t | pname:maxDescriptorSetStorageBuffersDynamic| - 3190| code:uint32_t | pname:maxDescriptorSetSampledImages | - 3191| code:uint32_t | pname:maxDescriptorSetStorageImages | - 3192| code:uint32_t | pname:maxDescriptorSetInputAttachments | - 3193| code:uint32_t | pname:maxVertexInputAttributes | - 3194| code:uint32_t | pname:maxVertexInputBindings | - 3195| code:uint32_t | pname:maxVertexInputAttributeOffset | - 3196| code:uint32_t | pname:maxVertexInputBindingStride | - 3197| code:uint32_t | pname:maxVertexOutputComponents | - 3198| code:uint32_t | pname:maxTessellationGenerationLevel | pname:tessellationShader 3199| code:uint32_t | pname:maxTessellationPatchSize | pname:tessellationShader 3200| code:uint32_t | pname:maxTessellationControlPerVertexInputComponents | pname:tessellationShader 3201| code:uint32_t | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader 3202| code:uint32_t | pname:maxTessellationControlPerPatchOutputComponents | pname:tessellationShader 3203| code:uint32_t | pname:maxTessellationControlTotalOutputComponents | pname:tessellationShader 3204| code:uint32_t | pname:maxTessellationEvaluationInputComponents | pname:tessellationShader 3205| code:uint32_t | pname:maxTessellationEvaluationOutputComponents | pname:tessellationShader 3206| code:uint32_t | pname:maxGeometryShaderInvocations | pname:geometryShader 3207| code:uint32_t | pname:maxGeometryInputComponents | pname:geometryShader 3208| code:uint32_t | pname:maxGeometryOutputComponents | pname:geometryShader 3209| code:uint32_t | pname:maxGeometryOutputVertices | pname:geometryShader 3210| code:uint32_t | pname:maxGeometryTotalOutputComponents | pname:geometryShader 3211| code:uint32_t | pname:maxFragmentInputComponents | - 3212| code:uint32_t | pname:maxFragmentOutputAttachments | - 3213| code:uint32_t | pname:maxFragmentDualSrcAttachments | pname:dualSrcBlend 3214| code:uint32_t | pname:maxFragmentCombinedOutputResources | - 3215| code:uint32_t | pname:maxComputeSharedMemorySize | - 3216| 3 {times} code:uint32_t | pname:maxComputeWorkGroupCount | - 3217| code:uint32_t | pname:maxComputeWorkGroupInvocations | - 3218| 3 {times} code:uint32_t | pname:maxComputeWorkGroupSize | - 3219| code:uint32_t | pname:subPixelPrecisionBits | - 3220| code:uint32_t | pname:subTexelPrecisionBits | - 3221| code:uint32_t | pname:mipmapPrecisionBits | - 3222| code:uint32_t | pname:maxDrawIndexedIndexValue | pname:fullDrawIndexUint32 3223| code:uint32_t | pname:maxDrawIndirectCount | pname:multiDrawIndirect 3224| code:float | pname:maxSamplerLodBias | - 3225| code:float | pname:maxSamplerAnisotropy | pname:samplerAnisotropy 3226| code:uint32_t | pname:maxViewports | pname:multiViewport 3227| 2 {times} code:uint32_t | pname:maxViewportDimensions | - 3228| 2 {times} code:float | pname:viewportBoundsRange | - 3229| code:uint32_t | pname:viewportSubPixelBits | - 3230| code:size_t | pname:minMemoryMapAlignment | - 3231| basetype:VkDeviceSize | pname:minTexelBufferOffsetAlignment | - 3232| basetype:VkDeviceSize | pname:minUniformBufferOffsetAlignment | - 3233| basetype:VkDeviceSize | pname:minStorageBufferOffsetAlignment | - 3234| code:int32_t | pname:minTexelOffset | - 3235| code:uint32_t | pname:maxTexelOffset | - 3236| code:int32_t | pname:minTexelGatherOffset | pname:shaderImageGatherExtended 3237| code:uint32_t | pname:maxTexelGatherOffset | pname:shaderImageGatherExtended 3238| code:float | pname:minInterpolationOffset | pname:sampleRateShading 3239| code:float | pname:maxInterpolationOffset | pname:sampleRateShading 3240| code:uint32_t | pname:subPixelInterpolationOffsetBits | pname:sampleRateShading 3241| code:uint32_t | pname:maxFramebufferWidth | - 3242| code:uint32_t | pname:maxFramebufferHeight | - 3243| code:uint32_t | pname:maxFramebufferLayers | - 3244| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts | - 3245ifdef::VK_VERSION_1_2[] 3246| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts | - 3247endif::VK_VERSION_1_2[] 3248| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts | - 3249| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts | - 3250| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | - 3251| code:uint32_t | pname:maxColorAttachments | - 3252| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts | - 3253| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts | - 3254| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts | - 3255| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts | - 3256| tlink:VkSampleCountFlags | pname:storageImageSampleCounts | pname:shaderStorageImageMultisample 3257| code:uint32_t | pname:maxSampleMaskWords | - 3258| basetype:VkBool32 | pname:timestampComputeAndGraphics | - 3259| code:float | pname:timestampPeriod | - 3260| code:uint32_t | pname:maxClipDistances | pname:shaderClipDistance 3261| code:uint32_t | pname:maxCullDistances | pname:shaderCullDistance 3262| code:uint32_t | pname:maxCombinedClipAndCullDistances | pname:shaderCullDistance 3263| code:uint32_t | pname:discreteQueuePriorities | - 3264| 2 {times} code:float | pname:pointSizeRange | pname:largePoints 3265| 2 {times} code:float | pname:lineWidthRange | pname:wideLines 3266| code:float | pname:pointSizeGranularity | pname:largePoints 3267| code:float | pname:lineWidthGranularity | pname:wideLines 3268| basetype:VkBool32 | pname:strictLines | - 3269| basetype:VkBool32 | pname:standardSampleLocations | - 3270| basetype:VkDeviceSize | pname:optimalBufferCopyOffsetAlignment | - 3271| basetype:VkDeviceSize | pname:optimalBufferCopyRowPitchAlignment | - 3272| basetype:VkDeviceSize | pname:nonCoherentAtomSize | - 3273ifdef::VK_EXT_discard_rectangles[] 3274| code:uint32_t | pname:maxDiscardRectangles | `apiext:VK_EXT_discard_rectangles` 3275endif::VK_EXT_discard_rectangles[] 3276ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 3277| basetype:VkBool32 | pname:filterMinmaxSingleComponentFormats | 3278ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ] 3279ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`] 3280| basetype:VkBool32 | pname:filterMinmaxImageComponentMapping | 3281ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ] 3282ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`] 3283endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 3284ifdef::VK_KHR_maintenance4[] 3285| basetype:VkDeviceSize | pname:maxBufferSize | `<<features-maintenance4,pname:maintenance4>>` 3286endif::VK_KHR_maintenance4[] 3287ifdef::VK_EXT_conservative_rasterization[] 3288| code:float | pname:primitiveOverestimationSize | `apiext:VK_EXT_conservative_rasterization` 3289| basetype:VkBool32 | pname:maxExtraPrimitiveOverestimationSize | `apiext:VK_EXT_conservative_rasterization` 3290| code:float | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization` 3291| basetype:VkBool32 | pname:degenerateTriangleRasterized | `apiext:VK_EXT_conservative_rasterization` 3292| code:float | pname:degenerateLinesRasterized | `apiext:VK_EXT_conservative_rasterization` 3293| basetype:VkBool32 | pname:fullyCoveredFragmentShaderInputVariable | `apiext:VK_EXT_conservative_rasterization` 3294| basetype:VkBool32 | pname:conservativeRasterizationPostDepthCoverage | `apiext:VK_EXT_conservative_rasterization` 3295endif::VK_EXT_conservative_rasterization[] 3296ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 3297| code:uint32_t | pname:maxUpdateAfterBindDescriptorsInAllPools | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3298| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative | - 3299| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative | - 3300| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative | - 3301| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative | - 3302| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative | - 3303| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindSamplers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3304| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3305| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3306| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindSampledImages | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3307| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindStorageImages | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3308| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3309| code:uint32_t | pname:maxPerStageUpdateAfterBindResources | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3310| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindSamplers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3311| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindUniformBuffers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3312| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3313| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageBuffers | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3314| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3315| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindSampledImages | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3316| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindStorageImages | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3317| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindInputAttachments | `<<features-descriptorIndexing,pname:descriptorIndexing>>` 3318endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 3319ifdef::VK_EXT_vertex_attribute_divisor[] 3320| code:uint32_t | pname:maxVertexAttribDivisor | `apiext:VK_EXT_vertex_attribute_divisor` 3321endif::VK_EXT_vertex_attribute_divisor[] 3322ifdef::VK_NV_mesh_shader[] 3323| code:uint32_t | pname:maxDrawMeshTasksCount | `apiext:VK_NV_mesh_shader` 3324| code:uint32_t | pname:maxTaskWorkGroupInvocations | `apiext:VK_NV_mesh_shader` 3325| code:uint32_t | pname:maxTaskWorkGroupSize | `apiext:VK_NV_mesh_shader` 3326| code:uint32_t | pname:maxTaskTotalMemorySize | `apiext:VK_NV_mesh_shader` 3327| code:uint32_t | pname:maxTaskOutputCount | `apiext:VK_NV_mesh_shader` 3328| code:uint32_t | pname:maxMeshWorkGroupInvocations | `apiext:VK_NV_mesh_shader` 3329| code:uint32_t | pname:maxMeshWorkGroupSize | `apiext:VK_NV_mesh_shader` 3330| code:uint32_t | pname:maxMeshTotalMemorySize | `apiext:VK_NV_mesh_shader` 3331| code:uint32_t | pname:maxMeshOutputVertices | `apiext:VK_NV_mesh_shader` 3332| code:uint32_t | pname:maxMeshOutputPrimitives | `apiext:VK_NV_mesh_shader` 3333| code:uint32_t | pname:maxMeshMultiviewViewCount | `apiext:VK_NV_mesh_shader` 3334| code:uint32_t | pname:meshOutputPerVertexGranularity | `apiext:VK_NV_mesh_shader` 3335| code:uint32_t | pname:meshOutputPerPrimitiveGranularity | `apiext:VK_NV_mesh_shader` 3336endif::VK_NV_mesh_shader[] 3337ifdef::VK_EXT_transform_feedback[] 3338| code:uint32_t | pname:maxTransformFeedbackStreams | `apiext:VK_EXT_transform_feedback` 3339| code:uint32_t | pname:maxTransformFeedbackBuffers | `apiext:VK_EXT_transform_feedback` 3340| basetype:VkDeviceSize | pname:maxTransformFeedbackBufferSize | `apiext:VK_EXT_transform_feedback` 3341| code:uint32_t | pname:maxTransformFeedbackStreamDataSize | `apiext:VK_EXT_transform_feedback` 3342| code:uint32_t | pname:maxTransformFeedbackBufferDataSize | `apiext:VK_EXT_transform_feedback` 3343| code:uint32_t | pname:maxTransformFeedbackBufferDataStride | `apiext:VK_EXT_transform_feedback` 3344| basetype:VkBool32 | pname:transformFeedbackQueries | `apiext:VK_EXT_transform_feedback` 3345| basetype:VkBool32 | pname:transformFeedbackStreamsLinesTriangles | `apiext:VK_EXT_transform_feedback` 3346| basetype:VkBool32 | pname:transformFeedbackRasterizationStreamSelect | `apiext:VK_EXT_transform_feedback` 3347| basetype:VkBool32 | pname:transformFeedbackDraw | `apiext:VK_EXT_transform_feedback` 3348endif::VK_EXT_transform_feedback[] 3349ifdef::VK_EXT_fragment_density_map[] 3350| slink:VkExtent2D | pname:minFragmentDensityTexelSize | `apiext:VK_EXT_fragment_density_map` 3351| slink:VkExtent2D | pname:maxFragmentDensityTexelSize | `apiext:VK_EXT_fragment_density_map` 3352| basetype:VkBool32 | pname:fragmentDensityInvocations | `apiext:VK_EXT_fragment_density_map` 3353endif::VK_EXT_fragment_density_map[] 3354ifdef::VK_EXT_fragment_density_map2[] 3355| basetype:VkBool32 | pname:subsampledLoads | `apiext:VK_EXT_fragment_density_map2` 3356| basetype:VkBool32 | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2` 3357| code:uint32_t | pname:maxSubsampledArrayLayers | `apiext:VK_EXT_fragment_density_map2` 3358| code:uint32_t | pname:maxDescriptorSetSubsampledSamplers | `apiext:VK_EXT_fragment_density_map2` 3359endif::VK_EXT_fragment_density_map2[] 3360ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] 3361| code:uint32_t | pname:maxGeometryCount | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` 3362| code:uint32_t | pname:maxInstanceCount | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` 3363endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] 3364ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] 3365| code:uint32_t | pname:shaderGroupHandleSize | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` 3366| code:uint32_t | pname:maxShaderGroupStride | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` 3367| code:uint32_t | pname:shaderGroupBaseAlignment | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline` 3368endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] 3369ifdef::VK_NV_ray_tracing[] 3370| code:uint32_t | pname:maxRecursionDepth | `apiext:VK_NV_ray_tracing` 3371| code:uint32_t | pname:maxTriangleCount | `apiext:VK_NV_ray_tracing` 3372endif::VK_NV_ray_tracing[] 3373ifdef::VK_KHR_acceleration_structure[] 3374| code:uint32_t | pname:maxPerStageDescriptorAccelerationStructures 3375 | `apiext:VK_KHR_acceleration_structure` 3376| code:uint32_t | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures 3377 | `apiext:VK_KHR_acceleration_structure` 3378endif::VK_KHR_acceleration_structure[] 3379ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] 3380| code:uint32_t | pname:maxDescriptorSetAccelerationStructures | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure` 3381endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[] 3382ifdef::VK_KHR_acceleration_structure[] 3383| code:uint32_t | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures 3384 | `apiext:VK_KHR_acceleration_structure` 3385| code:uint32_t | pname:minAccelerationStructureScratchOffsetAlignment 3386 | `apiext:VK_KHR_acceleration_structure` 3387endif::VK_KHR_acceleration_structure[] 3388ifdef::VK_KHR_ray_tracing_pipeline[] 3389| code:uint32_t | pname:maxRayRecursionDepth | `apiext:VK_KHR_ray_tracing_pipeline` 3390| code:uint32_t | pname:shaderGroupHandleCaptureReplaySize | `apiext:VK_KHR_ray_tracing_pipeline` 3391| code:uint32_t | pname:maxRayDispatchInvocationCount | `apiext:VK_KHR_ray_tracing_pipeline` 3392| code:uint32_t | pname:shaderGroupHandleAlignment | `apiext:VK_KHR_ray_tracing_pipeline` 3393| code:uint32_t | pname:maxRayHitAttributeSize | `apiext:VK_KHR_ray_tracing_pipeline` 3394endif::VK_KHR_ray_tracing_pipeline[] 3395ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 3396| code:uint64_t | pname:maxTimelineSemaphoreValueDifference | `<<features-timelineSemaphore,pname:timelineSemaphore>>` 3397endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 3398ifdef::VK_EXT_line_rasterization[] 3399| code:uint32_t | pname:lineSubPixelPrecisionBits | `apiext:VK_EXT_line_rasterization` 3400endif::VK_EXT_line_rasterization[] 3401ifdef::VK_EXT_custom_border_color[] 3402| code:uint32_t | pname:maxCustomBorderColorSamplers | `apiext:VK_EXT_custom_border_color` 3403endif::VK_EXT_custom_border_color[] 3404ifdef::VK_EXT_robustness2[] 3405| basetype:VkDeviceSize | pname:robustStorageBufferAccessSizeAlignment | `apiext:VK_EXT_robustness2` 3406| basetype:VkDeviceSize | pname:robustUniformBufferAccessSizeAlignment | `apiext:VK_EXT_robustness2` 3407endif::VK_EXT_robustness2[] 3408ifdef::VK_KHR_fragment_shading_rate[] 3409| 2 {times} code:uint32_t | pname:minFragmentShadingRateAttachmentTexelSize | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>` 3410| 2 {times} code:uint32_t | pname:maxFragmentShadingRateAttachmentTexelSize | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>` 3411| code:uint32_t | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>` 3412| basetype:VkBool32 | pname:primitiveFragmentShadingRateWithMultipleViewports | `<<features-primitiveFragmentShadingRate,pname:primitiveFragmentShadingRate>>` 3413| basetype:VkBool32 | pname:layeredShadingRateAttachments | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>` 3414| basetype:VkBool32 | pname:fragmentShadingRateNonTrivialCombinerOps | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3415| 2 {times} code:uint32_t | pname:maxFragmentSize | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3416| code:uint32_t | pname:maxFragmentSizeAspectRatio | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3417| code:uint32_t | pname:maxFragmentShadingRateCoverageSamples | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3418| elink:VkSampleCountFlagBits | pname:maxFragmentShadingRateRasterizationSamples | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3419| basetype:VkBool32 | pname:fragmentShadingRateWithShaderDepthStencilWrites | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3420| basetype:VkBool32 | pname:fragmentShadingRateWithSampleMask | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3421| basetype:VkBool32 | pname:fragmentShadingRateWithShaderSampleMask | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3422| basetype:VkBool32 | pname:fragmentShadingRateWithConservativeRasterization | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3423| basetype:VkBool32 | pname:fragmentShadingRateWithFragmentShaderInterlock | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3424| basetype:VkBool32 | pname:fragmentShadingRateWithCustomSampleLocations | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3425| basetype:VkBool32 | pname:fragmentShadingRateStrictMultiplyCombiner | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>` 3426endif::VK_KHR_fragment_shading_rate[] 3427ifdef::VK_NV_fragment_shading_rate_enums[] 3428| elink:VkSampleCountFlagBits | pname:maxFragmentShadingRateInvocationCount | `<<features-supersampleFragmentShadingRates,pname:supersampleFragmentShadingRates>>` 3429endif::VK_NV_fragment_shading_rate_enums[] 3430ifdef::VK_HUAWEI_subpass_shading[] 3431| code:uint32_t | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading,pname:subpassShading>>` 3432endif::VK_HUAWEI_subpass_shading[] 3433|==== 3434 3435[[limits-required]] 3436.Required Limits 3437[width="100%",cols="<35,<9,<14,<11",options="header"] 3438|==== 3439| Limit | Unsupported Limit | Supported Limit | Limit Type^1^ 3440| pname:maxImageDimension1D | - | 4096 | min 3441| pname:maxImageDimension2D | - | 4096 | min 3442| pname:maxImageDimension3D | - | 256 | min 3443| pname:maxImageDimensionCube | - | 4096 | min 3444| pname:maxImageArrayLayers | - | 256 | min 3445| pname:maxTexelBufferElements | - | 65536 | min 3446| pname:maxUniformBufferRange | - | 16384 | min 3447| pname:maxStorageBufferRange | - | 2^27^ | min 3448| pname:maxPushConstantsSize | - | 128 | min 3449| pname:maxMemoryAllocationCount | - | 4096 | min 3450| pname:maxSamplerAllocationCount | - | 4000 | min 3451| pname:bufferImageGranularity | - | 131072 | max 3452| pname:sparseAddressSpaceSize | 0 | 2^31^ | min 3453| pname:maxBoundDescriptorSets | - | 4 | min 3454| pname:maxPerStageDescriptorSamplers | - | 16 | min 3455| pname:maxPerStageDescriptorUniformBuffers | - | 12 | min 3456| pname:maxPerStageDescriptorStorageBuffers | - | 4 | min 3457| pname:maxPerStageDescriptorSampledImages | - | 16 | min 3458| pname:maxPerStageDescriptorStorageImages | - | 4 | min 3459| pname:maxPerStageDescriptorInputAttachments| - | 4 | min 3460| pname:maxPerStageResources | - | 128 ^2^ | min 3461| pname:maxDescriptorSetSamplers | - | 96 ^8^ | min, _n_ {times} PerStage 3462| pname:maxDescriptorSetUniformBuffers | - | 72 ^8^ | min, _n_ {times} PerStage 3463| pname:maxDescriptorSetUniformBuffersDynamic| - | 8 | min 3464| pname:maxDescriptorSetStorageBuffers | - | 24 ^8^ | min, _n_ {times} PerStage 3465| pname:maxDescriptorSetStorageBuffersDynamic| - | 4 | min 3466| pname:maxDescriptorSetSampledImages | - | 96 ^8^ | min, _n_ {times} PerStage 3467| pname:maxDescriptorSetStorageImages | - | 24 ^8^ | min, _n_ {times} PerStage 3468| pname:maxDescriptorSetInputAttachments | - | 4 | min 3469| pname:maxVertexInputAttributes | - | 16 | min 3470ifndef::VK_KHR_portability_subset[] 3471| pname:maxVertexInputBindings | - | 16 | min 3472endif::VK_KHR_portability_subset[] 3473ifdef::VK_KHR_portability_subset[] 3474| pname:maxVertexInputBindings | - | 16 ^10^ | min 3475endif::VK_KHR_portability_subset[] 3476| pname:maxVertexInputAttributeOffset | - | 2047 | min 3477| pname:maxVertexInputBindingStride | - | 2048 | min 3478| pname:maxVertexOutputComponents | - | 64 | min 3479| pname:maxTessellationGenerationLevel | 0 | 64 | min 3480| pname:maxTessellationPatchSize | 0 | 32 | min 3481| pname:maxTessellationControlPerVertexInputComponents | 0 |64 | min 3482| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min 3483| pname:maxTessellationControlPerPatchOutputComponents | 0 |120 | min 3484| pname:maxTessellationControlTotalOutputComponents | 0 |2048 | min 3485| pname:maxTessellationEvaluationInputComponents | 0 |64 | min 3486| pname:maxTessellationEvaluationOutputComponents | 0 |64 | min 3487| pname:maxGeometryShaderInvocations | 0 | 32 | min 3488| pname:maxGeometryInputComponents | 0 | 64 | min 3489| pname:maxGeometryOutputComponents | 0 | 64 | min 3490| pname:maxGeometryOutputVertices | 0 | 256 | min 3491| pname:maxGeometryTotalOutputComponents | 0 | 1024 | min 3492| pname:maxFragmentInputComponents | - | 64 | min 3493| pname:maxFragmentOutputAttachments | - | 4 | min 3494| pname:maxFragmentDualSrcAttachments | 0 | 1 | min 3495| pname:maxFragmentCombinedOutputResources | - | 4 | min 3496| pname:maxComputeSharedMemorySize | - | 16384 | min 3497| pname:maxComputeWorkGroupCount | - | (65535,65535,65535) | min 3498| pname:maxComputeWorkGroupInvocations | - | 128 | min 3499| pname:maxComputeWorkGroupSize | - | (128,128,64) | min 3500| pname:subPixelPrecisionBits | - | 4 | min 3501| pname:subTexelPrecisionBits | - | 4 | min 3502| pname:mipmapPrecisionBits | - | 4 | min 3503| pname:maxDrawIndexedIndexValue | 2^24^-1 | 2^32^-1 | min 3504| pname:maxDrawIndirectCount | 1 | 2^16^-1 | min 3505| pname:maxSamplerLodBias | - | 2 | min 3506| pname:maxSamplerAnisotropy | 1 | 16 | min 3507| pname:maxViewports | 1 | 16 | min 3508| pname:maxViewportDimensions | - | (4096,4096) ^3^ | min 3509| pname:viewportBoundsRange | - | (-8192,8191) ^4^ | (max,min) 3510| pname:viewportSubPixelBits | - | 0 | min 3511| pname:minMemoryMapAlignment | - | 64 | min 3512| pname:minTexelBufferOffsetAlignment | - | 256 | max 3513| pname:minUniformBufferOffsetAlignment | - | 256 | max 3514| pname:minStorageBufferOffsetAlignment | - | 256 | max 3515| pname:minTexelOffset | - | -8 | max 3516| pname:maxTexelOffset | - | 7 | min 3517| pname:minTexelGatherOffset | 0 | -8 | max 3518| pname:maxTexelGatherOffset | 0 | 7 | min 3519| pname:minInterpolationOffset |0.0| -0.5 ^5^ | max 3520| pname:maxInterpolationOffset |0.0| 0.5 - (1 ULP) ^5^ | min 3521| pname:subPixelInterpolationOffsetBits | 0 | 4 ^5^ | min 3522| pname:maxFramebufferWidth | - | 4096 | min 3523| pname:maxFramebufferHeight | - | 4096 | min 3524| pname:maxFramebufferLayers | - | 256 | min 3525| pname:framebufferColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3526ifdef::VK_VERSION_1_2[] 3527| pname:framebufferIntegerColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT) | min 3528endif::VK_VERSION_1_2[] 3529| pname:framebufferDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3530| pname:framebufferStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3531| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3532| pname:maxColorAttachments | - | 4 | min 3533| pname:sampledImageColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3534| pname:sampledImageIntegerSampleCounts | - | ename:VK_SAMPLE_COUNT_1_BIT | min 3535| pname:sampledImageDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3536| pname:sampledImageStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3537| pname:storageImageSampleCounts | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min 3538| pname:maxSampleMaskWords | - | 1 | min 3539| pname:timestampComputeAndGraphics | - | - |implementation-dependent 3540| pname:timestampPeriod | - | - |duration 3541| pname:maxClipDistances | 0 | 8 | min 3542| pname:maxCullDistances | 0 | 8 | min 3543| pname:maxCombinedClipAndCullDistances | 0 | 8 | min 3544| pname:discreteQueuePriorities | - | 2 | min 3545| pname:pointSizeRange | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min) 3546| pname:lineWidthRange | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min) 3547| pname:pointSizeGranularity | 0.0 | 1.0 ^6^ | max, fixed point increment 3548| pname:lineWidthGranularity | 0.0 | 1.0 ^7^ | max, fixed point increment 3549| pname:strictLines | - | - | implementation-dependent 3550| pname:standardSampleLocations | - | - | implementation-dependent 3551| pname:optimalBufferCopyOffsetAlignment | - | - | recommendation 3552| pname:optimalBufferCopyRowPitchAlignment | - | - | recommendation 3553| pname:nonCoherentAtomSize | - | 256 | max 3554ifdef::VK_KHR_push_descriptor[] 3555| pname:maxPushDescriptors | - | 32 | min 3556endif::VK_KHR_push_descriptor[] 3557ifdef::VK_VERSION_1_1,VK_KHR_multiview[] 3558| pname:maxMultiviewViewCount | - | 6 | min 3559| pname:maxMultiviewInstanceIndex | - | 2^27^-1 | min 3560endif::VK_VERSION_1_1,VK_KHR_multiview[] 3561ifdef::VK_EXT_discard_rectangles[] 3562| pname:maxDiscardRectangles | 0 | 4 | min 3563endif::VK_EXT_discard_rectangles[] 3564ifdef::VK_EXT_sample_locations[] 3565| pname:sampleLocationSampleCounts | - | ename:VK_SAMPLE_COUNT_4_BIT | min 3566| pname:maxSampleLocationGridSize | - | (1,1) | min 3567| pname:sampleLocationCoordinateRange | - | (0.0, 0.9375) | (max,min) 3568| pname:sampleLocationSubPixelBits | - | 4 | min 3569| pname:variableSampleLocations | - |false| implementation-dependent 3570endif::VK_EXT_sample_locations[] 3571ifdef::VK_EXT_external_memory_host[] 3572| pname:minImportedHostPointerAlignment | - | 65536 | max 3573endif::VK_EXT_external_memory_host[] 3574ifdef::VK_NVX_multiview_per_view_attributes[] 3575| pname:perViewPositionAllComponents | - | - | implementation-dependent 3576endif::VK_NVX_multiview_per_view_attributes[] 3577ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 3578| pname:filterMinmaxSingleComponentFormats | - | - | implementation-dependent 3579| pname:filterMinmaxImageComponentMapping | - | - | implementation-dependent 3580endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] 3581ifdef::VK_EXT_blend_operation_advanced[] 3582| pname:advancedBlendMaxColorAttachments | - | 1 | min 3583| pname:advancedBlendIndependentBlend | - |false| implementation-dependent 3584| pname:advancedBlendNonPremultipliedSrcColor | - |false| implementation-dependent 3585| pname:advancedBlendNonPremultipliedDstColor | - |false| implementation-dependent 3586| pname:advancedBlendCorrelatedOverlap | - |false| implementation-dependent 3587| pname:advancedBlendAllOperations | - |false| implementation-dependent 3588endif::VK_EXT_blend_operation_advanced[] 3589ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[] 3590| pname:maxPerSetDescriptors | - |1024 | min 3591| pname:maxMemoryAllocationSize | - | 2^30^ | min 3592endif::VK_VERSION_1_1,VK_KHR_maintenance3[] 3593ifdef::VK_KHR_maintenance4[] 3594| pname:maxBufferSize | - | 2^30^ | min 3595endif::VK_KHR_maintenance4[] 3596ifdef::VK_EXT_conservative_rasterization[] 3597| pname:primitiveOverestimationSize | - |0.0 | min 3598| pname:maxExtraPrimitiveOverestimationSize | - |0.0 | min 3599| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0 | min 3600| pname:primitiveUnderestimation | - |false | implementation-dependent 3601| pname:conservativePointAndLineRasterization | - |false | implementation-dependent 3602| pname:degenerateTrianglesRasterized | - |false | implementation-dependent 3603| pname:degenerateLinesRasterized | - |false | implementation-dependent 3604| pname:fullyCoveredFragmentShaderInputVariable | - |false | implementation-dependent 3605| pname:conservativeRasterizationPostDepthCoverage | - |false | implementation-dependent 3606endif::VK_EXT_conservative_rasterization[] 3607ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 3608| pname:maxUpdateAfterBindDescriptorsInAllPools | 0 |500000| min 3609| pname:shaderUniformBufferArrayNonUniformIndexingNative | - |false| implementation-dependent 3610| pname:shaderSampledImageArrayNonUniformIndexingNative | - |false| implementation-dependent 3611| pname:shaderStorageBufferArrayNonUniformIndexingNative | - |false| implementation-dependent 3612| pname:shaderStorageImageArrayNonUniformIndexingNative | - |false| implementation-dependent 3613| pname:shaderInputAttachmentArrayNonUniformIndexingNative | - |false| implementation-dependent 3614| pname:maxPerStageDescriptorUpdateAfterBindSamplers | 0^9^ |500000 ^9^ | min 3615| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | 0^9^ |12 ^9^ | min 3616| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | 0^9^ |500000 ^9^ | min 3617| pname:maxPerStageDescriptorUpdateAfterBindSampledImages | 0^9^ |500000 ^9^ | min 3618| pname:maxPerStageDescriptorUpdateAfterBindStorageImages | 0^9^ |500000 ^9^ | min 3619| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min 3620| pname:maxPerStageUpdateAfterBindResources | 0^9^ |500000 ^9^ | min 3621| pname:maxDescriptorSetUpdateAfterBindSamplers | 0^9^ |500000 ^9^ | min 3622| pname:maxDescriptorSetUpdateAfterBindUniformBuffers | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage 3623| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min 3624| pname:maxDescriptorSetUpdateAfterBindStorageBuffers | 0^9^ |500000 ^9^ | min 3625| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min 3626| pname:maxDescriptorSetUpdateAfterBindSampledImages | 0^9^ |500000 ^9^ | min 3627| pname:maxDescriptorSetUpdateAfterBindStorageImages | 0^9^ |500000 ^9^ | min 3628| pname:maxDescriptorSetUpdateAfterBindInputAttachments | 0^9^ |4 ^9^ | min 3629endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 3630ifdef::VK_EXT_inline_uniform_block[] 3631| pname:maxInlineUniformBlockSize | - | 256 | min 3632| pname:maxPerStageDescriptorInlineUniformBlocks | - | 4 | min 3633| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4 | min 3634| pname:maxDescriptorSetInlineUniformBlocks | - | 4 | min 3635| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks | - | 4 | min 3636endif::VK_EXT_inline_uniform_block[] 3637ifdef::VK_EXT_vertex_attribute_divisor[] 3638| pname:maxVertexAttribDivisor | - | 2^16^-1 | min 3639endif::VK_EXT_vertex_attribute_divisor[] 3640ifdef::VK_NV_mesh_shader[] 3641| pname:maxDrawMeshTasksCount | - | 2^16^-1 | min 3642| pname:maxTaskWorkGroupInvocations | - | 32 | min 3643| pname:maxTaskWorkGroupSize | - | (32,1,1) | min 3644| pname:maxTaskTotalMemorySize | - | 16384 | min 3645| pname:maxTaskOutputCount | - | 2^16^-1 | min 3646| pname:maxMeshWorkGroupInvocations | - | 32 | min 3647| pname:maxMeshWorkGroupSize | - | (32,1,1) | min 3648| pname:maxMeshTotalMemorySize | - | 16384 | min 3649| pname:maxMeshOutputVertices | - | 256 | min 3650| pname:maxMeshOutputPrimitives | - | 256 | min 3651| pname:maxMeshMultiviewViewCount | - | 1 | min 3652| pname:meshOutputPerVertexGranularity | - | - | implementation-dependent 3653| pname:meshOutputPerPrimitiveGranularity | - | - | implementation-dependent 3654endif::VK_NV_mesh_shader[] 3655ifdef::VK_EXT_transform_feedback[] 3656| pname:maxTransformFeedbackStreams | - | 1 | min 3657| pname:maxTransformFeedbackBuffers | - | 1 | min 3658| pname:maxTransformFeedbackBufferSize | - | 2^27^ | min 3659| pname:maxTransformFeedbackStreamDataSize | - | 512 | min 3660| pname:maxTransformFeedbackBufferDataSize | - | 512 | min 3661| pname:maxTransformFeedbackBufferDataStride | - | 512 | min 3662| pname:transformFeedbackQueries | - | false | implementation-dependent 3663| pname:transformFeedbackStreamsLinesTriangles | - | false | implementation-dependent 3664| pname:transformFeedbackRasterizationStreamSelect | - | false | implementation-dependent 3665| pname:transformFeedbackDraw | - | false | implementation-dependent 3666endif::VK_EXT_transform_feedback[] 3667ifdef::VK_EXT_fragment_density_map[] 3668| pname:minFragmentDensityTexelSize | - | (1,1) | min 3669| pname:maxFragmentDensityTexelSize | - | (1,1) | min 3670| pname:fragmentDensityInvocations | - | - | implementation-dependent 3671endif::VK_EXT_fragment_density_map[] 3672ifdef::VK_EXT_fragment_density_map2[] 3673| pname:subsampledLoads | true | false | implementation-dependent 3674| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent 3675| pname:maxSubsampledArrayLayers | 2 | 2 | min 3676| pname:maxDescriptorSetSubsampledSamplers | 1 | 1 | min 3677endif::VK_EXT_fragment_density_map2[] 3678ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] 3679ifdef::VK_NV_ray_tracing[] 3680| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16 | min 3681| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth | - | 31 | min 3682endif::VK_NV_ray_tracing[] 3683ifdef::VK_KHR_ray_tracing_pipeline[] 3684| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32 | exact 3685| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth | - | 1 | min 3686endif::VK_KHR_ray_tracing_pipeline[] 3687| pname:maxShaderGroupStride | - | 4096 | min 3688| pname:shaderGroupBaseAlignment | - | 64 | max 3689| pname:maxGeometryCount | - | 2^24^-1 | min 3690| pname:maxInstanceCount | - | 2^24^-1 | min 3691ifdef::VK_NV_ray_tracing[] 3692| pname:maxTriangleCount | - | 2^29^-1 | min 3693endif::VK_NV_ray_tracing[] 3694ifdef::VK_KHR_acceleration_structure[] 3695| pname:maxPrimitiveCount | - | 2^29^-1 | min 3696| pname:maxPerStageDescriptorAccelerationStructures | - | 16 | min 3697| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures | - | 500000 ^9^ | min 3698endif::VK_KHR_acceleration_structure[] 3699| pname:maxDescriptorSetAccelerationStructures | - | 16 | min 3700endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[] 3701ifdef::VK_KHR_acceleration_structure[] 3702| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures | - | 500000 ^9^ | min 3703| pname:minAccelerationStructureScratchOffsetAlignment | - | 256 | max 3704endif::VK_KHR_acceleration_structure[] 3705ifdef::VK_KHR_ray_tracing_pipeline[] 3706| pname:shaderGroupHandleCaptureReplaySize | - | 64 | max 3707| pname:maxRayDispatchInvocationCount | - | 2^30^ | min 3708| pname:shaderGroupHandleAlignment | - | 32 | max 3709| pname:maxRayHitAttributeSize | - | 32 | min 3710endif::VK_KHR_ray_tracing_pipeline[] 3711ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 3712| pname:maxTimelineSemaphoreValueDifference | - | 2^31^-1 | min 3713endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] 3714ifdef::VK_EXT_line_rasterization[] 3715| pname:lineSubPixelPrecisionBits | - | 4 | min 3716endif::VK_EXT_line_rasterization[] 3717ifdef::VK_NV_device_generated_commands[] 3718| pname:maxGraphicsShaderGroupCount | - | 2^12^ | min 3719| pname:maxIndirectSequenceCount | - | 2^20^ | min 3720| pname:maxIndirectCommandsTokenCount | - | 16 | min 3721| pname:maxIndirectCommandsStreamCount | - | 16 | min 3722| pname:maxIndirectCommandsTokenOffset | - | 2047 | min 3723| pname:maxIndirectCommandsStreamStride | - | 2048 | min 3724| pname:minSequencesCountBufferOffsetAlignment | - | 256 | max 3725| pname:minSequencesIndexBufferOffsetAlignment | - | 256 | max 3726| pname:minIndirectCommandsBufferOffsetAlignment | - | 256 | max 3727endif::VK_NV_device_generated_commands[] 3728ifdef::VK_EXT_custom_border_color[] 3729| pname:maxCustomBorderColorSamplers | - | 32 | min 3730endif::VK_EXT_custom_border_color[] 3731ifdef::VK_EXT_robustness2[] 3732| pname:robustStorageBufferAccessSizeAlignment | - | 4 | max 3733| pname:robustUniformBufferAccessSizeAlignment | - | 256 | max 3734endif::VK_EXT_robustness2[] 3735ifdef::VK_KHR_fragment_shading_rate[] 3736| pname:minFragmentShadingRateAttachmentTexelSize | (0,0) | (32,32) | max 3737| pname:maxFragmentShadingRateAttachmentTexelSize | (0,0) | (8,8) | min 3738| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | 0 | 1 | min 3739| pname:primitiveFragmentShadingRateWithMultipleViewports | false | false | implementation-dependent 3740| pname:layeredShadingRateAttachments | false | false | implementation-dependent 3741| pname:fragmentShadingRateNonTrivialCombinerOps | - | false | implementation-dependent 3742| pname:maxFragmentSize | - | (2,2) | min 3743| pname:maxFragmentSizeAspectRatio | - | 2 | min 3744| pname:maxFragmentShadingRateCoverageSamples | - | 16 | min 3745| pname:maxFragmentShadingRateRasterizationSamples | - | ename:VK_SAMPLE_COUNT_4_BIT | min 3746| pname:fragmentShadingRateWithShaderDepthStencilWrites | - | false | implementation-dependent 3747| pname:fragmentShadingRateWithSampleMask | - | false | implementation-dependent 3748| pname:fragmentShadingRateWithShaderSampleMask | - | false | implementation-dependent 3749| pname:fragmentShadingRateWithConservativeRasterization | - | false | implementation-dependent 3750| pname:fragmentShadingRateWithFragmentShaderInterlock | - | false | implementation-dependent 3751| pname:fragmentShadingRateWithCustomSampleLocations | - | false | implementation-dependent 3752| pname:fragmentShadingRateStrictMultiplyCombiner | - | false | implementation-dependent 3753endif::VK_KHR_fragment_shading_rate[] 3754ifdef::VK_NV_fragment_shading_rate_enums[] 3755| pname:maxFragmentShadingRateInvocationCount | - | ename:VK_SAMPLE_COUNT_4_BIT | min 3756endif::VK_NV_fragment_shading_rate_enums[] 3757ifdef::VK_HUAWEI_subpass_shading[] 3758| pname:maxSubpassShadingWorkgroupSizeAspectRatio | 0 | 1 | min 3759endif::VK_HUAWEI_subpass_shading[] 3760ifdef::VK_EXT_multi_draw[] 3761| pname:maxMultiDrawCount | - | 1024 | min 3762endif::VK_EXT_multi_draw[] 3763|==== 3764 37651:: 3766 The *Limit Type* column specifies the limit is either the minimum limit 3767 all implementations must: support, the maximum limit all implementations 3768 must: support, or the exact value all implementations must: support. 3769 For bitmasks a minimum limit is the least bits all implementations must: 3770 set, but they may: have additional bits set beyond this minimum. 3771 37722:: 3773 The pname:maxPerStageResources must: be at least the smallest of the 3774 following: 3775+ 3776 * the sum of the pname:maxPerStageDescriptorUniformBuffers, 3777 pname:maxPerStageDescriptorStorageBuffers, 3778 pname:maxPerStageDescriptorSampledImages, 3779 pname:maxPerStageDescriptorStorageImages, 3780 pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments 3781 limits, or 3782 * 128. 3783+ 3784It may: not be possible to reach this limit in every stage. 3785 37863:: 3787 See <<limits-maxViewportDimensions,pname:maxViewportDimensions>> for the 3788 required: relationship to other limits. 3789 37904:: 3791 See <<limits-viewportboundsrange,pname:viewportBoundsRange>> for the 3792 required: relationship to other limits. 3793 37945:: 3795 The values pname:minInterpolationOffset and pname:maxInterpolationOffset 3796 describe the closed interval of supported interpolation offsets: 3797 [pname:minInterpolationOffset, pname:maxInterpolationOffset]. 3798 The ULP is determined by pname:subPixelInterpolationOffsetBits. 3799 If pname:subPixelInterpolationOffsetBits is 4, this provides increments 3800 of (1/2^4^) = 0.0625, and thus the range of supported interpolation 3801 offsets would be [eq]#[-0.5, 0.4375]#. 3802 38036:: 3804 The point size ULP is determined by pname:pointSizeGranularity. 3805 If the pname:pointSizeGranularity is 0.125, the range of supported point 3806 sizes must: be at least [1.0, 63.875]. 3807 38087:: 3809 The line width ULP is determined by pname:lineWidthGranularity. 3810 If the pname:lineWidthGranularity is 0.0625, the range of supported line 3811 widths must: be at least [1.0, 7.9375]. 3812 38138:: 3814 The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding 3815 _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is 3816 the number of shader stages supported by the slink:VkPhysicalDevice. 3817 If all shader stages are supported, _n_ = 6 (vertex, tessellation 3818 control, tessellation evaluation, geometry, fragment, compute). 3819 3820ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 38219:: 3822 The ptext:UpdateAfterBind descriptor limits must: each be greater than 3823 or equal to the corresponding ptext:non-UpdateAfterBind limit. 3824endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[] 3825 3826ifdef::VK_KHR_portability_subset[] 382710:: 3828 If the `apiext:VK_KHR_portability_subset` extension is enabled, the 3829 required minimum value of pname:maxVertexInputBindings is code:8. 3830endif::VK_KHR_portability_subset[] 3831 3832 3833ifdef::VK_EXT_sample_locations[] 3834 3835[[limits-multisample]] 3836== Additional Multisampling Capabilities 3837 3838[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos'] 3839-- 3840To query additional multisampling capabilities which may: be supported for a 3841specific sample count, beyond the minimum capabilities described for 3842<<limits, Limits>> above, call: 3843 3844include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[] 3845 3846 * pname:physicalDevice is the physical device from which to query the 3847 additional multisampling capabilities. 3848 * pname:samples is a elink:VkSampleCountFlagBits value specifying the 3849 sample count to query capabilities for. 3850 * pname:pMultisampleProperties is a pointer to a 3851 slink:VkMultisamplePropertiesEXT structure in which information about 3852 additional multisampling capabilities specific to the sample count is 3853 returned. 3854 3855include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[] 3856-- 3857 3858[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs'] 3859-- 3860The sname:VkMultisamplePropertiesEXT structure is defined as 3861 3862include::{generated}/api/structs/VkMultisamplePropertiesEXT.txt[] 3863 3864 * pname:sType is the type of this structure. 3865 * pname:pNext is `NULL` or a pointer to a structure extending this 3866 structure. 3867 * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in 3868 which sample locations can: vary. 3869 3870include::{generated}/validity/structs/VkMultisamplePropertiesEXT.txt[] 3871-- 3872 3873If the sample count for which additional multisampling capabilities are 3874requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set 3875in sname:VkPhysicalDeviceSampleLocationsPropertiesEXT:: 3876<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the 3877pname:width and pname:height members of 3878sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be 3879greater than or equal to the corresponding members of 3880sname:VkPhysicalDeviceSampleLocationsPropertiesEXT:: 3881<<limits-maxSampleLocationGridSize,pname:maxSampleLocationGridSize>>, 3882respectively, otherwise both members must: be `0`. 3883endif::VK_EXT_sample_locations[] 3884 3885// If you are adding a new features structure, it must be placed at the end 3886// of the previous section (immediately before [[limits-multisample]]). 3887