From 86b206dadf8ad40e6657fa37db371a0aeff74e9c 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)
---
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 41ca388553375..54a66e6b0d549 100644
--- a/src/gpu/SDL_gpu.c
+++ b/src/gpu/SDL_gpu.c
@@ -1756,7 +1756,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(
@@ -1836,7 +1840,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(
@@ -2605,11 +2613,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 ebc195c29becc..ab69d64210091 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