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
Tópicos relacionados