compiler是獨立的模組,但通常是整合在使用者態驅動裏的一個組建。當呼叫編譯相關的API時會呼叫到compiler,編譯器後端會根據shader指令集將程式轉譯為二進制格式。
驅動分為兩大部份,使用者態驅動以及內核態驅動,其中使用者態是最重要的,用於管理圖形渲染狀態機的,vulkan甚至把原本在ogl中屬於透明的一些狀態管理邏輯搬到API層。
shader的功能跟圖形本質上沒有任何關系,硬件管線內部的圖形命令有自己的譯碼邏輯,負責fix func圖形功能。任務排程器是跟圖形有關的並管理shader的,用於譯碼圖形命令,並根據圖形命令將相關程式地址,內容地址,紋理地址,uniform等各種各樣的參數配置寫入到warp的寄存器中,shader就像一個獨立系統的虛擬機器一樣執行自己的一套指令邏輯,並最終由warp控制按序收集渲染結果。
shader指令集通常是定長寄存器尋址方式3地址向量指令,包含浮點,定點運算,邏輯移位條件跳轉等,也就是ALU和FU部份,除此以外還有SFU,即特殊命令,通常是多個shader共享一些計算硬件來實作,所以有存取仲裁延遲,如超越函數,紋理采樣等相關功能。
內核態驅動本質上跟圖形沒有任何關系,任何硬件都是需要內核驅動來通訊,就是數據通道