}
static void
-babl_extension_load_dir (const char *base_path)
+babl_extension_load_dir (const char *base_path,
+ const char **exclusion_patterns)
{
DIR *dir;
if ((extension = strrchr (dentry->d_name, '.')) != NULL &&
!strcmp (extension, SHREXT))
{
- babl_extension_load (path);
+ int excluded = 0;
+ for (int i = 0; exclusion_patterns[i]; i++)
+ if (strstr (path, exclusion_patterns[i]))
+ excluded = 1;
+ if (!excluded)
+ babl_extension_load (path);
}
babl_free (path);
/* parse the provided colon seperated list of paths to search
*/
void
-babl_extension_load_dir_list (const char *dir_list)
+babl_extension_load_dir_list (const char *dir_list,
+ const char **exclusion_patterns)
{
int eos = 0;
const char *src;
{
char *expanded_path = expand_path (path);
if (expanded_path) {
- babl_extension_load_dir (expanded_path);
+ babl_extension_load_dir (expanded_path, exclusion_patterns);
babl_free (expanded_path);
}
}
}
-static void simd_init (void);
+static const char **simd_init (void);
void
babl_init (void)
{
+ const char **exclusion_pattern;
babl_cpu_accel_set_use (1);
- simd_init ();
+ exclusion_pattern = simd_init ();
if (ref_count++ == 0)
{
babl_sanity ();
dir_list = babl_dir_list ();
- babl_extension_load_dir_list (dir_list);
+ babl_extension_load_dir_list (dir_list, exclusion_pattern);
babl_free (dir_list);
if (!getenv ("BABL_INHIBIT_CACHE"))
#endif
-static void simd_init (void)
+static const char **simd_init (void)
{
+ static const char *exclude[] = {"neon-", "x86-64-v3", "x86-64-v2", NULL};
#ifdef ARCH_X86_64
BablCpuAccelFlags accel = babl_cpu_accel_get_support ();
if ((accel & BABL_CPU_ACCEL_X86_64_V3) == BABL_CPU_ACCEL_X86_64_V3)
{
+ static const char *exclude[] = {NULL};
babl_base_init = babl_base_init_x86_64_v2; /// !!
// this is correct,
// it performs better
babl_trc_new = babl_trc_new_x86_64_v2;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_x86_64_v2;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_x86_64_v3;
+ return exclude;
}
else if ((accel & BABL_CPU_ACCEL_X86_64_V2) == BABL_CPU_ACCEL_X86_64_V2)
{
+ static const char *exclude[] = {"x86-64-v3-", NULL};
babl_base_init = babl_base_init_x86_64_v2;
babl_trc_new = babl_trc_new_x86_64_v2;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_x86_64_v2;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_x86_64_v2;
+ return exclude;
+ }
+ else
+ {
+ static const char *exclude[] = {"x86-64-v3-", "x86-64-v2-", NULL};
+ return exclude;
}
#endif
#ifdef ARCH_ARM
BablCpuAccelFlags accel = babl_cpu_accel_get_support ();
if ((accel & BABL_CPU_ACCEL_ARM_NEON) == BABL_CPU_ACCEL_ARM_NEON)
{
+ static const char *exclude[] = {NULL};
babl_base_init = babl_base_init_arm_neon;
babl_trc_new = babl_trc_new_arm_neon;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_arm_neon;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_arm_neon;
+ return exclude;
+ }
+ else
+ {
+ static const char *exclude[] = {"neon-", NULL};
+ return exclude;
}
#endif
+ return exclude;
}