将多个缓冲区作为金属中的参数延迟



我必须将多个缓冲区传递给我的金属计算内核。这样的东西:

const device uint32_t *a [[buffer(0)]];
const device uint32_t *b [[buffer(1)]];
const device uint32_t *c [[buffer(2)]];
const device uint8_t *d [[buffer(3)]];
const device uint8_t *e [[buffer(4)]];

这些数组可以具有可变大小,因此我不能使用<array>。因此,我试图使用参数缓冲器将所有这些缓冲区作为一个参数缓冲器传递给计算内核。

类似的东西:

typedef struct Arguments 
{
    const device uint32_t *a [[buffer(0)]];
    const device uint32_t *b [[buffer(1)]];
    const device uint32_t *c [[buffer(2)]];
    const device uint8_t *d [[buffer(3)]];
    const device uint8_t *e [[buffer(4)]];
} Arguments;
kernel void
myKernel(device Arguments &arguments [[ buffer(ComputeBufferInput) ]],
                texture2d<half, access::write> outTexture [[texture(ComputeBufferOutput)]],
                uint2                          gid         [[thread_position_in_grid]])
{
}

我会告诉我汇编失败

键入'设备参数&amp;'对于属性"缓冲区"

无效

如何将缓冲区传递给参数式扣子中的内核?是否可以在金属内核的grigentbuffer中通过这样的缓冲区?

谢谢

因此,事实证明,如果您的应用程序的部署目标为10.13,则只能在参数缓冲器中使用缓冲区。您的部署目标小于10.13。

最新更新