Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-01-20 23:28:41 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-01-20 23:28:41 +0300
commit4369c5817aaadb8888afd697074bdadc85e1485c (patch)
treeb608c4636f881fec182c234a071d96ab937e20ce /intern
parent22a8e934e40ab7a802d0fc988b4097c09c2bc075 (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')
-rw-r--r--intern/cycles/kernel/svm/attribute.h12
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));
}