i965: Don't set up VUE space for the disabled user clip distances on gen6.

This commit is contained in:
Eric Anholt
2010-07-19 15:54:15 -07:00
parent 37692e5dc9
commit bdcaaed6ff
2 changed files with 14 additions and 8 deletions

View File

@@ -218,7 +218,7 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
c->first_overflow_output = 0; c->first_overflow_output = 0;
if (intel->gen >= 6) if (intel->gen >= 6)
mrf = 6; mrf = 4;
else if (intel->gen == 5) else if (intel->gen == 5)
mrf = 8; mrf = 8;
else 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); 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) 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) else if (intel->gen == 5)
c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4; c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
else else
@@ -1364,16 +1367,19 @@ static void emit_vertex_write( struct brw_vs_compile *c)
*/ */
brw_set_access_mode(p, BRW_ALIGN_1); brw_set_access_mode(p, BRW_ALIGN_1);
/* The VUE layout is documented in Volume 2a. */
if (intel->gen >= 6) { 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 0-3 (m1) of the header is indices, point width, clip flags.
* dword 4-7 (m2) is the 4D space position * dword 4-7 (m2) is the 4D space position
* dword 8-15 (m3,m4) of the vertex header is the user clip distance. * dword 8-15 (m3,m4) of the vertex header is the user clip distance if
* m5 is the first vertex data we fill, which is the vertex position. * 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, 2), pos);
brw_MOV(p, offset(m0, 5), pos); brw_MOV(p, offset(m0, 3), pos);
len_vertex_header = 4; len_vertex_header = 2;
} else if (intel->gen == 5) { } else if (intel->gen == 5) {
/* There are 20 DWs (D0-D19) in VUE header on Ironlake: /* There are 20 DWs (D0-D19) in VUE header on Ironlake:
* dword 0-3 (m1) of the header is indices, point width, clip flags. * dword 0-3 (m1) of the header is indices, point width, clip flags.

View File

@@ -69,7 +69,7 @@ upload_sf_state(struct brw_context *brw)
dw1 = dw1 =
num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT | num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |
(num_inputs + 1) / 2 << GEN6_SF_URB_ENTRY_READ_LENGTH_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 | dw2 = GEN6_SF_VIEWPORT_TRANSFORM_ENABLE |
GEN6_SF_STATISTICS_ENABLE; GEN6_SF_STATISTICS_ENABLE;
dw3 = 0; dw3 = 0;