Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-04 12:00:58 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-04 12:00:58 +0400
commita899ce19d0a59278e793f303e9ee6056d189f151 (patch)
tree1fb63a9b2ed24991b97b45fed7b01a2173bf2b44 /intern
parent621245c6cdfe00353113e55f0cc719477ecb10b7 (diff)
Cycles: tweak ATI OpenGL/CUDA fix more with extra error check.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/device/device_cuda.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 4bead82fe5a..0a780e5f576 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -176,7 +176,9 @@ public:
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 @@ public:
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);