Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/kernel_film.h
| Show First 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | ccl_device float4 film_get_pass_result(KernelGlobals *kg, | ||||
| return pass_result; | return pass_result; | ||||
| } | } | ||||
| ccl_device float4 film_map(KernelGlobals *kg, float4 rgba_in, float scale) | ccl_device float4 film_map(KernelGlobals *kg, float4 rgba_in, float scale) | ||||
| { | { | ||||
| float4 result; | float4 result; | ||||
| /* conversion to srgb */ | /* conversion to srgb */ | ||||
| result.x = color_linear_to_srgb(rgba_in.x); | result.x = color_linear_to_srgb(rgba_in.x * scale); | ||||
| result.y = color_linear_to_srgb(rgba_in.y); | result.y = color_linear_to_srgb(rgba_in.y * scale); | ||||
| result.z = color_linear_to_srgb(rgba_in.z); | result.z = color_linear_to_srgb(rgba_in.z * scale); | ||||
| /* clamp since alpha might be > 1.0 due to russian roulette */ | /* clamp since alpha might be > 1.0 due to russian roulette */ | ||||
| result.w = saturate(rgba_in.w); | result.w = saturate(rgba_in.w * scale); | ||||
| return result; | return result; | ||||
| } | } | ||||
| ccl_device uchar4 film_float_to_byte(float4 color) | ccl_device uchar4 film_float_to_byte(float4 color) | ||||
| { | { | ||||
| uchar4 result; | uchar4 result; | ||||
| Show All 16 Lines | ccl_device void kernel_film_convert_to_byte(KernelGlobals *kg, | ||||
| int stride) | int stride) | ||||
| { | { | ||||
| /* buffer offset */ | /* buffer offset */ | ||||
| int index = offset + x + y * stride; | int index = offset + x + y * stride; | ||||
| bool use_display_sample_scale = (kernel_data.film.display_divide_pass_stride == -1); | bool use_display_sample_scale = (kernel_data.film.display_divide_pass_stride == -1); | ||||
| float4 rgba_in = film_get_pass_result(kg, buffer, sample_scale, index, use_display_sample_scale); | float4 rgba_in = film_get_pass_result(kg, buffer, sample_scale, index, use_display_sample_scale); | ||||
| rgba += index; | |||||
| /* map colors */ | /* map colors */ | ||||
| if (use_display_sample_scale) { | float4 float_result = film_map(kg, rgba_in, use_display_sample_scale ? sample_scale : 1.0f); | ||||
| float4 float_result = film_map(kg, rgba_in, sample_scale); | uchar4 uchar_result = film_float_to_byte(float_result); | ||||
| uchar4 byte_result = film_float_to_byte(float_result); | |||||
| *rgba = byte_result; | rgba += index; | ||||
| } | *rgba = uchar_result; | ||||
| else { | |||||
| float4 float_result = film_map(kg, rgba_in, 1.0); | |||||
| uchar4 byte_result = film_float_to_byte(float_result); | |||||
| *rgba = byte_result; | |||||
| } | |||||
| } | } | ||||
| ccl_device void kernel_film_convert_to_half_float(KernelGlobals *kg, | ccl_device void kernel_film_convert_to_half_float(KernelGlobals *kg, | ||||
| ccl_global uchar4 *rgba, | ccl_global uchar4 *rgba, | ||||
| ccl_global float *buffer, | ccl_global float *buffer, | ||||
| float sample_scale, | float sample_scale, | ||||
| int x, | int x, | ||||
| int y, | int y, | ||||
| int offset, | int offset, | ||||
| int stride) | int stride) | ||||
| { | { | ||||
| /* buffer offset */ | /* buffer offset */ | ||||
| int index = offset + x + y * stride; | int index = offset + x + y * stride; | ||||
| bool use_display_sample_scale = (kernel_data.film.display_divide_pass_stride == -1); | bool use_display_sample_scale = (kernel_data.film.display_divide_pass_stride == -1); | ||||
| float4 rgba_in = film_get_pass_result(kg, buffer, sample_scale, index, use_display_sample_scale); | float4 rgba_in = film_get_pass_result(kg, buffer, sample_scale, index, use_display_sample_scale); | ||||
| ccl_global half *out = (ccl_global half *)rgba + index * 4; | ccl_global half *out = (ccl_global half *)rgba + index * 4; | ||||
| if (use_display_sample_scale) { | float4_store_half(out, rgba_in, use_display_sample_scale ? sample_scale : 1.0f); | ||||
| float4_store_half(out, rgba_in, sample_scale); | |||||
| } | |||||
| else { | |||||
| float4_store_half(out, rgba_in, 1.0f); | |||||
| } | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||