Registros de ps_1_1__ps_1_2__ps_1_3__ps_1_4

Sombreadores de pixel dependem de registros para obter dados de vértice, para gerar dados de pixel, para manter resultados temporários durante os cálculos e para identificar estágios de amostragem de textura. Há vários tipos de registros, cada um com uma funcionalidade exclusiva. Esta seção contém informações de referência para os registros de entrada e saída implementados pela versão do sombreador de pixel 1_X.

Registra dados de retenção para uso pelo sombreador de pixel. Os registros são totalmente descritos nas seções a seguir.

  • Tipos de Registro descreve os quatro tipos de registros disponíveis e suas finalidades.
  • Ler Limite de Porta detalha as restrições ao uso de vários registros em uma única instrução.
  • Somente leitura Gravação de Leitura descreve quais registros podem ser usados para leitura, gravação ou ambos.
  • O intervalo detalha o intervalo dos dados do componente.

Tipos de registro

Nome Type Versão 1_1 Versão 1_2 Versão 1_3 Versão 1_4
c# Registro constante 8 8 8 8
R # Registro temporário 2 2 2 6
T # Registro de textura 4 4 4 6
V # Registro de cores 2 2 2 2 na fase 2

 

  • Os registros constantes contêm dados constantes. Os dados podem ser carregados em um registro constante usando SetPixelShaderConstantF ou podem ser definidos usando def - ps. Os registros constantes não são utilizáveis por instruções de endereço de textura. A única exceção é a instrução texm3x3spec - ps , que usa um registro constante para fornecer um vetor de raios oculares.

  • Registros temporários são usados para armazenar resultados intermediários. r0 também serve como a saída do sombreador de pixel. O valor em r0 no final do sombreador é a cor do pixel para o sombreador.

    A validação do sombreador falhará em CreatePixelShader em qualquer sombreador que tente ler de um registro temporário que não tenha sido escrito por uma instrução anterior. D3DXAssembleShader falhará da mesma forma, supondo que a validação esteja habilitada (não use D3DXSHADER_SKIPVALIDATION).

  • Registros de textura

    Para o sombreador de pixel versão 1_1 a 1_3, os registros de textura contêm dados de textura ou coordenadas de textura. Os dados de textura são carregados em um registro de textura quando uma textura é amostrada. A amostragem de textura usa coordenadas de textura para pesquisar ou amostrar um valor de cor nas coordenadas especificadas (u,v,w,q) ao levar em conta os atributos de estado do estágio de textura. Os dados da coordenada de textura são interpolados dos dados da coordenada de textura do vértice e estão associados a um estágio de textura específico. Há uma associação padrão um-para-um entre o número do estágio de textura e a ordem de declaração da coordenada de textura. Por padrão, o primeiro conjunto de coordenadas de textura definidas no formato de vértice está associado ao estágio de textura 0.

    Para essas versões de sombreador de pixel, os registros de textura se comportam como registros temporários quando usados por instruções aritméticas.

    Para o sombreador de pixel versão 1_4, os registros de textura (t#) contêm dados de coordenadas de textura somente leitura. Isso significa que o conjunto de coordenadas de textura e o número do estágio de textura são independentes uns dos outros. O número do estágio de textura (do qual amostrar uma textura) é determinado pelo número de registro de destino (r0 a r5). Para a instrução texld, o conjunto de coordenadas de textura é determinado pelo registro de origem (t0 a t5), de modo que o conjunto de coordenadas de textura pode ser mapeado para qualquer estágio de textura. Além disso, o registro de origem (especificando coordenadas de textura) para texld também pode ser um registro temporário (r#), nesse caso, o conteúdo do registro temporário é usado como coordenadas de textura.

  • Os registros de cor contêm valores de cor por pixel. Os valores são obtidos por iteração por pixel dos valores de cor difusa e especular nos dados de vértice. Para sombreadores de sombreador de pixel versão 1_4, os registros de cores só estão disponíveis durante a segunda fase.

    Se o modo de sombra estiver definido como D3DSHADE_FLAT, a iteração de ambas as cores de vértice (difusa e especular) será desabilitada. Independentemente do modo de sombra, a neblina ainda será iterada pelo pipeline se a neblina de pixel estiver habilitada. Tenha em mente que a neblina é aplicada mais tarde no pipeline do que o pixelshader.

    É comum carregar o registro v0 com os dados de cor difusa de vértice. Também é comum carregar o registro v1 com os dados de cor especular de vértice.

    Os valores de dados de cor de entrada são fixados (saturados) ao intervalo de 0 a 1 porque esse é o intervalo de entrada válido para registros de cores no sombreador de pixel.

    Sombreadores de pixel têm acesso somente leitura a registros de cores. O conteúdo desses registros são valores iterados, mas a iteração pode ser executada com precisão muito menor do que as coordenadas de textura.

Limite de porta de leitura

O limite de porta de leitura especifica o número de registros diferentes de cada tipo de registro que podem ser usados como um registro de origem em uma única instrução.

Nome Type Versão 1_1 Versão 1_2 Versão 1_3 Versão 1_4
c# Registro constante 2 2 2 2
R # Registro temporário 2 2 2 3
T # Registro de textura 2 3 3 1
V # Registro de cores 2 2 2 2 na fase 2

 

Por exemplo, os registros de cores para quase todas as versões têm um limite de porta de leitura de dois. Isso significa que uma única instrução pode usar no máximo dois registros de cores diferentes (v0 e v1, por exemplo) como registros de origem. Este exemplo mostra dois registros de cores sendo usados na mesma instrução:

mad r0, v1, c2, v0

Somente leitura, leitura/gravação

Os tipos de registro são identificados de acordo com a funcionalidade ro (somente leitura) ou a funcionalidade RW (leitura/gravação) na tabela a seguir. Os registros somente leitura só podem ser usados como registros de origem em uma instrução; eles nunca podem ser usados como um registro de destino.

Nome Type Versão 1_1 Versão 1_2 Versão 1_3 Versão 1_4
Nome Type 1_1 1_2 1_3 1_4
c# Registro constante RO RO RO RO
R # Registro temporário RW RW RW RW
T # Registro de textura RW RW RW Veja a observação a seguir
V # Registro de cores RO RO RO RO

 

Os registros compatíveis com RW podem ser usados para armazenar resultados intermediários. Isso inclui os registros temporários e os registros de textura para algumas das versões do sombreador.

Observação

  • Para o sombreador de pixel versão 1_4, os registros de textura são RO para instruções de endereçamento de textura e os registros de textura não podem ser lidos nem gravados em por instruções aritméticas. Além disso, como os registros de textura se tornaram registros de coordenadas de textura, ter acesso a RO não é uma regressão da funcionalidade anterior.

 

Intervalo

O intervalo é o valor máximo e mínimo de dados de registro. Os intervalos variam de acordo com o tipo de registro. Os intervalos para alguns dos registros podem ser consultados nas tampas do dispositivo usando GetDeviceCaps.

Nome Tipo Intervalo Versões
c# Registro constante -1 a +1 Todas as versões
R # Registro temporário - PixelShader1xMaxValue para + PixelShader1xMaxValue Todas as versões
T # Registro de textura - MaxTextureRepeat para + MaxTextureRepeat Todas as versões
V # Registro de cores 0 a 1 Todas as versões

 

O hardware do sombreador de pixel inicial representa dados em registros usando um número de ponto fixo. Isso limita a precisão a um máximo de aproximadamente oito bits para a parte fracionária de um número. Tenha isso em mente ao criar um sombreador.

Para o sombreador de pixel versão 1_1 a 1_3, MaxTextureRepeat deve ser no mínimo um. Para 1_4, MaxTextureRepeat deve ser um mínimo de oito.

Consulte D3DCAPS9 para obter mais informações sobre PixelShader1xMaxValue.

Registros