[Mesa-dev] [PATCH] mesa: Prevent classic swrast crash on a surfaceless context.

Mathias.Froehlich at gmx.net Mathias.Froehlich at gmx.net
Wed May 15 07:26:16 UTC 2019


From: Mathias Fröhlich <mathias.froehlich at web.de>

Hi all,

One small fix below.

Please review!

best

Mathias





Running swrast with the new device egl extensions piglit test
brings up this failure. Fix that by adding some NULL pointer
checks.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
---
 src/mesa/main/fbobject.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 09143d30af5..225a7e8e9bd 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1850,10 +1850,10 @@ _mesa_DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
              *     non-bound framebuffers is the responsibility of the
              *     application.
              */
-            if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
+            if (ctx->DrawBuffer && _mesa_is_user_fbo(ctx->DrawBuffer)) {
                _mesa_detach_renderbuffer(ctx, ctx->DrawBuffer, rb);
             }
-            if (_mesa_is_user_fbo(ctx->ReadBuffer)
+            if (ctx->ReadBuffer && _mesa_is_user_fbo(ctx->ReadBuffer)
                 && ctx->ReadBuffer != ctx->DrawBuffer) {
                _mesa_detach_renderbuffer(ctx, ctx->ReadBuffer, rb);
             }
@@ -2881,7 +2881,6 @@ _mesa_bind_framebuffers(struct gl_context *ctx,
    const bool bindDrawBuf = oldDrawFb != newDrawFb;
    const bool bindReadBuf = oldReadFb != newReadFb;

-   assert(newDrawFb);
    assert(newDrawFb != &DummyFramebuffer);

    /*
@@ -2900,7 +2899,8 @@ _mesa_bind_framebuffers(struct gl_context *ctx,
       FLUSH_VERTICES(ctx, _NEW_BUFFERS);

       /* check if old readbuffer was render-to-texture */
-      check_end_texture_render(ctx, oldReadFb);
+      if (oldDrawFb)
+         check_end_texture_render(ctx, oldReadFb);

       _mesa_reference_framebuffer(&ctx->ReadBuffer, newReadFb);
    }
@@ -2914,7 +2914,8 @@ _mesa_bind_framebuffers(struct gl_context *ctx,
          check_end_texture_render(ctx, oldDrawFb);

       /* check if newly bound framebuffer has any texture attachments */
-      check_begin_texture_render(ctx, newDrawFb);
+      if (newDrawFb)
+         check_begin_texture_render(ctx, newDrawFb);

       _mesa_reference_framebuffer(&ctx->DrawBuffer, newDrawFb);
    }
--
2.21.0



More information about the mesa-dev mailing list