Compartilhar via


Modificadores para ps_1_X

Os modificadores de instrução afetam o resultado da instrução antes de serem gravados no registro de destino. Por exemplo, use-os para multiplicar ou dividir o resultado por um fator de dois ou para fixar o resultado entre zero e um. Os modificadores de instrução são aplicados após a execução da instrução, mas antes de gravar o resultado no registro de destino.

Uma lista dos modificadores é mostrada abaixo.

Modificador Descrição Syntax Versão 1_1 Versão 1_2 Versão 1_3 Versão 1_4
_x2 Multiplicar por 2 instruction_x2 X X X X
_x4 Multiplicar por 4 instruction_x4 X X X X
_x8 Multiplicar por 8 instruction_x8 X
_d2 Dividir por 2 instruction_d2 X X X X
_d4 Dividir por 4 instruction_d4 X
_d8 Dividir por 8 instruction_d8 X
_Sentado Saturação (grampo de 0 e 1) instruction_sat X X X X

 

  • O modificador de multiplicação multiplica os dados de registro por uma potência de dois após a leitura. Isso é o mesmo que um turno para a esquerda.
  • O modificador de divisão divide os dados de registro por uma potência de dois após a leitura. Isso é o mesmo que uma mudança para a direita.
  • O modificador saturado fixa o intervalo de valores de registro de zero a um.

Os modificadores de instrução podem ser usados em instruções aritméticas. Eles podem não ser usados em instruções de endereço de textura.

Multiplicar modificador

Este exemplo carrega o registro de destino (dest) com a soma das duas cores nos operandos de origem (src0 e src1) e multiplica o resultado por duas.

add_x2 dest, src0, src1

Este exemplo combina dois modificadores de instrução. Primeiro, duas cores nos operandos de origem (src0 e src1) são adicionadas. Em seguida, o resultado é multiplicado por dois e fixado entre 0,0 e 1,0 para cada componente. O resultado é salvo no registro de destino.

add_x2_sat dest, src0, src1

Modificar divisão

Este exemplo carrega o registro de destino (dest) com a soma das duas cores nos operandos de origem (src0 e src1) e divide o resultado por duas.

add_d2 dest, src0, src1

Modificador de saturação

Para instruções aritméticas, o modificador de saturação fixa o resultado dessa instrução no intervalo de 0,0 a 1,0 para cada componente. O exemplo a seguir mostra como usar esse modificador de instrução.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

Essa operação ocorre após qualquer modificador de instrução de multiplicação ou divisão. _sat é usado com mais frequência para fixar os resultados do produto de ponto. No entanto, ele também permite a emulação consistente de métodos multipassos em que o buffer de quadros está sempre no intervalo de 0 a 1 e da sintaxe de multitextura DirectX 6 e 7.0, na qual a saturação é definida para ocorrer em cada estágio.

Este exemplo carrega o registro de destino (dest) com a soma das duas cores nos operandos de origem (src0 e src1) e fixa o resultado no intervalo de 0,0 a 1,0 para cada componente.

add_sat dest, src0, src1

Este exemplo combina dois modificadores de instrução. Primeiro, duas cores nos operandos de origem (src0 e src1) são adicionadas. O resultado é multiplicado por dois e fixado entre 0,0 e 1,0 para cada componente. O resultado é salvo no registro de destino.

add_x2_sat dest, src0, src1

Instruções de sombreador de pixel