swift - Metal Compute - 排队一个已经排队的命令缓冲区

标签 swift gpgpu metal

我是 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/

相关文章:

swift - #if canImport(CoreImage) 在 swift 包管理器中不工作

json - 是否可以将单级 JSON 解码为 2 个独立的模型?

OpenGL 与 OpenCL,选择哪个以及为什么?

Swift & Parse - 空 PFFile

ios - 静态 TableView 的错误

graphics - 有没有办法在 Windows 7 系统中独立执行任务并使用异构多 GPU?

debugging - 如何调试 DirectX 11 计算着色器?

swift - SCNKit : Hit test doesn't hit node's dynamically modified geometry

opengl-es - 如何以编程方式切换到 Sprite Kit 中的 openGL 以适应 iPad2 等旧设备

ios - 如何使用动态缓冲区声明定义 Metal 着色器?