22 #include "precompiled.h"
30 # include <xmmintrin.h>
37 result.
R=
clamp(
int(src.
X*255),0,255);
38 result.
G=
clamp(
int(src.
Y*255),0,255);
39 result.
B=
clamp(
int(src.
Z*255),0,255);
52 const __m128 zero = _mm_setzero_ps();
53 const __m128 _255 = _mm_set_ss(255.0f);
54 __m128 r = _mm_load_ss(&src.
X);
55 __m128 g = _mm_load_ss(&src.
Y);
56 __m128 b = _mm_load_ss(&src.
Z);
59 r = _mm_max_ss(r, zero);
60 g = _mm_max_ss(g, zero);
61 b = _mm_max_ss(b, zero);
63 r = _mm_mul_ss(r, _255);
64 g = _mm_mul_ss(g, _255);
65 b = _mm_mul_ss(b, _255);
67 r = _mm_min_ss(r, _255);
68 g = _mm_min_ss(g, _255);
69 b = _mm_min_ss(b, _255);
72 int ri = _mm_cvtss_si32(r);
73 int gi = _mm_cvtss_si32(g);
74 int bi = _mm_cvtss_si32(b);
93 debug_printf(L
"No SSE available. Slow fallback routines will be used.\n");
static SColor4ub fallback_ConvertRGBColorTo4ub(const RGBColor &src)
SColor4ub(* ConvertRGBColorTo4ub)(const RGBColor &src)
T clamp(T value, T min, T max)
void debug_printf(const wchar_t *fmt,...)
write a formatted string to the debug channel, subject to filtering (see below).
void ColorActivateFastImpl()