Metal框架詳細(xì)解析(二十) —— 工具、分析和調(diào)試之關(guān)于Metal著色語(yǔ)言文件名擴(kuò)展名、使用Metal的命令行工具構(gòu)建庫(kù)和標(biāo)記Metal對(duì)象和命令(四)

版本記錄

版本號(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,但您可以使用iphoneosappletvos 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命令組:

使用這些方法可以簡(jiǎn)化應(yīng)用程序開發(fā)過程,尤其是對(duì)于每個(gè)緩沖區(qū)或編碼器使用許多Metal命令的任務(wù)。

Debug組被推送并彈出到僅在其關(guān)聯(lián)的MTLCommandBufferMTLCommandEncoder的生命周期內(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)注~~~

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

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