diff options
author | Paul Berry <[email protected]> | 2013-11-25 08:03:24 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-11-26 13:21:56 -0800 |
commit | 2714ca81b9bad3dec3894fac97f34502c80b1697 (patch) | |
tree | 96a4932b96d0c1792b26646bec6c01846946bda4 /src/mesa | |
parent | 73e9aa9e3f73d69ce4f0b68e74702d67842a230c (diff) |
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: [email protected]
Reviewed-by: Chris Forbes <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | 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 0a322dc3cd4..b39bd10bedf 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); |