Compartir a través de


Uso de valores generados por el sistema

Los valores generados por el sistema se generan mediante la fase del ensamblador de entrada (IA) de (basada en la semántica de entrada proporcionada por el usuario ) 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 fase del sombreador de geometría (GS)/fase de sombreador de píxeles (PS)), una fase posterior del sombreador puede buscar estos valores del sistema para optimizar el procesamiento en esa fase.

Por ejemplo, en la etapa de VS se puede buscar el identificador de instancia para obtener datos adicionales por vértice para el sombreador o para realizar otras operaciones; en las etapas de GS y PS se puede usar el identificador de primitiva para obtener datos por primitiva de la misma manera.

ID del vértice

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 del ensamblador de entrada (IA) procesa el primitivo. Adjuntar la semántica de ID de vértice a la declaración de entrada del sombreador y así informar a la etapa IA para generar un identificador 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. Durante las llamadas de dibujo indexadas, el recuento se restablece al valor inicial. Si el identificador de 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 el 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 su uso por parte de la fase sombreador de geometría (GS) o la fase del sombreador de vértices (VS), cualquiera 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), vuelve a 0.

La etapa del sombreador de píxeles (PS) no tiene una entrada separada para un identificador de primitivo; sin embargo, cualquier entrada del sombreador de píxeles que especifique un identificador de primitivo utiliza una 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.

ID de instancia

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 del ensamblador de entrada (IA) de 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 de dibujo indexada, el ID 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), regresa a 0.

Ejemplo de

La ilustración siguiente muestra cómo los valores del sistema se adjuntan a una franja de triángulos instanciada en la fase del ensamblador de entrada (IA) de .

ilustración de los valores del sistema para una franja de triángulos de 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 continuas conectan los vértices en las primitivas, 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
IdentificadorDeInstancia 0 0 0 0 0 0 0 0 0 0

 

La instancia de franja de triángulos U tiene 3 primitivas de triángulos, con los siguientes valores generados automáticamente por el sistema.

Valor 1 Valor 2 Valor 3
primitiveID 0 1 2
IdentificadorDeInstancia 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
IdentificadorDeInstancia 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
IdentificadorDeInstancia 1 1 1

 

La fase del ensamblador de entrada (IA) de 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.

Input-Assembler (IA) fase