From d5c6ae2e4d948d462812602281b381bc8e00e1fe Mon Sep 17 00:00:00 2001 From: Lilium <19245343+EndlesslyFlowering@users.noreply.github.com> Date: Mon, 22 May 2023 18:01:24 +0200 Subject: [PATCH] [dxvk] dxvk_adapter: implement macro to check for feature need in checkFeatureSupport --- src/dxvk/dxvk_adapter.cpp | 272 +++++++++++++------------------------- 1 file changed, 94 insertions(+), 178 deletions(-) diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 467472a1c..da659f2ef 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -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); }