game: Update game's GPU test to output the GPU vendor info (#3717)
Some checks failed
Build / 🖥️ Windows (push) Has been cancelled
Build / 🐧 Linux (push) Has been cancelled
Build / 🍎 MacOS (push) Has been cancelled
Inform Pages Repo / Generate Documentation (push) Has been cancelled
Lint / 📝 Formatting (push) Has been cancelled
Lint / 📝 Required Checks (push) Has been cancelled
Lint / 📝 Optional Checks (push) Has been cancelled
Update Controller Database / update-controller-db (push) Has been cancelled

This is so I can get rid of wgpu from the launcher, where it's only
purpose is to figure out the GPU name for the support package.

The problem with it is that on some environments, it errors, but the
function cannot have it's errors gracefully handled (it panics and
crashes instead).

So I'm tired of it, do it ourselves.


![image](https://github.com/user-attachments/assets/fa8ae365-b3f7-4794-81ed-fde0c2ffc651)
This commit is contained in:
Tyler Wilding 2024-10-19 15:56:43 -04:00 committed by GitHub
parent e144406c16
commit e76a4399e5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 44 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
# logs
/log
prof.json
/gpu-test.json
# for CMake
/Testing

View File

@ -138,6 +138,19 @@
"-debug"
]
},
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "gk.exe (bin\\gk.exe)",
"name": "Game - GPU Test",
"args": [
"-v",
"--gpu-test",
"opengl",
"--gpu-test-out-path",
"./gpu-test.json"
]
},
{
"type": "default",
"project": "CMakeLists.txt",

View File

@ -164,6 +164,13 @@ tasks:
lint:
cmds:
- python ./scripts/ci/lint-trailing-whitespace.py
run-gpu-test:
desc: "Runs the game's built in GPU test"
preconditions:
- sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}}
msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'"
cmds:
- "{{.GK_BIN_RELEASE_DIR}}/gk -v --gpu-test opengl --gpu-test-out-path ./gpu-test.json"
# TESTS
offline-tests: # ran by jenkins
cmds:

View File

@ -2,13 +2,15 @@
#include "game/system/hid/sdl_util.h"
#include "third-party/glad/include/glad/glad.h"
namespace tests {
void to_json(json& j, const GPUTestOutput& obj) {
j = json{
{"success", obj.success},
{"error", obj.error},
{"errorCause", obj.errorCause},
};
json_serialize(success);
json_serialize(error);
json_serialize(errorCause);
json_serialize_optional(gpuRendererString);
json_serialize_optional(gpuVendorString);
}
GPUTestOutput run_gpu_test(const std::string& test_type) {
@ -40,7 +42,20 @@ GPUTestOutput run_gpu_test(const std::string& test_type) {
output = {false, "Required OpenGL Version is not supported",
sdl_util::log_and_return_error("SDL initialization failed")};
} else {
output = {true, "", ""};
gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress);
if (!gladLoadGL()) {
output = {false, "Unable to init GLAD", ""};
} else {
output = {true, "", ""};
const auto rendererString = glGetString(GL_RENDERER);
if (rendererString) {
output.gpuRendererString = (const char*)rendererString;
}
const auto vendorString = glGetString(GL_VENDOR);
if (vendorString) {
output.gpuVendorString = (const char*)vendorString;
}
}
SDL_GL_DeleteContext(glContext);
}
SDL_DestroyWindow(window);

View File

@ -9,6 +9,8 @@ struct GPUTestOutput {
bool success;
std::string error;
std::string errorCause;
std::optional<std::string> gpuRendererString;
std::optional<std::string> gpuVendorString;
};
void to_json(json& j, const GPUTestOutput& obj);