iOS上的MTLComputeCommandEncoder的金属就地操作

问题描述 投票:0回答:1

是否可以使用Metal计算功能在iOS上就地处理纹理?我注意到有些MPS图像过滤器支持就地处理,并且想知道是否有一种方法可以使用自定义内核来完成此任务。

特别是,我希望使用混合功能将两个纹理合并为一个。通过将第一个纹理作为渲染目标,并使用着色器将第二个纹理写在顶部,我很容易做到这一点,但由于两个纹理的大小相同,因此感觉像是过大了。

是否可以使用Metal计算功能在iOS上就地处理纹理?我注意到有些MPS图像过滤器支持就地处理,并且想知道是否有方法......>

ios metal
1个回答
0
投票

是,您可以使用带有access::read_write属性的纹理参数,并在同一内核函数调用中对其进行读写。您需要确保同时使用.read.write使用标志创建纹理。另外,请注意,除非您在写入后调用flush()函数,否则不能保证同一线程的任何后续读取都能看到该写入。

顺便说一下,能够“就地”操作的MetalPerformanceShaders内核不一定使用read_write纹理;通常情况下,他们使用辅助纹理和缓冲区并跨多次进行工作。对于the documentation,任何内核都可能由于多种原因而无法就地运行,因此您应始终提供一个后备分配器来处理此类情况。

© www.soinside.com 2019 - 2024. All rights reserved.