Fase del sombreador de geometría

La fase del sombreador de geometría (GS) ejecuta código de sombreador especificado por la aplicación con vértices como entrada y la capacidad de generar vértices en la salida.

Sombreador de geometría

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 (dos vértices para líneas, tres vértices para triángulos 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 al borde como entrada (dos vértices adicionales para una línea, tres adicionales para un triángulo). En la ilustración siguiente se muestra un triángulo y una línea con vértices adyacentes.

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

Tipo
tv Vértice triángulo
AV Vértice adyacente
LV de Vértice de línea

 

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

La fase del sombreador de geometría es capaz de generar varios vértices que forman una sola topología seleccionada (las topologías de salida de fase de GS 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 RestartStrip HLSL.

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).

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 para 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 triángulo), además de datos de vértices adyacentes si procede o está disponible.

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 una de las siguientes: PointStream, LineStream o TriangleStream como salida de la fase de GS. Hay tres tipos de objetos de secuencia disponibles, PointStream, LineStream y TriangleStream, que son todos los 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. 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 serie. Las salidas de una invocación determinada de un sombreador de geometría son independientes de otras invocaciones (aunque se respeta la ordenación). Un sombreador de geometría que genera franjas de triángulos iniciará una nueva franja en cada invocación.

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 de forma primitiva (por ejemplo, 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 la 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).

Los algoritmos que se pueden implementar en el sombreador de geometría incluyen:

  • Expansión de sprite de punto
  • Sistemas dinámicos de partículas
  • Generación fur/fin
  • Generación de volumen de sombras
  • Mapa de representación a cubo de paso único
  • Intercambio de materiales Per-Primitive
  • Per-Primitive configuración de material: incluida 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 (para obtener un ejemplo de interpolación normal de orden superior, vea ejemplo CubeMapGS).

de canalización de gráficos de

fases de canalización (Direct3D 10)