Cycles: Split ShaderData object and shader flags
We started to run out of bits there, so now we separate flags which came from __object_flags and which are either runtime or coming from __shader_flags. Rule now is: SD_OBJECT_* flags are to be tested against new object_flags field of ShaderData, all the rest flags are to be tested against flags field of ShaderData. There should be no user-visible changes, and time difference should be minimal. In fact, from tests here can only see hardly measurable difference and sometimes the new code is somewhat faster (all within a noise floor, so hard to tell for sure). Reviewers: brecht, dingto, juicyfruit, lukasstockner97, maiself Differential Revision: https://developer.blender.org/D2428
This commit is contained in:
@@ -452,7 +452,7 @@ bool kernel_path_subsurface_scatter(
|
||||
# ifdef __VOLUME__
|
||||
ss_indirect->need_update_volume_stack =
|
||||
kernel_data.integrator.use_volumes &&
|
||||
ccl_fetch(sd, flag) & SD_OBJECT_INTERSECTS_VOLUME;
|
||||
ccl_fetch(sd, object_flag) & SD_OBJECT_INTERSECTS_VOLUME;
|
||||
# endif /* __VOLUME__ */
|
||||
|
||||
/* compute lighting with the BSDF closure */
|
||||
@@ -777,21 +777,25 @@ ccl_device_inline float4 kernel_path_integrate(KernelGlobals *kg,
|
||||
|
||||
/* holdout */
|
||||
#ifdef __HOLDOUT__
|
||||
if((sd.flag & (SD_HOLDOUT|SD_OBJECT_HOLDOUT_MASK)) && (state.flag & PATH_RAY_CAMERA)) {
|
||||
if(((sd.flag & SD_HOLDOUT) ||
|
||||
(sd.object_flag & SD_OBJECT_HOLDOUT_MASK)) &&
|
||||
(state.flag & PATH_RAY_CAMERA))
|
||||
{
|
||||
if(kernel_data.background.transparent) {
|
||||
float3 holdout_weight;
|
||||
|
||||
if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
|
||||
if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
|
||||
holdout_weight = make_float3(1.0f, 1.0f, 1.0f);
|
||||
else
|
||||
}
|
||||
else {
|
||||
holdout_weight = shader_holdout_eval(kg, &sd);
|
||||
|
||||
}
|
||||
/* any throughput is ok, should all be identical here */
|
||||
L_transparent += average(holdout_weight*throughput);
|
||||
}
|
||||
|
||||
if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
|
||||
if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif /* __HOLDOUT__ */
|
||||
|
||||
|
Reference in New Issue
Block a user