Interrogation des fonctionnalités

Votre application peut découvrir le niveau de prise en charge de la liaison de ressources (ainsi que le niveau de prise en charge de nombreuses autres fonctionnalités), avec un appel à ID3D12Device::CheckFeatureSupport.

Comment interroger le niveau de liaison de ressources

Ce premier exemple se concentre sur la liaison de ressources. Chaque niveau de liaison de ressources est un sur-ensemble de niveaux inférieurs de fonctionnalités, de sorte que le code qui fonctionne sur un niveau donné fonctionne comme inchangé sur n’importe quel niveau supérieur.

Les niveaux de liaison de ressources sont des constantes dans l’énumération D3D12_RESOURCE_BINDING_TIER .

Pour interroger le niveau de liaison de ressources, utilisez un code tel que celui-ci. Cet exemple de code illustre le modèle général d’interrogation pour l’un des différents types de prise en charge des fonctionnalités.

D3D12_RESOURCE_BINDING_TIER get_resource_binding_tier(::ID3D12Device* pIDevice)
{
    D3D12_FEATURE_DATA_D3D12_OPTIONS featureSupport{};
    winrt::check_hresult(
        pIDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &featureSupport, sizeof(featureSupport))
    );

    switch (featureSupport.ResourceBindingTier)
    {
    case D3D12_RESOURCE_BINDING_TIER_1:
        // Tier 1 is supported.
        break;

    case D3D12_RESOURCE_BINDING_TIER_2:
        // Tiers 1 and 2 are supported.
        break;

    case D3D12_RESOURCE_BINDING_TIER_3:
        // Tiers 1, 2, and 3 are supported.
        break;
    }

    return featureSupport.ResourceBindingTier;
}

Notez que toute constante énumérée que vous passez (D3D12_FEATURE_D3D12_OPTIONS, dans ce cas) a une structure de données correspondante qui reçoit des informations sur cette fonctionnalité ou cet ensemble de fonctionnalités (D3D12_FEATURE_DATA_D3D12_OPTIONS, dans ce cas). Passez toujours un pointeur vers la structure qui correspond à la constante énumérée que vous passez.

Comment interroger n’importe quel niveau de fonctionnalité

En plus du niveau de liaison de ressources, il existe de nombreuses autres fonctionnalités dont vous pouvez interroger le niveau de prise en charge en utilisant le même modèle que celui indiqué dans l’exemple de code ci-dessus. Vous passez simplement une constante différente de l’énumération D3D12_FEATURE à ID3D12Device::CheckFeatureSupport (pour indiquer à l’API la fonctionnalité sur laquelle demander des informations de support), et vous passez un pointeur vers un instance de la structure correspondante (dans laquelle recevoir les informations demandées).

Prise en charge matérielle des formats DXGI

Pour afficher les tables des formats DXGI et des fonctionnalités matérielles, reportez-vous à ces rubriques.