【发布时间】:2018-08-25 16:32:43
【问题描述】:
我的宿主程序中有下一个结构:
typedef struct s_figure
{
cl_float reflection;
cl_int color;
enum e_figure type;
cl_float3 vector1;
cl_float3 vector2;
cl_float param1;
cl_float param2;
} t_figure;
我的内核中有下一个结构:
typedef struct s_figure
{
float reflection;
int color;
enum e_figure type;
float3 vector1;
float3 vector2;
float param1;
float param2;
} t_figure;
你也可以看到它的枚举:
enum e_figure
{
BadFigure = -1,
InfinitePlane = 0,
Sphere = 1,
InfiniteCylinder = 2,
InfiniteCone = 3
};
以这种方式将数据传递给 OpenCL 内核时(其中图形是正确解析的结构数组):
buf_figures = clCreateBuffer(context, CL_MEM_USE_HOST_PTR, sizeof(t_figure) * figures_count, figures, &err);
clEnqueueWriteBuffer(view->cl->queue, buf_figures, CL_TRUE, 0,sizeof(t_figure) * figures_count, figures, 0, NULL, NULL);
我有一个数据失真的问题,例如将数据传输到 OpenCL 内核后的颜色可以更改为非常不同的 (0xFFFFFF->0x007FC2)。光线追踪算法在每个程序执行时都以另一种方式工作。我该如何解决?我认为 gcc 编译器制作结构的方式与 openclc 不同,但如何同步呢?
【问题讨论】:
-
cl_int 是 32 位的,系统 int 可以是 32 或 64。将颜色设置为 int32_t
-
第二种结构是opencl结构。是不是 int 和 cl_int 不兼容?
-
THIS 可能有帮助,也可能没有帮助。看看吧。
-
如您所见,我的结构没有指针
-
这可能会有所帮助,从第 197 页开始的第 6/1 节以及第 203 页的第 6.1.5 节类型对齐khronos.org/registry/OpenCL/specs/opencl-1.2.pdf