Compartilhar via


Registro de Profundidade de Saída

O registro de profundidade de saída do sombreador de pixel (oDepth) é um registro escalar somente gravação com o intervalo [0..1] que retorna um novo valor de profundidade para um teste de profundidade em relação ao buffer de estêncil de profundidade.

Sintaxe

oDepth

 

Em que:

Nome Descrição
oDepth Novo valor de profundidade para um teste de profundidade em relação ao buffer de estêncil de profundidade

 

É importante estar ciente de que gravar no oDepth causa a perda de qualquer algoritmo de otimização de buffer de profundidade específico do hardware (ou seja, Z hierárquico) que acelera o desempenho do teste de profundidade.

É necessário replicar o swizzle de origem (.x | .y | .z | .w) ao gravar em oDepth. Máscaras de gravação explícitas não são permitidas.

Gravar no registro oDepth substitui o valor de profundidade interpolada (e ignora qualquer desvio de profundidade/renderizações de escala de inclinação). Se nenhum buffer de profundidade tiver sido criado ou anexado ao dispositivo, a gravação em oDepth será ignorada.

Se você estiver usando várias amostras e gravar em oDepth, como o sombreador de pixel é executado apenas uma vez por pixel, o valor de profundidade é replicado para todos os locais de sub-amostra cobertos. O teste de profundidade ainda acontece por exemplo, mas você não tem um valor de profundidade por amostra entrando na comparação do sombreador de pixel como faria se não escrevesse oDepth.

Se um aplicativo tiver um w-buffer definido como seu buffer de profundidade, ele precisará levar isso em conta durante a gravação em oDepth. Ele potencialmente precisa enviar informações de intervalo w para o sombreador de pixel e calcular o intervalo w para dimensionar os valores w gravados para oDepth.

Restrições de ps_2_0 e ps_2_x

  • ODepth só pode ser escrito com a instrução mov - ps e só pode ser feito uma vez.
  • Nenhum modificador de origem é permitido ao gravar no oDepth.
  • Nenhum modificador de instrução é permitido ao gravar no oDepth.
  • Nenhuma gravação no oDepth de dentro de um constructo de controle de fluxo ou ao usar a precação.

Restrições de ps_3_0

  • Por ps_3_0, os registros de saída oC# e oD# podem ser gravados várias vezes. A saída do sombreador de pixel vem do conteúdo dos registros de saída no final da execução do sombreador. Se uma gravação em um registro de saída não acontecer, talvez devido ao controle de fluxo ou se o sombreador simplesmente não o tiver gravado, o destino de renderização correspondente também não será atualizado. Se um subconjunto dos canais em um registro de saída for gravado, os valores indefinidos serão gravados nos canais restantes.
  • Você pode gravar no oDepth no controle de fluxo ou na precação, desde que todos os caminhos possíveis eventualmente sejam gravados no registro.
  • Você não pode executar cálculos de gradiente (ou operações que invocam implicitamente cálculos de gradiente, como texld - ps_2_0 e para cima, texldb - ps, texldp - ps) dentro de instruções de controle de fluxo cujas condições de ramificação variam por primitiva (ou seja: instruções de controle de fluxo dinâmico). A precação de instrução não é considerada controle de fluxo dinâmico.

Registros