ID3D12GraphicsCommandList5::RSSetShadingRateImage メソッド (d3d12.h)

可変レート シェーディング (VRS) の画面空間シェーディング レート イメージを設定します。 詳細については、「 可変レート シェーディング (VRS)」を参照してください。 この方法では、Tier2 可変レート シェーディング (VRS) のサポートが必要です。 「D3D12_FEATURE_DATA_D3D12_OPTIONS6D3D12_VARIABLE_SHADING_RATE_TIER」を参照してください。

構文

void RSSetShadingRateImage(
  ID3D12Resource *shadingRateImage
);

パラメーター

shadingRateImage

型: ID3D12Resource*

画面空間シェーディング レートイメージを表す ID3D12Resource へのオプションのポインター。 NULL の場合、効果は、すべての値が 1x1 のシェーディング レートであるシェーディング レートイメージを持つことと同じです。

このテクスチャには、 D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE 状態が適用されている必要があります。

シェーディング レート イメージのタイル サイズは、 D3D12_FEATURE_DATA_D3D12_OPTIONS6を使用して決定できます。 したがって、シェーディング レート イメージのサイズは次のようになります。

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

シェーディング レート イメージは、1 つのミップとフォーマット DXGI_FORMAT_R8_UINTを持つ 2D テクスチャである必要があります。 各テクセルは、 D3D12_SHADING_RATEに対応する値である必要があります。 レイアウト D3D12_TEXTURE_LAYOUT_UNKNOWN 必要があり、深度ステンシル、レンダー ターゲット、同時アクセス、またはクロスアダプター リソースにすることはできません。

(0, 0) が DirectX の左上にあるように、小さすぎるか大きいシェーディング レートの画像が、シェーディング レートイメージ領域を持たないか、またはこれらの方向に延びる画像を持たない下または右になります。 超過分がある場合は無視されます (ただし、有効です)、画像が小さすぎると、上下のすべての境界外領域のイメージからの既定のシェーディング レートは 1x1 になります (ただし、これは最終的なシェーディング レートを意味するものではありません)。コンバイナーは引き続きこの 1 x 1 の既定値に適用されます)。

戻り値

なし

解説

スクリーン スペース シェーディング レート イメージが影響を受けるためには、シェーディング用のコンバイナーを設定するために ID3D12GraphicsCommandList5::RSSetShadingRate が呼び出されている必要があります。 それ以外の場合、既定のコンバイナー ( 両方のD3D12_SHADING_RATE_COMBINER_PASSTHROUGH) では、シェーディングの粒度を決定する際に画面空間シェーディング レート イメージは無視されます。

[ID3D12GraphicsCommandList5::RSSetShadingRate] に渡される 2 つ目のコンバイナーは、グローバル シェーディング レートとプリミティブごとのシェーディング レートが結合された後に発生するシェーディング レート イメージに適用されます。

最終的なシェーディング レートのアルゴリズムは、

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

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

要件

   
サポートされている最小のクライアント Windows 10 ビルド 20348
サポートされている最小のサーバー Windows 10 ビルド 20348
ヘッダー d3d12.h

こちらもご覧ください

可変レート シェーディング (VRS)