Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/geom/geom_shader_data.h
| Show All 19 Lines | |||||
| #pragma once | #pragma once | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| /* ShaderData setup from incoming ray */ | /* ShaderData setup from incoming ray */ | ||||
| #ifdef __OBJECT_MOTION__ | #ifdef __OBJECT_MOTION__ | ||||
| ccl_device void shader_setup_object_transforms(ccl_global const KernelGlobals *ccl_restrict kg, | ccl_device void shader_setup_object_transforms(KernelGlobals kg, | ||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| float time) | float time) | ||||
| { | { | ||||
| if (sd->object_flag & SD_OBJECT_MOTION) { | if (sd->object_flag & SD_OBJECT_MOTION) { | ||||
| sd->ob_tfm_motion = object_fetch_transform_motion(kg, sd->object, time); | sd->ob_tfm_motion = object_fetch_transform_motion(kg, sd->object, time); | ||||
| sd->ob_itfm_motion = transform_quick_inverse(sd->ob_tfm_motion); | sd->ob_itfm_motion = transform_quick_inverse(sd->ob_tfm_motion); | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* TODO: break this up if it helps reduce register pressure to load data from | /* TODO: break this up if it helps reduce register pressure to load data from | ||||
| * global memory as we write it to shader-data. */ | * global memory as we write it to shader-data. */ | ||||
| ccl_device_inline void shader_setup_from_ray(ccl_global const KernelGlobals *ccl_restrict kg, | ccl_device_inline void shader_setup_from_ray(KernelGlobals kg, | ||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| ccl_private const Ray *ccl_restrict ray, | ccl_private const Ray *ccl_restrict ray, | ||||
| ccl_private const Intersection *ccl_restrict isect) | ccl_private const Intersection *ccl_restrict isect) | ||||
| { | { | ||||
| /* Read intersection data into shader globals. | /* Read intersection data into shader globals. | ||||
| * | * | ||||
| * TODO: this is redundant, could potentially remove some of this from | * TODO: this is redundant, could potentially remove some of this from | ||||
| * ShaderData but would need to ensure that it also works for shadow | * ShaderData but would need to ensure that it also works for shadow | ||||
| ▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | #ifdef __RAY_DIFFERENTIALS__ | ||||
| differential_transfer_compact(&sd->dP, ray->dP, ray->D, ray->dD, sd->Ng, sd->ray_length); | differential_transfer_compact(&sd->dP, ray->dP, ray->D, ray->dD, sd->Ng, sd->ray_length); | ||||
| differential_incoming_compact(&sd->dI, ray->D, ray->dD); | differential_incoming_compact(&sd->dI, ray->D, ray->dD); | ||||
| differential_dudv(&sd->du, &sd->dv, sd->dPdu, sd->dPdv, sd->dP, sd->Ng); | differential_dudv(&sd->du, &sd->dv, sd->dPdu, sd->dPdv, sd->dP, sd->Ng); | ||||
| #endif | #endif | ||||
| } | } | ||||
| /* ShaderData setup from position sampled on mesh */ | /* ShaderData setup from position sampled on mesh */ | ||||
| ccl_device_inline void shader_setup_from_sample(ccl_global const KernelGlobals *ccl_restrict kg, | ccl_device_inline void shader_setup_from_sample(KernelGlobals kg, | ||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| const float3 P, | const float3 P, | ||||
| const float3 Ng, | const float3 Ng, | ||||
| const float3 I, | const float3 I, | ||||
| int shader, | int shader, | ||||
| int object, | int object, | ||||
| int prim, | int prim, | ||||
| float u, | float u, | ||||
| ▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | #ifdef __RAY_DIFFERENTIALS__ | ||||
| sd->dI = differential3_zero(); | sd->dI = differential3_zero(); | ||||
| sd->du = differential_zero(); | sd->du = differential_zero(); | ||||
| sd->dv = differential_zero(); | sd->dv = differential_zero(); | ||||
| #endif | #endif | ||||
| } | } | ||||
| /* ShaderData setup for displacement */ | /* ShaderData setup for displacement */ | ||||
| ccl_device void shader_setup_from_displace(ccl_global const KernelGlobals *ccl_restrict kg, | ccl_device void shader_setup_from_displace(KernelGlobals kg, | ||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| int object, | int object, | ||||
| int prim, | int prim, | ||||
| float u, | float u, | ||||
| float v) | float v) | ||||
| { | { | ||||
| float3 P, Ng, I = zero_float3(); | float3 P, Ng, I = zero_float3(); | ||||
| int shader; | int shader; | ||||
| Show All 17 Lines | shader_setup_from_sample( | ||||
| 0.0f, | 0.0f, | ||||
| 0.5f, | 0.5f, | ||||
| !(kernel_tex_fetch(__object_flag, object) & SD_OBJECT_TRANSFORM_APPLIED), | !(kernel_tex_fetch(__object_flag, object) & SD_OBJECT_TRANSFORM_APPLIED), | ||||
| LAMP_NONE); | LAMP_NONE); | ||||
| } | } | ||||
| /* ShaderData setup from ray into background */ | /* ShaderData setup from ray into background */ | ||||
| ccl_device_inline void shader_setup_from_background(ccl_global const KernelGlobals *ccl_restrict | ccl_device_inline void shader_setup_from_background(KernelGlobals kg, | ||||
| kg, | |||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| const float3 ray_P, | const float3 ray_P, | ||||
| const float3 ray_D, | const float3 ray_D, | ||||
| const float ray_time) | const float ray_time) | ||||
| { | { | ||||
| /* for NDC coordinates */ | /* for NDC coordinates */ | ||||
| sd->ray_P = ray_P; | sd->ray_P = ray_P; | ||||
| Show All 27 Lines | #ifdef __RAY_DIFFERENTIALS__ | ||||
| sd->du = differential_zero(); | sd->du = differential_zero(); | ||||
| sd->dv = differential_zero(); | sd->dv = differential_zero(); | ||||
| #endif | #endif | ||||
| } | } | ||||
| /* ShaderData setup from point inside volume */ | /* ShaderData setup from point inside volume */ | ||||
| #ifdef __VOLUME__ | #ifdef __VOLUME__ | ||||
| ccl_device_inline void shader_setup_from_volume(ccl_global const KernelGlobals *ccl_restrict kg, | ccl_device_inline void shader_setup_from_volume(KernelGlobals kg, | ||||
| ccl_private ShaderData *ccl_restrict sd, | ccl_private ShaderData *ccl_restrict sd, | ||||
| ccl_private const Ray *ccl_restrict ray) | ccl_private const Ray *ccl_restrict ray) | ||||
| { | { | ||||
| /* vectors */ | /* vectors */ | ||||
| sd->P = ray->P; | sd->P = ray->P; | ||||
| sd->N = -ray->D; | sd->N = -ray->D; | ||||
| sd->Ng = -ray->D; | sd->Ng = -ray->D; | ||||
| Show All 36 Lines | |||||