M1 Mac開源驅動開發者揭秘了蘋果定製GPU解決方案的特殊渲染方法

儘管蘋果一直在 M1 系列定製處理器的內部細節守口如瓶,但為 M1 Mac 硬件打造開源驅動程序的 Asahi Linux 發行版開發團隊,還是努力在對其展開逆向工程。可知在艱苦的逆向工作期間,他們也發現了一些相當古怪且酷炫的地方。以 M1 開源圖形驅動程序為例,Alyssa Rosenzweig 最近就在 M1 GPU 渲染管道中發現了一個化解錯誤的關鍵點。

0.jpg

據悉,問題始於 GPU 對內存訪問的不暢。作為一款性能超強的 GPU,它與 iPhone 上的 A 系列移動SoC 一樣,需要通過走一些捷徑來保持高效率。

可知與獨顯相比,M1 沒有直接渲染到幀緩衝區,而是對幀進行兩次傳遞 —— 首先找到頂點,然後搞定其它更加密集的事務。

1.jpg

為此,蘋果利用了專用硬件將幀分割成小塊(基本上是迷你幀),並於二傳時一次取一個小塊來處理。

平鋪方案很好地化解了緩存資源不足的問題,但為了稍後將之湊成完整的一幀,GPU 需要保留每個頂點數據的緩衝區。

結果 Rosenzweig 發現,每當這個緩衝區溢出時、渲染就無法正常進行下去。

2.jpg

蘋果在某個演示文稿中解釋稱,當緩衝區已滿時,GPU 只會輸出部分渲染(本例中為半隻兔子)。

在第一方應用程序中,蘋果稱之為參數緩衝區,且這個名詞術語似乎取自 Imagination 的 PowerVR 文檔。

作為一家總部位於英國的、與 ARM 類似的芯片設計公司,Imagination 於 2020 年初與蘋果簽署了一項廣泛的知識產權許可協議。

而 2020 下半年上市的 M1 定製 SoC,就以該公司的 PowerVR GPU 架構為其圖形硬件的基礎。

3.jpg

言歸正傳,正如你可能已經猜到的那樣,軟件可通過將各部分渲染疊加到一起、以完成整隻兔子的渲染(當然中間還有十幾個額外的步驟)。

遺憾的是,這種渲染方式仍然不太準確(仔細留意兔子的足部)。Rosenzweig 指出,這是因為幀的不同部分在顏色 / 深度緩衝區之間被分割,而後者在加載部分渲染時會出現異常行為。

好消息是,得益於蘋果驅動程序的逆向工程參考配置,Asahi Linux 開發團隊最終搞定了這個問題,最終渲染輸出的兔子如圖所示。

4.jpg

TechSpot 總結道:不僅 Rosenzweig 的 M1 開源圖形驅動程序跳過了相關環節來渲染圖像,而是該 GPU 在架構設計之初就沒有考慮到此類 3D 渲染應用場景。

即便如此,蘋果還是相當巧妙地讓 PowerVR 圖形 IP 成為了可與獨顯相媲美的軟硬件解決方案。即便在許多方面都沒有實現完全的超越,其表現依然相當酷炫。

最後,想要深入了解 M1 GPU 渲染工作、以及針對 M1 逆向工程的其它探索,還請移步至 Rosenzweig 的個人技術博客和 Asahi Linux 發行版網站查看。

相關文章:

進展報告:Asahi Linux在蘋果的M1架構上實現了基本可用的桌面功能

Asahi團隊已在M1 Pro上順利啟動Linux:後續仍有很多工作

Asahi Linux致力於將M1 Mac NVMe驅動支持併入Linux 5.19主線內核

(0)
上一篇 2022-05-16 10:49
下一篇 2022-05-16 10:50

相关推荐