[Mesa-dev] [PATCH 2/2] nir: add lowering for gl_HelperInvocation
Jason Ekstrand
jason at jlekstrand.net
Mon Jun 11 23:04:00 UTC 2018
On Mon, Jun 11, 2018 at 3:59 PM, Roland Scheidegger <sroland at vmware.com>
wrote:
> Am 12.06.2018 um 00:32 schrieb Jason Ekstrand:
> > On Wed, Jun 6, 2018 at 7:43 AM, Rob Clark <robdclark at gmail.com
> > <mailto:robdclark at gmail.com>> wrote:
> >
> > Signed-off-by: Rob Clark <robdclark at gmail.com
> > <mailto:robdclark at gmail.com>>
> > ---
> > I can't say for sure that this will work on all drivers, but it is
> > what the blob driver does, and it seems to make deqp happy. I could
> > move this to it's own pass inside ir3, but that seemed like overkill
> >
> > src/compiler/nir/nir.h | 10 ++++++++++
> > src/compiler/nir/nir_lower_system_values.c | 17 +++++++++++++++++
> > src/gallium/drivers/freedreno/ir3/ir3_nir.c | 1 +
> > 3 files changed, 28 insertions(+)
> >
> > diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
> > index 073ab4e82ea..de3d55d83af 100644
> > --- a/src/compiler/nir/nir.h
> > +++ b/src/compiler/nir/nir.h
> > @@ -1963,6 +1963,16 @@ typedef struct nir_shader_compiler_options {
> > */
> > bool lower_base_vertex;
> >
> > + /**
> > + * If enabled, gl_HelperInvocation will be lowered as:
> > + *
> > + * !((1 << gl_SampleID) & gl_SampleMaskIN[0]))
> >
> >
> > This only works for multi-sampling. What about the single-sampled case?
> It doesn't make sense to me for msaa neither.
> gl_SampleID forces per-sample execution, which clearly isn't what you
> want.
Yes, we do not want gl_HelperInvocation to force per-sample shading. It
doesn't mean we can't lower to it, it just means that the back-end needs to
be very careful that it decides whether or not to execute per-sample before
it does this lowering.
> Plus, gl_SampleMaskIN is specified to only contain bits for the
> current shader invocation, so for msaa with forced per-sample execution
> that would only contain the single bit corresponding to gl_SampleID
> anyway (that is my interpretation at least - I know hw sample mask
> inputs will probably always contains all the bits from rasterization,
> regardless of gl_SampleID), so the "1 << gl_SampleID &" part will do
> nothing at all.
I think it also relies on gl_SampleMaskIN to give 0 for helper
invocations. This is likely true but I don't know how well-defined all
this is in the world of helper invocations.
> So I think that part is more about lowering the hw
> rasterization sample mask to gl_SampleMaskIN rather than lowering to
> gl_HelperInvocation.
> But yes, !gl_SampleMaskIN should give gl_HelperInvocation - I think all
> hw can give you raster sample mask even without msaa but I'm not
> entirely sure if it's guaranteed to work in GL with single sampling
> (similar for sample id, which should just be stuck at 0).
>
The GL spec doesn't seem to say. It does say that gl_SampleID is
guaranteed to be 0 for single-sampled but it says nothing about
gl_SampleMaskIN.
--Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180611/52ad8bf7/attachment-0001.html>
More information about the mesa-dev
mailing list