|
@@ -46,8 +46,7 @@ namespace Avalonia.Win32.OpenGl.Angle
|
|
|
}, AngleOptions.PlatformApi.DirectX11);
|
|
|
}
|
|
|
|
|
|
- public static unsafe AngleWin32EglDisplay CreateD3D11Display(Win32AngleEglInterface egl,
|
|
|
- bool preferDiscreteAdapter = false)
|
|
|
+ public static unsafe AngleWin32EglDisplay CreateD3D11Display(Win32AngleEglInterface egl)
|
|
|
{
|
|
|
var featureLevels = new[]
|
|
|
{
|
|
@@ -65,7 +64,9 @@ namespace Avalonia.Win32.OpenGl.Angle
|
|
|
using var factory = MicroComRuntime.CreateProxyFor<IDXGIFactory1>(pDxgiFactory, true);
|
|
|
|
|
|
void* pAdapter = null;
|
|
|
- if (preferDiscreteAdapter)
|
|
|
+ // As for now, we only need to redefine default adapter only on ARM64 just in case of Adreno GPU.
|
|
|
+ var redefineDefaultAdapter = RuntimeInformation.ProcessArchitecture == Architecture.Arm64;
|
|
|
+ if (redefineDefaultAdapter)
|
|
|
{
|
|
|
ushort adapterIndex = 0;
|
|
|
var adapters = new List<(IDXGIAdapter1 adapter, string name)>();
|
|
@@ -80,9 +81,14 @@ namespace Avalonia.Win32.OpenGl.Angle
|
|
|
|
|
|
if (adapters.Count == 0)
|
|
|
throw new OpenGlException("No adapters found");
|
|
|
+
|
|
|
chosenAdapter = adapters
|
|
|
- .OrderByDescending(x => x.name.Contains("nvidia") ? 2 : x.name.Contains("amd") ? 1 : 0)
|
|
|
- .First().adapter.CloneReference();
|
|
|
+ .OrderByDescending(x =>
|
|
|
+ // Put adreno in lower priority - it's broken in Avalonia.
|
|
|
+ x.name.Contains("adreno") ? -1 : 0)
|
|
|
+ .First().adapter
|
|
|
+ .CloneReference();
|
|
|
+
|
|
|
foreach (var a in adapters)
|
|
|
a.adapter.Dispose();
|
|
|
}
|