On Mon, 25 Jul 2011 17:07:09 -0700, Kenneth Graunke <kenn...@whitecape.org> wrote: > According to the documentation for 3DSTATE_DEPTH_BUFFER (G45 and > beyond), the 3 LSBs of "Depth Coordinate Offset X" (and Y) must be 0. > > Detect this and apply the Gen4 miptree hack for working around > unsupported offsets. > > Fixes piglit test fbo-clear-formats for GL_ARB_depth_texture and > GL_EXT_packed_depth_stencil on Ivybridge. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/intel/intel_fbo.c | 11 +++++++++-- > 1 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c > b/src/mesa/drivers/dri/intel/intel_fbo.c > index f00943e..7ea81e0 100644 > --- a/src/mesa/drivers/dri/intel/intel_fbo.c > +++ b/src/mesa/drivers/dri/intel/intel_fbo.c > @@ -649,7 +649,8 @@ intel_renderbuffer_tile_offsets(struct intel_renderbuffer > *irb, > #ifndef I915 > static bool > need_tile_offset_workaround(struct brw_context *brw, > - struct intel_renderbuffer *irb) > + struct intel_renderbuffer *irb, > + bool is_depthbuffer) > { > uint32_t tile_x, tile_y; > > @@ -658,6 +659,12 @@ need_tile_offset_workaround(struct brw_context *brw, > if (!brw->has_surface_tile_offset) > return tile_x != 0 || tile_y != 0; > > + /* In 3DSTATE_DEPTH_BUFFER, the 3 LSBs of Depth Coordinate Offset X/Y > + * must be zero. We need the workaround in those cases. > + */ > + if (is_depthbuffer) > + return (tile_x & 0x3) != 0 || (tile_y & 0x3) != 0; > +
& 0x3 would be just checking 2 lsbs, right? (which suggests that our analysis of this being the root cause of the failure is wrong, since the 3rd lsb being set for the 2x2 mipmap didn't fail)
pgppUULHOumeV.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev