[Mesa-dev] [PATCH 2/2] i915: fallback for NPOT cubemap texture

Yuanhan Liu yuanhan.liu at linux.intel.com
Thu Mar 1 21:52:00 PST 2012


On Thu, Mar 01, 2012 at 04:04:59PM +0800, Yuanhan Liu wrote:
> On Wed, Feb 29, 2012 at 11:44:59AM -0800, Eric Anholt wrote:
> > On Wed, 29 Feb 2012 15:11:06 +0800, Yuanhan Liu <yuanhan.liu at linux.intel.com> wrote:
> > > According to 3DSTATE_MAP_STATE at page of 104 in Bspec
> > > vol3d 3D Instructions:
> > >   [DevGDG and DevAlv]: Must be a power of 2 for cube maps
> > > 
> > > Well, it turned out to be that we need do this for other
> > > platforms as well, like pineview.
> > > 
> > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=46666
> > > 
> > > NOTE: This is a candidate for stable release branches.
> > > 
> > > Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com>
> > > ---
> > >  src/mesa/drivers/dri/i915/i915_texstate.c |   12 ++++++++++++
> > >  1 files changed, 12 insertions(+), 0 deletions(-)
> > > 
> > > diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c
> > > index 0e500e2..e3ab50e 100644
> > > --- a/src/mesa/drivers/dri/i915/i915_texstate.c
> > > +++ b/src/mesa/drivers/dri/i915/i915_texstate.c
> > > @@ -319,6 +319,18 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
> > >             ((wt != GL_CLAMP) && (wt != GL_CLAMP_TO_EDGE))))
> > >            return false;
> > >  
> > > +      /*
> > > +       * According to 3DSTATE_MAP_STATE at page of 104 in Bspec
> > > +       * Vol3d 3D Instructions:
> > > +       *   [DevGDG and DevAlv]: Must be a power of 2 for cube maps.
> > > +       *
> > > +       * Well, it turned out to be that we need do this for other
> > > +       * platforms as well, like pineview.
> > > +       */
> > > +      if (tObj->Target == GL_TEXTURE_CUBE_MAP_ARB &&
> > > +          !is_power_of_two(firstImage->Height))
> > > +         return false;
> > > +
> > 
> > Pineview should be DevBLB derived, which doens't have so that
> > requirement,
> 
> Yeah, it's true according to Bspec:
>     [DevLPT, DevCST and DevBLB]: If not a power of 2, cube maps must have
>     all faces enabled.
> 
> Well, we have all faces enabled in our code and it still failed. And
> it's ok when the height is power of 2. That's why I think we need do
> fallback for other platforms as well.
> 
> 
> > so this doesn't really make sense to me.  Have you looked
> > at the rendering to see what's going on?
> 
> Not much, and I'm tring now.

Seems that the cube map texture layout is wrong. Making the width and
height align of 4(although this doesn't make much sense) will fix this
issue and also broke some others. Well, Bspec mentioned nothing about
the layout alignment and layout for NPOT cube map.  I guess the Bspec
assume it's a POT cube map.  Thus I don't know the _working_ texture
layout of NPOT cube map texture layout.

Thoughts?

My thought is if we can't figure out the texture layout for NPOT cube
map, I would like to do fallback as a workaround. Eric, does that make
sense to you?

Thanks,
Yuanhan Liu


More information about the mesa-dev mailing list