From 45160e45e044351de69cc3c8740c8013be372458 Mon Sep 17 00:00:00 2001 From: Ludovico de Nittis <ludovico.denittis@collabora.com> Date: Thu, 28 Jan 2021 11:05:17 +0100 Subject: [PATCH] Add report parsing tests for the Vulkan graphics devices Signed-off-by: Ludovico de Nittis <ludovico.denittis@collabora.com> --- tests/json-report/full-good-report.json | 18 ++++-- tests/json-report/partial-report.json | 18 ++++++ tests/system-info.c | 82 ++++++++++++++++++++++++- 3 files changed, 111 insertions(+), 7 deletions(-) diff --git a/tests/json-report/full-good-report.json b/tests/json-report/full-good-report.json index 96b119ca3..223105bec 100644 --- a/tests/json-report/full-good-report.json +++ b/tests/json-report/full-good-report.json @@ -138,16 +138,24 @@ ], "graphics-details" : { "x11/vulkan" : { - "renderer" : "AMD Radeon RX 5700 XT", - "version" : "1.2.136 (device 1002:731f) (driver 2.0.140)", + "renderer" : "AMD RADV NAVI10 (ACO)", + "version" : "1.2.145 (device 0x1002:0x731f) (driver 20.3.3)", "devices" : [ { - "name" : "AMD Radeon RX 5700 XT", - "api-version" : "1.2.136", - "driver-version" : "2.0.140", + "name" : "AMD RADV NAVI10 (ACO)", + "api-version" : "1.2.145", + "driver-version" : "20.3.3", "vendor-id" : "0x1002", "device-id" : "0x731f", "type" : "discrete-gpu" + }, + { + "name" : "llvmpipe (LLVM 8.0, 256 bits)", + "api-version" : "1.0.2", + "driver-version" : "0.0.1", + "vendor-id" : "0x10005", + "device-id" : "0", + "type" : "cpu" } ] }, diff --git a/tests/json-report/partial-report.json b/tests/json-report/partial-report.json index d843f8237..a76188cef 100644 --- a/tests/json-report/partial-report.json +++ b/tests/json-report/partial-report.json @@ -17,6 +17,24 @@ "error": "We just don't know" }, "graphics-details" : { + "x11/vulkan" : { + "renderer" : "AMD RADV NAVI10 (ACO)", + "version" : "1.2.145 (device 0x1002:0x731f) (driver 20.3.3)", + "devices" : [ + { + "name" : "AMD RADV NAVI10 (ACO)", + "api-version" : "1.2.145", + "driver-version" : "20.3.3", + "type" : "discrete-gpu", + "messages" : [ + "vkWaitForFences (dev_props->device, 1, &dev_props->in_flight_fences[dev_props->current_frame], VK_TRUE, 1) failed: TIMEOUT (2)" + ], + "issues" : [ + "cannot-draw" + ] + } + ] + }, "x11/vdpau" : { "renderer" : "G3DVL VDPAU Driver Shared Library version 1.0\n", "library-vendor" : "futuristic" diff --git a/tests/system-info.c b/tests/system-info.c index 4967bfc71..f4f92e979 100644 --- a/tests/system-info.c +++ b/tests/system-info.c @@ -25,6 +25,7 @@ #include <libglnx.h> +#include "steam-runtime-tools/graphics-test-defines.h" #include <steam-runtime-tools/steam-runtime-tools.h> #include "steam-runtime-tools/utils-internal.h" @@ -2447,6 +2448,18 @@ typedef struct gboolean is_extra; } DriverTest; +typedef struct +{ + SrtGraphicsIssues issues; + const gchar *name; + const gchar *api_version; + const gchar *driver_version; + const gchar *vendor_id; + const gchar *device_id; + const gchar *messages; + SrtVkPhysicalDeviceType type; +} GraphicsDeviceTest; + typedef struct { SrtWindowSystem window_system; @@ -2456,6 +2469,7 @@ typedef struct SrtGraphicsLibraryVendor library_vendor; SrtGraphicsIssues issues; const gchar *messages; + GraphicsDeviceTest devices[4]; int exit_status; int terminating_signal; gboolean is_available; @@ -2721,9 +2735,28 @@ static const JsonTest json_test[] = { .window_system = SRT_WINDOW_SYSTEM_X11, .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN, - .renderer = "AMD Radeon RX 5700 XT", - .version = "1.2.136 (device 1002:731f) (driver 2.0.140)", + .renderer = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version = SRT_TEST_GOOD_VULKAN_VERSION, .is_available = TRUE, + .devices = + { + { + .name = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .api_version = SRT_TEST_GOOD_GRAPHICS_API_VERSION, + .driver_version = SRT_TEST_GOOD_GRAPHICS_DRIVER_VERSION, + .vendor_id = SRT_TEST_GOOD_GRAPHICS_VENDOR_ID, + .device_id = SRT_TEST_GOOD_GRAPHICS_DEVICE_ID, + .type = SRT_VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + }, + { + .name = SRT_TEST_SOFTWARE_GRAPHICS_RENDERER, + .api_version = SRT_TEST_SOFTWARE_GRAPHICS_API_VERSION, + .driver_version = SRT_TEST_SOFTWARE_GRAPHICS_DRIVER_VERSION, + .vendor_id = SRT_TEST_SOFTWARE_GRAPHICS_VENDOR_ID, + .device_id = SRT_TEST_SOFTWARE_GRAPHICS_DEVICE_ID, + .type = SRT_VK_PHYSICAL_DEVICE_TYPE_CPU, + }, + }, }, { .window_system = SRT_WINDOW_SYSTEM_X11, @@ -2961,6 +2994,26 @@ static const JsonTest json_test[] = .issues = SRT_LIBRARY_ISSUES_UNKNOWN, .graphics = { + { + .window_system = SRT_WINDOW_SYSTEM_X11, + .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN, + .renderer = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .version = SRT_TEST_GOOD_VULKAN_VERSION, + .is_available = TRUE, + .devices = + { + { + .name = SRT_TEST_GOOD_GRAPHICS_RENDERER, + .api_version = SRT_TEST_GOOD_GRAPHICS_API_VERSION, + .driver_version = SRT_TEST_GOOD_GRAPHICS_DRIVER_VERSION, + .type = SRT_VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + /* A trailing newline is added by + * _srt_json_object_dup_array_of_lines_member() */ + .messages = SRT_TEST_MIXED_VULKAN_MESSAGES_2 "\n", + .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW, + }, + }, + }, { .window_system = SRT_WINDOW_SYSTEM_X11, .rendering_interface = SRT_RENDERING_INTERFACE_VDPAU, @@ -3239,6 +3292,7 @@ json_parsing (Fixture *f, gchar **driver_environment_list; gsize j; gsize jj; + gsize k; GList *icds; GList *iter; GList *desktop_entries; @@ -3342,6 +3396,7 @@ json_parsing (Fixture *f, for (jj = 0; this_arch.graphics[jj].is_available; jj++) { SrtGraphics *graphics = NULL; + g_autoptr(SrtObjectList) devices = NULL; SrtGraphicsLibraryVendor library_vendor; srt_system_info_check_graphics (info, multiarch_tuples[j], @@ -3362,6 +3417,29 @@ json_parsing (Fixture *f, srt_graphics_get_exit_status (graphics)); g_assert_cmpint (this_arch.graphics[jj].terminating_signal, ==, srt_graphics_get_terminating_signal (graphics)); + + devices = srt_graphics_get_devices (graphics); + for (k = 0, iter = devices; iter != NULL; iter = iter->next, k++) + { + GraphicsDeviceTest this_device_test = this_arch.graphics[jj].devices[k]; + g_assert_cmpstr (srt_graphics_device_get_name (iter->data), ==, + this_device_test.name); + g_assert_cmpstr (srt_graphics_device_get_api_version (iter->data), ==, + this_device_test.api_version); + g_assert_cmpstr (srt_graphics_device_get_driver_version (iter->data), ==, + this_device_test.driver_version); + g_assert_cmpstr (srt_graphics_device_get_vendor_id (iter->data), ==, + this_device_test.vendor_id); + g_assert_cmpstr (srt_graphics_device_get_device_id (iter->data), ==, + this_device_test.device_id); + g_assert_cmpint (srt_graphics_device_get_device_type (iter->data), ==, + this_device_test.type); + g_assert_cmpstr (srt_graphics_device_get_messages (iter->data), ==, + this_device_test.messages); + g_assert_cmpint (srt_graphics_device_get_issues (iter->data), ==, + this_device_test.issues); + } + g_object_unref (graphics); } -- GitLab