我想调试金属着色器,但“调试GPU”菜单中的“捕获GPU框架”按钮不可见且不可用。
我的方案最初是这样设置的:
当我将Capture GPU Frame选项更改为 Metal 时,我确实看到了捕获按钮,当我尝试制作渲染命令编码器时,我的应用程序崩溃了:
commandBuffer.makeRenderCommandEncoder(descriptor: ...)
validateRenderPassDescriptor:644:断言失败`colorAttachment [0]上的纹理使用率(0x01)未指定MTLTextureUsageRenderTarget(0x04)'
问题一:为什么需要指定用法? (它在自动启用模式下工作)
问题二:如何指定MTLTextureUsageRenderTarget
?
正在运行的测试版; Xcode 10和iOS 12。
答案 0 :(得分:1)
对于新版本的Xcode,您需要为我的情况(呈现目标)显式设置MTLTextureDescriptor.usage:
textureDescriptor.usage = MTLTextureUsageRenderTarget|MTLTextureUsageShaderRead;
上面的设置指示纹理可以用作渲染目标,并且此后还可以由另一个着色器读取它。如上所述,您可能还需要设置framebufferOnly属性,这是我的操作方法:
if (isCaptureRenderedTextureEnabled) {
mtkView.framebufferOnly = false;
}
请注意,在优化情况下(isCaptureRenderedTextureEnabled = false),仅将framebufferOnly设置保留为默认值true,这使检查要呈现在视图中的数据(着色器的输出)变得容易。 / p>
答案 1 :(得分:1)
指定使用目的
textureDescriptor.usage = [.renderTarget , .shaderRead]
或
textureDescriptor.usage = MTLTextureUsage(rawValue: MTLTextureUsage.renderTarget.rawValue | MTLTextureUsage.shaderRead.rawValue)