Compartir a través de


Fase del ensamblador de entrada

El ensamblador de entrada (IA) introduce triángulos, líneas o puntos en la canalización de representación mediante la extracción de datos de geometría de origen de 1D búferes.

Los datos de vértice pueden provenir de varios búferes y se puede acceder a ellos de forma de matriz de estructuras desde cada búfer. Los búferes están enlazados a una ranura de entrada individual y se les proporciona un intervalo de estructura. El diseño de los datos en todos los búferes se especifica mediante una declaración de entrada, en la que cada entrada define un elemento. El elemento contiene una ranura de entrada, un desplazamiento de estructura, un tipo de datos y un registro de destino (para el primer sombreador activo de la canalización).

Una secuencia determinada de vértices se construye a partir de los datos que se capturan de los búferes. Los datos se capturan en un recorrido dirigido por una combinación de estado de función fija y varias llamadas DDI Draw*(). Hay disponibles varias topologías primitivas (por ejemplo, lista de puntos, lista de líneas, lista de triángulos y bandas de triángulos) para que la secuencia de datos de vértices represente una secuencia de primitivos.

Los datos de vértices se pueden producir de una de estas dos maneras. La primera manera de generar datos de vértices es la representación no indizada , que es el recorrido secuencial de búferes que contienen datos de vértices. Los datos de vértices se originan en un desplazamiento inicial en cada enlace de búfer. La segunda forma de generar datos de vértices es la representación indizada , que es un recorrido secuencial de un único búfer que contiene índices enteros escalares. Los índices se originan en un desplazamiento inicial en el búfer. Cada índice indica dónde capturar datos de un búfer que contiene datos de vértices. Los valores de índice son independientes de las características de los búferes a los que hacen referencia. Las declaraciones de describen los búferes. La representación no indizada e indizada, cada una de ellas de forma propia, genera direcciones a partir de las cuales capturar datos de vértices en memoria y, posteriormente, ensamblar los resultados en vértices y primitivos.

La representación de geometría con instancia está habilitada al permitir que el recorrido secuencial, ya sea en representación no indizada o indizada, recorra un intervalo dentro de cada búfer de vértices (mayúsculas y minúsculas no indexadas) o en el búfer de índice (caso indizado). Los enlaces de búfer se pueden identificar como datos de instancia o datos de vértices. Esta identificación especifica cómo usar el búfer enlazado mientras se realiza la representación con instancias. La dirección generada por la representación no indizada o indizada se usa para capturar datos de vértices, que también representa un bucle cuando el tiempo de ejecución realiza la representación de instancias. Por otro lado, los datos de instancia siempre se recorren secuencialmente a partir de un desplazamiento por búfer, con una frecuencia igual a un paso por instancia (por ejemplo, un paso adelante después del número de vértices de una instancia se recorren). La velocidad de pasos de los datos de instancia también se puede elegir como una sub armónica de la frecuencia de la instancia (es decir, un paso adelante cada otra instancia, cada tercera instancia, etc.).

Otro caso especial de ia es que puede leer búferes en los que escribió la fase de salida de la secuencia. Este escenario habilita un nuevo tipo de operación de dibujo, DrawAuto. DrawAuto permite que se reutilice una cantidad dinámica de salida escrita en búferes de salida de flujo, sin la participación de la CPU, para determinar la cantidad de datos que se han escrito realmente.

Además de generar datos de vértices desde búferes, la IA puede generar automáticamente tres valores de contador escalar: VertexID, PrimitiveID e InstanceID, para la entrada a las fases del sombreador en la canalización de representación.

En la representación indizada de topologías de tiras, como franjas de triángulos, se proporciona un mecanismo para dibujar varias tiras con una sola llamada *Draw*() (es decir, el comando *cortar para cortar tiras).

El entorno de ejecución de Direct3D llama a las siguientes funciones de controlador para crear, configurar y destruir la IA:

CalcPrivateElementLayoutSize

CreateElementLayout

DestroyElementLayout

IaSetIndexBuffer

IaSetInputLayout

IaSetTopology

IaSetVertexBuffers