Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_aov.h
| Show All 19 Lines | |||||
| ccl_device_inline bool svm_node_aov_check(const int path_flag, ccl_global float *render_buffer) | ccl_device_inline bool svm_node_aov_check(const int path_flag, ccl_global float *render_buffer) | ||||
| { | { | ||||
| 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 ((render_buffer != NULL) && is_primary); | return ((render_buffer != NULL) && is_primary); | ||||
| } | } | ||||
| ccl_device void svm_node_aov_color(INTEGRATOR_STATE_CONST_ARGS, | template<uint node_feature_mask> | ||||
| ccl_device void svm_node_aov_color(KernelGlobals kg, | |||||
| ConstIntegratorState state, | |||||
| ccl_private ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| ccl_private float *stack, | ccl_private float *stack, | ||||
| uint4 node, | uint4 node, | ||||
| ccl_global float *render_buffer) | ccl_global float *render_buffer) | ||||
| { | { | ||||
| float3 val = stack_load_float3(stack, node.y); | float3 val = stack_load_float3(stack, node.y); | ||||
| if (render_buffer && !INTEGRATOR_STATE_IS_NULL) { | IF_KERNEL_NODES_FEATURE(AOV) | ||||
| const uint32_t render_pixel_index = INTEGRATOR_STATE(path, render_pixel_index); | { | ||||
| const uint32_t render_pixel_index = INTEGRATOR_STATE(state, path, render_pixel_index); | |||||
| const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * | const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * | ||||
| kernel_data.film.pass_stride; | kernel_data.film.pass_stride; | ||||
| ccl_global float *buffer = render_buffer + render_buffer_offset + | ccl_global float *buffer = render_buffer + render_buffer_offset + | ||||
| (kernel_data.film.pass_aov_color + node.z); | (kernel_data.film.pass_aov_color + node.z); | ||||
| kernel_write_pass_float3(buffer, make_float3(val.x, val.y, val.z)); | kernel_write_pass_float3(buffer, make_float3(val.x, val.y, val.z)); | ||||
| } | } | ||||
| } | } | ||||
| ccl_device void svm_node_aov_value(INTEGRATOR_STATE_CONST_ARGS, | template<uint node_feature_mask> | ||||
| ccl_device void svm_node_aov_value(KernelGlobals kg, | |||||
| ConstIntegratorState state, | |||||
| ccl_private ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| ccl_private float *stack, | ccl_private float *stack, | ||||
| uint4 node, | uint4 node, | ||||
| ccl_global float *render_buffer) | ccl_global float *render_buffer) | ||||
| { | { | ||||
| float val = stack_load_float(stack, node.y); | float val = stack_load_float(stack, node.y); | ||||
| if (render_buffer && !INTEGRATOR_STATE_IS_NULL) { | IF_KERNEL_NODES_FEATURE(AOV) | ||||
| const uint32_t render_pixel_index = INTEGRATOR_STATE(path, render_pixel_index); | { | ||||
| const uint32_t render_pixel_index = INTEGRATOR_STATE(state, path, render_pixel_index); | |||||
| const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * | const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * | ||||
| kernel_data.film.pass_stride; | kernel_data.film.pass_stride; | ||||
| ccl_global float *buffer = render_buffer + render_buffer_offset + | ccl_global float *buffer = render_buffer + render_buffer_offset + | ||||
| (kernel_data.film.pass_aov_value + node.z); | (kernel_data.film.pass_aov_value + node.z); | ||||
| kernel_write_pass_float(buffer, val); | kernel_write_pass_float(buffer, val); | ||||
| } | } | ||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||