數據流輸出階段的目的是要持續輸出(或數據流)頂點數據,從 geometry-shader 階段(或如果 geometry-shader 階段為非使用中,頂點著色器階段)到記憶體中的一或多個緩衝區(請參閱 開始使用 Stream-Output 階段)。
數據流輸出階段 (SO) 位於幾何著色器階段之後的管線中,就在點陣化階段之前,如下圖所示。
串流至記憶體的數據可以在後續轉譯階段中讀回管線,也可以複製到暫存資源(因此可由 CPU 讀取)。 串流出的數據量可能會有所不同;ID3D11DeviceContext::D rawAuto API 的設計目的是處理數據,而不需要查詢 (GPU) 以取得寫入的數據量。
當三角形或折線帶系結至輸入組合器階段時,每個等量都會在串流出之前轉換成清單。頂點一律會寫成完整的基本類型(例如,三角形一次 3 個頂點):未完成的基本類型永遠不會串流出。具有相鄰的基本類型會先捨棄相鄰數據,再串流數據。
有兩種方式可將數據流輸出數據饋送至管線:
- 串流輸出數據可以送回輸入組合器階段。
- 串流輸出數據可以使用載入函式,透過可程式化著色器讀取(例如 Load)。
若要使用緩衝區作為數據流輸出資源,請使用 D3D11_BIND_STREAM_OUTPUT 旗標建立緩衝區。 數據流輸出階段同時支援最多 4 個緩衝區。
- 如果您要將數據串流至多個緩衝區,則每個緩衝區只能擷取每個頂點數據的單一元素(最多 4 個元件),且隱含的數據步幅等於每個緩衝區中的元素寬度(與單一元素緩衝區可以系結至著色器階段的方式相容)。 此外,如果緩衝區的大小不同,只要任一緩衝區已滿,寫入就會停止。
- 如果您要將數據串流至單一緩衝區,則緩衝區最多可以擷取每個頂點數據的64個純量元件(256個字節或更少位元組),或頂點步幅最多可達 2048 個字節。
在本節中
| 主題 | 描述 |
|---|---|
|
開始使用 Stream-Output 階段 |
本節說明如何搭配數據流輸出階段使用幾何著色器。 |