[Mesa-dev] [PATCH] isl: Add assertions for render target swizzle restrictions

Jason Ekstrand jason at jlekstrand.net
Thu Feb 2 20:28:02 UTC 2017


On Thu, Feb 2, 2017 at 11:09 AM, Nanley Chery <nanleychery at gmail.com> wrote:

> On Tue, Jan 31, 2017 at 06:51:12PM -0800, Jason Ekstrand wrote:
> > ---
> >  src/intel/isl/isl_surface_state.c | 32 ++++++++++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> >
> > diff --git a/src/intel/isl/isl_surface_state.c
> b/src/intel/isl/isl_surface_state.c
> > index b735478..c7b220b 100644
> > --- a/src/intel/isl/isl_surface_state.c
> > +++ b/src/intel/isl/isl_surface_state.c
> > @@ -453,6 +453,38 @@ isl_genX(surf_fill_state_s)(const struct
> isl_device *dev, void *state,
> >  #endif
> >
> >  #if (GEN_GEN >= 8 || GEN_IS_HASWELL)
> > +   if (info->view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) {
>
> It seems that haswell actually allows this, though I don't know if it's
> a feature we'd ever want to use.
>
> From the Haswell PRM, RENDER_SURFACE_STATE::Shader Channel Select R
>
>    If more than one shader channel select is set to the same
>    surface channel only the first shader channel in RGBA order will
>    be written.
>

Neat!  I didn't realize it was actually well-defined on haswell.  Probably
not something we're likely to use though, especially given that broadwell+
don't give such nice guarantees.


> -Nanley
>
> > +      /* From the Sky Lake PRM Vol. 2d,
> > +       * RENDER_SURFACE_STATE::Shader Channel Select Red
> > +       *
> > +       *    "For Render Target, Red, Green and Blue Shader Channel
> Selects
> > +       *    MUST be such that only valid components can be swapped i.e.
> only
> > +       *    change the order of components in the pixel. Any other
> values for
> > +       *    these Shader Channel Select fields are not valid for Render
> > +       *    Targets. This also means that there MUST not be multiple
> shader
> > +       *    channels mapped to the same RT channel."
> > +       */
> > +      assert(info->view->swizzle.r == ISL_CHANNEL_SELECT_RED ||
> > +             info->view->swizzle.r == ISL_CHANNEL_SELECT_GREEN ||
> > +             info->view->swizzle.r == ISL_CHANNEL_SELECT_BLUE);
> > +      assert(info->view->swizzle.g == ISL_CHANNEL_SELECT_RED ||
> > +             info->view->swizzle.g == ISL_CHANNEL_SELECT_GREEN ||
> > +             info->view->swizzle.g == ISL_CHANNEL_SELECT_BLUE);
> > +      assert(info->view->swizzle.b == ISL_CHANNEL_SELECT_RED ||
> > +             info->view->swizzle.b == ISL_CHANNEL_SELECT_GREEN ||
> > +             info->view->swizzle.b == ISL_CHANNEL_SELECT_BLUE);
> > +      assert(info->view->swizzle.r != info->view->swizzle.g);
> > +      assert(info->view->swizzle.r != info->view->swizzle.b);
> > +      assert(info->view->swizzle.g != info->view->swizzle.b);
> > +
> > +      /* From the Sky Lake PRM Vol. 2d,
> > +       * RENDER_SURFACE_STATE::Shader Channel Select Alpha
> > +       *
> > +       *    "For Render Target, this field MUST be programmed to
> > +       *    value = SCS_ALPHA."
> > +       */
> > +      assert(info->view->swizzle.a == ISL_CHANNEL_SELECT_ALPHA);
> > +   }
> >     s.ShaderChannelSelectRed = info->view->swizzle.r;
> >     s.ShaderChannelSelectGreen = info->view->swizzle.g;
> >     s.ShaderChannelSelectBlue = info->view->swizzle.b;
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170202/e7c329dd/attachment-0001.html>


More information about the mesa-dev mailing list