diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-01-20 23:28:41 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-01-20 23:28:41 +0300 |
commit | 4369c5817aaadb8888afd697074bdadc85e1485c (patch) | |
tree | b608c4636f881fec182c234a071d96ab937e20ce /intern/cycles/kernel | |
parent | 22a8e934e40ab7a802d0fc988b4097c09c2bc075 (diff) |
Fix T94457: random result using sky texture in light object
Still not well defined, but should not longer use uninitialized values that
gave different results between CPU/GPU and subsequent renders.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/svm/attribute.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/attribute.h b/intern/cycles/kernel/svm/attribute.h index e9de0164c7a..17301028528 100644 --- a/intern/cycles/kernel/svm/attribute.h +++ b/intern/cycles/kernel/svm/attribute.h @@ -87,7 +87,9 @@ ccl_device_noinline void svm_node_attr(KernelGlobals kg, if (node.y == ATTR_STD_GENERATED && desc.element == ATTR_ELEMENT_NONE) { /* No generated attribute, fall back to object coordinates. */ float3 f = sd->P; - object_inverse_position_transform(kg, sd, &f); + if (sd->object != OBJECT_NONE) { + object_inverse_position_transform(kg, sd, &f); + } if (type == NODE_ATTR_OUTPUT_FLOAT) { stack_store_float(stack, out_offset, average(f)); } @@ -179,7 +181,9 @@ ccl_device_noinline void svm_node_attr_bump_dx(KernelGlobals kg, if (node.y == ATTR_STD_GENERATED && desc.element == ATTR_ELEMENT_NONE) { /* No generated attribute, fall back to object coordinates. */ float3 f = sd->P + sd->dP.dx; - object_inverse_position_transform(kg, sd, &f); + if (sd->object != OBJECT_NONE) { + object_inverse_position_transform(kg, sd, &f); + } if (type == NODE_ATTR_OUTPUT_FLOAT) { stack_store_float(stack, out_offset, average(f)); } @@ -275,7 +279,9 @@ ccl_device_noinline void svm_node_attr_bump_dy(KernelGlobals kg, if (node.y == ATTR_STD_GENERATED && desc.element == ATTR_ELEMENT_NONE) { /* No generated attribute, fall back to object coordinates. */ float3 f = sd->P + sd->dP.dy; - object_inverse_position_transform(kg, sd, &f); + if (sd->object != OBJECT_NONE) { + object_inverse_position_transform(kg, sd, &f); + } if (type == NODE_ATTR_OUTPUT_FLOAT) { stack_store_float(stack, out_offset, average(f)); } |