From 2bea8ddf495fca4708a9a6c0e7c42c1be79d07d3 Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sat, 5 Oct 2024 16:09:55 -0700 Subject: [PATCH] Fix verifysamplers crash in SetRenderTargets when no shader is bound --- src/FNA3D_Driver_SDL.c | 52 +++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/FNA3D_Driver_SDL.c b/src/FNA3D_Driver_SDL.c index d7588787..c6da7a71 100644 --- a/src/FNA3D_Driver_SDL.c +++ b/src/FNA3D_Driver_SDL.c @@ -1725,19 +1725,26 @@ static void SDLGPU_VerifyVertexSampler( { renderer->vertexTextureSamplerBindings[index].sampler = renderer->dummySampler; - samplerType = MOJOSHADER_sdlGetShaderParseData(vertShader)->samplers[index].type; - - if (samplerType == MOJOSHADER_SAMPLER_2D) - { - renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTexture2D; - } - else if (samplerType == MOJOSHADER_SAMPLER_VOLUME) + if (vertShader) { - renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTexture3D; - } + samplerType = MOJOSHADER_sdlGetShaderParseData(vertShader)->samplers[index].type; + + if (samplerType == MOJOSHADER_SAMPLER_2D) + { + renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTexture2D; + } + else if (samplerType == MOJOSHADER_SAMPLER_VOLUME) + { + renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTexture3D; + } + else + { + renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTextureCube; + } + } else { - renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTextureCube; + renderer->vertexTextureSamplerBindings[index].texture = renderer->dummyTexture2D; } return; @@ -1780,18 +1787,25 @@ static void SDLGPU_VerifySampler( { renderer->fragmentTextureSamplerBindings[index].sampler = renderer->dummySampler; - samplerType = MOJOSHADER_sdlGetShaderParseData(fragShader)->samplers[index].type; - if (samplerType == MOJOSHADER_SAMPLER_2D) - { - renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture2D; - } - else if (samplerType == MOJOSHADER_SAMPLER_VOLUME) + if (fragShader) { - renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture3D; + samplerType = MOJOSHADER_sdlGetShaderParseData(fragShader)->samplers[index].type; + if (samplerType == MOJOSHADER_SAMPLER_2D) + { + renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture2D; + } + else if (samplerType == MOJOSHADER_SAMPLER_VOLUME) + { + renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture3D; + } + else + { + renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTextureCube; + } } - else + else { - renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTextureCube; + renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture2D; } return;