<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 12/03/18 20:42, Jason Ekstrand
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAOFGe94qWSbewAj9aHsPLtd6pGDm1z8=d6sALMdgPf86cqsfGQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">On Mon, Mar 5, 2018 at 10:21 PM,
            Samuel Iglesias Gonsálvez <span dir="ltr"><<a
                href="mailto:siglesias@igalia.com" target="_blank"
                moz-do-not-send="true">siglesias@igalia.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">OpSConvert
              interprets the MSB of the unsigned value as the sign bit
              and<br>
              extends it to the new type. If we want to preserve the
              value, we need<br>
              to use OpUConvert opcode.<br>
              <br>
              v2:<br>
              - No need to check dst type.<br>
              - Fix typo in comment.<br>
              <br>
              Signed-off-by: Samuel Iglesias Gonsálvez <<a
                href="mailto:siglesias@igalia.com"
                moz-do-not-send="true">siglesias@igalia.com</a>><br>
              ---<br>
               src/compiler/spirv/vtn_alu.c | 18 +++++++++++++++++-<br>
               1 file changed, 17 insertions(+), 1 deletion(-)<br>
              <br>
              diff --git a/src/compiler/spirv/vtn_alu.c
              b/src/compiler/spirv/vtn_alu.c<br>
              index d0c9e316935..a5cefc35773 100644<br>
              --- a/src/compiler/spirv/vtn_alu.c<br>
              +++ b/src/compiler/spirv/vtn_alu.c<br>
              @@ -354,10 +354,26 @@ vtn_nir_alu_op_for_spirv_<wbr>opcode(struct
              vtn_builder *b,<br>
                  case SpvOpConvertFToS:<br>
                  case SpvOpConvertSToF:<br>
                  case SpvOpConvertUToF:<br>
              -   case SpvOpSConvert:<br>
                  case SpvOpFConvert:<br>
                     return nir_type_conversion_op(src, dst,
              nir_rounding_mode_undef);<br>
              <br>
              +   case SpvOpSConvert: {<br>
              +      nir_alu_type src_base = (nir_alu_type)
              nir_alu_type_get_base_type(<wbr>src);<br>
              +      if (src_base == nir_type_uint) {<br>
            </blockquote>
            <div><br>
            </div>
            <div>Why are we predicating this on src_base ==
              nir_type_uint?  It seems to me as if we should just ignore
              the source and destination type except for the bit size.<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Right.<br>
    <br>
    <blockquote type="cite"
cite="mid:CAOFGe94qWSbewAj9aHsPLtd6pGDm1z8=d6sALMdgPf86cqsfGQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              +         /* SPIR-V expects to interpret the unsigned
              value as signed and<br>
              +          * do sign extend. Return the opcode
              accordingly.<br>
              +          */<br>
              +         unsigned dst_bit_size =
              nir_alu_type_get_type_size(<wbr>dst);<br>
              +         switch (dst_bit_size) {<br>
              +         case 16:   return nir_op_i2i16;<br>
              +         case 32:   return nir_op_i2i32;<br>
              +         case 64:   return nir_op_i2i64;<br>
            </blockquote>
            <div><br>
            </div>
            <div>This can be nir_type_int | dst_bit_size. NIR types are
              convenient like that. :-)<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Oh, nice suggestion! I am going to send soon a v3 with the suggested
    changes for both patches.<br>
    <br>
    Thanks a lot!<br>
    <br>
    Sam<br>
    <br>
    <blockquote type="cite"
cite="mid:CAOFGe94qWSbewAj9aHsPLtd6pGDm1z8=d6sALMdgPf86cqsfGQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              +         default:<br>
              +            vtn_fail("Invalid nir alu bit size");<br>
              +         }<br>
              +      }<br>
              +      return nir_type_conversion_op(src, dst,
              nir_rounding_mode_undef);<br>
              +   }<br>
                  /* Derivatives: */<br>
                  case SpvOpDPdx:         return nir_op_fddx;<br>
                  case SpvOpDPdy:         return nir_op_fddy;<br>
              <span class="HOEnZb"><font color="#888888">--<br>
                  2.14.1<br>
                  <br>
                  ______________________________<wbr>_________________<br>
                  mesa-dev mailing list<br>
                  <a href="mailto:mesa-dev@lists.freedesktop.org"
                    moz-do-not-send="true">mesa-dev@lists.freedesktop.org</a><br>
                  <a
                    href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
                </font></span></blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>