dcl_usage salida (sm1, sm2, sm3 - vs asm)

Los distintos tipos de registros de salida se han contraído en doce registros de salida (dos para color, ocho para textura, uno para posición y otro para niebla y tamaño de punto). Se pueden usar para todo lo que el usuario quiera interpolar para el sombreador de píxeles: coordenadas de textura, colores, niebla, etc.

Los registros de salida requieren declaraciones que incluyen semántica. Por ejemplo, los registros de posición y tamaño de punto antiguos se reemplazan declarando un registro de salida por una semántica de posición o tamaño de punto.

De los doce registros de salida, los diez (no necesariamente o0 a o9) tienen cuatro componentes (xyzw), otro debe declararse como posición (y también debe incluir los cuatro componentes) y, opcionalmente, uno más puede ser un tamaño de punto escalar.

Sintaxis

La sintaxis para declarar los registros de salida es similar a las declaraciones del registro de entrada:

  • dcl_semantics o[.write_mask]

Dónde:

  • dcl_semantics puede usar el mismo conjunto de semánticas que para la declaración de entrada. Los nombres semánticos proceden de D3DDECLUSAGE (y se emparejan con un índice, como position3). Siempre debe haber un registro de salida con la semántica positiont0 cuando no se usa para procesar vértices. La semántica positiont0 y la semántica pointsize0 son las únicas que tienen significado más allá de simplemente permitir la vinculación de vértices a sombreadores de píxeles. En el caso de los sombreadores con control de flujo, se supone que se declara la salida en el peor de los casos. No hay ningún valor predeterminado si un sombreador no genera realmente lo que declara que debe (debido al control de flujo).
  • o es un registro de salida. Consulte Output_Registers.
  • write_mask indica el mismo registro de salida que se puede declarar varias veces (por lo que se puede aplicar una semántica diferente a componentes individuales), cada vez con una máscara de escritura única. Sin embargo, la misma semántica no se puede usar varias veces en una declaración. Esto significa que los vectores deben ser cuatro componentes o menos y no pueden atravesar límites de registro de cuatro componentes (registros individuales). Cuando se usa la semántica de tamaño de punto, debe tener una máscara de escritura completa porque se considera escalar. Cuando se usa la semántica de posición, debe tener una máscara de escritura completa porque los cuatro componentes deben escribirse.

Observaciones

Versiones del sombreador de vértices 3_0 3_sw
dcl_usage x x

Todas las instrucciones dcl_usage deben aparecer antes de la primera instrucción ejecutable.

Ejemplos de declaración

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.

Instrucciones del sombreador de vértices