Source: FeatureSet.h
This is some kind of Vulkan Profiles and Metal Feature Set Tables.
Use FeatureSetGen application to generate feature sets from Vulkan device info JSON and from Metal feature set table.
Predefined FeatureSet's located in the feature_set folder, use them to get GPU limits and features in resource compilation stage.
Use FeatureSet const& GraphicsScheduler().GetFeatureSet()
to get cross-platform limits and features of the current GPU in runtime.
- alphaToOne
Same asVkPhysicalDeviceFeatures::alphaToOne
. - depthBiasClamp
Same asVkPhysicalDeviceFeatures::depthBiasClamp
. - depthBounds
Same asVkPhysicalDeviceFeatures::depthBounds
. - depthClamp
Same asVkPhysicalDeviceFeatures::depthClamp
. - dualSrcBlend
Same asVkPhysicalDeviceFeatures::dualSrcBlend
. - fillModeNonSolid
Same asVkPhysicalDeviceFeatures::fillModeNonSolid
. - independentBlend
Same asVkPhysicalDeviceFeatures::independentBlend
. - logicOp
Same asVkPhysicalDeviceFeatures::logicOp
. - sampleRateShading
Same asVkPhysicalDeviceFeatures::sampleRateShading
. - constantAlphaColorBlendFactors
Same asVkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors
. - pointPolygons
Same asVkPhysicalDevicePortabilitySubsetFeaturesKHR::pointPolygons
. - triangleFans
Same asVkPhysicalDevicePortabilitySubsetFeaturesKHR::triangleFans
.
- subgroupOperations
- subgroupTypes
- subgroupStages
- subgroupQuadStages
- requiredSubgroupSizeStages
- subgroup
- subgroupBroadcastDynamicId
- subgroupSizeControl
Same as
VkPhysicalDeviceSubgroupSizeControlFeatures::subgroupSizeControl
.
Metal: require SIMD feature. - shaderSubgroupUniformControlFlow
Same asVkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR::shaderSubgroupUniformControlFlow
.
Metal: TODO - minSubgroupSize
Maximal value ofVkPhysicalDeviceSubgroupSizeControlProperties::minSubgroupSize
.
Metal: 4. - maxSubgroupSize
Minimal value ofVkPhysicalDeviceSubgroupSizeControlProperties::maxSubgroupSize
.
Metal: 32 or 64.
- shaderInt8
Same asVkPhysicalDeviceShaderFloat16Int8FeaturesKHR::shaderInt8
.
Metal: always supported. - shaderInt16
Same asVkPhysicalDeviceFeatures::shaderInt16
.
Metal: always supported. - shaderInt64
Same asVkPhysicalDeviceFeatures::shaderInt64
.
Metal: v2.3+. - shaderFloat16
Same asVkPhysicalDeviceShaderFloat16Int8FeaturesKHR::shaderFloat16
.
Metal: always supported. - shaderFloat64
Same asVkPhysicalDeviceFeatures::shaderFloat64
.
Metal: not supported.
- storageBuffer16BitAccess
- uniformAndStorageBuffer16BitAccess
- storageInputOutput16
- storageBuffer8BitAccess
- uniformAndStorageBuffer8BitAccess
- uniformBufferStandardLayout
- scalarBlockLayout
- bufferDeviceAddress
- storagePushConstant8
- storagePushConstant16
- fragmentStoresAndAtomics
- vertexPipelineStoresAndAtomics
- shaderImageInt64Atomics
- GL_EXT_shader_atomic_int64:
- shaderBufferInt64Atomics
- shaderSharedInt64Atomics
- GL_EXT_shader_atomic_float:
- shaderBufferFloat32Atomics
- shaderBufferFloat32AtomicAdd
- shaderBufferFloat64Atomics
- shaderBufferFloat64AtomicAdd
- shaderSharedFloat32Atomics
- shaderSharedFloat32AtomicAdd
- shaderSharedFloat64Atomics
- shaderSharedFloat64AtomicAdd
- shaderImageFloat32Atomics
- shaderImageFloat32AtomicAdd
- GL_EXT_shader_atomic_float2:
- shaderBufferFloat16Atomics
- shaderBufferFloat16AtomicAdd
- shaderBufferFloat16AtomicMinMax
- shaderBufferFloat32AtomicMinMax
- shaderBufferFloat64AtomicMinMax
- shaderSharedFloat16Atomics
- shaderSharedFloat16AtomicAdd
- shaderSharedFloat16AtomicMinMax
- shaderSharedFloat32AtomicMinMax
- shaderSharedFloat64AtomicMinMax
- shaderImageFloat32AtomicMinMax
- sparseImageFloat32AtomicMinMax
- shaderOutputViewportIndex
- shaderOutputLayer
- shaderSubgroupClock
- shaderDeviceClock
- shaderClipDistance
- shaderCullDistance
- shaderResourceMinLod
- shaderDrawParameters
- runtimeDescriptorArray
- shaderSMBuiltinsNV
- shaderCoreBuiltinsARM
- shaderSampleRateInterpolationFunctions
- shaderStencilExport
- shaderDemoteToHelperInvocation
- shaderTerminateInvocation
- shaderZeroInitializeWorkgroupMemory
- shaderIntegerDotProduct
- maxShaderVersion
- shaderSampledImageArrayDynamicIndexing
- shaderStorageBufferArrayDynamicIndexing
- shaderStorageImageArrayDynamicIndexing
- shaderUniformBufferArrayDynamicIndexing
- shaderInputAttachmentArrayDynamicIndexing
- shaderUniformTexelBufferArrayDynamicIndexing
- shaderStorageTexelBufferArrayDynamicIndexing
- shaderUniformBufferArrayNonUniformIndexing
- shaderSampledImageArrayNonUniformIndexing
- shaderStorageBufferArrayNonUniformIndexing
- shaderStorageImageArrayNonUniformIndexing
- shaderInputAttachmentArrayNonUniformIndexing
- shaderUniformTexelBufferArrayNonUniformIndexing
- shaderStorageTexelBufferArrayNonUniformIndexing
- shaderStorageImageMultisample
- shaderStorageImageReadWithoutFormat
- shaderStorageImageWriteWithoutFormat
- vulkanMemoryModel
- vulkanMemoryModelDeviceScope
- vulkanMemoryModelAvailabilityVisibilityChains
- fragmentShaderSampleInterlock
- fragmentShaderPixelInterlock
- fragmentShaderShadingRateInterlock
- pipelineFragmentShadingRate
- primitiveFragmentShadingRate
- attachmentFragmentShadingRate
- primitiveFragmentShadingRateWithMultipleViewports
- layeredShadingRateAttachments
- fragmentShadingRateWithShaderDepthStencilWrites
- fragmentShadingRateWithSampleMask
- fragmentShadingRateWithShaderSampleMask
- fragmentShadingRateWithFragmentShaderInterlock
- fragmentShadingRateWithCustomSampleLocations
- fragmentShadingRateTexelSize
- fragmentShadingRates
- rayQuery
Same asVkPhysicalDeviceRayQueryFeaturesKHR::rayQuery
. - rayQueryStages
Vulkan: all supported stages.
Metal: separate features for compute and graphics stages.
- rayTracingPipeline
Same asVkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipeline
.
Metal: not supported (can be emulated). - rayTraversalPrimitiveCulling
Same asVkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTraversalPrimitiveCulling
.
Metal: not supported. - maxRayRecursionDepth
Minimal value ofVkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayRecursionDepth
.
Metal: not supported.
- multiview
- multiviewGeometryShader
- multiviewTessellationShader
- maxMultiviewViewCount
- multiViewport
- maxViewports
- sampleLocations
- variableSampleLocations
- tessellationShader
Same asVkPhysicalDeviceFeatures::tessellationShader
. - tessellationIsolines
Same asVkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationIsolines
. - tessellationPointMode
Same asVkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationPointMode
.
- maxTexelBufferElements
- maxUniformBufferSize
- maxStorageBufferSize
- perDescrSet
- perStage
- maxDescriptorSets
- maxTexelOffset
- maxTexelGatherOffset
- maxFragmentOutputAttachments
- maxFragmentDualSrcAttachments
- maxFragmentCombinedOutputResources
- maxPushConstantsSize
- maxTotalThreadgroupSize
- maxTotalTileMemory
- maxVertAmplification
- computeShader
Vulkan: always supported.
Metal: always supported. - maxComputeSharedMemorySize
Minimal value ofVkPhysicalDeviceLimits::maxComputeSharedMemorySize
.
Metal: constant. - maxComputeWorkGroupInvocations
Minimal value ofVkPhysicalDeviceLimits::maxComputeWorkGroupInvocations
.
Metal: constant. - minComputeWorkGroupSize [X,Y,Z]
Minimal value ofVkPhysicalDeviceLimits::maxComputeWorkGroupCount
.
Metal:[MTLDevice maxThreadsPerThreadgroup]
.
- taskShader
Same asVkPhysicalDeviceMeshShaderFeaturesEXT::taskShader
. - meshShader
Same asVkPhysicalDeviceMeshShaderFeaturesEXT::meshShader
. - maxTaskWorkGroupSize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupInvocations
andmaxTaskWorkGroupSize
. In current implementations this values are same and equal to 32. - maxMeshWorkGroupSize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupInvocations
andmaxMeshWorkGroupSize
. In current implementations this values are same and equal to 32. - maxMeshOutputVertices
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputVertices
. - maxMeshOutputPrimitives
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputPrimitives
. - maxMeshOutputPerVertexGranularity
Maximal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::meshOutputPerVertexGranularity
. - maxMeshOutputPerPrimitiveGranularity
Maximal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::meshOutputPerPrimitiveGranularity
. - maxTaskPayloadSize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskPayloadSize
. - maxTaskSharedMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskSharedMemorySize
. - maxTaskPayloadAndSharedMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskPayloadAndSharedMemorySize
. - maxMeshSharedMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshSharedMemorySize
. - maxMeshPayloadAndSharedMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshPayloadAndSharedMemorySize
. - maxMeshOutputMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputMemorySize
. - maxMeshPayloadAndOutputMemorySize
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshPayloadAndOutputMemorySize
. - maxMeshMultiviewViewCount
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshMultiviewViewCount
. - maxPreferredTaskWorkGroupInvocations
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxPreferredTaskWorkGroupInvocations
. - maxPreferredMeshWorkGroupInvocations
Minimal value ofVkPhysicalDeviceMeshShaderPropertiesEXT::maxPreferredMeshWorkGroupInvocations
.
- maxRasterOrderGroups
- geometryShader
Same asVkPhysicalDeviceFeatures::geometryShader
.
Metal: not supported. - tileShader
Vulkan: not supported.
Metal: requires tile shader feature.
- maxVertexAttributes
- maxVertexBuffers
- VK_EXT_vertex_attribute_divisor:
- vertexDivisor
- maxVertexAttribDivisor
- vertexFormats
Formats which supportsVK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
invkGetPhysicalDeviceFormatProperties()
. - uniformTexBufferFormats
Formats which supportsVK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
invkGetPhysicalDeviceFormatProperties()
. - storageTexBufferFormats
Formats which supportsVK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
invkGetPhysicalDeviceFormatProperties()
. - storageTexBufferAtomicFormats
Formats which supportsVK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
invkGetPhysicalDeviceFormatProperties()
. - accelStructVertexFormats
Formats which supportsVK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
invkGetPhysicalDeviceFormatProperties()
.
- imageCubeArray
- textureCompressionASTC_LDR
- textureCompressionASTC_HDR
- textureCompressionBC
- textureCompressionETC2
- imageViewMinLod
- multisampleArrayImage
- maxImageArrayLayers
- storageImageAtomicFormats
Formats which supportsVK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
invkGetPhysicalDeviceFormatProperties()
. - storageImageFormats
Formats which supportsVK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
invkGetPhysicalDeviceFormatProperties()
. - attachmentBlendFormats
Formats which supportsVK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
invkGetPhysicalDeviceFormatProperties()
. - attachmentFormats
Formats which supportsVK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
invkGetPhysicalDeviceFormatProperties()
. - linearSampledFormats
Formats which supportsVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
invkGetPhysicalDeviceFormatProperties()
. - surfaceFormats
- hwCompressedAttachmentFormats
- lossyCompressedAttachmentFormats
- samplerAnisotropy
- samplerMirrorClampToEdge
- samplerFilterMinmax
- filterMinmaxImageComponentMapping
- samplerMipLodBias
- samplerYcbcrConversion
- ycbcr2Plane444
- maxSamplerAnisotropy
- maxSamplerLodBias
- framebufferColorSampleCounts
- framebufferDepthSampleCounts
- maxFramebufferLayers
- variableMultisampleRate
- metalArgBufferTier
- queues
- vendorIds
- devicesIds