调用newLibraryWithSource时如何禁用Metal着色器编译器警告
运行时编译Metal着色器抑制未使用变量警告的解决方案
方法1:针对单个变量添加属性标记
在Metal着色器源码中,给不需要使用的变量添加[[unused]]属性,即可针对单个变量关闭未使用警告,示例:
float4x4 myVariableName [[unused]];
方法2:批量抑制指定类型警告(推荐)
你在调用newLibraryWithSource时传入的MTLCompileOptions实例,支持设置额外的编译器标志,直接添加对应警告的关闭参数即可:
id<MTLCompileOptions> options = [[MTLCompileOptions alloc] init]; // 仅抑制未使用变量警告 options.otherCompilerFlags = @"-Wno-unused-variable"; // 若需要同时抑制多种警告可以添加多个参数,比如同时关闭未使用变量、未使用函数警告 // options.otherCompilerFlags = @"-Wno-unused-variable -Wno-unused-function"; // 若需要关闭所有着色器编译警告(不推荐,会漏掉有价值的问题提示)可以传 -w // options.otherCompilerFlags = @"-w"; // 后续用这个options去编译着色器即可 id<MTLLibrary> shaderLib = [myMetalDevice newLibraryWithSource:source options:options error:&error];
你之前关闭Metal API Validation、Debug可执行选项不生效是合理的:这类警告是Metal着色器编译链路本身输出的内容,和Xcode调试开关、API校验不属于同一控制链路,因此需要通过着色器编译器的参数单独控制。
内容的提问来源于stack exchange,提问作者Ramil Kudashev
相关产品推荐
相关产品推荐

