diff options
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/kernel_object.h | 11 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_geometry.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 1 |
3 files changed, 16 insertions, 2 deletions
diff --git a/intern/cycles/kernel/kernel_object.h b/intern/cycles/kernel/kernel_object.h index 18e0b1e8a87..4ff315ca265 100644 --- a/intern/cycles/kernel/kernel_object.h +++ b/intern/cycles/kernel/kernel_object.h @@ -169,20 +169,27 @@ __device int shader_pass_id(KernelGlobals *kg, ShaderData *sd) return kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2 + 1); } -__device float particle_age(KernelGlobals *kg, int particle) +__device_inline float particle_index(KernelGlobals *kg, int particle) { int offset = particle*PARTICLE_SIZE; float4 f = kernel_tex_fetch(__particles, offset); return f.x; } -__device float particle_lifetime(KernelGlobals *kg, int particle) +__device float particle_age(KernelGlobals *kg, int particle) { int offset = particle*PARTICLE_SIZE; float4 f = kernel_tex_fetch(__particles, offset); return f.y; } +__device float particle_lifetime(KernelGlobals *kg, int particle) +{ + int offset = particle*PARTICLE_SIZE; + float4 f = kernel_tex_fetch(__particles, offset); + return f.z; +} + CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/svm/svm_geometry.h b/intern/cycles/kernel/svm/svm_geometry.h index 88127b56474..3cfce1d087a 100644 --- a/intern/cycles/kernel/svm/svm_geometry.h +++ b/intern/cycles/kernel/svm/svm_geometry.h @@ -101,6 +101,12 @@ __device void svm_node_particle_info(KernelGlobals *kg, ShaderData *sd, float *s float data; switch(type) { + case NODE_INFO_PAR_INDEX: { + uint particle_id = object_particle_id(kg, sd->object); + data = particle_index(kg, particle_id); + stack_store_float(stack, out_offset, data); + break; + } case NODE_INFO_PAR_AGE: { uint particle_id = object_particle_id(kg, sd->object); data = particle_age(kg, particle_id); diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index c1eeeb55268..cbff0c099ea 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -114,6 +114,7 @@ typedef enum NodeObjectInfo { } NodeObjectInfo; typedef enum NodeParticleInfo { + NODE_INFO_PAR_INDEX, NODE_INFO_PAR_AGE, NODE_INFO_PAR_LIFETIME } NodeParticleInfo; |