Mesa (master): i965/gs: Properly skip GS binding table upload when no GS active.

Paul Berry stereotype441 at kemper.freedesktop.org
Tue Nov 26 21:47:11 UTC 2013


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

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Mon Nov 25 08:03:24 2013 -0800

i965/gs: Properly skip GS binding table upload when no GS active.

Previously, in brw_gs_upload_binding_table(), we checked whether
brw->gs.prog_data was NULL in order to determine whether a geometry
shader was active.  This didn't work: brw->gs.prog_data starts off as
NULL, but it is set to non-NULL when a geometry shader program is
built, and then never set to NULL again.  As a result, if we called
brw_gs_upload_binding_table() while there was no geometry shader
active, but a geometry shader had previously been active, it would
refer to a stale (and possibly freed) prog_data structure.

This patch fixes the problem by modifying
brw_gs_upload_binding_table() to use the proper technique to determine
whether a geometry shader is active: by checking whether
brw->geometry_program is NULL.

This fixes the crash reported in comment 2 of bug 71870 (the incorrect
rendering remains, however).

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71870

Cc: mesa-stable at lists.freedesktop.org

Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_binding_tables.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_binding_tables.c b/src/mesa/drivers/dri/i965/brw_binding_tables.c
index 0a322dc..b39bd10 100644
--- a/src/mesa/drivers/dri/i965/brw_binding_tables.c
+++ b/src/mesa/drivers/dri/i965/brw_binding_tables.c
@@ -128,7 +128,7 @@ static void
 brw_gs_upload_binding_table(struct brw_context *brw)
 {
    /* If there's no GS, skip changing anything. */
-   if (!brw->gs.prog_data)
+   if (brw->geometry_program == NULL)
       return;
 
    brw_upload_binding_table(brw, BRW_NEW_GS_BINDING_TABLE, &brw->gs.base);




More information about the mesa-commit mailing list