GL テクスチャ 8K (7680 x 4320) を作成し、このテクスチャにレンダリングするコードがあります。次に、CL に切り替えて、いくつかのことを行います...
問題は、「切り替え」が非常に遅いことです。
CL コードを実行しない場合は、切り替えるだけです。私のGTS 450では約40FPSです。
「clEnqueueAcquireGLObjects(..)」行にコメントすると、=> スイッチはありません。約600FPSです。
速度を上げる方法はありますか?
私も聞きたいですこれがNvidiaまたはAtiのような他のものだけの問題である場合、Intelと一部のSoC(ARM)には同じ速度の問題がありますか?
GL-CL テクスチャの作成:
glGenFramebuffers(1, &m_fbo);
glGenTextures(1, &m_tex);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glBindTexture(GL_TEXTURE_2D, m_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_imageSize.x, m_imageSize.y, 0, GL_RGBA, GL_INT, NULL); //GL_ALPHA
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_tex, 0);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER)!=GL_FRAMEBUFFER_COMPLETE)
return false;
glBindFramebuffer(GL_FRAMEBUFFER, 0);
int err;
m_memD = clCreateFromGLTexture2D(ecl.getContext(), CL_MEM_READ_WRITE, GL_TEXTURE_2D, 0, m_tex, &err);
if(ERR_CL)
return false;
GL - CL 相互運用:
void activateCL()
{
glFinish();
int err = clEnqueueAcquireGLObjects(m_queue, 1, &m_memD, 0, 0, 0);
}
void activateGL()
{
int err;
err = clFinish(m_queue);
err = clEnqueueReleaseGLObjects(m_queue, 1, &m_memD, 0, 0, 0);
}
bool activateGLRendering()
{
activateGL();
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
return true;
}
bool deactivateGLRendering()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return true;
}