Commit: 4174e533c001367b0ef391b72baa5b07cb517ce8
Author: Sergey Sharybin
Date:   Tue May 2 15:02:49 2017 +0200
Branches: master
https://developer.blender.org/rB4174e533c001367b0ef391b72baa5b07cb517ce8

Cycles: Cache split kernels in CUDA device

This way we don't re-load kernels for every sample in the viewport.
Additionally, we don't risk global size changed inbetween of samples.

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

M       intern/cycles/device/device_cuda.cpp

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

diff --git a/intern/cycles/device/device_cuda.cpp 
b/intern/cycles/device/device_cuda.cpp
index ef283c9d455..acfb3e1d8f4 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -119,6 +119,7 @@ public:
        int cuDevId;
        int cuDevArchitecture;
        bool first_error;
+       CUDASplitKernel *split_kernel;
 
        struct PixelMem {
                GLuint cuPBO;
@@ -221,6 +222,8 @@ public:
                cuDevice = 0;
                cuContext = 0;
 
+               split_kernel = NULL;
+
                need_bindless_mapping = false;
 
                /* intialize */
@@ -260,6 +263,8 @@ public:
        {
                task_pool.stop();
 
+               delete split_kernel;
+
                if(info.has_bindless_textures) {
                        tex_free(bindless_mapping);
                }
@@ -1336,12 +1341,14 @@ public:
                                        requested_features.max_closure = 64;
                                }
 
-                               CUDASplitKernel split_kernel(this);
-                               split_kernel.load_kernels(requested_features);
+                               if(split_kernel == NULL) {
+                                       split_kernel = new 
CUDASplitKernel(this);
+                                       
split_kernel->load_kernels(requested_features);
+                               }
 
                                while(task->acquire_tile(this, tile)) {
                                        device_memory void_buffer;
-                                       split_kernel.path_trace(task, tile, 
void_buffer, void_buffer);
+                                       split_kernel->path_trace(task, tile, 
void_buffer, void_buffer);
 
                                        task->release_tile(tile);

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

Reply via email to