Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
Tópicos relacionados