Commit: 7e59bf9b2d499c65d9c8e5fe57cd464b348399d5
Author: varunsundar08
Date:   Wed Apr 15 18:32:20 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rB7e59bf9b2d499c65d9c8e5fe57cd464b348399d5

Force kernel re-compilation check for viewport render

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

M       intern/cycles/device/device.h
M       intern/cycles/device/device_opencl.cpp
M       intern/cycles/render/session.cpp

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

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 65af602..eca713c 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -106,6 +106,9 @@ public:
        /* Get all closure nodes associated with the scene */
        set<int> closure_nodes;
 
+       /* Return background */
+       bool get_background() { return background; }
+
        /* regular memory */
        virtual void mem_alloc(device_memory& mem, MemoryType type) = 0;
        virtual void mem_copy_to(device_memory& mem) = 0;
diff --git a/intern/cycles/device/device_opencl.cpp 
b/intern/cycles/device/device_opencl.cpp
index 3fe608b..cfb54b1 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -548,6 +548,9 @@ public:
        unsigned int max_work_groups;
 #endif
 
+       /* clos_max value for which the kernels have been loaded currently */
+       int current_clos_max;
+
        /* Marked True in constructor and marked false at the end of 
path_trace() */
        bool first_tile;
 
@@ -784,6 +787,7 @@ public:
                work_pool_wgs = NULL;
                max_work_groups = 0;
 #endif
+               current_clos_max = -1;
                first_tile = true;
 
 #else
@@ -1563,6 +1567,23 @@ public:
                        }
                }
                svm_build_options += " ";
+
+               /* if it is an interactive render; we ceil clos_max value to a 
multiple of 5 in order
+                * to limit re-compilations
+                */
+               if (!background) {
+                       /* clos_max value can't be 0  */
+                       clos_max = (clos_max == 0) ? 1 : clos_max;
+                       clos_max = (((clos_max - 1) / 5) + 1) * 5;
+                       /* clos_max value can't be greater than MAX_CLOSURE */
+                       clos_max = (clos_max > MAX_CLOSURE) ? MAX_CLOSURE : 
clos_max;
+
+                       if (current_clos_max == clos_max) {
+                               /* present kernels have been created with the 
same closure count build option */
+                               return true;
+                       }
+               }
+
 #ifdef __MULTI_CLOSURE__
                opt += string_printf("-DMAX_CLOSURE=%d ", clos_max);
 #endif
@@ -1654,6 +1675,8 @@ public:
                if(!load_split_kernel_SPLIT_KERNEL(&sumAllRadiance_program, 
kernel_path, "sumAll", device_md5, kernel_init_source, clbin, " 
-D__SPLIT_KERNEL__ "))
                        return false;
 
+               current_clos_max = clos_max;
+
                kernel_init_source = "#include \"kernel.cl\" // " + kernel_md5 
+ "\n";
                device_md5 = device_md5_hash("");
                clbin = string_printf("cycles_kernel_%s_%s.clbin", 
device_md5.c_str(), kernel_md5.c_str());
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 36895d4..4866043 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -616,7 +616,10 @@ void Session::load_kernels()
 {
        thread_scoped_lock scene_lock(scene->mutex);
 
-       if(!kernels_loaded) {
+       if (!kernels_loaded || !device->get_background()) {
+               /* for split kernel, in case if interactive rendering, we
+                * we need to check kernel-reload before doing path trace
+                */
                progress.set_status("Loading render kernels (may take a few 
minutes the first time)");
 
                if(!device->load_kernels(params.experimental)) {

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

Reply via email to