Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_aov.h
| Show All 15 Lines | |||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| ccl_device_inline bool svm_node_aov_check(ccl_addr_space PathState *state, | ccl_device_inline bool svm_node_aov_check(ccl_addr_space PathState *state, | ||||
| ccl_global float *buffer) | ccl_global float *buffer) | ||||
| { | { | ||||
| int path_flag = state->flag; | int path_flag = state->flag; | ||||
| bool is_bake = (path_flag & PATH_RAY_BAKE_AOV); | |||||
| bool is_primary = (path_flag & PATH_RAY_CAMERA) && (!(path_flag & PATH_RAY_SINGLE_PASS_DONE)); | bool is_primary = (path_flag & PATH_RAY_CAMERA) && (!(path_flag & PATH_RAY_SINGLE_PASS_DONE)); | ||||
| return ((buffer != NULL) && is_primary); | return is_bake || ((buffer != NULL) && is_primary); | ||||
| } | } | ||||
| ccl_device void svm_node_aov_color( | ccl_device void svm_node_aov_color( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, ccl_global float *buffer) | KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, ccl_global float *buffer) | ||||
| { | { | ||||
| float3 val = stack_load_float3(stack, node.y); | float3 val = stack_load_float3(stack, node.y); | ||||
| if (buffer) { | if (buffer) { | ||||
| kernel_write_pass_float4(buffer + kernel_data.film.pass_aov_color + 4 * node.z, | kernel_write_pass_float4(buffer + kernel_data.film.pass_aov_color + 4 * node.z, | ||||
| make_float4(val.x, val.y, val.z, 1.0f)); | make_float4(val.x, val.y, val.z, 1.0f)); | ||||
| } | } | ||||
| #ifdef __BAKING__ | |||||
| else { | |||||
| sd->aov_value[0] = val.x; | |||||
| sd->aov_value[1] = val.y; | |||||
| sd->aov_value[2] = val.z; | |||||
| } | |||||
| #endif | |||||
| } | } | ||||
| ccl_device void svm_node_aov_value( | ccl_device void svm_node_aov_value( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, ccl_global float *buffer) | KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, ccl_global float *buffer) | ||||
| { | { | ||||
| float val = stack_load_float(stack, node.y); | float val = stack_load_float(stack, node.y); | ||||
| if (buffer) { | if (buffer) { | ||||
| kernel_write_pass_float(buffer + kernel_data.film.pass_aov_value + node.z, val); | kernel_write_pass_float(buffer + kernel_data.film.pass_aov_value + node.z, val); | ||||
| } | } | ||||
| #ifdef __BAKING__ | |||||
| else { | |||||
| sd->aov_value[0] = val; | |||||
| } | |||||
| #endif | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||