D3D11CreateDevice

Creates a device that represents the display adapter.

Syntax

HRESULT D3D11CreateDevice(
         IDXGIAdapter *pAdapter,
         D3D_DRIVER_TYPE DriverType,
         HMODULE Software,
         UINT Flags,
         const D3D_FEATURE_LEVEL *pFeatureLevels,
         UINT FeatureLevels,
         UINT SDKVersion,
         ID3D11Device **ppDevice,
         D3D_FEATURE_LEVEL *pFeatureLevel,
         ID3D11DeviceContext **ppImmediateContext
)  

Parameters

pAdapter
Type: IDXGIAdapter *

[in, optional] A pointer to the video adapter to use when creating a device. Pass NULL to use the default adapter, which is the first adapter that is enumerated by IDXGIFactory::EnumAdapters or IDXGIFactory1::EnumAdapters1.

Note

  Do not mix the use of DXGI 1.0 (IDXGIFactory) and DXGI 1.1 (IDXGIFactory1) in an application. Use IDXGIFactory or IDXGIFactory1, but not both in an application.

DriverType
Type: D3D_DRIVER_TYPE 

The D3D_DRIVER_TYPE, which represents the driver type to create.

Software
Type: HMODULE 

A handle to a DLL that implements a software rasterizer. If DriverType is D3D_DRIVER_TYPE_SOFTWARE, Software must not be NULL. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle.

Flags
Type: UINT 

The runtime layers to enable (see D3D11_CREATE_DEVICE_FLAG); values can be bitwise OR’d together.

pFeatureLevels
Type: D3D_FEATURE_LEVEL *

[in, optional] Determines the order of feature levels to attempt to create. Must be NULL, which causes this function to use the following array of feature levels:

{
  D3D_FEATURE_LEVEL_11_0,
  D3D_FEATURE_LEVEL_10_1,
  D3D_FEATURE_LEVEL_10_0,
  D3D_FEATURE_LEVEL_9_3,
  D3D_FEATURE_LEVEL_9_2,
  D3D_FEATURE_LEVEL_9_1,
};  

Note If the Direct3D 11.1 runtime is present on the computer and pFeatureLevels is set to NULL, this function won’t create a D3D_FEATURE_LEVEL_11_1 device. To create a D3D_FEATURE_LEVEL_11_1 device, you must explicitly provide a D3D_FEATURE_LEVEL array that includes D3D_FEATURE_LEVEL_11_1. If you provide a D3D_FEATURE_LEVEL array that contains D3D_FEATURE_LEVEL_11_1 on a computer that doesn’t have the Direct3D 11.1 runtime installed, this function immediately fails with E_INVALIDARG.

FeatureLevels
Type: UINT 

The number of elements in pFeatureLevels.

SDKVersion
Type: UINT 

The SDK version; use D3D11_SDK_VERSION.

ppDevice
Type: ID3D11Device **

[out, optional] Returns the address of a pointer to an ID3D11Device object that represents the device created.

pFeatureLevel
Type: D3D_FEATURE_LEVEL *

[out, optional] If successful, returns the first D3D_FEATURE_LEVEL from the pFeatureLevels array which succeeded. Otherwise, returns 0.

ppImmediateContext
Type: ID3D11DeviceContext **

[out, optional] Returns the address of a pointer to an ID3D11DeviceContext object that represents the device context.

Return value

Type: HRESULT 

This method returns one of the Direct3D 11 return codes.

Remarks

Set ppDevice and ppImmediateContext to NULL to determine which feature level is supported by looking at pFeatureLevel without creating a device.

For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use D3D11CreateDeviceAndSwapChain.

If you set the pAdapter parameter to a non-NULL value, you must also set the DriverType parameter to the D3D_DRIVER_TYPE_UNKNOWN value. If you set the pAdapter parameter to a non-NULL value and the DriverType parameter to the D3D_DRIVER_TYPE_HARDWARE value, D3D11CreateDevice returns an HRESULT of E_INVALIDARG.

Differences between Direct3D 10 and Direct3D 11: In Direct3D 10, the presence of pAdapter dictated which adapter to use and the DriverType could mismatch what the adapter was. In Direct3D 11, if you are trying to create a hardware or a software device, set pAdapter != NULL which constrains the other inputs to be:
  • DriverType must be D3D_DRIVER_TYPE_UNKNOWN
  • Software must be NULL.
On the other hand, if pAdapter == NULL, the DriverType cannot be set to D3D_DRIVER_TYPE_UNKNOWN; it can be set to either:
  • If DriverType == D3D_DRIVER_TYPE_SOFTWARE, Software cannot be NULL.
  • If DriverType == D3D_DRIVER_TYPE_HARDWARE, the adapter used will be the default adapter, which is the first adapter that is enumerated by IDXGIFactory1::EnumAdapters.

Requirements

Header: Declared in d3d11_x.h (d3d11.h on other Windows platforms).