Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_image.h
| Show First 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | switch(id) { | ||||
| case 88: r = kernel_tex_image_interp(__tex_image_byte4_088, x, y); break; | case 88: r = kernel_tex_image_interp(__tex_image_byte4_088, x, y); break; | ||||
| default: | default: | ||||
| kernel_assert(0); | kernel_assert(0); | ||||
| return make_float4(0.0f, 0.0f, 0.0f, 0.0f); | return make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| } | } | ||||
| # else | # else | ||||
| CUtexObject tex = kernel_tex_fetch(__bindless_mapping, id); | CUtexObject tex = kernel_tex_fetch(__bindless_mapping, id); | ||||
| /* float4, byte4 and half4 */ | /* float4, byte4 and half4 */ | ||||
| if(id < TEX_START_FLOAT_CUDA_KEPLER) | const int texture_type = kernel_tex_type(id); | ||||
sergey: Wondering whether it's better to do
const texture_id = kernel_tex_type(id);
if(texture_id… | |||||
| if(texture_type == IMAGE_DATA_TYPE_FLOAT4 || texture_type == IMAGE_DATA_TYPE_BYTE4 || texture_type == IMAGE_DATA_TYPE_HALF4) { | |||||
| r = kernel_tex_image_interp_float4(tex, x, y); | r = kernel_tex_image_interp_float4(tex, x, y); | ||||
| } | |||||
| /* float, byte and half */ | /* float, byte and half */ | ||||
| else { | else { | ||||
| float f = kernel_tex_image_interp_float(tex, x, y); | float f = kernel_tex_image_interp_float(tex, x, y); | ||||
| r = make_float4(f, f, f, 1.0f); | r = make_float4(f, f, f, 1.0f); | ||||
| } | } | ||||
| # endif | # endif | ||||
| #endif | #endif | ||||
| #ifdef __KERNEL_SSE2__ | #ifdef __KERNEL_SSE2__ | ||||
| float alpha = r.w; | float alpha = r.w; | ||||
| if(use_alpha && alpha != 1.0f && alpha != 0.0f) { | if(use_alpha && alpha != 1.0f && alpha != 0.0f) { | ||||
Done Inline ActionsSame as above. And cases below. sergey: Same as above. And cases below. | |||||
| r_ssef = r_ssef / ssef(alpha); | r_ssef = r_ssef / ssef(alpha); | ||||
| if(id >= TEX_NUM_FLOAT4_IMAGES) | const int texture_type = kernel_tex_type(id); | ||||
| if(texture_type == IMAGE_DATA_TYPE_BYTE4 || texture_type == IMAGE_DATA_TYPE_BYTE) { | |||||
| r_ssef = min(r_ssef, ssef(1.0f)); | r_ssef = min(r_ssef, ssef(1.0f)); | ||||
| } | |||||
| r.w = alpha; | r.w = alpha; | ||||
| } | } | ||||
| if(srgb) { | if(srgb) { | ||||
| r_ssef = color_srgb_to_scene_linear(r_ssef); | r_ssef = color_srgb_to_scene_linear(r_ssef); | ||||
| r.w = alpha; | r.w = alpha; | ||||
| } | } | ||||
| #else | #else | ||||
| if(use_alpha && r.w != 1.0f && r.w != 0.0f) { | if(use_alpha && r.w != 1.0f && r.w != 0.0f) { | ||||
| float invw = 1.0f/r.w; | float invw = 1.0f/r.w; | ||||
| r.x *= invw; | r.x *= invw; | ||||
| r.y *= invw; | r.y *= invw; | ||||
| r.z *= invw; | r.z *= invw; | ||||
| if(id >= TEX_NUM_FLOAT4_IMAGES) { | const int texture_type = kernel_tex_type(id); | ||||
| if(texture_type == IMAGE_DATA_TYPE_BYTE4 || texture_type == IMAGE_DATA_TYPE_BYTE) { | |||||
| r.x = min(r.x, 1.0f); | r.x = min(r.x, 1.0f); | ||||
| r.y = min(r.y, 1.0f); | r.y = min(r.y, 1.0f); | ||||
| r.z = min(r.z, 1.0f); | r.z = min(r.z, 1.0f); | ||||
| } | } | ||||
| } | } | ||||
| if(srgb) { | if(srgb) { | ||||
| r.x = color_srgb_to_scene_linear(r.x); | r.x = color_srgb_to_scene_linear(r.x); | ||||
| ▲ Show 20 Lines • Show All 163 Lines • Show Last 20 Lines | |||||
Wondering whether it's better to do