Commit: 3544d6d6ca0bb88832469fa35b9f5a4f938c17ce
Author: Lukas Stockner
Date:   Sat Sep 10 19:26:39 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB3544d6d6ca0bb88832469fa35b9f5a4f938c17ce

Cycles Denoising: Fix pass handling with MSVC

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

M       intern/cycles/device/device_cpu.cpp
M       intern/cycles/kernel/kernel_path.h
M       intern/cycles/util/util_system.cpp
M       intern/cycles/util/util_system.h
M       source/blender/render/intern/source/external_engine.c

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

diff --git a/intern/cycles/device/device_cpu.cpp 
b/intern/cycles/device/device_cpu.cpp
index 1d1c201..9f1d6e5 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -539,9 +539,6 @@ public:
                RenderTile tile;
 
                while(task.acquire_tile(this, tile)) {
-#ifdef WITH_CYCLES_DEBUG_FPE
-                       scoped_fpe fpe(FPE_ENABLED);
-#endif
                        float *render_buffer = (float*)tile.buffer;
 
                        if(tile.task == RenderTile::PATH_TRACE) {
@@ -550,6 +547,9 @@ public:
                                int end_sample = tile.start_sample + 
tile.num_samples;
 
                                for(int sample = start_sample; sample < 
end_sample; sample++) {
+#ifdef WITH_CYCLES_DEBUG_FPE
+                                       scoped_fpe fpe(FPE_ENABLED);
+#endif
                                        if(task.get_cancel() || 
task_pool.canceled()) {
                                                if(task.need_finish_queue == 
false)
                                                        break;
@@ -564,6 +564,9 @@ public:
 
                                        tile.sample = sample + 1;
 
+#ifdef WITH_CYCLES_DEBUG_FPE
+                                       fpe.restore();
+#endif
                                        task.update_progress(&tile);
                                }
 
diff --git a/intern/cycles/kernel/kernel_path.h 
b/intern/cycles/kernel/kernel_path.h
index d7d83e1..d75d122 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -796,7 +796,7 @@ ccl_device_inline float kernel_path_integrate(KernelGlobals 
*kg,
 
                /* blurring of bsdf after bounces, for rays that have a small 
likelihood
                 * of following this particular path (diffuse, rough glossy) */
-               if(kernel_data.integrator.filter_glossy != FLT_MAX) {
+               if(kernel_data.integrator.filter_glossy != FLT_MAX && 
state.min_ray_pdf < 1e10f) {
                        float blur_pdf = 
kernel_data.integrator.filter_glossy*state.min_ray_pdf;
 
                        if(blur_pdf < 1.0f) {
diff --git a/intern/cycles/util/util_system.cpp 
b/intern/cycles/util/util_system.cpp
index 1001c28..f859b9e 100644
--- a/intern/cycles/util/util_system.cpp
+++ b/intern/cycles/util/util_system.cpp
@@ -321,7 +321,7 @@ scoped_fpe::scoped_fpe(FPEState state)
        }
 }
 
-scoped_fpe::~scoped_fpe()
+void scoped_fpe::restore()
 {
        if(was_enabled) {
                system_enable_fpe();
@@ -331,6 +331,11 @@ scoped_fpe::~scoped_fpe()
        }
 }
 
+scoped_fpe::~scoped_fpe()
+{
+       restore();
+}
+
 #endif
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/util/util_system.h b/intern/cycles/util/util_system.h
index c627c9e..a66c7eb 100644
--- a/intern/cycles/util/util_system.h
+++ b/intern/cycles/util/util_system.h
@@ -49,6 +49,7 @@ class scoped_fpe
 {
 public:
        explicit scoped_fpe(FPEState state);
+       void restore();
        ~scoped_fpe();
 private:
        bool was_enabled;
diff --git a/source/blender/render/intern/source/external_engine.c 
b/source/blender/render/intern/source/external_engine.c
index 7697e46..0c243d1 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -255,7 +255,7 @@ void RE_engine_add_pass(RenderEngine *engine, int passtype, 
int channels, const
                return;
        }
 
-       render_result_add_pass(re->result, 1UL << passtype, channels, 
layername, viewname);
+       render_result_add_pass(re->result, ((uint64_t)1)<<passtype, channels, 
layername, viewname);
 }
 
 void RE_engine_end_result(RenderEngine *engine, RenderResult *result, int 
cancel, int highlight, int merge_results)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to