Condividi tramite


Metodo ID3D12GraphicsCommandList5::RSSetShadingRateImage (d3d12.h)

Imposta l'immagine di ombreggiatura dello spazio dello schermo per l'ombreggiatura a velocità variabile (VRS). Per altre informazioni, vedere Ombreggiatura a frequenza variabile (VRS). Questo metodo richiede il supporto dell'ombreggiatura a velocità variabile (VRS). Vedere D3D12_FEATURE_DATA_D3D12_OPTIONS6 e D3D12_VARIABLE_SHADING_RATE_TIER.

Sintassi

void RSSetShadingRateImage(
  ID3D12Resource *shadingRateImage
);

Parametri

shadingRateImage

Tipo: ID3D12Resource*

Puntatore facoltativo a un ID3D12Resource che rappresenta un'immagine con ombreggiatura dello spazio dello schermo. Se NULL, l'effetto è uguale a quello di un'immagine a frequenza di ombreggiatura in cui tutti i valori sono una frequenza di ombreggiatura di 1x1.

Questa trama deve avere lo stato D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE applicato.

Le dimensioni del riquadro dell'immagine a frequenza di ombreggiatura possono essere determinate tramite D3D12_FEATURE_DATA_D3D12_OPTIONS6. Le dimensioni dell'immagine a frequenza di ombreggiatura devono pertanto essere

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

L'immagine a frequenza di ombreggiatura deve essere una trama 2D con un singolo mip e formattare DXGI_FORMAT_R8_UINT. Ogni texel deve essere un valore corrispondente a D3D12_SHADING_RATE. Deve avere layout D3D12_TEXTURE_LAYOUT_UNKNOWN e non può essere una risorsa di profondità , destinazione di rendering, accesso simultaneo o multi-adapter.

Come (0, 0) è l'angolo superiore sinistro in DirectX, un'immagine a frequenza di ombreggiatura troppo piccola o grande genera un'immagine in basso o a destra senza ombreggiatura dell'area dell'immagine o l'estensione dell'immagine in queste direzioni. Quando c'è un eccesso, viene ignorato (ma legale) e quando l'immagine è troppo piccola, tutte le aree out-of-bounds in basso e destra avranno il tasso di ombreggiatura predefinito di 1x1 dall'immagine (tuttavia, questo non significa che è la frequenza finale di ombreggiatura. I combinatori verranno comunque applicati a questo valore predefinito 1x1.

Valore restituito

nessuno

Osservazioni

Per avere effetto sull'immagine dello spazio dello schermo, è necessario chiamare ID3D12GraphicsCommandList5::RSSetShadingRate per impostare i combinatori per l'ombreggiatura. In caso contrario, con i combinatori predefiniti (entrambi D3D12_SHADING_RATE_COMBINER_PASSTHROUGH), l'immagine con ombreggiatura dello spazio dello schermo viene ignorata per determinare la granularità dell'ombreggiatura.

Il secondo combinatore passato a [ID3D12GraphicsCommandList5::RSSetShadingRate] è quello che si applica all'immagine a velocità di ombreggiatura, che si verifica dopo la frequenza di ombreggiatura globale e la frequenza di ombreggiatura per primitiva sono state combinate.

L'algoritmo per la velocità di ombreggiatura finale è determinato da

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

dove ApplyCombiner è

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;
    }
}

Requisiti

Requisito Valore
Client minimo supportato Windows 10 Build 20348
Server minimo supportato Windows 10 Build 20348
Intestazione d3d12.h

Vedi anche

Ombreggiatura a velocità variabile (VRS)