*/
unsigned has_initializer:1;
+ /**
+ * Is the initializer created by the compiler (glsl_zero_init)
+ */
+ unsigned is_implicit_initializer:1;
+
/**
* Is this variable a generic output or input that has not yet been matched
* up to a variable in another stage of the pipeline?
*/
virtual ir_variable *variable_referenced() const = 0;
+ /**
+ * Get the precision. This can either come from the eventual variable that
+ * is dereferenced, or from a record member.
+ */
+ virtual int precision() const = 0;
+
protected:
ir_dereference(enum ir_node_type t)
: ir_rvalue(t)
return this->var;
}
+ virtual int precision() const
+ {
+ return this->var->data.precision;
+ }
+
virtual ir_variable *whole_variable_referenced()
{
/* ir_dereference_variable objects always dereference the entire
return this->array->variable_referenced();
}
+ virtual int precision() const
+ {
+ ir_dereference *deref = this->array->as_dereference();
+
+ if (deref == NULL)
+ return GLSL_PRECISION_NONE;
+ else
+ return deref->precision();
+ }
+
virtual void accept(ir_visitor *v)
{
v->visit(this);
return this->record->variable_referenced();
}
+ virtual int precision() const
+ {
+ glsl_struct_field *field = record->type->fields.structure + field_idx;
+
+ return field->precision;
+ }
+
virtual void accept(ir_visitor *v)
{
v->visit(this);
float f[16];
bool b[16];
double d[16];
+ uint16_t f16[16];
+ uint16_t u16[16];
+ int16_t i16[16];
uint64_t u64[16];
int64_t i64[16];
};
public:
ir_constant(const struct glsl_type *type, const ir_constant_data *data);
ir_constant(bool b, unsigned vector_elements=1);
+ ir_constant(int16_t i16, unsigned vector_elements=1);
+ ir_constant(uint16_t u16, unsigned vector_elements=1);
ir_constant(unsigned int u, unsigned vector_elements=1);
ir_constant(int i, unsigned vector_elements=1);
ir_constant(float16_t f16, unsigned vector_elements=1);
/*@{*/
bool get_bool_component(unsigned i) const;
float get_float_component(unsigned i) const;
+ uint16_t get_float16_component(unsigned i) const;
double get_double_component(unsigned i) const;
+ int16_t get_int16_component(unsigned i) const;
+ uint16_t get_uint16_component(unsigned i) const;
int get_int_component(unsigned i) const;
unsigned get_uint_component(unsigned i) const;
int64_t get_int64_component(unsigned i) const;
extern void _mesa_print_ir(FILE *f, struct exec_list *instructions,
struct _mesa_glsl_parse_state *state);
+extern void
+ir_print_type(FILE *f, const struct glsl_type *t);
+
extern void
fprint_ir(FILE *f, const void *instruction);