[Bf-blender-cvs] [5f31fc9] soc-2016-cycles_denoising: Render API: Fix bugs regarding pass handling when Cycles debugging is enabled

Lukas Stockner noreply at git.blender.org
Wed Jul 6 04:28:51 CEST 2016


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; \
 				} \




More information about the Bf-blender-cvs mailing list