public override bool TryEnablePreferentialOrdering(DevicePreference preference) { DXCoreAdapterPreference *pPreferences = stackalloc DXCoreAdapterPreference[4]; int i = 0; _softwareOnly = preference.HasFlag(DevicePreference.Software) && !preference.HasFlag(DevicePreference.Hardware); if (!TryAdd(DevicePreference.Hardware, DXCoreAdapterPreference.Hardware)) { return(false); } if (!TryAdd(DevicePreference.LowPower, DXCoreAdapterPreference.MinimumPower)) { return(false); } if (!TryAdd(DevicePreference.HighPerformance, DXCoreAdapterPreference.HighPerformance)) { return(false); } Guard.ThrowIfFailed(_list.Ptr->Sort((uint)i, pPreferences)); return(true); bool TryAdd(DevicePreference devicePref, DXCoreAdapterPreference dxCorePref) { if (!preference.HasFlag(devicePref)) { return(true); } if (!_list.Ptr->IsAdapterPreferenceSupported(dxCorePref)) { return(false); } StackSentinel.StackAssert(i < 4); pPreferences[i++] = dxCorePref; return(true); } }
public int Sort([NativeTypeName("uint32_t")] uint numPreferences, [NativeTypeName("const DXCoreAdapterPreference *")] DXCoreAdapterPreference *preferences) { return(((delegate * unmanaged <IDXCoreAdapterList *, uint, DXCoreAdapterPreference *, int>)(lpVtbl[7]))((IDXCoreAdapterList *)Unsafe.AsPointer(ref this), numPreferences, preferences)); }