Cycles code refactor: replace magic ~0 values in the code with defines.

This commit is contained in:
Brecht Van Lommel
2014-03-29 13:03:47 +01:00
parent 6997908afc
commit e8b1cfed0a
26 changed files with 129 additions and 126 deletions

View File

@@ -51,10 +51,10 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
const float tmax = ray->t; const float tmax = ray->t;
float3 P = ray->P; float3 P = ray->P;
float3 idir = bvh_inverse_direction(ray->D); float3 idir = bvh_inverse_direction(ray->D);
int object = ~0; int object = OBJECT_NONE;
float isect_t = tmax; float isect_t = tmax;
const uint visibility = ~0; const uint visibility = PATH_RAY_ALL_VISIBILITY;
uint num_hits = 0; uint num_hits = 0;
#if FEATURE(BVH_MOTION) #if FEATURE(BVH_MOTION)
@@ -205,7 +205,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
/* primitive intersection */ /* primitive intersection */
for(; primAddr < primAddr2; primAddr++) { for(; primAddr < primAddr2; primAddr++) {
/* only primitives from the same object */ /* only primitives from the same object */
uint tri_object = (object == ~0)? kernel_tex_fetch(__prim_object, primAddr): object; uint tri_object = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, primAddr): object;
if(tri_object != subsurface_object) if(tri_object != subsurface_object)
continue; continue;
@@ -267,7 +267,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
#if FEATURE(BVH_INSTANCING) #if FEATURE(BVH_INSTANCING)
if(stackPtr >= 0) { if(stackPtr >= 0) {
kernel_assert(object != ~0); kernel_assert(object != OBJECT_NONE);
/* instance pop */ /* instance pop */
#if FEATURE(BVH_MOTION) #if FEATURE(BVH_MOTION)
@@ -286,7 +286,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz); gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz);
#endif #endif
object = ~0; object = OBJECT_NONE;
nodeAddr = traversalStack[stackPtr]; nodeAddr = traversalStack[stackPtr];
--stackPtr; --stackPtr;
} }

View File

@@ -56,15 +56,15 @@ ccl_device bool BVH_FUNCTION_NAME
const float tmax = ray->t; const float tmax = ray->t;
float3 P = ray->P; float3 P = ray->P;
float3 idir = bvh_inverse_direction(ray->D); float3 idir = bvh_inverse_direction(ray->D);
int object = ~0; int object = OBJECT_NONE;
#if FEATURE(BVH_MOTION) #if FEATURE(BVH_MOTION)
Transform ob_tfm; Transform ob_tfm;
#endif #endif
isect->t = tmax; isect->t = tmax;
isect->object = ~0; isect->object = OBJECT_NONE;
isect->prim = ~0; isect->prim = PRIM_NONE;
isect->u = 0.0f; isect->u = 0.0f;
isect->v = 0.0f; isect->v = 0.0f;
@@ -332,7 +332,7 @@ ccl_device bool BVH_FUNCTION_NAME
#if FEATURE(BVH_INSTANCING) #if FEATURE(BVH_INSTANCING)
if(stackPtr >= 0) { if(stackPtr >= 0) {
kernel_assert(object != ~0); kernel_assert(object != OBJECT_NONE);
/* instance pop */ /* instance pop */
#if FEATURE(BVH_MOTION) #if FEATURE(BVH_MOTION)
@@ -351,14 +351,14 @@ ccl_device bool BVH_FUNCTION_NAME
gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz); gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz);
#endif #endif
object = ~0; object = OBJECT_NONE;
nodeAddr = traversalStack[stackPtr]; nodeAddr = traversalStack[stackPtr];
--stackPtr; --stackPtr;
} }
#endif #endif
} while(nodeAddr != ENTRYPOINT_SENTINEL); } while(nodeAddr != ENTRYPOINT_SENTINEL);
return (isect->prim != ~0); return (isect->prim != PRIM_NONE);
} }
#undef FEATURE #undef FEATURE

View File

@@ -241,7 +241,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect
P_curve[3] = _mm_load_ps(&kg->__curve_keys.data[kb].x); P_curve[3] = _mm_load_ps(&kg->__curve_keys.data[kb].x);
} }
else { else {
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, (float4*)&P_curve); motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, (float4*)&P_curve);
} }
@@ -308,7 +308,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect
P_curve[3] = kernel_tex_fetch(__curve_keys, kb); P_curve[3] = kernel_tex_fetch(__curve_keys, kb);
} }
else { else {
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, P_curve); motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, P_curve);
} }
@@ -618,7 +618,7 @@ ccl_device_inline bool bvh_curve_intersect(KernelGlobals *kg, Intersection *isec
P_curve[1]= kernel_tex_fetch(__curve_keys, k1); P_curve[1]= kernel_tex_fetch(__curve_keys, k1);
} }
else { else {
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
motion_curve_keys(kg, fobject, prim, time, k0, k1, P_curve); motion_curve_keys(kg, fobject, prim, time, k0, k1, P_curve);
} }
@@ -653,7 +653,7 @@ ccl_device_inline bool bvh_curve_intersect(KernelGlobals *kg, Intersection *isec
P_curve[1] = _mm_load_ps(&kg->__curve_keys.data[k1].x); P_curve[1] = _mm_load_ps(&kg->__curve_keys.data[k1].x);
} }
else { else {
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
motion_curve_keys(kg, fobject, prim, time, k0, k1, (float4*)&P_curve); motion_curve_keys(kg, fobject, prim, time, k0, k1, (float4*)&P_curve);
} }
@@ -863,7 +863,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
float3 P = ray->P; float3 P = ray->P;
float3 D = ray->D; float3 D = ray->D;
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -981,7 +981,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
/*sd->curve_transparency = isect->v;*/ /*sd->curve_transparency = isect->v;*/
/*sd->curve_radius = sd->u * gd * l + r1;*/ /*sd->curve_radius = sd->u * gd * l + r1;*/
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else

View File

@@ -117,7 +117,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
float t = isect->t; float t = isect->t;
#ifdef __INTERSECTION_REFINE__ #ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -144,7 +144,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
/* compute refined position */ /* compute refined position */
P = P + D*rt; P = P + D*rt;
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else
@@ -168,7 +168,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
float t = isect->t; float t = isect->t;
#ifdef __INTERSECTION_REFINE__ #ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -194,7 +194,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
P = P + D*rt; P = P + D*rt;
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else
@@ -293,7 +293,7 @@ ccl_device_inline bool motion_triangle_intersect(KernelGlobals *kg, Intersection
{ {
/* primitive index for vertex location lookup */ /* primitive index for vertex location lookup */
int prim = kernel_tex_fetch(__prim_index, triAddr); int prim = kernel_tex_fetch(__prim_index, triAddr);
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, triAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, triAddr): object;
/* get vertex locations for intersection */ /* get vertex locations for intersection */
float3 verts[3]; float3 verts[3];
@@ -327,7 +327,7 @@ ccl_device_inline void motion_triangle_intersect_subsurface(KernelGlobals *kg, I
{ {
/* primitive index for vertex location lookup */ /* primitive index for vertex location lookup */
int prim = kernel_tex_fetch(__prim_index, triAddr); int prim = kernel_tex_fetch(__prim_index, triAddr);
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, triAddr): object; int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, triAddr): object;
/* get vertex locations for intersection */ /* get vertex locations for intersection */
float3 verts[3]; float3 verts[3];

View File

@@ -162,7 +162,7 @@ ccl_device_inline void object_inverse_dir_transform(KernelGlobals *kg, ShaderDat
ccl_device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd) ccl_device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd)
{ {
if(sd->object == ~0) if(sd->object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f); return make_float3(0.0f, 0.0f, 0.0f);
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
@@ -182,7 +182,7 @@ ccl_device_inline float object_surface_area(KernelGlobals *kg, int object)
ccl_device_inline float object_pass_id(KernelGlobals *kg, int object) ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
{ {
if(object == ~0) if(object == OBJECT_NONE)
return 0.0f; return 0.0f;
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES; int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
@@ -192,7 +192,7 @@ ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
ccl_device_inline float object_random_number(KernelGlobals *kg, int object) ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
{ {
if(object == ~0) if(object == OBJECT_NONE)
return 0.0f; return 0.0f;
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES; int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
@@ -202,7 +202,7 @@ ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
ccl_device_inline uint object_particle_id(KernelGlobals *kg, int object) ccl_device_inline uint object_particle_id(KernelGlobals *kg, int object)
{ {
if(object == ~0) if(object == OBJECT_NONE)
return 0.0f; return 0.0f;
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES; int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
@@ -212,7 +212,7 @@ ccl_device_inline uint object_particle_id(KernelGlobals *kg, int object)
ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object) ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object)
{ {
if(object == ~0) if(object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f); return make_float3(0.0f, 0.0f, 0.0f);
int offset = object*OBJECT_SIZE + OBJECT_DUPLI; int offset = object*OBJECT_SIZE + OBJECT_DUPLI;
@@ -222,7 +222,7 @@ ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object)
ccl_device_inline float3 object_dupli_uv(KernelGlobals *kg, int object) ccl_device_inline float3 object_dupli_uv(KernelGlobals *kg, int object)
{ {
if(object == ~0) if(object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f); return make_float3(0.0f, 0.0f, 0.0f);
int offset = object*OBJECT_SIZE + OBJECT_DUPLI; int offset = object*OBJECT_SIZE + OBJECT_DUPLI;

View File

@@ -28,7 +28,7 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg, ShaderData *sd, cons
float t = isect->t; float t = isect->t;
#ifdef __INTERSECTION_REFINE__ #ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -49,7 +49,7 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg, ShaderData *sd, cons
P = P + D*rt; P = P + D*rt;
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else
@@ -73,7 +73,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
float t = isect->t; float t = isect->t;
#ifdef __INTERSECTION_REFINE__ #ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -94,7 +94,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
P = P + D*rt; P = P + D*rt;
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else

View File

@@ -266,7 +266,7 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd,
{ {
if(kernel_data.cam.type != CAMERA_PANORAMA) { if(kernel_data.cam.type != CAMERA_PANORAMA) {
/* perspective / ortho */ /* perspective / ortho */
if(sd->object == ~0 && kernel_data.cam.type == CAMERA_PERSPECTIVE) if(sd->object == PRIM_NONE && kernel_data.cam.type == CAMERA_PERSPECTIVE)
P += camera_position(kg); P += camera_position(kg);
Transform tfm = kernel_data.cam.worldtondc; Transform tfm = kernel_data.cam.worldtondc;
@@ -276,7 +276,7 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd,
/* panorama */ /* panorama */
Transform tfm = kernel_data.cam.worldtocamera; Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
P = normalize(transform_point(&tfm, P)); P = normalize(transform_point(&tfm, P));
else else
P = normalize(transform_direction(&tfm, P)); P = normalize(transform_direction(&tfm, P));

View File

@@ -70,7 +70,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
LightSample ls; LightSample ls;
#ifdef __BRANCHED_PATH__ #ifdef __BRANCHED_PATH__
if(lindex != -1) { if(lindex != LAMP_NONE) {
/* sample position on a specified light */ /* sample position on a specified light */
light_select(kg, lindex, randu, randv, sd->P, &ls); light_select(kg, lindex, randu, randv, sd->P, &ls);
} }
@@ -97,7 +97,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
float bsdf_pdf; float bsdf_pdf;
#ifdef __VOLUME__ #ifdef __VOLUME__
if(sd->prim != ~0) if(sd->prim != PRIM_NONE)
shader_bsdf_eval(kg, sd, ls.D, eval, &bsdf_pdf); shader_bsdf_eval(kg, sd, ls.D, eval, &bsdf_pdf);
else else
shader_volume_phase_eval(kg, sd, ls.D, eval, &bsdf_pdf); shader_volume_phase_eval(kg, sd, ls.D, eval, &bsdf_pdf);
@@ -153,7 +153,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
} }
/* return if it's a lamp for shadow pass */ /* return if it's a lamp for shadow pass */
*is_lamp = (ls.prim == ~0 && ls.type != LIGHT_BACKGROUND); *is_lamp = (ls.prim == PRIM_NONE && ls.type != LIGHT_BACKGROUND);
return true; return true;
} }
@@ -188,7 +188,7 @@ ccl_device_noinline bool indirect_lamp_emission(KernelGlobals *kg, Ray *ray, int
LightSample ls; LightSample ls;
int lamp = lamp_light_eval_sample(kg, randt); int lamp = lamp_light_eval_sample(kg, randt);
if(lamp == ~0) if(lamp == LAMP_NONE)
return false; return false;
if(!lamp_light_eval(kg, lamp, ray->P, ray->D, ray->t, &ls)) if(!lamp_light_eval(kg, lamp, ray->P, ray->D, ray->t, &ls))

View File

@@ -217,8 +217,8 @@ ccl_device void lamp_light_sample(KernelGlobals *kg, int lamp,
LightType type = (LightType)__float_as_int(data0.x); LightType type = (LightType)__float_as_int(data0.x);
ls->type = type; ls->type = type;
ls->shader = __float_as_int(data1.x); ls->shader = __float_as_int(data1.x);
ls->object = ~0; ls->object = PRIM_NONE;
ls->prim = ~0; ls->prim = PRIM_NONE;
ls->lamp = lamp; ls->lamp = lamp;
ls->u = randu; ls->u = randu;
ls->v = randv; ls->v = randv;
@@ -309,8 +309,8 @@ ccl_device bool lamp_light_eval(KernelGlobals *kg, int lamp, float3 P, float3 D,
LightType type = (LightType)__float_as_int(data0.x); LightType type = (LightType)__float_as_int(data0.x);
ls->type = type; ls->type = type;
ls->shader = __float_as_int(data1.x); ls->shader = __float_as_int(data1.x);
ls->object = ~0; ls->object = PRIM_NONE;
ls->prim = ~0; ls->prim = PRIM_NONE;
ls->lamp = lamp; ls->lamp = lamp;
/* todo: missing texture coordinates */ /* todo: missing texture coordinates */
ls->u = 0.0f; ls->u = 0.0f;
@@ -461,7 +461,7 @@ ccl_device void triangle_light_sample(KernelGlobals *kg, int prim, int object,
triangle_point_normal(kg, prim, u, v, &ls->P, &ls->Ng, &ls->shader); triangle_point_normal(kg, prim, u, v, &ls->P, &ls->Ng, &ls->shader);
ls->object = object; ls->object = object;
ls->prim = prim; ls->prim = prim;
ls->lamp = ~0; ls->lamp = LAMP_NONE;
ls->shader |= SHADER_USE_MIS; ls->shader |= SHADER_USE_MIS;
ls->t = 0.0f; ls->t = 0.0f;
ls->u = u; ls->u = u;
@@ -566,7 +566,7 @@ ccl_device int lamp_light_eval_sample(KernelGlobals *kg, float randt)
return lamp; return lamp;
} }
else else
return ~0; return LAMP_NONE;
} }
CCL_NAMESPACE_END CCL_NAMESPACE_END

View File

@@ -74,7 +74,7 @@ ccl_device_inline bool kernel_path_integrate_scatter_lighting(KernelGlobals *kg,
light_ray.time = sd->time; light_ray.time = sd->time;
#endif #endif
if(direct_emission(kg, sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) { if(direct_emission(kg, sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
/* trace shadow ray */ /* trace shadow ray */
float3 shadow; float3 shadow;
@@ -188,7 +188,7 @@ ccl_device void kernel_branched_path_integrate_direct_lighting(KernelGlobals *kg
if(kernel_data.integrator.num_all_lights) if(kernel_data.integrator.num_all_lights)
light_t = 0.5f*light_t; light_t = 0.5f*light_t;
if(direct_emission(kg, sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) { if(direct_emission(kg, sd, LAMP_NONE, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
/* trace shadow ray */ /* trace shadow ray */
float3 shadow; float3 shadow;
@@ -206,7 +206,7 @@ ccl_device void kernel_branched_path_integrate_direct_lighting(KernelGlobals *kg
path_state_rng_2D(kg, rng, state, PRNG_LIGHT_U, &light_u, &light_v); path_state_rng_2D(kg, rng, state, PRNG_LIGHT_U, &light_u, &light_v);
/* sample random light */ /* sample random light */
if(direct_emission(kg, sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) { if(direct_emission(kg, sd, LAMP_NONE, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
/* trace shadow ray */ /* trace shadow ray */
float3 shadow; float3 shadow;
@@ -257,7 +257,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, Ray ray, ccl_g
#ifdef __VOLUME__ #ifdef __VOLUME__
/* volume attenuation, emission, scatter */ /* volume attenuation, emission, scatter */
if(state.volume_stack[0].shader != SHADER_NO_ID) { if(state.volume_stack[0].shader != SHADER_NONE) {
Ray volume_ray = ray; Ray volume_ray = ray;
volume_ray.t = (hit)? isect.t: FLT_MAX; volume_ray.t = (hit)? isect.t: FLT_MAX;
@@ -492,7 +492,7 @@ ccl_device_inline bool kernel_path_integrate_lighting(KernelGlobals *kg, RNG *rn
light_ray.time = sd->time; light_ray.time = sd->time;
#endif #endif
if(direct_emission(kg, sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) { if(direct_emission(kg, sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
/* trace shadow ray */ /* trace shadow ray */
float3 shadow; float3 shadow;
@@ -646,7 +646,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
#ifdef __VOLUME__ #ifdef __VOLUME__
/* volume attenuation, emission, scatter */ /* volume attenuation, emission, scatter */
if(state.volume_stack[0].shader != SHADER_NO_ID) { if(state.volume_stack[0].shader != SHADER_NONE) {
Ray volume_ray = ray; Ray volume_ray = ray;
volume_ray.t = (hit)? isect.t: FLT_MAX; volume_ray.t = (hit)? isect.t: FLT_MAX;
@@ -853,7 +853,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
light_ray.time = sd.time; light_ray.time = sd.time;
#endif #endif
if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state.bounce)) { if(direct_emission(kg, &sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state.bounce)) {
/* trace shadow ray */ /* trace shadow ray */
float3 shadow; float3 shadow;
@@ -1088,7 +1088,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
#ifdef __VOLUME__ #ifdef __VOLUME__
/* volume attenuation, emission, scatter */ /* volume attenuation, emission, scatter */
if(state.volume_stack[0].shader != SHADER_NO_ID) { if(state.volume_stack[0].shader != SHADER_NONE) {
Ray volume_ray = ray; Ray volume_ray = ray;
volume_ray.t = (hit)? isect.t: FLT_MAX; volume_ray.t = (hit)? isect.t: FLT_MAX;

View File

@@ -50,7 +50,7 @@ ccl_device_inline void path_state_init(KernelGlobals *kg, PathState *state, RNG
state->rng_congruential = lcg_init(*rng + sample*0x51633e2d); state->rng_congruential = lcg_init(*rng + sample*0x51633e2d);
} }
else { else {
state->volume_stack[0].shader = SHADER_NO_ID; state->volume_stack[0].shader = SHADER_NONE;
} }
#endif #endif
} }

View File

@@ -23,7 +23,7 @@ CCL_NAMESPACE_BEGIN
ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id, AttributeElement *elem) ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id, AttributeElement *elem)
{ {
if(sd->object == ~0) if(sd->object == PRIM_NONE)
return (int)ATTR_STD_NOT_FOUND; return (int)ATTR_STD_NOT_FOUND;
#ifdef __OSL__ #ifdef __OSL__
@@ -47,7 +47,7 @@ ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id,
*elem = (AttributeElement)attr_map.y; *elem = (AttributeElement)attr_map.y;
if(sd->prim == ~0 && (AttributeElement)attr_map.y != ATTR_ELEMENT_MESH) if(sd->prim == PRIM_NONE && (AttributeElement)attr_map.y != ATTR_ELEMENT_MESH)
return ATTR_STD_NOT_FOUND; return ATTR_STD_NOT_FOUND;
/* return result */ /* return result */

View File

@@ -52,7 +52,7 @@ ccl_device void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
const Intersection *isect, const Ray *ray, int bounce) const Intersection *isect, const Ray *ray, int bounce)
{ {
#ifdef __INSTANCING__ #ifdef __INSTANCING__
sd->object = (isect->object == ~0)? kernel_tex_fetch(__prim_object, isect->prim): isect->object; sd->object = (isect->object == PRIM_NONE)? kernel_tex_fetch(__prim_object, isect->prim): isect->object;
#endif #endif
sd->type = isect->type; sd->type = isect->type;
@@ -113,7 +113,7 @@ ccl_device void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2); sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
#ifdef __INSTANCING__ #ifdef __INSTANCING__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
/* instance transform */ /* instance transform */
object_normal_transform(kg, sd, &sd->N); object_normal_transform(kg, sd, &sd->N);
object_normal_transform(kg, sd, &sd->Ng); object_normal_transform(kg, sd, &sd->Ng);
@@ -190,7 +190,7 @@ ccl_device_inline void shader_setup_from_subsurface(KernelGlobals *kg, ShaderDat
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2); sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
#ifdef __INSTANCING__ #ifdef __INSTANCING__
if(isect->object != ~0) { if(isect->object != OBJECT_NONE) {
/* instance transform */ /* instance transform */
object_normal_transform(kg, sd, &sd->N); object_normal_transform(kg, sd, &sd->N);
object_normal_transform(kg, sd, &sd->Ng); object_normal_transform(kg, sd, &sd->Ng);
@@ -236,7 +236,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
sd->Ng = Ng; sd->Ng = Ng;
sd->I = I; sd->I = I;
sd->shader = shader; sd->shader = shader;
sd->type = (prim == ~0)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE; sd->type = (prim == PRIM_NONE)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
/* primitive */ /* primitive */
#ifdef __INSTANCING__ #ifdef __INSTANCING__
@@ -255,7 +255,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
#ifdef __INSTANCING__ #ifdef __INSTANCING__
bool instanced = false; bool instanced = false;
if(sd->prim != ~0) { if(sd->prim != PRIM_NONE) {
if(sd->object >= 0) if(sd->object >= 0)
instanced = true; instanced = true;
else else
@@ -266,7 +266,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
#endif #endif
sd->flag = kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2); sd->flag = kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
if(sd->object != -1) { if(sd->object != OBJECT_NONE) {
sd->flag |= kernel_tex_fetch(__object_flag, sd->object); sd->flag |= kernel_tex_fetch(__object_flag, sd->object);
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
@@ -309,7 +309,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
} }
/* backfacing test */ /* backfacing test */
if(sd->prim != ~0) { if(sd->prim != PRIM_NONE) {
bool backfacing = (dot(sd->Ng, sd->I) < 0.0f); bool backfacing = (dot(sd->Ng, sd->I) < 0.0f);
if(backfacing) { if(backfacing) {
@@ -368,9 +368,9 @@ ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderDat
sd->ray_depth = bounce; sd->ray_depth = bounce;
#ifdef __INSTANCING__ #ifdef __INSTANCING__
sd->object = ~0; sd->object = PRIM_NONE;
#endif #endif
sd->prim = ~0; sd->prim = PRIM_NONE;
#ifdef __UV__ #ifdef __UV__
sd->u = 0.0f; sd->u = 0.0f;
sd->v = 0.0f; sd->v = 0.0f;
@@ -402,7 +402,7 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s
sd->N = -ray->D; sd->N = -ray->D;
sd->Ng = -ray->D; sd->Ng = -ray->D;
sd->I = -ray->D; sd->I = -ray->D;
sd->shader = SHADER_NO_ID; sd->shader = SHADER_NONE;
sd->flag = 0; sd->flag = 0;
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
sd->time = ray->time; sd->time = ray->time;
@@ -411,9 +411,9 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s
sd->ray_depth = bounce; sd->ray_depth = bounce;
#ifdef __INSTANCING__ #ifdef __INSTANCING__
sd->object = ~0; /* todo: fill this for texture coordinates */ sd->object = PRIM_NONE; /* todo: fill this for texture coordinates */
#endif #endif
sd->prim = ~0; sd->prim = PRIM_NONE;
sd->type = PRIMITIVE_NONE; sd->type = PRIMITIVE_NONE;
#ifdef __UV__ #ifdef __UV__
@@ -1056,7 +1056,7 @@ ccl_device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd,
#endif #endif
sd->flag = 0; sd->flag = 0;
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) { for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
/* setup shaderdata from stack. it's mostly setup already in /* setup shaderdata from stack. it's mostly setup already in
* shader_setup_from_volume, this switching should be quick */ * shader_setup_from_volume, this switching should be quick */
sd->object = stack[i].object; sd->object = stack[i].object;
@@ -1065,7 +1065,7 @@ ccl_device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd,
sd->flag &= ~(SD_SHADER_FLAGS|SD_OBJECT_FLAGS); sd->flag &= ~(SD_SHADER_FLAGS|SD_OBJECT_FLAGS);
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2); sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
if(sd->object != ~0) { if(sd->object != OBJECT_NONE) {
sd->flag |= kernel_tex_fetch(__object_flag, sd->object); sd->flag |= kernel_tex_fetch(__object_flag, sd->object);
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__

View File

@@ -73,7 +73,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
#ifdef __VOLUME__ #ifdef __VOLUME__
/* attenuation for last line segment towards light */ /* attenuation for last line segment towards light */
if(ps.volume_stack[0].shader != SHADER_NO_ID) if(ps.volume_stack[0].shader != SHADER_NONE)
kernel_volume_shadow(kg, &ps, ray, &throughput); kernel_volume_shadow(kg, &ps, ray, &throughput);
#endif #endif
@@ -86,7 +86,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
#ifdef __VOLUME__ #ifdef __VOLUME__
/* attenuation between last surface and next surface */ /* attenuation between last surface and next surface */
if(ps.volume_stack[0].shader != SHADER_NO_ID) { if(ps.volume_stack[0].shader != SHADER_NONE) {
Ray segment_ray = *ray; Ray segment_ray = *ray;
segment_ray.t = isect.t; segment_ray.t = isect.t;
kernel_volume_shadow(kg, &ps, &segment_ray, &throughput); kernel_volume_shadow(kg, &ps, &segment_ray, &throughput);
@@ -118,7 +118,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
} }
} }
#ifdef __VOLUME__ #ifdef __VOLUME__
else if(!result && state->volume_stack[0].shader != SHADER_NO_ID) { else if(!result && state->volume_stack[0].shader != SHADER_NONE) {
/* apply attenuation from current volume shader */ /* apply attenuation from current volume shader */
kernel_volume_shadow(kg, state, ray, shadow); kernel_volume_shadow(kg, state, ray, shadow);
} }

View File

@@ -46,7 +46,10 @@ CCL_NAMESPACE_BEGIN
#define TEX_NUM_FLOAT_IMAGES 5 #define TEX_NUM_FLOAT_IMAGES 5
#define SHADER_NO_ID -1 #define SHADER_NONE (~0)
#define OBJECT_NONE (~0)
#define PRIM_NONE (~0)
#define LAMP_NONE (~0)
#define VOLUME_STACK_SIZE 16 #define VOLUME_STACK_SIZE 16

View File

@@ -99,7 +99,7 @@ ccl_device float3 volume_color_attenuation(float3 sigma, float t)
ccl_device bool volume_stack_is_heterogeneous(KernelGlobals *kg, VolumeStack *stack) ccl_device bool volume_stack_is_heterogeneous(KernelGlobals *kg, VolumeStack *stack)
{ {
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) { for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
int shader_flag = kernel_tex_fetch(__shader_flag, (stack[i].shader & SHADER_MASK)*2); int shader_flag = kernel_tex_fetch(__shader_flag, (stack[i].shader & SHADER_MASK)*2);
if(shader_flag & SD_HETEROGENEOUS_VOLUME) if(shader_flag & SD_HETEROGENEOUS_VOLUME)
@@ -557,13 +557,13 @@ ccl_device_noinline VolumeIntegrateResult kernel_volume_integrate(KernelGlobals
ccl_device void kernel_volume_stack_init(KernelGlobals *kg, VolumeStack *stack) ccl_device void kernel_volume_stack_init(KernelGlobals *kg, VolumeStack *stack)
{ {
/* todo: this assumes camera is always in air, need to detect when it isn't */ /* todo: this assumes camera is always in air, need to detect when it isn't */
if(kernel_data.background.volume_shader == SHADER_NO_ID) { if(kernel_data.background.volume_shader == SHADER_NONE) {
stack[0].shader = SHADER_NO_ID; stack[0].shader = SHADER_NONE;
} }
else { else {
stack[0].shader = kernel_data.background.volume_shader; stack[0].shader = kernel_data.background.volume_shader;
stack[0].object = ~0; stack[0].object = PRIM_NONE;
stack[1].shader = SHADER_NO_ID; stack[1].shader = SHADER_NONE;
} }
} }
@@ -578,14 +578,14 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
if(sd->flag & SD_BACKFACING) { if(sd->flag & SD_BACKFACING) {
/* exit volume object: remove from stack */ /* exit volume object: remove from stack */
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) { for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
if(stack[i].object == sd->object) { if(stack[i].object == sd->object) {
/* shift back next stack entries */ /* shift back next stack entries */
do { do {
stack[i] = stack[i+1]; stack[i] = stack[i+1];
i++; i++;
} }
while(stack[i].shader != SHADER_NO_ID); while(stack[i].shader != SHADER_NONE);
return; return;
} }
@@ -595,7 +595,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
/* enter volume object: add to stack */ /* enter volume object: add to stack */
int i; int i;
for(i = 0; stack[i].shader != SHADER_NO_ID; i++) { for(i = 0; stack[i].shader != SHADER_NONE; i++) {
/* already in the stack? then we have nothing to do */ /* already in the stack? then we have nothing to do */
if(stack[i].object == sd->object) if(stack[i].object == sd->object)
return; return;
@@ -608,7 +608,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
/* add to the end of the stack */ /* add to the end of the stack */
stack[i].shader = sd->shader; stack[i].shader = sd->shader;
stack[i].object = sd->object; stack[i].object = sd->object;
stack[i+1].shader = SHADER_NO_ID; stack[i+1].shader = SHADER_NONE;
} }
} }

View File

@@ -130,7 +130,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
KernelGlobals *kg = sd->osl_globals; KernelGlobals *kg = sd->osl_globals;
int object = sd->object; int object = sd->object;
if (object != ~0) { if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm; Transform tfm;
@@ -160,7 +160,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
KernelGlobals *kg = sd->osl_globals; KernelGlobals *kg = sd->osl_globals;
int object = sd->object; int object = sd->object;
if (object != ~0) { if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform itfm; Transform itfm;
@@ -245,7 +245,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
const ShaderData *sd = (const ShaderData *)xform; const ShaderData *sd = (const ShaderData *)xform;
int object = sd->object; int object = sd->object;
if (object != ~0) { if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm; Transform tfm = sd->ob_tfm;
#else #else
@@ -270,7 +270,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
const ShaderData *sd = (const ShaderData *)xform; const ShaderData *sd = (const ShaderData *)xform;
int object = sd->object; int object = sd->object;
if (object != ~0) { if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__ #ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm; Transform tfm = sd->ob_itfm;
#else #else
@@ -708,7 +708,7 @@ bool OSLRenderServices::get_background_attribute(KernelGlobals *kg, ShaderData *
OSL::ShaderGlobals *globals = &tdata->globals; OSL::ShaderGlobals *globals = &tdata->globals;
float3 ndc[3]; float3 ndc[3];
if((globals->raytype & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) { if((globals->raytype & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) {
ndc[0] = camera_world_to_ndc(kg, sd, sd->ray_P); ndc[0] = camera_world_to_ndc(kg, sd, sd->ray_P);
if(derivatives) { if(derivatives) {
@@ -747,7 +747,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
return false; return false;
object = it->second; object = it->second;
prim = ~0; prim = PRIM_NONE;
is_curve = false; is_curve = false;
} }
else { else {
@@ -755,7 +755,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
prim = sd->prim; prim = sd->prim;
is_curve = (sd->type & PRIMITIVE_ALL_CURVE) != 0; is_curve = (sd->type & PRIMITIVE_ALL_CURVE) != 0;
if (object == ~0) if (object == OBJECT_NONE)
return get_background_attribute(kg, sd, name, type, derivatives, val); return get_background_attribute(kg, sd, name, type, derivatives, val);
} }
@@ -769,7 +769,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
if (attr.elem != ATTR_ELEMENT_OBJECT) { if (attr.elem != ATTR_ELEMENT_OBJECT) {
/* triangle and vertex attributes */ /* triangle and vertex attributes */
if (prim != ~0) if (prim != PRIM_NONE)
return get_mesh_element_attribute(kg, sd, attr, type, derivatives, val); return get_mesh_element_attribute(kg, sd, attr, type, derivatives, val);
else else
return get_mesh_attribute(kg, sd, attr, type, derivatives, val); return get_mesh_attribute(kg, sd, attr, type, derivatives, val);
@@ -1005,9 +1005,9 @@ bool OSLRenderServices::trace(TraceOpt &options, OSL::ShaderGlobals *sg,
/* raytrace */ /* raytrace */
#ifdef __HAIR__ #ifdef __HAIR__
return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect, NULL, 0.0f, 0.0f); return scene_intersect(sd->osl_globals, &ray, PATH_RAY_ALL_VISIBILITY, &tracedata->isect, NULL, 0.0f, 0.0f);
#else #else
return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect); return scene_intersect(sd->osl_globals, &ray, PATH_RAY_ALL_VISIBILITY, &tracedata->isect);
#endif #endif
} }
@@ -1019,9 +1019,9 @@ bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg, ustring source, ustri
if(source == u_trace && tracedata->init) { if(source == u_trace && tracedata->init) {
if(name == u_hit) { if(name == u_hit) {
return set_attribute_int((tracedata->isect.prim != ~0), type, derivatives, val); return set_attribute_int((tracedata->isect.prim != PRIM_NONE), type, derivatives, val);
} }
else if(tracedata->isect.prim != ~0) { else if(tracedata->isect.prim != PRIM_NONE) {
if(name == u_hitdist) { if(name == u_hitdist) {
float f[3] = {tracedata->isect.t, 0.0f, 0.0f}; float f[3] = {tracedata->isect.t, 0.0f, 0.0f};
return set_attribute_float(f, type, derivatives, val); return set_attribute_float(f, type, derivatives, val);

View File

@@ -113,7 +113,7 @@ static void shaderdata_to_shaderglobals(KernelGlobals *kg, ShaderData *sd,
globals->dvdy = sd->dv.dy; globals->dvdy = sd->dv.dy;
globals->dPdu = TO_VEC3(sd->dPdu); globals->dPdu = TO_VEC3(sd->dPdu);
globals->dPdv = TO_VEC3(sd->dPdv); globals->dPdv = TO_VEC3(sd->dPdv);
globals->surfacearea = (sd->object == ~0) ? 1.0f : object_surface_area(kg, sd->object); globals->surfacearea = (sd->object == OBJECT_NONE) ? 1.0f : object_surface_area(kg, sd->object);
globals->time = sd->time; globals->time = sd->time;
/* booleans */ /* booleans */
@@ -547,7 +547,7 @@ int OSLShader::find_attribute(KernelGlobals *kg, const ShaderData *sd, uint id,
const OSLGlobals::Attribute &osl_attr = it->second; const OSLGlobals::Attribute &osl_attr = it->second;
*elem = osl_attr.elem; *elem = osl_attr.elem;
if(sd->prim == ~0 && (AttributeElement)osl_attr.elem != ATTR_ELEMENT_MESH) if(sd->prim == PRIM_NONE && (AttributeElement)osl_attr.elem != ATTR_ELEMENT_MESH)
return ATTR_STD_NOT_FOUND; return ATTR_STD_NOT_FOUND;
/* return result */ /* return result */

View File

@@ -22,7 +22,7 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
uint4 node, NodeAttributeType *type, uint4 node, NodeAttributeType *type,
NodeAttributeType *mesh_type, AttributeElement *elem, int *offset, uint *out_offset) NodeAttributeType *mesh_type, AttributeElement *elem, int *offset, uint *out_offset)
{ {
if(sd->object != ~0 && sd->prim != ~0) { if(sd->object != OBJECT_NONE && sd->prim != PRIM_NONE) {
/* find attribute by unique id */ /* find attribute by unique id */
uint id = node.y; uint id = node.y;
uint attr_offset = sd->object*kernel_data.bvh.attributes_map_stride; uint attr_offset = sd->object*kernel_data.bvh.attributes_map_stride;

View File

@@ -637,7 +637,7 @@ ccl_device void svm_node_emission_set_weight_total(KernelGlobals *kg, ShaderData
{ {
float3 weight = make_float3(__uint_as_float(r), __uint_as_float(g), __uint_as_float(b)); float3 weight = make_float3(__uint_as_float(r), __uint_as_float(g), __uint_as_float(b));
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
weight /= object_surface_area(kg, sd->object); weight /= object_surface_area(kg, sd->object);
svm_node_closure_store_weight(sd, weight); svm_node_closure_store_weight(sd, weight);
@@ -659,7 +659,7 @@ ccl_device void svm_node_emission_weight(KernelGlobals *kg, ShaderData *sd, floa
float strength = stack_load_float(stack, strength_offset); float strength = stack_load_float(stack, strength_offset);
float3 weight = stack_load_float3(stack, color_offset)*strength; float3 weight = stack_load_float3(stack, color_offset)*strength;
if(total_power && sd->object != ~0) if(total_power && sd->object != OBJECT_NONE)
weight /= object_surface_area(kg, sd->object); weight /= object_surface_area(kg, sd->object);
svm_node_closure_store_weight(sd, weight); svm_node_closure_store_weight(sd, weight);

View File

@@ -322,7 +322,7 @@ ccl_device void svm_node_tex_image_box(KernelGlobals *kg, ShaderData *sd, float
float3 N = sd->N; float3 N = sd->N;
N = sd->N; N = sd->N;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &N); object_inverse_normal_transform(kg, sd, &N);
/* project from direction vector to barycentric coordinates in triangles */ /* project from direction vector to barycentric coordinates in triangles */

View File

@@ -25,27 +25,27 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
switch(type) { switch(type) {
case NODE_TEXCO_OBJECT: { case NODE_TEXCO_OBJECT: {
data = sd->P; data = sd->P;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data); object_inverse_position_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_NORMAL: { case NODE_TEXCO_NORMAL: {
data = sd->N; data = sd->N;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data); object_inverse_normal_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_CAMERA: { case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera; Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P); data = transform_point(&tfm, sd->P);
else else
data = transform_point(&tfm, sd->P + camera_position(kg)); data = transform_point(&tfm, sd->P + camera_position(kg));
break; break;
} }
case NODE_TEXCO_WINDOW: { case NODE_TEXCO_WINDOW: {
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
data = camera_world_to_ndc(kg, sd, sd->ray_P); data = camera_world_to_ndc(kg, sd, sd->ray_P);
else else
data = camera_world_to_ndc(kg, sd, sd->P); data = camera_world_to_ndc(kg, sd, sd->P);
@@ -53,7 +53,7 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
break; break;
} }
case NODE_TEXCO_REFLECTION: { case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I; data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else else
data = sd->I; data = sd->I;
@@ -70,7 +70,7 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
case NODE_TEXCO_VOLUME_GENERATED: { case NODE_TEXCO_VOLUME_GENERATED: {
data = sd->P; data = sd->P;
if(sd->object != ~0) { if(sd->object != OBJECT_NONE) {
AttributeElement attr_elem; AttributeElement attr_elem;
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem); int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
@@ -96,27 +96,27 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
switch(type) { switch(type) {
case NODE_TEXCO_OBJECT: { case NODE_TEXCO_OBJECT: {
data = sd->P + sd->dP.dx; data = sd->P + sd->dP.dx;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data); object_inverse_position_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_NORMAL: { case NODE_TEXCO_NORMAL: {
data = sd->N; data = sd->N;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data); object_inverse_normal_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_CAMERA: { case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera; Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P + sd->dP.dx); data = transform_point(&tfm, sd->P + sd->dP.dx);
else else
data = transform_point(&tfm, sd->P + sd->dP.dx + camera_position(kg)); data = transform_point(&tfm, sd->P + sd->dP.dx + camera_position(kg));
break; break;
} }
case NODE_TEXCO_WINDOW: { case NODE_TEXCO_WINDOW: {
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dx); data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dx);
else else
data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dx); data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dx);
@@ -124,7 +124,7 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
break; break;
} }
case NODE_TEXCO_REFLECTION: { case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I; data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else else
data = sd->I; data = sd->I;
@@ -141,7 +141,7 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
case NODE_TEXCO_VOLUME_GENERATED: { case NODE_TEXCO_VOLUME_GENERATED: {
data = sd->P + sd->dP.dx; data = sd->P + sd->dP.dx;
if(sd->object != ~0) { if(sd->object != OBJECT_NONE) {
AttributeElement attr_elem; AttributeElement attr_elem;
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem); int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
@@ -170,27 +170,27 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
switch(type) { switch(type) {
case NODE_TEXCO_OBJECT: { case NODE_TEXCO_OBJECT: {
data = sd->P + sd->dP.dy; data = sd->P + sd->dP.dy;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data); object_inverse_position_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_NORMAL: { case NODE_TEXCO_NORMAL: {
data = sd->N; data = sd->N;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data); object_inverse_normal_transform(kg, sd, &data);
break; break;
} }
case NODE_TEXCO_CAMERA: { case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera; Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P + sd->dP.dy); data = transform_point(&tfm, sd->P + sd->dP.dy);
else else
data = transform_point(&tfm, sd->P + sd->dP.dy + camera_position(kg)); data = transform_point(&tfm, sd->P + sd->dP.dy + camera_position(kg));
break; break;
} }
case NODE_TEXCO_WINDOW: { case NODE_TEXCO_WINDOW: {
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dy); data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dy);
else else
data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dy); data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dy);
@@ -198,7 +198,7 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
break; break;
} }
case NODE_TEXCO_REFLECTION: { case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0) if(sd->object != OBJECT_NONE)
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I; data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else else
data = sd->I; data = sd->I;
@@ -215,7 +215,7 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
case NODE_TEXCO_VOLUME_GENERATED: { case NODE_TEXCO_VOLUME_GENERATED: {
data = sd->P + sd->dP.dy; data = sd->P + sd->dP.dy;
if(sd->object != ~0) { if(sd->object != OBJECT_NONE) {
AttributeElement attr_elem; AttributeElement attr_elem;
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem); int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
@@ -248,7 +248,7 @@ ccl_device void svm_node_normal_map(KernelGlobals *kg, ShaderData *sd, float *st
if(space == NODE_NORMAL_MAP_TANGENT) { if(space == NODE_NORMAL_MAP_TANGENT) {
/* tangent space */ /* tangent space */
if(sd->object == ~0) { if(sd->object == OBJECT_NONE) {
stack_store_float3(stack, normal_offset, make_float3(0.0f, 0.0f, 0.0f)); stack_store_float3(stack, normal_offset, make_float3(0.0f, 0.0f, 0.0f));
return; return;
} }

View File

@@ -33,7 +33,7 @@ ccl_device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, flo
NodeVectorTransformConvertSpace to = (NodeVectorTransformConvertSpace)ito; NodeVectorTransformConvertSpace to = (NodeVectorTransformConvertSpace)ito;
Transform tfm; Transform tfm;
bool is_object = (sd->object != ~0); bool is_object = (sd->object != OBJECT_NONE);
bool is_direction = (type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR || type == NODE_VECTOR_TRANSFORM_TYPE_NORMAL); bool is_direction = (type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR || type == NODE_VECTOR_TRANSFORM_TYPE_NORMAL);
/* From world */ /* From world */

View File

@@ -45,9 +45,9 @@ ccl_device void svm_node_wireframe(KernelGlobals *kg, ShaderData *sd, float *sta
/* Calculate wireframe */ /* Calculate wireframe */
#ifdef __HAIR__ #ifdef __HAIR__
if (sd->prim != ~0 && sd->type & PRIMITIVE_ALL_TRIANGLE) { if (sd->prim != PRIM_NONE && sd->type & PRIMITIVE_ALL_TRIANGLE) {
#else #else
if (sd->prim != ~0) { if (sd->prim != PRIM_NONE) {
#endif #endif
float3 Co[3]; float3 Co[3];
float pixelwidth = 1.0f; float pixelwidth = 1.0f;

View File

@@ -35,7 +35,7 @@ Background::Background()
use = true; use = true;
visibility = ~0; visibility = PATH_RAY_ALL_VISIBILITY;
shader = 0; shader = 0;
transparent = false; transparent = false;
@@ -70,7 +70,7 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene
if(scene->shaders[shader]->has_volume) if(scene->shaders[shader]->has_volume)
kbackground->volume_shader = kbackground->surface_shader; kbackground->volume_shader = kbackground->surface_shader;
else else
kbackground->volume_shader = SHADER_NO_ID; kbackground->volume_shader = SHADER_NONE;
if(!(visibility & PATH_RAY_DIFFUSE)) if(!(visibility & PATH_RAY_DIFFUSE))
kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE; kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE;

View File

@@ -44,7 +44,7 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
progress.set_status("Updating Mesh", msg); progress.set_status("Updating Mesh", msg);
/* find object index. todo: is arbitrary */ /* find object index. todo: is arbitrary */
size_t object_index = ~0; size_t object_index = OBJECT_NONE;
for(size_t i = 0; i < scene->objects.size(); i++) { for(size_t i = 0; i < scene->objects.size(); i++) {
if(scene->objects[i]->mesh == mesh) { if(scene->objects[i]->mesh == mesh) {