<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 13, 2017 at 7:35 AM, Alejandro Piñeiro <span dir="ltr"><<a href="mailto:apinheiro@igalia.com" target="_blank">apinheiro@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Eduardo Lima Mitev <<a href="mailto:elima@igalia.com">elima@igalia.com</a>><br>
<br>
Signed-off-by: Jose Maria Casanova Crespo <<a href="mailto:jmcasanova@igalia.com">jmcasanova@igalia.com</a>><br>
Signed-off-by: Eduardo Lima <<a href="mailto:elima@igalia.com">elima@igalia.com</a>><br>
---<br>
 src/compiler/spirv/spirv_to_<wbr>nir.c  | 30 +++++++++++++++++++++++++++++-<br>
 src/compiler/spirv/vtn_<wbr>variables.c | 21 +++++++++++++++++++++<br>
 2 files changed, 50 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/compiler/spirv/spirv_to_<wbr>nir.c b/src/compiler/spirv/spirv_to_<wbr>nir.c<br>
index c66bf34..b619553 100644<br>
--- a/src/compiler/spirv/spirv_to_<wbr>nir.c<br>
+++ b/src/compiler/spirv/spirv_to_<wbr>nir.c<br>
@@ -104,10 +104,13 @@ vtn_const_ssa_value(struct vtn_builder *b, nir_constant *constant,<br>
    switch (glsl_get_base_type(type)) {<br>
    case GLSL_TYPE_INT:<br>
    case GLSL_TYPE_UINT:<br>
+   case GLSL_TYPE_INT16:<br>
+   case GLSL_TYPE_UINT16:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_BOOL:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_DOUBLE: {<br>
       int bit_size = glsl_get_bit_size(type);<br>
       if (glsl_type_is_vector_or_<wbr>scalar(type)) {<br>
@@ -741,6 +744,8 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,<br>
       val->type->base_type = vtn_base_type_scalar;<br>
       if (bit_size == 64)<br>
          val->type->type = (signedness ? glsl_int64_t_type() : glsl_uint64_t_type());<br>
+      else if (bit_size == 16)<br>
+         val->type->type = (signedness ? glsl_int16_t_type() : glsl_uint16_t_type());<br>
       else<br>
          val->type->type = (signedness ? glsl_int_type() : glsl_uint_type());<br>
       break;<br>
@@ -748,7 +753,19 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,<br>
    case SpvOpTypeFloat: {<br>
       int bit_size = w[2];<br>
       val->type->base_type = vtn_base_type_scalar;<br>
-      val->type->type = bit_size == 64 ? glsl_double_type() : glsl_float_type();<br>
+      switch (bit_size) {<br>
+      case 16:<br>
+         val->type->type = glsl_half_float_type();<br>
+         break;<br>
+      case 32:<br>
+         val->type->type = glsl_float_type();<br>
+         break;<br>
+      case 64:<br>
+         val->type->type = glsl_double_type();<br>
+         break;<br>
+      default:<br>
+         assert(!"Invalid float bit size");<br>
+      }<br>
       break;<br>
    }<br>
<br>
@@ -961,10 +978,13 @@ vtn_null_constant(struct vtn_builder *b, const struct glsl_type *type)<br>
    switch (glsl_get_base_type(type)) {<br>
    case GLSL_TYPE_INT:<br>
    case GLSL_TYPE_UINT:<br>
+   case GLSL_TYPE_INT16:<br>
+   case GLSL_TYPE_UINT16:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_BOOL:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_DOUBLE:<br>
       /* Nothing to do here.  It's already initialized to zero */<br>
       break;<br>
@@ -1117,6 +1137,8 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,<br>
       switch (glsl_get_base_type(val-><wbr>const_type)) {<br>
       case GLSL_TYPE_UINT:<br>
       case GLSL_TYPE_INT:<br>
+      case GLSL_TYPE_UINT16:<br>
+      case GLSL_TYPE_INT16:<br>
       case GLSL_TYPE_UINT64:<br>
       case GLSL_TYPE_INT64:<br>
       case GLSL_TYPE_FLOAT:<br></blockquote><div><br></div><div>I think we're missing half-float here.  Also, I see zero code here for properly handling 16-bit constants.  Basically everywhere there is a 32 or a 64, there should also be a 16.</div><div><br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
@@ -1257,9 +1279,12 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,<br>
             switch (glsl_get_base_type(type)) {<br>
             case GLSL_TYPE_UINT:<br>
             case GLSL_TYPE_INT:<br>
+            case GLSL_TYPE_UINT16:<br>
+            case GLSL_TYPE_INT16:<br>
             case GLSL_TYPE_UINT64:<br>
             case GLSL_TYPE_INT64:<br>
             case GLSL_TYPE_FLOAT:<br>
+            case GLSL_TYPE_HALF_FLOAT:<br>
             case GLSL_TYPE_DOUBLE:<br>
             case GLSL_TYPE_BOOL:<br>
                /* If we hit this granularity, we're picking off an element */<br>
@@ -1428,10 +1453,13 @@ vtn_create_ssa_value(struct vtn_builder *b, const struct glsl_type *type)<br>
          switch (glsl_get_base_type(type)) {<br>
          case GLSL_TYPE_INT:<br>
          case GLSL_TYPE_UINT:<br>
+         case GLSL_TYPE_INT16:<br>
+         case GLSL_TYPE_UINT16:<br>
          case GLSL_TYPE_INT64:<br>
          case GLSL_TYPE_UINT64:<br>
          case GLSL_TYPE_BOOL:<br>
          case GLSL_TYPE_FLOAT:<br>
+         case GLSL_TYPE_HALF_FLOAT:<br>
          case GLSL_TYPE_DOUBLE:<br>
             child_type = glsl_get_column_type(type);<br>
             break;<br>
diff --git a/src/compiler/spirv/vtn_<wbr>variables.c b/src/compiler/spirv/vtn_<wbr>variables.c<br>
index 5af27bf..bf6184c 100644<br>
--- a/src/compiler/spirv/vtn_<wbr>variables.c<br>
+++ b/src/compiler/spirv/vtn_<wbr>variables.c<br>
@@ -160,9 +160,12 @@ vtn_ssa_offset_pointer_<wbr>dereference(struct vtn_builder *b,<br>
       switch (glsl_get_base_type(type-><wbr>type)) {<br>
       case GLSL_TYPE_UINT:<br>
       case GLSL_TYPE_INT:<br>
+      case GLSL_TYPE_UINT16:<br>
+      case GLSL_TYPE_INT16:<br>
       case GLSL_TYPE_UINT64:<br>
       case GLSL_TYPE_INT64:<br>
       case GLSL_TYPE_FLOAT:<br>
+      case GLSL_TYPE_HALF_FLOAT:<br>
       case GLSL_TYPE_DOUBLE:<br>
       case GLSL_TYPE_BOOL:<br>
       case GLSL_TYPE_ARRAY: {<br>
@@ -273,9 +276,12 @@ vtn_pointer_to_deref(struct vtn_builder *b, struct vtn_pointer *ptr)<br>
       switch (base_type) {<br>
       case GLSL_TYPE_UINT:<br>
       case GLSL_TYPE_INT:<br>
+      case GLSL_TYPE_UINT16:<br>
+      case GLSL_TYPE_INT16:<br>
       case GLSL_TYPE_UINT64:<br>
       case GLSL_TYPE_INT64:<br>
       case GLSL_TYPE_FLOAT:<br>
+      case GLSL_TYPE_HALF_FLOAT:<br>
       case GLSL_TYPE_DOUBLE:<br>
       case GLSL_TYPE_BOOL:<br>
       case GLSL_TYPE_ARRAY: {<br>
@@ -498,9 +504,12 @@ vtn_pointer_to_offset(struct vtn_builder *b, struct vtn_pointer *ptr,<br>
       switch (base_type) {<br>
       case GLSL_TYPE_UINT:<br>
       case GLSL_TYPE_INT:<br>
+      case GLSL_TYPE_UINT16:<br>
+      case GLSL_TYPE_INT16:<br>
       case GLSL_TYPE_UINT64:<br>
       case GLSL_TYPE_INT64:<br>
       case GLSL_TYPE_FLOAT:<br>
+      case GLSL_TYPE_HALF_FLOAT:<br>
       case GLSL_TYPE_DOUBLE:<br>
       case GLSL_TYPE_BOOL:<br>
       case GLSL_TYPE_ARRAY:<br>
@@ -542,9 +551,12 @@ vtn_type_block_size(struct vtn_type *type)<br>
    switch (base_type) {<br>
    case GLSL_TYPE_UINT:<br>
    case GLSL_TYPE_INT:<br>
+   case GLSL_TYPE_UINT16:<br>
+   case GLSL_TYPE_INT16:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_BOOL:<br>
    case GLSL_TYPE_DOUBLE: {<br>
       unsigned cols = type->row_major ? glsl_get_vector_elements(type-<wbr>>type) :<br>
@@ -673,9 +685,12 @@ _vtn_block_load_store(struct vtn_builder *b, nir_intrinsic_op op, bool load,<br>
    switch (base_type) {<br>
    case GLSL_TYPE_UINT:<br>
    case GLSL_TYPE_INT:<br>
+   case GLSL_TYPE_UINT16:<br>
+   case GLSL_TYPE_INT16:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_DOUBLE:<br>
    case GLSL_TYPE_BOOL:<br>
       /* This is where things get interesting.  At this point, we've hit<br>
@@ -848,9 +863,12 @@ _vtn_variable_load_store(<wbr>struct vtn_builder *b, bool load,<br>
    switch (base_type) {<br>
    case GLSL_TYPE_UINT:<br>
    case GLSL_TYPE_INT:<br>
+   case GLSL_TYPE_UINT16:<br>
+   case GLSL_TYPE_INT16:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_BOOL:<br>
    case GLSL_TYPE_DOUBLE:<br>
       /* At this point, we have a scalar, vector, or matrix so we know that<br>
@@ -928,9 +946,12 @@ _vtn_variable_copy(struct vtn_builder *b, struct vtn_pointer *dest,<br>
    switch (base_type) {<br>
    case GLSL_TYPE_UINT:<br>
    case GLSL_TYPE_INT:<br>
+   case GLSL_TYPE_UINT16:<br>
+   case GLSL_TYPE_INT16:<br>
    case GLSL_TYPE_UINT64:<br>
    case GLSL_TYPE_INT64:<br>
    case GLSL_TYPE_FLOAT:<br>
+   case GLSL_TYPE_HALF_FLOAT:<br>
    case GLSL_TYPE_DOUBLE:<br>
    case GLSL_TYPE_BOOL:<br>
       /* At this point, we have a scalar, vector, or matrix so we know that<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.9.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>