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

Mathias.Froehlich at gmx.net Mathias.Froehlich at gmx.net
Mon May 27 08:17:00 UTC 2019


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

Hi Emil,

thanks for that hint to look at _mesa_get_incomplete_framebuffer.
That one seems definitely more appropriate!

Though, I miss a bit the idea how I can create either a sensible
helper function for that task or how I can create something above
in the call stack to the MakeCurrent call that already catches
this case. Since that incomplete framebuffer is a mesa side thing I
cannot easily pull that above the __DriverAPIRec::MakeCurrent call.
But really putting those hand full lines of code into a helper does
as well not gain much. So I implemented that for the swrast case
directly.

So, to mention, I sent that change including our egl device code
with some unrelated egl device fixes through intels CI and did not
get regressions.

please review

thanks and best
Mathias





This fixes the egl_mesa_platform_surfaceless piglit test as well
as the new device egl extensions piglit test on classic swrast.

v2: Fix swrast surfaceless contexts on the driver side.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
---
 src/mesa/drivers/dri/swrast/swrast.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 36cf11334cb..4899fb2df95 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -36,6 +36,7 @@
 #include "main/api_exec.h"
 #include "main/context.h"
 #include "main/extensions.h"
+#include "main/fbobject.h"
 #include "main/formats.h"
 #include "main/framebuffer.h"
 #include "main/imports.h"
@@ -686,7 +687,7 @@ swrast_check_and_update_window_size( struct gl_context *ctx, struct gl_framebuff
 {
     GLsizei width, height;

-    if (!fb)
+    if (!fb || fb == _mesa_get_incomplete_framebuffer())
         return;

     get_window_size(fb, &width, &height);
@@ -884,6 +885,12 @@ dri_make_current(__DRIcontext * cPriv,
            mesaDraw = &draw->Base;
            mesaRead = &read->Base;
         }
+        else {
+           struct gl_framebuffer *incomplete
+              = _mesa_get_incomplete_framebuffer();
+           mesaDraw = incomplete;
+           mesaRead = incomplete;
+        }

         /* check for same context and buffer */
         if (mesaCtx == _mesa_get_current_context()
--
2.21.0



More information about the mesa-dev mailing list