问题描述
我不知道如何使用 MTLStorageModeShared 来加速 CIImage 渲染到 drawable.texture:
当前程序是(大约):
- 我的 cvBuffer 是 kCVPixelFormatType_422YpCbCr8 pixelFormat(非平面)
- 我创建了 ciimage = [CIImage imageWithCVImageBuffer: cvBuffer]
- 我向 CAMetalLayer 请求 nextDrawable
- 我创建了 CIRenderDestination
- 我渲染了 ciimage:
[ciContext startTaskToRender: ciImage toDestination: renderDestination error: &error];
这是代码中最慢的部分(它需要“更多”的时间来渲染大约每秒)。 在带有集成 GPU 的 Mac 上运行时,它会在临界时间间隔内进行渲染。我想这是因为在集成图形上使用了共享内存 GPU 和 CPU。 我的想法是使用 MTLStorageModeShared 创建 MTLTexture,然后将 kCVPixelFormatType_422YpCbCr8 pixelFormat 中的 cvBuffer 复制到纹理,使用着色器将 kCVPixelFormatType_422YpCbCr8 转换为 MTLPixelFormatRG8Unorm 纹理,然后 blit 到目标纹理。
我的问题:
- MTLTexture 不接受 YUV pixelFormat。将 kCVPixelFormatType_422YpCbCr8 转换为 kCVPixelFormatType_32BGRA 的最快方法是什么(然后我可以将它与 MTLTexture 一起使用)?
- 如果没有这么快的函数,转换这样的cvBuffer,MTLCompute...方向对吗?
- 这个想法(将 MTLTexture 与 MTLStorageModeShared 一起使用)对吗?我会获得更好的表现吗?
- 是否有其他技术可以避免在具有独立 GPU 的 macOS 上进行 CPU->GPU 内存传输?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)