[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46261] trunk/blender/intern/cycles/device /device_cuda.cpp: Cycles: tweak ATI OpenGL/ CUDA fix more with extra error check.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri May 4 10:00:58 CEST 2012


Revision: 46261
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46261
Author:   blendix
Date:     2012-05-04 08:00:58 +0000 (Fri, 04 May 2012)
Log Message:
-----------
Cycles: tweak ATI OpenGL/CUDA fix more with extra error check.

Modified Paths:
--------------
    trunk/blender/intern/cycles/device/device_cuda.cpp

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp	2012-05-04 08:00:55 UTC (rev 46260)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp	2012-05-04 08:00:58 UTC (rev 46261)
@@ -176,7 +176,9 @@
 			result = cuCtxCreate(&cuContext, 0, cuDevice);
 		}
 		else {
-			if(cuGLCtxCreate(&cuContext, 0, cuDevice) != CUDA_SUCCESS) {
+			result = cuGLCtxCreate(&cuContext, 0, cuDevice);
+
+			if(result != CUDA_SUCCESS) {
 				result = cuCtxCreate(&cuContext, 0, cuDevice);
 				background = true;
 			}
@@ -691,14 +693,25 @@
 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 			glBindTexture(GL_TEXTURE_2D, 0);
 			
-			cuda_assert(cuGraphicsGLRegisterBuffer(&pmem.cuPBOresource, pmem.cuPBO, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE))
+			CUresult result = cuGraphicsGLRegisterBuffer(&pmem.cuPBOresource, pmem.cuPBO, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE);
 
-			cuda_pop_context();
+			if(!cuda_error(result)) {
+				cuda_pop_context();
 
-			mem.device_pointer = pmem.cuTexId;
-			pixel_mem_map[mem.device_pointer] = pmem;
+				mem.device_pointer = pmem.cuTexId;
+				pixel_mem_map[mem.device_pointer] = pmem;
 
-			return;
+				return;
+			}
+			else {
+				/* failed to register buffer, fallback to no interop */
+				glDeleteBuffers(1, &pmem.cuPBO);
+				glDeleteTextures(1, &pmem.cuTexId);
+
+				cuda_pop_context();
+
+				background = true;
+			}
 		}
 
 		Device::pixels_alloc(mem);




More information about the Bf-blender-cvs mailing list