我必须将多个缓冲区传递给我的Metal计算内核。像这样:
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>
。因此,我试图使用ArgumentBuffers将所有这些缓冲区作为一个ArgumentBuffer传递给计算内核。
类似这样的东西:
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]])
{
}
我告诉我编译失败
类型'device Arguments&'对属性'buffer'无效
如何将缓冲区传递给ArgumentBuffers中的内核? 可以在ArgumentBuffer中为金属内核传递这样的缓冲区吗?
谢谢
答案 0 :(得分:0)
因此,事实证明,如果应用程序的部署目标为10.13,则只能在ArgumentBuffers中具有缓冲区。在部署目标小于10.13的应用程序中不能有缓冲区。