共用方式為


Stream-Output 階段

數據流輸出階段的目的是要持續輸出(或數據流)頂點數據,從 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 階段
本節說明如何搭配數據流輸出階段使用幾何著色器。

圖形管線

管線階段 (Direct3D 10)