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 <luoyonggang@gmail.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17803>
This commit is contained in:
Yonggang Luo 2022-08-25 09:49:21 +08:00 committed by Marge Bot
parent 2ff4a4dd98
commit 0993361ea7
3 changed files with 44 additions and 48 deletions

View file

@ -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),
)

View file

@ -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"))
else
{
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"))
{
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;
if (!strcmp(argv[1], *option))
{
create_fn = translate_sse2_create;
break;
}
}
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;
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);
}
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;
}
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;
}
create_fn = translate_sse2_create;
}
if (!create_fn)

View file

@ -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;