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:
authorLukas Stockner <lukas.stockner@freenet.de>2016-09-14 19:53:35 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2016-09-14 19:53:35 +0300
commitaae2cea28d0c6c970778674e0ba329b2208b8366 (patch)
treef2a83d7bdf56be8a9578fc37d554fc69f37b0e7c /intern/cycles/kernel/kernel_emission.h
parent51e8c167f40c63c191ac9271fe02de78f2a49b22 (diff)
Cycles: Also support the constant emission speedup for mesh lights
Reviewers: brecht, sergey, dingto, juicyfruit Differential Revision: https://developer.blender.org/D2220
Diffstat (limited to 'intern/cycles/kernel/kernel_emission.h')
-rw-r--r--intern/cycles/kernel/kernel_emission.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 2b525812775..ac498ba3592 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -29,6 +29,8 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg,
/* setup shading at emitter */
float3 eval;
+ int shader_flag = kernel_tex_fetch(__shader_flag, (ls->shader & SHADER_MASK)*SHADER_SIZE);
+
#ifdef __BACKGROUND_MIS__
if(ls->type == LIGHT_BACKGROUND) {
Ray ray;
@@ -49,10 +51,14 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg,
}
else
#endif
- if(ls->lamp != LAMP_NONE && (ls->shader & SHADER_FIXED_EMISSION))
+ if(shader_flag & SD_HAS_CONSTANT_EMISSION)
{
- float4 L = kernel_tex_fetch(__light_data, ls->lamp*LIGHT_SIZE + 4);
- eval = make_float3(L.y, L.z, L.w);
+ eval.x = __int_as_float(kernel_tex_fetch(__shader_flag, (ls->shader & SHADER_MASK)*SHADER_SIZE + 2));
+ eval.y = __int_as_float(kernel_tex_fetch(__shader_flag, (ls->shader & SHADER_MASK)*SHADER_SIZE + 3));
+ eval.z = __int_as_float(kernel_tex_fetch(__shader_flag, (ls->shader & SHADER_MASK)*SHADER_SIZE + 4));
+ if((ls->prim != PRIM_NONE) && dot(ls->Ng, I) < 0.0f) {
+ ls->Ng = -ls->Ng;
+ }
}
else
{