From: Yonggang Luo Date: Thu, 25 Aug 2022 01:49:21 +0000 (+0800) Subject: util: Use environment variable GALLIUM_OVERRIDE_CPU_CAPS to remove usage of util_cpu_... X-Git-Tag: upstream/22.3.5~4109 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0993361ea776c9d256a97a43587f9498723eca5c;p=platform%2Fupstream%2Fmesa.git util: Use environment variable GALLIUM_OVERRIDE_CPU_CAPS to remove usage of util_cpu_caps in translate_test.c It's use extern struct util_cpu_caps_t util_cpu_caps that's violate the restriction that we can not directly access util_cpu_caps Signed-off-by: Yonggang Luo Reviewed-by: Jose Fonseca Part-of: --- diff --git a/src/gallium/tests/unit/meson.build b/src/gallium/tests/unit/meson.build index f94e105..1e0e6d4 100644 --- a/src/gallium/tests/unit/meson.build +++ b/src/gallium/tests/unit/meson.build @@ -28,8 +28,16 @@ foreach t : ['pipe_barrier_test', 'u_cache_test', 'u_half_test', dependencies : idep_mesautil, install : false, ) - # u_cache_test is slow, and translate_test fails. - if not ['u_cache_test', 'translate_test'].contains(t) + if (t == 'translate_test') # translate_test have parameters. + # FIXME: translate_test default|generic are failing + # test('translate_test default', exe, args : [ 'default' ]) + # test('translate_test generic', exe, args : [ 'generic' ]) + if ['x86', 'x86_64'].contains(host_machine.cpu_family()) + foreach arg : ['x86', 'nosse', 'sse', 'sse2', 'sse3', 'sse4.1'] + test('translate_test ' + arg, exe, args : [ arg ]) + endforeach + endif + elif t != 'u_cache_test' # u_cache_test is slow test(t, exe, suite: 'gallium', should_fail : meson.get_cross_property('xfail', '').contains(t), ) diff --git a/src/gallium/tests/unit/translate_test.c b/src/gallium/tests/unit/translate_test.c index f4be841..823aa68 100644 --- a/src/gallium/tests/unit/translate_test.c +++ b/src/gallium/tests/unit/translate_test.c @@ -45,11 +45,12 @@ static double rand_double() return v; } +char cpu_caps_override_env[128]; + int main(int argc, char** argv) { struct translate *(*create_fn)(const struct translate_key *key) = 0; - extern struct util_cpu_caps_t util_cpu_caps; struct translate_key key; unsigned output_format; unsigned input_format; @@ -75,55 +76,25 @@ int main(int argc, char** argv) create_fn = translate_generic_create; else if (!strcmp(argv[1], "x86")) create_fn = translate_sse2_create; - else if (!strcmp(argv[1], "nosse")) - { - util_cpu_caps.has_sse = 0; - util_cpu_caps.has_sse2 = 0; - util_cpu_caps.has_sse3 = 0; - util_cpu_caps.has_sse4_1 = 0; - create_fn = translate_sse2_create; - } - else if (!strcmp(argv[1], "sse")) + else { - if(!util_get_cpu_caps()->has_sse) + const char *translate_options[] = { + "nosse", "sse", "sse2", "sse3", "sse4.1", + NULL + }; + const char **option; + for (option = translate_options; *option; ++option) { - printf("Error: CPU doesn't support SSE (test with qemu)\n"); - return 2; - } - util_cpu_caps.has_sse2 = 0; - util_cpu_caps.has_sse3 = 0; - util_cpu_caps.has_sse4_1 = 0; - create_fn = translate_sse2_create; - } - else if (!strcmp(argv[1], "sse2")) - { - if(!util_get_cpu_caps()->has_sse2) - { - printf("Error: CPU doesn't support SSE2 (test with qemu)\n"); - return 2; - } - util_cpu_caps.has_sse3 = 0; - util_cpu_caps.has_sse4_1 = 0; - create_fn = translate_sse2_create; - } - else if (!strcmp(argv[1], "sse3")) - { - if(!util_get_cpu_caps()->has_sse3) - { - printf("Error: CPU doesn't support SSE3 (test with qemu)\n"); - return 2; + if (!strcmp(argv[1], *option)) + { + create_fn = translate_sse2_create; + break; + } } - util_cpu_caps.has_sse4_1 = 0; - create_fn = translate_sse2_create; - } - else if (!strcmp(argv[1], "sse4.1")) - { - if(!util_get_cpu_caps()->has_sse4_1) - { - printf("Error: CPU doesn't support SSE4.1 (test with qemu)\n"); - return 2; + if (create_fn) { + snprintf(cpu_caps_override_env, sizeof(cpu_caps_override_env), "GALLIUM_OVERRIDE_CPU_CAPS=%s", argv[1]); + putenv(cpu_caps_override_env); } - create_fn = translate_sse2_create; } if (!create_fn) diff --git a/src/util/u_cpu_detect.c b/src/util/u_cpu_detect.c index e89dc15..13405a6 100644 --- a/src/util/u_cpu_detect.c +++ b/src/util/u_cpu_detect.c @@ -589,6 +589,7 @@ util_cpu_detect_once(void) { int available_cpus = 0; int total_cpus = 0; + const char *override_cpu_caps = debug_get_option("GALLIUM_OVERRIDE_CPU_CAPS", NULL); memset(&util_cpu_caps, 0, sizeof util_cpu_caps); @@ -805,6 +806,22 @@ util_cpu_detect_once(void) #endif #endif /* PIPE_ARCH_X86 || PIPE_ARCH_X86_64 */ + if (override_cpu_caps != NULL) { +#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) + if (!strcmp(override_cpu_caps, "nosse")) { + util_cpu_caps.has_sse = 0; + } else if (!strcmp(override_cpu_caps, "sse")) { + util_cpu_caps.has_sse2 = 0; + } else if (!strcmp(override_cpu_caps, "sse2")) { + util_cpu_caps.has_sse3 = 0; + } else if (!strcmp(override_cpu_caps, "sse3")) { + util_cpu_caps.has_sse4_1 = 0; + } else if (!strcmp(override_cpu_caps, "sse4.1")) { + util_cpu_caps.has_avx = 0; + } +#endif /* PIPE_ARCH_X86 || PIPE_ARCH_X86_64 */ + } + #if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) if (!util_cpu_caps.has_sse) { util_cpu_caps.has_sse2 = 0;