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:
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r--intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h2
-rw-r--r--intern/cycles/kernel/svm/bsdf_diffuse.h4
-rw-r--r--intern/cycles/kernel/svm/bsdf_microfacet.h4
-rw-r--r--intern/cycles/kernel/svm/bsdf_reflection.h1
-rw-r--r--intern/cycles/kernel/svm/bsdf_refraction.h1
-rw-r--r--intern/cycles/kernel/svm/bsdf_transparent.h1
-rw-r--r--intern/cycles/kernel/svm/bsdf_ward.h2
-rw-r--r--intern/cycles/kernel/svm/bsdf_westin.h4
-rw-r--r--intern/cycles/kernel/svm/svm.h4
-rw-r--r--intern/cycles/kernel/svm/svm_closure.h6
-rw-r--r--intern/cycles/kernel/svm/svm_convert.h2
-rw-r--r--intern/cycles/kernel/svm/svm_types.h3
12 files changed, 23 insertions, 11 deletions
diff --git a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
index 04e4ccb8313..a04f4e2b076 100644
--- a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
+++ b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
@@ -50,7 +50,7 @@ __device void bsdf_ashikhmin_velvet_setup(ShaderData *sd, float3 N, float sigma)
self->m_invsigma2 = 1.0f/(sigma * sigma);
sd->svm_closure = CLOSURE_BSDF_ASHIKHMIN_VELVET_ID;
- sd->flag |= SD_BSDF_HAS_EVAL;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL;
}
__device void bsdf_ashikhmin_velvet_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_diffuse.h b/intern/cycles/kernel/svm/bsdf_diffuse.h
index 00493e72203..dcd29534109 100644
--- a/intern/cycles/kernel/svm/bsdf_diffuse.h
+++ b/intern/cycles/kernel/svm/bsdf_diffuse.h
@@ -47,7 +47,7 @@ __device void bsdf_diffuse_setup(ShaderData *sd, float3 N)
//self->m_N = N;
sd->svm_closure = CLOSURE_BSDF_DIFFUSE_ID;
- sd->flag |= SD_BSDF_HAS_EVAL;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL;
}
__device void bsdf_diffuse_blur(ShaderData *sd, float roughness)
@@ -110,7 +110,7 @@ __device void bsdf_translucent_setup(ShaderData *sd, float3 N)
//self->m_N = N;
sd->svm_closure = CLOSURE_BSDF_TRANSLUCENT_ID;
- sd->flag |= SD_BSDF_HAS_EVAL;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL;
}
__device void bsdf_translucent_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_microfacet.h b/intern/cycles/kernel/svm/bsdf_microfacet.h
index a948ba06871..c98092b2f8f 100644
--- a/intern/cycles/kernel/svm/bsdf_microfacet.h
+++ b/intern/cycles/kernel/svm/bsdf_microfacet.h
@@ -58,7 +58,7 @@ __device void bsdf_microfacet_ggx_setup(ShaderData *sd, float3 N, float ag, floa
else
sd->svm_closure = CLOSURE_BSDF_MICROFACET_GGX_ID;
- sd->flag |= SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
}
__device void bsdf_microfacet_ggx_blur(ShaderData *sd, float roughness)
@@ -278,7 +278,7 @@ __device void bsdf_microfacet_beckmann_setup(ShaderData *sd, float3 N, float ab,
else
sd->svm_closure = CLOSURE_BSDF_MICROFACET_BECKMANN_ID;
- sd->flag |= SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
}
__device void bsdf_microfacet_beckmann_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_reflection.h b/intern/cycles/kernel/svm/bsdf_reflection.h
index 287cc9c2506..2c49eb7ef24 100644
--- a/intern/cycles/kernel/svm/bsdf_reflection.h
+++ b/intern/cycles/kernel/svm/bsdf_reflection.h
@@ -47,6 +47,7 @@ __device void bsdf_reflection_setup(ShaderData *sd, float3 N)
//self->m_N = N;
sd->svm_closure = CLOSURE_BSDF_REFLECTION_ID;
+ sd->flag |= SD_BSDF;
}
__device void bsdf_reflection_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_refraction.h b/intern/cycles/kernel/svm/bsdf_refraction.h
index 55a914f8334..534945f4f0b 100644
--- a/intern/cycles/kernel/svm/bsdf_refraction.h
+++ b/intern/cycles/kernel/svm/bsdf_refraction.h
@@ -48,6 +48,7 @@ __device void bsdf_refraction_setup(ShaderData *sd, float3 N, float eta)
self->m_eta = eta;
sd->svm_closure = CLOSURE_BSDF_REFRACTION_ID;
+ sd->flag |= SD_BSDF;
}
__device void bsdf_refraction_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_transparent.h b/intern/cycles/kernel/svm/bsdf_transparent.h
index e689e3db357..30288bf251d 100644
--- a/intern/cycles/kernel/svm/bsdf_transparent.h
+++ b/intern/cycles/kernel/svm/bsdf_transparent.h
@@ -38,6 +38,7 @@ CCL_NAMESPACE_BEGIN
__device void bsdf_transparent_setup(ShaderData *sd)
{
sd->svm_closure = CLOSURE_BSDF_TRANSPARENT_ID;
+ sd->flag |= SD_BSDF;
}
__device void bsdf_transparent_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_ward.h b/intern/cycles/kernel/svm/bsdf_ward.h
index c54418afa77..6680644a1a7 100644
--- a/intern/cycles/kernel/svm/bsdf_ward.h
+++ b/intern/cycles/kernel/svm/bsdf_ward.h
@@ -54,7 +54,7 @@ __device void bsdf_ward_setup(ShaderData *sd, float3 N, float3 T, float ax, floa
self->m_ay = clamp(ay, 1e-5f, 1.0f);
sd->svm_closure = CLOSURE_BSDF_WARD_ID;
- sd->flag |= SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
}
__device void bsdf_ward_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/bsdf_westin.h b/intern/cycles/kernel/svm/bsdf_westin.h
index 6031012d0ca..55fc8286529 100644
--- a/intern/cycles/kernel/svm/bsdf_westin.h
+++ b/intern/cycles/kernel/svm/bsdf_westin.h
@@ -51,7 +51,7 @@ __device void bsdf_westin_backscatter_setup(ShaderData *sd, float3 N, float roug
self->m_invroughness = 1.0f/roughness;
sd->svm_closure = CLOSURE_BSDF_WESTIN_BACKSCATTER_ID;
- sd->flag |= SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
}
__device void bsdf_westin_backscatter_blur(ShaderData *sd, float roughness)
@@ -146,7 +146,7 @@ __device void bsdf_westin_sheen_setup(ShaderData *sd, float3 N, float edginess)
self->m_edginess = edginess;
sd->svm_closure = CLOSURE_BSDF_WESTIN_SHEEN_ID;
- sd->flag |= SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
+ sd->flag |= SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY;
}
__device void bsdf_westin_sheen_blur(ShaderData *sd, float roughness)
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 68e54d9752e..3a2b6bfb1ae 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -148,7 +148,7 @@ CCL_NAMESPACE_BEGIN
/* Main Interpreter Loop */
-__device void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderType type, float randb, int path_flag)
+__device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderType type, float randb, int path_flag)
{
float stack[SVM_STACK_SIZE];
float closure_weight = 1.0f;
@@ -172,6 +172,8 @@ __device void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderType type,
svm_node_closure_emission(sd);
else if(node.x == NODE_CLOSURE_BACKGROUND)
svm_node_closure_background(sd);
+ else if(node.x == NODE_CLOSURE_HOLDOUT)
+ svm_node_closure_holdout(sd);
else if(node.x == NODE_CLOSURE_SET_WEIGHT)
svm_node_closure_set_weight(sd, node.y, node.z, node.w);
else if(node.x == NODE_CLOSURE_WEIGHT)
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index a7462e2c358..1efadcefbd5 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -136,6 +136,12 @@ __device void svm_node_closure_background(ShaderData *sd)
sd->svm_closure = CLOSURE_BACKGROUND_ID;
}
+__device void svm_node_closure_holdout(ShaderData *sd)
+{
+ sd->svm_closure = CLOSURE_HOLDOUT_ID;
+ sd->flag |= SD_HOLDOUT;
+}
+
/* Closure Nodes */
__device void svm_node_closure_set_weight(ShaderData *sd, uint r, uint g, uint b)
diff --git a/intern/cycles/kernel/svm/svm_convert.h b/intern/cycles/kernel/svm/svm_convert.h
index 14925569bfb..188b0489d9e 100644
--- a/intern/cycles/kernel/svm/svm_convert.h
+++ b/intern/cycles/kernel/svm/svm_convert.h
@@ -30,7 +30,7 @@ __device void svm_node_convert(ShaderData *sd, float *stack, uint type, uint fro
}
case NODE_CONVERT_CF: {
float3 f = stack_load_float3(stack, from);
- float g = f.x*0.2126f + f.y*0.7152f + f.z*0.0722f;
+ float g = linear_rgb_to_gray(f);
stack_store_float(stack, to, g);
break;
}
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 5cbd05e4400..786478c0c03 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -81,7 +81,8 @@ typedef enum NodeType {
NODE_EMISSION_SET_WEIGHT_TOTAL = 4300,
NODE_ATTR_BUMP_DX = 4400,
NODE_ATTR_BUMP_DY = 4500,
- NODE_TEX_ENVIRONMENT = 4600
+ NODE_TEX_ENVIRONMENT = 4600,
+ NODE_CLOSURE_HOLDOUT = 4700
} NodeType;
typedef enum NodeAttributeType {