Valor de referência de estêncil especificado pelo sombreador (elementos gráficos Direct3D 12)

Habilitar sombreadores de pixel para gerar o Valor de Referência do Estêncil, em vez de usar o especificado pela API, permite um controle granular muito fino sobre as operações de estêncil.

O Valor de Referência do Estêncil normalmente é especificado pelo método ID3D12GraphicsCommandList::OMSetStencilRef . Esse método define o valor de referência de estêncil em uma granularidade por desenho. No entanto, esse valor pode ser substituído pelo sombreador de pixel.

Esse recurso D3D12 (e D3D11.3) permite que os desenvolvedores leiam e usem o Valor de Referência de Estêncil (SV_StencilRef) que é gerado de um sombreador de pixel, permitindo uma granularidade por pixel ou por amostra.

O valor especificado do sombreador substitui o valor de referência especificado pela API para essa invocação, o que significa que a alteração afeta o teste de estêncil e quando a operação de estêncil D3D12_STENCIL_OP_REPLACE (um membro de D3D12_STENCIL_OP) é usada para gravar o valor de referência no buffer de estêncil.

Esse recurso é opcional em D3D12 e D3D11.3. Para testar seu suporte, marcar o campo booliano PSSpecifiedStencilRefSupported de D3D12_FEATURE_DATA_D3D12_OPTIONS usando CheckFeatureSupport.

Aqui está um exemplo do uso de SV_StencilRef em um sombreador de pixel:

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

Renderização

Associação de recursos no HLSL

Modelo de sombreador 5.1

Como especificar assinaturas raiz no HLSL