Compartilhar via


dcl_usage saída (sm1, sm2, sm3 - vs asm)

Os vários tipos de registros de saída foram recolhidos em doze registros de saída (dois para cor, oito para textura, um para posição e outro para neblina e tamanho do ponto). Elas podem ser usadas para qualquer coisa que o usuário queira interpolar para o sombreador de pixels: coordenadas de textura, cores, neblina e assim por diante.

Os registros de saída exigem declarações que incluem semântica. Por exemplo, os registros antigos de posição e tamanho de ponto são substituídos declarando um registro de saída com uma posição ou semântica de tamanho de ponto.

Dos doze registros de saída, qualquer dez (não necessariamente o0 a o9) têm quatro componentes (xyzw), outro deve ser declarado como posição (e também deve incluir todos os quatro componentes) e, opcionalmente, mais um pode ser um tamanho de ponto escalar.

Sintaxe

A sintaxe para declarar registros de saída é semelhante às declarações do registro de entrada:

  • dcl_semantics o[.write_mask]

Onde:

  • dcl_semantics pode usar o mesmo conjunto de semântica que para a declaração de entrada. Nomes semânticos vêm de D3DDECLUSAGE (e são emparelhados com um índice, como position3). Sempre deve haver um registro de saída com a semântica positiont0 quando não é usado para processar vértices. A semântica positiont0 e a semântica pointsize0 são as únicas que têm significado além de simplesmente permitir a vinculação de sombreadores de vértice a pixel. Para sombreadores com controle de fluxo, supõe-se que a saída de pior caso seja declarada. Não haverá padrões se um sombreador não gerar de fato o que ele declara que deve (devido ao controle de fluxo).
  • o é um registro de saída. Consulte Output_Registers.
  • write_mask indica o mesmo registro de saída que pode ser declarado várias vezes (portanto, a semântica diferente pode ser aplicada a componentes individuais), cada vez com uma máscara de gravação exclusiva. No entanto, a mesma semântica não pode ser usada várias vezes em uma declaração. Isso significa que os vetores devem ser quatro componentes ou menos e não podem passar por limites de registro de quatro componentes (registros individuais). Quando a semântica de tamanho de ponto é usada, ela deve ter uma máscara de gravação completa porque é considerada escalar. Quando a semântica de posição é usada, ela deve ter uma máscara de gravação completa porque todos os quatro componentes precisam ser gravados.

Comentários

Versões do sombreador de vértice 3_0 3_sw
dcl_usage x x

Todas as instruções dcl_usage devem aparecer antes da primeira instrução executável.

Exemplos de declaração

vs_3_0
dcl_color4     o3.x    // color4 is a semantic name.
dcl_texcoord3  o3.yz   // Different semantics can be packed into one register.
dcl_fog        o3.w 
dcl_tangent    o4.xyz
dcl_position   o7.xyzw // position must be declared to some unique register 
                       //   in a vertex shader, with all 4 components.

dcl_psize      o6      // Pointsize cannot have a mask 
                       //   (that is, mask is full .xyzw)
                       // This is an implied scalar register. 
                       // No other semantics can be assigned to any components
                       //   of this register.
                       // If pointsize declaration is not used (typical),
                       //   only 11 "out" registers are available, not 12.
                       // Pixel shaders cannot see this value.

Instruções de sombreador de vértice