/// <summary> /// Returns the adapter for the specified device. /// </summary> /// <param name="adapter"> /// The address of an <seealso cref="IDXGIAdapter" /> interface pointer to the adapter. This /// parameter must not be <seealso langword="null" />. /// </param> public int GetAdapter(out IDXGIAdapter adapter) { int result = GetMethodDelegate <GetAdapterDelegate>().Invoke(this, out IntPtr adapterPtr); adapter = result == 0 ? new DXGIAdapter(adapterPtr) : null; return(result); }
static void Main(string[] args) { using var factory = new IDXGIFactory(); var hr = dxgi.CreateDXGIFactory(ref factory.GetIID(), ref factory.NewPtr); if (hr != 0) { throw new System.Runtime.InteropServices.COMException("CreateDXGIFactory", hr); } for (uint i = 0; ; ++i) { using var adapter = new IDXGIAdapter(); hr = factory.EnumAdapters(i, ref adapter.NewPtr); if (hr != 0) { break; } DXGI_ADAPTER_DESC desc = default; adapter.GetDesc(ref desc); Console.WriteLine(desc.Description); } }
public static int GetIndex(this IDXGIAdapter adapter) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } using (var fac = DXGIFunctions.CreateDXGIFactory1()) { var desc = adapter.GetDesc(); int i = 0; do { if (fac.Object.EnumAdapters((uint)i, out var a).IsError) #if DEBUG { throw new InvalidOperationException(); } #else { return(-1); // wot? } #endif var desca = a.GetDesc(); if (desca.AdapterLuid.luid == desc.AdapterLuid.luid) { return(i); } i++; }while (true); } }
/// <summary> /// Gets the highest supported hardware feature level of the primary adapter. /// </summary> /// <param name="adapter">The <see cref="IDXGIAdapter"/>.</param> /// <returns>The highest supported hardware feature level.</returns> public static FeatureLevel GetSupportedFeatureLevel(IDXGIAdapter adapter) { var featureLevel = FeatureLevel.Level_9_1; ID3D11Device device = null; ID3D11DeviceContext context = null; try { D3D11CreateDevice( adapter, DriverType.Unknown, IntPtr.Zero, 0, null, 0, SdkVersion, out device, out featureLevel, out context); } finally { context?.Dispose(); device?.Dispose(); } return(featureLevel); }
private static Result RawD3D11CreateDeviceNoDeviceAndContext( IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out FeatureLevel featureLevel) { unsafe { var adapterPtr = CppObject.ToCallbackPtr <IDXGIAdapter>(adapter); fixed(void *featureLevelPtr = &featureLevel) { Result result = D3D11CreateDevice_( (void *)adapterPtr, (int)driverType, null, (int)flags, featureLevels != null && featureLevels.Length > 0 ? Unsafe.AsPointer(ref featureLevels[0]) : null, featureLevels?.Length ?? 0, SdkVersion, null, featureLevelPtr, null); GC.KeepAlive(adapter); return(result); } } }
public static Result D3D11CreateDevice(IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device device, out FeatureLevel featureLevel, out ID3D11DeviceContext immediateContext) { var result = D3D11CreateDevice(adapter, driverType, IntPtr.Zero, (int)flags, featureLevels, (featureLevels != null) ? featureLevels.Length : 0, SdkVersion, out device, out featureLevel, out immediateContext); if (result.Failure) { return(result); } if (immediateContext != null) { device.AddRef(); device.ImmediateContext__ = immediateContext; immediateContext.Device__ = device; } return(result); }
public static IComObject <ID3D11Device> D3D11CreateDevice( IDXGIAdapter adapter, D3D_DRIVER_TYPE driverType, D3D11_CREATE_DEVICE_FLAG flags, D3D_FEATURE_LEVEL[] featureLevels = null, uint sdkVersion = Constants.D3D11_SDK_VERSION) { //featureLevels = featureLevels ?? new D3D_FEATURE_LEVEL[] //{ // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_1, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_0, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_10_1, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_10_0, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_3, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_2, // D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_1 //}; D3D11CreateDevice( adapter, driverType, IntPtr.Zero, (uint)flags, featureLevels, (uint)(featureLevels?.Length).GetValueOrDefault(), sdkVersion, out ID3D11Device device, out D3D_FEATURE_LEVEL level, out ID3D11DeviceContext dc).ThrowOnError(); if (dc != null) { Marshal.ReleaseComObject(dc); } return(new ComObject <ID3D11Device>(device)); }
public static T D3D12CreateDevice <T>(IDXGIAdapter adapter, FeatureLevel minFeatureLevel) where T : ID3D12Device { Result result = D3D12CreateDevice(adapter, minFeatureLevel, typeof(T).GUID, out IntPtr nativePtr); if (result.Failure) { return(default);
/// <summary>Enumerates the adapters (video cards).</summary> /// <param name="adapterIndex">The index of the adapter to enumerate.</param> /// <param name="adapter"> /// The address of a pointer to as <seealso cref="IDXGIAdapter" /> interface at the position specified by the Adapter /// parameter. This parameter must not be NULL. /// </param> /// <returns> /// Returns S_OK if successful; otherwise, returns DXGI_ERR_NOT_FOUND if the index is greater than or equal to the /// number of adapters in the local system, or DXGI_ERR_INVALID_CALL if ppAdapter parameter is NULL. /// </returns> public int EnumAdapters(uint adapterIndex, out IDXGIAdapter adapter) { int result = GetMethodDelegate <EnumAdaptersDelegate>().Invoke(this, adapterIndex, out IntPtr adapterPtr); adapter = result == 0 ? new DXGIAdapter(adapterPtr) : null; return(result); }
public static Result D3D11CreateDevice(IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device device) { return(D3D11CreateDevice(adapter, driverType, flags, featureLevels, out device, out var featureLevel, out var immediateContext)); }
internal static unsafe Result D3D12CreateDeviceNoDevice(IDXGIAdapter adapter, FeatureLevel minFeatureLevel) { var adapterPtr = CppObject.ToCallbackPtr <IDXGIAdapter>(adapter); var riid = typeof(ID3D12Device).GUID; var result = D3D12CreateDevice_((void *)adapterPtr, (int)minFeatureLevel, &riid, null); GC.KeepAlive(adapter); return(result); }
public static DXGI_ADAPTER_DESC GetDesc(this IDXGIAdapter adapter) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } adapter.GetDesc(out var desc).ThrowOnError(); return(desc); }
public static Result D3D11CreateDevice(IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device?device) { return(RawD3D11CreateDeviceNoContext( adapter != null ? adapter.NativePointer : IntPtr.Zero, driverType, flags, featureLevels, out device, out _)); }
public static extern int D3D11CreateDevice( [MarshalAs(UnmanagedType.Interface)] IDXGIAdapter pAdapter, D3D_DRIVER_TYPE DriverType, IntPtr Software, D3D11_CREATE_DEVICE_FLAG Flags, D3D_FEATURE_LEVEL[] pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, [MarshalAs(UnmanagedType.Interface)] out ID3D11Device ppDevice, out D3D_FEATURE_LEVEL pFeatureLevel, [MarshalAs(UnmanagedType.Interface)] out ID3D11DeviceContext ppImmediateContext );
/// <summary> /// Checks whether Direct3D12 is supported with given adapter and minimum feature level. /// </summary> /// <param name="adapter">The <see cref="IDXGIAdapter"/> to use.</param> /// <param name="minFeatureLevel">Minimum feature level.</param> /// <returns>True if supported, false otherwise.</returns> public static bool IsSupported(IDXGIAdapter adapter, FeatureLevel minFeatureLevel = FeatureLevel.Level_11_0) { try { return(D3D12CreateDeviceNoDevice(adapter, minFeatureLevel).Success); } catch (DllNotFoundException) { // On pre Windows 10 d3d12.dll is not present and therefore not supported. return(false); } }
public static Result D3D12CreateDevice <T>(IDXGIAdapter adapter, FeatureLevel minFeatureLevel, out T device) where T : ID3D12Device { Result result = D3D12CreateDevice(adapter, minFeatureLevel, typeof(T).GUID, out IntPtr nativePtr); if (result.Failure) { device = default; return(result); } device = CppObject.FromPointer <T>(nativePtr); return(result); }
public static Result D3D12CreateDevice(IDXGIAdapter adapter, FeatureLevel minFeatureLevel, out ID3D12Device device) { var result = D3D12CreateDevice(adapter, minFeatureLevel, typeof(ID3D12Device).GUID, out var nativePtr); if (result.Failure) { device = null; return(result); } device = new ID3D12Device(nativePtr); return(result); }
public static Result D3D11CreateDevice(IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device device) { return(RawD3D11CreateDeviceNoContext( adapter, driverType, flags, featureLevels, out device, out _)); }
/// <summary> /// Gets the highest supported hardware feature level of the primary adapter. /// </summary> /// <param name="adapter">The <see cref="IDXGIAdapter"/>.</param> /// <returns>The highest supported hardware feature level.</returns> public static FeatureLevel GetSupportedFeatureLevel(IDXGIAdapter adapter) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter), "Invalid adapter"); } RawD3D11CreateDeviceNoDeviceAndContext( adapter, DriverType.Unknown, DeviceCreationFlags.None, null, out var featureLevel); return(featureLevel); }
/// <summary> /// Checks whether Direct3D12 is supported with given adapter and minimum feature level. /// </summary> /// <param name="adapter">The <see cref="IDXGIAdapter"/> to use.</param> /// <param name="minFeatureLevel">Minimum feature level.</param> /// <returns>True if supported, false otherwise.</returns> public static bool IsSupported(IDXGIAdapter adapter, FeatureLevel minFeatureLevel = FeatureLevel.Level_11_0) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } try { return(D3D12CreateDeviceNoDevice(adapter.NativePointer, minFeatureLevel).Success); } catch (DllNotFoundException) { // On pre Windows 10 d3d12.dll is not present and therefore not supported. return(false); } }
public static Result D3D11CreateDevice(IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device device) { ID3D11DeviceContext context = null; try { return(D3D11CreateDevice(adapter, driverType, flags, featureLevels, out device, out var featureLevel, out context)); } finally { context?.Dispose(); } }
/// <summary> /// Gets the highest supported hardware feature level of the primary adapter. /// </summary> /// <param name="adapter">The <see cref="IDXGIAdapter"/>.</param> /// <param name="minFeatureLevel">Thje</param> /// <returns>The highest supported hardware feature level.</returns> public static FeatureLevel GetMaxSupportedFeatureLevel(IDXGIAdapter adapter, FeatureLevel minFeatureLevel = FeatureLevel.Level_11_0) { ID3D12Device device = null; try { D3D12CreateDevice(adapter, minFeatureLevel, out device); return(device.CheckMaxSupportedFeatureLevel(FeatureLevels)); } catch { return(FeatureLevel.Level_9_1); } finally { device?.Dispose(); } }
public static IEnumerable <ComObject <IDXGIOutput1> > EnumOutputs(this IDXGIAdapter adapter) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } uint i = 0; do { if (adapter.EnumOutputs(i++, out var output).IsError) { yield break; } yield return(new ComObject <IDXGIOutput1>((IDXGIOutput1)output)); }while (true); }
/// <summary> /// Check if a feature level is supported by a particular adapter. /// </summary> /// <param name="adapter">The adapter.</param> /// <param name="featureLevel">The feature level.</param> /// <param name="flags">The <see cref="DeviceCreationFlags"/> flags.</param> /// <returns><c>true</c> if the specified adapter is supporting this feature level; otherwise, <c>false</c>.</returns> public static unsafe bool IsSupportedFeatureLevel( IDXGIAdapter adapter, FeatureLevel featureLevel, DeviceCreationFlags flags = DeviceCreationFlags.None) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter), "Invalid adapter"); } var result = RawD3D11CreateDeviceNoDeviceAndContext( adapter, DriverType.Unknown, flags, new[] { featureLevel }, out var outputLevel); return(result.Success && outputLevel == featureLevel); }
public static ID3D11Device CreateDevice(IDXGIAdapter adapter) { IntPtr adapterPointer = adapter != null ? adapter.NativePointer : IntPtr.Zero; IntPtr devicePointer = IntPtr.Zero; IntPtr contextPointer = IntPtr.Zero; IntPtr featureLevel = IntPtr.Zero; int result = CreateD3D11Device( adapterPointer, adapter != null ? 0 : 1, IntPtr.Zero, 2, IntPtr.Zero, 0, sdkVersion, out devicePointer, out featureLevel, out contextPointer ); return(new ID3D11Device(devicePointer)); }
public static ID3D11Device CreateDevice(IDXGIAdapter adapter) { IntPtr adapterPointer = adapter != null ? adapter.NativePointer : IntPtr.Zero; IntPtr devicePointer = IntPtr.Zero; IntPtr contextPointer = IntPtr.Zero; IntPtr featureLevel = IntPtr.Zero; int result = CreateD3D11Device( adapterPointer, adapter != null ? 0 : 1, IntPtr.Zero, 2, IntPtr.Zero, 0, sdkVersion, out devicePointer, out featureLevel, out contextPointer ); return new ID3D11Device(devicePointer); }
private static Result RawD3D11CreateDeviceNoContext( IDXGIAdapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, out ID3D11Device device, out FeatureLevel featureLevel) { unsafe { device = default; var adapterPtr = CppObject.ToCallbackPtr <IDXGIAdapter>(adapter); fixed(void *featureLevelsPtr = &featureLevels[0]) fixed(void *featureLevelPtr = &featureLevel) { var devicePtr = IntPtr.Zero; Result result = D3D11CreateDevice_( (void *)adapterPtr, (int)driverType, null, (int)flags, featureLevels != null && featureLevels.Length > 0 ? featureLevelsPtr : null, featureLevels?.Length ?? 0, SdkVersion, &devicePtr, featureLevelPtr, null); if (result.Success && devicePtr != IntPtr.Zero) { device = new ID3D11Device(devicePtr); } GC.KeepAlive(adapter); return(result); } } }
/// <summary> /// Check if a feature level is supported by a particular adapter. /// </summary> /// <param name="adapter">The adapter.</param> /// <param name="featureLevel">The feature level.</param> /// <returns><c>true</c> if the specified adapter is supporting this feature level; otherwise, <c>false</c>.</returns> public static bool IsSupportedFeatureLevel(IDXGIAdapter adapter, FeatureLevel featureLevel) { ID3D11Device device = null; ID3D11DeviceContext context = null; try { var result = D3D11CreateDevice( adapter, DriverType.Unknown, IntPtr.Zero, 0, new[] { featureLevel }, 1, SdkVersion, out device, out var outputLevel, out context); return(result.Success && outputLevel == featureLevel); } finally { context?.Dispose(); device?.Dispose(); } }
internal void InitializeFromImpl() { if (CreateDXGIFactory2(true, out IDXGIFactory4 tempDXGIFactory4).Failure) { throw new InvalidOperationException("Cannot create IDXGIFactory4"); } NativeFactory = tempDXGIFactory4; NativeFactory.EnumAdapters1(1, out var adapter); AdapterDescription1 desc = adapter.Description1; Adapters.Add(adapter); Description.Add(adapter.Description.Description); VendorId.Add(adapter.Description.DeviceId); Adapter = Adapters[0]; // TODO: }
public static extern HRESULT D3D11CreateDevice(IDXGIAdapter pAdapter, D3D_DRIVER_TYPE DriverType, IntPtr Software, uint Flags, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)] D3D_FEATURE_LEVEL[] pFeatureLevels, uint FeatureLevels, uint SDKVersion, out ID3D11Device ppDevice, out D3D_FEATURE_LEVEL pFeatureLevel, out ID3D11DeviceContext ppImmediateContext);
public static Result D3D12CreateDevice <T>(IDXGIAdapter adapter, out T device) where T : ID3D12Device { return(D3D12CreateDevice(adapter, FeatureLevel.Level_11_0, out device)); }