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),
)
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;
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)
{
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);
#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;