mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +01:00
[dxvk] dxvk_adapter: implement macro to check for feature need in checkFeatureSupport
This commit is contained in:
parent
633f6663a4
commit
d5c6ae2e4d
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user