diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index d701e923..bacfc085 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -1353,6 +1353,9 @@ namespace dxvk { enabled.core.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; enabled.core.pNext = nullptr; + // Geometry shaders are used for some meta ops + enabled.core.features.geometryShader = VK_TRUE; + enabled.core.features.robustBufferAccess = VK_TRUE; enabled.extMemoryPriority.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT; enabled.extMemoryPriority.pNext = nullptr; @@ -1363,6 +1366,8 @@ namespace dxvk { enabled.extVertexAttributeDivisor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT; enabled.extVertexAttributeDivisor.pNext = nullptr; + enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor = supported.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor; + enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor = supported.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor; if (featureLevel >= D3D_FEATURE_LEVEL_9_1) { enabled.core.features.depthClamp = VK_TRUE; @@ -1373,7 +1378,7 @@ namespace dxvk { enabled.core.features.samplerAnisotropy = VK_TRUE; enabled.core.features.shaderClipDistance = VK_TRUE; enabled.core.features.shaderCullDistance = VK_TRUE; - enabled.core.features.robustBufferAccess = VK_TRUE; + enabled.core.features.textureCompressionBC = VK_TRUE; } if (featureLevel >= D3D_FEATURE_LEVEL_9_2) { @@ -1381,17 +1386,14 @@ namespace dxvk { } if (featureLevel >= D3D_FEATURE_LEVEL_9_3) { - enabled.core.features.multiViewport = VK_TRUE; enabled.core.features.independentBlend = VK_TRUE; + enabled.core.features.multiViewport = VK_TRUE; } if (featureLevel >= D3D_FEATURE_LEVEL_10_0) { enabled.core.features.fullDrawIndexUint32 = VK_TRUE; - enabled.core.features.fragmentStoresAndAtomics = VK_TRUE; - enabled.core.features.geometryShader = VK_TRUE; enabled.core.features.logicOp = supported.core.features.logicOp; enabled.core.features.shaderImageGatherExtended = VK_TRUE; - enabled.core.features.textureCompressionBC = VK_TRUE; enabled.core.features.variableMultisampleRate = supported.core.features.variableMultisampleRate; enabled.extTransformFeedback.transformFeedback = supported.extTransformFeedback.transformFeedback; enabled.extTransformFeedback.geometryStreams = supported.extTransformFeedback.geometryStreams; @@ -1403,14 +1405,14 @@ namespace dxvk { } if (featureLevel >= D3D_FEATURE_LEVEL_11_0) { - enabled.core.features.multiDrawIndirect = supported.core.features.multiDrawIndirect; enabled.core.features.drawIndirectFirstInstance = VK_TRUE; + enabled.core.features.fragmentStoresAndAtomics = VK_TRUE; + enabled.core.features.multiDrawIndirect = supported.core.features.multiDrawIndirect; enabled.core.features.shaderFloat64 = supported.core.features.shaderFloat64; enabled.core.features.shaderInt64 = supported.core.features.shaderInt64; - enabled.core.features.tessellationShader = VK_TRUE; - // TODO enable unconditionally once RADV gains support enabled.core.features.shaderStorageImageMultisample = supported.core.features.shaderStorageImageMultisample; enabled.core.features.shaderStorageImageWriteWithoutFormat = VK_TRUE; + enabled.core.features.tessellationShader = VK_TRUE; } if (featureLevel >= D3D_FEATURE_LEVEL_11_1) { @@ -1419,12 +1421,6 @@ namespace dxvk { enabled.core.features.vertexPipelineStoresAndAtomics = VK_TRUE; } - if (supported.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor - && supported.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor) { - enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor = VK_TRUE; - enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor = VK_TRUE; - } - return enabled; }