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 |