On Mon, Jun 25, 2018 at 2:38 PM, Rob Clark <robdcl...@gmail.com> wrote: > On Mon, Jun 25, 2018 at 2:29 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: >> On Mon, Jun 25, 2018 at 2:23 PM, Ian Romanick <i...@freedesktop.org> wrote: >>> On 06/19/2018 08:24 AM, Rob Clark wrote: >>>> v2: reword comment about lower_helper_invocations to be more clear >>>> that it might not work on all hardware >>>> v3: add special variant of load_sample_id which does not imply per- >>>> sample shading >>>> >>>> Signed-off-by: Rob Clark <robdcl...@gmail.com> >>>> --- >>>> Yeah, new intrinsic name is a bit funny sounding, but I couldn't >>>> think of anything better. >>>> >>>> src/compiler/nir/nir.h | 12 ++++++++++++ >>>> src/compiler/nir/nir_intrinsics.py | 3 +++ >>>> src/compiler/nir/nir_lower_system_values.c | 17 +++++++++++++++++ >>>> .../drivers/freedreno/ir3/ir3_compiler_nir.c | 1 + >>>> src/gallium/drivers/freedreno/ir3/ir3_nir.c | 1 + >>>> 5 files changed, 34 insertions(+) >>>> >>>> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h >>>> index 2d620454796..cb9a4af64cf 100644 >>>> --- a/src/compiler/nir/nir.h >>>> +++ b/src/compiler/nir/nir.h >>>> @@ -1981,6 +1981,18 @@ typedef struct nir_shader_compiler_options { >>>> */ >>>> bool lower_base_vertex; >>>> >>>> + /** >>>> + * If enabled, gl_HelperInvocation will be lowered as: >>>> + * >>>> + * !((1 << sample_id) & sample_mask_in)) >>> >>> I recently encountered something related to this. Issue #22 of the >>> GL_ARB_shader_image_load_store spec suggests using (gl_SampleMaskIn[0] >>> == 0) to detect a helper invocation. There's a note that >>> implementations that support > 32 samples will also need to check >>> gl_SampleMaskIn[1]. > > note that for adreno I just have up to 4x samples.. in fact, do any > mesa drivers support > 32 samples? > >> Did you try that? It should generate less code. >>> >>> See also piglit commit c89439fcaba7259b25d090df43a6bf2aac6483d7. >> >> Based on what I've seen of adreno, that sysval is likely actually not >> gl_SampleMaskIn, but rather a full pixel coverage mask. This only >> matters with sample-rate shading which I don't think Rob has >> investigated yet. >> >> I think gl_SampleMaskIn[0] == 0 should work in the general case, but I >> suspect that freedreno will have to implement gl_SampleMaskIn as >> covmask & (1 << sampleid) for sample-rate shading. >> > > I didn't try that but I think gl_SampleMaskIn[0] will work as long as > there isn't sample-rate shading. Blob always does 'covmask & (1 << > sampleid)'. But I guess as long as there isn't any GL state that can > also trigger sample-rate shading (?), I could switch lowering based on > whether shader reads sample_id, and use the simpler > gl_SampleMaskIn[0]==0 in the non-sample-rate case...
Reading gl_SampleID (or gl_SamplePosition) automatically triggers sample-rate shading. -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev