Fase de sombreador de geometría (GS)

La fase del sombreador de geometría (GS) procesa primitivos completos: triángulos, líneas y puntos, junto con sus vértices adyacentes. Es útil para algoritmos como la expansión de sprite de puntos, los sistemas dinámicos de partículas y la generación de volúmenes de sombras. Admite la amplificación y la desamplación de geometría.

Propósito y usos

La fase del sombreador de geometría procesa primitivos completos: triángulos (3 vértices con hasta 3 vértices adyacentes), líneas (2 vértices con hasta 2 vértices adyacentes) y puntos (1 vértice).

ilustración de un triángulo y una línea con vértices adyacentes

El sombreador de geometría también admite amplificación y desamplación de geometría limitada. Dado un primitivo de entrada, el sombreador de geometría puede descartar el primitivo o emitir uno o varios primitivos nuevos.

La fase del sombreador de geometría (GS) es una etapa de sombreador programable; se muestra como un bloque redondeado en el diagrama de canalización de gráficos . Esta fase del sombreador expone su propia funcionalidad única, basada en los modelos de sombreador (vea common-shader core).

La fase del sombreador de geometría es adecuada para algoritmos, entre los que se incluyen:

  • Expansión de sprite de punto
  • Sistemas de partículas dinámicas
  • Generación de fur/fin
  • Generación de volumen de sombras
  • Mapa de representación a cubo de paso único
  • Intercambio de materiales de Per-Primitive
  • Per-Primitive configuración de material: esta funcionalidad incluye la generación de coordenadas barycéntricas como datos primitivos para que un sombreador de píxeles pueda realizar la interpolación de atributos personalizados.

Entrada

La fase del sombreador de geometría ejecuta código de sombreador especificado por la aplicación con primitivos completos como entrada y la capacidad de generar vértices en la salida. A diferencia de los sombreadores de vértices, que operan en un solo vértice, las entradas del sombreador de geometría son los vértices de un primitivo completo (tres vértices para triángulos, dos vértices para líneas o un solo vértice para el punto). Los sombreadores de geometría también pueden traer los datos de vértices para los primitivos adyacentes de borde como entrada (tres adicionales para un triángulo, dos vértices adicionales para una línea).

La fase del sombreador de geometría puede consumir el valor generado por el sistema SV_PrimitiveID generado automáticamente por la fase ensamblador de entrada (IA). Esto permite capturar o calcular los datos por primitivo si lo desea.

Cuando un sombreador de geometría está activo, se invoca una vez para cada primitivo pasado o generado anteriormente en la canalización. Cada invocación del sombreador de geometría ve como entrada los datos de la primitiva invocando, ya sea un único punto, una sola línea o un único triángulo. Una franja de triángulos anterior en la canalización daría lugar a una invocación del sombreador de geometría para cada triángulo individual de la franja (como si la franja se expandiera en una lista de triángulos). Todos los datos de entrada de cada vértice del primitivo individual están disponibles (es decir, 3 vértices para un triángulo), además de los datos de vértices adyacentes si procede y están disponibles.

Abreviaturas comunes de vértices:

Abreviatura Término
TV Vértice de triángulo
LV Vértice de línea
AV Vértice adyacente

 

Salida

La fase del sombreador de geometría (GS) es capaz de generar varios vértices que forman una sola topología seleccionada. Las topologías de salida del sombreador de geometría disponibles son tristrip, linestrip y pointlist. El número de primitivos emitidos puede variar libremente dentro de cualquier invocación del sombreador de geometría, aunque el número máximo de vértices que se podrían emitir debe declararse estáticamente. Las longitudes de franja emitidas a partir de una invocación del sombreador de geometría pueden ser arbitrarias y se pueden crear nuevas tiras a través de la función HLSL RestartStrip .

La ejecución de una instancia del sombreador de geometría es atómica de otras invocaciones, salvo que los datos agregados a las secuencias son seriales. Las salidas de una invocación determinada de un sombreador de geometría son independientes de otras invocaciones (aunque se respeta el orden). Un sombreador de geometría que genera franjas de triángulos iniciará una nueva franja en cada invocación.

La salida del sombreador de geometría se puede alimentar a la fase de rasterizador o a un búfer de vértices en la memoria a través de la fase de salida del flujo. La salida alimentada a la memoria se expande a listas individuales de puntos, líneas y triángulos (exactamente como se pasarían al rasterizador).

Un sombreador de geometría genera datos de un vértice cada vez anexando vértices a un objeto de flujo de salida. La topología de las secuencias viene determinada por una declaración fija, eligiendo TriangleStream, LineStream y PointStream como salida de la fase GS.

Hay tres tipos de objetos de secuencia disponibles: TriangleStream, LineStream y PointStream, que son todos objetos con plantilla. La topología de la salida viene determinada por su tipo de objeto respectivo, mientras que el formato de los vértices anexados a la secuencia viene determinado por el tipo de plantilla.

Cuando una salida del sombreador de geometría se identifica como un valor interpretado por el sistema (por ejemplo, SV_RenderTargetArrayIndex o SV_Position), el hardware examina estos datos y realiza algún comportamiento dependiente del valor, además de poder pasar los datos a la siguiente fase del sombreador para la entrada. Cuando dicha salida de datos del sombreador de geometría tiene significado para el hardware por primitiva (como SV_RenderTargetArrayIndex o SV_ViewportArrayIndex), en lugar de por vértice (por ejemplo , SV_ClipDistance[n] o SV_Position), los datos por primitivo se toman del vértice inicial emitido para el primitivo.

El sombreador de geometría podría generar primitivos completados parcialmente si el sombreador de geometría finaliza y el primitivo está incompleto. Los primitivos incompletos se descartan silenciosamente. Esto es similar a la forma en que el IA trata primitivos completados parcialmente.

El sombreador de geometría puede realizar operaciones de muestreo de carga y textura en las que no se requieren derivados del espacio de pantalla (samplelevel, samplecmplevelzero, samplegrad).

Canalización de gráficos