【发布时间】:2020-11-06 20:18:44
【问题描述】:
Xcode 的GPU frame capture 将多个表达式突出显示为紫色,并说我应该将纹理存储模式设置为private,因为只有 GPU 可以访问它。我正在尝试修复紫色建议。
Memory Usage'Texture:0x10499ae00 "CoreVideo 0x6000017f2bc0"' 具有存储模式 'Managed' 但仅由 GPU 访问
当使用device.makeBuffer(bytes:length:options:)创建MTLTexture时,我可以在参数options中将storageMode设置为private。
但是当从CVPixelBuffer到CVMetalTextureCacheCreateTextureFromImage()创建MTLTexture时,我不知道如何为创建的纹理配置存储模式。
我尝试过的方法:
- 将纹理属性字典传递给
CVMetalTextureCacheCreateTextureFromImage(..., _ textureAttributes: CFDictionary?, ...)中的textureAttributes参数
var textureAttrs: [String: Any] = [:]
if #available(macOS 10.15, *) {
textureAttrs[kCVMetalTextureStorageMode as String] = MTLStorageMode.private
}
CVMetalTextureCacheCreateTextureFromImage(,,,textureAttrs as CFDictionary,..., &texture)
if let texture = texture,
let metalTexture = CVMetalTextureGetTexture(texture) {
print(metalTexture.storageMode.rawValue)
}
}
我的操作系统已经是 10.15.4,但创建的 MTLTexture 仍然有 storageMode 作为 managed/rawValue: 1
- 将相同的属性传递给
CVMetalTextureCacheCreate(),这会在cacheAttributes和textureAttributes中为CVMetalTextureCacheCreateTextureFromImage创建缓存。
结果是一样的。
问题:
- 是我的属性字典设置了错误的键值对吗?苹果文档没有描述需要设置哪些键和值。
- 或者有正确的配置方式
- 还是目前还不支持?
参考资料:
【问题讨论】:
-
我也遇到了同样的问题...你找到什么了吗?
-
@vtruant 还没有。还在等待答案。
标签: swift macos metal core-video