spirv: add ReadClockKHR support with device scope
[mesa.git] / src / compiler / glsl / ir_print_visitor.cpp
index e208aaef88891752f89d1b7df20d30fc9c13f10a..7533a52ee818f510f9363cbfd0e91839c0bd9be1 100644 (file)
@@ -28,6 +28,7 @@
 #include "main/macros.h"
 #include "util/hash_table.h"
 #include "util/u_string.h"
+#include "util/half_float.h"
 
 static void print_type(FILE *f, const glsl_type *t);
 
@@ -167,31 +168,31 @@ void ir_print_visitor::visit(ir_variable *ir)
 
    char binding[32] = {0};
    if (ir->data.binding)
-      util_snprintf(binding, sizeof(binding), "binding=%i ", ir->data.binding);
+      snprintf(binding, sizeof(binding), "binding=%i ", ir->data.binding);
 
    char loc[32] = {0};
    if (ir->data.location != -1)
-      util_snprintf(loc, sizeof(loc), "location=%i ", ir->data.location);
+      snprintf(loc, sizeof(loc), "location=%i ", ir->data.location);
 
    char component[32] = {0};
    if (ir->data.explicit_component || ir->data.location_frac != 0)
-      util_snprintf(component, sizeof(component), "component=%i ",
+      snprintf(component, sizeof(component), "component=%i ",
                     ir->data.location_frac);
 
    char stream[32] = {0};
    if (ir->data.stream & (1u << 31)) {
       if (ir->data.stream & ~(1u << 31)) {
-         util_snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ",
-                       ir->data.stream & 3, (ir->data.stream >> 2) & 3,
-                       (ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3);
+         snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ",
+                  ir->data.stream & 3, (ir->data.stream >> 2) & 3,
+                  (ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3);
       }
    } else if (ir->data.stream) {
-      util_snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream);
+      snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream);
    }
 
    char image_format[32] = {0};
    if (ir->data.image_format) {
-      util_snprintf(image_format, sizeof(image_format), "format=%x ",
+      snprintf(image_format, sizeof(image_format), "format=%x ",
                     ir->data.image_format);
    }
 
@@ -213,7 +214,7 @@ void ir_print_visitor::visit(ir_variable *ir)
                                 "in ", "out ", "inout ",
                                "const_in ", "sys ", "temporary " };
    STATIC_ASSERT(ARRAY_SIZE(mode) == ir_var_mode_count);
-   const char *const interp[] = { "", "smooth", "flat", "noperspective" };
+   const char *const interp[] = { "", "smooth", "flat", "noperspective", "explicit" };
    STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_MODE_COUNT);
 
    fprintf(f, "(%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s) ",
@@ -460,6 +461,19 @@ void ir_print_visitor::visit(ir_assignment *ir)
    fprintf(f, ") ");
 }
 
+static void
+print_float_constant(FILE *f, float val)
+{
+   if (val == 0.0f)
+      /* 0.0 == -0.0, so print with %f to get the proper sign. */
+      fprintf(f, "%f", val);
+   else if (fabs(val) < 0.000001f)
+      fprintf(f, "%a", val);
+   else if (fabs(val) > 1000000.0f)
+      fprintf(f, "%e", val);
+   else
+      fprintf(f, "%f", val);
+}
 
 void ir_print_visitor::visit(ir_constant *ir)
 {
@@ -484,15 +498,10 @@ void ir_print_visitor::visit(ir_constant *ir)
         case GLSL_TYPE_UINT:  fprintf(f, "%u", ir->value.u[i]); break;
         case GLSL_TYPE_INT:   fprintf(f, "%d", ir->value.i[i]); break;
         case GLSL_TYPE_FLOAT:
-            if (ir->value.f[i] == 0.0f)
-               /* 0.0 == -0.0, so print with %f to get the proper sign. */
-               fprintf(f, "%f", ir->value.f[i]);
-            else if (fabs(ir->value.f[i]) < 0.000001f)
-               fprintf(f, "%a", ir->value.f[i]);
-            else if (fabs(ir->value.f[i]) > 1000000.0f)
-               fprintf(f, "%e", ir->value.f[i]);
-            else
-               fprintf(f, "%f", ir->value.f[i]);
+            print_float_constant(f, ir->value.f[i]);
+            break;
+        case GLSL_TYPE_FLOAT16:
+            print_float_constant(f, _mesa_half_to_float(ir->value.f16[i]));
             break;
         case GLSL_TYPE_SAMPLER:
         case GLSL_TYPE_IMAGE:
@@ -564,6 +573,13 @@ ir_print_visitor::visit(ir_discard *ir)
 }
 
 
+void
+ir_print_visitor::visit(ir_demote *ir)
+{
+   fprintf(f, "(demote)");
+}
+
+
 void
 ir_print_visitor::visit(ir_if *ir)
 {