diff options
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_diffuse.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_microfacet.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_reflection.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_refraction.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_transparent.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_ward.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/bsdf_westin.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_closure.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_convert.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 3 |
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 { |