[dxvk] dxvk_adapter: implement macro to check for feature need in checkFeatureSupport

This commit is contained in:
Lilium 2023-05-22 18:01:24 +02:00 committed by Joshie
parent 633f6663a4
commit d5c6ae2e4d
1 changed files with 94 additions and 178 deletions

View File

@ -165,187 +165,103 @@ namespace dxvk {
return queues;
}
#define CHECK_FEATURE_NEED(feature) \
(m_deviceFeatures.feature \
|| !required.feature)
bool DxvkAdapter::checkFeatureSupport(const DxvkDeviceFeatures& required) const {
return (m_deviceFeatures.core.features.robustBufferAccess
|| !required.core.features.robustBufferAccess)
&& (m_deviceFeatures.core.features.fullDrawIndexUint32
|| !required.core.features.fullDrawIndexUint32)
&& (m_deviceFeatures.core.features.imageCubeArray
|| !required.core.features.imageCubeArray)
&& (m_deviceFeatures.core.features.independentBlend
|| !required.core.features.independentBlend)
&& (m_deviceFeatures.core.features.geometryShader
|| !required.core.features.geometryShader)
&& (m_deviceFeatures.core.features.tessellationShader
|| !required.core.features.tessellationShader)
&& (m_deviceFeatures.core.features.sampleRateShading
|| !required.core.features.sampleRateShading)
&& (m_deviceFeatures.core.features.dualSrcBlend
|| !required.core.features.dualSrcBlend)
&& (m_deviceFeatures.core.features.logicOp
|| !required.core.features.logicOp)
&& (m_deviceFeatures.core.features.multiDrawIndirect
|| !required.core.features.multiDrawIndirect)
&& (m_deviceFeatures.core.features.drawIndirectFirstInstance
|| !required.core.features.drawIndirectFirstInstance)
&& (m_deviceFeatures.core.features.depthClamp
|| !required.core.features.depthClamp)
&& (m_deviceFeatures.core.features.depthBiasClamp
|| !required.core.features.depthBiasClamp)
&& (m_deviceFeatures.core.features.fillModeNonSolid
|| !required.core.features.fillModeNonSolid)
&& (m_deviceFeatures.core.features.depthBounds
|| !required.core.features.depthBounds)
&& (m_deviceFeatures.core.features.wideLines
|| !required.core.features.wideLines)
&& (m_deviceFeatures.core.features.largePoints
|| !required.core.features.largePoints)
&& (m_deviceFeatures.core.features.alphaToOne
|| !required.core.features.alphaToOne)
&& (m_deviceFeatures.core.features.multiViewport
|| !required.core.features.multiViewport)
&& (m_deviceFeatures.core.features.samplerAnisotropy
|| !required.core.features.samplerAnisotropy)
&& (m_deviceFeatures.core.features.textureCompressionETC2
|| !required.core.features.textureCompressionETC2)
&& (m_deviceFeatures.core.features.textureCompressionASTC_LDR
|| !required.core.features.textureCompressionASTC_LDR)
&& (m_deviceFeatures.core.features.textureCompressionBC
|| !required.core.features.textureCompressionBC)
&& (m_deviceFeatures.core.features.occlusionQueryPrecise
|| !required.core.features.occlusionQueryPrecise)
&& (m_deviceFeatures.core.features.pipelineStatisticsQuery
|| !required.core.features.pipelineStatisticsQuery)
&& (m_deviceFeatures.core.features.vertexPipelineStoresAndAtomics
|| !required.core.features.vertexPipelineStoresAndAtomics)
&& (m_deviceFeatures.core.features.fragmentStoresAndAtomics
|| !required.core.features.fragmentStoresAndAtomics)
&& (m_deviceFeatures.core.features.shaderTessellationAndGeometryPointSize
|| !required.core.features.shaderTessellationAndGeometryPointSize)
&& (m_deviceFeatures.core.features.shaderImageGatherExtended
|| !required.core.features.shaderImageGatherExtended)
&& (m_deviceFeatures.core.features.shaderStorageImageExtendedFormats
|| !required.core.features.shaderStorageImageExtendedFormats)
&& (m_deviceFeatures.core.features.shaderStorageImageMultisample
|| !required.core.features.shaderStorageImageMultisample)
&& (m_deviceFeatures.core.features.shaderStorageImageReadWithoutFormat
|| !required.core.features.shaderStorageImageReadWithoutFormat)
&& (m_deviceFeatures.core.features.shaderStorageImageWriteWithoutFormat
|| !required.core.features.shaderStorageImageWriteWithoutFormat)
&& (m_deviceFeatures.core.features.shaderUniformBufferArrayDynamicIndexing
|| !required.core.features.shaderUniformBufferArrayDynamicIndexing)
&& (m_deviceFeatures.core.features.shaderSampledImageArrayDynamicIndexing
|| !required.core.features.shaderSampledImageArrayDynamicIndexing)
&& (m_deviceFeatures.core.features.shaderStorageBufferArrayDynamicIndexing
|| !required.core.features.shaderStorageBufferArrayDynamicIndexing)
&& (m_deviceFeatures.core.features.shaderStorageImageArrayDynamicIndexing
|| !required.core.features.shaderStorageImageArrayDynamicIndexing)
&& (m_deviceFeatures.core.features.shaderClipDistance
|| !required.core.features.shaderClipDistance)
&& (m_deviceFeatures.core.features.shaderCullDistance
|| !required.core.features.shaderCullDistance)
&& (m_deviceFeatures.core.features.shaderFloat64
|| !required.core.features.shaderFloat64)
&& (m_deviceFeatures.core.features.shaderInt64
|| !required.core.features.shaderInt64)
&& (m_deviceFeatures.core.features.shaderInt16
|| !required.core.features.shaderInt16)
&& (m_deviceFeatures.core.features.shaderResourceResidency
|| !required.core.features.shaderResourceResidency)
&& (m_deviceFeatures.core.features.shaderResourceMinLod
|| !required.core.features.shaderResourceMinLod)
&& (m_deviceFeatures.core.features.sparseBinding
|| !required.core.features.sparseBinding)
&& (m_deviceFeatures.core.features.sparseResidencyBuffer
|| !required.core.features.sparseResidencyBuffer)
&& (m_deviceFeatures.core.features.sparseResidencyImage2D
|| !required.core.features.sparseResidencyImage2D)
&& (m_deviceFeatures.core.features.sparseResidencyImage3D
|| !required.core.features.sparseResidencyImage3D)
&& (m_deviceFeatures.core.features.sparseResidency2Samples
|| !required.core.features.sparseResidency2Samples)
&& (m_deviceFeatures.core.features.sparseResidency4Samples
|| !required.core.features.sparseResidency4Samples)
&& (m_deviceFeatures.core.features.sparseResidency8Samples
|| !required.core.features.sparseResidency8Samples)
&& (m_deviceFeatures.core.features.sparseResidency16Samples
|| !required.core.features.sparseResidency16Samples)
&& (m_deviceFeatures.core.features.sparseResidencyAliased
|| !required.core.features.sparseResidencyAliased)
&& (m_deviceFeatures.core.features.variableMultisampleRate
|| !required.core.features.variableMultisampleRate)
&& (m_deviceFeatures.core.features.inheritedQueries
|| !required.core.features.inheritedQueries)
&& (m_deviceFeatures.vk11.shaderDrawParameters
|| !required.vk11.shaderDrawParameters)
&& (m_deviceFeatures.vk12.samplerMirrorClampToEdge
|| !required.vk12.samplerMirrorClampToEdge)
&& (m_deviceFeatures.vk12.drawIndirectCount
|| !required.vk12.drawIndirectCount)
&& (m_deviceFeatures.vk12.hostQueryReset
|| !required.vk12.hostQueryReset)
&& (m_deviceFeatures.vk12.timelineSemaphore
|| !required.vk12.timelineSemaphore)
&& (m_deviceFeatures.vk12.bufferDeviceAddress
|| !required.vk12.bufferDeviceAddress)
&& (m_deviceFeatures.vk12.shaderOutputViewportIndex
|| !required.vk12.shaderOutputViewportIndex)
&& (m_deviceFeatures.vk12.shaderOutputLayer
|| !required.vk12.shaderOutputLayer)
&& (m_deviceFeatures.vk13.pipelineCreationCacheControl
|| !required.vk13.pipelineCreationCacheControl)
&& (m_deviceFeatures.vk13.shaderDemoteToHelperInvocation
|| !required.vk13.shaderDemoteToHelperInvocation)
&& (m_deviceFeatures.vk13.shaderZeroInitializeWorkgroupMemory
|| !required.vk13.shaderZeroInitializeWorkgroupMemory)
&& (m_deviceFeatures.vk13.synchronization2
|| !required.vk13.synchronization2)
&& (m_deviceFeatures.vk13.dynamicRendering
|| !required.vk13.dynamicRendering)
&& (m_deviceFeatures.vk13.maintenance4
|| !required.vk13.maintenance4)
&& (m_deviceFeatures.extAttachmentFeedbackLoopLayout.attachmentFeedbackLoopLayout
|| !required.extAttachmentFeedbackLoopLayout.attachmentFeedbackLoopLayout)
&& (m_deviceFeatures.extConservativeRasterization
|| !required.extConservativeRasterization)
&& (m_deviceFeatures.extCustomBorderColor.customBorderColors
|| !required.extCustomBorderColor.customBorderColors)
&& (m_deviceFeatures.extCustomBorderColor.customBorderColorWithoutFormat
|| !required.extCustomBorderColor.customBorderColorWithoutFormat)
&& (m_deviceFeatures.extDepthClipEnable.depthClipEnable
|| !required.extDepthClipEnable.depthClipEnable)
&& (m_deviceFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary
|| !required.extGraphicsPipelineLibrary.graphicsPipelineLibrary)
&& (m_deviceFeatures.extMemoryBudget
|| !required.extMemoryBudget)
&& (m_deviceFeatures.extMemoryPriority.memoryPriority
|| !required.extMemoryPriority.memoryPriority)
&& (m_deviceFeatures.extNonSeamlessCubeMap.nonSeamlessCubeMap
|| !required.extNonSeamlessCubeMap.nonSeamlessCubeMap)
&& (m_deviceFeatures.extRobustness2.robustBufferAccess2
|| !required.extRobustness2.robustBufferAccess2)
&& (m_deviceFeatures.extRobustness2.robustImageAccess2
|| !required.extRobustness2.robustImageAccess2)
&& (m_deviceFeatures.extRobustness2.nullDescriptor
|| !required.extRobustness2.nullDescriptor)
&& (m_deviceFeatures.extShaderModuleIdentifier.shaderModuleIdentifier
|| !required.extShaderModuleIdentifier.shaderModuleIdentifier)
&& (m_deviceFeatures.extShaderStencilExport
|| !required.extShaderStencilExport)
&& (m_deviceFeatures.extSwapchainColorSpace
|| !required.extSwapchainColorSpace)
&& (m_deviceFeatures.extHdrMetadata
|| !required.extHdrMetadata)
&& (m_deviceFeatures.extTransformFeedback.transformFeedback
|| !required.extTransformFeedback.transformFeedback)
&& (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor
|| !required.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor)
&& (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor
|| !required.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor);
return CHECK_FEATURE_NEED(core.features.robustBufferAccess)
&& CHECK_FEATURE_NEED(core.features.fullDrawIndexUint32)
&& CHECK_FEATURE_NEED(core.features.imageCubeArray)
&& CHECK_FEATURE_NEED(core.features.independentBlend)
&& CHECK_FEATURE_NEED(core.features.geometryShader)
&& CHECK_FEATURE_NEED(core.features.tessellationShader)
&& CHECK_FEATURE_NEED(core.features.sampleRateShading)
&& CHECK_FEATURE_NEED(core.features.dualSrcBlend)
&& CHECK_FEATURE_NEED(core.features.logicOp)
&& CHECK_FEATURE_NEED(core.features.multiDrawIndirect)
&& CHECK_FEATURE_NEED(core.features.drawIndirectFirstInstance)
&& CHECK_FEATURE_NEED(core.features.depthClamp)
&& CHECK_FEATURE_NEED(core.features.depthBiasClamp)
&& CHECK_FEATURE_NEED(core.features.fillModeNonSolid)
&& CHECK_FEATURE_NEED(core.features.depthBounds)
&& CHECK_FEATURE_NEED(core.features.wideLines)
&& CHECK_FEATURE_NEED(core.features.largePoints)
&& CHECK_FEATURE_NEED(core.features.alphaToOne)
&& CHECK_FEATURE_NEED(core.features.multiViewport)
&& CHECK_FEATURE_NEED(core.features.samplerAnisotropy)
&& CHECK_FEATURE_NEED(core.features.textureCompressionETC2)
&& CHECK_FEATURE_NEED(core.features.textureCompressionASTC_LDR)
&& CHECK_FEATURE_NEED(core.features.textureCompressionBC)
&& CHECK_FEATURE_NEED(core.features.occlusionQueryPrecise)
&& CHECK_FEATURE_NEED(core.features.pipelineStatisticsQuery)
&& CHECK_FEATURE_NEED(core.features.vertexPipelineStoresAndAtomics)
&& CHECK_FEATURE_NEED(core.features.fragmentStoresAndAtomics)
&& CHECK_FEATURE_NEED(core.features.shaderTessellationAndGeometryPointSize)
&& CHECK_FEATURE_NEED(core.features.shaderImageGatherExtended)
&& CHECK_FEATURE_NEED(core.features.shaderStorageImageExtendedFormats)
&& CHECK_FEATURE_NEED(core.features.shaderStorageImageMultisample)
&& CHECK_FEATURE_NEED(core.features.shaderStorageImageReadWithoutFormat)
&& CHECK_FEATURE_NEED(core.features.shaderStorageImageWriteWithoutFormat)
&& CHECK_FEATURE_NEED(core.features.shaderUniformBufferArrayDynamicIndexing)
&& CHECK_FEATURE_NEED(core.features.shaderSampledImageArrayDynamicIndexing)
&& CHECK_FEATURE_NEED(core.features.shaderStorageBufferArrayDynamicIndexing)
&& CHECK_FEATURE_NEED(core.features.shaderStorageImageArrayDynamicIndexing)
&& CHECK_FEATURE_NEED(core.features.shaderClipDistance)
&& CHECK_FEATURE_NEED(core.features.shaderCullDistance)
&& CHECK_FEATURE_NEED(core.features.shaderFloat64)
&& CHECK_FEATURE_NEED(core.features.shaderInt64)
&& CHECK_FEATURE_NEED(core.features.shaderInt16)
&& CHECK_FEATURE_NEED(core.features.shaderResourceResidency)
&& CHECK_FEATURE_NEED(core.features.shaderResourceMinLod)
&& CHECK_FEATURE_NEED(core.features.sparseBinding)
&& CHECK_FEATURE_NEED(core.features.sparseResidencyBuffer)
&& CHECK_FEATURE_NEED(core.features.sparseResidencyImage2D)
&& CHECK_FEATURE_NEED(core.features.sparseResidencyImage3D)
&& CHECK_FEATURE_NEED(core.features.sparseResidency2Samples)
&& CHECK_FEATURE_NEED(core.features.sparseResidency4Samples)
&& CHECK_FEATURE_NEED(core.features.sparseResidency8Samples)
&& CHECK_FEATURE_NEED(core.features.sparseResidency16Samples)
&& CHECK_FEATURE_NEED(core.features.sparseResidencyAliased)
&& CHECK_FEATURE_NEED(core.features.variableMultisampleRate)
&& CHECK_FEATURE_NEED(core.features.inheritedQueries)
&& CHECK_FEATURE_NEED(vk11.shaderDrawParameters)
&& CHECK_FEATURE_NEED(vk12.samplerMirrorClampToEdge)
&& CHECK_FEATURE_NEED(vk12.drawIndirectCount)
&& CHECK_FEATURE_NEED(vk12.hostQueryReset)
&& CHECK_FEATURE_NEED(vk12.timelineSemaphore)
&& CHECK_FEATURE_NEED(vk12.bufferDeviceAddress)
&& CHECK_FEATURE_NEED(vk12.shaderOutputViewportIndex)
&& CHECK_FEATURE_NEED(vk12.shaderOutputLayer)
&& CHECK_FEATURE_NEED(vk13.pipelineCreationCacheControl)
&& CHECK_FEATURE_NEED(vk13.shaderDemoteToHelperInvocation)
&& CHECK_FEATURE_NEED(vk13.shaderZeroInitializeWorkgroupMemory)
&& CHECK_FEATURE_NEED(vk13.synchronization2)
&& CHECK_FEATURE_NEED(vk13.dynamicRendering)
&& CHECK_FEATURE_NEED(vk13.maintenance4)
&& CHECK_FEATURE_NEED(extAttachmentFeedbackLoopLayout.attachmentFeedbackLoopLayout)
&& CHECK_FEATURE_NEED(extConservativeRasterization)
&& CHECK_FEATURE_NEED(extCustomBorderColor.customBorderColors)
&& CHECK_FEATURE_NEED(extCustomBorderColor.customBorderColorWithoutFormat)
&& CHECK_FEATURE_NEED(extDepthClipEnable.depthClipEnable)
&& CHECK_FEATURE_NEED(extGraphicsPipelineLibrary.graphicsPipelineLibrary)
&& CHECK_FEATURE_NEED(extMemoryBudget)
&& CHECK_FEATURE_NEED(extMemoryPriority.memoryPriority)
&& CHECK_FEATURE_NEED(extNonSeamlessCubeMap.nonSeamlessCubeMap)
&& CHECK_FEATURE_NEED(extRobustness2.robustBufferAccess2)
&& CHECK_FEATURE_NEED(extRobustness2.robustImageAccess2)
&& CHECK_FEATURE_NEED(extRobustness2.nullDescriptor)
&& CHECK_FEATURE_NEED(extShaderModuleIdentifier.shaderModuleIdentifier)
&& CHECK_FEATURE_NEED(extShaderStencilExport)
&& CHECK_FEATURE_NEED(extSwapchainColorSpace)
&& CHECK_FEATURE_NEED(extHdrMetadata)
&& CHECK_FEATURE_NEED(extTransformFeedback.transformFeedback)
&& CHECK_FEATURE_NEED(extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor)
&& CHECK_FEATURE_NEED(extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor);
}
#undef CHECK_FEATURE_NEED
void DxvkAdapter::enableExtensions(const DxvkNameSet& extensions) {
m_extraExtensions.merge(extensions);
}