Capability Querying

Applications can discover the level of support for resource binding, and many other features, via the ID3D12Device::CheckFeatureSupport call.

Resource binding tiers

For resource binding, each tier is a superset of lower tiers in functionality, so code that works on a given tier works on any higher tier unchanged.

The number of resource binding tiers is stored in the D3D12_RESOURCE_BINDING_TIER enum.

To check the resource binding tier, use code such as

D3D12_FEATURE_DATA_D3D12_OPTIONS options;
mDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS,&options, sizeof(options));
switch (options.ResourceBindingTier)
{
    case D3D12_RESOURCE_BINDING_TIER_1:
     // Tier 1 is supported
    break;
    
    case D3D12_RESOURCE_BINDING_TIER_2:
     // Tier 1 and 2 are supported
    break;
            
    case D3D12_RESOURCE_BINDING_TIER_3:
     // Tier 1,2 and 3 are supported
    break;
  }

The following section shows the full range of options for checking feature support.

Check feature support

Select one member of the enum D3D12_FEATURE as input to CheckFeatureSupport to determine what features to request support information on. It can be one of the following.

D3D12_FEATURE_DATA_D3D12_OPTIONS

The D3D12_FEATURE_DATA_D3D12_OPTIONS structure holds a range of supported feature data.

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS  
    {  
    /* [annotation] */   
    _Out_  BOOL DoublePrecisionFloatShaderOps;  
    /* [annotation] */   
    _Out_  BOOL OutputMergerLogicOp;  
    /* [annotation] */   
    _Out_  D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;  
    /* [annotation] */   
    _Out_  D3D12_TILED_RESOURCES_TIER TiledResourcesTier;  
    /* [annotation] */   
    _Out_  D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;  
    /* [annotation] */   
    _Out_  BOOL PSSpecifiedStencilRefSupported;  
    /* [annotation] */   
    _Out_  BOOL TypedUAVLoadAdditionalFormats;  
    /* [annotation] */   
    _Out_  BOOL ROVsSupported;  
    /* [annotation] */   
    _Out_  D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;  
    /* [annotation] */   
    _Out_  UINT MaxGPUVirtualAddressBitsPerResource;  
    /* [annotation] */   
    _Out_  BOOL StandardSwizzle64KBSupported;  
    }   D3D12_FEATURE_DATA_D3D12_OPTIONS;
    

Refer to the following enums.

D3D12_FEATURE_DATA_ARCHITECTURE

The D3D12_FEATURE_DATA_ARCHITECTURE structure holds three booleans referencing tile based rendering and UMA support.

D3D12_FEATURE_DATA_FEATURE_LEVELS

The D3D12_FEATURE_DATA_FEATURE_LEVELS structure holds Direct3D feature level support information.

D3D12_FEATURE_DATA_FORMAT_SUPPORT

The D3D12_FEATURE_DATA_FORMAT_SUPPORT structure holds data format support details, and refer to the following enums.

Refer to Typed Unordered Access View Loads for an example use of this structure.

D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS

The D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS structure holds multi-sampling quality level support information, and refer to the D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG enum.

D3D12_FEATURE_DATA_FORMAT_INFO

The D3D12_FEATURE_DATA_FORMAT_INFO structure describes the supported DXGI_FORMAT and plane count.

For example,

inline UINT8 D3D12GetFormatPlaneCount(
    _In_ ID3D12Device* pDevice,
    DXGI_FORMAT Format
    )
{
    D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = {Format};
    if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo))))
    {
        return 0;
    }
    return formatInfo.PlaneCount;
}

D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT

The D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT structure provides the maximum number of bits for a virtual GPU address for resources, and for processes.

Hardware support for DXGI Formats

To view tables of DXGI formats and hardware features, refer to:

Resource Binding in Direct3D 12

Hardware Feature Levels

Root Signatures