Fix T44755 set_value node output in node tree not properly converted to
authorAntony Riakiotakis <kalast@gmail.com>
Tue, 19 May 2015 13:35:33 +0000 (15:35 +0200)
committerAntony Riakiotakis <kalast@gmail.com>
Tue, 19 May 2015 13:37:08 +0000 (15:37 +0200)
color in GLSL

Issue here is that intermediate result was clipped as an optimization in
such nodes and thus not converted to the correct type properly. Now only
clip those values if types match.
This keeps both the optimization and the conversion. I looked at
converting uniform types always but it's more involved to compare types
at conversion time for such links because the type was getting
overridden during link duplication.

source/blender/gpu/intern/gpu_codegen.c

index 90e4ce69394afd92ea9d8434526596f7af51d47e..8f07df5d3d1a845b6729a92de05d239f81c4b918 100644 (file)
@@ -930,8 +930,11 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const GPUType
        if (link->output) {
                outnode = link->output->node;
                name = outnode->name;
+               input = outnode->inputs.first;
 
-               if (STREQ(name, "set_value") || STREQ(name, "set_rgb")) {
+               if ((STREQ(name, "set_value") || STREQ(name, "set_rgb")) &&
+                   (input->type == type))
+               {
                        input = MEM_dupallocN(outnode->inputs.first);
                        input->type = type;
                        if (input->link)