| // Copyright (c) Microsoft Corporation |
| |
| #include "Direct3DDevice.h" |
| |
| namespace display::test { |
| Direct3DDevice::Direct3DDevice(LUID AdapterLuid) : AdapterLuid(AdapterLuid) {} |
| |
| Direct3DDevice::Direct3DDevice() { |
| AdapterLuid = LUID{}; |
| } |
| |
| HRESULT Direct3DDevice::Init() { |
| // The DXGI factory could be cached, but if a new render adapter appears on |
| // the system, a new factory needs to be created. If caching is desired, check |
| // DxgiFactory->IsCurrent() each time and recreate the factory if !IsCurrent. |
| HRESULT hr = CreateDXGIFactory2(0, IID_PPV_ARGS(&(DxgiFactory))); |
| if (FAILED(hr)) { |
| return hr; |
| } |
| |
| // Find the specified render adapter |
| hr = DxgiFactory->EnumAdapterByLuid(AdapterLuid, IID_PPV_ARGS(&(Adapter))); |
| if (FAILED(hr)) { |
| return hr; |
| } |
| |
| // Create a D3D device using the render adapter. BGRA support is required by |
| // the WHQL test suite. |
| hr = D3D11CreateDevice(Adapter.Get(), D3D_DRIVER_TYPE_UNKNOWN, nullptr, |
| D3D11_CREATE_DEVICE_BGRA_SUPPORT, nullptr, 0, |
| D3D11_SDK_VERSION, &Device, nullptr, &DeviceContext); |
| if (FAILED(hr)) { |
| // If creating the D3D device failed, it's possible the render GPU was lost |
| // (e.g. detachable GPU) or else the system is in a transient state. |
| return hr; |
| } |
| |
| return S_OK; |
| } |
| } // namespace display::test |