版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2018.10.08 星期一 |
前言
很多做視頻和圖像的,相信對(duì)這個(gè)框架都不是很陌生,它渲染高級(jí)3D圖形,并使用GPU執(zhí)行數(shù)據(jù)并行計(jì)算。接下來(lái)的幾篇我們就詳細(xì)的解析這個(gè)框架。感興趣的看下面幾篇文章。
1. Metal框架詳細(xì)解析(一)—— 基本概覽
2. Metal框架詳細(xì)解析(二) —— 器件和命令(一)
3. Metal框架詳細(xì)解析(三) —— 渲染簡(jiǎn)單的2D三角形(一)
4. Metal框架詳細(xì)解析(四) —— 關(guān)于GPU Family 4(一)
5. Metal框架詳細(xì)解析(五) —— 關(guān)于GPU Family 4之關(guān)于Imageblocks(二)
6. Metal框架詳細(xì)解析(六) —— 關(guān)于GPU Family 4之關(guān)于Tile Shading(三)
7. Metal框架詳細(xì)解析(七) —— 關(guān)于GPU Family 4之關(guān)于光柵順序組(四)
8. Metal框架詳細(xì)解析(八) —— 關(guān)于GPU Family 4之關(guān)于增強(qiáng)的MSAA和Imageblock采樣覆蓋控制(五)
9. Metal框架詳細(xì)解析(九) —— 關(guān)于GPU Family 4之關(guān)于線程組共享(六)
10. Metal框架詳細(xì)解析(十) —— 基本組件(一)
11. Metal框架詳細(xì)解析(十一) —— 基本組件之器件選擇 - 圖形渲染的器件選擇(二)
12. Metal框架詳細(xì)解析(十二) —— 基本組件之器件選擇 - 計(jì)算處理的設(shè)備選擇(三)
13. Metal框架詳細(xì)解析(十三) —— 計(jì)算處理(一)
14. Metal框架詳細(xì)解析(十四) —— 計(jì)算處理之你好,計(jì)算(二)
15. Metal框架詳細(xì)解析(十五) —— 計(jì)算處理之關(guān)于線程和線程組(三)
16. Metal框架詳細(xì)解析(十六) —— 計(jì)算處理之計(jì)算線程組和網(wǎng)格大小(四)
17. Metal框架詳細(xì)解析(十七) —— 工具、分析和調(diào)試(一)
18. Metal框架詳細(xì)解析(十八) —— 工具、分析和調(diào)試之Metal GPU Capture(二)
19. Metal框架詳細(xì)解析(十九) —— 工具、分析和調(diào)試之GPU活動(dòng)監(jiān)視器(三)
About the Metal Shading Language Filename Extension - 關(guān)于Metal著色語(yǔ)言文件名擴(kuò)展名
使用.metal
文件擴(kuò)展名來(lái)訪問Metal的構(gòu)建,配置文件和調(diào)試工具。
.metal
文件擴(kuò)展名表示Metal Shading Language
源代碼文件。 使用此擴(kuò)展允許Xcode識(shí)別項(xiàng)目中的Metal Shading Language
文件,在構(gòu)建時(shí)自動(dòng)構(gòu)建默認(rèn)庫(kù),并使用專門的Metal工具幫助您分析和調(diào)試源代碼。 使用.metal
文件擴(kuò)展名還允許您使用Metal的命令行工具手動(dòng)構(gòu)建庫(kù)。
Building a Library with Metal's Command-Line Tools - 使用Metal的命令行工具構(gòu)建庫(kù)
使用命令行工具運(yùn)行Metal編譯器工具鏈。
手動(dòng)編譯Metal Shading Language
源代碼并在不使用Xcode的情況下構(gòu)建Metal庫(kù),包含以下過程:
- 1) 使用
metal
工具將每個(gè).metal
文件編譯為單個(gè).air
文件,該文件存儲(chǔ)Metal Shading Language
源代碼的中間表示。 - 2) (可選)使用
metal-ar
工具將多個(gè).air
文件一起存檔到單個(gè).metalar
文件中。 (metal-ar
工具類似于UNIX ar
工具。) - 3) 使用
metallib
工具將.air
或.metalar
文件構(gòu)建到單個(gè).metallib
文件中,該文件存儲(chǔ)Metal庫(kù)。
1. Run Metal's Command-Line Tools - 運(yùn)行Metal的命令行工具
以下代碼顯示了將單個(gè).metal
文件編譯并構(gòu)建到單個(gè).metallib
文件中所需的最少命令數(shù)。 您可以在終端應(yīng)用程序中運(yùn)行這些命令,并使用-help
命令顯示每個(gè)Metal工具的可用選項(xiàng)。 此示例使用macosx SDK
,但您可以使用iphoneos
或appletvos SDK
。
xcrun -sdk macosx metal MyLibrary.metal -o MyLibrary.air
xcrun -sdk macosx metallib MyLibrary.air -o MyLibrary.metallib
2. Retrieve and Access a Built Library - 檢索并訪問已建立的庫(kù)
在使用Metal
的命令行工具構(gòu)建庫(kù)之后,將生成的.metallib
文件添加到Xcode項(xiàng)目中。 然后,在運(yùn)行時(shí),調(diào)用 newLibraryWithFile:error:方法來(lái)檢索和訪問您的庫(kù)作為MTLLibrary對(duì)象。
NSError *libraryError = NULL;
NSString *libraryFile = [[NSBundle mainBundle] pathForResource:@"MyLibrary" ofType:@"metallib"];
id <MTLLibrary> myLibrary = [_device newLibraryWithFile:libraryFile error:&libraryError];
if (!myLibrary) {
NSLog(@"Library error: %@", libraryError.localizedDescription);
}
Labeling Metal Objects and Commands - 標(biāo)記Metal對(duì)象和命令
為Metal
對(duì)象和命令分配有意義的標(biāo)簽,以便您輕松識(shí)別它們。
對(duì)象和命令標(biāo)簽在運(yùn)行時(shí)或使用任何Metal工具分析和調(diào)試應(yīng)用程序時(shí)都是有用的標(biāo)識(shí)符。
注意:此處描述的屬性和方法不會(huì)影響應(yīng)用程序的圖形渲染或計(jì)算處理行為。
1. Label Objects - 標(biāo)簽對(duì)象
許多Metal
對(duì)象都提供了一個(gè)label
屬性,您可以為其指定有意義的字符串。 這些標(biāo)簽出現(xiàn)在Metal
工具中,使您可以輕松識(shí)別特定對(duì)象。
此外,addDebugMarker:range:方法允許您輕松標(biāo)記和標(biāo)識(shí)MTLBuffer中的特定數(shù)據(jù)范圍。
2. Label Commands - 標(biāo)簽命令
命令緩沖區(qū)和命令編碼器提供以下方法,使您可以輕松識(shí)別應(yīng)用程序中特定的Metal命令組:
MTLCommandBuffer。 pushDebugGroup:, popDebugGroup。
MTLCommandEncoder。 pushDebugGroup:, popDebugGroup, insertDebugSignpost:。
使用這些方法可以簡(jiǎn)化應(yīng)用程序開發(fā)過程,尤其是對(duì)于每個(gè)緩沖區(qū)或編碼器使用許多Metal命令的任務(wù)。
Debug
組被推送并彈出到僅在其關(guān)聯(lián)的MTLCommandBuffer
或MTLCommandEncoder
的生命周期內(nèi)存在的唯一堆棧上。 您可以通過將多個(gè)組推入堆棧來(lái)嵌套調(diào)試組,然后從堆棧中彈出以前的組。
以下示例演示如何推送和彈出多個(gè)調(diào)試組。
id<MTLRenderCommandEncoder> renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];
renderEncoder.label = @"My Render Encoder";
[renderEncoder pushDebugGroup:@"My Render Pass"];
[renderEncoder pushDebugGroup:@"Pipeline Setup"];
// Render pipeline commands
[renderEncoder popDebugGroup]; // Pops "Pipeline Setup"
[renderEncoder pushDebugGroup:@"Vertex Setup"];
// Vertex function commands
[renderEncoder popDebugGroup]; // Pops "Vertex Setup"
[renderEncoder pushDebugGroup:@"Fragment Setup"];
// Fragment function commands
[renderEncoder popDebugGroup]; // Pops "Fragment Setup"
[renderEncoder pushDebugGroup:@"Draw Calls"];
// Drawing commands
[renderEncoder popDebugGroup]; // Pops "Draw Calls"
[renderEncoder popDebugGroup]; // Pops "My Render Pass"
[renderEncoder endEncoding];
下圖顯示了執(zhí)行GPU捕獲后調(diào)試組在Xcode的調(diào)試導(dǎo)航器中的顯示方式。
后記
本篇主要講述了關(guān)于Metal著色語(yǔ)言文件名擴(kuò)展名、使用Metal的命令行工具構(gòu)建庫(kù)和標(biāo)記Metal對(duì)象和命令,感興趣的給個(gè)贊或者關(guān)注~~~