#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);
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);
}
"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) ",
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)
{
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:
}
+void
+ir_print_visitor::visit(ir_demote *ir)
+{
+ fprintf(f, "(demote)");
+}
+
+
void
ir_print_visitor::visit(ir_if *ir)
{