mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-06 13:54:14 +01:00
[d3d11] Move maximum feature level check to D3D11DeviceFeatures
This commit is contained in:
parent
c082e7f0a9
commit
882072e134
@ -1824,28 +1824,8 @@ namespace dxvk {
|
|||||||
if (entry != s_featureLevels.end())
|
if (entry != s_featureLevels.end())
|
||||||
return entry->second;
|
return entry->second;
|
||||||
|
|
||||||
// Check Feature Level 11_0 features
|
// Otherwise, check the actually available device features
|
||||||
if (!features.core.features.drawIndirectFirstInstance
|
return D3D11DeviceFeatures::GetMaxFeatureLevel(Instance, Adapter);
|
||||||
|| !features.core.features.fragmentStoresAndAtomics
|
|
||||||
|| !features.core.features.multiDrawIndirect
|
|
||||||
|| !features.core.features.tessellationShader)
|
|
||||||
return D3D_FEATURE_LEVEL_10_1;
|
|
||||||
|
|
||||||
// Check Feature Level 11_1 features
|
|
||||||
if (!features.core.features.logicOp
|
|
||||||
|| !features.core.features.variableMultisampleRate
|
|
||||||
|| !features.core.features.vertexPipelineStoresAndAtomics)
|
|
||||||
return D3D_FEATURE_LEVEL_11_0;
|
|
||||||
|
|
||||||
// Check Feature Level 12_0 features
|
|
||||||
D3D11_TILED_RESOURCES_TIER tiledResourcesTier = DetermineTiledResourcesTier(
|
|
||||||
Adapter->features(),
|
|
||||||
Adapter->devicePropertiesExt());
|
|
||||||
|
|
||||||
if (tiledResourcesTier < D3D11_TILED_RESOURCES_TIER_2)
|
|
||||||
return D3D_FEATURE_LEVEL_11_1;
|
|
||||||
|
|
||||||
return D3D_FEATURE_LEVEL_12_0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2368,33 +2348,6 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
D3D11_TILED_RESOURCES_TIER D3D11Device::DetermineTiledResourcesTier(
|
|
||||||
const DxvkDeviceFeatures& Features,
|
|
||||||
const DxvkDeviceInfo& Properties) {
|
|
||||||
if (!Features.core.features.sparseBinding
|
|
||||||
|| !Features.core.features.sparseResidencyBuffer
|
|
||||||
|| !Features.core.features.sparseResidencyImage2D
|
|
||||||
|| !Features.core.features.sparseResidencyAliased
|
|
||||||
|| !Properties.core.properties.sparseProperties.residencyStandard2DBlockShape)
|
|
||||||
return D3D11_TILED_RESOURCES_NOT_SUPPORTED;
|
|
||||||
|
|
||||||
if (!Features.core.features.shaderResourceResidency
|
|
||||||
|| !Features.core.features.shaderResourceMinLod
|
|
||||||
|| !Features.vk12.samplerFilterMinmax
|
|
||||||
|| !Properties.vk12.filterMinmaxSingleComponentFormats
|
|
||||||
|| !Properties.core.properties.sparseProperties.residencyNonResidentStrict
|
|
||||||
|| Properties.core.properties.sparseProperties.residencyAlignedMipSize)
|
|
||||||
return D3D11_TILED_RESOURCES_TIER_1;
|
|
||||||
|
|
||||||
if (!Features.core.features.sparseResidencyImage3D
|
|
||||||
|| !Properties.core.properties.sparseProperties.residencyStandard3DBlockShape)
|
|
||||||
return D3D11_TILED_RESOURCES_TIER_2;
|
|
||||||
|
|
||||||
return D3D11_TILED_RESOURCES_TIER_3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
D3D11DeviceExt::D3D11DeviceExt(
|
D3D11DeviceExt::D3D11DeviceExt(
|
||||||
D3D11DXGIDevice* pContainer,
|
D3D11DXGIDevice* pContainer,
|
||||||
|
@ -494,10 +494,6 @@ namespace dxvk {
|
|||||||
UINT Subresource,
|
UINT Subresource,
|
||||||
const D3D11_BOX* pBox);
|
const D3D11_BOX* pBox);
|
||||||
|
|
||||||
static D3D11_TILED_RESOURCES_TIER DetermineTiledResourcesTier(
|
|
||||||
const DxvkDeviceFeatures& Features,
|
|
||||||
const DxvkDeviceInfo& Properties);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -177,6 +177,14 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
D3D_FEATURE_LEVEL D3D11DeviceFeatures::GetMaxFeatureLevel(
|
||||||
|
const Rc<DxvkInstance>& Instance,
|
||||||
|
const Rc<DxvkAdapter>& Adapter) {
|
||||||
|
D3D11DeviceFeatures features(Instance, Adapter, D3D_FEATURE_LEVEL_12_1);
|
||||||
|
return features.GetMaxFeatureLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
D3D11_CONSERVATIVE_RASTERIZATION_TIER D3D11DeviceFeatures::DetermineConservativeRasterizationTier(
|
D3D11_CONSERVATIVE_RASTERIZATION_TIER D3D11DeviceFeatures::DetermineConservativeRasterizationTier(
|
||||||
D3D_FEATURE_LEVEL FeatureLevel) {
|
D3D_FEATURE_LEVEL FeatureLevel) {
|
||||||
if (FeatureLevel < D3D_FEATURE_LEVEL_11_1
|
if (FeatureLevel < D3D_FEATURE_LEVEL_11_1
|
||||||
@ -265,4 +273,31 @@ namespace dxvk {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
D3D_FEATURE_LEVEL D3D11DeviceFeatures::GetMaxFeatureLevel() const {
|
||||||
|
// Check Feature Level 11_0 features
|
||||||
|
if (!m_features.core.features.drawIndirectFirstInstance
|
||||||
|
|| !m_features.core.features.fragmentStoresAndAtomics
|
||||||
|
|| !m_features.core.features.multiDrawIndirect
|
||||||
|
|| !m_features.core.features.tessellationShader)
|
||||||
|
return D3D_FEATURE_LEVEL_10_1;
|
||||||
|
|
||||||
|
// Check Feature Level 11_1 features
|
||||||
|
if (!m_d3d11Options.OutputMergerLogicOp
|
||||||
|
|| !m_features.core.features.vertexPipelineStoresAndAtomics)
|
||||||
|
return D3D_FEATURE_LEVEL_11_0;
|
||||||
|
|
||||||
|
// Check Feature Level 12_0 features
|
||||||
|
if (m_d3d11Options2.TiledResourcesTier < D3D11_TILED_RESOURCES_TIER_2
|
||||||
|
|| !m_d3d11Options2.TypedUAVLoadAdditionalFormats)
|
||||||
|
return D3D_FEATURE_LEVEL_11_1;
|
||||||
|
|
||||||
|
// Check Feature Level 12_1 features
|
||||||
|
if (!m_d3d11Options2.ConservativeRasterizationTier
|
||||||
|
|| !m_d3d11Options2.ROVsSupported)
|
||||||
|
return D3D_FEATURE_LEVEL_12_0;
|
||||||
|
|
||||||
|
return D3D_FEATURE_LEVEL_12_1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,17 @@ namespace dxvk {
|
|||||||
return m_d3d11Options2.ConservativeRasterizationTier;
|
return m_d3d11Options2.ConservativeRasterizationTier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Tests maximum supported feature level
|
||||||
|
*
|
||||||
|
* \param [in] Instance DXVK instance
|
||||||
|
* \param [in] Adapter DXVK adapter
|
||||||
|
* \returns Highest supported feature level
|
||||||
|
*/
|
||||||
|
static D3D_FEATURE_LEVEL GetMaxFeatureLevel(
|
||||||
|
const Rc<DxvkInstance>& Instance,
|
||||||
|
const Rc<DxvkAdapter>& Adapter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
DxvkDeviceFeatures m_features;
|
DxvkDeviceFeatures m_features;
|
||||||
@ -100,6 +111,8 @@ namespace dxvk {
|
|||||||
const Rc<DxvkAdapter>& Adapter,
|
const Rc<DxvkAdapter>& Adapter,
|
||||||
D3D_FEATURE_LEVEL FeatureLevel);
|
D3D_FEATURE_LEVEL FeatureLevel);
|
||||||
|
|
||||||
|
D3D_FEATURE_LEVEL GetMaxFeatureLevel() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user