Mesa (master): i965: Call intel_prepare_render() from intel_update_state()

Kenneth Graunke kwg at kemper.freedesktop.org
Mon Jun 12 08:10:49 UTC 2017


Module: Mesa
Branch: master
Commit: b7153c3e9f9d2d430b0338313587a00e531e4800
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7153c3e9f9d2d430b0338313587a00e531e4800

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Fri Jun  9 12:57:09 2017 -0700

i965: Call intel_prepare_render() from intel_update_state()

The resolve code looks at the current color draw buffers.  These are not
valid until intel_prepare_render() is called.  You can end up with one
color buffer bound, but where the renderbuffer has zero width/height and
no miptree allocated.

You can get a call chain like: _mesa_Clear -> _mesa_update_state ->
intel_update_state, where no brw driver hooks were called, so there is
no other point at which we could have called this.

Fixes crashes in KWin where Clear was causing intel_disable_rb_aux_buffer
to crash on irb != NULL but irb->mt == NULL.

According to Tapani, this also fixes crashes seen on Android.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Tested-by: Tapani Pälli <tapani.palli at intel.com>

---

 src/mesa/drivers/dri/i965/brw_context.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 6d27866fce..5433f9080e 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -201,6 +201,8 @@ intel_update_state(struct gl_context * ctx)
 
    _mesa_unlock_context_textures(ctx);
 
+   intel_prepare_render(brw);
+
    /* Resolve the depth buffer's HiZ buffer. */
    depth_irb = intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_DEPTH);
    if (depth_irb && depth_irb->mt) {




More information about the mesa-commit mailing list