Vulkan和Mantle相比有部分簡化,也有部分變複雜。例如之前煩人的記憶體配置變簡單了,各heap已經依照功能和讀寫效率排序好,取得記憶體時也不再是一口氣給你一個page大小。Mantle用轉換state的方式來同步資源的存取,Vulkan則改用更明確的memory barrier指令。用起來雖然比較複雜,但最佳化的空間更大。Mantle上傳vertex資料後需要對該記憶體做一次state轉換,好讓GPU看見CPU所寫入的資料。Vulkan則保證將command buffer送給queue時,被送出的cmd就能看見被寫入的資料(若資料儲存在cache heap則需要額外做flush),不須額外的memory barrier指令。
image物件的layout設定用起來有點像是mantle的state,用來指定該image的用途,目前這個值似乎只有AMD在使用。若是其他廠商的硬體可以直接將之設定為"general",但在AMD上必須依照該image的實際用途設值,否則程式會當給你看。難以想像Vulkan API的制定者為了一家公司做出這種妥協,目前我還不知道有沒有其他地方也有這種專門為了某一家廠商的設計。不過這代表了程式在其中一家的硬體上執行沒問題,不保證在其他硬體上也沒問題。就算用validation layer也沒辦法檢查到所有錯誤,唯一辦法就只有實際弄來不同廠商的硬體來測試。
大部分Vulkan API都改得更直覺,但還是有個令人困惑的設計。它允許我們在配置Vulkan物件記憶體的時候使用自己寫的allocator,但Vulkan不一定會使用我們給的allocator。就算它真的用了,效能也很有可能會變差,因為寫driver的人肯定比我們懂內部適合什麼記憶體配置法。AMD的人甚至建議不要用自己寫的,實在讓人懷疑這東西到底設計出來幹嘛的。
個人感覺整體來說還是比mantle複雜,因為多了許多新功能和新物件,光是寫個demo腦細胞就死很多。實際使用Vulkan時會發現細節幾乎都和Mantle不一樣,之前寫的Mantle程式碼大部都得重寫,而且程式碼暴增許多,Mantle可說是只有精神留了下來。
這回就不寫教學文了,上回的教學就已經寫得有夠長,寫Vulkan教學很可能會寫不完。現在學習最快的方式恐怕只能看範例還有官網的規格書。
目前光是包裝一部份Vulkan物件就寫了3300行程式碼,還只能畫出如上圖般的簡單物體,更別提運用這些物件的程式也要重寫。Vulkan的render pipeline架構做了大修改,因此舊的pipleine程式碼只剩下少部分能用。從shader code撈資料變成得自己parse編譯後的binary,Vulkan沒有提供這方面的API。Instance rendering的實作倒是變得很容易,之前的AZDO設計可以直接沿用。
Shader code也只須小幅修改,但是要完全移植估計還要好一段時間。
4 / 8編輯:
現在Intel有落落長的教學文可以看了。
image物件的layout設定用起來有點像是mantle的state,用來指定該image的用途,目前這個值似乎只有AMD在使用。若是其他廠商的硬體可以直接將之設定為"general",但在AMD上必須依照該image的實際用途設值,否則程式會當給你看。難以想像Vulkan API的制定者為了一家公司做出這種妥協,目前我還不知道有沒有其他地方也有這種專門為了某一家廠商的設計。不過這代表了程式在其中一家的硬體上執行沒問題,不保證在其他硬體上也沒問題。就算用validation layer也沒辦法檢查到所有錯誤,唯一辦法就只有實際弄來不同廠商的硬體來測試。
大部分Vulkan API都改得更直覺,但還是有個令人困惑的設計。它允許我們在配置Vulkan物件記憶體的時候使用自己寫的allocator,但Vulkan不一定會使用我們給的allocator。就算它真的用了,效能也很有可能會變差,因為寫driver的人肯定比我們懂內部適合什麼記憶體配置法。AMD的人甚至建議不要用自己寫的,實在讓人懷疑這東西到底設計出來幹嘛的。
個人感覺整體來說還是比mantle複雜,因為多了許多新功能和新物件,光是寫個demo腦細胞就死很多。實際使用Vulkan時會發現細節幾乎都和Mantle不一樣,之前寫的Mantle程式碼大部都得重寫,而且程式碼暴增許多,Mantle可說是只有精神留了下來。
這回就不寫教學文了,上回的教學就已經寫得有夠長,寫Vulkan教學很可能會寫不完。現在學習最快的方式恐怕只能看範例還有官網的規格書。
▲繪出8000個方塊,在GTX 750Ti上FPS為589,尚未完全最佳化
目前光是包裝一部份Vulkan物件就寫了3300行程式碼,還只能畫出如上圖般的簡單物體,更別提運用這些物件的程式也要重寫。Vulkan的render pipeline架構做了大修改,因此舊的pipleine程式碼只剩下少部分能用。從shader code撈資料變成得自己parse編譯後的binary,Vulkan沒有提供這方面的API。Instance rendering的實作倒是變得很容易,之前的AZDO設計可以直接沿用。
Shader code也只須小幅修改,但是要完全移植估計還要好一段時間。
4 / 8編輯:
現在Intel有落落長的教學文可以看了。