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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-05-23 15:09:27 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2016-06-08 22:45:40 +0300
commit160aaa3c252b411ba0b464b4db23a2c70c4d5545 (patch)
tree8781525df7aea7ed5c896fa6faffd7b76e8d79e8 /intern/cycles/render/nodes.h
parent96e3643cfa9e88692825cae6277229513b85529c (diff)
Cycles: Fix wrong closure counter in feature adaptive kernel
Some closures were missing from calculation, leading to an array under-allocation, presumable causing memory corruption issues with emission shaders on OpenCL and was causing issues with Volume 3D textures with CUDA. The issue was identified by Thomas Dinges, the patch is different from the original D2006. See the brief discussion there. Current approach is similar (or the same) as Brecht suggested.
Diffstat (limited to 'intern/cycles/render/nodes.h')
-rw-r--r--intern/cycles/render/nodes.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 54a5220dcef..5df34a84559 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -387,6 +387,7 @@ public:
bool has_spatial_varying() { return true; }
void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2, ShaderInput *param3 = NULL, ShaderInput *param4 = NULL);
+ virtual ClosureType get_closure_type() { return closure; }
ClosureType closure;
bool scattering;
@@ -484,6 +485,7 @@ class EmissionNode : public ShaderNode {
public:
SHADER_NODE_CLASS(EmissionNode)
bool constant_fold(ShaderGraph *graph, ShaderOutput *socket, float3 *optimized_value);
+ virtual ClosureType get_closure_type() { return CLOSURE_EMISSION_ID; }
bool has_surface_emission() { return true; }
};
@@ -492,12 +494,14 @@ class BackgroundNode : public ShaderNode {
public:
SHADER_NODE_CLASS(BackgroundNode)
bool constant_fold(ShaderGraph *graph, ShaderOutput *socket, float3 *optimized_value);
+ virtual ClosureType get_closure_type() { return CLOSURE_BACKGROUND_ID; }
};
class HoldoutNode : public ShaderNode {
public:
SHADER_NODE_CLASS(HoldoutNode)
virtual int get_group() { return NODE_GROUP_LEVEL_1; }
+ virtual ClosureType get_closure_type() { return CLOSURE_HOLDOUT_ID; }
};
class AmbientOcclusionNode : public ShaderNode {
@@ -506,6 +510,7 @@ public:
bool has_spatial_varying() { return true; }
virtual int get_group() { return NODE_GROUP_LEVEL_1; }
+ virtual ClosureType get_closure_type() { return CLOSURE_AMBIENT_OCCLUSION_ID; }
};
class VolumeNode : public ShaderNode {
@@ -517,6 +522,7 @@ public:
virtual int get_feature() {
return ShaderNode::get_feature() | NODE_FEATURE_VOLUME;
}
+ virtual ClosureType get_closure_type() { return closure; }
ClosureType closure;