[Mesa-dev] [PATCH 1/9] i915: Only use TEXCOORDTYPE_VECTOR with cube maps on gen2

Ian Romanick idr at freedesktop.org
Thu Nov 20 09:59:00 PST 2014


On 08/06/2014 11:56 AM, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Check that the target is GL_TEXTURE_CUBE_MAP before emitting
> TEXCOORDTYPE_VECTOR texture coordinates.
> 
> I'm not sure if the hardware would like CARTESIAN coordinates
> with cube maps, and as I'm too lazy to find out just emit the
> VECTOR coordinates for cube maps always. For other targets use
> CARTESIAN or HOMOGENOUS depending on the number of texture
> coordinates provided.
> 
> Fixes rendering of the "electric" background texture in chromium-bsu
> main menu. We appear to be provided with three texture coordinates
> there (I'm guessing due to the funky texture matrix rotation it does).
> So the code would decide to use TEXCOORDTYPE_VECTOR instead of
> TEXCOORDTYPE_CARTESIAN even though we're dealing with a 2D texure.
> The results weren't what one might expect.
> 
> demos/cubemap still works, which hopefully indicates that this doesn't
> break things.

I won't dare ask about a full piglit run on that hardware, but how about

    bin/glean -o -v -v -v -t +texCube --quick

and

    bin/cubemap -auto

from piglit?

These changes seem reasonable, and assuming those tests aren't made worse,

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

If you're excited about GEN2 bugs, wanna take a look at 79841? >:)

> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  src/mesa/drivers/dri/i915/i830_vtbl.c | 37 ++++++++++++++++++-----------------
>  1 file changed, 19 insertions(+), 18 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i915/i830_vtbl.c b/src/mesa/drivers/dri/i915/i830_vtbl.c
> index 53d408b..0f22d86 100644
> --- a/src/mesa/drivers/dri/i915/i830_vtbl.c
> +++ b/src/mesa/drivers/dri/i915/i830_vtbl.c
> @@ -134,27 +134,28 @@ i830_render_start(struct intel_context *intel)
>              GLuint mcs = (i830->state.Tex[i][I830_TEXREG_MCS] &
>                            ~TEXCOORDTYPE_MASK);
>  
> -            switch (sz) {
> -            case 1:
> -            case 2:
> -               emit = EMIT_2F;
> -               sz = 2;
> -               mcs |= TEXCOORDTYPE_CARTESIAN;
> -               break;
> -            case 3:
> +            if (intel->ctx.Texture.Unit[i]._Current->Target == GL_TEXTURE_CUBE_MAP) {
>                 emit = EMIT_3F;
>                 sz = 3;
>                 mcs |= TEXCOORDTYPE_VECTOR;
> -               break;
> -            case 4:
> -               emit = EMIT_3F_XYW;
> -               sz = 3;
> -               mcs |= TEXCOORDTYPE_HOMOGENEOUS;
> -               break;
> -            default:
> -               continue;
> -            };
> -
> +            } else {
> +               switch (sz) {
> +               case 1:
> +               case 2:
> +               case 3:
> +                  emit = EMIT_2F;
> +                  sz = 2;
> +                  mcs |= TEXCOORDTYPE_CARTESIAN;
> +                  break;
> +               case 4:
> +                  emit = EMIT_3F_XYW;
> +                  sz = 3;
> +                  mcs |= TEXCOORDTYPE_HOMOGENEOUS;
> +                  break;
> +               default:
> +                  continue;
> +               }
> +            }
>  
>              EMIT_ATTR(_TNL_ATTRIB_TEX0 + i, emit, 0);
>              v2 |= VRTX_TEX_SET_FMT(count, SZ_TO_HW(sz));
> 



More information about the mesa-dev mailing list