Some features of Direct3D 11 are not fully specified by feature levels. This topic describes exceptions when using Direct3D 11 on downlevel hardware. Perhaps a feature was added after the feature level is defined (and requires an updated driver) or perhaps different GPUs implement widely different implementations. Feature level exceptions can be gathered into the following groups:
- Extended Formats
- Multisample Anti-Aliasing
- Texture2D Sizes
- Special Behavior of Adapters for Feature Level 9
- Related topics
An extended format is a pixel format added to Direct3D 10.1 and Direct3D 11 for feature levels 10_0 and 10_1. An extended format requires an updated driver (for Direct3D 10_1 or below). Use ID3D11Device::CheckFormatSupport and ID3D11Device::CheckFeatureSupport to query for support for these extended formats.
An extended format:
- Adds support for BGRA order of 8-bit per-component resources.
- Allows casting of an integer-value swap-chain buffer. This allows an application to add or remove the _SRGB suffix or render to an XR_BIAS swap chain.
- Adds optional support for DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM.
- Guarantees that a DXGI_FORMAT_R16G16B16A16_FLOAT swap chain is presented as if the data contained is not sRGB-encoded.
The full set of extended formats are either fully supported or not supported, with the exception of the XR_BIAS format. The XR_BIAS format is:
- Unsupported in any 9 level
- Optional in either the 10_0 or 10_1 level
- Guaranteed at the 11_0 level
MSAA implementations have little in common across GPU implementations. Feature Level 10.1 added some well-defined minima, but at lower feature levels, MSAA must be tested explicitly using ID3D11Device::CheckMultisampleQualityLevels.
A feature level guarantees that a minimum size can be created, however, an application can create larger textures up to the full size supported by the GPU. An application should expect failure from a method such as ID3D11Device::CreateTexture2D if a maximum is exceeded.
The three lowest feature levels D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 and D3D_FEATURE_LEVEL_9_3, share a common implementation DLL and treat the IDXGIAdapter argument to D3D11CreateDevice[AndSwapchain] as a template adapter and create their own adapter as part of device creation. This means that the IDXGIAdapter passed into the creation routine will not be the same adapter as that retrieved from the device via IDXGIDevice::GetAdapter. The impact of this is that the IDXGIOutputs enumerated from the passed-in adapter cannot be used to enter fullscreen using any level 9 device, since those outputs are not owned by the device's adapter. It is good practice to discard the passed-in template adapter and retrieve the device's created adapter using IDXGIDevice::GetAdapter, where IDXGIDevice can be retrieved using QueryInterface from the Direct3D device interface.