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 authored Oct 5, 2024
1 parent 68c16ff commit b230776
Showing 1 changed file with 32 additions and 18 deletions.
50 changes: 32 additions & 18 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
{
renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTextureCube;
renderer->fragmentTextureSamplerBindings[index].texture = renderer->dummyTexture2D;
}

return;
Expand Down

0 comments on commit b230776

Please sign in to comment.