Revision: 43743
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43743
Author:   blendix
Date:     2012-01-27 13:58:32 +0000 (Fri, 27 Jan 2012)
Log Message:
-----------
Cycles: another fix for CUDA render passes, needed to align float4 passes.

Modified Paths:
--------------
    trunk/blender/intern/cycles/device/device_cuda.cpp
    trunk/blender/intern/cycles/render/buffers.cpp
    trunk/blender/intern/cycles/render/film.cpp
    trunk/blender/intern/cycles/util/util_types.h

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp  2012-01-27 09:03:47 UTC 
(rev 43742)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp  2012-01-27 13:58:32 UTC 
(rev 43743)
@@ -106,11 +106,6 @@
                }
        }
 
-       static int cuda_align_up(int& offset, int alignment)
-       {
-               return (offset + alignment - 1) & ~(alignment - 1);
-       }
-
 #ifdef NDEBUG
 #define cuda_abort()
 #else
@@ -485,7 +480,7 @@
                offset += sizeof(d_rng_state);
 
                int sample = task.sample;
-               offset = cuda_align_up(offset, __alignof(sample));
+               offset = align_up(offset, __alignof(sample));
 
                cuda_assert(cuParamSeti(cuPathTrace, offset, task.sample))
                offset += sizeof(task.sample);
@@ -549,7 +544,7 @@
                offset += sizeof(d_buffer);
 
                int sample = task.sample;
-               offset = cuda_align_up(offset, __alignof(sample));
+               offset = align_up(offset, __alignof(sample));
 
                cuda_assert(cuParamSeti(cuFilmConvert, offset, task.sample))
                offset += sizeof(task.sample);
@@ -618,7 +613,7 @@
                offset += sizeof(d_offset);
 
                int shader_eval_type = task.shader_eval_type;
-               offset = cuda_align_up(offset, __alignof(shader_eval_type));
+               offset = align_up(offset, __alignof(shader_eval_type));
 
                cuda_assert(cuParamSeti(cuDisplace, offset, 
task.shader_eval_type))
                offset += sizeof(task.shader_eval_type);

Modified: trunk/blender/intern/cycles/render/buffers.cpp
===================================================================
--- trunk/blender/intern/cycles/render/buffers.cpp      2012-01-27 09:03:47 UTC 
(rev 43742)
+++ trunk/blender/intern/cycles/render/buffers.cpp      2012-01-27 13:58:32 UTC 
(rev 43743)
@@ -71,7 +71,7 @@
        foreach(Pass& pass, passes)
                size += pass.components;
        
-       return size;
+       return align_up(size, 4);
 }
 
 /* Render Buffers */

Modified: trunk/blender/intern/cycles/render/film.cpp
===================================================================
--- trunk/blender/intern/cycles/render/film.cpp 2012-01-27 09:03:47 UTC (rev 
43742)
+++ trunk/blender/intern/cycles/render/film.cpp 2012-01-27 13:58:32 UTC (rev 
43743)
@@ -21,12 +21,20 @@
 #include "film.h"
 #include "scene.h"
 
+#include "util_algorithm.h"
 #include "util_foreach.h"
 
 CCL_NAMESPACE_BEGIN
 
 /* Pass */
 
+static bool compare_pass_order(const Pass& a, const Pass& b)
+{
+       if(a.components == b.components)
+               return (a.type < b.type);
+       return (a.components > b.components);
+}
+
 void Pass::add(PassType type, vector<Pass>& passes)
 {
        Pass pass;
@@ -106,6 +114,10 @@
        }
 
        passes.push_back(pass);
+
+       /* order from by components, to ensure alignment so passes with size 4
+          come first and then passes with size 1 */
+       sort(passes.begin(), passes.end(), compare_pass_order);
 }
 
 bool Pass::equals(const vector<Pass>& A, const vector<Pass>& B)
@@ -219,6 +231,8 @@
                kfilm->pass_stride += pass.components;
        }
 
+       kfilm->pass_stride = align_up(kfilm->pass_stride, 4);
+
        need_update = false;
 }
 

Modified: trunk/blender/intern/cycles/util/util_types.h
===================================================================
--- trunk/blender/intern/cycles/util/util_types.h       2012-01-27 09:03:47 UTC 
(rev 43742)
+++ trunk/blender/intern/cycles/util/util_types.h       2012-01-27 13:58:32 UTC 
(rev 43743)
@@ -277,6 +277,11 @@
        return a;
 }
 
+__device int align_up(int offset, int alignment)
+{
+       return (offset + alignment - 1) & ~(alignment - 1);
+}
+
 #endif
 
 CCL_NAMESPACE_END

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

Reply via email to