頂点とインデックスを読み取るために opencl-opengl 相互運用性を使用する OpenCL カーネルを作成しましたが、インデックスで特定の頂点を取得するために単純なポインターの追加を行っているだけなので、おそらくこれは重要ではありません。
uint pos = (index + base)*stride;
ここでは絶対位置をバイト単位で計算しています。この例では、pos は 28,643,328 で、ストライドは 28、インデックス = 0、ベース = 1,022,976 です。まあ、それは正しいようです。
残念ながら、vload3
offset パラメータはバイト単位の絶対アドレスとして計算されないため、直接使用することはできません。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 を動作させることができませんでした)