Modificadores para ps_1_X

Os modificadores de instrução afetam o resultado da instrução antes que ela seja gravada 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 depois que a instrução é executada, mas antes de gravar o resultado no registro de destino.

Uma lista dos modificadores é mostrada abaixo.

Modificador Descrição Sintaxe 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
_sat Saturação (grampo de 0 e 1) instruction_sat X X X X

 

  • O modificador de multiplicação multiplica os dados do registro por uma potência de dois depois que eles são lidos. Isto é o mesmo que um desvio para a esquerda.
  • O modificador de divisão divide os dados do registro por uma potência de dois depois que eles são lidos. Isto é o mesmo que uma viragem para a direita.
  • O modificador de saturação fixa o intervalo de valores de registro de zero a um.

Os modificadores de instruções podem ser usados em instruções aritméticas. Não podem ser utilizados nas instruções de endereço de textura.

Modificador de multiplicação

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 dois.

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. O resultado é então multiplicado por dois e fixado entre 0,0 e 1,0 para cada componente. O resultado é guardado no registo de destino.

add_x2_sat dest, src0, src1

Modificador de 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 dois.

add_d2 dest, src0, src1

Modificador de saturação

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

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

Esta operação ocorre após qualquer modificador de instrução de multiplicação ou divisão. _sat é mais frequentemente usado para fixar resultados de produtos de pontos. No entanto, ele também permite a emulação consistente de métodos multipass onde o buffer de quadros está sempre no intervalo de 0 a 1, e da sintaxe 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 a 1,0 para cada componente. O resultado é guardado no registo de destino.

add_x2_sat dest, src0, src1

Instruções do Pixel Shader