《Metal》官方文檔翻譯010--Metal工具

本章列出了可用于幫助您自定義和改進(jìn)開發(fā)工作流的工具。

在應(yīng)用程序構(gòu)建過程中創(chuàng)建庫

.metallib在應(yīng)用程序構(gòu)建過程中編譯著色器語言源文件和構(gòu)建庫(文件)可以在運(yùn)行時(shí)編譯著色源源代碼實(shí)現(xiàn)更好的應(yīng)用程序性能。您可以在Xcode中構(gòu)建庫或使用命令行實(shí)用程序。

使用Xcode構(gòu)建庫

這是項(xiàng)目中的任何著色器的源文件會被自動用于生成默認(rèn)的庫,你可以從Metal框架代碼與訪問newDefaultLibrary的方法MTLDevice。

使用命令行實(shí)用程序來構(gòu)建庫

圖8-1顯示了構(gòu)成Metal著色器源代碼的編譯器工具鏈的命令行實(shí)用程序。當(dāng)您.metal在項(xiàng)目中包含文件時(shí),Xcode會調(diào)用這些工具來構(gòu)建一個(gè)庫文件,您可以在運(yùn)行時(shí)在應(yīng)用程序中訪問它。

將著色器源編譯成不使用Xcode的庫:

1:使用該metal工具將每個(gè).metal文件編譯成單個(gè).air文件,該文件存儲著色器語言代碼的中間表示(IR)。

2:或者,使用該metal-ar工具將多個(gè).air文件歸檔到一個(gè).metalar文件中。(metal-ar類似于Unix ar。)

3:使用該metallib工具.metallib從IR .air文件或存檔.metalar文件構(gòu)建Metal 庫文件。

圖8-1 使用命令行實(shí)用程序構(gòu)建庫文件

清單8-1顯示了將.metal文件編譯和構(gòu)建到文件中所需的最少命令數(shù).metallib。

清單8-1 使用命令行實(shí)用程序構(gòu)建庫文件

xcrun -sdk macosx metal MyLibrary.metal -o MyLibrary.air
xcrun -sdk macosx metallib MyLibrary.air -o MyLibrary.metallib

要以框架代碼訪問結(jié)果庫,請調(diào)用該newLibraryWithFile:error:方法,如清單8-2所示。

清單8-2 訪問您的應(yīng)用程序中的庫文件

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);

}

Xcode主題設(shè)置和性能

當(dāng)一個(gè)Metal應(yīng)用程序從Xcode運(yùn)行時(shí),默認(rèn)的方案設(shè)置可以降低性能。Xcode檢測是否在源代碼中使用Metal API,并自動啟用GPU Frame Capture和Metal API驗(yàn)證設(shè)置,如圖8-2所示。啟用GPU幀捕獲時(shí),調(diào)試層被激活。當(dāng)啟用Metal API驗(yàn)證時(shí),每個(gè)調(diào)用都被驗(yàn)證,這進(jìn)一步影響性能。對于這兩種設(shè)置,CPU性能比GPU性能更受影響。除非您禁用這些設(shè)置,否則當(dāng)應(yīng)用程序在Xcode之外運(yùn)行時(shí),應(yīng)用程序的性能可能會顯著提高。

圖8-2 Metal應(yīng)用程序的Xcode方案編輯器設(shè)置

調(diào)試

在調(diào)試和分析您的Metal應(yīng)用程序時(shí),請使用以下部分中的提示獲取更多有用的診斷信息。

注意: 僅當(dāng)您的Xcode項(xiàng)目的部署目標(biāo)設(shè)置為最新的SDK時(shí),調(diào)試才會啟用。

Metal著色語言源文件的文件擴(kuò)展名

對于Metal著色語言源代碼文件名,您必須使用.metal文件擴(kuò)展名來確保開發(fā)工具(Xcode和GPU框架調(diào)試器)在調(diào)試或分析時(shí)識別源文件。

使用Xcode執(zhí)行幀捕獲

要在Xcode中執(zhí)行幀捕獲,請啟用調(diào)試并調(diào)用insertDebugCaptureBoundary方法MTLCommandQueue來通知Xcode。該presentDrawable:presentDrawable:atTime:的方法MTLCommandBuffer類似通知的Xcode約幀捕獲,故稱insertDebugCaptureBoundary只有當(dāng)這些方法不存在。有關(guān)更多信息,請參閱調(diào)試Metal和OpenGL ES

標(biāo)簽屬性

許多Metal框架對象(如命令緩沖區(qū),流水線狀態(tài)和資源)支持一個(gè)label屬性。您可以使用此屬性為在應(yīng)用程序設(shè)計(jì)的上下文中有意義的每個(gè)對象分配一個(gè)名稱。這些標(biāo)簽顯示在Xcode Frame Capture調(diào)試界面中,使您可以更輕松地識別對象。

類似地,insertDebugSignpost:,pushDebugGroup:,和popDebugGroup方法允許插入調(diào)試字符串到命令緩沖器和推動或用于識別編碼的命令的組彈出字符串標(biāo)簽。

Metal系統(tǒng)跟蹤

要在儀器中配置應(yīng)用程序,請運(yùn)行“Metal系統(tǒng)跟蹤”工具。有關(guān)詳細(xì)信息,請參閱Metal系統(tǒng)跟蹤分析模板。

下一頁
上一頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評論 25 709
  • 美好的時(shí)光總是很短暫, 三年的同窗也就此別過。 天下沒有不散的宴席, 我們也將各奔東西。 回想起入學(xué)的...
    可愛的犯傻閱讀 217評論 0 0
  • 都不是吃素的主兒 和爸媽在學(xué)校附近逛了一天又和爸媽去這所城市的附近的景點(diǎn)逛了逛。距離正式開學(xué)還有一天,爸媽便坐火車...
    王瘋瘋閱讀 967評論 1 1
  • 記憶之于這里,一層又一層的堆疊,新與舊的光影中呼嘯而過那趟夜間的火車。我就在這交錯(cuò)的時(shí)空中沉沉睡去,醒來已經(jīng)在蒼山...
    淋瀟微語閱讀 406評論 0 0

友情鏈接更多精彩內(nèi)容