Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La fase de IA (basada en la semántica de entrada proporcionada por el usuario) genera valores generados por el sistema para permitir ciertas eficiencias en las operaciones del sombreador.
Al adjuntar datos, como un identificador de instancia (visible para VS), un identificador de vértice (visible para VS) o un identificador primitivo (visible para GS/PS), una fase posterior del sombreador puede buscar estos valores del sistema para optimizar el procesamiento en esa fase. Por ejemplo, la fase VS puede buscar el identificador de instancia para obtener datos adicionales por vértice para el sombreador o para realizar otras operaciones; las fases GS y PS pueden usar el identificador de primitiva para obtener datos por primitiva del mismo modo.
Nota:
Estos valores generados por el sistema direct3D se aplican a las aplicaciones, independientemente de si usan el modelo de aplicación Win32 o UWP.
VertexID
Cada fase del sombreador usa un identificador de vértice para identificar cada vértice. Es un entero de 32 bits sin signo cuyo valor predeterminado es 0. Se asigna a un vértice cuando se procesa el primitivo durante la etapa IA. Asocie la semántica vertex-id a la declaración de entrada del sombreador para indicar a la fase de IA que genere un identificador por vértice.
El IA agregará un identificador de vértice a cada vértice para que lo usen las fases del sombreador. Para cada llamada de dibujo, el identificador de vértice se incrementa en 1. Entre las llamadas de dibujo indexadas, el recuento se restablece al valor inicial. Para ID3D11DeviceContext::DrawIndexed e ID3D11DeviceContext::DrawIndexedInstanced, el identificador de vértice representa el valor del índice. Si el id del vértice se desborda (supera 2³²–1), vuelve a 0.
Para todos los tipos primitivos, los vértices tienen un identificador de vértice asociado a ellos (independientemente de la adyacencia).
PrimitiveID
Cada fase del sombreador usa un identificador primitivo para identificar cada primitivo. Es un entero de 32 bits sin signo cuyo valor predeterminado es 0. Se asigna a un primitivo cuando la fase IA procesa el primitivo. Para indicar a la etapa IA que genere un identificador de primitiva, adjunte la semántica primitive-id a la declaración de entrada del sombreador.
La fase IA agregará un identificador de primitiva a cada primitiva para que lo utilicen el sombreador de geometría o la fase del sombreador de píxeles (la que sea la primera fase activa después de la fase IA). Para cada llamada a draw indizada, el identificador primitivo se incrementa en 1, pero el identificador primitivo se restablece a 0 cada vez que se inicia una nueva instancia. Todas las demás llamadas a draw no cambian el valor del identificador de instancia. Si el identificador de instancia se desborda (supera 2³²– 1), se ajusta a 0.
La fase del sombreador de píxeles no tiene una entrada independiente para un identificador primitivo; sin embargo, cualquier entrada del sombreador de píxeles que especifique un identificador primitivo usa un modo de interpolación constante.
No hay compatibilidad para generar automáticamente un identificador primitivo para primitivos adyacentes. Para los tipos primitivos con adyacencia, como una franja de triángulos con adyacencia, solo se mantiene un identificador primitivo para los primitivos interiores (los primitivos no adyacentes), al igual que el conjunto de primitivos en una franja de triángulos sin adyacencia.
InstanceID
Un identificador de instancia es utilizado por cada etapa del sombreador para determinar la instancia de la geometría que se está procesando actualmente. Es un entero de 32 bits sin signo cuyo valor predeterminado es 0.
La fase IA añadirá un identificador de instancia a cada vértice si la declaración de entrada para el sombreador de vértices incluye la semántica del identificador de instancia. Para cada llamada a draw indexada, el identificador de instancia se incrementa en 1. Todas las demás llamadas de dibujo no cambian el valor del identificador de instancia. Si el identificador de instancia se desborda (supera 2³² − 1), vuelve a 0.
Ejemplo:
En la ilustración siguiente se muestra cómo se adjuntan los valores del sistema a una franja de triángulos con instancia en la fase de IA.
Estas tablas muestran los valores del sistema generados para ambas instancias de la misma franja de triángulos. La primera instancia (instancia U) se muestra en azul, la segunda instancia (instancia V) se muestra en verde. Las líneas sólidas conectan los vértices en los primitivos, las líneas discontinuas conectan los vértices adyacentes.
En las tablas siguientes se muestran los valores generados por el sistema para la instancia U.
| Datos de vértice | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Value | Value | Value | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 0 | 0 | 0 |
En las tablas siguientes se muestran los valores generados por el sistema para la instancia V.
| Datos de vértices | C,V | D,V | E,V | F,V | G,V | H,V | I,V | J,V | K,V | L,V |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| Value | Value | Value | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
El ensamblador de entrada genera los identificadores (vértice, primitivo e instancia); Tenga en cuenta también que a cada instancia se le asigna un identificador de instancia único. Los datos terminan con el corte de franja, que separa cada instancia de la franja de triángulos.
Temas relacionados