当将一个结构数组作为参数传递给我的内核时,我得到第一个之后的项目的奇怪值(数组 [1]、数组 [2] 等)。这似乎是一个对齐问题,也许?
这是结构:
typedef struct Sphere
{
float3 color;
float3 position;
float3 reflectivity;
float radius;
int phong;
bool isReflective;
} Sphere;
这是主机端的初始化代码:
cl::Buffer cl_spheres = cl::Buffer(context, CL_MEM_READ_ONLY, sizeof(Sphere) * MAX_SPHERES, NULL, &err);
err = queue.enqueueWriteBuffer(cl_spheres, CL_TRUE, 0, sizeof(Sphere) * MAX_SPHERES, spheres, NULL, &event);
err = kernel.setArg(3, cl_spheres);
发生的情况是,数组中第二个 Sphere 结构的颜色实际上将具有我在主机端(s3 或 z)设置颜色的最后一个值、一个未初始化的零值和我设置的第一个值位置到主机端(s0 或 x)。我注意到 float3 数据类型实际上仍然有第四个值(s3)没有被初始化。我认为这就是非初始化零值的来源。因此,这似乎是一个对齐问题。我真的不知道我能做些什么来解决它。我希望也许有人可以阐明这个问题。我确保我的结构定义在两边都完全相同。