#include "util/set.h"
#include "util/bitscan.h"
#include "util/bitset.h"
+#include "util/enum_operators.h"
#include "util/macros.h"
#include "util/format/u_format.h"
#include "compiler/nir_types.h"
nir_num_variable_modes = 11,
nir_var_all = (1 << nir_num_variable_modes) - 1,
} nir_variable_mode;
+MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(nir_variable_mode)
/**
* Rounding modes.
enum pipe_format format;
} image;
+ struct {
+ /**
+ * For OpenCL inline samplers. See cl_sampler_addressing_mode and cl_sampler_filter_mode
+ */
+ unsigned is_inline_sampler : 1;
+ unsigned addressing_mode : 3;
+ unsigned normalized_coordinates : 1;
+ unsigned filter_mode : 1;
+ } sampler;
+
struct {
/**
* Transform feedback buffer.
/** generic SSA definition index. */
unsigned index;
- /** Index into the live_in and live_out bitfields */
+ /** Ordered SSA definition index used by nir_liveness. */
unsigned live_index;
/** Instruction which produces this SSA value. */
*/
int16_t dom_pre_index, dom_post_index;
- /* live in and out for this block; used for liveness analysis */
+ /* SSA def live in and out for this block; used for liveness analysis.
+ * Indexed by ssa_def->index
+ */
BITSET_WORD *live_in;
BITSET_WORD *live_out;
} nir_block;
*/
nir_metadata_all = ~nir_metadata_not_properly_reset,
} nir_metadata;
+MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(nir_metadata)
typedef struct {
nir_cf_node cf_node;
nir_lower_imul_2x32_64 = (1 << 12),
nir_lower_extract64 = (1 << 13),
nir_lower_ufind_msb64 = (1 << 14),
+ nir_lower_bit_count64 = (1 << 15),
} nir_lower_int64_options;
typedef enum {
struct exec_list functions; /** < list of nir_function */
/**
- * the highest index a load_input_*, load_uniform_*, etc. intrinsic can
- * access plus one
+ * The size of the variable space for load_input_*, load_uniform_*, etc.
+ * intrinsics. This is in back-end specific units which is likely one of
+ * bytes, dwords, or vec4s depending on context and back-end.
*/
- unsigned num_inputs, num_uniforms, num_outputs, num_shared;
+ unsigned num_inputs, num_uniforms, num_outputs;
+
+ /** Size in bytes of required shared memory */
+ unsigned shared_size;
/** Size in bytes of required scratch space */
unsigned scratch_size;
void nir_inline_function_impl(struct nir_builder *b,
const nir_function_impl *impl,
- nir_ssa_def **params);
+ nir_ssa_def **params,
+ struct hash_table *shader_var_remap);
bool nir_inline_functions(nir_shader *shader);
bool nir_propagate_invariant(nir_shader *shader);
bool nir_lower_bit_size(nir_shader *shader,
nir_lower_bit_size_callback callback,
void *callback_data);
+bool nir_lower_64bit_phis(nir_shader *shader);
nir_lower_int64_options nir_lower_int64_op_to_options_mask(nir_op opcode);
bool nir_lower_int64(nir_shader *shader);