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;
float3 P = ray->P;
float3 idir = bvh_inverse_direction(ray->D);
int object = ~0;
int object = OBJECT_NONE;
float isect_t = tmax;
const uint visibility = ~0;
const uint visibility = PATH_RAY_ALL_VISIBILITY;
uint num_hits = 0;
#if FEATURE(BVH_MOTION)
@ -205,7 +205,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
/* primitive intersection */
for(; primAddr < primAddr2; primAddr++) {
/* 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)
continue;
@ -267,7 +267,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
#if FEATURE(BVH_INSTANCING)
if(stackPtr >= 0) {
kernel_assert(object != ~0);
kernel_assert(object != OBJECT_NONE);
/* instance pop */
#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);
#endif
object = ~0;
object = OBJECT_NONE;
nodeAddr = traversalStack[stackPtr];
--stackPtr;
}

View File

@ -56,15 +56,15 @@ ccl_device bool BVH_FUNCTION_NAME
const float tmax = ray->t;
float3 P = ray->P;
float3 idir = bvh_inverse_direction(ray->D);
int object = ~0;
int object = OBJECT_NONE;
#if FEATURE(BVH_MOTION)
Transform ob_tfm;
#endif
isect->t = tmax;
isect->object = ~0;
isect->prim = ~0;
isect->object = OBJECT_NONE;
isect->prim = PRIM_NONE;
isect->u = 0.0f;
isect->v = 0.0f;
@ -332,7 +332,7 @@ ccl_device bool BVH_FUNCTION_NAME
#if FEATURE(BVH_INSTANCING)
if(stackPtr >= 0) {
kernel_assert(object != ~0);
kernel_assert(object != OBJECT_NONE);
/* instance pop */
#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);
#endif
object = ~0;
object = OBJECT_NONE;
nodeAddr = traversalStack[stackPtr];
--stackPtr;
}
#endif
} while(nodeAddr != ENTRYPOINT_SENTINEL);
return (isect->prim != ~0);
return (isect->prim != PRIM_NONE);
}
#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);
}
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);
}
@ -308,7 +308,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect
P_curve[3] = kernel_tex_fetch(__curve_keys, kb);
}
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);
}
@ -618,7 +618,7 @@ ccl_device_inline bool bvh_curve_intersect(KernelGlobals *kg, Intersection *isec
P_curve[1]= kernel_tex_fetch(__curve_keys, k1);
}
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);
}
@ -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);
}
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);
}
@ -863,7 +863,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
float3 P = ray->P;
float3 D = ray->D;
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -981,7 +981,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
/*sd->curve_transparency = isect->v;*/
/*sd->curve_radius = sd->u * gd * l + r1;*/
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else

View File

@ -117,7 +117,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
float t = isect->t;
#ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -144,7 +144,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
/* compute refined position */
P = P + D*rt;
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else
@ -168,7 +168,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
float t = isect->t;
#ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -194,7 +194,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
P = P + D*rt;
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else
@ -293,7 +293,7 @@ ccl_device_inline bool motion_triangle_intersect(KernelGlobals *kg, Intersection
{
/* primitive index for vertex location lookup */
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 */
float3 verts[3];
@ -327,7 +327,7 @@ ccl_device_inline void motion_triangle_intersect_subsurface(KernelGlobals *kg, I
{
/* primitive index for vertex location lookup */
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 */
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)
{
if(sd->object == ~0)
if(sd->object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f);
#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)
{
if(object == ~0)
if(object == OBJECT_NONE)
return 0.0f;
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)
{
if(object == ~0)
if(object == OBJECT_NONE)
return 0.0f;
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)
{
if(object == ~0)
if(object == OBJECT_NONE)
return 0.0f;
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)
{
if(object == ~0)
if(object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f);
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)
{
if(object == ~0)
if(object == OBJECT_NONE)
return make_float3(0.0f, 0.0f, 0.0f);
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;
#ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -49,7 +49,7 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg, ShaderData *sd, cons
P = P + D*rt;
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else
@ -73,7 +73,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
float t = isect->t;
#ifdef __INTERSECTION_REFINE__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -94,7 +94,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
P = P + D*rt;
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#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) {
/* 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);
Transform tfm = kernel_data.cam.worldtondc;
@ -276,7 +276,7 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd,
/* panorama */
Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
P = normalize(transform_point(&tfm, P));
else
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;
#ifdef __BRANCHED_PATH__
if(lindex != -1) {
if(lindex != LAMP_NONE) {
/* sample position on a specified light */
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;
#ifdef __VOLUME__
if(sd->prim != ~0)
if(sd->prim != PRIM_NONE)
shader_bsdf_eval(kg, sd, ls.D, eval, &bsdf_pdf);
else
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 */
*is_lamp = (ls.prim == ~0 && ls.type != LIGHT_BACKGROUND);
*is_lamp = (ls.prim == PRIM_NONE && ls.type != LIGHT_BACKGROUND);
return true;
}
@ -188,7 +188,7 @@ ccl_device_noinline bool indirect_lamp_emission(KernelGlobals *kg, Ray *ray, int
LightSample ls;
int lamp = lamp_light_eval_sample(kg, randt);
if(lamp == ~0)
if(lamp == LAMP_NONE)
return false;
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);
ls->type = type;
ls->shader = __float_as_int(data1.x);
ls->object = ~0;
ls->prim = ~0;
ls->object = PRIM_NONE;
ls->prim = PRIM_NONE;
ls->lamp = lamp;
ls->u = randu;
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);
ls->type = type;
ls->shader = __float_as_int(data1.x);
ls->object = ~0;
ls->prim = ~0;
ls->object = PRIM_NONE;
ls->prim = PRIM_NONE;
ls->lamp = lamp;
/* todo: missing texture coordinates */
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);
ls->object = object;
ls->prim = prim;
ls->lamp = ~0;
ls->lamp = LAMP_NONE;
ls->shader |= SHADER_USE_MIS;
ls->t = 0.0f;
ls->u = u;
@ -566,7 +566,7 @@ ccl_device int lamp_light_eval_sample(KernelGlobals *kg, float randt)
return lamp;
}
else
return ~0;
return LAMP_NONE;
}
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;
#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 */
float3 shadow;
@ -188,7 +188,7 @@ ccl_device void kernel_branched_path_integrate_direct_lighting(KernelGlobals *kg
if(kernel_data.integrator.num_all_lights)
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 */
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);
/* 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 */
float3 shadow;
@ -257,7 +257,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, Ray ray, ccl_g
#ifdef __VOLUME__
/* 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;
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;
#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 */
float3 shadow;
@ -646,7 +646,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
#ifdef __VOLUME__
/* 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;
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;
#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 */
float3 shadow;
@ -1088,7 +1088,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
#ifdef __VOLUME__
/* 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;
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);
}
else {
state->volume_stack[0].shader = SHADER_NO_ID;
state->volume_stack[0].shader = SHADER_NONE;
}
#endif
}

View File

@ -23,7 +23,7 @@ CCL_NAMESPACE_BEGIN
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;
#ifdef __OSL__
@ -47,7 +47,7 @@ ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id,
*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 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)
{
#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
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);
#ifdef __INSTANCING__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
/* instance transform */
object_normal_transform(kg, sd, &sd->N);
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);
#ifdef __INSTANCING__
if(isect->object != ~0) {
if(isect->object != OBJECT_NONE) {
/* instance transform */
object_normal_transform(kg, sd, &sd->N);
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->I = I;
sd->shader = shader;
sd->type = (prim == ~0)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
sd->type = (prim == PRIM_NONE)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
/* primitive */
#ifdef __INSTANCING__
@ -255,7 +255,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
#ifdef __INSTANCING__
bool instanced = false;
if(sd->prim != ~0) {
if(sd->prim != PRIM_NONE) {
if(sd->object >= 0)
instanced = true;
else
@ -266,7 +266,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
#endif
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);
#ifdef __OBJECT_MOTION__
@ -309,7 +309,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
}
/* backfacing test */
if(sd->prim != ~0) {
if(sd->prim != PRIM_NONE) {
bool backfacing = (dot(sd->Ng, sd->I) < 0.0f);
if(backfacing) {
@ -368,9 +368,9 @@ ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderDat
sd->ray_depth = bounce;
#ifdef __INSTANCING__
sd->object = ~0;
sd->object = PRIM_NONE;
#endif
sd->prim = ~0;
sd->prim = PRIM_NONE;
#ifdef __UV__
sd->u = 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->Ng = -ray->D;
sd->I = -ray->D;
sd->shader = SHADER_NO_ID;
sd->shader = SHADER_NONE;
sd->flag = 0;
#ifdef __OBJECT_MOTION__
sd->time = ray->time;
@ -411,9 +411,9 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s
sd->ray_depth = bounce;
#ifdef __INSTANCING__
sd->object = ~0; /* todo: fill this for texture coordinates */
sd->object = PRIM_NONE; /* todo: fill this for texture coordinates */
#endif
sd->prim = ~0;
sd->prim = PRIM_NONE;
sd->type = PRIMITIVE_NONE;
#ifdef __UV__
@ -1056,7 +1056,7 @@ ccl_device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd,
#endif
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
* shader_setup_from_volume, this switching should be quick */
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 |= 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);
#ifdef __OBJECT_MOTION__

View File

@ -73,7 +73,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
#ifdef __VOLUME__
/* 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);
#endif
@ -86,7 +86,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
#ifdef __VOLUME__
/* 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;
segment_ray.t = isect.t;
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__
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 */
kernel_volume_shadow(kg, state, ray, shadow);
}

View File

@ -46,7 +46,10 @@ CCL_NAMESPACE_BEGIN
#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

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)
{
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);
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)
{
/* todo: this assumes camera is always in air, need to detect when it isn't */
if(kernel_data.background.volume_shader == SHADER_NO_ID) {
stack[0].shader = SHADER_NO_ID;
if(kernel_data.background.volume_shader == SHADER_NONE) {
stack[0].shader = SHADER_NONE;
}
else {
stack[0].shader = kernel_data.background.volume_shader;
stack[0].object = ~0;
stack[1].shader = SHADER_NO_ID;
stack[0].object = PRIM_NONE;
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) {
/* 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) {
/* shift back next stack entries */
do {
stack[i] = stack[i+1];
i++;
}
while(stack[i].shader != SHADER_NO_ID);
while(stack[i].shader != SHADER_NONE);
return;
}
@ -595,7 +595,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
/* enter volume object: add to stack */
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 */
if(stack[i].object == sd->object)
return;
@ -608,7 +608,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
/* add to the end of the stack */
stack[i].shader = sd->shader;
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;
int object = sd->object;
if (object != ~0) {
if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm;
@ -160,7 +160,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
KernelGlobals *kg = sd->osl_globals;
int object = sd->object;
if (object != ~0) {
if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform itfm;
@ -245,7 +245,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
const ShaderData *sd = (const ShaderData *)xform;
int object = sd->object;
if (object != ~0) {
if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else
@ -270,7 +270,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
const ShaderData *sd = (const ShaderData *)xform;
int object = sd->object;
if (object != ~0) {
if (object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
@ -708,7 +708,7 @@ bool OSLRenderServices::get_background_attribute(KernelGlobals *kg, ShaderData *
OSL::ShaderGlobals *globals = &tdata->globals;
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);
if(derivatives) {
@ -747,7 +747,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
return false;
object = it->second;
prim = ~0;
prim = PRIM_NONE;
is_curve = false;
}
else {
@ -755,7 +755,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
prim = sd->prim;
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);
}
@ -769,7 +769,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
if (attr.elem != ATTR_ELEMENT_OBJECT) {
/* triangle and vertex attributes */
if (prim != ~0)
if (prim != PRIM_NONE)
return get_mesh_element_attribute(kg, sd, attr, type, derivatives, val);
else
return get_mesh_attribute(kg, sd, attr, type, derivatives, val);
@ -1005,9 +1005,9 @@ bool OSLRenderServices::trace(TraceOpt &options, OSL::ShaderGlobals *sg,
/* raytrace */
#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
return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect);
return scene_intersect(sd->osl_globals, &ray, PATH_RAY_ALL_VISIBILITY, &tracedata->isect);
#endif
}
@ -1019,9 +1019,9 @@ bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg, ustring source, ustri
if(source == u_trace && tracedata->init) {
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) {
float f[3] = {tracedata->isect.t, 0.0f, 0.0f};
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->dPdu = TO_VEC3(sd->dPdu);
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;
/* booleans */
@ -547,7 +547,7 @@ int OSLShader::find_attribute(KernelGlobals *kg, const ShaderData *sd, uint id,
const OSLGlobals::Attribute &osl_attr = it->second;
*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 result */

View File

@ -22,7 +22,7 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
uint4 node, NodeAttributeType *type,
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 */
uint id = node.y;
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));
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
weight /= object_surface_area(kg, sd->object);
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);
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);
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;
N = sd->N;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &N);
/* 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) {
case NODE_TEXCO_OBJECT: {
data = sd->P;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_NORMAL: {
data = sd->N;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P);
else
data = transform_point(&tfm, sd->P + camera_position(kg));
break;
}
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);
else
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;
}
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;
else
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: {
data = sd->P;
if(sd->object != ~0) {
if(sd->object != OBJECT_NONE) {
AttributeElement 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) {
case NODE_TEXCO_OBJECT: {
data = sd->P + sd->dP.dx;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_NORMAL: {
data = sd->N;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P + sd->dP.dx);
else
data = transform_point(&tfm, sd->P + sd->dP.dx + camera_position(kg));
break;
}
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);
else
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;
}
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;
else
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: {
data = sd->P + sd->dP.dx;
if(sd->object != ~0) {
if(sd->object != OBJECT_NONE) {
AttributeElement 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) {
case NODE_TEXCO_OBJECT: {
data = sd->P + sd->dP.dy;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_position_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_NORMAL: {
data = sd->N;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
object_inverse_normal_transform(kg, sd, &data);
break;
}
case NODE_TEXCO_CAMERA: {
Transform tfm = kernel_data.cam.worldtocamera;
if(sd->object != ~0)
if(sd->object != OBJECT_NONE)
data = transform_point(&tfm, sd->P + sd->dP.dy);
else
data = transform_point(&tfm, sd->P + sd->dP.dy + camera_position(kg));
break;
}
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);
else
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;
}
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;
else
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: {
data = sd->P + sd->dP.dy;
if(sd->object != ~0) {
if(sd->object != OBJECT_NONE) {
AttributeElement 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) {
/* 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));
return;
}

View File

@ -33,7 +33,7 @@ ccl_device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, flo
NodeVectorTransformConvertSpace to = (NodeVectorTransformConvertSpace)ito;
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);
/* From world */

View File

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

View File

@ -35,7 +35,7 @@ Background::Background()
use = true;
visibility = ~0;
visibility = PATH_RAY_ALL_VISIBILITY;
shader = 0;
transparent = false;
@ -70,7 +70,7 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene
if(scene->shaders[shader]->has_volume)
kbackground->volume_shader = kbackground->surface_shader;
else
kbackground->volume_shader = SHADER_NO_ID;
kbackground->volume_shader = SHADER_NONE;
if(!(visibility & PATH_RAY_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);
/* 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++) {
if(scene->objects[i]->mesh == mesh) {