nir_var_mem_shared = (1 << 8),
nir_var_mem_global = (1 << 9),
nir_var_mem_push_const = (1 << 10), /* not actually used for variables */
- nir_num_variable_modes = 11,
+ nir_var_mem_constant = (1 << 11),
+ nir_num_variable_modes = 12,
nir_var_all = (1 << nir_num_variable_modes) - 1,
} nir_variable_mode;
MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(nir_variable_mode)
*
* \sa nir_variable_mode
*/
- unsigned mode:11;
+ unsigned mode:12;
/**
* Is the variable read-only?
struct {
unsigned ptr_stride;
+ unsigned align_mul;
+ unsigned align_offset;
} cast;
};
/* lower {slt,sge,seq,sne} to {flt,fge,feq,fneu} + b2f: */
bool lower_scmp;
- /* lower fall_equalN/fany_nequalN (ex:fany_nequal4 to sne+fdot4+fsat) */
+ /* lower b/fall_equalN/b/fany_nequalN (ex:fany_nequal4 to sne+fdot4+fsat) */
bool lower_vector_cmp;
/** enables rules to lower idiv by power-of-two: */
void nir_print_instr(const nir_instr *instr, FILE *fp);
void nir_print_deref(const nir_deref_instr *deref, FILE *fp);
+/** Shallow clone of a single instruction. */
+nir_instr *nir_instr_clone(nir_shader *s, const nir_instr *orig);
+
/** Shallow clone of a single ALU instruction. */
nir_alu_instr *nir_alu_instr_clone(nir_shader *s, const nir_alu_instr *orig);
bool nir_lower_array_deref_of_vec(nir_shader *shader, nir_variable_mode modes,
nir_lower_array_deref_of_vec_options options);
-bool nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes);
+bool nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes,
+ uint32_t max_lower_array_len);
bool nir_lower_locals_to_regs(nir_shader *shader);
nir_variable_mode modes,
glsl_type_size_align_func type_info);
+bool nir_lower_mem_constant_vars(nir_shader *shader,
+ glsl_type_size_align_func type_info);
+
typedef enum {
/**
* An address format which is a simple 32-bit global GPU address.
bool nir_opt_undef(nir_shader *shader);
-bool nir_opt_vectorize(nir_shader *shader);
+typedef bool (*nir_opt_vectorize_cb)(const nir_instr *a, const nir_instr *b,
+ void *data);
+bool nir_opt_vectorize(nir_shader *shader, nir_opt_vectorize_cb filter,
+ void *data);
bool nir_opt_conditional_discard(nir_shader *shader);