Skip to content

Commit

Permalink
Fix verifysamplers crash in SetRenderTargets when no shader is bound
Browse files Browse the repository at this point in the history
  • Loading branch information
kg committed Oct 5, 2024
1 parent 68c16ff commit 2bea8dd
Showing 1 changed file with 33 additions and 19 deletions.
52 changes: 33 additions & 19 deletions src/FNA3D_Driver_SDL.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 2bea8dd

Please sign in to comment.