MTLTexture 的 replaceRegion:在不同的线程上

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

请确认 MTLTexture 方法是否:

- (void)replaceRegion:(MTLRegion)region mipmapLevel:(NSUInteger)level withBytes:(const void *)pixelBytes bytesPerRow:(NSUInteger)bytesPerRow;
线程安全吗?源纹理是使用运行渲染过程的同一 MTLDevice 创建的。我想在渲染通道之外的同步并发循环中更新我的预分配纹理。谢谢。

concurrency metal
1个回答
0
投票

https://developer.apple.com/documentation/metal/mtltexture/1515679-replaceregion 该方法在 CPU 上运行,并立即将像素数据复制到纹理中。它不会与任何 GPU 对纹理的访问同步。例如,如果命令缓冲区包含对给定纹理的读取或写入操作,您必须确保在调用 replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage: 给定纹理上的方法之前完成这些操作。您可以使用 addCompletedHandler: 方法、waitUntilCompleted 方法或自定义信号量来表示命令缓冲区已完成执行。

它不是线程安全的。

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