Compartir a través de


Etapa de salida de flujo

La fase de salida de flujo (SO) puede transmitir vértices a la memoria justo antes de que esos vértices lleguen al rasterizador. La salida del flujo funciona como una pulsación en la canalización. Esta pulsación se puede activar incluso cuando los datos continúan fluyendo hasta el rasterizador. Los datos que se envían a través de la salida del flujo se concatenan en búferes. Estos búferes se pueden recircular en pasos posteriores como entradas de canalización.

Una restricción sobre la salida del flujo es que está vinculada al sombreador de geometría, en que deben crearse juntas (aunque puede ser "NULL"/"off"). Aunque, los búferes de memoria concretos a los que se transmiten no están vinculados a un sombreador de geometría y a un par de salida de flujo concretos. Solo la descripción de las partes de los datos de vértices que se van a alimentar a una salida de flujo está vinculada al sombreador de geometría.

La salida del flujo puede ser útil para guardar los datos de canalización ordenados que se reutilizarán. Por ejemplo, un lote de vértices podría "desasignarse" pasando los vértices a la canalización como si fueran puntos independientes (solo para visitarlos una vez), aplicar operaciones de "máscara" en cada vértice y transmitir los resultados a la memoria. Los vértices "skinned" guardados están disponibles posteriormente para su uso como entrada.

Dado que la cantidad de salida que se escribe a través de la salida del flujo es dinámica, es necesario un nuevo tipo de Draw , DrawAuto, para permitir que los búferes de salida de flujo se reutilicen con el ensamblador de entrada, sin la implicación de la CPU para determinar la cantidad de datos que se han escrito realmente. Además, las consultas son necesarias para mitigar el desbordamiento de salida del flujo, así como recuperar la cantidad de datos que se escribieron en los búferes de salida de flujo (D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE y D3D10DDI_QUERY_STREAMOUTPUTSTATS de la enumeración D3D10DDI_QUERY ).

El tiempo de ejecución de Direct3D llama a las siguientes funciones de controlador para crear y configurar la salida del flujo:

CalcPrivateGeometryShaderWithStreamOutput

CreateGeometryShaderWithStreamOutput

SoSetTargets