我理解如何編寫OpenGL / DirectX程序,我知道它背后的數學和概念性東西,但我很好奇GPU-CPU通信如何在低級別上運行。假設我有一個用C語言編寫的OpenGL程序,它顯示一個三角形并將相機旋轉45度。當我編譯這個程序時,它會變成一系列ioctl調用,然后gpu驅動程序將相應的命令發送到gpu,其中旋轉三角形并設置適當顏色的適當像素的所有邏輯都是有線的在?或者程序是否會編譯成一個“gpu程序”,它被加載到gpu并計算旋轉等?還是完全不同的東西?編輯:幾天后我發現這篇文章系列,基本上回答了這個問題:http: //fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part- 1 /
3 回答

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
當我編譯這個程序時,它會變成一系列ioctl調用,然后gpu驅動程序將相應的命令發送到gpu,其中旋轉三角形并設置適當顏色的適當像素的所有邏輯都是有線的在?或者程序是否會編譯成一個“gpu程序”,它被加載到gpu并計算旋轉等?
你離我不遠。您的程序調用可安裝的客戶端驅動程序(它實際上不是驅動程序,它是用戶空間共享庫)。這將使用ioctl或類似的機制將數據傳遞給內核驅動程序。
對于下一部分,它取決于硬件。較舊的視頻卡具有所謂的“固定功能管道”。在視頻卡中有專用的存儲空間用于矩陣,以及用于紋理查找,混合等的專用硬件。視頻驅動程序將為每個單元加載正確的數據和標志,然后設置DMA以傳輸頂點數據(位置) ,顏色,紋理坐標等)。
較新的硬件在視頻卡內部具有處理器核心(“著色器”),這與CPU的不同之處在于它們的運行速度要慢得多,但是它們中有許多并行工作。對于這些視頻卡,驅動程序準備程序二進制文件以在GPU著色器上運行。

慕森王
TA貢獻1777條經驗 獲得超3個贊
您的程序不是針對任何特定GPU編譯的; 它只是動態鏈接到將實現OpenGL的庫。實際實現可能涉及向GPU發送OpenGL命令,運行軟件回退,編譯著色器并將其發送到GPU,甚至使用著色器回退到OpenGL命令。圖形界面相當復雜。值得慶幸的是,鏈接可以將您與大多數驅動程序的復雜性隔離開來,讓驅動程序實現者可以自由使用他們認為合適的任何技術。
- 3 回答
- 0 關注
- 508 瀏覽
添加回答
舉報
0/150
提交
取消