mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
i965: Avoid NULL drawbuffer in brw_flush_front
Commit17e62a3c23made _mesa_make_current begin calling ctx->Driver.Flush() in more cases, including when called during context destruction, after _mesa_free_context_data has set ctx->DrawBuffer to NULL. i965's flush hook wasn't prepared for this, and assumed that ctx->DrawBuffer was non-NULL. This led to a crash with the following backtrace: #0 0x00007ffff5bf97b5 in _mesa_is_winsys_fbo (fb=0x0) at ../../src/mesa/main/fbobject.h:52 #1 0x00007ffff5bfa359 in brw_flush_front (ctx=0x5555555a4110) at ../../src/mesa/drivers/dri/i965/brw_context.c:242 #2 0x00007ffff5bfa587 in brw_glFlush (ctx=0x5555555a4110, gallium_flush_flags=0) at ../../src/mesa/drivers/dri/i965/brw_context.c:301 #3 0x00007ffff5d46b2b in _mesa_make_current (newCtx=0x0, drawBuffer=0x0, readBuffer=0x0) at ../../src/mesa/main/context.c:1616 #4 0x00007ffff5d46484 in _mesa_free_context_data (ctx=0x5555555a4110, destroy_debug_output=true) at ../../src/mesa/main/context.c:1309 #5 0x00007ffff5bfcb59 in brw_destroy_context (driContextPriv=0x555555590260) at ../../src/mesa/drivers/dri/i965/brw_context.c:1301 There is really no point in worrying about front buffer flushing during the context's destruction when we've already discarded the drawbuffer, so just add a NULL check in brw_flush_front and skip that work. Fixes:17e62a3c23("mesa: (correctly) flush more in _mesa_make_current") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5957 Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14828>
This commit is contained in:
parent
fe18c96c86
commit
6bc710d769
1 changed files with 2 additions and 1 deletions
|
|
@ -239,7 +239,8 @@ brw_flush_front(struct gl_context *ctx)
|
|||
__DRIdrawable *driDrawable = driContext->driDrawablePriv;
|
||||
__DRIscreen *const dri_screen = brw->screen->driScrnPriv;
|
||||
|
||||
if (brw->front_buffer_dirty && _mesa_is_winsys_fbo(ctx->DrawBuffer)) {
|
||||
if (brw->front_buffer_dirty && ctx->DrawBuffer &&
|
||||
_mesa_is_winsys_fbo(ctx->DrawBuffer)) {
|
||||
if (flushFront(dri_screen) && driDrawable &&
|
||||
driDrawable->loaderPrivate) {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue