[Mesa-dev] [PATCH] gallium/aux: add is_unorm() helper

Ilia Mirkin imirkin at alum.mit.edu
Tue Dec 11 23:03:59 UTC 2018


I was talking about Z24X8, which Roland confirmed would return true
here. I guess that's fine, but worth pointing out perhaps.
On Tue, Dec 11, 2018 at 5:48 PM Rob Clark <robdclark at gmail.com> wrote:
>
> The z24s8 permutations are is_mixed, the x24s8 permutations are not
> and will show up as is_unorm() (would have been an issue for
> is_snorm() too except they are unsigned)
>
> The 10_10_10_2 formats are not mixed.
>
> In either case, I'm not sure is_norm() returning true is *incorrect*..
>
> BR,
> -R
>
> On Tue, Dec 11, 2018 at 4:21 PM Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> >
> > So ... Z24 will end up with is_unorm() == true? [Just guessing --
> > assume it doesn't hae is_mixed == true.] Also, does RGB10A2 have mixed
> > set? If so, then it won't report unorm. Not 100% sure if is_mixed is
> > only for norm + int mixing.
> > On Tue, Dec 11, 2018 at 4:05 PM Rob Clark <robdclark at gmail.com> wrote:
> > >
> > > We already had one for is_snorm() but not unorm.
> > >
> > > Signed-off-by: Rob Clark <robdclark at gmail.com>
> > > ---
> > >  src/gallium/auxiliary/util/u_format.c | 21 +++++++++++++++++++++
> > >  src/gallium/auxiliary/util/u_format.h |  3 +++
> > >  2 files changed, 24 insertions(+)
> > >
> > > diff --git a/src/gallium/auxiliary/util/u_format.c b/src/gallium/auxiliary/util/u_format.c
> > > index e43a619313e..231e89017b4 100644
> > > --- a/src/gallium/auxiliary/util/u_format.c
> > > +++ b/src/gallium/auxiliary/util/u_format.c
> > > @@ -169,6 +169,27 @@ util_format_is_snorm(enum pipe_format format)
> > >            desc->channel[i].normalized;
> > >  }
> > >
> > > +/**
> > > + * Returns true if all non-void channels are normalized unsigned.
> > > + */
> > > +boolean
> > > +util_format_is_unorm(enum pipe_format format)
> > > +{
> > > +   const struct util_format_description *desc = util_format_description(format);
> > > +   int i;
> > > +
> > > +   if (desc->is_mixed)
> > > +      return FALSE;
> > > +
> > > +   i = util_format_get_first_non_void_channel(format);
> > > +   if (i == -1)
> > > +      return FALSE;
> > > +
> > > +   return desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED &&
> > > +          !desc->channel[i].pure_integer &&
> > > +          desc->channel[i].normalized;
> > > +}
> > > +
> > >  boolean
> > >  util_format_is_snorm8(enum pipe_format format)
> > >  {
> > > diff --git a/src/gallium/auxiliary/util/u_format.h b/src/gallium/auxiliary/util/u_format.h
> > > index 5bcfc1f1154..8dcc438a4a1 100644
> > > --- a/src/gallium/auxiliary/util/u_format.h
> > > +++ b/src/gallium/auxiliary/util/u_format.h
> > > @@ -726,6 +726,9 @@ util_format_is_pure_uint(enum pipe_format format);
> > >  boolean
> > >  util_format_is_snorm(enum pipe_format format);
> > >
> > > +boolean
> > > +util_format_is_unorm(enum pipe_format format);
> > > +
> > >  boolean
> > >  util_format_is_snorm8(enum pipe_format format);
> > >
> > > --
> > > 2.19.2
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list