Directx11教程(15) D3D11管線(4)


本章我們首先了解一下D3D11中的邏輯管線,認識一下管線中每個stage的含義。

參考資料:http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-3/

D3D11邏輯管線如下圖所示:

image

首先,我們來學習一下每個stage的名字含義,在后面章節學習它們的細節功能:

IA:input assembler,輸入裝配階段,主要是從內存中讀頂點和索引數據

VS: vertex shader, 頂點着色階段,在shader中逐個處理頂點,輸出處理后的頂點

HS: hull shader,這是D3D11中增加的階段,主要是tessllation使用,輸入patch(其實就是帶控制點的體元),產生控制點,被domain shader階段使用,也可以在HS階段,增加一些額外的控制點數據。HS階段還會產生TS階段使用細分因子(FACTOR)。

TS: Tessellation stage,細分三角形,quad或者線段,產生頂點和連通性

DS: Domain shader, 從HS得到控制點,從TS得,頂點uv坐標,產生最終的細分頂點。

GS: geometry shader,輸入體元,輸出不同的體元。

SO: streamout stage, 把GS之后的頂點數據輸出到video memory中。

RS: Rasterize stage, 光柵化階段,光柵化體元。

PS: pixel shader, 對光柵化后的體元,進行逐像素操作,通常執行紋理光照顏色混合等

OM: output merge stage,執行一些blending操作,並把像素顏色輸出到framebuffer中,最終在屏幕上顯示出來。

    

      當然除了上述階段之外,也可以把整個D3D11管線理解為一個computer shader階段,來做一些通用計算,后面有機會在詳細了解。

在D3D11的邏輯管線中,有些shader階段是可選的,比如GS,Tessellation等。

我們通常使用的shader階段組合是:

VS-PS

VS-GS-PS

VS-HS-TS-DS-PS

VS-HS-TS-DS-GS-PS

VS-SO

VS-GS-SO

VS-HS-TS-DS-GO-SO

下面,我們接着上一篇教程,結合邏輯管線和物理管線來了解IA階段GPU做些什么事情。

     上一章中,我們的頂點已經經過了driver層,到達了video memory中,我們的狀態設置和draw call命令也通過driver到達了CP的FIFO中,正准備被CP調度到不同的硬件block中去。

現在我們看看IA階段做些什么工作(我們只是畫一個三角形,所以只有VS-PS):

      CP把command packet中state數據通過數據總線送到shader或其它相關block,這些狀態數據一般都是設置相應block的相關寄存器值。

      drawcall命令為被送到IA  block(頂點裝配block),IA會從video memory中取相應的頂點索引緩沖(可能會經過一個vertex cache)。當index頂點數據達到一個調度單位比如AMD的一個wave(64),NV的一個warp(32),VS調度會啟動一個VS wave或者VS warp,並把它傳入shader中啟動執行。

     IA階段也會把draw中的primitive(體元)信息傳到PA,以便把經過VS后的頂點裝配成為相應primitive。

     現在的shader幾乎都用的是統一架構shader block,即VS,PS,GS…等的執行都在一個block中。Shader啟動執行后,會從video memroy中取得頂點/實例數據和shader code,然后一條指令一條指令開始執行我們的VS code,執行后的結果會被傳送給PA。

      下面是一個簡單的vs執行的流程圖:

image

 

本章我們了解IA階段GPU做的工作,下章我們將詳細了解VS shader中到底做了些什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM