Compartir a través de


Uso de valores generados por el sistema

La fase ensamblador de entrada (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 la fase sombreador de vértices (VS), un identificador de vértice (visible para VS) o un identificador primitivo (visible para la fase sombreador de píxeles (GS),/una fase posterior del sombreador de sombreador 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 de GS y PS pueden usar el identificador primitivo para capturar 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 ensamblador de entrada (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 de IA para generar un identificador de vértice por vértice.

El IA agregará un identificador de vértice a cada vértice para su uso por fases del sombreador. Para cada llamada de dibujo, el identificador de vértice se incrementa en 1. En las llamadas de dibujo indexadas, el recuento se restablece al valor inicial. 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 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 ensamblador de entrada (IA) procesa el primitivo. 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 la fase del sombreador de geometría (GS) o la fase sombreador de vértices (VS) (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, 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 los 2³²– 1), se ajusta a 0.

La fase del sombreador de píxeles (PS) 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 se admite la generación automática de 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

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 ensamblador de entrada (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 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 instancia en la fase ensamblador de entrada (IA).

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

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

 

La instancia de franja de triánguloS U tiene tres primitivos de triángulo, con los siguientes valores generados por el sistema:

Valor 1 Valor 2 Valor 3
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értice 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

 

La instancia de franja de triángulos V tiene tres primitivos de triángulo, con los siguientes valores generados por el sistema:

Valor 1 Valor 2 Valor 3
PrimitiveID 0 1 2
InstanceID 1 1 1

 

La fase ensamblador de entrada (IA) genera los identificadores (vértice, primitivo e instancia); tenga en cuenta también que cada instancia recibe 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 (IA)