Mesa (7.10): i965: Apply a workaround for the Ironlake "vertex flashing".

Ian Romanick idr at kemper.freedesktop.org
Thu Mar 24 20:54:49 UTC 2011


Module: Mesa
Branch: 7.10
Commit: 1ae33556ddd530b886179ce9b87a1230ef51bdb6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ae33556ddd530b886179ce9b87a1230ef51bdb6

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Feb 21 23:46:52 2011 -0800

i965: Apply a workaround for the Ironlake "vertex flashing".

This is an awful hack and will hurt performance on Ironlake, but we're
at a loss as to what's going wrong otherwise.  This is the only common
variable we've found that avoids the problem on 4 applications
(CelShading, gnome-shell, Pill Popper, and my GLSL demo), while other
variables we've tried appear to only be confounding.  Neither the
specifications nor the hardware team have been able to provide any
enlightenment, despite much searching.

https://bugs.freedesktop.org/show_bug.cgi?id=29172
Tested by:	Chris Lord <chris at linux.intel.com> (Pill Popper)
Tested by:	Ryan Lortie <desrt at desrt.ca> (gnome-shell)
(cherry picked from commit 1a57717bbe8a2cedf2e1bb72cfd7ec85cd2350fc)

---

 src/mesa/drivers/dri/i965/brw_vs_state.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_state.c b/src/mesa/drivers/dri/i965/brw_vs_state.c
index be92313..c3a7cc2 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_state.c
@@ -96,7 +96,14 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)
     * and those dwords will be written to the second URB handle when we
     * brw_urb_WRITE() results.
     */
-   vs.thread1.single_program_flow = 0;
+   /* Disable single program flow on Ironlake.  We cannot reliably get
+    * all applications working without it.  See:
+    * https://bugs.freedesktop.org/show_bug.cgi?id=29172
+    *
+    * The most notable and reliably failing application is the Humus
+    * demo "CelShading"
+   */
+   vs.thread1.single_program_flow = (intel->gen == 5);
 
    if (intel->gen == 5)
       vs.thread1.binding_table_entry_count = 0; /* hardware requirement */




More information about the mesa-commit mailing list