Shader 入門筆記(二) CPU和GPU之間的通信
渲染流水線的起點是CPU,即應用階段。
1)把數據加載到顯存中
2)設置渲染狀態,通俗說這些狀態定義了場景中的網格是怎樣被渲染的。
3)調用DrawCall,一個命令,CPU通知GPU。(這個命令僅僅會指向一個需要被渲染的圖元列表,並不會包含材質信息,因為在上一階段已經完成)
CPU流水線 GPU從CPU那裏得到渲染命令後,就會進行一系列流水線操作,最終把圖元渲染到屏幕上。
幾何階段:
頂點著色器/曲面細分著色器/幾何著色器
裁剪(Clipping):將不在視野範圍內的頂點裁減掉,這階段可配置的,但是不可編程。
屏幕映射:負責把每個圖元的坐標轉換到屏幕坐標系中。 該階段不可配置,編程。
光柵化階段:
三角形設置:計算光柵化一個三角形網格鎖需要的信息。 不可編程,不可配置。
三角形遍歷:會檢查每個像素是否被一個三角形鎖覆蓋。如果被覆蓋,就會生成一個片元(fragment)。而這樣一個找到哪些被三角形網格覆蓋的過程就是三角形遍歷。不可編程,不可配置。
片元著色器:可編程著色器。在DirectX中,片元著色器被稱為像素著色器。
逐片元操作:最後一步。在DieectX中,稱為輸出合並階段。
CG語言
根據平臺不同,編譯成相應的中間語言。 CG語言的跨平臺型很大原因取決於跟微軟合作。
DrawCall 優化 ,可以理解為,1000個1k的文件復制和一個1000k的文件復制。顯然是一個文件復制的快。
如果DrawCall數量太多,CPU就會把大量時間浪費在提交DrawCall上,造成CPU過載。
Shader 入門筆記(二) CPU和GPU之間的通信