diff --git a/bin/system-info.c b/bin/system-info.c index 7bd36df9bef41f0c8e60dbeb86f35fea51226054..903dde23ed6a9a4c2f8ec63e1fafcf8bc8442f94 100644 --- a/bin/system-info.c +++ b/bin/system-info.c @@ -449,6 +449,7 @@ print_graphics_details(JsonBuilder *builder, gchar *parameters = srt_graphics_dup_parameters_string (g->data); const char *messages; SrtGraphicsLibraryVendor library_vendor; + SrtRenderingInterface rendering_interface; json_builder_set_member_name (builder, parameters); json_builder_begin_object (builder); @@ -465,7 +466,11 @@ print_graphics_details(JsonBuilder *builder, json_builder_add_string_value (builder, srt_graphics_get_renderer_string (g->data)); json_builder_set_member_name (builder, "version"); json_builder_add_string_value (builder, srt_graphics_get_version_string (g->data)); - if (srt_graphics_get_rendering_interface (g->data) != SRT_RENDERING_INTERFACE_VULKAN) + + rendering_interface = srt_graphics_get_rendering_interface (g->data); + if (rendering_interface != SRT_RENDERING_INTERFACE_VULKAN && + rendering_interface != SRT_RENDERING_INTERFACE_VDPAU && + rendering_interface != SRT_RENDERING_INTERFACE_VAAPI) { json_builder_set_member_name (builder, "library-vendor"); srt_graphics_library_is_vendor_neutral (g->data, &library_vendor); diff --git a/bin/system-info.md b/bin/system-info.md index 12a745421276ccba1695eb73ac0fb95615f11362..c0ee32e986c3e193084f379e69a961408b1b10e7 100644 --- a/bin/system-info.md +++ b/bin/system-info.md @@ -411,6 +411,12 @@ keys: **vulkan** : Vulkan + **vdpau** + : VDPAU + + **va-api** + : VA-API + The values are objects with the following string keys: **renderer** diff --git a/helpers/check-va-api.c b/helpers/check-va-api.c index 67a8512adce5de03a02adf4dad9cfbc5fa2ba513..b7ccc506e7ad0f5718fe8cbd53a5d5236923629c 100644 --- a/helpers/check-va-api.c +++ b/helpers/check-va-api.c @@ -40,12 +40,14 @@ enum { OPTION_HELP = 1, + OPTION_VERBOSE, OPTION_VERSION, }; struct option long_options[] = { { "help", no_argument, NULL, OPTION_HELP }, + { "verbose", no_argument, NULL, OPTION_VERBOSE }, { "version", no_argument, NULL, OPTION_VERSION }, { NULL, 0, NULL, 0 } }; @@ -89,6 +91,7 @@ main (int argc, #define do_vaapi_or_exit(expr) if (! _do_vaapi (#expr, expr)) goto out; + bool verbose = false; int opt; int surfaces_count = 2; int ret = 1; @@ -123,6 +126,10 @@ main (int argc, usage (0); break; + case OPTION_VERBOSE: + verbose = true; + break; + case OPTION_VERSION: /* Output version number as YAML for machine-readability, * inspired by `ostree --version` and `docker version` */ @@ -180,6 +187,9 @@ main (int argc, do_vaapi_or_exit (vaInitialize (va_display, &major_version, &minor_version)); + if (verbose) + printf ("%s\n", vaQueryVendorString (va_display)); + /* Test the ability to get the supported profiles and that they are not more than * the maximum number from the implementation */ max_profiles = vaMaxNumProfiles (va_display); diff --git a/helpers/check-vdpau.c b/helpers/check-vdpau.c index 9480f943320603fb49e037f41f39b9125964b32c..8f9519a1b3e6a2d0d3953a3c6f24aa484b7ab6bf 100644 --- a/helpers/check-vdpau.c +++ b/helpers/check-vdpau.c @@ -27,6 +27,7 @@ */ #include <assert.h> +#include <stdbool.h> #include <errno.h> #include <getopt.h> #include <stdio.h> @@ -37,6 +38,7 @@ #include <vdpau/vdpau.h> #include <vdpau/vdpau_x11.h> +static VdpGetInformationString *vdp_get_information_string; static VdpGetProcAddress *vdp_get_proc_address; static VdpDeviceDestroy *vdp_device_destroy; static VdpGetErrorString *vdp_get_error_string; @@ -48,12 +50,14 @@ static VdpOutputSurfaceRenderOutputSurface *vdp_output_surface_render_output_sur enum { OPTION_HELP = 1, + OPTION_VERBOSE, OPTION_VERSION, }; struct option long_options[] = { { "help", no_argument, NULL, OPTION_HELP }, + { "verbose", no_argument, NULL, OPTION_VERBOSE }, { "version", no_argument, NULL, OPTION_VERSION }, { NULL, 0, NULL, 0 } }; @@ -103,12 +107,13 @@ load_vdpau (VdpDevice dev) { #define GET_POINTER(fid, fn) do_vdpau_or_exit (vdp_get_proc_address (dev, fid, (void**)&fn)) - GET_POINTER(VDP_FUNC_ID_DEVICE_DESTROY, vdp_device_destroy); - GET_POINTER(VDP_FUNC_ID_GET_ERROR_STRING, vdp_get_error_string); - GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE, vdp_output_surface_create); - GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE, vdp_output_surface_get_bits_native); - GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE, vdp_output_surface_put_bits_native); - GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, vdp_output_surface_render_output_surface); + GET_POINTER(VDP_FUNC_ID_GET_INFORMATION_STRING, vdp_get_information_string); + GET_POINTER(VDP_FUNC_ID_DEVICE_DESTROY, vdp_device_destroy); + GET_POINTER(VDP_FUNC_ID_GET_ERROR_STRING, vdp_get_error_string); + GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE, vdp_output_surface_create); + GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE, vdp_output_surface_get_bits_native); + GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE, vdp_output_surface_put_bits_native); + GET_POINTER(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, vdp_output_surface_render_output_surface); } int @@ -119,8 +124,10 @@ main (int argc, VdpDevice device; VdpOutputSurface out_surface_1; VdpOutputSurface out_surface_2; + bool verbose = false; int screen; int opt; + const char* information = NULL; /* Arbitrarily declare two 4x4 source images */ uint32_t black_box[] = @@ -151,6 +158,10 @@ main (int argc, usage (0); break; + case OPTION_VERBOSE: + verbose = true; + break; + case OPTION_VERSION: /* Output version number as YAML for machine-readability, * inspired by `ostree --version` and `docker version` */ @@ -180,6 +191,12 @@ main (int argc, load_vdpau (device); + if (verbose) + { + do_vdpau_or_exit (vdp_get_information_string (&information)); + printf ("%s\n", information); + } + do_vdpau_or_exit (vdp_output_surface_create (device, VDP_RGBA_FORMAT_B8G8R8A8, 4, 4, &out_surface_1)); do_vdpau_or_exit (vdp_output_surface_create (device, VDP_RGBA_FORMAT_B8G8R8A8, 4, 4, &out_surface_2)); diff --git a/steam-runtime-tools/graphics-test-defines.h b/steam-runtime-tools/graphics-test-defines.h index 83832ad50c6e56645a502bacc6743881d6413c59..a53de0fd34e269a02f3f1d67d3e66cf903b12843 100644 --- a/steam-runtime-tools/graphics-test-defines.h +++ b/steam-runtime-tools/graphics-test-defines.h @@ -33,4 +33,9 @@ #define SRT_TEST_SOFTWARE_GRAPHICS_VERSION "3.1 Mesa 19.1.3" #define SRT_TEST_GOOD_VULKAN_DRIVER_VERSION "79695877" #define SRT_TEST_GOOD_VULKAN_VERSION "1.1.102 (device 8086:0412) (driver 19.1.5)" - +#define SRT_TEST_GOOD_VDPAU_RENDERER "G3DVL VDPAU Driver Shared Library version 1.0\n" +#define SRT_TEST_BAD_VDPAU_MESSAGES "Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory\n\ +vdp_device_create_x11 (display, screen, &device, &vdp_get_proc_address) failed: 1\n" +#define SRT_TEST_GOOD_VAAPI_RENDERER "Mesa Gallium driver 20.0.4 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.36.0, 5.6.3-arch1-1, LLVM 9.0.1)\n" +#define SRT_TEST_BAD_VAAPI_MESSAGES "libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)\n\ +vaInitialize (va_display, &major_version, &minor_version) failed: unknown libva error (-1)\n" diff --git a/steam-runtime-tools/graphics.c b/steam-runtime-tools/graphics.c index 256d70988a4f3257664c8e49c32073af089e395f..cc971ebbf160fab1a7302903418b5e2d8c4653b8 100644 --- a/steam-runtime-tools/graphics.c +++ b/steam-runtime-tools/graphics.c @@ -504,6 +504,8 @@ _argv_for_graphics_test (const char *helpers_path, case SRT_RENDERING_INTERFACE_GLESV2: case SRT_RENDERING_INTERFACE_VULKAN: + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: default: g_critical ("GLX window system only makes sense with GL " "rendering interface, not %d", @@ -527,6 +529,8 @@ _argv_for_graphics_test (const char *helpers_path, break; case SRT_RENDERING_INTERFACE_VULKAN: + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: /* They don't set platformstring, just set argv later. */ break; @@ -544,6 +548,8 @@ _argv_for_graphics_test (const char *helpers_path, break; case SRT_RENDERING_INTERFACE_VULKAN: + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: default: g_critical ("EGL window system only makes sense with a GL-based " "rendering interface, not %d", @@ -589,6 +595,26 @@ _argv_for_graphics_test (const char *helpers_path, g_ptr_array_add (argv, g_strdup ("-j")); break; + case SRT_RENDERING_INTERFACE_VDPAU: + argv = _srt_get_helper (helpers_path, multiarch_tuple, "check-vdpau", + flags, error); + + if (argv == NULL) + goto out; + + g_ptr_array_add (argv, g_strdup ("--verbose")); + break; + + case SRT_RENDERING_INTERFACE_VAAPI: + argv = _srt_get_helper (helpers_path, multiarch_tuple, "check-va-api", + flags, error); + + if (argv == NULL) + goto out; + + g_ptr_array_add (argv, g_strdup ("--verbose")); + break; + default: g_return_val_if_reached (NULL); break; @@ -782,9 +808,11 @@ _srt_check_library_vendor (const char *multiarch_tuple, SrtLibraryIssues issues; const char * const *dependencies; - /* Vulkan is always vendor-neutral, so it doesn't make sense to check it. We simply return - * SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */ - if (rendering_interface == SRT_RENDERING_INTERFACE_VULKAN) + /* Vulkan, VDPAU and VA-API are always vendor-neutral, so it doesn't make sense to check it. + * We simply return SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */ + if (rendering_interface == SRT_RENDERING_INTERFACE_VULKAN || + rendering_interface == SRT_RENDERING_INTERFACE_VDPAU || + rendering_interface == SRT_RENDERING_INTERFACE_VAAPI) goto out; switch (window_system) @@ -954,6 +982,7 @@ _srt_check_graphics (const char *helpers_path, const gchar *renderer_string = NULL; GError *error = NULL; SrtGraphicsIssues issues = SRT_GRAPHICS_ISSUES_NONE; + SrtGraphicsIssues non_zero_wait_status_issue = SRT_GRAPHICS_ISSUES_CANNOT_LOAD; GStrv my_environ = NULL; const gchar *ld_preload; gchar *filtered_preload = NULL; @@ -989,6 +1018,24 @@ _srt_check_graphics (const char *helpers_path, library_vendor = _srt_check_library_vendor (multiarch_tuple, window_system, rendering_interface); + switch (rendering_interface) + { + case SRT_RENDERING_INTERFACE_GL: + case SRT_RENDERING_INTERFACE_GLESV2: + case SRT_RENDERING_INTERFACE_VULKAN: + non_zero_wait_status_issue = SRT_GRAPHICS_ISSUES_CANNOT_LOAD; + break; + + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: + /* The test here tries to draw an offscreen X11 window */ + non_zero_wait_status_issue = SRT_GRAPHICS_ISSUES_CANNOT_DRAW; + break; + + default: + g_return_val_if_reached (SRT_GRAPHICS_ISSUES_INTERNAL_ERROR); + } + issues |= _srt_run_helper (&my_environ, &output, &child_stderr, @@ -997,7 +1044,7 @@ _srt_check_graphics (const char *helpers_path, &exit_status, &terminating_signal, FALSE, - SRT_GRAPHICS_ISSUES_CANNOT_LOAD); + non_zero_wait_status_issue); if (issues != SRT_GRAPHICS_ISSUES_NONE) { @@ -1010,7 +1057,7 @@ _srt_check_graphics (const char *helpers_path, &exit_status, &terminating_signal, TRUE, - SRT_GRAPHICS_ISSUES_CANNOT_LOAD); + non_zero_wait_status_issue); goto out; } @@ -1044,6 +1091,11 @@ _srt_check_graphics (const char *helpers_path, } break; + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: + /* The output is in plan text, nothing to do here */ + break; + default: g_return_val_if_reached (SRT_GRAPHICS_ISSUES_INTERNAL_ERROR); } @@ -1151,6 +1203,12 @@ _srt_check_graphics (const char *helpers_path, SRT_GRAPHICS_ISSUES_CANNOT_DRAW); break; + case SRT_RENDERING_INTERFACE_VDPAU: + case SRT_RENDERING_INTERFACE_VAAPI: + if (output != NULL) + renderer_string = output; + break; + default: g_return_val_if_reached (SRT_GRAPHICS_ISSUES_INTERNAL_ERROR); } @@ -1217,7 +1275,7 @@ srt_graphics_get_issues (SrtGraphics *self) * or vendor-specific, and if vendor-specific, attempt to guess the vendor * * Return whether the entry-point library for this graphics stack is vendor-neutral or vendor-specific. - * Vulkan is always vendor-neutral, so this function will always return %TRUE for it. + * Vulkan, VDPAU and VA-API are always vendor-neutral, so this function will always return %TRUE for them. * * Returns: %TRUE if the graphics library is vendor-neutral, %FALSE otherwise. */ @@ -1231,6 +1289,8 @@ srt_graphics_library_is_vendor_neutral (SrtGraphics *self, *vendor_out = self->library_vendor; return (self->rendering_interface == SRT_RENDERING_INTERFACE_VULKAN || + self->rendering_interface == SRT_RENDERING_INTERFACE_VDPAU || + self->rendering_interface == SRT_RENDERING_INTERFACE_VAAPI || self->library_vendor == SRT_GRAPHICS_LIBRARY_VENDOR_GLVND); } diff --git a/steam-runtime-tools/graphics.h b/steam-runtime-tools/graphics.h index 3f30c60eb468b6ec0c596db2022f89c1ca321c51..31400d7505cd8a5e41282d884dc65878f5febe64 100644 --- a/steam-runtime-tools/graphics.h +++ b/steam-runtime-tools/graphics.h @@ -109,16 +109,19 @@ typedef enum * @SRT_RENDERING_INTERFACE_GL: GL rendering interface * @SRT_RENDERING_INTERFACE_GLESV2: GLESv2 rendering interfaces * @SRT_RENDERING_INTERFACE_VULKAN: Vulkan rendering interface + * @SRT_RENDERING_INTERFACE_VDPAU: VDPAU rendering interface */ typedef enum { SRT_RENDERING_INTERFACE_GL, SRT_RENDERING_INTERFACE_GLESV2, SRT_RENDERING_INTERFACE_VULKAN, + SRT_RENDERING_INTERFACE_VDPAU, + SRT_RENDERING_INTERFACE_VAAPI, /* ... possible future additions: GLESV1, GLESV3? */ } SrtRenderingInterface; -#define SRT_N_RENDERING_INTERFACES (SRT_RENDERING_INTERFACE_VULKAN + 1) +#define SRT_N_RENDERING_INTERFACES (SRT_RENDERING_INTERFACE_VAAPI + 1) const char *srt_graphics_get_multiarch_tuple (SrtGraphics *self); SrtGraphicsIssues srt_graphics_get_issues (SrtGraphics *self); diff --git a/steam-runtime-tools/system-info.c b/steam-runtime-tools/system-info.c index 19c5208e7f5949a183e44a3be1970510f3009a6b..93b4c7f011eb1cde717b8a56a0da153cf8246f20 100644 --- a/steam-runtime-tools/system-info.c +++ b/steam-runtime-tools/system-info.c @@ -1538,7 +1538,7 @@ GList * srt_system_info_check_all_graphics (SrtSystemInfo *self, return list; } - // Try each of glx and gles + // Try each rendering interface // Try each window system abi->cached_combined_issues |= @@ -1569,6 +1569,13 @@ GList * srt_system_info_check_all_graphics (SrtSystemInfo *self, SRT_RENDERING_INTERFACE_VULKAN, NULL); + abi->cached_combined_issues |= + srt_system_info_check_graphics (self, + multiarch_tuple, + SRT_WINDOW_SYSTEM_X11, + SRT_RENDERING_INTERFACE_VDPAU, + NULL); + abi->graphics_cache_available = TRUE; list = g_list_sort (g_hash_table_get_values (abi->cached_graphics_results), diff --git a/tests/graphics.c b/tests/graphics.c index 4087d294e4bbcb72e83733a60b8929068d3ec09b..d04c84213425c4a93a503b0a23fe4f89afba0638 100644 --- a/tests/graphics.c +++ b/tests/graphics.c @@ -259,64 +259,6 @@ test_object (Fixture *f, g_object_unref (graphics); } -/* - * Test a mock system with hardware graphics stack - */ -static void -test_good_graphics (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *messages; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-good", - SRT_WINDOW_SYSTEM_GLX, - SRT_RENDERING_INTERFACE_GL, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE); - g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, - NULL); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_VERSION); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - g_object_get (graphics, - "messages", &messages, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpstr (messages, ==, NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE); - g_assert_cmpstr (tuple, ==, "mock-good"); - g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (version, ==, SRT_TEST_GOOD_GRAPHICS_VERSION); - g_assert_cmpint (exit_status, ==, 0); - g_assert_cmpint (terminating_signal, ==, 0); - g_free (tuple); - g_free (renderer); - g_free (version); - g_free (messages); - - g_object_unref (graphics); - g_object_unref (info); -} - /* * Test that the X11 window system is normalized correctly. */ @@ -443,412 +385,6 @@ test_normalize_window_system (Fixture *f, g_object_unref (info); } -/* - * Test a mock system with no graphics stack - */ -static void -test_bad_graphics (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - SrtGraphicsLibraryVendor library_vendor; - gboolean vendor_neutral; - gchar *messages; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-bad", - SRT_WINDOW_SYSTEM_GLX, - SRT_RENDERING_INTERFACE_GL, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - NULL); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - NULL); - g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, - "warning: this warning should always be logged\n" - "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n" - "info: you used LIBGL_DEBUG=verbose\n"); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - - /* We used "mock-bad" for the architecture so, when checking the library vendor, - * we will not be able to call the helper `mock-bad-check-library`. - * For this reason we expect %SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */ - vendor_neutral = srt_graphics_library_is_vendor_neutral (graphics, &library_vendor); - g_assert_cmpint (library_vendor, ==, SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN); - g_assert_false (vendor_neutral); - g_object_get (graphics, - "messages", &messages, - "multiarch-tuple", &tuple, - "issues", &issues, - "library-vendor", &library_vendor, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmpint (library_vendor, ==, SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN); - g_assert_cmpstr (messages, ==, - "warning: this warning should always be logged\n" - "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n" - "info: you used LIBGL_DEBUG=verbose\n"); - g_assert_cmpstr (tuple, ==, "mock-bad"); - g_assert_cmpstr (renderer, ==, NULL); - g_assert_cmpstr (version, ==, NULL); - g_assert_cmpint (exit_status, ==, 1); - g_assert_cmpint (terminating_signal, ==, 0); - g_free (messages); - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with timeout - */ -static void -test_timeout_graphics (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - srt_system_info_set_test_flags (info, SRT_TEST_FLAGS_TIME_OUT_SOONER); - - issues = srt_system_info_check_graphics (info, - "mock-hanging", - SRT_WINDOW_SYSTEM_GLX, - SRT_RENDERING_INTERFACE_GL, - &graphics); - g_debug ("issues is 0x%x", issues); - g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_CANNOT_LOAD), ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_TIMEOUT), ==, SRT_GRAPHICS_ISSUES_TIMEOUT); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - NULL); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - NULL); - // Timeout has exit code 124 - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 124); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - g_object_get (graphics, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_CANNOT_LOAD), ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_TIMEOUT), ==, SRT_GRAPHICS_ISSUES_TIMEOUT); - g_assert_cmpstr (tuple, ==, "mock-hanging"); - g_assert_cmpstr (renderer, ==, NULL); - g_assert_cmpstr (version, ==, NULL); - g_assert_cmpint (exit_status, ==, 124); - g_assert_cmpint (terminating_signal, ==, 0); - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with software rendering - */ -static void -test_software_rendering (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *messages; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-software", - SRT_WINDOW_SYSTEM_GLX, - SRT_RENDERING_INTERFACE_GL, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING); - g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, - "warning: this warning should always be logged\n" - "info: you used LIBGL_DEBUG=verbose\n"); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - SRT_TEST_SOFTWARE_GRAPHICS_RENDERER); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - SRT_TEST_SOFTWARE_GRAPHICS_VERSION); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - - g_object_get (graphics, - "messages", &messages, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING); - g_assert_cmpstr (tuple, ==, "mock-software"); - g_assert_cmpstr (renderer, ==, SRT_TEST_SOFTWARE_GRAPHICS_RENDERER); - g_assert_cmpstr (version, ==, SRT_TEST_SOFTWARE_GRAPHICS_VERSION); - g_assert_cmpint (exit_status, ==, 0); - g_assert_cmpint (terminating_signal, ==, 0); - g_assert_cmpstr (messages, ==, - "warning: this warning should always be logged\n" - "info: you used LIBGL_DEBUG=verbose\n"); - - g_free (tuple); - g_free (renderer); - g_free (version); - g_free (messages); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with good vulkan drivers - */ -static void -test_good_vulkan (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-good", - SRT_WINDOW_SYSTEM_X11, - SRT_RENDERING_INTERFACE_VULKAN, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - SRT_TEST_GOOD_VULKAN_VERSION); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - - g_object_get (graphics, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE); - g_assert_cmpstr (tuple, ==, "mock-good"); - g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (version, ==, SRT_TEST_GOOD_VULKAN_VERSION); - g_assert_cmpint (exit_status, ==, 0); - g_assert_cmpint (terminating_signal, ==, 0); - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with no vulkan graphics driver - */ -static void -test_bad_vulkan (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-bad", - SRT_WINDOW_SYSTEM_X11, - SRT_RENDERING_INTERFACE_VULKAN, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - NULL); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - NULL); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - - g_object_get (graphics, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD); - g_assert_cmpstr (tuple, ==, "mock-bad"); - g_assert_cmpstr (renderer, ==, NULL); - g_assert_cmpstr (version, ==, NULL); - g_assert_cmpint (exit_status, ==, 1); - g_assert_cmpint (terminating_signal, ==, 0); - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with vulkan driver but check-vulkan failure - */ -static void -test_mixed_vulkan (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *tuple; - gchar *renderer; - gchar *version; - int exit_status; - int terminating_signal; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-mixed", - SRT_WINDOW_SYSTEM_X11, - SRT_RENDERING_INTERFACE_VULKAN, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - SRT_TEST_GOOD_VULKAN_VERSION); - g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1); - g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); - - g_object_get (graphics, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - "exit-status", &exit_status, - "terminating-signal", &terminating_signal, - NULL); - g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, - "failed to create window surface!\n"); - - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW); - g_assert_cmpstr (tuple, ==, "mock-mixed"); - g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (version, ==, SRT_TEST_GOOD_VULKAN_VERSION); - g_assert_cmpint (exit_status, ==, 1); - g_assert_cmpint (terminating_signal, ==, 0); - - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - -/* - * Test a mock system with gl driver but check-gl failure - */ -static void -test_mixed_gl (Fixture *f, - gconstpointer context) -{ - SrtGraphics *graphics = NULL; - SrtGraphicsIssues issues; - gchar *tuple; - gchar *renderer; - gchar *version; - - SrtSystemInfo *info = srt_system_info_new (NULL); - srt_system_info_set_helpers_path (info, f->builddir); - - issues = srt_system_info_check_graphics (info, - "mock-mixed", - SRT_WINDOW_SYSTEM_GLX, - SRT_RENDERING_INTERFACE_GL, - &graphics); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW); - g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, - SRT_TEST_GOOD_GRAPHICS_VERSION); - g_object_get (graphics, - "multiarch-tuple", &tuple, - "issues", &issues, - "renderer-string", &renderer, - "version-string", &version, - NULL); - g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW); - g_assert_cmpstr (tuple, ==, "mock-mixed"); - g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER); - g_assert_cmpstr (version, ==, SRT_TEST_GOOD_GRAPHICS_VERSION); - g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, - "warning: this warning should always be logged\n" - "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n" - "info: you used LIBGL_DEBUG=verbose\n"); - - g_free (tuple); - g_free (renderer); - g_free (version); - - g_object_unref (graphics); - g_object_unref (info); -} - /* * Test a mock system with sigusr terminating signal */ @@ -2493,6 +2029,231 @@ test_vdpau (Fixture *f, } } +typedef struct +{ + const gchar *description; + SrtWindowSystem window_system; + SrtRenderingInterface rendering_interface; + SrtGraphicsLibraryVendor library_vendor; + SrtGraphicsIssues issues; + SrtTestFlags test_flags; + const gchar *multiarch_tuple; + const gchar *renderer_string; + const gchar *version_string; + const gchar *messages; + int exit_status; + gboolean vendor_neutral; +} GraphicsTest; + +static const GraphicsTest graphics_test[] = +{ + { + .description = "good vdpau", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VDPAU, + .issues = SRT_GRAPHICS_ISSUES_NONE, + .multiarch_tuple = "mock-good", + .renderer_string = SRT_TEST_GOOD_VDPAU_RENDERER, + .vendor_neutral = TRUE, + }, + + { + .description = "bad vdpau", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VDPAU, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW, + .multiarch_tuple = "mock-bad", + .messages = SRT_TEST_BAD_VDPAU_MESSAGES, + .exit_status = 1, + .vendor_neutral = TRUE, + }, + + { + .description = "good gl", + .window_system = SRT_WINDOW_SYSTEM_GLX, + .rendering_interface = SRT_RENDERING_INTERFACE_GL, + .issues = SRT_GRAPHICS_ISSUES_NONE, + .multiarch_tuple = "mock-good", + .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version_string = SRT_TEST_GOOD_GRAPHICS_VERSION, + }, + + { + .description = "no graphics stack", + .window_system = SRT_WINDOW_SYSTEM_GLX, + .rendering_interface = SRT_RENDERING_INTERFACE_GL, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_LOAD, + .multiarch_tuple = "mock-bad", + .messages = "warning: this warning should always be logged\n" + "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n" + "info: you used LIBGL_DEBUG=verbose\n", + /* We used "mock-bad" for the architecture so, when checking the library vendor, + * we will not be able to call the helper `mock-bad-check-library`. + * For this reason we expect %SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */ + .library_vendor = SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN, + .exit_status = 1, + }, + + { + .description = "graphics timeout", + .window_system = SRT_WINDOW_SYSTEM_GLX, + .rendering_interface = SRT_RENDERING_INTERFACE_GL, + .issues = (SRT_GRAPHICS_ISSUES_CANNOT_LOAD | SRT_GRAPHICS_ISSUES_TIMEOUT), + .test_flags = SRT_TEST_FLAGS_TIME_OUT_SOONER, + .multiarch_tuple = "mock-hanging", + // Timeout has exit code 124 + .exit_status = 124, + }, + + { + .description = "software rendering", + .window_system = SRT_WINDOW_SYSTEM_GLX, + .rendering_interface = SRT_RENDERING_INTERFACE_GL, + .issues = SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING, + .multiarch_tuple = "mock-software", + .renderer_string = SRT_TEST_SOFTWARE_GRAPHICS_RENDERER, + .version_string = SRT_TEST_SOFTWARE_GRAPHICS_VERSION, + .messages = "warning: this warning should always be logged\n" + "info: you used LIBGL_DEBUG=verbose\n", + }, + + { + .description = "gl driver ok but check-gl fails", + .window_system = SRT_WINDOW_SYSTEM_GLX, + .rendering_interface = SRT_RENDERING_INTERFACE_GL, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW, + .multiarch_tuple = "mock-mixed", + .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version_string = SRT_TEST_GOOD_GRAPHICS_VERSION, + .messages = "warning: this warning should always be logged\n" + "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n" + "info: you used LIBGL_DEBUG=verbose\n", + .exit_status = 1, + }, + + { + .description = "good vulkan", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN, + .issues = SRT_GRAPHICS_ISSUES_NONE, + .multiarch_tuple = "mock-good", + .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version_string = SRT_TEST_GOOD_VULKAN_VERSION, + .vendor_neutral = TRUE, + }, + + { + .description = "bad vulkan", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_LOAD, + .multiarch_tuple = "mock-bad", + .messages = "/build/vulkan-tools/src/Vulkan-Tools-1.1.114/vulkaninfo/vulkaninfo.c:5884: failed with VK_ERROR_INITIALIZATION_FAILED\n", + .exit_status = 1, + .vendor_neutral = TRUE, + }, + + { + .description = "good vulkan driver but check-vulkan failure", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW, + .multiarch_tuple = "mock-mixed", + .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version_string = SRT_TEST_GOOD_VULKAN_VERSION, + .messages = "failed to create window surface!\n", + .exit_status = 1, + .vendor_neutral = TRUE, + }, + + { + .description = "good va-api", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VAAPI, + .issues = SRT_GRAPHICS_ISSUES_NONE, + .multiarch_tuple = "mock-good", + .renderer_string = SRT_TEST_GOOD_VAAPI_RENDERER, + .vendor_neutral = TRUE, + }, + + { + .description = "bad va-api", + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VAAPI, + .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW, + .multiarch_tuple = "mock-bad", + .messages = SRT_TEST_BAD_VAAPI_MESSAGES, + .exit_status = 1, + .vendor_neutral = TRUE, + }, +}; + +static void +test_check_graphics (Fixture *f, + gconstpointer context) +{ + for (gsize i = 0; i < G_N_ELEMENTS (graphics_test); i++) + { + const GraphicsTest *test = &graphics_test[i]; + SrtGraphics *graphics = NULL; + SrtGraphicsIssues issues; + gchar *tuple; + gchar *renderer; + gchar *version; + gchar *messages; + int exit_status; + int terminating_signal; + gboolean vendor_neutral; + SrtGraphicsLibraryVendor library_vendor; + + g_test_message ("%s", test->description); + + SrtSystemInfo *info = srt_system_info_new (NULL); + srt_system_info_set_helpers_path (info, f->builddir); + srt_system_info_set_test_flags (info, test->test_flags); + + issues = srt_system_info_check_graphics (info, + test->multiarch_tuple, + test->window_system, + test->rendering_interface, + &graphics); + g_assert_cmpint (issues, ==, test->issues); + g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, test->renderer_string); + g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, test->version_string); + g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, test->messages); + g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, test->exit_status); + g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0); + + vendor_neutral = srt_graphics_library_is_vendor_neutral (graphics, &library_vendor); + g_assert_cmpint (library_vendor, ==, test->library_vendor); + g_assert_cmpint (vendor_neutral, ==, test->vendor_neutral); + + g_object_get (graphics, + "multiarch-tuple", &tuple, + "issues", &issues, + "renderer-string", &renderer, + "version-string", &version, + "messages", &messages, + "exit-status", &exit_status, + "terminating-signal", &terminating_signal, + NULL); + g_assert_cmpint (issues, ==, test->issues); + g_assert_cmpstr (tuple, ==, test->multiarch_tuple); + g_assert_cmpstr (renderer, ==, test->renderer_string); + g_assert_cmpstr (version, ==, test->version_string); + g_assert_cmpstr (messages, ==, test->messages); + g_assert_cmpint (exit_status, ==, test->exit_status); + g_assert_cmpint (terminating_signal, ==, 0); + g_free (tuple); + g_free (renderer); + g_free (version); + g_free (messages); + + g_object_unref (graphics); + g_object_unref (info); + } +} + static gint glx_icd_compare (SrtGlxIcd *a, SrtGlxIcd *b) { @@ -2614,28 +2375,11 @@ main (int argc, g_test_init (&argc, &argv, NULL); g_test_add ("/graphics/object", Fixture, NULL, setup, test_object, teardown); - g_test_add ("/graphics/good", Fixture, NULL, - setup, test_good_graphics, teardown); - g_test_add ("/graphics/bad", Fixture, NULL, - setup, test_bad_graphics, teardown); - g_test_add ("/graphics/hanging", Fixture, NULL, - setup, test_timeout_graphics, teardown); - g_test_add ("/graphics/software", Fixture, NULL, - setup, test_software_rendering, teardown); g_test_add ("/graphics/normalize_window_system", Fixture, NULL, setup, test_normalize_window_system, teardown); - g_test_add ("/graphics/gl-mixed", Fixture, NULL, - setup, test_mixed_gl, teardown); g_test_add ("/graphics/sigusr", Fixture, NULL, setup, test_sigusr, teardown); - g_test_add ("/graphics/vulkan", Fixture, NULL, - setup, test_good_vulkan, teardown); - g_test_add ("/graphics/vulkan-bad", Fixture, NULL, - setup, test_bad_vulkan, teardown); - g_test_add ("/graphics/vulkan-mixed", Fixture, NULL, - setup, test_mixed_vulkan, teardown); - g_test_add ("/graphics/icd/egl/basic", Fixture, NULL, setup, test_icd_egl, teardown); g_test_add ("/graphics/icd/egl/dirs", Fixture, &dir_config, @@ -2670,9 +2414,12 @@ main (int argc, g_test_add ("/graphics/dri/flatpak", Fixture, NULL, setup, test_dri_flatpak, teardown); - g_test_add ("/graphics/vdpau", Fixture, NULL, + g_test_add ("/graphics/vdpau/basic", Fixture, NULL, setup, test_vdpau, teardown); + g_test_add ("/graphics/check", Fixture, NULL, + setup, test_check_graphics, teardown); + g_test_add ("/graphics/glx/debian", Fixture, NULL, setup, test_glx_debian, teardown); g_test_add ("/graphics/glx/container", Fixture, NULL, diff --git a/tests/meson.build b/tests/meson.build index 7e2e59a8d09f19a78c2b6fc39e60773d4b923232..f45f8bee9d2a3a62ad2fe1f84f3a8c5528489395 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -179,8 +179,12 @@ executable( # Helpers with no dependencies and one source file of the same name # as the helper itself. foreach helper : [ + 'mock-bad-check-va-api', + 'mock-bad-check-vdpau', 'mock-bad-check-vulkan', 'mock-bad-vulkaninfo', + 'mock-good-check-va-api', + 'mock-good-check-vdpau', 'mock-good-vulkaninfo', 'mock-hanging-wflinfo', 'mock-sigusr-wflinfo', diff --git a/tests/mock-bad-check-va-api.c b/tests/mock-bad-check-va-api.c new file mode 100644 index 0000000000000000000000000000000000000000..cca06c1697878b469509a3180585bb67de1850f8 --- /dev/null +++ b/tests/mock-bad-check-va-api.c @@ -0,0 +1,37 @@ +/* + * Copyright © 2020 Collabora Ltd. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <stdio.h> + +int +main (int argc, + char **argv) +{ + // Give bad output + fprintf (stderr, "libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)\n"); + fprintf (stderr, "vaInitialize (va_display, &major_version, &minor_version) failed: unknown libva error (-1)\n"); + return 1; +} + diff --git a/tests/mock-bad-check-vdpau.c b/tests/mock-bad-check-vdpau.c new file mode 100644 index 0000000000000000000000000000000000000000..d9904229b414c2504131e02bc7804dc809a603a1 --- /dev/null +++ b/tests/mock-bad-check-vdpau.c @@ -0,0 +1,37 @@ +/* + * Copyright © 2020 Collabora Ltd. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <stdio.h> + +int +main (int argc, + char **argv) +{ + // Give bad output + fprintf (stderr, "Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory\n"); + fprintf (stderr, "vdp_device_create_x11 (display, screen, &device, &vdp_get_proc_address) failed: 1\n"); + return 1; +} + diff --git a/tests/mock-good-check-va-api.c b/tests/mock-good-check-va-api.c new file mode 100644 index 0000000000000000000000000000000000000000..fd73038c0427709631eaf6ebba9c86d847a4454f --- /dev/null +++ b/tests/mock-good-check-va-api.c @@ -0,0 +1,36 @@ +/* + * Copyright © 2020 Collabora Ltd. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <stdio.h> + +int +main (int argc, + char **argv) +{ + // Give good output + printf ("Mesa Gallium driver 20.0.4 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.36.0, 5.6.3-arch1-1, LLVM 9.0.1)\n"); + return 0; +} + diff --git a/tests/mock-good-check-vdpau.c b/tests/mock-good-check-vdpau.c new file mode 100644 index 0000000000000000000000000000000000000000..ebc90fc5d047d4f64055854d94ec80151754fe39 --- /dev/null +++ b/tests/mock-good-check-vdpau.c @@ -0,0 +1,36 @@ +/* + * Copyright © 2020 Collabora Ltd. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <stdio.h> + +int +main (int argc, + char **argv) +{ + // Give good output + printf ("G3DVL VDPAU Driver Shared Library version 1.0\n"); + return 0; +} +