fix(ci): skip the VideoOut window tests without a display, as check_skips expects

Main's Linux job fails since #1028 and #1714: guest_video_out_resolution_status aborts when SDL's offscreen
driver has no Vulkan window, and check_skips.py rejects the skips of guest_video_out_wqhd_detection and the
flip tests because "no display" is not among the device limitations it accepts.

The resolution status test now skips with code 77 like its wqhd sibling, the flip tests print the same skip
reason, and check_skips.py accepts "no display" as a device limitation. ANYPS5_REQUIRE_DISPLAY still turns
the skip into a failure.
This commit is contained in:
Adrià Franch 2026-10-10 02:20:49 +02:00
parent 1f0c9fef56
commit df270d59eb
4 changed files with 16 additions and 5 deletions

View File

@ -76,7 +76,7 @@ if(BUILD_TESTING)
target_link_libraries(guest_video_out_resolution_status_tests PRIVATE libSceVideoOut libSceAgcDriver libkernel libc)
configure_windows_unwind(guest_video_out_resolution_status_tests)
add_test(NAME guest_video_out_resolution_status COMMAND guest_video_out_resolution_status_tests)
set_tests_properties(guest_video_out_resolution_status PROPERTIES TIMEOUT 20)
set_tests_properties(guest_video_out_resolution_status PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77)
if(WIN32)
set_tests_properties(guest_video_out_resolution_status PROPERTIES ENVIRONMENT_MODIFICATION
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libc>")

View File

@ -563,7 +563,10 @@ int main(int argc, char** argv) {
std::fprintf(stderr, "%s\n", error.what());
try { LibcRunShutdown_nid_postfix(); }
catch (const std::exception& shutdown) { std::fprintf(stderr, "shutdown: %s\n", shutdown.what()); }
if (std::string(error.what()).find("Vulkan support") != std::string::npos && !std::getenv("ANYPS5_REQUIRE_DISPLAY")) return 77;
if (std::string(error.what()).find("Vulkan support") != std::string::npos && !std::getenv("ANYPS5_REQUIRE_DISPLAY")) {
std::printf("skipped, no display or Vulkan device: %s\n", error.what());
return 77;
}
return 1;
}
}

View File

@ -1,5 +1,6 @@
#include "SceTypes.hpp"
#include "prx/libc/include/Shutdown.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdexcept>
@ -27,7 +28,14 @@ static bool Rejects(int handle, VideoOutResolutionStatus* status) {
}
int main() {
const int handle = sceVideoOutOpen(SYSTEM_USER, MAIN_BUS, 0, nullptr);
int handle = 0;
try {
handle = sceVideoOutOpen(SYSTEM_USER, MAIN_BUS, 0, nullptr);
} catch (const std::runtime_error& error) {
if (std::getenv("ANYPS5_REQUIRE_DISPLAY") != nullptr) throw;
std::printf("skipped, no display or Vulkan device: %s\n", error.what());
return 77;
}
Require(handle > 0);
VideoOutResolutionStatus status;

View File

@ -3,7 +3,7 @@ import re
import xml.etree.ElementTree as ET
from pathlib import Path
DEVICE_LIMITATION = re.compile(r"skipped,.*(subgroup|the device has no|the device reports)", re.IGNORECASE)
DEVICE_LIMITATION = re.compile(r"skipped,.*(subgroup|the device has no|the device reports|no display)", re.IGNORECASE)
WINDOWS_PREFIX = "agc"
@ -36,7 +36,7 @@ if __name__ == "__main__":
expected = f"any {WINDOWS_PREFIX}* test, which the runner has no Vulkan driver for"
else:
unexpected = [name for name, output in found if not DEVICE_LIMITATION.search(output)]
expected = "any test that reports the device limitation it needs, such as narrow subgroups or a missing extension"
expected = "any test that reports the device limitation it needs, such as narrow subgroups, a missing extension or no display for a Vulkan window"
for name in unexpected:
print(f"error: {name} skipped")
if unexpected: