From 69318dabfbe822852431c013ec3c075f5f9284a0 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 20 Dec 2024 15:30:39 -0500 Subject: [PATCH] SDL: Fix clear-only render passes getting silently discarded --- src/FNA3D_Driver_SDL.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/FNA3D_Driver_SDL.c b/src/FNA3D_Driver_SDL.c index 2e917103..04a2adda 100644 --- a/src/FNA3D_Driver_SDL.c +++ b/src/FNA3D_Driver_SDL.c @@ -724,9 +724,23 @@ static void SDLGPU_INTERNAL_BindRenderTarget( textureHandle->boundAsRenderTarget = 1; } +static void SDLGPU_INTERNAL_BeginRenderPass( + SDLGPU_Renderer* renderer +); + static void SDLGPU_INTERNAL_EndRenderPass( SDLGPU_Renderer *renderer ) { + /* If we got to EndRenderPass without actually making a new render pass, + * we're looking at a clear-only pass, so just forcibly start it so we + * can have the clear execute instead of silently discarding it. + * -flibit + */ + if (renderer->needNewRenderPass) + { + SDLGPU_INTERNAL_BeginRenderPass(renderer); + } + if (renderer->renderPass != NULL) { SDL_EndGPURenderPass( @@ -756,6 +770,7 @@ static void SDLGPU_INTERNAL_BeginRenderPass( { return; } + renderer->needNewRenderPass = 0; SDLGPU_INTERNAL_EndRenderPass(renderer); @@ -897,8 +912,6 @@ static void SDLGPU_INTERNAL_BeginRenderPass( &scissorRect ); - renderer->needNewRenderPass = 0; - renderer->shouldClearColorOnBeginPass = 0; renderer->shouldClearDepthOnBeginPass = 0; renderer->shouldClearStencilOnBeginPass = 0;