Share via


資料流輸出 (SO) 階段

資料流輸出 (SO) 階段會持續將來自上一個作用中階段的頂點資料輸出 (或串流) 至記憶體中的一個或多個緩衝區。 串流到記憶體的資料可重新循環至管線,以做為輸入資料,或從 CPU 讀回。

用途和使用方式

diagram of the stream-output stage's location in the pipeline

資料流輸出階段可將管線中的原始物件沿著轉譯器的路徑一路串流至記憶體。 來自上一個階段的資料可向外串流至記憶體,和/或傳遞至轉譯器中。 串流到記憶體的資料可重新循環至管線,以做為輸入資料,或從 CPU 讀回。

向外串流至記憶體的資料可於後續轉譯傳遞中讀回管線,或複製至暫存資源內 (好讓 CPU 可以讀取)。 向外串流的資料量會視情況而定;Direct3D 經過精心設計,可在無需查詢 (GPU) 寫入資料量的情況下處理資料。>

您可以透過兩種方法,將串流輸出資料饋送至管線:

  • 串流輸出資料可饋送回輸入組合語言 (IA) 階段。
  • 使用 Load 函式,即可透過可進行程式設計的著色器讀取串流輸出資料。

輸入

來自上一個著色器階段的頂點資料。

輸出

資料流輸出 (SO) 階段會持續將來自上一個作用中階段 (例如幾何著色器 (GS) 階段) 的頂點資料輸出 (或串流) 至記憶體中的一個或多個緩衝區。 如果幾何著色器 (GS) 階段為非作用中,資料流輸出 (SO) 階段就會持續將來自網域著色器 (DS) 階段的頂點資料輸出至記憶體中的緩衝區 (或者,如果 DS 為非作用中,則輸入頂點著色器 (VS) 階段的資料)。

當三角形或線條寬帶已繫結至輸入組合語言 (IA) 階段時,每個寬帶都會先轉換為清單,再向外串流。頂點疑慮會寫出為完整的原始物件 (例如三角形的 3 個頂點);而不完整的原始物件絕對不會向外串流。具有相鄰的原始物件類型會於向外串流前捨棄相鄰資料。

串流輸出階段最多可同時支援 4 個緩衝區。

  • 如果將資料串流至多個緩衝區,每個緩衝區只能擷取每一頂點資料的單一項目 (最多 4 個元件),而隱含的資料步距會等於每個緩衝區中的項目寬度 (相容於繫結單一項目緩衝區,以輸入至著色器階段的方式)。 此外,如果緩衝區採用不同的大小,只要任一緩衝區已滿,寫入作業就會停止。
  • 如果要將資料串流至單一緩衝區,緩衝區最多可以針對每一頂點資料擷取 64 個純量元件 (256 位元組以下),或者,頂點步距最高可達 2048 位元組。

圖形管線