日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

深入了解汽車系統(tǒng)級芯片SoC連載之八 gpu是什么的硬件芯片( 三 )


頂點渲染單元(也叫頂點著色或頂點著色引擎)主要負責繪制圖形,也就是建立模型 。一個是像素渲染管道(也叫像素渲染管道),主要負責用顏色填充頂點繪制的圖形 。然后添加紋理貼圖單元,粘貼紋理,一個漂亮的圖形就出來了 。微軟DIRECTX10出來后,頂點渲染和像素渲染會淡出我們的視線,因為它會采用統(tǒng)一的架構 。也就是說,內核中的一組特殊通道負責頂點渲染和像素渲染 。但道理還是一樣的 。
這就引出了GPU的兩個關鍵參數:像素填充率和紋理填充率 。當然越高越好,這樣顯示圖像的幀率更高,更精細,分辨率更高 。
像素填充率=顯卡的顯示核心頻率乘以像素渲染流水線的數量(即光柵單位) 。單位是gbpixel/s
紋理填充率=核心頻率乘以像素渲染流水線數再乘以紋理映射單元數 。單位是gbtexture/s 。
[/hGPU的GPU開銷是繪制調用驅動開銷 。
很長一段時間,人們都認為ARM也就是MALI的GPU不如高通的Adreno 。其實MALI只是在像素填充率和紋理填充率上更強,但是ARM的缺點是Draw調用的驅動成本太高 。調用一次圖像編程接口(graphics API)命令GPU進行渲染的過程稱為Draw調用 。圖像編程接口(graphics API)是GPU硬件的抽象,地位類似于C語言,屬于GPU編程的中低層 。幾乎所有的GPU都可以同時配合OpenGL和DirectX 。OpenGL是純圖形API;DirectX是各種API的集合,其中DirectX包括圖形API——Direct3D和Direct2D 。DirectX支持Windows和Xbox;OpenGL支持Windows、MacOS、Linux等平臺,Android和iOS上允許使用OpenGL的簡化版OpenGL ES 。OpenGL相對好用,門檻低;DirectX入門難,門檻高 。OpenGL渲染效率比較低,功能少;DirectX相對高效,有很多特性 。例如,DirectX12提供了底層API,允許用戶通過繞過顯卡驅動程序在一定程度上操縱底層硬件 。
對于圖像生成的應用,第一步,CPU將一個網格的頂點數據從硬盤加載到內存中(這一步的原因是大規(guī)模3D渲染時內存可能不足) 。
第二步,CPU為這個網格設置渲染狀態(tài)(每個網格不等于每個模型/圖片,因為有批處理) 。所謂渲染狀態(tài),包括編譯成二進制文件的紋理貼圖、材質屬性和著色器 。與渲染狀態(tài)一起,與照明和相機相關的信息也傳輸到GPU 。圖形API可以在更深層次上定義渲染狀態(tài)所需的數據 。
第三步,CPU將網格頂點數據和渲染狀態(tài)打包,按照指定的格式將數據包發(fā)送給DMA,DMA將數據包傳輸給顯卡 。DMA(直接內存訪問) 。
指令到達GPU驅動后,驅動會先檢查指令的合法性 。如果指令不合法,驅動程序將通過DMA向CPU發(fā)送錯誤消息 。如果指令合法,驅動程序通過DMA確認收到Draw調用,然后將指令放入GPU緩沖區(qū) 。
一段時間后,當顯卡有空空閑流水線,或者CPU明確發(fā)出flush命令時,驅動程序將緩沖區(qū)中的指令發(fā)送給GPU,GPU通過主機接口接收命令,開始處理命令 。
GPU將所有頂點存儲在頂點緩沖區(qū)中,GPU中的“圖元分布器”開始通過頂點生成三角形,并分批次發(fā)送給一個或多個GPU 。如果顯卡里沒有GPC,直接分發(fā)給短信 。SM得到數據后,光束管理器安排多邊形引擎提取三角形數據并存儲在SM的L1緩存中,然后啟動頂點著色器階段 。
GPU會依次處理緩存中的每個網格,網格的處理順序和CPU的提交順序有關 。因此,CPU總是最后提交透明對象 。在一個幀中的所有繪制調用被處理后,顯示器將在屏幕上打印圖像 。
draw call的性能瓶頸是CPU,不是GPU 。每次CPU進行Draw調用時,都會調用DMA將數據輸入到內存中 。每次調用時,顯存映射尋址、DMA控制塊注入、等待DMA響應等系統(tǒng)消耗會浪費時間段,多次Draw調用會消耗很多次 。同時,DMA擅長一次傳輸大量數據,不擅長多次傳輸少量數據 。這使得有必要減少Draw調用以優(yōu)化顯示性能 。

推薦閱讀