我已经编写了一个 OpenCL 内核,它使用 opencl-opengl 互操作性来读取顶点和索引,但这可能并不重要,因为我只是在做简单的指针添加,以便通过索引获取特定的顶点。
uint pos = (index + base)*stride;
这里我以字节为单位计算绝对位置,在我的示例中,pos 是 28,643,328,步幅为 28,index = 0 和 base = 1,022,976。嗯,这似乎是正确的。
不幸的是,我不能vload3
直接使用,因为偏移量参数不是以字节为单位计算的绝对地址。所以我只是添加pos
到指针void* vertices_gl
void* new_addr = vertices_gl+pos;
new_addr
在我的例子中 = 0x2f90000 这就是奇怪的部分开始的地方,
vertices_gl
= 0x303f000
结果 ( new_addr
) 应该是 0x4B90000 (0x303f000 + 28,643,328)
我不明白为什么地址 vertices_gl 减少了 716,800 (0xAF000)
我的目标是 GPU:AMD Radeon HD5830
Ps:对于那些想知道的人,我正在使用 printf 来获取这些值:)(无法让 CodeXL 工作)