cudaGraphicsUnregisterResource中的崩溃错误

时间:2011-06-13 17:26:01

标签: opengl cuda

我使用以下代码清理CUDA对一对pbos的使用,以准备以不同的大小重新创建它们:

glFinish();
CUDA_SAFE_CALL(cudaGraphicsUnregisterResource(m_cuda_pbo_resource));
CUDA_SAFE_CALL(cudaGraphicsUnregisterResource(m_cuda_pbo_depth_resource));
glDeleteBuffersARB(1, &m_pbo);
glDeleteBuffersARB(1, &m_pbo_depth);

在我的窗口调整大小操作期间,在以新的大小重绘窗口时,在绘制操作中调用此代码。有时,取消注册m_cuda_pbo_resource的调用失败,程序终止。当用户尽可能快地持续调整窗口大小时,这似乎更有可能发生。因为它不会一直发生,所以它可能是某种竞争条件,但我已经没有尝试调试它的方法。

2 个答案:

答案 0 :(得分:1)

您可以在内核运行时释放缓冲区。尝试坚持

   cudaThreadSynchronize();

就在那段代码之前。

答案 1 :(得分:0)

您确定没有尝试删除缓冲区两次吗?

它是如何失败的?错误代码 ?您的应用程序是否有多个线程?

当用户调整窗口大小时,您的应用程序是否处理调整PBO大小的情况?

def on_resize( w, h):
    - lock_redraw
    - clean the PBO
    - reallocate the PBO of the new size
    - unlock redraw