On 2 February 2013 13:52, Kenneth Graunke <kenn...@whitecape.org> wrote:
> Ivybridge doesn't appear to have the same errata as Sandybridge; no > corruption was observed by setting it to more than the minimal correct > value. It's possible that we were simply lucky, since the URB entries > are 1024-bit on Ivybridge vs. 512-bit Sandybridge. Or perhaps the > underlying hardware issue is fixed. > > Either way, we may as well program the minimum value since it's now > readily available, likely to be more efficient, and possibly more > correct. > > NOTE: This is a candidate for all stable branches. > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/gen7_sf_state.c | 32 > +++++++++++++++---------------- > 1 file changed, 16 insertions(+), 16 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c > b/src/mesa/drivers/dri/i965/gen7_sf_state.c > index b801b96..f7ad473 100644 > --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c > @@ -34,7 +34,6 @@ upload_sbe_state(struct brw_context *brw) > { > struct intel_context *intel = &brw->intel; > struct gl_context *ctx = &intel->ctx; > - uint32_t urb_entry_read_length; > /* BRW_NEW_FRAGMENT_PROGRAM */ > uint32_t num_outputs = > _mesa_bitcount_64(brw->fragment_program->Base.InputsRead); > /* _NEW_LIGHT */ > @@ -48,22 +47,8 @@ upload_sbe_state(struct brw_context *brw) > bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); > uint32_t point_sprite_origin; > > - /* CACHE_NEW_VS_PROG */ > - urb_entry_read_length = ((brw->vs.prog_data->vue_map.num_slots + 1) / > 2 - > - urb_entry_read_offset); > - if (urb_entry_read_length == 0) { > - /* Setting the URB entry read length to 0 causes undefined > behavior, so > - * if we have no URB data to read, set it to 1. > - */ > - urb_entry_read_length = 1; > - } > - > /* FINISHME: Attribute Swizzle Control Mode? */ > - dw1 = > - GEN7_SBE_SWIZZLE_ENABLE | > - num_outputs << GEN7_SBE_NUM_OUTPUTS_SHIFT | > - urb_entry_read_length << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT | > - urb_entry_read_offset << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT; > + dw1 = GEN7_SBE_SWIZZLE_ENABLE | num_outputs << > GEN7_SBE_NUM_OUTPUTS_SHIFT; > > /* _NEW_POINT > * > @@ -123,6 +108,21 @@ upload_sbe_state(struct brw_context *brw) > &max_source_attr); > } > > + /* From the Ivy Bridge PRM, Volume 2, Part 1, documentation for > + * 3DSTATE_SBE DWord 1 bits 15:11, "Vertex URB Entry Read Length": > + * > + * "This field should be set to the minimum length required to read the > + * maximum source attribute. The maximum source attribute is > indicated > + * by the maximum value of the enabled Attribute # Source Attribute if > + * Attribute Swizzle Enable is set, Number of Output Attributes-1 if > + * enable is not set. > + * > + * read_length = ceiling((max_source_attr + 1) / 2)" > + */ > + uint32_t urb_entry_read_length = ALIGN(max_source_attr + 1, 2) / 2; > + dw1 |= urb_entry_read_length << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT | > + urb_entry_read_offset << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT; > + > s/GEN6_SF/GEN7_SBE/ above. (Fortunately these #defines are the same for GEN6 and GEN7 but it would be nice to use the right ones :)) With that fixed, this series is: Reviewed-by: Paul Berry <stereotype...@gmail.com> > for (; input_index < FRAG_ATTRIB_MAX; input_index++) > attr_overrides[input_index] = 0; > > -- > 1.8.1.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev