Написах OpenCL ядро, което използва оперативната съвместимост opencl-opengl за четене на върхове и индекси, но вероятно това дори не е важно, защото просто правя просто добавяне на указател, за да получа конкретен връх по индекс.
uint pos = (index + base)*stride;
Тук изчислявам абсолютната позиция в байтове, в моя пример pos е 28 643 328 със стъпка 28, индекс = 0 и основа = 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 да работи)
base + index * stride
. Но освен това, не виждам нищо лошо тук, ако приемем, чеvertices_gl
е указател и аритметиката на указателя работи по същия начин в OpenCL, както и в C. - person Victor Zamanian   schedule 16.06.2013