Commit: 5f31fc951e23b023e26b91afba6e0c4267a3e375
Author: Lukas Stockner
Date:   Wed Jul 6 03:35:36 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB5f31fc951e23b023e26b91afba6e0c4267a3e375

Render API: Fix bugs regarding pass handling when Cycles debugging is enabled

The probem here was that regular passes are stored as (signed) integers.
Therefore, the pass with bit 31 set (the Cycles debug pass) is stored as -1.
On its own, that's fine - however, when that pass type is implicitly cast to 
uint64_t
in a function call, the compiler apparently first sign-extends it and then 
reinterprets
it as unsigned, so the result is 0xffffffff80000000 instead of only bit 31.
To get around that issue, the type is now explicitly cast to a unsigned int32 
first and
then implicitly extended to uint64_t.

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

M       source/blender/editors/space_image/image_buttons.c
M       source/blender/render/intern/source/render_result.c

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

diff --git a/source/blender/editors/space_image/image_buttons.c 
b/source/blender/editors/space_image/image_buttons.c
index a2db682..36c3e81 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -421,7 +421,7 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), 
uiLayout *layout, void *
        RenderPass *rpass;
        const char *fake_name;
        int nr;
-       int passflag = 0;
+       uint64_t passflag = 0;
 
        /* may have been freed since drawing */
        rr = BKE_image_acquire_renderresult(scene, image);
diff --git a/source/blender/render/intern/source/render_result.c 
b/source/blender/render/intern/source/render_result.c
index bc0a248..470061b 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -647,7 +647,7 @@ static RenderPass *render_layer_add_debug_pass(RenderResult 
*rr,
 {
        const char *name = RE_debug_pass_name_get(debug_type);
        int channels = RE_debug_pass_num_channels_get(debug_type);
-       RenderPass *rpass = render_layer_add_pass(rr, rl, channels, pass_type, 
view);
+       RenderPass *rpass = render_layer_add_pass(rr, rl, channels, (unsigned 
int) pass_type, view);
        if (rpass == NULL) {
                return NULL;
        }
@@ -756,7 +756,7 @@ RenderResult *render_result_new(Render *re, rcti *partrct, 
int crop, int savebuf
 
 #define RENDER_LAYER_ADD_PASS_SAFE(rr, rl, channels, passtype, viewname) \
                        do { \
-                               if (render_layer_add_pass(rr, rl, channels, 
passtype, viewname) == NULL) { \
+                               if (render_layer_add_pass(rr, rl, channels, 
(unsigned int) (passtype), viewname) == NULL) { \
                                        render_result_free(rr); \
                                        return NULL; \
                                } \

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

Reply via email to