シェーダー指定ステンシル参照値 (Direct3D 11 グラフィックス)

API 指定の値を使用するのではなく、ピクセル シェーダーからステンシル参照値を出力できるようにすると、ステンシル操作をきめ細かく制御できます。

シェーダー指定の値は、その呼び出しの API で指定された ステンシル参照値 を置き換えます。つまり、変更はステンシル テストの両方に影響し、ステンシル操作D3D11_STENCIL_OP_REPLACE ( D3D11_STENCIL_OP の 1 つのメンバー) を使用してステンシル バッファーに参照値を書き込む場合に影響します。

以前のバージョンの D3D11 では、ステンシル参照値は ID3D11DeviceContext::OMSetDepthStencilState メソッドでのみ指定できます。 つまり、この値は描画単位の粒度でのみ定義できます。 この D3D11.3 機能を使用すると、開発者はピクセル シェーダーから出力されるステンシル参照値 (SV_StencilRef) を読み取って使用できます。つまり、ピクセル単位またはサンプル単位の粒度で指定できます。

この機能は D3D11.3 では省略可能です。 そのサポートをテストするには、PSSpecifiedStencilRefSupportedID3D11Device::CheckFeatureSupport を使用して、D3D11_FEATURE_DATA_D3D11_OPTIONS2のブール型フィールドをチェックします。

ピクセル シェーダーでの の SV_StencilRef 使用例を次に示します。

uint main2(float4 c : COORD) : SV_StencilRef
{
    return uint(c.x);
}

Direct3D 11.3 の機能

シェーダー モデル 5.1