Module: vkd3d Branch: master Commit: f462d237c18616a6eaef63bfe7cf3a3f1a705410 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/f462d237c18616a6eaef63bfe7cf3a...
Author: Giovanni Mascellani gmascellani@codeweavers.com Date: Wed Oct 18 12:40:57 2023 +0200
ci: Run shader tests on Windows.
---
Makefile.am | 7 +++++-- tests/driver.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/Makefile.am b/Makefile.am index 4e3a43bb..def1db6f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -580,8 +580,11 @@ endif tests/crosstests.txt: FORCE $(AM_V_GEN) for i in $(vkd3d_cross_tests) ; do echo $$i ; done > $@
-crosstest-lists: tests/crosstests.txt -CLEANFILES += tests/crosstests.txt +tests/shader_tests.txt: FORCE + $(AM_V_GEN) for i in $(vkd3d_shader_tests) ; do echo $$i ; done > $@ + +crosstest-lists: tests/crosstests.txt tests/shader_tests.txt +CLEANFILES += tests/crosstests.txt tests/shader_tests.txt
FORCE:
diff --git a/tests/driver.c b/tests/driver.c index f6da3405..553417ad 100644 --- a/tests/driver.c +++ b/tests/driver.c @@ -19,6 +19,7 @@ #include <stdio.h> #include <stdbool.h> #include <windows.h> +#include <shlobj.h>
#define TIMEOUT_MS (10 * 1000) #define MAX_TIMEOUT_COUNT 3 @@ -32,16 +33,33 @@ enum program_result
static enum program_result run_program(const char *cmdline, const char *log_filename) { + char cmdline2[1024], log_dirname[1024], *file_part; enum program_result ret = PROGRAM_RESULT_SUCCESS; HANDLE log = INVALID_HANDLE_VALUE; SECURITY_ATTRIBUTES attrs = {0}; PROCESS_INFORMATION info = {0}; DWORD exit_code, wait_result; STARTUPINFOA startup = {0}; - char cmdline2[1024]; + int res;
strcpy(cmdline2, cmdline);
+ if (GetFullPathNameA(log_filename, sizeof(log_dirname), log_dirname, &file_part) == 0) + { + fprintf(stderr, "Cannot extract the directory name for path %s, last error %ld.\n", log_filename, GetLastError()); + ret = PROGRAM_RESULT_FAILURE; + goto out; + } + *file_part = '\0'; + + res = SHCreateDirectoryExA(NULL, log_dirname, NULL); + if (res != ERROR_SUCCESS && res != ERROR_ALREADY_EXISTS) + { + fprintf(stderr, "Cannot create log directory %s, error %d.\n", log_dirname, res); + ret = PROGRAM_RESULT_FAILURE; + goto out; + } + attrs.nLength = sizeof(attrs); attrs.bInheritHandle = TRUE;
@@ -125,6 +143,38 @@ static bool run_tests_for_directory(const char *commit_dir) printf("Building %s\n", commit_dir); printf("---\n");
+ sprintf(list_filename, "artifacts/%s/tests/shader_tests.txt", commit_dir); + list_file = fopen(list_filename, "r"); + + if (!list_file) + { + fprintf(stderr, "Cannot open list file %s, errno %d.\n", list_filename, errno); + ret = false; + } + else + { + while (fgets(line, sizeof(line), list_file) && timeout_count < MAX_TIMEOUT_COUNT) + { + size_t len = strlen(line); + + if (line[len - 1] == '\n') + line[--len] = '\0'; + + sprintf(cmdline, "artifacts/%s/tests/shader_runner.cross%s.exe %s", commit_dir, test_arch, line); + + /* Remove the .shader_test suffix. */ + line[len - 12] = '\0'; + sprintf(log_filename, "artifacts/%s/%s.log", commit_dir, line); + + ++test_count; + result = run_program(cmdline, log_filename); + success_count += result == PROGRAM_RESULT_SUCCESS; + timeout_count += result == PROGRAM_RESULT_TIMEOUT; + } + + fclose(list_file); + } + sprintf(list_filename, "artifacts/%s/tests/crosstests.txt", commit_dir); list_file = fopen(list_filename, "r");