From 4369c5817aaadb8888afd697074bdadc85e1485c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 20 Jan 2022 21:28:41 +0100 Subject: 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. --- intern/cycles/kernel/svm/attribute.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'intern') 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)); } -- cgit v1.2.3