SDL: GPU: Special case to avoid assert on GenerateMipmaps (#12995) (9f1a1)

From 9f1a1405a6a8bbb34159e74c24a76cf84be16f03 Mon Sep 17 00:00:00 2001
From: Evan Hemsley <[EMAIL REDACTED]>
Date: Fri, 9 May 2025 21:45:54 -0700
Subject: [PATCH] GPU: Special case to avoid assert on GenerateMipmaps (#12995)

(cherry picked from commit 86b206dadf8ad40e6657fa37db371a0aeff74e9c)
---
 src/gpu/SDL_gpu.c    | 20 ++++++++++++++++++--
 src/gpu/SDL_sysgpu.h |  2 ++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/gpu/SDL_gpu.c b/src/gpu/SDL_gpu.c
index db3525b91fa67..34c99f5f9697e 100644
--- a/src/gpu/SDL_gpu.c
+++ b/src/gpu/SDL_gpu.c
@@ -1735,7 +1735,11 @@ void SDL_BindGPUVertexSamplers(
 
     if (RENDERPASS_DEVICE->debug_mode) {
         CHECK_RENDERPASS
-        CHECK_SAMPLER_TEXTURES
+
+        if (!((CommandBufferCommonHeader*)RENDERPASS_COMMAND_BUFFER)->ignore_render_pass_texture_validation)
+        {
+            CHECK_SAMPLER_TEXTURES
+        }
     }
 
     RENDERPASS_DEVICE->BindVertexSamplers(
@@ -1815,7 +1819,11 @@ void SDL_BindGPUFragmentSamplers(
 
     if (RENDERPASS_DEVICE->debug_mode) {
         CHECK_RENDERPASS
-        CHECK_SAMPLER_TEXTURES
+
+        if (!((CommandBufferCommonHeader*)RENDERPASS_COMMAND_BUFFER)->ignore_render_pass_texture_validation)
+        {
+            CHECK_SAMPLER_TEXTURES
+        }
     }
 
     RENDERPASS_DEVICE->BindFragmentSamplers(
@@ -2577,11 +2585,19 @@ void SDL_GenerateMipmapsForGPUTexture(
             SDL_assert_release(!"GenerateMipmaps texture must be created with SAMPLER and COLOR_TARGET usage flags!");
             return;
         }
+
+        CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer;
+        commandBufferHeader->ignore_render_pass_texture_validation = true;
     }
 
     COMMAND_BUFFER_DEVICE->GenerateMipmaps(
         command_buffer,
         texture);
+
+    if (COMMAND_BUFFER_DEVICE->debug_mode) {
+        CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer;
+        commandBufferHeader->ignore_render_pass_texture_validation = false;
+    }
 }
 
 void SDL_BlitGPUTexture(
diff --git a/src/gpu/SDL_sysgpu.h b/src/gpu/SDL_sysgpu.h
index 7425f6adc5dd0..3c2c7866009ab 100644
--- a/src/gpu/SDL_sysgpu.h
+++ b/src/gpu/SDL_sysgpu.h
@@ -66,6 +66,8 @@ typedef struct CommandBufferCommonHeader
     Pass copy_pass;
     bool swapchain_texture_acquired;
     bool submitted;
+    // used to avoid tripping assert on GenerateMipmaps
+    bool ignore_render_pass_texture_validation;
 } CommandBufferCommonHeader;
 
 typedef struct TextureCommonHeader