int init (void) { #if defined(USE_SSE2) const Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbAF_linear = babl_format_new ( babl_model ("RaGaBaA"), babl_type ("float"), babl_component ("Ra"), babl_component ("Ga"), babl_component ("Ba"), babl_component ("A"), NULL); const Babl *rgba16_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("u16"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbaF_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgbAF_gamma = babl_format_new ( babl_model ("R'aG'aB'aA"), babl_type ("float"), babl_component ("R'a"), babl_component ("G'a"), babl_component ("B'a"), babl_component ("A"), NULL); const Babl *rgba16_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("u16"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); #define CONV(src, dst) \ { \ babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ } if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) { CONV (rgba16, rgbaF); CONV (rgba16, rgbAF); } #endif /* defined(USE_SSE2) */ return 0; }
int init (void) { #if defined(USE_SSE2) const Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbAF_linear = babl_format_new ( babl_model ("RaGaBaA"), babl_type ("float"), babl_component ("Ra"), babl_component ("Ga"), babl_component ("Ba"), babl_component ("A"), NULL); const Babl *rgbAF_gamma = babl_format_new ( babl_model ("R'aG'aB'aA"), babl_type ("float"), babl_component ("R'a"), babl_component ("G'a"), babl_component ("B'a"), babl_component ("A"), NULL); const Babl *rgbaF_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgbF_linear = babl_format_new ( babl_model ("RGB"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), NULL); const Babl *rgbF_gamma = babl_format_new ( babl_model ("R'G'B'"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), NULL); const Babl *yaF_linear = babl_format_new ( babl_model ("YA"), babl_type ("float"), babl_component ("Y"), babl_component ("A"), NULL); const Babl *yaF_gamma = babl_format_new ( babl_model ("Y'A"), babl_type ("float"), babl_component ("Y'"), babl_component ("A"), NULL); const Babl *yF_linear = babl_format_new ( babl_model ("Y"), babl_type ("float"), babl_component ("Y"), NULL); const Babl *yF_gamma = babl_format_new ( babl_model ("Y'"), babl_type ("float"), babl_component ("Y'"), NULL); if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) { babl_conversion_new(rgbaF_linear, rgbAF_linear, "linear", conv_rgbaF_linear_rgbAF_linear, NULL); babl_conversion_new(rgbaF_gamma, rgbAF_gamma, "linear", conv_rgbaF_linear_rgbAF_linear, NULL); babl_conversion_new(rgbaF_linear, rgbAF_gamma, "linear", conv_rgbaF_linear_rgbAF_gamma, NULL); /* Which of these is faster varies by CPU, and the difference * is big enough that it's worthwhile to include both and * let them fight it out in the babl benchmarks. */ babl_conversion_new(rgbAF_linear, rgbaF_linear, "linear", conv_rgbAF_linear_rgbaF_linear_shuffle, NULL); babl_conversion_new(rgbAF_gamma, rgbaF_gamma, "linear", conv_rgbAF_linear_rgbaF_linear_shuffle, NULL); babl_conversion_new(rgbAF_linear, rgbaF_linear, "linear", conv_rgbAF_linear_rgbaF_linear_spin, NULL); o (yF_linear, yF_gamma); o (yF_gamma, yF_linear); o (yaF_linear, yaF_gamma); o (yaF_gamma, yaF_linear); o (rgbF_linear, rgbF_gamma); o (rgbF_gamma, rgbF_linear); o (rgbaF_linear, rgbaF_gamma); o (rgbaF_gamma, rgbaF_linear); } #endif /* defined(USE_SSE2) */ return 0; }
int init (void) { #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(USE_SSE) && defined(USE_MMX) const Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgba8_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("u8"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgb8_linear = babl_format_new ( babl_model ("RGB"), babl_type ("u8"), babl_component ("R"), babl_component ("G"), babl_component ("B"), NULL); const Babl *rgbaF_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgba8_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("u8"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgb8_gamma = babl_format_new ( babl_model ("R'G'B'"), babl_type ("u8"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), NULL); if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_MMX) && (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && !(babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_64)) { o (rgbaF_linear, rgb8_linear); o (rgbaF_linear, rgba8_linear); o (rgbaF_gamma, rgb8_gamma); o (rgbaF_gamma, rgba8_gamma); } #endif return 0; }
int init (void) { #if defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) const Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbaHalf_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("half"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbaF_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgbaHalf_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("half"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgbF_linear = babl_format_new ( babl_model ("RGB"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), NULL); const Babl *rgbHalf_linear = babl_format_new ( babl_model ("RGB"), babl_type ("half"), babl_component ("R"), babl_component ("G"), babl_component ("B"), NULL); const Babl *rgbF_gamma = babl_format_new ( babl_model ("R'G'B'"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), NULL); const Babl *rgbHalf_gamma = babl_format_new ( babl_model ("R'G'B'"), babl_type ("half"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), NULL); const Babl *yaF_linear = babl_format_new ( babl_model ("YA"), babl_type ("float"), babl_component ("Y"), babl_component ("A"), NULL); const Babl *yaHalf_linear = babl_format_new ( babl_model ("YA"), babl_type ("half"), babl_component ("Y"), babl_component ("A"), NULL); const Babl *yaF_gamma = babl_format_new ( babl_model ("Y'A"), babl_type ("float"), babl_component ("Y'"), babl_component ("A"), NULL); const Babl *yaHalf_gamma = babl_format_new ( babl_model ("Y'A"), babl_type ("half"), babl_component ("Y'"), babl_component ("A"), NULL); const Babl *yF_linear = babl_format_new ( babl_model ("Y"), babl_type ("float"), babl_component ("Y"), NULL); const Babl *yHalf_linear = babl_format_new ( babl_model ("Y"), babl_type ("half"), babl_component ("Y"), NULL); const Babl *yF_gamma = babl_format_new ( babl_model ("Y'"), babl_type ("float"), babl_component ("Y'"), NULL); const Babl *yHalf_gamma = babl_format_new ( babl_model ("Y'"), babl_type ("half"), babl_component ("Y'"), NULL); #define CONV(src, dst) \ { \ babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ } if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE4_1) && (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_F16C)) { CONV(rgbaHalf, rgbaF); CONV(rgbHalf, rgbF); CONV(yaHalf, yaF); CONV(yHalf, yF); CONV(rgbaF, rgbaHalf); CONV(rgbF, rgbHalf); CONV(yaF, yaHalf); CONV(yF, yHalf); } #endif /* defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) */ return 0; }