Share via


Método ID3D12GraphicsCommandList5::RSSetShadingRateImage (d3d12.h)

Define a imagem de taxa de sombreamento de espaço de tela para VRS (sombreamento de taxa variável). Para obter mais informações, consulte VRS (sombreamento de taxa variável). Esse método requer suporte a VRS (sombreamento de taxa variável) de Camada2. Confira D3D12_FEATURE_DATA_D3D12_OPTIONS6 e D3D12_VARIABLE_SHADING_RATE_TIER.

Sintaxe

void RSSetShadingRateImage(
  ID3D12Resource *shadingRateImage
);

Parâmetros

shadingRateImage

Tipo: ID3D12Resource*

Um ponteiro opcional para um ID3D12Resource que representa uma imagem de taxa de sombreamento de espaço na tela. Se FOR NULL, o efeito será o mesmo que ter uma imagem de taxa de sombreamento em que todos os valores são uma taxa de sombreamento de 1x1.

Essa textura deve ter o estado D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE aplicado.

O tamanho do bloco da imagem de taxa de sombreamento pode ser determinado por meio de D3D12_FEATURE_DATA_D3D12_OPTIONS6. O tamanho da imagem de taxa de sombreamento deve, portanto, ser

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

A imagem de taxa de sombreamento deve ser uma textura 2D com um único mip e formatar DXGI_FORMAT_R8_UINT. Cada texel deve ser um valor correspondente a D3D12_SHADING_RATE. Ele deve ter layout D3D12_TEXTURE_LAYOUT_UNKNOWN e não pode ser um recurso de estêncil de profundidade, destino de renderização, acesso simultâneo ou adaptador cruzado.

Como (0, 0) é o canto superior esquerdo no DirectX, uma imagem muito pequena ou grande de taxa de sombreamento resulta na parte inferior ou direita sem nenhuma área de imagem de taxa de sombreamento ou a imagem se estendendo nessas direções. Quando há excesso, ele é ignorado (mas legal) e quando a imagem é muito pequena, todas as áreas fora dos limites na parte inferior e direita terão a taxa de sombreamento padrão de 1x1 da imagem (no entanto, isso não significa que seja a taxa de sombreamento final. Os combinadores ainda serão aplicados a esse valor padrão 1x1).

Retornar valor

Nenhum

Comentários

Para que a imagem de taxa de sombreamento de espaço na tela tenha efeito, ID3D12GraphicsCommandList5::RSSetShadingRate deve ter sido chamado para definir os combinadores para sombreamento. Caso contrário, com os combinadores padrão (ambos D3D12_SHADING_RATE_COMBINER_PASSTHROUGH), a imagem de taxa de sombreamento de espaço na tela é ignorada ao determinar a granularidade de sombreamento.

O segundo combinador passado para [ID3D12GraphicsCommandList5::RSSetShadingRate] é aquele que se aplica à imagem de taxa de sombreamento, que ocorre após a taxa de sombreamento global e a taxa de sombreamento por primitiva terem sido combinadas.

O algoritmo para taxa de sombreamento final é determinado por

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

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10 Build 20348
Servidor mínimo com suporte Windows 10 Build 20348
Cabeçalho d3d12.h

Confira também

VRS (sombreamento de taxa variável)