<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 4/12/19 5:04 PM, Marek Olšák wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAAxE2A6jghuMAg4o81Tx9i1L=z0DAoAJTqYndKTTJKsFZXqm+g@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr"><br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Thu, Apr 11, 2019 at 3:15
            AM Samuel Pitoiset <<a
              href="mailto:samuel.pitoiset@gmail.com"
              moz-do-not-send="true">samuel.pitoiset@gmail.com</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex"><br>
            On 4/11/19 3:30 AM, Marek Olšák wrote:<br>
            > From: Marek Olšák <<a
              href="mailto:marek.olsak@amd.com" target="_blank"
              moz-do-not-send="true">marek.olsak@amd.com</a>><br>
            ><br>
            > ---<br>
            >   src/amd/common/ac_nir_to_llvm.c | 70
            +++------------------------------<br>
            >   1 file changed, 5 insertions(+), 65 deletions(-)<br>
            ><br>
            > diff --git a/src/amd/common/ac_nir_to_llvm.c
            b/src/amd/common/ac_nir_to_llvm.c<br>
            > index 3d2f738edec..3abde6e0969 100644<br>
            > --- a/src/amd/common/ac_nir_to_llvm.c<br>
            > +++ b/src/amd/common/ac_nir_to_llvm.c<br>
            > @@ -2323,92 +2323,32 @@ static int
            image_type_to_components_count(enum glsl_sampler_dim dim,
            bool array)<br>
            >       case GLSL_SAMPLER_DIM_SUBPASS:<br>
            >               return 2;<br>
            >       case GLSL_SAMPLER_DIM_SUBPASS_MS:<br>
            >               return 3;<br>
            >       default:<br>
            >               break;<br>
            >       }<br>
            >       return 0;<br>
            >   }<br>
            >   <br>
            > -<br>
            > -/* Adjust the sample index according to FMASK.<br>
            > - *<br>
            > - * For uncompressed MSAA surfaces, FMASK should return
            0x76543210,<br>
            > - * which is the identity mapping. Each nibble says
            which physical sample<br>
            > - * should be fetched to get that sample.<br>
            > - *<br>
            > - * For example, 0x11111100 means there are only 2
            samples stored and<br>
            > - * the second sample covers 3/4 of the pixel. When
            reading samples 0<br>
            > - * and 1, return physical sample 0 (determined by the
            first two 0s<br>
            > - * in FMASK), otherwise return physical sample 1.<br>
            > - *<br>
            > - * The sample index should be adjusted as follows:<br>
            > - *   sample_index = (fmask >> (sample_index *
            4)) & 0xF;<br>
            > - */<br>
            >   static LLVMValueRef
            adjust_sample_index_using_fmask(struct ac_llvm_context *ctx,<br>
            >                                                 
             LLVMValueRef coord_x, LLVMValueRef coord_y,<br>
            >                                                 
             LLVMValueRef coord_z,<br>
            >                                                 
             LLVMValueRef sample_index,<br>
            >                                                 
             LLVMValueRef fmask_desc_ptr)<br>
            >   {<br>
            > -     struct ac_image_args args = {0};<br>
            > -     LLVMValueRef res;<br>
            > +     unsigned sample_chan = coord_z ? 3 : 2;<br>
            > +     LLVMValueRef addr[4] = {coord_x, coord_y,
            coord_z};<br>
            > +     addr[sample_chan] = sample_index;<br>
            >   <br>
            > -     args.coords[0] = coord_x;<br>
            > -     args.coords[1] = coord_y;<br>
            > -     if (coord_z)<br>
            > -             args.coords[2] = coord_z;<br>
            > -<br>
            > -     args.opcode = ac_image_load;<br>
            > -     args.dim = coord_z ? ac_image_2darray :
            ac_image_2d;<br>
            > -     args.resource = fmask_desc_ptr;<br>
            > -     args.dmask = 0xf;<br>
            > -     args.attributes = AC_FUNC_ATTR_READNONE;<br>
            > -<br>
            > -     res = ac_build_image_opcode(ctx, &args);<br>
            > -<br>
            > -     res = ac_to_integer(ctx, res);<br>
            > -     LLVMValueRef four = LLVMConstInt(ctx->i32, 4,
            false);<br>
            > -     LLVMValueRef F = LLVMConstInt(ctx->i32, 0xf,
            false);<br>
            > -<br>
            > -     LLVMValueRef fmask =
            LLVMBuildExtractElement(ctx->builder,<br>
            > -                                                  res,<br>
            > -                                                 
            ctx->i32_0, "");<br>
            > -<br>
            > -     LLVMValueRef sample_index4 =<br>
            > -             LLVMBuildMul(ctx->builder,
            sample_index, four, "");<br>
            > -     LLVMValueRef shifted_fmask =<br>
            > -             LLVMBuildLShr(ctx->builder, fmask,
            sample_index4, "");<br>
            > -     LLVMValueRef final_sample =<br>
            > -             LLVMBuildAnd(ctx->builder,
            shifted_fmask, F, "");<br>
            <br>
            The only difference is the mask (ie.
            ac_apply_fmask_to_sample uses 0x7) <br>
            while this code uses 0xF.<br>
          </blockquote>
          <div><br>
          </div>
          <div>Yes.<br>
          </div>
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <br>
            According to the comment in that function, I assume 0x7 is
            the correct <br>
            value?<br>
          </blockquote>
          <div><br>
          </div>
          <div>Yes, it's for EQAA. Only samples 0-7 can occur with MSAA.
            If EQAA is used, 0x8 means the color of the sample is
            unknown, which is mapped to sample 0 by the 0x7 mask.</div>
        </div>
      </div>
    </blockquote>
    Reviewed-by: Samuel Pitoiset <a class="moz-txt-link-rfc2396E" href="mailto:samuel.pitoiset@gmail.com"><samuel.pitoiset@gmail.com></a><br>
    <blockquote type="cite"
cite="mid:CAAxE2A6jghuMAg4o81Tx9i1L=z0DAoAJTqYndKTTJKsFZXqm+g@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div><br>
          </div>
          <div>Marek</div>
        </div>
      </div>
    </blockquote>
  </body>
</html>