Metal框架詳細(xì)解析(五) —— 關(guān)于GPU Family 4之關(guān)于Imageblocks(二)

版本記錄

版本號 時間
V1.0 2018.10.05 星期五

前言

很多做視頻和圖像的,相信對這個框架都不是很陌生,它渲染高級3D圖形,并使用GPU執(zhí)行數(shù)據(jù)并行計算。接下來的幾篇我們就詳細(xì)的解析這個框架。感興趣的看下面幾篇文章。
1. Metal框架詳細(xì)解析(一)—— 基本概覽
2. Metal框架詳細(xì)解析(二) —— 器件和命令(一)
3. Metal框架詳細(xì)解析(三) —— 渲染簡單的2D三角形(一)
4. Metal框架詳細(xì)解析(四) —— 關(guān)于GPU Family 4(一)

About Imageblocks - 關(guān)于Imageblocks

了解imageblocks如何允許您在高帶寬圖塊內(nèi)存中定義和操作自定義每像素數(shù)據(jù)結(jié)構(gòu)。


Overview - 概覽

圖像塊是存儲在本地存儲器中的結(jié)構(gòu)化圖像數(shù)據(jù)的圖塊,允許您在圖塊存儲器中描述A11圖形處理單元(GPU)可以有效操作的圖像數(shù)據(jù)。 它們與片段處理和A11的圖塊著色階段深度集成,也可用于計算內(nèi)核。 Metal總是渲染到iOS設(shè)備上的圖像塊,但A11上的Metal 2通過將圖像塊暴露為您完全控制的數(shù)據(jù)結(jié)構(gòu)來擴展此功能。


Imageblocks for Passing Data Between Fragment and Tile Stages - 用于在片段和圖塊階段之間傳遞數(shù)據(jù)的圖像塊

圖1顯示了A11 GPU架構(gòu)以及圖像塊如何在渲染通道的片段和圖塊階段之間傳遞數(shù)據(jù)。 雖然線程組內(nèi)存適用于非結(jié)構(gòu)化數(shù)據(jù),但建議使用圖像塊作為圖像數(shù)據(jù)。

Figure 1 The A11 GPU architecture

Imageblock Structure - Imageblock 結(jié)構(gòu)

圖像塊Imageblock是具有寬度,高度和像素深度的2D數(shù)據(jù)結(jié)構(gòu)。 圖像塊中的每個像素可以由多個組件組成,并且每個組件可以作為其自己的圖像切片來尋址。 圖2顯示了由三個圖像切片組成的圖像塊,這三個圖像切片代表反照率,鏡面反射和正常分量(albedo, specular, and normal components)

Figure 2 An imageblock composed of three image slices

圖像塊可用于內(nèi)核和片段函數(shù),并在繪圖和調(diào)度之間持續(xù)使用圖塊的生命周期。 Imageblock持久性意味著您可以在單個渲染過程中混合渲染和計算操作,同時訪問相同的本地內(nèi)存。通過在tile中保留多個操作,您可以創(chuàng)建保留在本地GPU內(nèi)存中的復(fù)雜算法。

您現(xiàn)有的代碼會自動創(chuàng)建與渲染附件格式匹配的圖像塊。但是,您也可以在著色器中完全定義自己的圖像塊。您定義的圖像塊可能比渲染附件創(chuàng)建的圖像塊復(fù)雜得多;例如,它們可以包含其他通道,數(shù)組和嵌套結(jié)構(gòu)。此外,您定義的圖像塊可以在計算的不同階段重復(fù)用于不同的目的。

在片段著色器中,當(dāng)前片段僅可訪問與片段在tile中的位置相關(guān)聯(lián)的圖像塊數(shù)據(jù)。在計算功能中,線程可以訪問所有圖像塊數(shù)據(jù)。使用帶附件的渲染時,繼續(xù)加載和存儲操作,作為從tile內(nèi)存讀取和寫入數(shù)據(jù)片段的方法。但是,如果您使用顯式圖像塊,則使用計算函數(shù)顯式讀取和寫入設(shè)備內(nèi)存。利用內(nèi)存硬件,寫入通常可以作為塊傳輸執(zhí)行。

后記

本篇主要講述了,感興趣的給個贊或者關(guān)注~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容