【发布时间】:2014-04-10 22:58:40
【问题描述】:
我有一个 OpenCL 程序,它可以在共享上下文中调整 VBO 对象的顶点坐标。 OpenCL 设备是 GPU 设备。
但是,我收到以下警告:
缓冲区性能警告:缓冲区对象 1(绑定到 GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB (0)、GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB (4) 和 GL_ARRAY_BUFFER_ARB,使用提示为 GL_DYNAMIC_DRAW)正在从 VIDEO 内存复制/移动到 HOST 内存。
据我所知(必须添加一些 glFlush() 呼叫以寻求帮助),这发生在呼叫 glDrawElements(...) 期间。着色器位置 0 的顶点属性数组为顶点,着色器位置 4 的顶点属性数组为纹理坐标。
问题是,为什么会这样?
编辑:循环的形式如下:
glFinish()
clEnqueueAcquireGLObjects(...)
clEnqueueNDRangeKernel(...)
clFinish(...)
clEnqueueReleaseGLObjects(...)
【问题讨论】:
-
它只是告诉你 OpenCL 和 OpenGL 缓冲区的绑定约束需要从 GPU 到主机的额外副本。这不是有效的。检查缓冲区创建参数。
-
@DarkZeros 为什么需要额外的副本,哪些缓冲区参数需要负责?