diff options
| author | Eric Anholt <eric@anholt.net> | 2010-07-19 15:54:15 -0700 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2010-07-19 19:29:03 -0700 | 
| commit | bdcaaed6ff3238ea4317aff2f7a6947e4a72de9c (patch) | |
| tree | dd4c7f109f82e03ae32306ef7ce807a4dd3dd89f /src/mesa/drivers/dri | |
| parent | 37692e5dc9bbcf4f48b4401255d47f724a602978 (diff) | |
i965: Don't set up VUE space for the disabled user clip distances on gen6.
Diffstat (limited to 'src/mesa/drivers/dri')
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_vs_emit.c | 20 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i965/gen6_sf_state.c | 2 | 
2 files changed, 14 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c index 3b87fdcfc4..6f95918754 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_emit.c +++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c @@ -218,7 +218,7 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )     c->first_overflow_output = 0;     if (intel->gen >= 6) -      mrf = 6; +      mrf = 4;     else if (intel->gen == 5)        mrf = 8;     else @@ -318,8 +318,11 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )      */     attributes_in_vue = MAX2(c->nr_outputs, c->nr_inputs); +   /* See emit_vertex_write() for where the VUE's overhead on top of the +    * attributes comes from. +    */     if (intel->gen >= 6) -      c->prog_data.urb_entry_size = (attributes_in_vue + 4 + 7) / 8; +      c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 7) / 8;     else if (intel->gen == 5)        c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;     else @@ -1364,16 +1367,19 @@ static void emit_vertex_write( struct brw_vs_compile *c)      */     brw_set_access_mode(p, BRW_ALIGN_1); +   /* The VUE layout is documented in Volume 2a. */     if (intel->gen >= 6) { -      /* There are 16 DWs (D0-D15) in VUE header on Sandybridge: +      /* There are 8 or 16 DWs (D0-D15) in VUE header on Sandybridge:         * dword 0-3 (m1) of the header is indices, point width, clip flags.         * dword 4-7 (m2) is the 4D space position -       * dword 8-15 (m3,m4) of the vertex header is the user clip distance. -       * m5 is the first vertex data we fill, which is the vertex position. +       * dword 8-15 (m3,m4) of the vertex header is the user clip distance if +       * enabled.  We don't use it, so skip it. +       * m3 is the first vertex element data we fill, which is the vertex +       * position.         */        brw_MOV(p, offset(m0, 2), pos); -      brw_MOV(p, offset(m0, 5), pos); -      len_vertex_header = 4; +      brw_MOV(p, offset(m0, 3), pos); +      len_vertex_header = 2;     } else if (intel->gen == 5) {        /* There are 20 DWs (D0-D19) in VUE header on Ironlake:         * dword 0-3 (m1) of the header is indices, point width, clip flags. diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c index 51940efb44..6820ca3abf 100644 --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c @@ -69,7 +69,7 @@ upload_sf_state(struct brw_context *brw)     dw1 =        num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |        (num_inputs + 1) / 2 << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT | -      3 << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT; +      1 << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT;     dw2 = GEN6_SF_VIEWPORT_TRANSFORM_ENABLE |        GEN6_SF_STATISTICS_ENABLE;     dw3 = 0;  | 
