[vtk-developers] vtkPistonMapper bug
Onogi Shinya
shinya.onogi at live.jp
Thu Aug 14 01:24:05 EDT 2014
Hi all:
vtkPistonMapper calls vtkpiston::CudaRegisterBuffer in every gpu rendering (in vtkPistonMapper.cxx; L181-L186); however, cudaGraphicsUnregisterResource is never called. It results in a gpu resource issue when vtkPistonAlgorithm is updated several times.
Quick solution I tested is followings:
vtkPistonMapper.cxx
43 void CudaRegisterBuffer(struct cudaGraphicsResource **vboResource,
44 GLuint vboBuffer);
+ void CudaUnregisterBuffer(struct cudaGraphicsResource **vboResource);
148 if (this->Internal->BufferSize != 0)
149 {
150 // Release old buffer
+ vtkpiston::CudaUnregisterResource(this->Internal->vboResources[0]);
+ vtkpiston::CudaUnregisterResource(this->Internal->vboResources[1]);
+ vtkpiston::CudaUnregisterResource(this->Internal->vboResources[2]);
151 vtkgl::DeleteBuffers(3, this->Internal->vboBuffers);
vtkPistonMapper.cu
void CudaUnregisterResource(struct cudaGraphicsResource *vboResource)
{
cudaError_t res = cudaGraphicsUnregisterResource(vboResource);
if (res != cudaSuccess)
{
cerr << "Unregister buffer failed ... " << cudaGetErrorString(res) << endl;
return;
}
}
But, register/unregister in every rendering wouldn't be needed according to samples of gl interop with cuda.
Thnaks,
Shinya
More information about the vtk-developers
mailing list