Estágio de saída de fluxo

O estágio de saída de fluxo (SO) pode transmitir vértices para a memória pouco antes desses vértices chegarem ao rasterizador. A saída do fluxo opera como um toque no pipeline. Esse toque pode ser ativado mesmo quando os dados continuam a fluir para o rasterizador. Os dados enviados pela saída do fluxo são concatenados para buffers. Esses buffers podem ser recirculados em passagens subsequentes como entradas de pipeline.

Uma restrição sobre a saída do fluxo é que ela está vinculada ao sombreador de geometria, pois elas devem ser criadas juntas (embora uma delas possa ser "NULL"/"off"). Embora, os buffers de memória específicos que são transmitidos para não estão vinculados a um sombreador de geometria específico e um par de saída de fluxo. Somente a descrição das partes dos dados de vértice a serem alimentados a uma saída de fluxo está vinculada ao sombreador de geometria.

A saída do fluxo pode ser útil para salvar dados de pipeline ordenados que serão reutilizados. Por exemplo, um lote de vértices pode ser "esfolado" passando os vértices para o pipeline como se fossem pontos independentes (apenas para visitar todos eles uma vez), aplicando operações de "skinning" em cada vértice e transmitindo os resultados para a memória. Os vértices "skinned" salvos estão disponíveis posteriormente para uso como entrada.

Como a quantidade de saída gravada pela saída do fluxo é dinâmica, um novo tipo de Draw, DrawAuto, é necessário para permitir que os buffers de saída de fluxo sejam reutilizados com o assembler de entrada, sem o envolvimento da CPU para determinar quantos dados foram realmente gravados. Além disso, as consultas são necessárias para atenuar o estouro de saída do fluxo, bem como recuperar quantos dados foram gravados nos buffers de saída de fluxo (D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE e D3D10DDI_QUERY_STREAMOUTPUTSTATS da enumeração D3D10DDI_QUERY ).

O runtime do Direct3D chama as seguintes funções de driver para criar e configurar a saída do fluxo:

CalcPrivateGeometryShaderWithStreamOutput

CreateGeometryShaderWithStreamOutput

SoSetTargets