Contatori di output di flusso
L'output del flusso è la possibilità della GPU di scrivere vertici in un buffer. I contatori di output del flusso monitorano lo stato di avanzamento.
- Differenze nei contatori di flusso da Direct3D 11 a Direct3D 12
- BufferFilledSize
- Argomenti correlati
Differenze nei contatori di flusso da Direct3D 11 a Direct3D 12
Come parte del processo di output del flusso, la GPU deve conoscere la posizione corrente nel buffer in cui sta scrivendo. In Direct3D 11, la memoria per archiviare questo percorso viene allocata dal driver e l'unico modo per le applicazioni di modificare questo valore è tramite il metodo SOSetTargets . In Direct3D 12, le app allocano memoria per archiviare questo percorso corrente. Non esistono modi speciali per modificare questo valore e le app sono libere di leggere/scrivere il valore con la CPU o la GPU.
BufferFilledSize
L'applicazione è responsabile dell'allocazione dell'archiviazione per una quantità a 32 bit denominata BufferFilledSize. Contiene il numero di byte di dati nel buffer di output del flusso. Questa risorsa di archiviazione può essere inserita nella stessa risorsa o in una risorsa diversa che contiene i dati di output del flusso. Questo valore è accessibile dalla GPU nella fase di output del flusso per determinare dove aggiungere nuovi dati dei vertici nel buffer. Inoltre, questo valore è accessibile dalla GPU per determinare quando si è verificato l'overflow.
Fare riferimento alla struttura D3D12_STREAM_OUTPUT_DESC.
Il livello di debug convaliderà quanto segue in ID3D12GraphicsCommandList::SOSetTargets:
- BufferFilledSize rientra nell'intervallo implicito in {OffsetInBytes, SizeInBytes}, se è specificata una risorsa non NULL.
- BufferFilledSizeOffsetInBytes è un multiplo di 4.
- BufferFilledSizeOffsetInBytes è compreso nell'intervallo della risorsa contenitore.
- La risorsa specificata è un buffer.
Il runtime non convaliderà il tipo di heap associato al buffer di output del flusso, perché l'output del flusso è supportato in tutti i tipi di heap.
Le firme radice devono specificare se verrà usato l'output del flusso usando i flag D3D12_ROOT_SIGNATURE_FLAGS .
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT può essere specificato per le firme radice create in HLSL, in modo analogo a come vengono specificati gli altri flag.
CreateGraphicsPipelineState avrà esito negativo se il geometry shader contiene l'output del flusso, ma la firma radice non ha il flag D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT impostato.
Quando una risorsa viene usata come destinazione di output del flusso, le risorse usate devono trovarsi nello stato D3D12_RESOURCE_STATE_STREAM_OUT. Questo vale sia per i dati dei vertici che per BufferFilledSize (che possono trovarsi nella stessa risorsa o in risorse separate).
Non sono disponibili API speciali per impostare gli offset del buffer di output di flusso perché le applicazioni possono scrivere direttamente in BufferFilledSize con la CPU o la GPU.
Argomenti correlati