i965/gs: Properly skip GS binding table upload when no GS active.
authorPaul Berry <stereotype441@gmail.com>
Mon, 25 Nov 2013 16:03:24 +0000 (08:03 -0800)
committerPaul Berry <stereotype441@gmail.com>
Tue, 26 Nov 2013 21:21:56 +0000 (13:21 -0800)
commit2714ca81b9bad3dec3894fac97f34502c80b1697
tree96a4932b96d0c1792b26646bec6c01846946bda4
parent73e9aa9e3f73d69ce4f0b68e74702d67842a230c
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@lists.freedesktop.org
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_binding_tables.c