小编Mil*_*lan的帖子

OpenCL - OpenGL Interop性能

我有一个代码,我创建GL纹理8K(7680 x 4320),我渲染到这个纹理.然后我把它切换到CL,我做了一些东西......

问题是"切换"非常慢.

如果我没有运行任何CL代码,只需切换.它在我的GTS 450上有大约40FPS.

如果我评论"clEnqueueAcquireGLObjects(..)"line => no switch.它有大约600FPS.

我有什么方法可以加快速度吗?

我也想问一下如果只有Nvidia或其他像Ati这样的问题,英特尔和一些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;
Run Code Online (Sandbox Code Playgroud)

GL - CL Interop:

void activateCL()
{
    glFinish();
    int err = clEnqueueAcquireGLObjects(m_queue, 1, &m_memD, 0, 0, 0);
}    
void activateGL() …
Run Code Online (Sandbox Code Playgroud)

opengl performance interop opencl

5
推荐指数
1
解决办法
1737
查看次数

标签 统计

interop ×1

opencl ×1

opengl ×1

performance ×1