限制
限制是实现相关的最小值、最大值和其他设备特性,应用程序可能需要了解这些特性。
|
限制通过基本的 VkPhysicalDeviceLimits 结构以及可扩展结构 |
VkPhysicalDeviceLimits 结构定义为
// Provided by VK_VERSION_1_0
typedef struct VkPhysicalDeviceLimits {
uint32_t maxImageDimension1D;
uint32_t maxImageDimension2D;
uint32_t maxImageDimension3D;
uint32_t maxImageDimensionCube;
uint32_t maxImageArrayLayers;
uint32_t maxTexelBufferElements;
uint32_t maxUniformBufferRange;
uint32_t maxStorageBufferRange;
uint32_t maxPushConstantsSize;
uint32_t maxMemoryAllocationCount;
uint32_t maxSamplerAllocationCount;
VkDeviceSize bufferImageGranularity;
VkDeviceSize sparseAddressSpaceSize;
uint32_t maxBoundDescriptorSets;
uint32_t maxPerStageDescriptorSamplers;
uint32_t maxPerStageDescriptorUniformBuffers;
uint32_t maxPerStageDescriptorStorageBuffers;
uint32_t maxPerStageDescriptorSampledImages;
uint32_t maxPerStageDescriptorStorageImages;
uint32_t maxPerStageDescriptorInputAttachments;
uint32_t maxPerStageResources;
uint32_t maxDescriptorSetSamplers;
uint32_t maxDescriptorSetUniformBuffers;
uint32_t maxDescriptorSetUniformBuffersDynamic;
uint32_t maxDescriptorSetStorageBuffers;
uint32_t maxDescriptorSetStorageBuffersDynamic;
uint32_t maxDescriptorSetSampledImages;
uint32_t maxDescriptorSetStorageImages;
uint32_t maxDescriptorSetInputAttachments;
uint32_t maxVertexInputAttributes;
uint32_t maxVertexInputBindings;
uint32_t maxVertexInputAttributeOffset;
uint32_t maxVertexInputBindingStride;
uint32_t maxVertexOutputComponents;
uint32_t maxTessellationGenerationLevel;
uint32_t maxTessellationPatchSize;
uint32_t maxTessellationControlPerVertexInputComponents;
uint32_t maxTessellationControlPerVertexOutputComponents;
uint32_t maxTessellationControlPerPatchOutputComponents;
uint32_t maxTessellationControlTotalOutputComponents;
uint32_t maxTessellationEvaluationInputComponents;
uint32_t maxTessellationEvaluationOutputComponents;
uint32_t maxGeometryShaderInvocations;
uint32_t maxGeometryInputComponents;
uint32_t maxGeometryOutputComponents;
uint32_t maxGeometryOutputVertices;
uint32_t maxGeometryTotalOutputComponents;
uint32_t maxFragmentInputComponents;
uint32_t maxFragmentOutputAttachments;
uint32_t maxFragmentDualSrcAttachments;
uint32_t maxFragmentCombinedOutputResources;
uint32_t maxComputeSharedMemorySize;
uint32_t maxComputeWorkGroupCount[3];
uint32_t maxComputeWorkGroupInvocations;
uint32_t maxComputeWorkGroupSize[3];
uint32_t subPixelPrecisionBits;
uint32_t subTexelPrecisionBits;
uint32_t mipmapPrecisionBits;
uint32_t maxDrawIndexedIndexValue;
uint32_t maxDrawIndirectCount;
float maxSamplerLodBias;
float maxSamplerAnisotropy;
uint32_t maxViewports;
uint32_t maxViewportDimensions[2];
float viewportBoundsRange[2];
uint32_t viewportSubPixelBits;
size_t minMemoryMapAlignment;
VkDeviceSize minTexelBufferOffsetAlignment;
VkDeviceSize minUniformBufferOffsetAlignment;
VkDeviceSize minStorageBufferOffsetAlignment;
int32_t minTexelOffset;
uint32_t maxTexelOffset;
int32_t minTexelGatherOffset;
uint32_t maxTexelGatherOffset;
float minInterpolationOffset;
float maxInterpolationOffset;
uint32_t subPixelInterpolationOffsetBits;
uint32_t maxFramebufferWidth;
uint32_t maxFramebufferHeight;
uint32_t maxFramebufferLayers;
VkSampleCountFlags framebufferColorSampleCounts;
VkSampleCountFlags framebufferDepthSampleCounts;
VkSampleCountFlags framebufferStencilSampleCounts;
VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
uint32_t maxColorAttachments;
VkSampleCountFlags sampledImageColorSampleCounts;
VkSampleCountFlags sampledImageIntegerSampleCounts;
VkSampleCountFlags sampledImageDepthSampleCounts;
VkSampleCountFlags sampledImageStencilSampleCounts;
VkSampleCountFlags storageImageSampleCounts;
uint32_t maxSampleMaskWords;
VkBool32 timestampComputeAndGraphics;
float timestampPeriod;
uint32_t maxClipDistances;
uint32_t maxCullDistances;
uint32_t maxCombinedClipAndCullDistances;
uint32_t discreteQueuePriorities;
float pointSizeRange[2];
float lineWidthRange[2];
float pointSizeGranularity;
float lineWidthGranularity;
VkBool32 strictLines;
VkBool32 standardSampleLocations;
VkDeviceSize optimalBufferCopyOffsetAlignment;
VkDeviceSize optimalBufferCopyRowPitchAlignment;
VkDeviceSize nonCoherentAtomSize;
} VkPhysicalDeviceLimits;
VkPhysicalDeviceLimits 是物理设备的属性。这些属性可在 VkPhysicalDeviceProperties 结构的 limits 成员中使用,该结构从 vkGetPhysicalDeviceProperties 返回。
-
maxImageDimension1D是保证支持的所有使用imageType为VK_IMAGE_TYPE_1D创建的图像的最大维度 (width)。某些图像参数(格式、用途等)的组合可能允许支持更大的维度,这可以使用 vkGetPhysicalDeviceImageFormatProperties 查询。 -
maxImageDimension2D是保证支持的所有使用imageType为VK_IMAGE_TYPE_2D创建的且在flags中未设置VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT的图像的最大维度 (width或height)。某些图像参数(格式、用途等)的组合可能允许支持更大的维度,这可以使用 vkGetPhysicalDeviceImageFormatProperties 查询。 -
maxImageDimension3D是保证支持的所有使用imageType为VK_IMAGE_TYPE_3D创建的图像的最大维度 (width、height或depth)。某些图像参数(格式、用途等)的组合可能允许支持更大的维度,这可以使用 vkGetPhysicalDeviceImageFormatProperties 查询。 -
maxImageDimensionCube是保证支持的所有使用imageType为VK_IMAGE_TYPE_2D创建的且在flags中设置了VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT的图像的最大维度 (width或height)。某些图像参数(格式、用途等)的组合可能允许支持更大的维度,这可以使用 vkGetPhysicalDeviceImageFormatProperties 查询。 -
maxTexelBufferElements是为使用VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT或VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT设置在 VkBufferCreateInfo 结构的usage成员中创建的缓冲区上创建的缓冲区视图可寻址的最大纹素数。 -
maxUniformBufferRange是可以指定在传递给 vkUpdateDescriptorSets 的类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER或VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符的 VkDescriptorBufferInfo 结构的range成员中的最大值。 -
maxStorageBufferRange是可以指定在传递给 vkUpdateDescriptorSets 的类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER或VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符的 VkDescriptorBufferInfo 结构的range成员中的最大值。 -
maxPushConstantsSize是推送常量内存池的最大大小(以字节为单位)。对于 VkPipelineLayoutCreateInfo 结构的pPushConstantRanges成员指示的每个推送常量范围,(offset+size) 必须小于或等于此限制。 -
maxMemoryAllocationCount是设备内存分配的最大数量,这些内存分配是通过 vkAllocateMemory 创建的,并且可以同时存在。 -
maxSamplerAllocationCount是采样器对象(通过 vkCreateSampler 创建)的最大数量,这些采样器对象可以同时存在于设备上。 -
bufferImageGranularity是以字节为单位的粒度,在该粒度下,缓冲或线性图像资源以及最佳图像资源可以绑定到同一VkDeviceMemory对象中的相邻偏移量,而不会发生别名。有关更多详细信息,请参阅 缓冲图像粒度。 -
sparseAddressSpaceSize是稀疏内存资源可用的总地址空间大小(以字节为单位)。这是所有稀疏资源大小的总和的上限,无论是否将任何内存绑定到它们。如果启用了extendedSparseAddressSpace功能,则extendedSparseAddressSpaceSize和sparseAddressSpaceSize之间的差值也可以使用,通过使用VkImage创建,该VkImage的 VkImageCreateInfo 的usage成员仅包含extendedSparseImageUsageFlags中的位,并且VkBuffer是使用 VkBufferCreateInfo 的usage成员创建的,该成员仅包含extendedSparseBufferUsageFlags中的位。 -
maxBoundDescriptorSets是一个管道可以同时使用的描述符集的最大数量。着色器模块中的所有DescriptorSet修饰符的数值必须小于maxBoundDescriptorSets。请参阅 描述符集。 -
maxPerStageDescriptorSamplers是一个管道布局中单个着色器阶段可以访问的采样器的最大数量。类型为VK_DESCRIPTOR_TYPE_SAMPLER或VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被着色器阶段访问。请参阅 采样器 和 组合图像采样器。 -
maxPerStageDescriptorUniformBuffers是一个管道布局中单个着色器阶段可以访问的统一缓冲区最大数量。类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER或VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被着色器阶段访问。请参阅 统一缓冲区 和 动态统一缓冲区。 -
maxPerStageDescriptorStorageBuffers是一个管道布局中单个着色器阶段可以访问的存储缓冲区的最大数量。类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER或VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被管道着色器阶段访问。请参阅 存储缓冲区 和 动态存储缓冲区。 -
maxPerStageDescriptorSampledImages是一个管道布局中单个着色器阶段可以访问的采样图像的最大数量。类型为VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER、VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE或VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被管道着色器阶段访问。请参阅 组合图像采样器、采样图像 和 统一纹理缓冲区。 -
maxPerStageDescriptorStorageImages是一个管道布局中单个着色器阶段可以访问的存储图像的最大数量。类型为VK_DESCRIPTOR_TYPE_STORAGE_IMAGE或VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被管道着色器阶段访问。请参阅 存储图像 和 存储纹理缓冲区。 -
maxPerStageDescriptorInputAttachments是一个管道布局中单个着色器阶段可以访问的输入附件的最大数量。类型为VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT的描述符会影响此限制。只有在创建时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的描述符集布局中的描述符会影响此限制。当VkDescriptorSetLayoutBinding结构的stageFlags成员设置了该着色器阶段的位时,该描述符即可被管道着色器阶段访问。这些仅支持片段阶段。请参阅 输入附件。 -
maxPerStageResources是一个管线布局中单个着色器阶段可以访问的最大资源数量。类型为VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER、VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE、VK_DESCRIPTOR_TYPE_STORAGE_IMAGE、VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER、VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER、VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER、VK_DESCRIPTOR_TYPE_STORAGE_BUFFER、VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC、VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC或VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。对于片段着色器阶段,帧缓冲颜色附件也会计入此限制。 -
maxDescriptorSetSamplers是一个管线布局中可以包含的最大采样器数量。类型为VK_DESCRIPTOR_TYPE_SAMPLER或VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 采样器 和 组合图像采样器。 -
maxDescriptorSetUniformBuffers是一个管线布局中可以包含的最大统一缓冲区数量。类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER或VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 统一缓冲区 和 动态统一缓冲区。 -
maxDescriptorSetUniformBuffersDynamic是一个管线布局中可以包含的最大动态统一缓冲区数量。类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 动态统一缓冲区。 -
maxDescriptorSetStorageBuffers是一个管线布局中可以包含的最大存储缓冲区数量。类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER或VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 存储缓冲区 和 动态存储缓冲区。 -
maxDescriptorSetStorageBuffersDynamic是一个管线布局中可以包含的最大动态存储缓冲区数量。类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 动态存储缓冲区。 -
maxDescriptorSetSampledImages是一个管线布局中可以包含的最大采样图像数量。类型为VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER、VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE或VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 组合图像采样器、采样图像 和 统一纹理缓冲区。 -
maxDescriptorSetStorageImages是一个管线布局中可以包含的最大存储图像数量。类型为VK_DESCRIPTOR_TYPE_STORAGE_IMAGE或VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 存储图像 和 存储纹理缓冲区。 -
maxDescriptorSetInputAttachments是一个管线布局中可以包含的最大输入附件数量。类型为VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,这些描述符才会计入此限制。请参阅 输入附件。 -
maxVertexInputAttributes是一个图形管线可以指定的顶点输入属性的最大数量。这些属性在通过 VkPipelineVertexInputStateCreateInfo 结构的pVertexAttributeDescriptions成员在图形管线创建时提供的VkVertexInputAttributeDescription结构数组中进行描述。请参阅 顶点属性 和 顶点输入描述。 -
maxVertexInputBindings是可以为图形管线提供顶点属性而指定的最大顶点缓冲区数量。这些缓冲区在通过 VkPipelineVertexInputStateCreateInfo 结构的pVertexBindingDescriptions成员在图形管线创建时提供的VkVertexInputBindingDescription结构数组中进行描述。VkVertexInputBindingDescription的binding成员必须小于此限制。请参阅 顶点输入描述。 -
maxVertexInputAttributeOffset是可以添加到顶点输入绑定步长的最大顶点输入属性偏移量。VkVertexInputAttributeDescription结构的offset成员必须小于或等于此限制。请参阅 顶点输入描述。 -
maxVertexInputBindingStride是可以在顶点输入绑定中指定的最大顶点输入绑定步长。VkVertexInputBindingDescription结构的stride成员必须小于或等于此限制。请参阅 顶点输入描述。 -
maxVertexOutputComponents是顶点着色器可以输出的输出变量的最大组件数量。请参阅 顶点着色器。 -
maxTessellationGenerationLevel是固定功能细分图元生成器支持的最大细分生成级别。请参阅 细分。 -
maxTessellationPatchSize是细分控制着色器和细分图元生成器可以处理的图块的最大大小(以顶点为单位)。在管线创建时指定的 VkPipelineTessellationStateCreateInfo 结构的patchControlPoints成员和着色器模块的OutputVertices执行模式中提供的值必须小于或等于此限制。请参阅 细分。 -
maxTessellationControlPerVertexInputComponents是可以作为每个顶点的输入提供给细分控制着色器阶段的输入变量的最大组件数。 -
maxTessellationControlPerVertexOutputComponents是可以从细分控制着色器阶段输出的每个顶点输出变量的最大组件数。 -
maxTessellationControlPerPatchOutputComponents是可以从细分控制着色器阶段输出的每个图块输出变量的最大组件数。 -
maxTessellationControlTotalOutputComponents是可以从细分控制着色器阶段输出的每个顶点和每个图块输出变量的最大总组件数。 -
maxTessellationEvaluationInputComponents是可以作为每个顶点的输入提供给细分评估着色器阶段的输入变量的最大组件数。 -
maxTessellationEvaluationOutputComponents是可以从细分评估着色器阶段输出的每个顶点输出变量的最大组件数。 -
maxGeometryShaderInvocations是实例化几何着色器支持的最大调用计数。着色器模块的Invocations执行模式中提供的值必须小于或等于此限制。请参阅 几何着色。 -
maxGeometryTotalOutputComponents是所有发射的顶点中,可以从几何着色器阶段输出的输出变量的最大总组件数。 -
maxFragmentDualSrcAttachments是启用混合并且正在使用双源混合模式之一时,片段着色器阶段可以写入的最大输出附件数。请参阅 双源混合 和dualSrcBlend。 -
maxFragmentCombinedOutputResources是片段着色器阶段可以使用的存储缓冲区、存储图像和输出Location修饰的颜色附件(在 片段输出接口 中描述)的总数。 -
maxComputeSharedMemorySize是着色器模块中声明为Workgroup存储类(或在 GLSL 中使用shared存储限定符)的变量在计算着色器阶段可用的最大总存储大小(以字节为单位)。 -
maxComputeWorkGroupCount[3] 是单个调度命令可以调度的最大本地工作组数。这三个值分别表示 X、Y 和 Z 维度的最大本地工作组数。调度命令的工作组计数参数必须小于或等于相应的限制。请参阅 调度命令。 -
maxComputeWorkGroupInvocations是单个本地工作组中计算着色器调用的最大总数。由着色器模块中的LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰符修饰的对象指定的 X、Y 和 Z 大小的乘积必须小于或等于此限制。 -
maxComputeWorkGroupSize[3] 是每个维度的本地计算工作组的最大大小。这三个值分别表示 X、Y 和 Z 维度的最大本地工作组大小。由着色器模块中的LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰符修饰的对象指定的x、y和z大小必须小于或等于相应的限制。 -
subPixelPrecisionBits是帧缓冲区坐标 xf 和 yf 中子像素精度的位数。请参阅 光栅化。 -
subTexelPrecisionBits是用于缩小和放大滤波器的图像轴向分割的精度位数。2subTexelPrecisionBits是图像的每个轴上实际的分割数。在生成过滤结果时,图像采样期间计算的子纹素值将捕捉到这些位置。 -
mipmapPrecisionBits是当确定每个 mip 级别对 mip 过滤结果的贡献时,用于 mipmap 获取的 LOD 计算被捕捉到的分割位数。2mipmapPrecisionBits是实际的分割数。 -
maxDrawIndexedIndexValue是在使用 32 位索引时,索引绘制调用可以使用的最大索引值。这不包括 0xFFFFFFFF 的图元重启索引值。请参阅fullDrawIndexUint32。 -
maxDrawIndirectCount是间接绘制调用支持的最大绘制计数。请参阅multiDrawIndirect。 -
maxSamplerLodBias是采样器 LOD 偏差的最大绝对值。 VkSamplerCreateInfo 结构的mipLodBias成员的值与着色器模块中图像采样操作的Bias操作数(如果图像采样操作没有提供Bias操作数,则为 0)之和被钳制在 [-maxSamplerLodBias,+maxSamplerLodBias] 范围内。请参阅 samplers-mipLodBias。 -
maxSamplerAnisotropy是采样器各向异性的最大程度。用于图像采样操作的各向异性过滤的最大程度是 VkSamplerCreateInfo 结构的maxAnisotropy成员和此限制的最小值。请参阅 samplers-maxAnisotropy。 -
maxViewports是活动视口的最大数量。在管线创建时提供的 VkPipelineViewportStateCreateInfo 结构的viewportCount成员必须小于或等于此限制。 -
maxViewportDimensions[2] 分别是 X(宽度)和 Y(高度)维度上的最大视口尺寸。最大视口尺寸必须大于或等于可以创建并用作帧缓冲附件的最大图像。请参阅 控制视口。 -
viewportBoundsRange[2] 是视口角点必须包含的 [最小值,最大值] 范围。此范围必须至少为 [-2 ×size, 2 ×size- 1],其中size= max(maxViewportDimensions[0],maxViewportDimensions[1])。请参阅 控制视口。viewportBoundsRange限制的目的是允许相对于输出目标任意移动最大尺寸的视口,只要至少一部分相交即可。这将给出 [-size+ 1, 2 ×size- 1] 的边界限制,这将允许输出目标和视口的所有可能的非空集相交。由于这些数字通常是 2 的幂,因此使用最少位数的有符号数字范围最终得到指定的范围。 -
minMemoryMapAlignment是主机地址空间内主机可见内存分配的最小必需对齐(以字节为单位)。当使用 vkMapMemory 映射内存分配时,从返回的指针中减去offset字节将始终产生此限制的整数倍。请参阅 主机对设备内存对象的访问。该值必须是 2 的幂。 -
minTexelBufferOffsetAlignment是纹理缓冲区 VkBufferViewCreateInfo 结构的offset成员的最小必需对齐(以字节为单位)。该值必须是 2 的幂。如果启用了texelBufferAlignment功能,则此限制等效于uniformTexelBufferOffsetAlignmentBytes和storageTexelBufferOffsetAlignmentBytes成员的最大值,但storageTexelBufferOffsetSingleTexelAlignment和uniformTexelBufferOffsetSingleTexelAlignment可选地允许较小的对齐方式。如果未启用texelBufferAlignment功能,则 VkBufferViewCreateInfo::offset必须是此值的倍数。 -
minUniformBufferOffsetAlignment是统一缓冲区VkDescriptorBufferInfo结构的offset成员的最小必需对齐(以字节为单位)。当更新类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER或VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符时,offset必须是此限制的整数倍。同样,统一缓冲区的动态偏移量必须是此限制的倍数。该值必须是 2 的幂。 -
minStorageBufferOffsetAlignment是存储缓冲区VkDescriptorBufferInfo结构的offset成员的最小必需对齐(以字节为单位)。当更新类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER或VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符时,offset必须是此限制的整数倍。同样,存储缓冲区的动态偏移量必须是此限制的倍数。该值必须是 2 的幂。 -
minTexelOffset是任何OpImageSample*或OpImageFetch*图像指令的Offset或ConstOffset图像操作数的最小偏移值。 -
maxTexelOffset是任何OpImageSample*或OpImageFetch*图像指令的Offset或ConstOffset图像操作数的最大偏移值。 -
minTexelGatherOffset是任何OpImage*Gather图像指令的Offset、ConstOffset或ConstOffsets图像操作数的最小偏移值。 -
maxTexelGatherOffset是任何OpImage*Gather图像指令的Offset、ConstOffset或ConstOffsets图像操作数的最大偏移值。 -
minInterpolationOffset是InterpolateAtOffset扩展指令的Offset操作数的最小(包括)负偏移值的基本值。 -
maxInterpolationOffset是InterpolateAtOffset扩展指令的Offset操作数的最大(包括)正偏移值的基本值。 -
subPixelInterpolationOffsetBits是InterpolateAtOffset扩展指令的x和y偏移量可以四舍五入为定点值的分数位数。 -
maxFramebufferWidth是帧缓冲区的最大宽度。 VkFramebufferCreateInfo 结构的width成员必须小于或等于此限制。 -
maxFramebufferHeight是帧缓冲区的最大高度。 VkFramebufferCreateInfo 结构的height成员必须小于或等于此限制。 -
maxFramebufferLayers是分层帧缓冲区的最大图层计数。 VkFramebufferCreateInfo 结构的layers成员必须小于或等于此限制。 -
framebufferColorSampleCounts是 VkSampleCountFlagBits 的位掩码1,指示所有具有浮点或定点格式的帧缓冲颜色附件支持的颜色采样计数。对于具有整数格式的颜色附件,请参阅framebufferIntegerColorSampleCounts。 -
framebufferDepthSampleCounts是 VkSampleCountFlagBits 的位掩码1,指示当格式包含深度分量时,所有帧缓冲深度/模板附件支持的深度采样计数。 -
framebufferStencilSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示当格式包含模板分量时,所有帧缓冲深度/模板附件支持的模板采样计数。 -
framebufferNoAttachmentsSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示不使用任何附件的子通道支持的采样计数。 -
maxColorAttachments是渲染通道中子通道可以使用的最大颜色附件数量。VkSubpassDescription或VkSubpassDescription2结构的colorAttachmentCount成员 必须 小于或等于此限制。 -
sampledImageColorSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示使用VK_IMAGE_TILING_OPTIMAL创建的、usage包含VK_IMAGE_USAGE_SAMPLED_BIT且为非整数颜色格式的所有 2D 图像所支持的采样计数。 -
sampledImageIntegerSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示使用VK_IMAGE_TILING_OPTIMAL创建的、usage包含VK_IMAGE_USAGE_SAMPLED_BIT且为整数颜色格式的所有 2D 图像所支持的采样计数。 -
sampledImageDepthSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示使用VK_IMAGE_TILING_OPTIMAL创建的、usage包含VK_IMAGE_USAGE_SAMPLED_BIT且为深度格式的所有 2D 图像所支持的采样计数。 -
sampledImageStencilSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示使用VK_IMAGE_TILING_OPTIMAL创建的、usage包含VK_IMAGE_USAGE_SAMPLED_BIT且为模板格式的所有 2D 图像所支持的采样计数。 -
storageImageSampleCounts是一个位掩码1,其中包含 VkSampleCountFlagBits,指示使用VK_IMAGE_TILING_OPTIMAL创建的且usage包含VK_IMAGE_USAGE_STORAGE_BIT的所有 2D 图像所支持的采样计数。 -
timestampComputeAndGraphics指定对所有图形和计算队列的时间戳的支持。如果此限制为VK_TRUE,则在VkQueueFamilyProperties::queueFlags中声明VK_QUEUE_GRAPHICS_BIT或VK_QUEUE_COMPUTE_BIT的所有队列都支持至少 36 的VkQueueFamilyProperties::timestampValidBits。 请参阅 时间戳查询。 -
timestampPeriod是时间戳查询递增 1 所需的纳秒数。 请参阅 时间戳查询。 -
maxClipDistances是在单个着色器阶段中可以使用的最大剪裁距离数。 在着色器模块中使用ClipDistance内建装饰符声明的任何数组的大小 必须 小于或等于此限制。 -
maxCullDistances是在单个着色器阶段中可以使用的最大剔除距离数。 在着色器模块中使用CullDistance内建装饰符声明的任何数组的大小 必须 小于或等于此限制。 -
maxCombinedClipAndCullDistances是在单个着色器阶段中可以使用的最大组合剪裁和剔除距离数。 在着色器模块中,单个着色器阶段使用的所有使用ClipDistance和CullDistance内建装饰符声明的数组的大小之和 必须 小于或等于此限制。 -
discreteQueuePriorities是可以根据 VkDeviceQueueCreateInfo::pQueuePriorities的每个成员的值分配给队列的离散优先级数。 这 必须 至少为 2,并且级别 必须 在范围内均匀分布,其中至少一个级别为 1.0,另一个级别为 0.0。 请参阅 队列优先级。 -
pointSizeRange[2] 是点支持大小的范围 [minimum,maximum]。写入使用PointSize内建装饰符修饰的变量的值被限制在此范围内。 -
lineWidthRange[2] 是线支持宽度的范围 [minimum,maximum]。由 VkPipelineRasterizationStateCreateInfo 的lineWidth成员指定或vkCmdSetLineWidth的lineWidth参数指定的值被限制在此范围内。 -
pointSizeGranularity是支持的点大小的粒度。并非由pointSizeRange定义的范围内的所有点大小都受支持。此限制指定连续支持的点大小之间的粒度(或增量)。 -
lineWidthGranularity是支持的线宽的粒度。并非由lineWidthRange定义的范围内的所有线宽都受支持。此限制指定连续支持的线宽之间的粒度(或增量)。 -
strictLines指定是否根据首选光栅化方法光栅化线。 如果设置为VK_FALSE,则线 可能 在一组宽松的规则下进行光栅化。 如果设置为VK_TRUE,则线按照严格定义进行光栅化。 请参阅 基本线段光栅化。 -
standardSampleLocations指定光栅化是否使用 多重采样 中记录的标准采样位置。 如果设置为VK_TRUE,则实现使用记录的采样位置。 如果设置为VK_FALSE,则实现 可能 使用不同的采样位置。 -
optimalBufferCopyOffsetAlignment是 vkCmdCopyBufferToImage2、vkCmdCopyBufferToImage、vkCmdCopyImageToBuffer2 和 vkCmdCopyImageToBuffer 的最佳缓冲偏移量对齐(以字节为单位)。此值也是 vkCopyMemoryToImage 和 vkCopyImageToMemory 的最佳主机内存偏移量对齐(以字节为单位)。强制执行每个纹素的对齐要求,但应用程序 应该 使用最佳对齐以获得最佳性能和功耗。 该值 必须 为 2 的幂。 -
optimalBufferCopyRowPitchAlignment是 vkCmdCopyBufferToImage2、vkCmdCopyBufferToImage、vkCmdCopyImageToBuffer2 和 vkCmdCopyImageToBuffer 的最佳缓冲区行间距对齐(以字节为单位)。此值也是 vkCopyMemoryToImage 和 vkCopyImageToMemory 的最佳主机内存行间距对齐(以字节为单位)。行间距是指相邻行(Y 坐标相差 1)中具有相同 X 坐标的纹素之间的字节数。每个纹素的对齐要求都会强制执行,但应用程序**应该**使用最佳对齐方式以获得最佳性能和功耗。该值**必须**是 2 的幂。 -
nonCoherentAtomSize是限制对主机映射的设备内存并发访问的大小和对齐(以字节为单位)。该值**必须**是 2 的幂。- 1
-
对于 VkSampleCountFlagBits 的所有位掩码,上面定义的采样计数限制表示每种图像类型支持的最小采样计数。单个图像**可能**支持其他采样计数,这些采样计数使用 vkGetPhysicalDeviceImageFormatProperties 查询,如 支持的采样计数中所述。
由 VkPhysicalDeviceLimits 返回的采样计数限制,以及其他表示图像采样计数的查询和结构中**可能**设置的位是
// Provided by VK_VERSION_1_0
typedef enum VkSampleCountFlagBits {
VK_SAMPLE_COUNT_1_BIT = 0x00000001,
VK_SAMPLE_COUNT_2_BIT = 0x00000002,
VK_SAMPLE_COUNT_4_BIT = 0x00000004,
VK_SAMPLE_COUNT_8_BIT = 0x00000008,
VK_SAMPLE_COUNT_16_BIT = 0x00000010,
VK_SAMPLE_COUNT_32_BIT = 0x00000020,
VK_SAMPLE_COUNT_64_BIT = 0x00000040,
} VkSampleCountFlagBits;
-
VK_SAMPLE_COUNT_1_BIT指定每个像素一个采样的图像。 -
VK_SAMPLE_COUNT_2_BIT指定每个像素 2 个采样的图像。 -
VK_SAMPLE_COUNT_4_BIT指定每个像素 4 个采样的图像。 -
VK_SAMPLE_COUNT_8_BIT指定每个像素 8 个采样的图像。 -
VK_SAMPLE_COUNT_16_BIT指定每个像素 16 个采样的图像。 -
VK_SAMPLE_COUNT_32_BIT指定每个像素 32 个采样的图像。 -
VK_SAMPLE_COUNT_64_BIT指定每个像素 64 个采样的图像。
// Provided by VK_VERSION_1_0
typedef VkFlags VkSampleCountFlags;
VkSampleCountFlags 是一个位掩码类型,用于设置零个或多个 VkSampleCountFlagBits 的掩码。
VkPhysicalDevicePushDescriptorProperties 结构定义如下
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDevicePushDescriptorProperties {
VkStructureType sType;
void* pNext;
uint32_t maxPushDescriptors;
} VkPhysicalDevicePushDescriptorProperties;
或等效的
// Provided by VK_KHR_push_descriptor
typedef VkPhysicalDevicePushDescriptorProperties VkPhysicalDevicePushDescriptorPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDevicePushDescriptorProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceMultiviewProperties 结构定义如下
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceMultiviewProperties {
VkStructureType sType;
void* pNext;
uint32_t maxMultiviewViewCount;
uint32_t maxMultiviewInstanceIndex;
} VkPhysicalDeviceMultiviewProperties;
或等效的
// Provided by VK_KHR_multiview
typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceMultiviewProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceFloatControlsProperties 结构定义如下
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceFloatControlsProperties {
VkStructureType sType;
void* pNext;
VkShaderFloatControlsIndependence denormBehaviorIndependence;
VkShaderFloatControlsIndependence roundingModeIndependence;
VkBool32 shaderSignedZeroInfNanPreserveFloat16;
VkBool32 shaderSignedZeroInfNanPreserveFloat32;
VkBool32 shaderSignedZeroInfNanPreserveFloat64;
VkBool32 shaderDenormPreserveFloat16;
VkBool32 shaderDenormPreserveFloat32;
VkBool32 shaderDenormPreserveFloat64;
VkBool32 shaderDenormFlushToZeroFloat16;
VkBool32 shaderDenormFlushToZeroFloat32;
VkBool32 shaderDenormFlushToZeroFloat64;
VkBool32 shaderRoundingModeRTEFloat16;
VkBool32 shaderRoundingModeRTEFloat32;
VkBool32 shaderRoundingModeRTEFloat64;
VkBool32 shaderRoundingModeRTZFloat16;
VkBool32 shaderRoundingModeRTZFloat32;
VkBool32 shaderRoundingModeRTZFloat64;
} VkPhysicalDeviceFloatControlsProperties;
或等效的
// Provided by VK_KHR_shader_float_controls
typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
denormBehaviorIndependence是一个 VkShaderFloatControlsIndependence 值,指示是否以及如何为不同的位宽独立设置反规范行为。 -
roundingModeIndependence是一个 VkShaderFloatControlsIndependence 值,指示是否以及如何为不同的位宽独立设置舍入模式。 -
shaderSignedZeroInfNanPreserveFloat16是一个布尔值,指示是否可以在 16 位浮点计算中保留零的符号、Nan和 。它还指示SignedZeroInfNanPreserve执行模式是否**可以**用于 16 位浮点类型。 -
shaderSignedZeroInfNanPreserveFloat32是一个布尔值,指示是否可以在 32 位浮点计算中保留零的符号、NaN 和 。它还指示SignedZeroInfNanPreserve执行模式是否可以用于 32 位浮点类型。 -
shaderSignedZeroInfNanPreserveFloat64是一个布尔值,指示是否可以在 64 位浮点计算中保留零的符号、NaN 和 。它还指示SignedZeroInfNanPreserve执行模式是否可以用于 64 位浮点类型。 -
shaderDenormPreserveFloat16是一个布尔值,指示是否可以在 16 位浮点计算中保留非规范化值。它还指示DenormPreserve执行模式是否可以用于 16 位浮点类型。 -
shaderDenormPreserveFloat32是一个布尔值,指示是否可以在 32 位浮点计算中保留非规范化值。它还指示DenormPreserve执行模式是否可以用于 32 位浮点类型。 -
shaderDenormPreserveFloat64是一个布尔值,指示是否可以在 64 位浮点计算中保留非规范化值。它还指示DenormPreserve执行模式是否可以用于 64 位浮点类型。 -
shaderDenormFlushToZeroFloat16是一个布尔值,指示是否可以在 16 位浮点计算中将非规范化值刷新为零。它还指示DenormFlushToZero执行模式是否可以用于 16 位浮点类型。 -
shaderDenormFlushToZeroFloat32是一个布尔值,指示是否可以在 32 位浮点计算中将非规范化值刷新为零。它还指示DenormFlushToZero执行模式是否可以用于 32 位浮点类型。 -
shaderDenormFlushToZeroFloat64是一个布尔值,指示是否可以在 64 位浮点计算中将非规范化值刷新为零。它还指示DenormFlushToZero执行模式是否可以用于 64 位浮点类型。 -
shaderRoundingModeRTEFloat16是一个布尔值,指示实现是否支持 16 位浮点算术和转换指令的舍入到最近的偶数舍入模式。它还指示RoundingModeRTE执行模式是否可以用于 16 位浮点类型。 -
shaderRoundingModeRTEFloat32是一个布尔值,指示实现是否支持 32 位浮点算术和转换指令的舍入到最近的偶数舍入模式。它还指示RoundingModeRTE执行模式是否可以用于 32 位浮点类型。 -
shaderRoundingModeRTEFloat64是一个布尔值,指示实现是否支持 64 位浮点算术和转换指令的舍入到最近的偶数舍入模式。它还指示RoundingModeRTE执行模式是否可以用于 64 位浮点类型。 -
shaderRoundingModeRTZFloat16是一个布尔值,指示实现是否支持 16 位浮点算术和转换指令的舍入到零的舍入模式。它还指示RoundingModeRTZ执行模式是否可以用于 16 位浮点类型。 -
shaderRoundingModeRTZFloat32是一个布尔值,指示实现是否支持 32 位浮点算术和转换指令的舍入到零的舍入模式。它还指示RoundingModeRTZ执行模式是否可以用于 32 位浮点类型。 -
shaderRoundingModeRTZFloat64是一个布尔值,指示实现是否支持 64 位浮点算术和转换指令的舍入到零的舍入模式。它还指示RoundingModeRTZ执行模式是否可以用于 64 位浮点类型。
如果 VkPhysicalDeviceProperties2 结构的 pNext 链中包含 VkPhysicalDeviceFloatControlsProperties 结构,则将其传递给 vkGetPhysicalDeviceProperties2,并使用每个相应的实现相关的属性进行填充。
VkPhysicalDeviceFloatControlsProperties 的 denormBehaviorIndependence 和 roundingModeIndependence 字段中可能返回的值是
// Provided by VK_VERSION_1_2
typedef enum VkShaderFloatControlsIndependence {
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0,
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1,
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2,
// Provided by VK_KHR_shader_float_controls
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,
// Provided by VK_KHR_shader_float_controls
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
// Provided by VK_KHR_shader_float_controls
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE,
} VkShaderFloatControlsIndependence;
或等效的
// Provided by VK_KHR_shader_float_controls
typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR;
-
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY指定可以独立设置 32 位浮点数的着色器浮点控制;其他位宽必须彼此设置相同。 -
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL指定可以独立设置所有位宽的着色器浮点控制。 -
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE指定所有位宽的着色器浮点控制必须设置相同。
VkPhysicalDeviceDiscardRectanglePropertiesEXT 结构定义如下
// Provided by VK_EXT_discard_rectangles
typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxDiscardRectangles;
} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceDiscardRectanglePropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
VkPhysicalDeviceSampleLocationsPropertiesEXT 结构体的定义如下:
// Provided by VK_EXT_sample_locations
typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
VkStructureType sType;
void* pNext;
VkSampleCountFlags sampleLocationSampleCounts;
VkExtent2D maxSampleLocationGridSize;
float sampleLocationCoordinateRange[2];
uint32_t sampleLocationSubPixelBits;
VkBool32 variableSampleLocations;
} VkPhysicalDeviceSampleLocationsPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
sampleLocationSampleCounts是一个 VkSampleCountFlagBits 的位掩码,指示支持自定义采样位置的采样计数。 -
maxSampleLocationGridSize是像素网格的最大大小,其中采样位置可以在sampleLocationSampleCounts中支持的所有采样计数中变化。 -
variableSampleLocations指定子通道期间绑定到命令缓冲区的任何管线使用的采样位置必须匹配。如果设置为VK_TRUE,则实现支持子通道中的可变采样位置。如果设置为VK_FALSE,则采样位置必须在每个子通道中保持不变。
如果 VkPhysicalDeviceSampleLocationsPropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT 结构体的定义如下:
// Provided by VK_EXT_legacy_vertex_attributes
typedef struct VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 nativeUnalignedPerformance;
} VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT;
此结构体描述了以下特性:
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceFeatures2 的 VkPhysicalDeviceFeatures2 结构体的 pNext 链中,它会被填充以指示是否支持每个相应的特性。VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT 可以 也在 VkDeviceCreateInfo 的 pNext 链中使用,以选择性地启用这些特性。
VkPhysicalDeviceExternalMemoryHostPropertiesEXT 结构体的定义如下:
// Provided by VK_EXT_external_memory_host
typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
VkStructureType sType;
void* pNext;
VkDeviceSize minImportedHostPointerAlignment;
} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
minImportedHostPointerAlignment是导入到 Vulkan 内存对象的主机指针的基址和大小所需的最小对齐(以字节为单位)。该值必须是 2 的幂。
如果 VkPhysicalDeviceExternalMemoryHostPropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX 结构体的定义如下:
// Provided by VK_NVX_multiview_per_view_attributes
typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
VkStructureType sType;
void* pNext;
VkBool32 perViewPositionAllComponents;
} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
perViewPositionAllComponents如果实现支持除了 X 分量之外在其他分量中不同的每个视图位置值,则为VK_TRUE。
如果 VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
VkPhysicalDevicePointClippingProperties 结构体的定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDevicePointClippingProperties {
VkStructureType sType;
void* pNext;
VkPointClippingBehavior pointClippingBehavior;
} VkPhysicalDevicePointClippingProperties;
或等效的
// Provided by VK_KHR_maintenance2
typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
pointClippingBehavior是一个 VkPointClippingBehavior 值,指定实现支持的点裁剪行为。
如果 VkPhysicalDevicePointClippingProperties 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
VkPhysicalDeviceSubgroupProperties 结构体的定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceSubgroupProperties {
VkStructureType sType;
void* pNext;
uint32_t subgroupSize;
VkShaderStageFlags supportedStages;
VkSubgroupFeatureFlags supportedOperations;
VkBool32 quadOperationsInAllStages;
} VkPhysicalDeviceSubgroupProperties;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
subgroupSize是每个子组中调用的默认数量。如果物理设备的任何队列支持VK_QUEUE_GRAPHICS_BIT或VK_QUEUE_COMPUTE_BIT,则subgroupSize至少为 1。subgroupSize是 2 的幂。 -
supportedStages是一个 VkShaderStageFlagBits 的位域,描述了支持带有 子组范围的 组操作 的着色器阶段。如果物理设备的任何队列支持VK_QUEUE_COMPUTE_BIT,则supportedStages将设置VK_SHADER_STAGE_COMPUTE_BIT位。 -
supportedOperations是一个 VkSubgroupFeatureFlagBits 的位掩码,指定在此设备上支持的具有 子组范围的 组操作 的集合。如果物理设备的任何队列支持VK_QUEUE_GRAPHICS_BIT或VK_QUEUE_COMPUTE_BIT,则supportedOperations将设置VK_SUBGROUP_FEATURE_BASIC_BIT位。 -
quadOperationsInAllStages是一个布尔值,指定 四边形组操作 是否在所有阶段都可用,还是仅限于片段和计算阶段。
如果 VkPhysicalDeviceSubgroupProperties 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充为每个对应的实现相关的属性。
如果 supportedOperations 包括 VK_SUBGROUP_FEATURE_QUAD_BIT,或者启用了 shaderSubgroupUniformControlFlow 特性,则 subgroupSize 必须 大于或等于 4。
如果支持 shaderQuadControl 特性,则 supportedOperations 必须 包括 VK_SUBGROUP_FEATURE_QUAD_BIT。
如果支持 VK_KHR_shader_subgroup_rotate 扩展,并且实现通过 VkExtensionProperties::specVersion 公告支持的版本大于或等于 2,并且支持 shaderSubgroupRotate 特性,则 VK_SUBGROUP_FEATURE_ROTATE_BIT 必须 在 VkPhysicalDeviceVulkan11Properties::subgroupSupportedOperations 和 VkPhysicalDeviceSubgroupProperties::supportedOperations 中返回。如果支持 VK_KHR_shader_subgroup_rotate 扩展,并且实现通过 VkExtensionProperties::specVersion 公告支持的版本大于或等于 2,并且支持 shaderSubgroupRotateClustered 特性,则 VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT 必须 在 VkPhysicalDeviceVulkan11Properties::subgroupSupportedOperations 和 VkPhysicalDeviceSubgroupProperties::supportedOperations 中返回。
如果支持 Vulkan 1.4,则 VK_SUBGROUP_FEATURE_ROTATE_BIT 和 VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT 必须 在 VkPhysicalDeviceSubgroupProperties::supportedOperations 和 VkPhysicalDeviceVulkan11Properties::subgroupSupportedOperations 中返回。
|
|
可以在 VkPhysicalDeviceSubgroupProperties::supportedOperations 和 VkPhysicalDeviceVulkan11Properties::subgroupSupportedOperations 中设置的位,用于指定支持的 组操作,其范围为 子组范围,如下所示:
// Provided by VK_VERSION_1_1
typedef enum VkSubgroupFeatureFlagBits {
VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
// Provided by VK_VERSION_1_4
VK_SUBGROUP_FEATURE_ROTATE_BIT = 0x00000200,
// Provided by VK_VERSION_1_4
VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT = 0x00000400,
// Provided by VK_NV_shader_subgroup_partitioned
VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100,
// Provided by VK_KHR_shader_subgroup_rotate
VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_BIT,
// Provided by VK_KHR_shader_subgroup_rotate
VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT,
} VkSubgroupFeatureFlagBits;
-
VK_SUBGROUP_FEATURE_BASIC_BIT指定设备将接受包含GroupNonUniform功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_VOTE_BIT指定设备将接受包含GroupNonUniformVote功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT指定设备将接受包含GroupNonUniformArithmetic功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_BALLOT_BIT指定设备将接受包含GroupNonUniformBallot功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_SHUFFLE_BIT指定设备将接受包含GroupNonUniformShuffle功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT指定设备将接受包含GroupNonUniformShuffleRelative功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_CLUSTERED_BIT指定设备将接受包含GroupNonUniformClustered功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_QUAD_BIT指定设备将接受包含GroupNonUniformQuad功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV指定设备将接受包含GroupNonUniformPartitionedNV功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_ROTATE_BIT指定设备将接受包含GroupNonUniformRotateKHR功能的 SPIR-V 着色器模块。 -
VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT指定设备将接受使用ClusterSize操作数来操作OpGroupNonUniformRotateKHR的 SPIR-V 着色器模块。
// Provided by VK_VERSION_1_1
typedef VkFlags VkSubgroupFeatureFlags;
VkSubgroupFeatureFlags 是一种位掩码类型,用于设置零个或多个 VkSubgroupFeatureFlagBits 的掩码。
VkPhysicalDeviceSubgroupSizeControlProperties 结构定义如下:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceSubgroupSizeControlProperties {
VkStructureType sType;
void* pNext;
uint32_t minSubgroupSize;
uint32_t maxSubgroupSize;
uint32_t maxComputeWorkgroupSubgroups;
VkShaderStageFlags requiredSubgroupSizeStages;
} VkPhysicalDeviceSubgroupSizeControlProperties;
或等效的
// Provided by VK_EXT_subgroup_size_control
typedef VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
minSubgroupSize是此设备支持的最小子组大小。如果任何物理设备的队列支持VK_QUEUE_GRAPHICS_BIT或VK_QUEUE_COMPUTE_BIT,则minSubgroupSize至少为 1。minSubgroupSize是 2 的幂。minSubgroupSize小于或等于maxSubgroupSize。minSubgroupSize小于或等于subgroupSize。 -
maxSubgroupSize是此设备支持的最大子组大小。如果任何物理设备的队列支持VK_QUEUE_GRAPHICS_BIT或VK_QUEUE_COMPUTE_BIT,则maxSubgroupSize至少为 1。maxSubgroupSize是 2 的幂。maxSubgroupSize大于或等于minSubgroupSize。maxSubgroupSize大于或等于subgroupSize。
如果 VkPhysicalDeviceSubgroupSizeControlProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则将使用每个相应的实现相关属性填充它。
如果 VkPhysicalDeviceSubgroupProperties::supportedOperations 包括 VK_SUBGROUP_FEATURE_QUAD_BIT,则 minSubgroupSize 必须 大于或等于 4。
VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT 结构定义如下:
// Provided by VK_EXT_blend_operation_advanced
typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t advancedBlendMaxColorAttachments;
VkBool32 advancedBlendIndependentBlend;
VkBool32 advancedBlendNonPremultipliedSrcColor;
VkBool32 advancedBlendNonPremultipliedDstColor;
VkBool32 advancedBlendCorrelatedOverlap;
VkBool32 advancedBlendAllOperations;
} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
advancedBlendMaxColorAttachments比子通道中可以使用的最高颜色附件索引大 1,适用于使用高级混合操作的管线。 -
advancedBlendNonPremultipliedSrcColor指定源颜色是否可以被视为非预乘的。如果此值为VK_FALSE,则 VkPipelineColorBlendAdvancedStateCreateInfoEXT::srcPremultiplied必须为VK_TRUE。 -
advancedBlendNonPremultipliedDstColor指定目标颜色是否可以被视为非预乘的。如果此值为VK_FALSE,则 VkPipelineColorBlendAdvancedStateCreateInfoEXT::dstPremultiplied必须为VK_TRUE。 -
advancedBlendCorrelatedOverlap指定重叠模式是否可以被视为相关的。如果此值为VK_FALSE,则 VkPipelineColorBlendAdvancedStateCreateInfoEXT::blendOverlap必须为VK_BLEND_OVERLAP_UNCORRELATED_EXT。 -
advancedBlendAllOperations指定是否支持所有高级混合操作枚举。请参阅VkPipelineColorBlendAttachmentState 的有效用法。
如果 VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个相应的实现相关的属性。
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT 结构定义为
// Provided by VK_EXT_vertex_attribute_divisor
typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxVertexAttribDivisor;
} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个相应的实现相关的属性。
VkPhysicalDeviceVertexAttributeDivisorProperties 结构定义为
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties {
VkStructureType sType;
void* pNext;
uint32_t maxVertexAttribDivisor;
VkBool32 supportsNonZeroFirstInstance;
} VkPhysicalDeviceVertexAttributeDivisorProperties;
或等效的
// Provided by VK_KHR_vertex_attribute_divisor
typedef VkPhysicalDeviceVertexAttributeDivisorProperties VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
supportsNonZeroFirstInstance指定当 VkVertexInputBindingDivisorDescription::divisor不为1时,是否支持绘制命令的firstInstance参数的非零值。
如果 VkPhysicalDeviceVertexAttributeDivisorProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个相应的实现相关的属性。
VkPhysicalDeviceSamplerFilterMinmaxProperties 结构定义为
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties {
VkStructureType sType;
void* pNext;
VkBool32 filterMinmaxSingleComponentFormats;
VkBool32 filterMinmaxImageComponentMapping;
} VkPhysicalDeviceSamplerFilterMinmaxProperties;
或等效的
// Provided by VK_EXT_sampler_filter_minmax
typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceSamplerFilterMinmaxProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个相应的实现相关的属性。
如果 filterMinmaxSingleComponentFormats 为 VK_TRUE,则如果以下格式支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,则它们必须支持具有 VK_IMAGE_TILING_OPTIMAL 的 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT 功能
-
VK_FORMAT_R8_UNORM -
VK_FORMAT_R8_SNORM -
VK_FORMAT_R16_UNORM -
VK_FORMAT_R16_SNORM -
VK_FORMAT_R16_SFLOAT -
VK_FORMAT_R32_SFLOAT -
VK_FORMAT_D16_UNORM -
VK_FORMAT_X8_D24_UNORM_PACK32 -
VK_FORMAT_D32_SFLOAT -
VK_FORMAT_D16_UNORM_S8_UINT -
VK_FORMAT_D24_UNORM_S8_UINT -
VK_FORMAT_D32_SFLOAT_S8_UINT
如果格式为深度/模板格式,则此位仅指定此格式的图像的深度方面(而不是模板方面)支持最小/最大过滤,并且当采样器中禁用深度比较时,支持深度方面的最小/最大过滤。
如果 filterMinmaxImageComponentMapping 为 VK_FALSE,则用于最小/最大过滤的图像视图的分量映射必须已使用设置为恒等混淆的 r 分量创建。仅定义采样图像值的 r 分量,其他分量值未定义。如果 filterMinmaxImageComponentMapping 为 VK_TRUE,则此限制不适用,并且图像分量映射正常工作。
VkPhysicalDeviceProtectedMemoryProperties 结构定义为
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceProtectedMemoryProperties {
VkStructureType sType;
void* pNext;
VkBool32 protectedNoFault;
} VkPhysicalDeviceProtectedMemoryProperties;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
protectedNoFault指定当应用程序尝试在受保护的队列操作中写入非受保护的内存、在非受保护的队列操作中从受保护的内存读取或在受保护的队列操作中执行查询时,实现的表现方式。如果此限制为VK_TRUE,则此类写入将被丢弃或写入未定义的值,读取和查询将返回未定义的值。如果此限制为VK_FALSE,则应用程序必须不执行这些操作。有关详细信息,请参阅 受保护的内存访问规则。
如果 VkPhysicalDeviceProtectedMemoryProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个相应的实现相关的属性。
VkPhysicalDeviceMaintenance3Properties 结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceMaintenance3Properties {
VkStructureType sType;
void* pNext;
uint32_t maxPerSetDescriptors;
VkDeviceSize maxMemoryAllocationSize;
} VkPhysicalDeviceMaintenance3Properties;
或等效的
// Provided by VK_KHR_maintenance3
typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
maxPerSetDescriptors是单个描述符集中(所有描述符类型之和)保证满足任何实现相关的描述符集自身大小约束的最大描述符数量。应用程序可以使用 vkGetDescriptorSetLayoutSupport 查询是否支持超出此限制的描述符集。 -
maxMemoryAllocationSize是可以创建的最大内存分配大小,即使堆中有更多可用空间。如果 VkMemoryAllocateInfo::allocationSize大于此值,则可能会返回错误VK_ERROR_OUT_OF_DEVICE_MEMORY。
如果 VkPhysicalDeviceMaintenance3Properties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceMaintenance4Properties 结构定义如下:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceMaintenance4Properties {
VkStructureType sType;
void* pNext;
VkDeviceSize maxBufferSize;
} VkPhysicalDeviceMaintenance4Properties;
或等效的
// Provided by VK_KHR_maintenance4
typedef VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceMaintenance4Properties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceMaintenance5Properties 结构定义如下:
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDeviceMaintenance5Properties {
VkStructureType sType;
void* pNext;
VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting;
VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting;
VkBool32 depthStencilSwizzleOneSupport;
VkBool32 polygonModePointSize;
VkBool32 nonStrictSinglePixelWideLinesUseParallelogram;
VkBool32 nonStrictWideLinesUseParallelogram;
} VkPhysicalDeviceMaintenance5Properties;
或等效的
// Provided by VK_KHR_maintenance5
typedef VkPhysicalDeviceMaintenance5Properties VkPhysicalDeviceMaintenance5PropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
earlyFragmentMultisampleCoverageAfterSampleCounting是一个布尔值,指示在具有EarlyFragmentTests执行模式的片段着色器的样本计数之后,是否执行片段着色和多重采样覆盖操作。 -
earlyFragmentSampleMaskTestBeforeSampleCounting是一个布尔值,指示在使用EarlyFragmentTests执行模式的片段着色器的样本计数之前,是否执行样本掩码测试操作。 -
depthStencilSwizzleOneSupport是一个布尔值,指示使用VK_COMPONENT_SWIZZLE_ONE进行深度/模板纹理操作具有定义的行为。 -
polygonModePointSize是一个布尔值,指示使用VK_POLYGON_MODE_POINT绘制的最终多边形栅格化的点大小是否由PointSize控制。 -
nonStrictSinglePixelWideLinesUseParallelogram是一个布尔值,指示宽度为 1.0 的非严格线是栅格化为平行四边形还是使用 Bresenham 算法。 -
nonStrictWideLinesUseParallelogram是一个布尔值,指示宽度大于 1.0 的非严格线是栅格化为平行四边形还是使用 Bresenham 算法。
如果 VkPhysicalDeviceMaintenance5Properties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceMaintenance6Properties 结构定义如下:
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDeviceMaintenance6Properties {
VkStructureType sType;
void* pNext;
VkBool32 blockTexelViewCompatibleMultipleLayers;
uint32_t maxCombinedImageSamplerDescriptorCount;
VkBool32 fragmentShadingRateClampCombinerInputs;
} VkPhysicalDeviceMaintenance6Properties;
或等效的
// Provided by VK_KHR_maintenance6
typedef VkPhysicalDeviceMaintenance6Properties VkPhysicalDeviceMaintenance6PropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
blockTexelViewCompatibleMultipleLayers是一个布尔值,指示实现是否支持创建subresourceRange的layerCount成员大于1的带有VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT的图像视图。 -
maxCombinedImageSamplerDescriptorCount是实现用于访问任何需要采样器 Y′CBCR 转换的格式所支持的最大组合图像采样器描述符数量。 -
fragmentShadingRateClampCombinerInputs是一个布尔值,指示实现是否将输入值钳制到组合器操作。
如果 VkPhysicalDeviceMaintenance6Properties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关属性。
VkPhysicalDeviceMaintenance7PropertiesKHR 结构定义如下:
// Provided by VK_KHR_maintenance7
typedef struct VkPhysicalDeviceMaintenance7PropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 robustFragmentShadingRateAttachmentAccess;
VkBool32 separateDepthStencilAttachmentAccess;
uint32_t maxDescriptorSetTotalUniformBuffersDynamic;
uint32_t maxDescriptorSetTotalStorageBuffersDynamic;
uint32_t maxDescriptorSetTotalBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic;
} VkPhysicalDeviceMaintenance7PropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
robustFragmentShadingRateAttachmentAccess指示片段着色率附件的缩放大小可以小于渲染区域的大小。如果robustFragmentShadingRateAttachmentAccess为VK_FALSE,则附件的大小乘以纹素大小必须大于或等于渲染区域的大小。如果它是VK_TRUE且片段着色率附件使用 VkImageSubresourceRange::baseMipLevel等于 0 创建,则缩放大小可以小于渲染区域,并且缺失纹素的着色率由 无效纹素的纹素替换定义。 -
separateDepthStencilAttachmentAccess指示支持写入深度/模板附件的一个方面,而无需对另一方面执行读取-修改-写入操作。如果此属性为VK_TRUE,则写入一个方面必须不会导致对另一方面执行读取-修改-写入操作。如果为VK_FALSE,则写入一个方面可能会导致写入另一方面,如 渲染通道加载操作、渲染通道存储操作和 渲染通道解析操作 所定义。 -
maxDescriptorSetTotalUniformBuffersDynamic是管道布局中可以包含的最大动态 uniform 缓冲区总数。类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位时,描述符才计入此限制。请参阅 动态 Uniform 缓冲区。 -
maxDescriptorSetTotalStorageBuffersDynamic是管线布局中 **可以** 包含的最大动态存储缓冲区总数。类型为VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位时,描述符才会计入此限制。请参阅 动态存储缓冲区。 -
maxDescriptorSetTotalBuffersDynamic是管线布局中 **可以** 包含的最大动态统一缓冲区和存储缓冲区总数。类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC或VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC的描述符计入此限制。只有在创建描述符集布局时未设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位时,描述符才会计入此限制。 -
maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic与maxDescriptorSetTotalUniformBuffersDynamic类似,但它会计算使用或不使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic与maxDescriptorSetTotalStorageBuffersDynamic类似,但它会计算使用或不使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindTotalBuffersDynamic与maxDescriptorSetTotalBuffersDynamic类似,但它会计算使用或不使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。虽然应用程序 **可以** 从使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT创建的池中分配动态存储缓冲区描述符,但这些描述符的绑定 **必须** 不存在于任何包含使用VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT创建的绑定的描述符集布局中。
如果 VkPhysicalDeviceMaintenance7PropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的依赖于实现的属性。
VkPhysicalDeviceLayeredApiPropertiesListKHR 结构定义为
// Provided by VK_KHR_maintenance7
typedef struct VkPhysicalDeviceLayeredApiPropertiesListKHR {
VkStructureType sType;
void* pNext;
uint32_t layeredApiCount;
VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApis;
} VkPhysicalDeviceLayeredApiPropertiesListKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
layeredApiCount是一个与 Vulkan 物理设备下的分层实现数量相关的整数,如下所述。 -
pLayeredApis是一个指向 VkPhysicalDeviceLayeredApiPropertiesKHR 数组的指针,其中返回有关 Vulkan 物理设备下的分层实现的信息。
如果 pLayeredApis 为 NULL,则在 layeredApiCount 中返回最顶层 Vulkan 物理设备(即由 vkGetPhysicalDeviceProperties2 返回的设备)下的分层实现的数量。否则,应用程序 **必须** 将 layeredApiCount 设置为 pLayeredApis 数组中的元素数量,并且在返回时,该变量将被实际写入 pLayeredApis 的值覆盖。如果 layeredApiCount 的值小于 Vulkan 物理设备下的分层实现的数量,则最多会将 layeredApiCount 个值写入 pLayeredApis。不是层的实现将在 layeredApiCount 中返回 0。
在存在多个分层实现的情况下,pLayeredApis 的每个元素都对应于在先前索引处的 API 之上实现的 API 实现。如果非 Vulkan 实现下存在分层实现,则它们可能在此查询中不可见,因为相应的 API 可能缺少此类查询。
如果 VkPhysicalDeviceLayeredApiPropertiesListKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的依赖于实现的属性。
VkPhysicalDeviceLayeredApiPropertiesKHR 结构定义为
// Provided by VK_KHR_maintenance7
typedef struct VkPhysicalDeviceLayeredApiPropertiesKHR {
VkStructureType sType;
void* pNext;
uint32_t vendorID;
uint32_t deviceID;
VkPhysicalDeviceLayeredApiKHR layeredAPI;
char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
} VkPhysicalDeviceLayeredApiPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
vendorID是分层实现的供应商的唯一标识符。 -
deviceID是供应商提供的设备中分层实现的唯一标识符。 -
layeredAPI是一个 VkPhysicalDeviceLayeredApiKHR,指定由分层实现实现的 API。 -
deviceName是一个包含以 null 结尾的 UTF-8 字符串的VK_MAX_PHYSICAL_DEVICE_NAME_SIZEchar数组,它是设备的名称。
如果 layeredAPI 为 VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR,则可以通过在 pNext 链中包含 VkPhysicalDeviceLayeredApiVulkanPropertiesKHR 结构来查询其他 Vulkan 特定信息。否则,如果 pNext 链中包含此类结构,则会忽略它。
作为 VkPhysicalDeviceLayeredApiPropertiesKHR::layeredAPI 返回的 Vulkan 物理设备下的分层实现的可能 API 实现列表为
// Provided by VK_KHR_maintenance7
typedef enum VkPhysicalDeviceLayeredApiKHR {
VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR = 0,
VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR = 1,
VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR = 2,
VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR = 3,
VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR = 4,
} VkPhysicalDeviceLayeredApiKHR;
-
VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR- 设备实现了 Vulkan API。 -
VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR- 设备实现了 D3D12 API。 -
VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR- 设备实现了 Metal API。 -
VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR- 设备实现了 OpenGL API。 -
VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR- 设备实现了 OpenGL ES API。
VkPhysicalDeviceLayeredApiVulkanPropertiesKHR 结构体定义如下:
// Provided by VK_KHR_maintenance7
typedef struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR {
VkStructureType sType;
void* pNext;
VkPhysicalDeviceProperties2 properties;
} VkPhysicalDeviceLayeredApiVulkanPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
properties是一个 VkPhysicalDeviceProperties2,其中返回了底层分层 Vulkan 实现的属性。
实现 **必须** 将 properties.properties.limits 和 properties.properties.sparseProperties 的内容填充为零。
VkPhysicalDeviceMeshShaderPropertiesNV 结构体定义如下:
// Provided by VK_NV_mesh_shader
typedef struct VkPhysicalDeviceMeshShaderPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t maxDrawMeshTasksCount;
uint32_t maxTaskWorkGroupInvocations;
uint32_t maxTaskWorkGroupSize[3];
uint32_t maxTaskTotalMemorySize;
uint32_t maxTaskOutputCount;
uint32_t maxMeshWorkGroupInvocations;
uint32_t maxMeshWorkGroupSize[3];
uint32_t maxMeshTotalMemorySize;
uint32_t maxMeshOutputVertices;
uint32_t maxMeshOutputPrimitives;
uint32_t maxMeshMultiviewViewCount;
uint32_t meshOutputPerVertexGranularity;
uint32_t meshOutputPerPrimitiveGranularity;
} VkPhysicalDeviceMeshShaderPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxDrawMeshTasksCount是单个绘制网格任务命令可以启动的最大本地工作组数量。请参阅可编程网格着色。 -
maxTaskWorkGroupInvocations是单个本地工作组中任务着色器调用的最大总数。在着色器模块中由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的 X、Y 和 Z 大小的乘积,**必须** 小于或等于此限制。 -
maxTaskWorkGroupSize[3] 是本地任务工作组的最大大小。这三个值分别表示 X、Y 和 Z 维度上的最大本地工作组大小。在着色器模块中,由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的x、y和z大小,**必须** 小于或等于相应的限制。 -
maxTaskTotalMemorySize是任务着色器可以用于共享内存和输出内存的总字节数的最大值。 -
maxTaskOutputCount是单个任务着色器工作组可以发出的最大输出任务数量。 -
maxMeshWorkGroupInvocations是单个本地工作组中网格着色器调用的最大总数。在着色器模块中由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的 X、Y 和 Z 大小的乘积,**必须** 小于或等于此限制。 -
maxMeshWorkGroupSize[3] 是本地网格工作组的最大大小。这三个值分别表示 X、Y 和 Z 维度上的最大本地工作组大小。在着色器模块中,由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的x、y和z大小,**必须** 小于或等于相应的限制。 -
maxMeshTotalMemorySize是网格着色器可以用于共享内存和输出内存的总字节数的最大值。 -
maxMeshOutputVertices是网格着色器输出可以存储的最大顶点数。 -
maxMeshOutputPrimitives是网格着色器输出可以存储的最大图元数。 -
maxMeshMultiviewViewCount是网格着色器可以使用的最大多视图视图数。 -
meshOutputPerVertexGranularity是网格顶点输出分配的粒度。该值可用于计算网格着色器使用的内存大小,该值 **必须** 小于或等于maxMeshTotalMemorySize。 -
meshOutputPerPrimitiveGranularity是分配为每个图元的网格输出的粒度。该值可用于计算网格着色器使用的内存大小,该值 **必须** 小于或等于maxMeshTotalMemorySize。
如果 VkPhysicalDeviceMeshShaderPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关属性。
VkPhysicalDeviceMeshShaderPropertiesEXT 结构体定义如下:
// Provided by VK_EXT_mesh_shader
typedef struct VkPhysicalDeviceMeshShaderPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxTaskWorkGroupTotalCount;
uint32_t maxTaskWorkGroupCount[3];
uint32_t maxTaskWorkGroupInvocations;
uint32_t maxTaskWorkGroupSize[3];
uint32_t maxTaskPayloadSize;
uint32_t maxTaskSharedMemorySize;
uint32_t maxTaskPayloadAndSharedMemorySize;
uint32_t maxMeshWorkGroupTotalCount;
uint32_t maxMeshWorkGroupCount[3];
uint32_t maxMeshWorkGroupInvocations;
uint32_t maxMeshWorkGroupSize[3];
uint32_t maxMeshSharedMemorySize;
uint32_t maxMeshPayloadAndSharedMemorySize;
uint32_t maxMeshOutputMemorySize;
uint32_t maxMeshPayloadAndOutputMemorySize;
uint32_t maxMeshOutputComponents;
uint32_t maxMeshOutputVertices;
uint32_t maxMeshOutputPrimitives;
uint32_t maxMeshOutputLayers;
uint32_t maxMeshMultiviewViewCount;
uint32_t meshOutputPerVertexGranularity;
uint32_t meshOutputPerPrimitiveGranularity;
uint32_t maxPreferredTaskWorkGroupInvocations;
uint32_t maxPreferredMeshWorkGroupInvocations;
VkBool32 prefersLocalInvocationVertexOutput;
VkBool32 prefersLocalInvocationPrimitiveOutput;
VkBool32 prefersCompactVertexOutput;
VkBool32 prefersCompactPrimitiveOutput;
} VkPhysicalDeviceMeshShaderPropertiesEXT;
VkPhysicalDeviceMeshShaderPropertiesEXT 结构的成员描述了以下实现相关的限制:
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxTaskWorkGroupTotalCount是单个网格任务绘制命令可以启动的最大本地工作组总数。 请参阅可编程网格着色。 -
maxTaskWorkGroupCount[3] 是单个网格任务绘制命令可以启动的最大本地工作组数量。这三个值分别表示 X、Y 和 Z 维度的最大本地工作组数量。绘制命令的工作组计数参数 **必须** 小于或等于相应的限制。这些维度的乘积 **必须** 小于或等于maxTaskWorkGroupTotalCount。 -
maxTaskWorkGroupInvocations是单个本地工作组中任务着色器调用的最大总数。在着色器模块中由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的 X、Y 和 Z 大小的乘积,**必须** 小于或等于此限制。 -
maxTaskWorkGroupSize[3] 是每个维度的最大本地任务工作组大小。这三个值分别表示 X、Y 和 Z 维度上的最大本地工作组大小。在着色器模块中,由LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰的对象指定的x、y和z大小,**必须** 小于或等于相应的限制。 -
maxTaskPayloadSize是在任务着色器阶段的着色器模块中,使用TaskPayloadWorkgroupEXT存储类声明的变量可用的最大总存储大小(以字节为单位)。 -
maxTaskSharedMemorySize是在任务着色器阶段的着色器模块中,使用Workgroup存储类声明的变量可用的最大总存储大小(以字节为单位)。 -
maxTaskPayloadAndSharedMemorySize是在任务着色器阶段的着色器模块中,使用TaskPayloadWorkgroupEXT或Workgroup存储类声明的变量可用的最大总存储大小(以字节为单位)。 -
maxMeshWorkGroupCount[3] 是单个任务着色器工作组每个维度可以发射的最大本地输出任务数。这三个值分别表示 X、Y 和 Z 维度的最大本地输出任务数。传递给OpEmitMeshTasksEXT的工作组计数参数必须小于或等于相应的限制。这些维度的乘积必须小于或等于maxMeshWorkGroupTotalCount。 -
maxMeshWorkGroupInvocations是单个本地工作组中网格着色器调用的最大总数。由着色器模块中的LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰符修饰的对象指定的 X、Y 和 Z 大小的乘积必须小于或等于此限制。 -
maxMeshWorkGroupSize[3] 是每个维度本地网格工作组的最大大小。这三个值分别表示 X、Y 和 Z 维度中的最大本地工作组大小。由着色器模块中的LocalSize或LocalSizeId执行模式或由WorkgroupSize修饰符修饰的对象指定的x、y和z大小必须小于或等于相应的限制。 -
maxMeshSharedMemorySize是网格着色器阶段中,着色器模块中使用Workgroup存储类声明的变量可用的最大总存储大小,以字节为单位。 -
maxMeshPayloadAndSharedMemorySize是网格着色器阶段中,着色器模块中使用TaskPayloadWorkgroupEXT或Workgroup存储类声明的变量可用的最大总存储大小,以字节为单位。 -
maxMeshOutputMemorySize是网格着色器阶段中,着色器模块中输出变量可用的最大总存储大小,以字节为单位,根据网格着色器输出中的公式计算。 -
maxMeshPayloadAndOutputMemorySize是网格着色器阶段中,着色器模块中使用TaskPayloadWorkgroupEXT存储类声明的变量或输出变量可用的最大总存储大小,以字节为单位,根据网格着色器输出中的公式计算。 -
meshOutputPerVertexGranularity是顶点分配的粒度。为网格着色器阶段分配的输出顶点数被填充为此数字的倍数。该值可用于计算网格着色器阶段中,着色器模块中输出变量所需的存储大小,该大小必须小于或等于maxMeshOutputMemorySize。 -
meshOutputPerPrimitiveGranularity是图元分配的粒度。为网格着色器阶段分配的输出图元数被填充为此数字的倍数。该值可用于计算网格着色器阶段中,着色器模块中输出变量所需的存储大小,该大小必须小于或等于maxMeshOutputMemorySize。 -
maxPreferredTaskWorkGroupInvocations是单个工作组中任务着色器调用次数的最大值,实现为了获得最佳性能而优先考虑该值。该值保证是任务着色器阶段支持的子组大小的倍数。 -
maxPreferredMeshWorkGroupInvocations是单个工作组中网格着色器调用次数的最大值,实现为了获得最佳性能而优先考虑该值。该值保证是网格着色器阶段支持的子组大小的倍数。 -
prefersLocalInvocationVertexOutput指定当数组索引与LocalInvocationIndex匹配时,写入网格着色器中的顶点输出数组是否能产生最佳性能。 -
prefersLocalInvocationPrimitiveOutput指定当数组索引与LocalInvocationIndex匹配时,写入网格着色器中的图元输出数组是否能产生最佳性能。 -
prefersCompactVertexOutput指定在网格着色器中进行自定义剔除后,是否应压缩输出顶点以获得最佳性能,否则,将顶点保留在其原始位置可能更好。 -
prefersCompactPrimitiveOutput指定在网格着色器中进行自定义剔除后,是否应压缩输出图元以获得最佳性能,否则,使用CullPrimitiveEXT可能更好。
如果 VkPhysicalDeviceMeshShaderPropertiesEXT 结构包含在 VkPhysicalDeviceProperties2 的 pNext 链中,则会使用实现相关的限制填充该结构。
VkPhysicalDeviceDescriptorIndexingProperties 结构定义为
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceDescriptorIndexingProperties {
VkStructureType sType;
void* pNext;
uint32_t maxUpdateAfterBindDescriptorsInAllPools;
VkBool32 shaderUniformBufferArrayNonUniformIndexingNative;
VkBool32 shaderSampledImageArrayNonUniformIndexingNative;
VkBool32 shaderStorageBufferArrayNonUniformIndexingNative;
VkBool32 shaderStorageImageArrayNonUniformIndexingNative;
VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative;
VkBool32 robustBufferAccessUpdateAfterBind;
VkBool32 quadDivergentImplicitLod;
uint32_t maxPerStageDescriptorUpdateAfterBindSamplers;
uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers;
uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers;
uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages;
uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages;
uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments;
uint32_t maxPerStageUpdateAfterBindResources;
uint32_t maxDescriptorSetUpdateAfterBindSamplers;
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers;
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers;
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindSampledImages;
uint32_t maxDescriptorSetUpdateAfterBindStorageImages;
uint32_t maxDescriptorSetUpdateAfterBindInputAttachments;
} VkPhysicalDeviceDescriptorIndexingProperties;
或等效的
// Provided by VK_EXT_descriptor_indexing
typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
maxUpdateAfterBindDescriptorsInAllPools是所有使用设置了VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT位的池创建的描述符(所有描述符类型的总和)可以创建的最大数量。当超出此限制,或者当此限制代表的空间由于碎片无法满足池创建时,池创建可能会失败。 -
shaderUniformBufferArrayNonUniformIndexingNative是一个布尔值,表示统一缓冲区描述符是否原生支持非均匀索引。如果此值为VK_FALSE,则非均匀索引统一缓冲区数组的单个动态指令实例可能会多次执行,以便访问所有描述符。 -
shaderSampledImageArrayNonUniformIndexingNative是一个布尔值,表示采样器和图像描述符是否原生支持非均匀索引。如果此值为VK_FALSE,则非均匀索引采样器或图像数组的单个动态指令实例可能会多次执行,以便访问所有描述符。 -
shaderStorageBufferArrayNonUniformIndexingNative是一个布尔值,表示存储缓冲区描述符是否原生支持非均匀索引。如果此值为VK_FALSE,则非均匀索引存储缓冲区数组的单个动态指令实例可能会多次执行,以便访问所有描述符。 -
shaderStorageImageArrayNonUniformIndexingNative是一个布尔值,表示存储图像描述符是否原生支持非均匀索引。如果此值为VK_FALSE,则非均匀索引存储图像数组的单个动态指令实例可能会多次执行,以便访问所有描述符。 -
shaderInputAttachmentArrayNonUniformIndexingNative是一个布尔值,表示输入附件描述符是否原生支持非均匀索引。如果此值为VK_FALSE,则非均匀索引输入附件数组的单个动态指令实例可能会多次执行,以便访问所有描述符。 -
robustBufferAccessUpdateAfterBind是一个布尔值,表示是否可以在设备上同时启用robustBufferAccess和descriptorBindingUniformBufferUpdateAfterBind、descriptorBindingStorageBufferUpdateAfterBind、descriptorBindingUniformTexelBufferUpdateAfterBind和/或descriptorBindingStorageTexelBufferUpdateAfterBind。如果此值为VK_FALSE,则必须禁用robustBufferAccess,或者必须禁用所有这些绑定后更新功能。 -
quadDivergentImplicitLod是一个布尔值,表示当用于指令的图像和/或采样器对象在四边形内不均匀时,图像操作的隐式 LOD 计算是否具有明确定义的结果。请参阅 导数图像操作。 -
maxPerStageDescriptorUpdateAfterBindSamplers与maxPerStageDescriptorSamplers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageDescriptorUpdateAfterBindUniformBuffers与maxPerStageDescriptorUniformBuffers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageDescriptorUpdateAfterBindStorageBuffers与maxPerStageDescriptorStorageBuffers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageDescriptorUpdateAfterBindSampledImages与maxPerStageDescriptorSampledImages类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageDescriptorUpdateAfterBindStorageImages与maxPerStageDescriptorStorageImages类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageDescriptorUpdateAfterBindInputAttachments与maxPerStageDescriptorInputAttachments类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxPerStageUpdateAfterBindResources与maxPerStageResources类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindSamplers与maxDescriptorSetSamplers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindUniformBuffers与maxDescriptorSetUniformBuffers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindUniformBuffersDynamic与maxDescriptorSetUniformBuffersDynamic类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。虽然应用程序可以从使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT创建的池中分配动态统一缓冲区描述符,但这些描述符的绑定必须不能存在于任何包含使用VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT创建的绑定的描述符集布局中。 -
maxDescriptorSetUpdateAfterBindStorageBuffers与maxDescriptorSetStorageBuffers类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindStorageBuffersDynamic与maxDescriptorSetStorageBuffersDynamic类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。虽然应用程序可以从使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT创建的池中分配动态存储缓冲区描述符,但这些描述符的绑定必须不能存在于任何包含使用VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT创建的绑定的描述符集布局中。 -
maxDescriptorSetUpdateAfterBindSampledImages与maxDescriptorSetSampledImages类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindStorageImages与maxDescriptorSetStorageImages类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。 -
maxDescriptorSetUpdateAfterBindInputAttachments与maxDescriptorSetInputAttachments类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符。
如果 VkPhysicalDeviceDescriptorIndexingProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的、依赖于实现的属性。
VkPhysicalDeviceInlineUniformBlockProperties 结构定义为
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceInlineUniformBlockProperties {
VkStructureType sType;
void* pNext;
uint32_t maxInlineUniformBlockSize;
uint32_t maxPerStageDescriptorInlineUniformBlocks;
uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
uint32_t maxDescriptorSetInlineUniformBlocks;
uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
} VkPhysicalDeviceInlineUniformBlockProperties;
或等效的
// Provided by VK_EXT_inline_uniform_block
typedef VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
maxInlineUniformBlockSize是 内联统一块绑定的最大大小(以字节为单位)。 -
maxPerStageDescriptorInlineUniformBlocks是在管道布局中,单个着色器阶段可以访问的最大内联uniform块绑定数量。描述符类型为VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK的描述符绑定会计算在此限制内。只有在创建描述符集布局时,没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,描述符绑定才会计算在此限制内。 -
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks与maxPerStageDescriptorInlineUniformBlocks类似,但它会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符绑定。 -
maxDescriptorSetInlineUniformBlocks是在管道布局中,所有管道着色器阶段和描述符集编号中,可以包含的最大内联 uniform 块绑定数量。描述符类型为VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK的描述符绑定会计算在此限制内。只有在创建描述符集布局时,没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下,描述符绑定才会计算在此限制内。 -
maxDescriptorSetUpdateAfterBindInlineUniformBlocks与maxDescriptorSetInlineUniformBlocks类似,但它会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符绑定。
如果 VkPhysicalDeviceInlineUniformBlockProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceConservativeRasterizationPropertiesEXT 结构定义如下:
// Provided by VK_EXT_conservative_rasterization
typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
VkStructureType sType;
void* pNext;
float primitiveOverestimationSize;
float maxExtraPrimitiveOverestimationSize;
float extraPrimitiveOverestimationSizeGranularity;
VkBool32 primitiveUnderestimation;
VkBool32 conservativePointAndLineRasterization;
VkBool32 degenerateTrianglesRasterized;
VkBool32 degenerateLinesRasterized;
VkBool32 fullyCoveredFragmentShaderInputVariable;
VkBool32 conservativeRasterizationPostDepthCoverage;
} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
primitiveOverestimationSize是在保守光栅化高估模式下,生成图元的每个边缘增加的像素大小。即使大小为 0.0,保守光栅化高估规则仍然适用,如果像素矩形的任何部分被生成图元覆盖,则会为整个像素生成片段。但是,实现可能通过增加生成图元的大小,使像素覆盖区域更加保守。 -
maxExtraPrimitiveOverestimationSize是实现支持在管道状态中进行额外高估的最大像素大小。值为 0.0 表示实现不支持在保守光栅化期间对生成图元进行任何额外的高估。大于 0.0 的值允许应用程序在保守光栅化高估期间进一步增加生成图元的大小。 -
extraPrimitiveOverestimationSizeGranularity是在管道状态中,可在 0.0 到maxExtraPrimitiveOverestimationSize(包括) 之间指定的额外高估的粒度。值为 0.0 表示实现可以使用屏幕空间像素固定点网格中最小的可表示非零值。 -
如果实现除了
VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT保守光栅化模式之外,还支持VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT保守光栅化模式,则primitiveUnderestimation为VK_TRUE。否则,实现仅支持VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT。 -
如果实现支持点和线图元的保守光栅化以及三角形图元,则
conservativePointAndLineRasterization为VK_TRUE。否则,实现仅支持三角形图元。 -
如果在三角形被量化为固定点光栅化像素网格后,生成的图元面积为零,则
degenerateTrianglesRasterized为VK_FALSE,表示实现会剔除这些图元。如果这些图元不被剔除,并且为片段使用触发顶点的属性和深度值,则degenerateTrianglesRasterized为VK_TRUE。图元面积的计算是在从裁剪后的三角形生成的图元上进行的 (如果适用)。零面积图元是背面,如果需要,应用程序可以启用背面剔除。 -
如果在直线被量化为固定点光栅化像素网格后,其长度变为零,则
degenerateLinesRasterized为VK_FALSE,表示实现会剔除这些直线。如果长度为零的直线不被剔除,并且为片段使用触发顶点的属性和深度值,则degenerateLinesRasterized为VK_TRUE。 -
如果实现支持 SPIR-V 内置片段着色器输入变量
FullyCoveredEXT,指定启用了保守光栅化并且片段区域完全被生成图元覆盖,则fullyCoveredFragmentShaderInputVariable为VK_TRUE。 -
如果实现支持启用了
PostDepthCoverage执行模式的保守光栅化,则conservativeRasterizationPostDepthCoverage为VK_TRUE。否则,当启用保守光栅化时,必须不使用PostDepthCoverage执行模式。
如果 VkPhysicalDeviceConservativeRasterizationPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceFragmentDensityMapPropertiesEXT 结构定义如下:
// Provided by VK_EXT_fragment_density_map
typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT {
VkStructureType sType;
void* pNext;
VkExtent2D minFragmentDensityTexelSize;
VkExtent2D maxFragmentDensityTexelSize;
VkBool32 fragmentDensityInvocations;
} VkPhysicalDeviceFragmentDensityMapPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
minFragmentDensityTexelSize是最小片段密度纹素大小。
如果 VkPhysicalDeviceFragmentDensityMapPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceFragmentDensityMap2PropertiesEXT 结构定义如下:
// Provided by VK_EXT_fragment_density_map2
typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 subsampledLoads;
VkBool32 subsampledCoarseReconstructionEarlyAccess;
uint32_t maxSubsampledArrayLayers;
uint32_t maxDescriptorSetSubsampledSamplers;
} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
subsampledLoads指定使用 load 操作在子采样附件上执行图像数据读取是否会重新采样到渲染通道的片段密度。 -
subsampledCoarseReconstructionEarlyAccess指定在片段着色器中使用flags包含VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT创建的采样器执行图像数据读取是否会在VK_PIPELINE_STAGE_VERTEX_SHADER_BIT期间触发额外的读取。 -
maxSubsampledArrayLayers是支持子采样器的用法中,VkImageView 数组层级的最大数量。 -
maxDescriptorSetSubsampledSamplers是一个 VkPipelineLayout 中 可以 包含的子采样器最大数量。
如果 VkPhysicalDeviceFragmentDensityMap2PropertiesEXT 结构体被包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充上每个对应的、依赖于具体实现的属性。
VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM 结构体定义如下:
// Provided by VK_QCOM_fragment_density_map_offset
typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM {
VkStructureType sType;
void* pNext;
VkExtent2D fragmentDensityOffsetGranularity;
} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
fragmentDensityOffsetGranularity是片段密度偏移的粒度。
如果 VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM 结构体被包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充上每个对应的、依赖于具体实现的属性。
VkPhysicalDeviceShaderCorePropertiesAMD 结构体定义如下:
// Provided by VK_AMD_shader_core_properties
typedef struct VkPhysicalDeviceShaderCorePropertiesAMD {
VkStructureType sType;
void* pNext;
uint32_t shaderEngineCount;
uint32_t shaderArraysPerEngineCount;
uint32_t computeUnitsPerShaderArray;
uint32_t simdPerComputeUnit;
uint32_t wavefrontsPerSimd;
uint32_t wavefrontSize;
uint32_t sgprsPerSimd;
uint32_t minSgprAllocation;
uint32_t maxSgprAllocation;
uint32_t sgprAllocationGranularity;
uint32_t vgprsPerSimd;
uint32_t minVgprAllocation;
uint32_t maxVgprAllocation;
uint32_t vgprAllocationGranularity;
} VkPhysicalDeviceShaderCorePropertiesAMD;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderArraysPerEngineCount是一个无符号整数值,表示一个着色器引擎内部的着色器阵列的数量。每个着色器阵列都有自己的扫描转换器、计算单元集合和一个渲染后端(颜色和深度附件)。一个着色器引擎内的着色器阵列共享着色器处理器输入(波浪发射器)和着色器导出(导出缓冲区)单元。目前,一个着色器引擎可以有一个或两个着色器阵列。 -
computeUnitsPerShaderArray是一个无符号整数值,表示一个着色器阵列内的物理计算单元数量。着色器阵列中的活动计算单元数量 可能 会更少。一个计算单元包含一组 SIMD 以及一个定序器模块和一个本地数据存储。 -
simdPerComputeUnit是一个无符号整数值,表示一个计算单元内的 SIMD 数量。每个 SIMD 一次处理一个指令。
如果 VkPhysicalDeviceShaderCorePropertiesAMD 结构体被包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充上每个对应的、依赖于具体实现的属性。
VkPhysicalDeviceShaderCoreProperties2AMD 结构体定义如下:
// Provided by VK_AMD_shader_core_properties2
typedef struct VkPhysicalDeviceShaderCoreProperties2AMD {
VkStructureType sType;
void* pNext;
VkShaderCorePropertiesFlagsAMD shaderCoreFeatures;
uint32_t activeComputeUnitCount;
} VkPhysicalDeviceShaderCoreProperties2AMD;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderCoreFeatures是一个 VkShaderCorePropertiesFlagBitsAMD 的位掩码,指示着色器核心支持的功能集。
如果 VkPhysicalDeviceShaderCoreProperties2AMD 结构体被包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充上每个对应的、依赖于具体实现的属性。
此类型的位 可以 由未来的扩展或 VK_AMD_shader_core_properties2 扩展的新版本定义。 VkShaderCorePropertiesFlagsAMD 的 flags 成员的可能值是:
// Provided by VK_AMD_shader_core_properties2
typedef enum VkShaderCorePropertiesFlagBitsAMD {
} VkShaderCorePropertiesFlagBitsAMD;
// Provided by VK_AMD_shader_core_properties2
typedef VkFlags VkShaderCorePropertiesFlagsAMD;
VkShaderCorePropertiesFlagsAMD 是一个位掩码类型,用于提供零个或多个 VkShaderCorePropertiesFlagBitsAMD。
VkPhysicalDeviceDepthStencilResolveProperties 结构体定义如下:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceDepthStencilResolveProperties {
VkStructureType sType;
void* pNext;
VkResolveModeFlags supportedDepthResolveModes;
VkResolveModeFlags supportedStencilResolveModes;
VkBool32 independentResolveNone;
VkBool32 independentResolve;
} VkPhysicalDeviceDepthStencilResolveProperties;
或等效的
// Provided by VK_KHR_depth_stencil_resolve
typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
supportedDepthResolveModes是一个 VkResolveModeFlagBits 的位掩码,指示支持的深度解析模式的集合。VK_RESOLVE_MODE_SAMPLE_ZERO_BIT必须 包含在集合中,但实现 可能 支持其他模式。 -
supportedStencilResolveModes是一个 VkResolveModeFlagBits 的位掩码,指示支持的模板解析模式的集合。VK_RESOLVE_MODE_SAMPLE_ZERO_BIT必须 包含在集合中,但实现 可能 支持其他模式。VK_RESOLVE_MODE_AVERAGE_BIT不能 包含在集合中。 -
independentResolveNone如果当其中一个模式是VK_RESOLVE_MODE_NONE时,实现支持将深度和模板解析模式设置为不同的值,则为VK_TRUE。否则,实现仅支持将两种模式设置为相同的值。 -
如果实现支持支持的深度和模板解析模式的所有组合,包括将深度或模板解析模式设置为
VK_RESOLVE_MODE_NONE,则independentResolve为VK_TRUE。支持independentResolve的实现 必须 也支持independentResolveNone。
如果 VkPhysicalDeviceDepthStencilResolveProperties 结构体被包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它会被填充上每个对应的、依赖于具体实现的属性。
VkPhysicalDevicePerformanceQueryPropertiesKHR 结构体定义如下:
// Provided by VK_KHR_performance_query
typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 allowCommandBufferQueryCopies;
} VkPhysicalDevicePerformanceQueryPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
如果允许性能查询池与 vkCmdCopyQueryPoolResults 一起使用,则
allowCommandBufferQueryCopies为VK_TRUE。
如果 VkPhysicalDevicePerformanceQueryPropertiesKHR 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它将被填充为每个对应的实现相关的属性。
VkPhysicalDeviceShadingRateImagePropertiesNV 结构体定义如下:
// Provided by VK_NV_shading_rate_image
typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV {
VkStructureType sType;
void* pNext;
VkExtent2D shadingRateTexelSize;
uint32_t shadingRatePaletteSize;
uint32_t shadingRateMaxCoarseSamples;
} VkPhysicalDeviceShadingRateImagePropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shadingRateMaxCoarseSamples指定单个片段中支持的最大覆盖样本数。如果从基本着色率导出的片段大小与每个像素的覆盖样本数的乘积超过此限制,则将调整最终着色率,使其乘积不超过此限制。
如果 VkPhysicalDeviceShadingRateImagePropertiesNV 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它将被填充为每个对应的实现相关的属性。
这些属性与 着色率图像 功能相关。
VkPhysicalDeviceMemoryDecompressionPropertiesNV 结构体定义如下:
// Provided by VK_NV_memory_decompression
typedef struct VkPhysicalDeviceMemoryDecompressionPropertiesNV {
VkStructureType sType;
void* pNext;
VkMemoryDecompressionMethodFlagsNV decompressionMethods;
uint64_t maxDecompressionIndirectCount;
} VkPhysicalDeviceMemoryDecompressionPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
decompressionMethods是一个 VkMemoryDecompressionMethodFlagBitsNV 的位掩码,指定实现支持的内存解压缩方法。 -
maxDecompressionIndirectCount指定 vkCmdDecompressMemoryIndirectCountNV 的countBuffer中支持的最大计数。
如果 VkPhysicalDeviceMemoryDecompressionPropertiesNV 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它将被填充为每个对应的实现相关的属性。
VkPhysicalDeviceTransformFeedbackPropertiesEXT 结构体定义如下:
// Provided by VK_EXT_transform_feedback
typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxTransformFeedbackStreams;
uint32_t maxTransformFeedbackBuffers;
VkDeviceSize maxTransformFeedbackBufferSize;
uint32_t maxTransformFeedbackStreamDataSize;
uint32_t maxTransformFeedbackBufferDataSize;
uint32_t maxTransformFeedbackBufferDataStride;
VkBool32 transformFeedbackQueries;
VkBool32 transformFeedbackStreamsLinesTriangles;
VkBool32 transformFeedbackRasterizationStreamSelect;
VkBool32 transformFeedbackDraw;
} VkPhysicalDeviceTransformFeedbackPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxTransformFeedbackStreams是可以使用GeometryStreams功能声明的几何着色器输出的最大顶点流数量。 如果实现不支持VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams,则maxTransformFeedbackStreams必须 为1。 -
maxTransformFeedbackBuffers是可以绑定以捕获来自最后一个光栅化前着色器阶段的着色器输出的最大变换反馈缓冲区数量。 -
maxTransformFeedbackBufferSize是在 vkCmdBindTransformFeedbackBuffersEXT 中绑定用于变换反馈的缓冲区时可以指定的最大大小。 -
maxTransformFeedbackStreamDataSize是与特定顶点流关联的一个或多个变换反馈缓冲区捕获的每个顶点的最大数据量(以字节为单位)。 -
maxTransformFeedbackBufferDataSize是可以捕获到特定变换反馈缓冲区的每个顶点的最大数据量(以字节为单位)。 -
如果实现支持
VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT查询类型,则transformFeedbackQueries为VK_TRUE。 如果无法创建此类型的查询,则transformFeedbackQueries为VK_FALSE。 -
如果实现除了输出
OutputPoints外,还支持几何着色器OpExecutionMode的OutputLineStrip和OutputTriangleStrip,则transformFeedbackStreamsLinesTriangles为VK_TRUE。如果transformFeedbackStreamsLinesTriangles为VK_FALSE,则当从几何着色器输出多个顶点流时,实现仅支持OutputPoints的OpExecutionMode。 -
如果实现支持
GeometryStreamsSPIR-V 功能,并且应用程序可以使用 VkPipelineRasterizationStateStreamCreateInfoEXT 来修改用于光栅化的顶点流输出,则transformFeedbackRasterizationStreamSelect为VK_TRUE。否则,顶点流0必须 始终用于光栅化。 -
如果实现支持 vkCmdDrawIndirectByteCountEXT 函数,则
transformFeedbackDraw为VK_TRUE,否则必须不调用该函数。
如果 VkPhysicalDeviceTransformFeedbackPropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它将被填充为每个对应的实现相关的属性。
VkPhysicalDeviceCopyMemoryIndirectPropertiesNV 结构体定义如下:
// Provided by VK_NV_copy_memory_indirect
typedef struct VkPhysicalDeviceCopyMemoryIndirectPropertiesNV {
VkStructureType sType;
void* pNext;
VkQueueFlags supportedQueues;
} VkPhysicalDeviceCopyMemoryIndirectPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
supportedQueues是一个 VkQueueFlagBits 的位掩码,指示支持间接复制命令的队列。
如果支持 indirectCopy 功能,则 supportedQueues 必须 返回至少一个支持的队列。
如果 VkPhysicalDeviceCopyMemoryIndirectPropertiesNV 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,它将被填充为每个对应的实现相关的属性。
VkPhysicalDeviceRayTracingPropertiesNV 结构体定义如下:
// Provided by VK_NV_ray_tracing
typedef struct VkPhysicalDeviceRayTracingPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t shaderGroupHandleSize;
uint32_t maxRecursionDepth;
uint32_t maxShaderGroupStride;
uint32_t shaderGroupBaseAlignment;
uint64_t maxGeometryCount;
uint64_t maxInstanceCount;
uint64_t maxTriangleCount;
uint32_t maxDescriptorSetAccelerationStructures;
} VkPhysicalDeviceRayTracingPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderGroupHandleSize是着色器头的大小(以字节为单位)。 -
maxShaderGroupStride是着色器绑定表中着色器组之间允许的最大步幅(以字节为单位)。 -
shaderGroupBaseAlignment是着色器绑定表基址的必需对齐(以字节为单位)。 -
maxGeometryCount是底层加速结构中几何体的最大数量。 -
maxInstanceCount是顶层加速结构中实例的最大数量。 -
maxTriangleCount是底层加速结构中所有几何体中三角形的最大数量。 -
maxDescriptorSetAccelerationStructures是描述符集中允许的最大加速结构描述符数量。
由于几何体、实例和三角形计数在加速结构创建时指定为 32 位值,因此 maxGeometryCount、maxInstanceCount 和 maxTriangleCount 必须 不超过 232-1。
如果 VkPhysicalDeviceRayTracingPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
此结构指定的限制 必须 与 VkPhysicalDeviceAccelerationStructurePropertiesKHR 和 VkPhysicalDeviceRayTracingPipelinePropertiesKHR 中具有相同名称的限制相匹配。
VkPhysicalDeviceAccelerationStructurePropertiesKHR 结构定义为
// Provided by VK_KHR_acceleration_structure
typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR {
VkStructureType sType;
void* pNext;
uint64_t maxGeometryCount;
uint64_t maxInstanceCount;
uint64_t maxPrimitiveCount;
uint32_t maxPerStageDescriptorAccelerationStructures;
uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures;
uint32_t maxDescriptorSetAccelerationStructures;
uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures;
uint32_t minAccelerationStructureScratchOffsetAlignment;
} VkPhysicalDeviceAccelerationStructurePropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxPerStageDescriptorAccelerationStructures是在管线布局中单个着色器阶段可访问的最大加速结构绑定数量。描述符类型为VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR的描述符绑定会影响此限制。只有在没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下创建的描述符集布局中的描述符绑定才会影响此限制。 -
maxPerStageDescriptorUpdateAfterBindAccelerationStructures与maxPerStageDescriptorAccelerationStructures类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符绑定。 -
maxDescriptorSetAccelerationStructures是在所有管线着色器阶段和描述符集编号的管线布局中,描述符绑定中可包含的最大加速结构描述符数量。描述符类型为VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR的描述符绑定会影响此限制。只有在没有设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位的情况下创建的描述符集布局中的描述符绑定才会影响此限制。 -
maxDescriptorSetUpdateAfterBindAccelerationStructures与maxDescriptorSetAccelerationStructures类似,但会计算通过设置或不设置VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT位创建的描述符集中的描述符绑定。 -
minAccelerationStructureScratchOffsetAlignment是传递给加速结构构建命令的临时数据的最小必需对齐(以字节为单位)。该值必须是 2 的幂。
由于几何体、实例和图元计数在加速结构创建时指定为 32 位值,因此 maxGeometryCount、maxInstanceCount 和 maxPrimitiveCount 必须 不超过 232-1。
如果 VkPhysicalDeviceAccelerationStructurePropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
此结构指定的限制 必须 与 VkPhysicalDeviceRayTracingPropertiesNV 中具有相同名称的限制相匹配。
VkPhysicalDeviceRayTracingPipelinePropertiesKHR 结构定义为
// Provided by VK_KHR_ray_tracing_pipeline
typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR {
VkStructureType sType;
void* pNext;
uint32_t shaderGroupHandleSize;
uint32_t maxRayRecursionDepth;
uint32_t maxShaderGroupStride;
uint32_t shaderGroupBaseAlignment;
uint32_t shaderGroupHandleCaptureReplaySize;
uint32_t maxRayDispatchInvocationCount;
uint32_t shaderGroupHandleAlignment;
uint32_t maxRayHitAttributeSize;
} VkPhysicalDeviceRayTracingPipelinePropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderGroupHandleSize是着色器头的大小(以字节为单位)。 -
maxShaderGroupStride是着色器绑定表中着色器组之间允许的最大步幅(以字节为单位)。 -
shaderGroupBaseAlignment是着色器绑定表基址的必需对齐(以字节为单位)。 -
shaderGroupHandleCaptureReplaySize是着色器组句柄执行捕获和回放所需信息的字节数。 -
maxRayDispatchInvocationCount是单个 vkCmdTraceRaysIndirectKHR 或 vkCmdTraceRaysKHR 命令可能生成的最大射线生成着色器调用次数。 -
shaderGroupHandleAlignment是着色器绑定表中每个条目的必需对齐(以字节为单位)。该值必须是 2 的幂。 -
maxRayHitAttributeSize是射线属性结构的最大大小(以字节为单位)
如果 VkPhysicalDeviceRayTracingPipelinePropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
此结构指定的限制 必须 与 VkPhysicalDeviceRayTracingPropertiesNV 中具有相同名称的限制相匹配。
VkPhysicalDeviceCooperativeMatrixPropertiesNV 结构定义为
// Provided by VK_NV_cooperative_matrix
typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV {
VkStructureType sType;
void* pNext;
VkShaderStageFlags cooperativeMatrixSupportedStages;
} VkPhysicalDeviceCooperativeMatrixPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
cooperativeMatrixSupportedStages是 VkShaderStageFlagBits 的位域,描述了支持协同矩阵指令的着色器阶段。如果物理设备的任何队列支持VK_QUEUE_COMPUTE_BIT,则cooperativeMatrixSupportedStages将设置VK_SHADER_STAGE_COMPUTE_BIT位。
如果 VkPhysicalDeviceCooperativeMatrixPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
VkPhysicalDeviceCooperativeMatrixPropertiesKHR 结构定义为
// Provided by VK_KHR_cooperative_matrix
typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesKHR {
VkStructureType sType;
void* pNext;
VkShaderStageFlags cooperativeMatrixSupportedStages;
} VkPhysicalDeviceCooperativeMatrixPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
cooperativeMatrixSupportedStages是 VkShaderStageFlagBits 的位域,描述了支持协同矩阵指令的着色器阶段。如果物理设备的任何队列支持VK_QUEUE_COMPUTE_BIT,则cooperativeMatrixSupportedStages将设置VK_SHADER_STAGE_COMPUTE_BIT位。
cooperativeMatrixSupportedStages 必须 不能设置除 VK_SHADER_STAGE_COMPUTE_BIT 以外的任何位。
如果 VkPhysicalDeviceCooperativeMatrixPropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
VkPhysicalDeviceCooperativeMatrix2PropertiesNV 结构定义如下:
// Provided by VK_NV_cooperative_matrix2
typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize;
uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension;
uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory;
} VkPhysicalDeviceCooperativeMatrix2PropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
cooperativeMatrixWorkgroupScopeMaxWorkgroupSize是当模块使用OpTypeCooperativeMatrixKHR且Scope等于Workgroup时,工作组中的最大调用次数。 -
cooperativeMatrixFlexibleDimensionsMaxDimension是当cooperativeMatrixFlexibleDimensions特性启用时,协同矩阵类型支持的最大维度。 -
cooperativeMatrixWorkgroupScopeReservedSharedMemory是当模块使用OpTypeCooperativeMatrixKHR且Scope等于Workgroup时,实现保留的共享内存字节数。
如果 VkPhysicalDeviceCooperativeMatrix2PropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceShaderSMBuiltinsPropertiesNV 结构定义如下:
// Provided by VK_NV_shader_sm_builtins
typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t shaderSMCount;
uint32_t shaderWarpsPerSM;
} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceShaderSMBuiltinsPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceTexelBufferAlignmentProperties 结构定义如下:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties {
VkStructureType sType;
void* pNext;
VkDeviceSize storageTexelBufferOffsetAlignmentBytes;
VkBool32 storageTexelBufferOffsetSingleTexelAlignment;
VkDeviceSize uniformTexelBufferOffsetAlignmentBytes;
VkBool32 uniformTexelBufferOffsetSingleTexelAlignment;
} VkPhysicalDeviceTexelBufferAlignmentProperties;
或等效的
// Provided by VK_EXT_texel_buffer_alignment
typedef VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
storageTexelBufferOffsetAlignmentBytes是适用于任何格式的存储纹理缓冲区的字节对齐值。该值必须是 2 的幂。 -
storageTexelBufferOffsetSingleTexelAlignment指示单纹素对齐是否足以用于任何格式的存储纹理缓冲区。 -
uniformTexelBufferOffsetAlignmentBytes是适用于任何格式的 uniform 纹理缓冲区的字节对齐值。该值必须是 2 的幂。 -
uniformTexelBufferOffsetSingleTexelAlignment指示单纹素对齐是否足以用于任何格式的 uniform 纹理缓冲区。
如果 VkPhysicalDeviceTexelBufferAlignmentProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
如果单纹素对齐属性为 VK_FALSE,则缓冲区视图的偏移量必须与相应的字节对齐值对齐。如果单纹素对齐属性为 VK_TRUE,则缓冲区视图的偏移量必须与相应的字节对齐值或单个纹素的大小(基于 VkBufferViewCreateInfo::format)中较小的值对齐。如果单个纹素的大小是三个字节的倍数,则使用格式的单个分量的大小代替。
对于任何支持用作纹理缓冲区的格式,这些限制必须不声明大于 要求的 VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment 的最大最小值对齐。
VkPhysicalDeviceTimelineSemaphoreProperties 结构定义如下:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceTimelineSemaphoreProperties {
VkStructureType sType;
void* pNext;
uint64_t maxTimelineSemaphoreValueDifference;
} VkPhysicalDeviceTimelineSemaphoreProperties;
或等效的
// Provided by VK_KHR_timeline_semaphore
typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceTimelineSemaphoreProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceLineRasterizationProperties 结构定义如下:
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDeviceLineRasterizationProperties {
VkStructureType sType;
void* pNext;
uint32_t lineSubPixelPrecisionBits;
} VkPhysicalDeviceLineRasterizationProperties;
或等效的
// Provided by VK_KHR_line_rasterization
typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesKHR;
或等效的
// Provided by VK_EXT_line_rasterization
typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
lineSubPixelPrecisionBits是在光栅化 线段 时,帧缓冲区坐标 xf 和 yf 中的亚像素精度位数。
如果 VkPhysicalDeviceLineRasterizationProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceRobustness2PropertiesEXT 结构定义如下:
// Provided by VK_EXT_robustness2
typedef struct VkPhysicalDeviceRobustness2PropertiesEXT {
VkStructureType sType;
void* pNext;
VkDeviceSize robustStorageBufferAccessSizeAlignment;
VkDeviceSize robustUniformBufferAccessSizeAlignment;
} VkPhysicalDeviceRobustness2PropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
robustStorageBufferAccessSizeAlignment是当启用robustBufferAccess2特性时,用于边界检查的存储缓冲区描述符的范围向上舍入到的字节数。此值必须为 1 或 4。 -
robustUniformBufferAccessSizeAlignment是当启用robustBufferAccess2特性时,用于边界检查的 uniform 缓冲区描述符的范围向上舍入到的字节数。此值必须是 [1, 256] 范围内的 2 的幂。
如果 VkPhysicalDeviceRobustness2PropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV 结构定义如下:
// Provided by VK_NV_device_generated_commands
typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t maxGraphicsShaderGroupCount;
uint32_t maxIndirectSequenceCount;
uint32_t maxIndirectCommandsTokenCount;
uint32_t maxIndirectCommandsStreamCount;
uint32_t maxIndirectCommandsTokenOffset;
uint32_t maxIndirectCommandsStreamStride;
uint32_t minSequencesCountBufferOffsetAlignment;
uint32_t minSequencesIndexBufferOffsetAlignment;
uint32_t minIndirectCommandsBufferOffsetAlignment;
} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxGraphicsShaderGroupCount是 VkGraphicsPipelineShaderGroupsCreateInfoNV 中的最大着色器组数。 -
maxIndirectSequenceCount是 VkGeneratedCommandsInfoNV 和 VkGeneratedCommandsMemoryRequirementsInfoNV 中的最大序列数。 -
maxIndirectCommandsTokenCount是 VkIndirectCommandsLayoutCreateInfoNV 中令牌的最大数量。 -
maxIndirectCommandsStreamCount是 VkIndirectCommandsLayoutCreateInfoNV 中流的最大数量。 -
maxIndirectCommandsTokenOffset是 VkIndirectCommandsLayoutTokenNV 中最大的偏移量。 -
maxIndirectCommandsStreamStride是 VkIndirectCommandsLayoutCreateInfoNV 中最大的流步幅。 -
minSequencesCountBufferOffsetAlignment是内存地址的最小对齐值,这些内存地址可以在 VkGeneratedCommandsInfoNV 中使用。 -
minSequencesIndexBufferOffsetAlignment是内存地址的最小对齐值,这些内存地址可以在 VkGeneratedCommandsInfoNV 中使用。 -
minIndirectCommandsBufferOffsetAlignment是 VkIndirectCommandsStreamNV 中使用的内存地址,以及作为 VkGeneratedCommandsInfoNV 中的预处理缓冲区的最小对齐值。
如果 VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关的属性填充该结构。
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT 结构定义如下
// Provided by VK_EXT_device_generated_commands
typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxIndirectPipelineCount;
uint32_t maxIndirectShaderObjectCount;
uint32_t maxIndirectSequenceCount;
uint32_t maxIndirectCommandsTokenCount;
uint32_t maxIndirectCommandsTokenOffset;
uint32_t maxIndirectCommandsIndirectStride;
VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes;
VkShaderStageFlags supportedIndirectCommandsShaderStages;
VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding;
VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding;
VkBool32 deviceGeneratedCommandsTransformFeedback;
VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount;
} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxIndirectPipelineCount是传递给 vkCreateIndirectExecutionSetEXT 的管道的最大数量。 -
maxIndirectShaderObjectCount是传递给 vkCreateIndirectExecutionSetEXT 的着色器对象的最大数量。如果此值为零,则不支持间接绑定着色器对象。 -
maxIndirectSequenceCount是 VkGeneratedCommandsInfoEXT 和 VkGeneratedCommandsMemoryRequirementsInfoEXT 中的最大序列数。 -
maxIndirectCommandsTokenCount是 VkIndirectCommandsLayoutCreateInfoEXT 中令牌的最大数量。 -
maxIndirectCommandsTokenOffset是 VkIndirectCommandsLayoutTokenEXT 中最大的偏移量。 -
maxIndirectCommandsIndirectStride是 VkIndirectCommandsLayoutCreateInfoEXT 中最大的流步幅。 -
supportedIndirectCommandsShaderStages指示可以用于生成间接命令的阶段。实现至少需要支持:VK_SHADER_STAGE_VERTEX_BIT、VK_SHADER_STAGE_FRAGMENT_BIT、VK_SHADER_STAGE_COMPUTE_BIT。 -
supportedIndirectCommandsShaderStagesPipelineBinding指示在间接执行集中,可以用于使用管道间接绑定着色器阶段的阶段。 -
supportedIndirectCommandsShaderStagesShaderBinding指示在间接执行集中,可以用于使用着色器对象间接绑定着色器阶段的阶段。 -
deviceGeneratedCommandsTransformFeedback指示实现是否支持与VK_EXT_transform_feedback的交互,用于不是使用VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT创建的管道。 -
deviceGeneratedCommandsMultiDrawIndirectCount指示实现是否支持多绘制间接令牌的 COUNT 变体。
如果 VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关的属性填充该结构。
VkPhysicalDevicePortabilitySubsetPropertiesKHR 结构定义如下
// Provided by VK_KHR_portability_subset
typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
VkStructureType sType;
void* pNext;
uint32_t minVertexInputBindingStrideAlignment;
} VkPhysicalDevicePortabilitySubsetPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
minVertexInputBindingStrideAlignment指示顶点输入步幅的最小对齐值。VkVertexInputBindingDescription::stride必须是此值的倍数,并且至少与其一样大。该值必须是 2 的幂。
如果 VkPhysicalDevicePortabilitySubsetPropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关的属性填充该结构。
VkPhysicalDeviceFragmentShadingRatePropertiesKHR 结构定义如下
// Provided by VK_KHR_fragment_shading_rate
typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR {
VkStructureType sType;
void* pNext;
VkExtent2D minFragmentShadingRateAttachmentTexelSize;
VkExtent2D maxFragmentShadingRateAttachmentTexelSize;
uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
VkBool32 primitiveFragmentShadingRateWithMultipleViewports;
VkBool32 layeredShadingRateAttachments;
VkBool32 fragmentShadingRateNonTrivialCombinerOps;
VkExtent2D maxFragmentSize;
uint32_t maxFragmentSizeAspectRatio;
uint32_t maxFragmentShadingRateCoverageSamples;
VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples;
VkBool32 fragmentShadingRateWithShaderDepthStencilWrites;
VkBool32 fragmentShadingRateWithSampleMask;
VkBool32 fragmentShadingRateWithShaderSampleMask;
VkBool32 fragmentShadingRateWithConservativeRasterization;
VkBool32 fragmentShadingRateWithFragmentShaderInterlock;
VkBool32 fragmentShadingRateWithCustomSampleLocations;
VkBool32 fragmentShadingRateStrictMultiplyCombiner;
} VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
minFragmentShadingRateAttachmentTexelSize指示片段着色率附件中每个纹素对应的帧缓冲区部分的最小支持宽度和高度。每个值必须小于或等于maxFragmentShadingRateAttachmentTexelSize中的值。每个值必须是 2 的幂。如果不支持attachmentFragmentShadingRate功能,则必须为 (0,0)。 -
maxFragmentShadingRateAttachmentTexelSize指示片段着色率附件中每个纹素对应的帧缓冲区部分的最大支持宽度和高度。每个值必须大于或等于minFragmentShadingRateAttachmentTexelSize中的值。每个值必须是 2 的幂。如果不支持attachmentFragmentShadingRate功能,则必须为 (0,0)。 -
maxFragmentShadingRateAttachmentTexelSizeAspectRatio指示片段着色率附件中每个纹素对应的帧缓冲部分的最大宽高比。maxFragmentShadingRateAttachmentTexelSizeAspectRatio必须 是 2 的幂,并且 必须 小于或等于 max(maxFragmentShadingRateAttachmentTexelSize.width/minFragmentShadingRateAttachmentTexelSize.height,maxFragmentShadingRateAttachmentTexelSize.height/minFragmentShadingRateAttachmentTexelSize.width)。如果不支持attachmentFragmentShadingRate功能,则它必须为 0。 -
primitiveFragmentShadingRateWithMultipleViewports指定在使用多个视口时,是否可以使用图元片段着色率。如果此值为VK_FALSE,则必须仅使用单个视口,并且在设置PrimitiveShadingRateKHR时,应用程序必须不写入ViewportMaskNV或ViewportIndex内置变量。如果不支持shaderOutputViewportIndex功能、VK_EXT_shader_viewport_index_layer扩展或geometryShader功能,或者如果不支持primitiveFragmentShadingRate功能,则它必须为VK_FALSE。 -
layeredShadingRateAttachments指定是否可以创建具有多个图层的着色率附件图像视图。如果此值为VK_FALSE,则当创建具有包含VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR的usage的图像视图时,layerCount必须为1。如果不支持multiview功能、shaderOutputViewportIndex功能、VK_EXT_shader_viewport_index_layer扩展或geometryShader功能,或者如果不支持attachmentFragmentShadingRate功能,则它必须为VK_FALSE。 -
fragmentShadingRateNonTrivialCombinerOps指定是否可以使用VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR或VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR以外的 VkFragmentShadingRateCombinerOpKHR 枚举。除非支持primitiveFragmentShadingRate或attachmentFragmentShadingRate功能,否则它必须为VK_FALSE。 -
maxFragmentSize指示片段支持的最大宽度和高度。其width和height成员必须都是 2 的幂值。此限制纯粹是信息性的,不会进行验证。 -
maxFragmentSizeAspectRatio指示片段的最大宽高比。maxFragmentSizeAspectRatio必须是 2 的幂值,并且 必须小于或等于maxFragmentSize的width和height成员的最大值。此限制纯粹是信息性的,不会进行验证。 -
maxFragmentShadingRateCoverageSamples指定单个片段中支持的最大覆盖样本数。maxFragmentShadingRateCoverageSamples必须小于或等于maxFragmentSize的width和height成员的乘积,以及maxFragmentShadingRateRasterizationSamples报告的样本计数。如果支持fragmentShadingRateWithShaderSampleMask,则maxFragmentShadingRateCoverageSamples必须小于或等于maxSampleMaskWords× 32。此限制纯粹是信息性的,不会进行验证。 -
maxFragmentShadingRateRasterizationSamples是一个 VkSampleCountFlagBits 值,指定当一个片段覆盖多个像素时支持的最大采样率。此限制纯粹是信息性的,不会进行验证。 -
fragmentShadingRateWithShaderDepthStencilWrites指定实现是否支持从多像素片段的片段着色器写入FragDepth或FragStencilRefEXT。如果此值为VK_FALSE,则写入这些内置变量会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateWithSampleMask指定实现是否支持将 VkPipelineMultisampleStateCreateInfo::pSampleMask的有效位设置为0,以用于多像素片段。如果此值为VK_FALSE,则将样本掩码中的有效位清零会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateWithShaderSampleMask指定实现是否支持为多像素片段读取或写入SampleMask。如果此值为VK_FALSE,则使用该内置变量会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateWithConservativeRasterization指定是否支持多像素片段的保守光栅化。如果不支持VK_EXT_conservative_rasterization,则它必须为VK_FALSE。如果此值为VK_FALSE,则使用保守光栅化会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateWithFragmentShaderInterlock指定是否支持多像素片段的片段着色器互锁。如果不支持VK_EXT_fragment_shader_interlock,则它必须为VK_FALSE。如果此值为VK_FALSE,则使用片段着色器互锁会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateWithCustomSampleLocations指定是否支持多像素片段的自定义样本位置。如果不支持VK_EXT_sample_locations,则它必须为VK_FALSE。如果此值为VK_FALSE,则使用自定义样本位置会将片段着色率钳制为 (1,1)。 -
fragmentShadingRateStrictMultiplyCombiner指定VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR是否准确执行乘法运算。如果此值为VK_FALSE,则实现将改为使用加法来组合速率。如果fragmentShadingRateNonTrivialCombinerOps为VK_FALSE,则实现必须将其报告为VK_FALSE。如果fragmentShadingRateNonTrivialCombinerOps为VK_TRUE,则实现应该将其报告为VK_TRUE。
|
使用线性空间中的片段宽度/高度来相乘组合器速率等同于在 log2 空间中对这些值进行相加。一些实现无意中在线性空间中实现了加法,这是由于源自本规范之外的不明确的需求所致。这导致了 |
如果 VkPhysicalDeviceFragmentShadingRatePropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关属性进行填充。
这些属性与片段着色率有关。
VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV 结构定义为
// Provided by VK_NV_fragment_shading_rate_enums
typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV {
VkStructureType sType;
void* pNext;
VkSampleCountFlagBits maxFragmentShadingRateInvocationCount;
} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxFragmentShadingRateInvocationCount是一个 VkSampleCountFlagBits 值,指示在管线、图元和附件片段着色率中,每个片段支持的最大片段着色器调用次数。
如果 VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关属性进行填充。
这些属性与片段着色率有关。
VkPhysicalDeviceCustomBorderColorPropertiesEXT 结构定义为
// Provided by VK_EXT_custom_border_color
typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxCustomBorderColorSamplers;
} VkPhysicalDeviceCustomBorderColorPropertiesEXT;
如果 VkPhysicalDeviceCustomBorderColorPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关属性进行填充。
VkPhysicalDeviceProvokingVertexPropertiesEXT 结构定义为
// Provided by VK_EXT_provoking_vertex
typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 provokingVertexModePerPipeline;
VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex;
} VkPhysicalDeviceProvokingVertexPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
provokingVertexModePerPipeline指示实现是否支持在同一渲染过程实例中具有不同触发顶点模式的图形管线。 -
transformFeedbackPreservesTriangleFanProvokingVertex指示在将三角形扇形顶点写入变换反馈时,实现是否可以保留触发顶点顺序。
如果 VkPhysicalDeviceProvokingVertexPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关属性进行填充。
VkPhysicalDeviceDescriptorBufferPropertiesEXT 结构定义为
// Provided by VK_EXT_descriptor_buffer
typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 combinedImageSamplerDescriptorSingleArray;
VkBool32 bufferlessPushDescriptors;
VkBool32 allowSamplerImageViewPostSubmitCreation;
VkDeviceSize descriptorBufferOffsetAlignment;
uint32_t maxDescriptorBufferBindings;
uint32_t maxResourceDescriptorBufferBindings;
uint32_t maxSamplerDescriptorBufferBindings;
uint32_t maxEmbeddedImmutableSamplerBindings;
uint32_t maxEmbeddedImmutableSamplers;
size_t bufferCaptureReplayDescriptorDataSize;
size_t imageCaptureReplayDescriptorDataSize;
size_t imageViewCaptureReplayDescriptorDataSize;
size_t samplerCaptureReplayDescriptorDataSize;
size_t accelerationStructureCaptureReplayDescriptorDataSize;
size_t samplerDescriptorSize;
size_t combinedImageSamplerDescriptorSize;
size_t sampledImageDescriptorSize;
size_t storageImageDescriptorSize;
size_t uniformTexelBufferDescriptorSize;
size_t robustUniformTexelBufferDescriptorSize;
size_t storageTexelBufferDescriptorSize;
size_t robustStorageTexelBufferDescriptorSize;
size_t uniformBufferDescriptorSize;
size_t robustUniformBufferDescriptorSize;
size_t storageBufferDescriptorSize;
size_t robustStorageBufferDescriptorSize;
size_t inputAttachmentDescriptorSize;
size_t accelerationStructureDescriptorSize;
VkDeviceSize maxSamplerDescriptorBufferRange;
VkDeviceSize maxResourceDescriptorBufferRange;
VkDeviceSize samplerDescriptorBufferAddressSpaceSize;
VkDeviceSize resourceDescriptorBufferAddressSpaceSize;
VkDeviceSize descriptorBufferAddressSpaceSize;
} VkPhysicalDeviceDescriptorBufferPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
combinedImageSamplerDescriptorSingleArray指示实现不需要将VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER描述符的数组作为图像描述符的数组写入描述符缓冲区,紧接着是采样器描述符的数组。 -
bufferlessPushDescriptors指示在使用推送描述符时,实现不需要绑定使用VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT创建的缓冲区。 -
allowSamplerImageViewPostSubmitCreation指示实现不限制在相对于命令缓冲区提交时创建用于检索描述符数据的 VkSampler 或 VkImageView 对象的时间。如果此值为VK_FALSE,则应用程序必须在 vkQueueSubmit 或 vkQueueSubmit2 调用提交该命令缓冲区之前,创建在命令缓冲区执行期间访问其描述符数据的任何 VkSampler 或 VkImageView 对象。 -
maxResourceDescriptorBufferBindings指示可以使用具有VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT的描述符缓冲区的最大绑定数量。 -
maxSamplerDescriptorBufferBindings指示可以使用具有VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT的描述符缓冲区的最大绑定数量。 -
maxEmbeddedImmutableSamplers指示使用VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT创建的描述符集布局以及从中创建的管线布局中,可以同时存在于设备上的最大唯一不可变采样器数量。 -
bufferCaptureReplayDescriptorDataSize指示用于捕获和重放缓冲区的不透明数据的最大字节大小。 -
imageCaptureReplayDescriptorDataSize指示用于捕获和重放图像的不透明数据的最大字节大小。 -
imageViewCaptureReplayDescriptorDataSize指示用于捕获和重放图像视图的不透明数据的最大字节大小。 -
samplerCaptureReplayDescriptorDataSize指示用于捕获和重放采样器的不透明数据的最大字节大小。 -
accelerationStructureCaptureReplayDescriptorDataSize指示用于捕获和重放加速结构的不透明数据的最大字节大小。 -
samplerDescriptorSize指示VK_DESCRIPTOR_TYPE_SAMPLER描述符的大小(以字节为单位)。 -
combinedImageSamplerDescriptorSize指示VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER描述符的大小(以字节为单位)。 -
sampledImageDescriptorSize指示VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE描述符的大小(以字节为单位)。 -
storageImageDescriptorSize指示VK_DESCRIPTOR_TYPE_STORAGE_IMAGE描述符的大小(以字节为单位)。 -
uniformTexelBufferDescriptorSize指示如果未启用robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER描述符的大小(以字节为单位)。 -
robustUniformTexelBufferDescriptorSize指示如果启用了robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER描述符的大小(以字节为单位)。 -
storageTexelBufferDescriptorSize指示如果未启用robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER描述符的大小(以字节为单位)。 -
robustStorageTexelBufferDescriptorSize指示如果启用了robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER描述符的大小(以字节为单位)。 -
uniformBufferDescriptorSize指示VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER描述符的大小(以字节为单位)。 -
robustUniformBufferDescriptorSize指示如果启用了robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER描述符的大小(以字节为单位)。 -
storageBufferDescriptorSize指示VK_DESCRIPTOR_TYPE_STORAGE_BUFFER描述符的大小(以字节为单位)。 -
robustStorageBufferDescriptorSize指示如果启用了robustBufferAccess功能,则VK_DESCRIPTOR_TYPE_STORAGE_BUFFER描述符的大小(以字节为单位)。 -
inputAttachmentDescriptorSize指示VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT描述符的大小(以字节为单位)。 -
accelerationStructureDescriptorSize指示VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR或VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV描述符的大小(以字节为单位)。 -
maxSamplerDescriptorBufferRange指示从着色器可访问的采样器描述符缓冲区绑定的地址开始的最大字节范围。 -
maxResourceDescriptorBufferRange指示从着色器可访问的资源描述符缓冲区绑定的地址开始的最大字节范围。 -
samplerDescriptorBufferAddressSpaceSize指示使用VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT创建的描述符缓冲区可用的地址空间的总大小(以字节为单位)。 -
resourceDescriptorBufferAddressSpaceSize指示使用VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT创建的描述符缓冲区可用的地址空间的总大小(以字节为单位)。 -
descriptorBufferAddressSpaceSize指示使用VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT和VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT创建的描述符缓冲区可用的地址空间的总大小(以字节为单位)。
类型为 VK_DESCRIPTOR_TYPE_MUTABLE_VALVE 的描述符绑定具有由 VkMutableDescriptorTypeCreateInfoVALVE::pDescriptorTypes 列表中的描述符类型隐含的描述符大小。描述符大小等于 pDescriptorTypes 列表中包含的任何描述符类型的最大大小。
由于无法分别请求健壮和非健壮描述符,或者在集合布局中指定健壮/非健壮描述符,如果启用了 robustBufferAccess 功能,则始终使用健壮描述符。
如果 VkPhysicalDeviceDescriptorBufferPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT 结构定义为
// Provided by VK_EXT_descriptor_buffer
typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT {
VkStructureType sType;
void* pNext;
size_t combinedImageSamplerDensityMapDescriptorSize;
} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
combinedImageSamplerDensityMapDescriptorSize指示当使用设置了VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT创建描述符时,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER描述符的大小(以字节为单位)。
如果 VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个对应的实现相关的属性填充它。
VkPhysicalDeviceHostImageCopyProperties 结构定义为
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDeviceHostImageCopyProperties {
VkStructureType sType;
void* pNext;
uint32_t copySrcLayoutCount;
VkImageLayout* pCopySrcLayouts;
uint32_t copyDstLayoutCount;
VkImageLayout* pCopyDstLayouts;
uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE];
VkBool32 identicalMemoryTypeRequirements;
} VkPhysicalDeviceHostImageCopyProperties;
或等效的
// Provided by VK_EXT_host_image_copy
typedef VkPhysicalDeviceHostImageCopyProperties VkPhysicalDeviceHostImageCopyPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
copySrcLayoutCount是一个与可用的或查询到的从图像进行主机复制的图像布局数量相关的整数,如下所述。 -
pCopySrcLayouts是一个指向 VkImageLayout 数组的指针,该数组返回支持的从图像进行主机复制操作的图像布局。 -
copyDstLayoutCount是一个整数,与可用于或查询的主机复制到图像的图像布局数量有关,如下所述。 -
pCopyDstLayouts是一个指向 VkImageLayout 数组的指针,该数组返回支持的用于主机复制到图像的图像布局。 -
optimalTilingLayoutUUID是一个由VK_UUID_SIZE个uint8_t值组成的数组,表示使用VK_IMAGE_TILING_OPTIMAL创建的图像的实现抖动布局的全局唯一标识符。 -
identicalMemoryTypeRequirements表示在 VkImageCreateInfo::usage中指定VK_IMAGE_USAGE_HOST_TRANSFER_BIT标志不会影响图像的内存类型要求。
如果 VkPhysicalDeviceHostImageCopyProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个对应的实现相关的属性。
如果 pCopyDstLayouts 为 NULL,则在 VkCopyMemoryToImageInfo::dstImageLayout 和 VkCopyImageToImageInfo::dstImageLayout 中支持的图像布局的数量将返回在 copyDstLayoutCount 中。否则,应用程序必须将 copyDstLayoutCount 设置为 pCopyDstLayouts 数组中的元素数量,并且在返回时,该变量将被实际写入 pCopyDstLayouts 的值数量覆盖。如果 copyDstLayoutCount 的值小于支持的图像布局数量,则最多将有 copyDstLayoutCount 个值写入 pCopyDstLayouts。实现必须在 pCopyDstLayouts 中包含 VK_IMAGE_LAYOUT_GENERAL 图像布局。
如果 pCopySrcLayouts 为 NULL,则在 VkCopyImageToMemoryInfo::srcImageLayout 和 VkCopyImageToImageInfo::srcImageLayout 中支持的图像布局的数量将返回在 copySrcLayoutCount 中。否则,应用程序必须将 copySrcLayoutCount 设置为 pCopySrcLayouts 数组中的元素数量,并且在返回时,该变量将被实际写入 pCopySrcLayouts 的值数量覆盖。如果 copySrcLayoutCount 的值小于支持的图像布局数量,则最多将有 copySrcLayoutCount 个值写入 pCopySrcLayouts。实现必须在 pCopySrcLayouts 中包含 VK_IMAGE_LAYOUT_GENERAL 图像布局。
当在 vkCopyMemoryToImage 和 vkCopyImageToMemory 中使用 VK_HOST_IMAGE_COPY_MEMCPY 标志时,可以使用 optimalTilingLayoutUUID 值来确保兼容的数据布局。
VkPhysicalDeviceSubpassShadingPropertiesHUAWEI 结构的定义如下
// Provided by VK_HUAWEI_subpass_shading
typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI {
VkStructureType sType;
void* pNext;
uint32_t maxSubpassShadingWorkgroupSizeAspectRatio;
} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxSubpassShadingWorkgroupSizeAspectRatio指示子通道着色器工作组大小的宽度和高度部分之间的最大比率。maxSubpassShadingWorkgroupSizeAspectRatio必须是 2 的幂值,并且必须小于或等于 max(WorkgroupSize.x/WorkgroupSize.y,WorkgroupSize.y/WorkgroupSize.x)。
如果 VkPhysicalDeviceSubpassShadingPropertiesHUAWEI 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个对应的实现相关的属性。
VkPhysicalDeviceMultiDrawPropertiesEXT 结构的定义如下
// Provided by VK_EXT_multi_draw
typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxMultiDrawCount;
} VkPhysicalDeviceMultiDrawPropertiesEXT;
VkPhysicalDeviceMultiDrawPropertiesEXT 结构的成员描述了以下特性
如果 VkPhysicalDeviceMultiDrawPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个对应的实现相关的属性。
VkPhysicalDeviceNestedCommandBufferPropertiesEXT 结构的定义如下
// Provided by VK_EXT_nested_command_buffer
typedef struct VkPhysicalDeviceNestedCommandBufferPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxCommandBufferNestingLevel;
} VkPhysicalDeviceNestedCommandBufferPropertiesEXT;
VkPhysicalDeviceNestedCommandBufferPropertiesEXT 结构的成员描述了以下特性
-
maxCommandBufferNestingLevel指示从二级命令缓冲区调用 vkCmdExecuteCommands 的最大嵌套级别。maxCommandBufferNestingLevel为UINT32_MAX表示嵌套级别没有限制。
如果 VkPhysicalDeviceNestedCommandBufferPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则它会填充每个对应的实现相关的属性。
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT 结构定义如下:
// Provided by VK_EXT_graphics_pipeline_library
typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 graphicsPipelineLibraryFastLinking;
VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration;
} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT;
-
graphicsPipelineLibraryFastLinking表示是否支持图形管线快速链接。如果为VK_TRUE,则完全从管线库创建图形管线而不使用VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT的成本,与在命令缓冲区中记录命令相当。 -
graphicsPipelineLibraryIndependentInterpolationDecoration表示在使用图形管线库时,最后一个顶点处理阶段和片段着色器中的NoPerspective和Flat插值装饰是否需要匹配。如果为VK_TRUE,则插值装饰不需要匹配。如果为VK_FALSE,则为了使给定的接口变量匹配,这些装饰必须同时存在于两个阶段或都不存在于任何阶段。
如果 VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关的属性。
VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR 结构定义如下:
// Provided by VK_KHR_fragment_shader_barycentric
typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 triStripVertexOrderIndependentOfProvokingVertex;
} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR;
如果 VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关的属性。
VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT 结构定义如下:
// Provided by VK_EXT_shader_module_identifier
typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT {
VkStructureType sType;
void* pNext;
uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE];
} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT;
VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT 结构的成员描述如下:
-
shaderModuleIdentifierAlgorithmUUID是一个由VK_UUID_SIZE个uint8_t值组成的数组,它唯一地表示了在 vkGetShaderModuleIdentifierEXT 和 vkGetShaderModuleCreateInfoIdentifierEXT 中用于计算标识符的算法。如果用于计算标识符的算法相同,则实现应该不在不同的驱动程序版本中更改此值。
|
如果算法保证产生相同的结果,则不同的 ICD 中的算法 UUID 可以相同。这可能发生在支持具有共享代码的不同类型硬件的驱动程序堆栈中。 Khronos 的一致性测试不能保证 |
如果 VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关的属性。
VkPhysicalDevicePipelineRobustnessProperties 结构定义如下:
// Provided by VK_VERSION_1_4
typedef struct VkPhysicalDevicePipelineRobustnessProperties {
VkStructureType sType;
void* pNext;
VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers;
VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers;
VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs;
VkPipelineRobustnessImageBehavior defaultRobustnessImages;
} VkPhysicalDevicePipelineRobustnessProperties;
或等效的
// Provided by VK_EXT_pipeline_robustness
typedef VkPhysicalDevicePipelineRobustnessProperties VkPhysicalDevicePipelineRobustnessPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
-
defaultRobustnessStorageBuffers描述了在未启用任何健壮性功能时,对存储缓冲区进行越界访问的行为 -
defaultRobustnessUniformBuffers描述了在未启用任何健壮性功能时,对统一缓冲区进行越界访问的行为 -
defaultRobustnessVertexInputs描述了在未启用任何健壮性功能时,对顶点输入属性进行越界访问的行为 -
defaultRobustnessImages描述了在未启用任何健壮性功能时,对图像进行越界访问的行为
Vulkan 的某些实现可能能够保证某些类型的访问始终以健壮性执行,即使没有显式启用 Vulkan API 的健壮性功能。
即使实现报告对给定资源类型的访问默认是健壮的,在不请求相应的健壮性功能的情况下进行越界访问仍然是无效的。
如果 VkPhysicalDevicePipelineRobustnessProperties 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关的属性。
VkPhysicalDeviceExtendedDynamicState3PropertiesEXT 结构定义如下:
// Provided by VK_EXT_extended_dynamic_state3
typedef struct VkPhysicalDeviceExtendedDynamicState3PropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 dynamicPrimitiveTopologyUnrestricted;
} VkPhysicalDeviceExtendedDynamicState3PropertiesEXT;
-
dynamicPrimitiveTopologyUnrestricted表示实现允许vkCmdSetPrimitiveTopology使用与活动图形管线中指定的图元拓扑类不同的图元拓扑类。
如果 VkPhysicalDeviceExtendedDynamicState3PropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个对应的实现相关的属性。
VkPhysicalDeviceOpticalFlowPropertiesNV 结构定义如下:
// Provided by VK_NV_optical_flow
typedef struct VkPhysicalDeviceOpticalFlowPropertiesNV {
VkStructureType sType;
void* pNext;
VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes;
VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes;
VkBool32 hintSupported;
VkBool32 costSupported;
VkBool32 bidirectionalFlowSupported;
VkBool32 globalFlowSupported;
uint32_t minWidth;
uint32_t minHeight;
uint32_t maxWidth;
uint32_t maxHeight;
uint32_t maxNumRegionsOfInterest;
} VkPhysicalDeviceOpticalFlowPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
supportedOutputGridSizes是在VkOpticalFlowSessionCreateInfoNV::outputGridSize中可以指定的受支持的 VkOpticalFlowGridSizeFlagsNV。 -
supportedHintGridSizes是在VkOpticalFlowSessionCreateInfoNV::hintGridSize中可以指定的受支持的 VkOpticalFlowGridSizeFlagsNV。 -
maxNumRegionsOfInterest是光流会话中可以使用的最大感兴趣区域数量。如果此maxNumRegionsOfInterest为 0,则在光流会话中不支持感兴趣区域。
如果 VkPhysicalDeviceOpticalFlowPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceOpacityMicromapPropertiesEXT 结构定义如下:
// Provided by VK_EXT_opacity_micromap
typedef struct VkPhysicalDeviceOpacityMicromapPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxOpacity2StateSubdivisionLevel;
uint32_t maxOpacity4StateSubdivisionLevel;
} VkPhysicalDeviceOpacityMicromapPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
当
format为VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT时,maxOpacity2StateSubdivisionLevel是允许的最大subdivisionLevel。 -
当
format为VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT时,maxOpacity4StateSubdivisionLevel是允许的最大subdivisionLevel。
如果 VkPhysicalDeviceOpacityMicromapPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceDisplacementMicromapPropertiesNV 结构定义如下:
// Provided by VK_NV_displacement_micromap
typedef struct VkPhysicalDeviceDisplacementMicromapPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t maxDisplacementMicromapSubdivisionLevel;
} VkPhysicalDeviceDisplacementMicromapPropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxDisplacementMicromapSubdivisionLevel是位移微型映射允许的最大subdivisionLevel。
如果 VkPhysicalDeviceDisplacementMicromapPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM 结构定义如下:
// Provided by VK_ARM_shader_core_builtins
typedef struct VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM {
VkStructureType sType;
void* pNext;
uint64_t shaderCoreMask;
uint32_t shaderCoreCount;
uint32_t shaderWarpsPerCore;
} VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderCoreMask是一个位域,其中设置的每个位表示存在一个着色器核心,其 ID 是位的位置。设备上任何着色器核心的最高 ID 是设置的最高有效位的位置。
如果 VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV 的 rayTracingInvocationReorderReorderingHint 字段中可能返回的值为:
// Provided by VK_NV_ray_tracing_invocation_reorder
typedef enum VkRayTracingInvocationReorderModeNV {
VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV = 0,
VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV = 1,
} VkRayTracingInvocationReorderModeNV;
-
VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV指定实现可能不会在重排序调用时进行重排序。 -
VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV指定实现可能会在重排序调用时进行重排序。
VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV 结构定义如下:
// Provided by VK_NV_ray_tracing_invocation_reorder
typedef struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV {
VkStructureType sType;
void* pNext;
VkRayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint;
} VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV;
-
rayTracingInvocationReorderReorderingHint是一个提示,指示实现是否会在重排序调用时实际进行重排序。
|
由于该扩展更改了命中管理方式,因此即使实现没有激活排序,也存在公开该扩展的兼容性原因。 |
如果 VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI 结构定义如下:
// Provided by VK_HUAWEI_cluster_culling_shader
typedef struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI {
VkStructureType sType;
void* pNext;
uint32_t maxWorkGroupCount[3];
uint32_t maxWorkGroupSize[3];
uint32_t maxOutputClusterCount;
VkDeviceSize indirectBufferOffsetAlignment;
} VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxWorkGroupCount[3] 是单个命令可以启动的最大本地工作组数。这三个值分别表示 X、Y 和 Z 维度中的最大本地工作组计数。在当前实现中,Y 和 Z 的值都隐式设置为 1。DrawCluster 命令的 groupCountX 必须 小于或等于 maxWorkGroupCount[0]。 -
maxWorkGroupSize[3] 是本地工作组的最大大小。这三个值分别表示 X、Y 和 Z 维度中的最大本地工作组大小。着色器模块中由LocalSize或LocalSizeId执行模式或由 WorkgroupSize 修饰的对象指定的 x、y 和 z 大小,必须 小于或等于相应的限制。在当前实现中,X 维度的最大工作组大小为 32,其他维度为 1。 -
maxOutputClusterCount是单个集群剔除着色器工作组可以发出的最大输出集群数。 -
indirectBufferOffsetAlignment指示集群绘制命令缓冲区步幅的对齐方式。vkCmdDrawClusterIndirectHUAWEI::offset必须 是此值的倍数。
如果 VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceShaderCorePropertiesARM 结构定义如下:
// Provided by VK_ARM_shader_core_properties
typedef struct VkPhysicalDeviceShaderCorePropertiesARM {
VkStructureType sType;
void* pNext;
uint32_t pixelRate;
uint32_t texelRate;
uint32_t fmaRate;
} VkPhysicalDeviceShaderCorePropertiesARM;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
pixelRate是一个无符号整数值,指示每个时钟周期每个着色器核心输出的最大像素数。 -
texelRate是一个无符号整数值,指示每个时钟周期每个着色器核心的最大纹素数。 -
fmaRate是一个无符号整数值,指示每个时钟周期每个着色器核心的最大单精度融合乘加运算次数。
如果无法在物理设备上确定吞吐率,则将为该速率返回值 0。
如果 VkPhysicalDeviceShaderCorePropertiesARM 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会填充每个相应的与实现相关的属性。
VkPhysicalDeviceShaderObjectPropertiesEXT 结构体的定义如下:
// Provided by VK_EXT_shader_object
typedef struct VkPhysicalDeviceShaderObjectPropertiesEXT {
VkStructureType sType;
void* pNext;
uint8_t shaderBinaryUUID[VK_UUID_SIZE];
uint32_t shaderBinaryVersion;
} VkPhysicalDeviceShaderObjectPropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
shaderBinaryUUID是一个由VK_UUID_SIZE个uint8_t值组成的数组,代表一个或多个实现的通用唯一标识符,这些实现的着色器二进制文件保证彼此兼容。 -
shaderBinaryVersion是一个无符号整数,递增表示具有相同shaderBinaryUUID的实现之间的向后兼容性差异。
此结构体值的用途和用法在 二进制着色器兼容性 中有更详细的描述。
如果 VkPhysicalDeviceShaderObjectPropertiesEXT 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceShaderEnqueuePropertiesAMDX 结构体的定义如下:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX {
VkStructureType sType;
void* pNext;
uint32_t maxExecutionGraphDepth;
uint32_t maxExecutionGraphShaderOutputNodes;
uint32_t maxExecutionGraphShaderPayloadSize;
uint32_t maxExecutionGraphShaderPayloadCount;
uint32_t executionGraphDispatchAddressAlignment;
uint32_t maxExecutionGraphWorkgroupCount[3];
uint32_t maxExecutionGraphWorkgroups;
} VkPhysicalDeviceShaderEnqueuePropertiesAMDX;
VkPhysicalDeviceShaderEnqueuePropertiesAMDX 结构体的成员描述了以下限制:
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxExecutionGraphDepth定义了图中的最大节点链深度。被调度的节点深度为 1,由其入队的节点深度为 2,依此类推。如果节点自身入队,则每次递归入队也会将深度增加 1。 -
maxExecutionGraphShaderOutputNodes指定了单个着色器可以调度的唯一节点的最大数量,并且必须至少为 256。 -
maxExecutionGraphShaderPayloadSize指定了着色器中有效负载声明的最大总大小。对于任何共享资源的有效负载声明(通过NodeSharesPayloadLimitsWithAMDX修饰符指示),将采用每组共享有效负载声明的最大大小。每个共享组的最大大小和每个未共享有效负载的大小之和将计入此限制。 -
maxExecutionGraphShaderPayloadCount指定了在单个工作组中可以初始化的最大输出有效负载数量。 -
executionGraphDispatchAddressAlignment指定了图调度命令消耗的非临时VkDeviceAddress参数的对齐方式。 -
maxExecutionGraphWorkgroupCount[3] 分别是在 X、Y 和 Z 维度中,着色器可以调度的最大本地工作组数量。
如果 VkPhysicalDeviceShaderEnqueuePropertiesAMDX 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV 结构体的定义如下:
// Provided by VK_NV_extended_sparse_address_space
typedef struct VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV {
VkStructureType sType;
void* pNext;
VkDeviceSize extendedSparseAddressSpaceSize;
VkImageUsageFlags extendedSparseImageUsageFlags;
VkBufferUsageFlags extendedSparseBufferUsageFlags;
} VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
extendedSparseAddressSpaceSize是在启用extendedSparseAddressSpace功能时,所有用途的稀疏内存资源可用的地址空间总大小(以字节为单位)。这必须大于或等于VkPhysicalDeviceLimits::sparseAddressSpaceSize,并且空间差异必须仅用于下面允许的用途。这是所有稀疏资源大小之和的上限,无论是否将任何内存绑定到它们。 -
extendedSparseImageUsageFlags是 VkImageUsageFlagBits 的位掩码,这些用途可能允许实现使用完整的extendedSparseAddressSpaceSize空间。 -
extendedSparseBufferUsageFlags是 VkBufferUsageFlagBits 的位掩码,这些用途可能允许实现使用完整的extendedSparseAddressSpaceSize空间。
如果 VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceCudaKernelLaunchPropertiesNV 结构体的定义如下:
// Provided by VK_NV_cuda_kernel_launch
typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV {
VkStructureType sType;
void* pNext;
uint32_t computeCapabilityMinor;
uint32_t computeCapabilityMajor;
} VkPhysicalDeviceCudaKernelLaunchPropertiesNV;
VkPhysicalDeviceCudaKernelLaunchPropertiesNV 结构体的成员描述了以下功能:
如果 VkPhysicalDeviceCudaKernelLaunchPropertiesNV 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDeviceExternalFormatResolvePropertiesANDROID 结构体的定义如下:
// Provided by VK_ANDROID_external_format_resolve
typedef struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID {
VkStructureType sType;
void* pNext;
VkBool32 nullColorAttachmentWithExternalFormatResolve;
VkChromaLocation externalFormatResolveChromaOffsetX;
VkChromaLocation externalFormatResolveChromaOffsetY;
} VkPhysicalDeviceExternalFormatResolvePropertiesANDROID;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
如果为
VK_TRUE,则nullColorAttachmentWithExternalFormatResolve表示在执行外部格式解析时必须没有颜色附件图像。 -
externalFormatResolveChromaOffsetX表示实现用于访问作为解析附件的外部格式图像的 X 轴的 VkChromaLocation。当nullColorAttachmentWithExternalFormatResolve为VK_TRUE时,这必须在外部格式解析和从外部格式解析附件到颜色附件的加载操作之间保持一致。 -
externalFormatResolveChromaOffsetY表示实现用于访问作为解析附件的外部格式图像的 Y 轴的 VkChromaLocation。当nullColorAttachmentWithExternalFormatResolve为VK_TRUE时,这必须在外部格式解析和从外部格式解析附件到颜色附件的加载操作之间保持一致。
如果 VkPhysicalDeviceExternalFormatResolvePropertiesANDROID 结构体包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构体的 pNext 链中,则会填充每个相应的实现相关的属性。
VkPhysicalDevicePipelineBinaryPropertiesKHR 结构定义如下:
// Provided by VK_KHR_pipeline_binary
typedef struct VkPhysicalDevicePipelineBinaryPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 pipelineBinaryInternalCache;
VkBool32 pipelineBinaryInternalCacheControl;
VkBool32 pipelineBinaryPrefersInternalCache;
VkBool32 pipelineBinaryPrecompiledInternalCache;
VkBool32 pipelineBinaryCompressedData;
} VkPhysicalDevicePipelineBinaryPropertiesKHR;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
pipelineBinaryInternalCache指定实现是否维护内部的管线缓存。如果此值为VK_TRUE,应用程序可以仅使用管线创建信息创建管线二进制文件,在这种情况下,实现可能能够直接创建管线二进制文件,而无需应用程序捕获二进制文件本身。 -
pipelineBinaryInternalCacheControl指定是否可以禁用驱动程序的内部缓存。如果此属性为VK_TRUE,则可以使用 VkDevicePipelineBinaryInternalCacheControlKHR::disableInternalCache禁用驱动程序的内部缓存,从而允许应用程序完全控制内存和磁盘使用情况。 -
pipelineBinaryPrefersInternalCache指定实现倾向于维护内部缓存,并且应用程序应该不要将管线二进制文件存储在自己的磁盘缓存中,以避免增加磁盘存储需求。鼓励应用程序仅存储管线密钥,并在后续运行应用程序时尝试仅从密钥创建管线二进制文件。 -
pipelineBinaryPrecompiledInternalCache指定实现可能在其内部缓存中具有管线二进制文件,这些文件是在没有应用程序生成该管线本身的情况下填充的。应用程序可以尝试创建二进制文件,而无需事先从管线中提取管线二进制数据,包括来自应用程序先前运行的数据。
|
这些属性往往是平台特定的,并且可能会根据本规范范围之外的外部配置而变化。这些属性旨在指导应用程序,当实现具有可用的专用缓存解决方案时。特别是,如果公开了 |
如果 VkPhysicalDevicePipelineBinaryPropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关属性填充该结构。
VkPhysicalDeviceRenderPassStripedPropertiesARM 结构定义如下:
// Provided by VK_ARM_render_pass_striped
typedef struct VkPhysicalDeviceRenderPassStripedPropertiesARM {
VkStructureType sType;
void* pNext;
VkExtent2D renderPassStripeGranularity;
uint32_t maxRenderPassStripes;
} VkPhysicalDeviceRenderPassStripedPropertiesARM;
VkPhysicalDeviceRenderPassStripedPropertiesARM 结构的成员描述以下限制:
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。
如果 VkPhysicalDeviceRenderPassStripedPropertiesARM 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关属性填充该结构。
VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR 结构定义如下:
// Provided by VK_KHR_compute_shader_derivatives
typedef struct VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 meshAndTaskShaderDerivatives;
} VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR;
VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR 结构的成员描述以下内容:
如果 VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关属性填充该结构。
VkPhysicalDeviceMapMemoryPlacedPropertiesEXT 结构定义如下:
// Provided by VK_EXT_map_memory_placed
typedef struct VkPhysicalDeviceMapMemoryPlacedPropertiesEXT {
VkStructureType sType;
void* pNext;
VkDeviceSize minPlacedMemoryMapAlignment;
} VkPhysicalDeviceMapMemoryPlacedPropertiesEXT;
VkPhysicalDeviceMapMemoryPlacedPropertiesEXT 结构的成员描述以下内容:
如果 VkPhysicalDeviceMapMemoryPlacedPropertiesEXT 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关属性填充该结构。
VkPhysicalDeviceImageAlignmentControlPropertiesMESA 结构定义如下:
// Provided by VK_MESA_image_alignment_control
typedef struct VkPhysicalDeviceImageAlignmentControlPropertiesMESA {
VkStructureType sType;
void* pNext;
uint32_t supportedImageAlignmentMask;
} VkPhysicalDeviceImageAlignmentControlPropertiesMESA;
VkPhysicalDeviceImageAlignmentControlPropertiesMESA 结构的成员描述以下内容:
-
supportedImageAlignmentMask是使用VK_IMAGE_TILING_OPTIMAL时,给定物理设备所有潜在支持的图像对齐方式的按位或。如果支持给定的对齐方式,则应用程序可以请求图像具有该对齐方式。给定的一组图像创建参数可能支持这些对齐方式的子集。要确定给定的一组图像创建参数是否支持特定的对齐方式,请在链接 VkImageAlignmentControlCreateInfoMESA 后检查 VkMemoryRequirements::alignment。
如果 VkPhysicalDeviceImageAlignmentControlPropertiesMESA 结构包含在传递给 vkGetPhysicalDeviceProperties2 的 VkPhysicalDeviceProperties2 结构的 pNext 链中,则会使用每个相应的实现相关属性填充该结构。
限制要求
下表指定了所有 Vulkan 图形实现必须满足的最小/最大值。当限制对应于一个可选的细粒度设备特性时,该特性名称会列出两个必须满足的限制,一个是在支持该特性时,另一个是在不支持该特性时。如果实现支持某个特性,则报告的限制值是相同的,无论该特性是否启用。
| 类型 | 限制 | 特性 |
|---|---|---|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
|
|
|
- |
|
|
- |
3 × |
|
- |
|
|
- |
3 × |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
2 × |
|
- |
2 × |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
- |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
- |
2 × |
|
|
2 × |
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vulkan 1.4, VK_KHR_vertex_attribute_divisor, VK_EXT_vertex_attribute_divisor |
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesNV:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
3 × |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vulkan 1.4, VK_KHR_line_rasterization, VK_EXT_line_rasterization |
|
|
|
|
|
|
|
|
|
2 × |
|
|
2 × |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 × |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
2 × |
|
|
2 × |
|
|
2 × |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 × |
|
|
3 × |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 × |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 限制 | 不支持的限制 | 支持的限制 | 限制类型1 |
|---|---|---|---|
|
- |
4096 |
最小 |
|
- |
4096 |
最小 |
|
- |
256 |
最小 |
|
- |
4096 |
最小 |
|
- |
256 |
最小 |
|
- |
65536 |
最小 |
|
- |
16384 |
最小 |
|
- |
227 |
最小 |
|
- |
128 |
最小 |
|
- |
4096 |
最小 |
|
- |
4000 |
最小 |
|
- |
131072 |
最大 |
|
0 |
231 |
最小 |
|
- |
4 |
最小 |
|
- |
16 |
最小 |
|
- |
12 |
最小 |
|
- |
4 |
最小 |
|
- |
16 |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
- |
128 2 |
最小 |
|
- |
96 8 |
最小值, n × PerStage |
|
- |
72 8 |
最小值, n × PerStage |
|
- |
8 |
最小 |
|
- |
24 8 |
最小值, n × PerStage |
|
- |
4 |
最小 |
|
- |
|
最小 |
|
- |
|
最小 |
|
- |
|
最小 |
|
- |
96 8 |
最小值, n × PerStage |
|
- |
24 8 |
最小值, n × PerStage |
|
- |
4 |
最小 |
|
- |
16 |
最小 |
|
- |
16 10 |
最小 |
|
- |
2047 |
最小 |
|
- |
2048 |
最小 |
|
- |
64 |
最小 |
|
0 |
64 |
最小 |
|
0 |
32 |
最小 |
|
0 |
64 |
最小 |
|
0 |
64 |
最小 |
|
0 |
120 |
最小 |
|
0 |
2048 |
最小 |
|
0 |
64 |
最小 |
|
0 |
64 |
最小 |
|
0 |
32 |
最小 |
|
0 |
64 |
最小 |
|
0 |
64 |
最小 |
|
0 |
256 |
最小 |
|
0 |
1024 |
最小 |
|
- |
64 |
最小 |
|
- |
4 |
最小 |
|
0 |
1 |
最小 |
|
- |
4 |
最小 |
|
- |
16384 |
最小 |
|
- |
(65535,65535,65535) |
最小 |
|
- |
128 |
最小 |
|
- |
(128,128,64) |
最小 |
|
- |
4 (2022 年路线图) |
最小 |
|
- |
|
位域 |
|
- |
|
位域 |
|
- |
|
布尔值 |
|
- |
|
布尔值 |
|
- |
|
布尔值 |
|
- |
|
布尔值 |
|
- |
4 (2022 年路线图) |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
224-1 |
232-1 |
最小 |
|
1 |
216-1 |
最小 |
|
- |
2 |
最小 |
|
1 |
16 |
最小 |
|
1 |
16 |
最小 |
|
- |
(4096,4096) 3 |
最小 |
|
- |
(-8192,8191) 4 |
(最大值,最小值) |
|
- |
0 |
最小 |
|
- |
64 |
最小 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
-8 |
最大 |
|
- |
7 |
最小 |
|
0 |
-8 |
最大 |
|
0 |
7 |
最小 |
|
0.0 |
-0.5 5 |
最大 |
|
0.0 |
0.5 - (1 ULP) 5 |
最小 |
|
0 |
4 5 |
最小 |
|
- |
4096 |
最小 |
|
- |
4096 |
最小 |
|
- |
256 |
最小 |
|
- |
( |
最小 |
|
- |
( |
最小 |
|
- |
( |
最小 |
|
- |
( |
最小 |
|
- |
( |
最小 |
|
- |
4 |
最小 |
|
- |
( |
最小 |
|
- |
|
最小 |
|
- |
( |
最小 |
|
- |
( |
最小 |
|
|
( |
最小 |
|
- |
1 |
最小 |
|
- |
- |
布尔值 |
|
- |
- |
持续时间 |
|
0 |
8 |
最小 |
|
0 |
8 |
最小 |
|
0 |
8 |
最小 |
|
- |
2 |
最小 |
|
(1.0,1.0) |
(1.0, 64.0 - ULP) 6 |
(最大值,最小值) |
|
(1.0,1.0) |
(1.0, 8.0 - ULP) 7 |
(最大值,最小值) |
|
0.0 |
1.0 6 |
最大值,定点增量 |
|
0.0 |
1.0 7 |
最大值,定点增量 |
|
- |
- |
依赖于实现 |
|
- |
- |
布尔值 |
|
- |
- |
建议 |
|
- |
- |
建议 |
|
- |
256 |
最大 |
|
- |
32 |
最小 |
|
- |
6 |
最小 |
|
- |
227-1 |
最小 |
|
0 |
4 |
最小 |
|
- |
|
最小 |
|
- |
(1,1) |
最小 |
|
- |
(0.0, 0.9375) |
(最大值,最小值) |
|
- |
4 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
65536 |
最大 |
|
- |
- |
依赖于实现 |
|
- |
- |
依赖于实现 |
|
- |
- |
依赖于实现 |
|
- |
1 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
1024 |
最小 |
|
- |
230 |
最小 |
|
- |
230 |
最小 |
|
- |
0.0 |
最小 |
|
- |
0.0 |
最小 |
|
- |
0.0 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
0 |
500000 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
12 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
4 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
72 8 9 |
最小值, n × PerStage |
|
0 9 |
8 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
4 9 |
最小 |
|
0 9 |
|
最小 |
|
0 9 |
|
最小 |
|
0 9 |
|
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
500000 9 |
最小 |
|
0 9 |
4 9 |
最小 |
|
- |
256 |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
- |
4 |
最小 |
|
- |
256 |
最小 |
|
- |
216-1 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
216-1 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
32 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
(32,1,1) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
16384 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
216-1 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
32 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
(32,1,1) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
16384 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
256 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
256 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
1 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesNV:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
2^22 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
(65535,65535,65535) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
128 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
(128,128,128) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
16384 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
32768 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
32768 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
2^22 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
(65535,65535,65535) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
128 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
(128,128,128) |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
28672 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
28672 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
32768 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
48128 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
128 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
256 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
256 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
8 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
1 |
最小 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
0 |
32 |
最大 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
0 |
32 |
最大 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
VkPhysicalDeviceMeshShaderPropertiesEXT:: |
- |
- |
依赖于实现 |
|
- |
1 |
最小 |
|
- |
1 |
最小 |
|
- |
227 |
最小 |
|
- |
512 |
最小 |
|
- |
512 |
最小 |
|
- |
512 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
(1,1) |
最小 |
|
- |
(1,1) |
最小 |
|
- |
- |
依赖于实现 |
|
|
|
依赖于实现 |
|
|
|
依赖于实现 |
|
2 |
2 |
最小 |
|
1 |
1 |
最小 |
|
- |
(1024,1024) |
最大 |
VkPhysicalDeviceRayTracingPropertiesNV:: |
- |
16 |
最小 |
VkPhysicalDeviceRayTracingPropertiesNV:: |
- |
31 |
最小 |
VkPhysicalDeviceRayTracingPipelinePropertiesKHR:: |
- |
32 |
精确 |
VkPhysicalDeviceRayTracingPipelinePropertiesKHR:: |
- |
1 |
最小 |
|
- |
4096 |
最小 |
|
- |
64 |
最大 |
|
- |
224-1 |
最小 |
|
- |
224-1 |
最小 |
|
- |
229-1 |
最小 |
|
- |
229-1 |
最小 |
|
- |
16 |
最小 |
|
- |
500000 9 |
最小 |
|
- |
16 |
最小 |
|
- |
500000 9 |
最小 |
|
- |
256 |
最大 |
|
- |
64 |
最大 |
|
- |
230 |
最小 |
|
- |
32 |
最大 |
|
- |
32 |
最小 |
|
- |
231-1 |
最小 |
|
- |
4 |
最小 |
|
- |
212 |
最小 |
|
- |
212 |
最小 |
|
- |
2048 |
最小 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
220 |
最小 |
|
- |
16 |
最小 |
|
- |
2047 |
最小 |
|
- |
212 |
最小 |
|
- |
false |
依赖于实现 |
|
- |
false |
依赖于实现 |
|
0 |
212 |
依赖于实现 |
|
- |
2048 |
最小 |
|
- |
|
最小 |
|
- |
( |
最小 |
|
- |
0 |
最小 |
|
- |
0 |
最小 |
|
- |
32 |
最小 |
|
- |
4 |
最大 |
|
- |
256 |
最大 |
|
(0,0) |
(32,32) |
最大 |
|
(0,0) |
(8,8) |
最小 |
|
0 |
1 |
最小 |
|
|
|
依赖于实现 |
|
|
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
(2,2) |
最小 |
|
- |
2 |
最小 |
|
- |
16 |
最小 |
|
- |
|
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
256 |
最大 |
|
- |
3 |
最小 |
|
- |
1 |
最小 |
|
- |
1 |
最小 |
|
- |
1 |
最小 |
|
- |
2032 |
最小 |
|
- |
64 |
最大 |
|
- |
64 |
最大 |
|
- |
64 |
最大 |
|
- |
64 |
最大 |
|
- |
64 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
256 |
最大 |
|
- |
211 × |
最小 |
|
- |
(220 - 215) × |
最小 |
|
- |
227 |
最小 |
|
- |
227 |
最小 |
|
- |
227 |
最小 |
|
- |
256 |
最大 |
|
0 |
1 |
最小 |
|
- |
1024 |
最小 |
|
- |
1 |
最小 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
|
依赖于实现 |
|
- |
1024 |
最小 |
|
- |
(64,64) |
最小 |
|
- |
(64,64) |
最小 |
|
- |
(64,64) |
最小 |
|
- |
- |
依赖于实现 |
|
- |
3 |
最小 |
|
- |
3 |
最小 |
|
1 |
216-1 |
最小 |
|
- |
(65536,1,1) |
最小 |
|
- |
(32,1,1) |
最小 |
|
- |
1024 |
最小 |
|
- |
- |
依赖于实现 |
|
- |
32 |
最小 |
|
- |
256 |
最小 |
|
- |
32768 |
最小 |
|
- |
256 |
最小 |
|
- |
4 |
最大 |
|
- |
1024 |
最小 |
|
- |
(65535,65535,65535) |
最小 |
|
- |
224-1 |
最小 |
|
0 |
|
最小 |
|
- |
(64,64) |
最大 |
|
- |
32 |
最小 |
|
- |
65536 |
最大 |
|
- |
1 |
最小 |
|
|
- |
依赖于实现 |
|
- |
子组大小 × 2 |
最小 |
|
- |
256 |
最小 |
|
- |
|
最大 |
- 1
-
限制类型 列指定限制是所有实现必须支持的最小限制,所有实现必须支持的最大限制,还是所有实现必须支持的精确值。对于位掩码,最小限制是所有实现必须设置的最小位数,但它们可能会设置超出此最小值的额外位。
- 2
-
maxPerStageResources必须至少是以下各项中的最小值-
maxPerStageDescriptorUniformBuffers、maxPerStageDescriptorStorageBuffers、maxPerStageDescriptorSampledImages、maxPerStageDescriptorStorageImages、maxPerStageDescriptorInputAttachments、maxColorAttachments限制的总和,或者 -
128.
在每个阶段中,可能无法达到此限制。
-
- 3
-
请参阅
maxViewportDimensions,了解与其他限制的必要关系。 - 4
-
请参阅
viewportBoundsRange,了解与其他限制的必要关系。 - 5
-
值
minInterpolationOffset和maxInterpolationOffset描述了支持的插值偏移量的闭区间:[minInterpolationOffset,maxInterpolationOffset]。ULP 由subPixelInterpolationOffsetBits确定。如果subPixelInterpolationOffsetBits为 4,则提供 (1/24) = 0.0625 的增量,因此支持的插值偏移量范围为 [-0.5, 0.4375]。 - 6
-
点大小 ULP 由
pointSizeGranularity确定。如果pointSizeGranularity为 0.125,则支持的点大小范围必须至少为 [1.0, 63.875]。 - 7
-
线宽 ULP 由
lineWidthGranularity确定。如果lineWidthGranularity为 0.0625,则支持的线宽范围必须至少为 [1.0, 7.9375]。 - 8
-
最小的
maxDescriptorSet*限制是相应规范最小的maxPerStageDescriptor*限制的 n 倍,其中 n 是 VkPhysicalDevice 支持的着色器阶段数。如果支持所有着色器阶段,则 n = 6 (顶点、细分控制、细分评估、几何、片段、计算)。 - 9
-
UpdateAfterBind描述符限制必须各自大于或等于对应的non-UpdateAfterBind 限制。 - 10
-
如果启用了
VK_KHR_portability_subset扩展,则maxVertexInputBindings的所需最小值是8。 - 12
-
maxResourceDescriptorSize定义为storageImageDescriptorSize、sampledImageDescriptorSize、robustUniformTexelBufferDescriptorSize、robustStorageTexelBufferDescriptorSize、robustUniformBufferDescriptorSize、robustStorageBufferDescriptorSize、inputAttachmentDescriptorSize和accelerationStructureDescriptorSize的最大值。
其他多重采样功能
要查询特定采样计数可能支持的其他多重采样功能(超出上面 限制 中描述的最小功能),请调用
// Provided by VK_EXT_sample_locations
void vkGetPhysicalDeviceMultisamplePropertiesEXT(
VkPhysicalDevice physicalDevice,
VkSampleCountFlagBits samples,
VkMultisamplePropertiesEXT* pMultisampleProperties);
-
physicalDevice是从中查询其他多重采样功能的物理设备。 -
samples是一个 VkSampleCountFlagBits 值,指定要查询功能的采样计数。 -
pMultisampleProperties是一个指向 VkMultisamplePropertiesEXT 结构的指针,该结构返回有关特定于采样计数的其他多重采样功能的信息。
VkMultisamplePropertiesEXT 结构定义如下
// Provided by VK_EXT_sample_locations
typedef struct VkMultisamplePropertiesEXT {
VkStructureType sType;
void* pNext;
VkExtent2D maxSampleLocationGridSize;
} VkMultisamplePropertiesEXT;
-
sType是一个 VkStructureType 值,用于标识此结构。 -
pNext是NULL或指向扩展此结构的结构的指针。 -
maxSampleLocationGridSize是像素网格的最大大小,其中样本位置可以变化。
如果使用 vkGetPhysicalDeviceMultisamplePropertiesEXT 请求附加多重采样功能的采样计数在 sampleLocationSampleCounts 中设置,则 VkMultisamplePropertiesEXT::maxSampleLocationGridSize 的 width 和 height 成员必须大于或等于 maxSampleLocationGridSize 的相应成员,否则两个成员必须为 0。
配置文件限制
路线图 2022
声明支持 路线图 2022 配置文件的实现必须满足以下附加限制要求
| 限制 | 支持的限制 | 限制类型1 |
|---|---|---|
|
8192 |
最小 |
|
8192 |
最小 |
|
8192 |
最小 |
|
2048 |
最小 |
|
65536 |
最小 |
|
4096 |
最大 |
|
64 |
最小 |
|
15 |
最小 |
|
30 |
最小 |
|
200 |
最小 |
|
16 |
最小 |
|
200 |
最小 |
|
576 |
最小 |
|
90 |
最小 |
|
96 |
最小 |
|
1800 |
最小 |
|
144 |
最小 |
|
16 |
最小 |
|
256 |
最小 |
|
(256,256,64) |
最小 |
|
8 |
最小 |
|
6 |
最小 |
|
14 |
最小 |
|
0.125 |
最大 |
|
0.5 |
最大 |
|
|
布尔值 |
|
7 |
最小 |
|
4 |
最小 |
|
|
位域 |
|
|
位域 |
|
|
布尔值 |
|
|
布尔值 |
|
4 |
最小 |
|
7 |
最小 |
路线图 2024
声明支持 路线图 2024 配置文件的实现必须满足以下附加限制要求
| 限制 | 支持的限制 | 限制类型1 |
|---|---|---|
|
|
布尔值 |
|
|
布尔值 |
|
|
布尔值 |
|
8 |
最小 |
|
7 |
最小 |