Uso de valores de System-Generated

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 de sombreador posterior puede buscar estos valores del sistema para optimizar el procesamiento en esa fase. Por ejemplo, la fase de 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 primitivo para obtener datos por primitivo de la misma manera.

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 la fase ia procesa el primitivo. Adjunte la semántica de vértice-id a la declaración de entrada del sombreador para informar a la fase ia para generar un identificador de vértice por vértice.

Ia agregará un identificador de vértice a cada vértice para que lo usen las fases del sombreador. Para cada llamada a draw, el identificador de vértice se incrementa en 1. En las llamadas a draw indizada, el recuento se restablece de nuevo al valor inicial. Para ID3D11DeviceContext::D rawIndexed e ID3D11DeviceContext::D rawIndexedInstanced, el identificador de vértice representa el valor del índice. Si el identificador de vértice se desborda (supera 2³²– 1), se ajusta a 0.

Para todos los tipos primitivos, los vértices tienen un identificador de vértice asociado (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 de IA procesa la primitiva. Para informar a la fase de IA para generar un identificador primitivo, adjunte la semántica primitive-id a la declaración de entrada del sombreador.

La fase ia agregará un identificador primitivo a cada primitivo para que lo use el sombreador de geometría o la fase del sombreador de píxeles (lo 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, sin embargo, el identificador primitivo se restablece a 0 cada vez que comienza 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 los 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, un identificador primitivo solo se mantiene para los primitivos interiores (los primitivos no adyacentes), al igual que el conjunto de primitivos en una franja de triángulos sin adyacencia.

InstanceID

Cada fase del sombreador usa un identificador de instancia para identificar 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 agregará un identificador de instancia a cada vértice si la declaración de entrada del sombreador de vértices incluye la semántica del identificador de instancia. Para cada llamada a draw indizada, el identificador de instancia se incrementa en 1. Todas las demás llamadas a draw no cambian el valor del identificador de instancia. Si el identificador de instancia se desborda (supera los 2³²– 1), se ajusta 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 instancias en la fase de IA.

Ilustración de los valores del sistema para una franja de triángulos con instancia

En estas tablas se 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értices 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.

Fase del ensamblador de entrada