是否可以使用Metal计算功能在iOS上就地处理纹理?我注意到有些MPS
图像过滤器支持就地处理,并且想知道是否有一种方法可以使用自定义内核来完成此任务。
特别是,我希望使用混合功能将两个纹理合并为一个。通过将第一个纹理作为渲染目标,并使用着色器将第二个纹理写在顶部,我很容易做到这一点,但由于两个纹理的大小相同,因此感觉像是过大了。
是否可以使用Metal计算功能在iOS上就地处理纹理?我注意到有些MPS图像过滤器支持就地处理,并且想知道是否有方法......>
是,您可以使用带有access::read_write
属性的纹理参数,并在同一内核函数调用中对其进行读写。您需要确保同时使用.read
和.write
使用标志创建纹理。另外,请注意,除非您在写入后调用flush()
函数,否则不能保证同一线程的任何后续读取都能看到该写入。
顺便说一下,能够“就地”操作的MetalPerformanceShaders内核不一定使用read_write
纹理;通常情况下,他们使用辅助纹理和缓冲区并跨多次进行工作。对于the documentation,任何内核都可能由于多种原因而无法就地运行,因此您应始终提供一个后备分配器来处理此类情况。