mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Vulkan: Report surface init failures instead of asserting later
VulkanGraphicsContext::InitSurface() threw away VulkanContext::InitSurface()'s VkResult and carried on, so a failed surface init surfaced as _dbg_assert_(GetAvailablePresentModes().size() > 0) in the VKContext constructor rather than as a graphics error with the usual backend fallback. The vkCreate*SurfaceKHR failure path in ReinitSurface() didn't log anything either, so the assert was the only trace of it. Now ReinitSurface() logs and sets init_error_ for all three ways it can bail (surface creation, ChooseQueue, present mode enumeration), InitSurface() checks the result, and MainThreadFunc() passes the message back out instead of writing it to a local it then drops - Windows/main.cpp was reporting "Failed to initialize main thread function." to the user. Also deletes the Application on that failure path, which was leaked.
This commit is contained in:
1 parent
31daeb4b6c
commit
f7c2c55e83
6 files changed
+39
-11
No files matched your search
@@ -884,10 +884,14 @@ int main(int argc, const char* argv[]) {
|
||||
}
|
||||
|
||||
int retval = 0;
|
||||
MainThreadFunc(graphicsContext, new HeadlessApplication(), windowDesc, [&retval, &coreParameter, &testOptions, &testFilenames](GraphicsContext *graphicsContext) {
|
||||
if (!MainThreadFunc(graphicsContext, new HeadlessApplication(), windowDesc, [&retval, &coreParameter, &testOptions, &testFilenames](GraphicsContext *graphicsContext) {
|
||||
retval = RunTests(graphicsContext, coreParameter, testOptions, testFilenames);
|
||||
return false;
|
||||
});
|
||||
}, &errorMessage)) {
|
||||
// No fallbacks in headless - if we can't run it, we can't. Let's not get confusing.
|
||||
fprintf(stderr, "Failed to initialize graphics surface: %s\n", errorMessage.c_str());
|
||||
retval = 1;
|
||||
}
|
||||
|
||||
graphicsContext->ShutdownAPI();
|
||||
|
||||
|
||||
Reference in new issue
Block a user