diff --git a/src/renderer/atlas/AtlasEngine.cpp b/src/renderer/atlas/AtlasEngine.cpp index 966eea7dbd6..2ac8ede8a66 100644 --- a/src/renderer/atlas/AtlasEngine.cpp +++ b/src/renderer/atlas/AtlasEngine.cpp @@ -639,8 +639,6 @@ void AtlasEngine::_createResources() } #endif // NDEBUG - const auto featureLevel = _r.device->GetFeatureLevel(); - { wil::com_ptr dxgiAdapter; THROW_IF_FAILED(_r.device.query()->GetParent(__uuidof(dxgiAdapter), dxgiAdapter.put_void())); @@ -648,7 +646,23 @@ void AtlasEngine::_createResources() DXGI_ADAPTER_DESC1 desc; THROW_IF_FAILED(dxgiAdapter->GetDesc1(&desc)); - _r.d2dMode = debugForceD2DMode || featureLevel < D3D_FEATURE_LEVEL_10_0 || WI_IsAnyFlagSet(desc.Flags, DXGI_ADAPTER_FLAG_REMOTE | DXGI_ADAPTER_FLAG_SOFTWARE); + _r.d2dMode = debugForceD2DMode || WI_IsAnyFlagSet(desc.Flags, DXGI_ADAPTER_FLAG_REMOTE | DXGI_ADAPTER_FLAG_SOFTWARE); + } + + const auto featureLevel = _r.device->GetFeatureLevel(); + + if (featureLevel < D3D_FEATURE_LEVEL_10_0) + { + _r.d2dMode = true; + } + else if (featureLevel < D3D_FEATURE_LEVEL_11_0) + { + D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS options; + THROW_IF_FAILED(_r.device->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &options, sizeof(options))); + if (!options.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x) + { + _r.d2dMode = true; + } } if (!_r.d2dMode)