Fase del sombreador de geometría (GS)Geometry Shader (GS) stage

La fase del sombreador de geometría (GS) procesa primitivos completos: triángulos, líneas y puntos, junto con sus vértices adyacentes.The Geometry Shader (GS) stage processes entire primitives: triangles, lines, and points, along with their adjacent vertices. Resulta útil para los algoritmos, como Point Sprite Expansion, Dynamic Particle Systems y Shadow Volume Generation.It is useful for algorithms including Point Sprite Expansion, Dynamic Particle Systems, and Shadow Volume Generation. Admite la amplificación y la desamplificación geométrica.It supports geometry amplification and de-amplification.

Finalidad y usosPurpose and uses

La fase del sombreador de geometría procesa primitivos completos: triángulos (3 vértices con un máximo de 3 vértices adyacentes), líneas (2 vértices con un máximo de 2 vértices adyacentes) y puntos (1 vértice).The Geometry Shader stage processes entire primitives: triangles (3 vertices with up to 3 adjacent vertices), lines (2 vertices with up to 2 adjacent vertices), and points (1 vertex).

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

El sombreador de geometría también admite la amplificación y la desamplificación geométrica limitada.The Geometry Shader also supports limited geometry amplification and de-amplification. Dado un primitivo de entrada, el sombreador de geometría puede descartar el primitivo o emitir uno o más primitivos nuevos.Given an input primitive, the Geometry Shader can discard the primitive, or emit one or more new primitives.

La fase del sombreador de geometría (GS) es una fase de sombreador programable; se muestra como un bloque redondeado en el diagrama de canalización de gráficos.The Geometry Shader (GS) stage is a programmable-shader stage; it is shown as a rounded block in the graphics pipeline diagram. Esta fase del sombreador expone su propia funcionalidad única, integrada en modelos del sombreador (consulta common-shader core).This shader stage exposes its own unique functionality, built on the shader models (see common-shader core).

La fase del sombreador de geometría es adecuada para algoritmos como los siguientes:The Geometry Shader stage is well-suited for algorithms including:

  • Point Sprite ExpansionPoint Sprite Expansion
  • Dynamic Particle SystemsDynamic Particle Systems
  • Fur/Fin GenerationFur/Fin Generation
  • Shadow Volume GenerationShadow Volume Generation
  • Single Pass Render-to-CubemapSingle Pass Render-to-Cubemap
  • Per-Primitive Material SwappingPer-Primitive Material Swapping
  • Per-Primitive Material Setup: esta funcionalidad incluye la generación de coordenadas baricéntricas como datos primitivos para que un sombreador de píxeles pueda realizar la interpolación del atributo personalizado.Per-Primitive Material Setup - This capability includes generation of barycentric coordinates as primitive data so that a pixel shader can perform custom attribute interpolation.

EntradaInput

La fase del sombreador de geometría ejecuta código de sombreador específico de la aplicación con primitivos completos como entrada y la capacidad de generar vértices de salida.The Geometry Shader stage runs application-specified shader code with entire primitives as input and the ability to generate vertices on output. A diferencia de los sombreadores de vértices, que trabajan 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).Unlike vertex shaders, which operate on a single vertex, the geometry shader's inputs are the vertices for a full primitive (three vertices for triangles, two vertices for lines, or single vertex for point). Los sombreadores de geometría también pueden incorporar los datos de vértice de los primitivos de bordes adyacentes como entrada (tres adicionales para un triángulo, dos vértices adicionales para una línea).Geometry shaders can also bring in the vertex data for the edge-adjacent primitives as input (an additional three for a triangle, an additional two vertices for a line).

La fase del sombreador de geometría puede consumir el valor generado por el sistema SV_PrimitiveID que se genera automáticamente en la fase del ensamblador de entrada (IA).The Geometry Shader stage can consume the SV_PrimitiveID system-generated value that is auto-generated by the Input Assembler (IA) stage. Esto permite capturar o calcular los datos de cada primitivo si se quiere.This allows per-primitive data to be fetched or computed if desired.

Cuando un sombreador de geometría está activo, se invoca una vez para cada primitivo que se pasa por la canalización o se genera antes de ella.When a geometry shader is active, it is invoked once for every primitive passed down or generated earlier in the pipeline. Cada invocación del sombreador de geometría considera como entrada los datos del primitivo que se invoca, ya sea un punto único, una sola línea o un solo triángulo.Each invocation of the geometry shader sees as input the data for the invoking primitive, whether that is a single point, a single line, or a single triangle. Una franja de triángulos anterior en la canalización produciría una invocación del sombreador de geometría para cada triángulo individual en la franja (como si la franja se expandiera en una lista de triángulos).A triangle strip from earlier in the pipeline would result in an invocation of the geometry shader for each individual triangle in the strip (as if the strip were expanded out into a triangle list). Todos los datos de entrada de cada vértice del primitivo individual están disponibles (es decir, 3 vértices por triángulo), además de los datos del vértice adyacente, si corresponde y estos están disponibles.All the input data for each vertex in the individual primitive is available (that is, 3 vertices for a triangle), plus adjacent vertex data if applicable and available.

Abreviaturas de vértices comunes:Common vertex abbreviations:

TVTV Vértice de triánguloTriangle vertex
LVLV Vértice de líneaLine vertex
AVAV Vértice adyacenteAdjacent vertex

SalidaOutput

La fase del sombreador de geometría (GS) es capaz de presentar varios vértices que forman una sola topología seleccionada.The Geometry Shader (GS) stage is capable of outputting multiple vertices forming a single selected topology. Las topologías de salida del sombreador de geometría disponibles son tristrip, linestrip y pointlist.Available geometry shader output topologies are tristrip, linestrip, and pointlist. El número de primitivos emitido puede variar libremente dentro de cualquier invocación del sombreador de geometría, aunque el número máximo de vértices que podría emitirse debe declararse de forma estática.The number of primitives emitted can vary freely within any invocation of the geometry shader, though the maximum number of vertices that could be emitted must be declared statically. Las longitudes de franja emitidas desde una invocación del sombreador de geometría pueden ser arbitrarias, y pueden crearse nuevas franjas a través de la función HLSL RestartStrip.Strip lengths emitted from a geometry shader invocation can be arbitrary, and new strips can be created via the RestartStrip HLSL function.

La ejecución de una instancia del sombreador de geometría es atómica de las otras invocaciones, excepto en que los datos agregados a las secuencias son de serie.Execution of a geometry shader instance is atomic from other invocations, except that data added to the streams is serial. Las salidas de una invocación determinada de un sombreador de geometría son independientes de otras invocaciones (aunque se respeta la ordenación).The outputs of a given invocation of a geometry shader are independent of other invocations (though ordering is respected). Un sombreador de geometría que genera franjas de triángulos iniciará una nueva franja en cada invocación.A geometry shader generating triangle strips will start a new strip on every invocation.

La salida del sombreador de geometría puede alimentarse en la fase del rasterizador y/o en un búfer de vértice de la memoria a través de la fase de salida de flujo.Geometry shader output may be fed to the rasterizer stage and/or to a vertex buffer in memory via the stream output stage. La salida alimentada en la memoria se expande en listas de triángulos, líneas o puntos individuales (al igual que si se pasaran al rasterizador).Output fed to memory is expanded to individual point/line/triangle lists (exactly as they would be passed to the rasterizer).

Un sombreador de geometría devuelve datos de un vértice cada vez anexando vértices a un objeto de secuencia de salida.A geometry shader outputs data one vertex at a time by appending vertices to an output stream object. La topología de las secuencias se determina mediante una declaración fija, al elegir TriangleStream, LineStream y PointStream como el resultado de la fase de GS.The topology of the streams is determined by a fixed declaration, choosing a TriangleStream, LineStream and PointStream as the output for the GS stage.

Hay tres tipos de objetos de secuencia disponibles: TriangleStream, LineStream y PointStream, todos procedentes de plantillas.There are three types of stream objects available: TriangleStream, LineStream and PointStream, which are all templated objects. La topología de la salida viene determinada por su tipo de objeto correspondiente, mientras que el formato de los vértices que se anexa a la secuencia está determinado por el tipo de plantilla.The topology of the output is determined by their respective object type, while the format of the vertices appended to the stream is determined by the template type.

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 tipo de comportamiento dependiente del valor y, además, es capaz de pasar los datos a la siguiente fase del sombreador para la entrada.When a geometry shader output is identified as a System Interpreted Value (for example, SV_RenderTargetArrayIndex or SV_Position), hardware looks at this data and performs some behavior dependent on the value, in addition to being able to pass the data itself to the next shader stage for input. Cuando esa salida de datos del sombreador de geometría tiene significado para el hardware en función del primitivo (como SV_RenderTargetArrayIndex o SV_ViewportArrayIndex), en lugar de en función del vértice (como SV_ClipDistance\ [n] o SV_Position), los datos de cada primitivo se toman desde el vértice principal emitido para el primitivo.When such data output from the geometry shader has meaning to the hardware on a per-primitive basis (such as SV_RenderTargetArrayIndex or SV_ViewportArrayIndex), rather than on a per-vertex basis (such as SV_ClipDistance[n] or SV_Position), the per-primitive data is taken from the leading vertex emitted for the primitive.

El sombreador de geometría podría generar los primitivos completados parcialmente si el sombreador de geometría termina y el primitivo está incompleto.Partially completed primitives could be generated by the geometry shader if the geometry shader ends and the primitive is incomplete. Los primitivos incompletos se descartan de forma automática.Incomplete primitives are silently discarded. Esto es similar a la manera en que IA trata los primitivos parcialmente completados.This is similar to the way the IA treats partially completed primitives.

El sombreador de geometría puede realizar operaciones de muestreo de textura y carga, donde no se requieren derivados del espacio de pantalla (samplelevel, samplecmplevelzero, samplegrad).The geometry shader can perform load and texture sampling operations where screen-space derivatives are not required (samplelevel, samplecmplevelzero, samplegrad).

Temas relacionadosRelated topics

Canalización de gráficosGraphics pipeline