Commit: d0892a66483cd03d63aec27d11681e572d1f3494
Author: Brecht Van Lommel
Date:   Tue Jan 9 18:37:46 2018 +0100
Branches: master
https://developer.blender.org/rBd0892a66483cd03d63aec27d11681e572d1f3494

Fix issue with moving CUDA memory to host and multiple devices.

This is not expected to fix all issues. Also adds some more details
to error reporting to investigate failures.

===================================================================

M       intern/cycles/device/device_cuda.cpp

===================================================================

diff --git a/intern/cycles/device/device_cuda.cpp 
b/intern/cycles/device/device_cuda.cpp
index 51d9994ee26..116f4e2a452 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -829,18 +829,26 @@ public:
                                status = " in host memory";
 
                                /* Replace host pointer with our host 
allocation. Only works if
-                                * CUDA memory layout is the same and has no 
pitch padding. */
-                               if(pitch_padding == 0 && mem.host_pointer && 
mem.host_pointer != mem.shared_pointer) {
+                                * CUDA memory layout is the same and has no 
pitch padding. Also
+                                * does not work if we move textures to host 
during a render,
+                                * since other devices might be using the 
memory. */
+                               if(!move_texture_to_host && pitch_padding == 0 
&&
+                                  mem.host_pointer && mem.host_pointer != 
mem.shared_pointer) {
                                        memcpy(mem.shared_pointer, 
mem.host_pointer, size);
                                        mem.host_free();
                                        mem.host_pointer = mem.shared_pointer;
                                }
                        }
+                       else {
+                               status = " failed, out of host memory";
+                       }
+               }
+               else if(mem_alloc_result != CUDA_SUCCESS) {
+                       status = " failed, out of device and host memory";
                }
 
                if(mem_alloc_result != CUDA_SUCCESS) {
                        cuda_assert(mem_alloc_result);
-                       status = " failed, out of memory";
                }
 
                if(mem.name) {

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to