Fix T46352: Cycles fails to render when material contains UV mapped texture as volume...
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 5 Oct 2015 09:45:03 +0000 (14:45 +0500)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 5 Oct 2015 09:45:03 +0000 (14:45 +0500)
intern/cycles/kernel/svm/svm_attribute.h

index 025ae96f59d58e3dfcfc6297113a3a91790d46d0..63bbb27d8732a1cfeaa2e2f2affff8852015b04e 100644 (file)
@@ -22,6 +22,8 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
        uint4 node, NodeAttributeType *type,
        NodeAttributeType *mesh_type, AttributeElement *elem, int *offset, uint *out_offset)
 {
+       *out_offset = node.z;
+       *type = (NodeAttributeType)node.w;
        if(ccl_fetch(sd, object) != OBJECT_NONE) {
                /* find attribute by unique id */
                uint id = node.y;
@@ -32,6 +34,12 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
                uint4 attr_map = kernel_tex_fetch(__attributes_map, attr_offset);
                
                while(attr_map.x != id) {
+                       if(UNLIKELY(attr_map.x == ATTR_STD_NONE)) {
+                               *elem = ATTR_ELEMENT_NONE;
+                               *offset = 0;
+                               *mesh_type = (NodeAttributeType)node.w;
+                               return;
+                       }
                        attr_offset += ATTR_PRIM_TYPES;
                        attr_map = kernel_tex_fetch(__attributes_map, attr_offset);
                }
@@ -47,9 +55,6 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
                *offset = 0;
                *mesh_type = (NodeAttributeType)node.w;
        }
-
-       *out_offset = node.z;
-       *type = (NodeAttributeType)node.w;
 }
 
 ccl_device void svm_node_attr(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)