DirectX-Specs

Feature Level 12_2

Objectives

Feature level 12_2 exists as a means by which to standardize a set of features across the GPU ecosystem in a way that improves customers’ experience with graphical games and applications on the Windows platform.

Querying and API

The runtime queries the graphics driver for the 12_2 feature level in the same manner it queries for other feature levels.

Remark

While feature level 12_2 could be inferred based on the right set of caps being at the right values, the runtime does not do this because inferring feature levels goes against pre-existing designs. Feature level 12_2 is something explicitly reported by the driver.

The enumeration value for 12_2 is expressed as follows:

typedef
enum D3D_FEATURE_LEVEL
{
    // ...
	D3D_FEATURE_LEVEL_12_2 = 0xc200

} 	D3D_FEATURE_LEVEL;

Feature level 12_2 is requested in the same manner as other feature levels, e.g., when creating a device:

    ComPtr<ID3D12Device> device;
    D3D_FEATURE_LEVEL featureLevel = D3D_FEATURE_LEVEL_12_2;
    HRESULT hr = D3D12CreateDevice(nullptr, featureLevel, IID_PPV_ARGS(&m_spDevice));
    if (SUCCEEDED(hr))
    {
        // feature level is supported by default adapter
    } 

Capabilities

Feature level 12_2 is expressed in terms of capabilities and feature tiers directly queryable through CheckFeatureSupport.

If a device is feature level 12_2, it has

Feature 12_2 proposed minimum Public spec
Required driver model WDDM 2.0  
Shader Model 6.5 Link
Raytracing tier Tier 1.1 Link
Variable shading rate Tier 2 Link
Mesh shader tier Tier 1 Link
Sampler feedback Tier 0.9 Link
Resource Binding Tier Tier 3 Link
Tiled Resources Tier 3  
Conservative Rasterization Tier 3 Link
RootSignatureTier 1.1 Link
DepthBoundsTestSupported TRUE Link
WriteBufferImmediateSupportFlags Direct, Compute, Bundle  
MaxGPUVirtualAddressBitsPerResource 40  
MaxGPUVirtualAddressBitsPerProcess 40  

Additionally, it has the following flags set

Feature 12_2 proposed value
WaveOps TRUE
OutputMergerLogicOp TRUE
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportWithoutGSEmulation TRUE
CopyQueueTimestampQueriesSupported TRUE
CastingFullyTypedFormatSupported TRUE
UnalignedBlockTexturesSuported TRUE
Int64ShaderOps TRUE

Remark

Some specifications, especially those from before the May 2019 Update, are not migrated to the DirectX-Specs repo.

DDI

The Direct3D 12 UMD DDI has an enumeration, D3D12DDI_3DPIPELINELEVEL, for describing feature levels. This enumeration has a value for feature level 12.2:

typedef enum D3D12DDI_3DPIPELINELEVEL
{
    // ...
    D3D12DDI_3DPIPELINELEVEL_12_2 = 14,
} D3D12DDI_3DPIPELINELEVEL;

To find out which feature levels a driver supports, the runtime calls PFND3D12DDI_GETCAPS with

The difference between these two usages of GetCaps is as follows

Selector Data interpretation Valid returnable feature levels
3DPIPELINESUPPORT D3D12DDI_3DPIPELINELEVEL, simple output value 12.1 and earlier
3DPIPELINESUPPORT1 D3D12DDI_3DPIPELINESUPPORT1_DATA_0081, structure with an input and output field any, including 12.2 and later

The definition of D3D12DDI_3DPIPELINESUPPORT1_DATA_0081 is as follows

typedef struct D3D12DDI_3DPIPELINESUPPORT1_DATA_0081
{
    D3D12DDI_3DPIPELINELEVEL HighestRuntimeSupportedFeatureLevel; // input
    D3D12DDI_3DPIPELINELEVEL MaximumDriverSupportedFeatureLevel;  // output
} D3D12DDI_3DPIPELINESUPPORT1_DATA_0081;

For 3DPIPELINESUPPORT1, the runtime sets the value of HighestRuntimeSupportedFeatureLevel. The driver returns a value for MaximumDriverSupportedFeatureLevel which does not exceed HighestRuntimeSupportedFeatureLevel.

Remark

In practice:

Discrepency in API-level and DDI-level reported capabilities

The WriteBufferImmediateSupportFlags capability D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE is switched on at the API level for drivers which report D3D12DDI_COMMAND_QUEUE_FLAG_3D at the DDI level.

Validation

There is a Direct3D 12 conformance test to validate that a Direct3D 12 device created with feature level 12_2 capability satisfies at least the capabilities outlined in the Capabilities section of this document. This is a conformance test, not an HLK test because it exercises behaviors of the runtime not the driver. Other tests, external to the specific test for feature level 12_2, are in place to ensure that CheckFeatureSupport capabilities properly match with device behavior.