如何在 macOS 上使用 MTLTexture 和 MTLStorageModeShared 在 kCVPixelFormatType_422YpCbCr8

问题描述

我不知道如何使用 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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...