我是 Metal 的新手,我正在试验它的计算功能。 我在 macOS 上用 Swift 3 编写了以下代码:
repeat
{
metalCommandBuffer.enqueue()
metalCommandBuffer.commit()
metalCommandBuffer.waitUntilCompleted()
copy variable back to CPU
}
while {check the variable == 0}
我想执行一个计算内核,将变量复制回主机并检查是否满足某些条件。如果是,则继续执行内核,直到否则。
但是我得到以下错误:
error 'enqueue an already enqueued command buffer'
我已经尝试过在循环中进行提交和 waitUntilCompleted 但后来我得到:
error 'commit an already committed command buffer'
我有一些 CUDA 知识,因此我可能会误用 Metal。
谢谢。
最佳答案
你不能像那样重复使用命令缓冲区。
您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后在每次循环中提交命令缓冲区。
关于swift - Metal Compute - 排队一个已经排队的命令缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675959/