diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2016-09-14 19:53:35 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-01-20 13:24:59 +0300 |
commit | f1fe4eb3d15736b7d4caf5856d7057da6b2c7ac4 (patch) | |
tree | 804389f2b533cc45896cd9eeddb40dc5ca767157 /intern/cycles/kernel/kernel_emission.h | |
parent | da234142b826ea4fff6b03810a7810827c1ce474 (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.h | 12 |
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 { |