Partager via


ID3D12GraphicsCommandList5 ::RSSetShadingRateImage, méthode (d3d12.h)

Définit l’image de taux d’ombrage de l’espace d’écran pour l’ombrage à taux variable (VRS). Pour plus d’informations, consultez Trame de fond à taux variable (VRS). Cette méthode nécessite la prise en charge de l’ombrage à taux variable (VRS) tier2. Voir D3D12_FEATURE_DATA_D3D12_OPTIONS6 et D3D12_VARIABLE_SHADING_RATE_TIER.

Syntaxe

void RSSetShadingRateImage(
  ID3D12Resource *shadingRateImage
);

Paramètres

shadingRateImage

Type : ID3D12Resource*

Pointeur facultatif vers une source ID3D12Resource représentant une image de taux d’ombrage de l’espace d’écran. Si la valeur est NULL, l’effet est le même que d’avoir une image de taux d’ombrage où toutes les valeurs sont un taux d’ombrage de 1x1.

L’état D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE doit être appliqué à cette texture.

La taille de la vignette de l’image de taux d’ombrage peut être déterminée via D3D12_FEATURE_DATA_D3D12_OPTIONS6. La taille de l’image de taux d’ombrage doit donc être

ceil((float)rtWidth / VRSTileSize), ceil((float)rtHeight / VRSTileSize)

L’image de taux d’ombrage doit être une texture 2D avec un seul mip et mettre en forme DXGI_FORMAT_R8_UINT. Chaque texel doit être une valeur correspondant à D3D12_SHADING_RATE. Il doit avoir une disposition D3D12_TEXTURE_LAYOUT_UNKNOWN et ne peut pas être une ressource de profondeur-gabarit, de cible de rendu, d’accès simultané ou de ressource inter-adaptateurs.

Étant donné que (0, 0) est le haut à gauche dans DirectX, une image de taux d’ombrage trop petit ou grand entraîne l’absence de zone d’image de taux d’ombrage en bas ou à droite, ou l’image s’étend dans ces directions. En cas d’excès, il est ignoré (mais légal) et lorsque l’image est trop petite, toutes les zones hors limites en bas et à droite ont le taux d’ombrage par défaut de 1x1 par rapport à l’image (toutefois, cela ne signifie pas qu’il s’agit du taux d’ombrage final. Les combinateurs sont toujours appliqués à cette valeur par défaut 1x1).

Valeur de retour

None

Remarques

Pour que l’image de taux d’ombrage de l’espace d’écran prenne effet, ID3D12GraphicsCommandList5 ::RSSetShadingRate doit avoir été appelé pour définir les combinateurs pour l’ombrage. Sinon, avec les combiners par défaut ( les deux D3D12_SHADING_RATE_COMBINER_PASSTHROUGH), l’image de taux d’ombrage de l’espace d’écran est ignorée pour déterminer la granularité de l’ombrage.

Le deuxième combinateur passé à [ID3D12GraphicsCommandList5 ::RSSetShadingRate] est celui qui s’applique à l’image de taux d’ombrage, qui se produit après la combinaison du taux d’ombrage global et du taux d’ombrage par primitive.

L’algorithme pour le taux d’ombrage final est déterminé par

postRasterizerRate = ApplyCombiner(Combiners[0], CommandListShadingRate, Primitive->PrimitiveSpecifiedShadingRate);
finalRate = ApplyCombiner(Combiners[1], postRasterizerRate, ScreenSpaceImage[xy]);

ApplyCombiner est

UINT ApplyCombiner(D3D12_SHADING_RATE_COMBINER combiner, UINT a, UINT b)
{
    MaxShadingRate = options6.AdditionalShadingRatesSupported ? 4 : 2;
    switch (combiner)
    {
        case D3D12_SHADING_RATE_COMBINER_PASSTHROUGH: // default
            return a;
        case D3D12_SHADING_RATE_COMBINER_OVERRIDE:
            return b;
        case D3D12_SHADING_RATE_COMBINER_MAX:
            return max(a, b);
        case D3D12_SHADING_RATE_COMBINER_MIN:
            return min(a, b);
        case D3D12_SHADING_RATE_COMBINER_SUM:
            return min(MaxShadingRate, a + b);
        case default:
            return a;
    }
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 Build 20348
Serveur minimal pris en charge Windows 10 Build 20348
En-tête d3d12.h

Voir aussi

Ombrage à taux variable (VRS)