mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 02:10:11 +01:00
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:
parent
2ff4a4dd98
commit
0993361ea7
3 changed files with 44 additions and 48 deletions
|
|
@ -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),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue