2012-11-19 44 views
0

可能重複:
How does OpenGL work at the lowest level?圖形庫和GPU的

當我們使用OpenGL庫,例如用於Windows平臺的程序,並且有一個顯卡支持OpenGL ,會發生什麼事情是這樣的:

  1. 我們在編程語言lang將圖形與OpenGL鏈接起來(例如Visual C++)。

  2. 編譯和目標平臺鏈接程序(如Windows)

  3. 當你運行該程序,因爲我們有支持OpenGL圖形卡,安裝在同一個Windows驅動程序將負責管理相同的圖形。要做到這一點,當CPU將所需數據發送到顯卡上的芯片(例如NVIDIA GPU)時,請勾畫結果。

  4. 在這種情況下,我們談論圖形加速並下載到CPU中,計算我們的圖形表示的framebuffer結束的工作。

  5. 在這種環境下,當GPU的驅動程序接收到數據時,如何利用GPU的能力來加速繪圖?將CUDA語言類型的指令和數據轉換爲利用並行性功能?或者只是將從CPU接收的數據複製到設備存儲器的特定區域?不太明白這個部分。

  6. 最後,如果我有一個支持OpenGL的卡,安裝在Windows中的驅動程序是否檢測到問題?會得到一個CPU錯誤,或者你會計算我們的幀緩衝?

+1

另請參閱我在http://stackoverflow.com/a/6401607/524368上給出的答案 – datenwolf

回答

2

你最好進入電腦遊戲網站。他們經常給出關於3D圖形如何工作的文章,以及遊戲或司機出現錯誤時的「人工製品」。

您還可以閱讀有關Mesa或Gallium等3D庫的體系結構的文章。

整體驅動程序有一組實現Direct 3D或OpenGL或其他標準API的功能的方法。當他們加載時,他們檢查硬件。你可以有便宜的視頻卡或昂貴的,最近的一個或三年前發佈的...這是不同的硬件。所以驅動程序正試圖將每個API特性映射到可以在給定計算機上使用的實現,通過GPU加速,像SSE4一樣加速CPU,甚至實現一些更基本的實現。

然後驅動程序嘗試估計GPU負載。有時候函數可以加速,但GPU(尤其是低端函數)會因其他任務而過載,那麼它可能會嘗試在CPU上進行計算,而不是等待GPU時隙。

當你犯錯時總會有幾個變種,這取決於智能和駕駛員的素質。

  • 也許驅動程序會爲您修復錯誤,而忽略您的命令並運行它們自己的一組命令。
  • 也許驅動程序會返回到您的程序一些錯誤代碼
  • 也許驅動程序會按原樣執行命令。如果您發佈的繪畫顏色不是綠色 - 這是一個錯誤,但是驅動程序無法知道的那種。在PC遊戲相關網站上搜索「3D artefacts」。
  • 在最壞的情況下,您的錯誤會干擾驅動程序中的錯誤,您的計算機將崩潰並重新啓動。

當然,所有這些自適應策略都是相當複雜和不確定的,導致3D驅動程序被關閉,內部的技術訣竅受到嚴密保護。

搜索專用於3D遊戲的網站,也可能是3D建模 - 他們應該對「更好購買」的視頻卡進行評分,有時候他們在評論新芯片系列時會撰寫相當詳細的關於這些技術內部內容的論文。

1

至問題5. 驅動程序所做的一些事情:它將GPU程序(頂點,片段等着色器)編譯到特定卡的機器指令中,將編譯後的程序上載到設備內存並將程序安排在卡上許多許多圖形核上並行執行。 它使用程序員的各種提示將圖形數據(頂點座標,紋理等)上傳到相應類型的圖形卡存儲器,例如日期頻繁,不經常或根本不更新。 它可以利用圖形卡中的特殊單元向/從主機存儲器傳輸數據,例如某些nVidia卡具有DMA單元(某些Quadro卡可能有兩個或更多),例如可以並行上傳紋理與通常的駕駛員操作(其他轉移,繪圖等)。