在计算着色器中写入缓冲区时出现意外结果

时间:2016-11-09 04:04:24

标签: swift metal

这是一个简单的金属计算着色器:

kernel void test(uint k [[ thread_position_in_grid ]],
                         device float* a [[buffer(1)]]){
    a[k] = 2;
};

在CPU上我像这样访问数据:

let size = floatArray.count * MemoryLayout.size(ofValue: floatArray[0])
metalBuffer = device.makeBuffer(bytes: floatArray, length: size, options: [])
data = metalBuffer.contents().assumingMemoryBound(to: Float.self)

floatArray全是零。我发送

encoder.dispatchThreadgroups(MTLSize(width:32, height:1, depth:1),
threadsPerThreadgroup: MTLSize(width:32, height:1, depth:1))

着色器完成后,我打印内容:

print(data[0])

现在data[0]data[1]都会按预期提供2的值,但其余值不是2。例如data[2]约为1.477。我觉得我一定是犯了一个简单的错误。

0 个答案:

没有答案