From 0f9e86fe1cbd7fcaf9aecf6586bb1261b7cc978a Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Thu, 19 Dec 2024 16:19:13 -0800 Subject: [PATCH] tests: Fix GPU tests crashing when window is minimized --- test/testgpu_simple_clear.c | 33 +++++++++++++++++++-------------- test/testgpu_spinning_cube.c | 6 ++++++ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/test/testgpu_simple_clear.c b/test/testgpu_simple_clear.c index ded85e4eae..b2afba8818 100644 --- a/test/testgpu_simple_clear.c +++ b/test/testgpu_simple_clear.c @@ -87,22 +87,27 @@ SDL_AppResult SDL_AppIterate(void *appstate) return SDL_APP_FAILURE; } - const double currentTime = (double)SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency(); - SDL_GPURenderPass *renderPass; - SDL_GPUColorTargetInfo color_target_info; - SDL_zero(color_target_info); - color_target_info.texture = swapchainTexture; - color_target_info.clear_color.r = (float)(0.5 + 0.5 * SDL_sin(currentTime)); - color_target_info.clear_color.g = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 2 / 3)); - color_target_info.clear_color.b = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 4 / 3)); - color_target_info.clear_color.a = 1.0f; - color_target_info.load_op = SDL_GPU_LOADOP_CLEAR; - color_target_info.store_op = SDL_GPU_STOREOP_STORE; + if (swapchainTexture != NULL) { + const double currentTime = (double)SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency(); + SDL_GPURenderPass *renderPass; + SDL_GPUColorTargetInfo color_target_info; + SDL_zero(color_target_info); + color_target_info.texture = swapchainTexture; + color_target_info.clear_color.r = (float)(0.5 + 0.5 * SDL_sin(currentTime)); + color_target_info.clear_color.g = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 2 / 3)); + color_target_info.clear_color.b = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 4 / 3)); + color_target_info.clear_color.a = 1.0f; + color_target_info.load_op = SDL_GPU_LOADOP_CLEAR; + color_target_info.store_op = SDL_GPU_STOREOP_STORE; - renderPass = SDL_BeginGPURenderPass(cmdbuf, &color_target_info, 1, NULL); - SDL_EndGPURenderPass(renderPass); + renderPass = SDL_BeginGPURenderPass(cmdbuf, &color_target_info, 1, NULL); + SDL_EndGPURenderPass(renderPass); - SDL_SubmitGPUCommandBuffer(cmdbuf); + SDL_SubmitGPUCommandBuffer(cmdbuf); + } else { + /* Swapchain is unavailable, cancel work */ + SDL_CancelGPUCommandBuffer(cmdbuf); + } frames++; diff --git a/test/testgpu_spinning_cube.c b/test/testgpu_spinning_cube.c index 8ea37ace78..97a229b8bf 100644 --- a/test/testgpu_spinning_cube.c +++ b/test/testgpu_spinning_cube.c @@ -346,6 +346,12 @@ Render(SDL_Window *window, const int windownum) quit(2); } + if (swapchainTexture == NULL) { + /* Swapchain is unavailable, cancel work */ + SDL_CancelGPUCommandBuffer(cmd); + return; + } + /* * Do some rotation with Euler angles. It is not a fixed axis as * quaternions would be, but the effect is cool.