Я должен передать несколько буферов в мое вычислительное ядро 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]])
{
}
Я получаю сообщение об ошибке компиляции
Тип 'Аргументы устройства &' недопустим для атрибута 'buffer'
Как я могу передавать буферы ядрам в ArgumentBuffers?
Можно ли передавать подобные буферы в ArgumentBuffer для металлических ядер?
Спасибо