Lines Matching refs:build

44 nir_builder_init(nir_builder *build, nir_function_impl *impl)
46 memset(build, 0, sizeof(*build));
47 build->exact = false;
48 build->impl = impl;
49 build->shader = impl->function->shader;
53 nir_builder_init_simple_shader(nir_builder *build, void *mem_ctx,
57 build->shader = nir_shader_create(mem_ctx, stage, options, NULL);
58 nir_function *func = nir_function_create(build->shader, "main");
60 build->exact = false;
61 build->impl = nir_function_impl_create(func);
62 build->cursor = nir_after_cf_list(&build->impl->body);
66 nir_builder_instr_insert(nir_builder *build, nir_instr *instr)
68 nir_instr_insert(build->cursor, instr);
71 build->cursor = nir_after_instr(instr);
75 nir_builder_last_instr(nir_builder *build)
77 assert(build->cursor.option == nir_cursor_after_instr);
78 return build->cursor.instr;
82 nir_builder_cf_insert(nir_builder *build, nir_cf_node *cf)
84 nir_cf_node_insert(build->cursor, cf);
88 nir_builder_is_inside_cf(nir_builder *build, nir_cf_node *cf_node)
90 nir_block *block = nir_cursor_current_block(build->cursor);
99 nir_push_if(nir_builder *build, nir_ssa_def *condition)
101 nir_if *nif = nir_if_create(build->shader);
103 nir_builder_cf_insert(build, &nif->cf_node);
104 build->cursor = nir_before_cf_list(&nif->then_list);
109 nir_push_else(nir_builder *build, nir_if *nif)
112 assert(nir_builder_is_inside_cf(build, &nif->cf_node));
114 nir_block *block = nir_cursor_current_block(build->cursor);
117 build->cursor = nir_before_cf_list(&nif->else_list);
122 nir_pop_if(nir_builder *build, nir_if *nif)
125 assert(nir_builder_is_inside_cf(build, &nif->cf_node));
127 nir_block *block = nir_cursor_current_block(build->cursor);
130 build->cursor = nir_after_cf_node(&nif->cf_node);
134 nir_if_phi(nir_builder *build, nir_ssa_def *then_def, nir_ssa_def *else_def)
136 nir_block *block = nir_cursor_current_block(build->cursor);
139 nir_phi_instr *phi = nir_phi_instr_create(build->shader);
156 nir_builder_instr_insert(build, &phi->instr);
162 nir_push_loop(nir_builder *build)
164 nir_loop *loop = nir_loop_create(build->shader);
165 nir_builder_cf_insert(build, &loop->cf_node);
166 build->cursor = nir_before_cf_list(&loop->body);
171 nir_pop_loop(nir_builder *build, nir_loop *loop)
174 assert(nir_builder_is_inside_cf(build, &loop->cf_node));
176 nir_block *block = nir_cursor_current_block(build->cursor);
179 build->cursor = nir_after_cf_node(&loop->cf_node);
183 nir_ssa_undef(nir_builder *build, unsigned num_components, unsigned bit_size)
186 nir_ssa_undef_instr_create(build->shader, num_components, bit_size);
190 nir_instr_insert(nir_before_cf_list(&build->impl->body), &undef->instr);
196 nir_build_imm(nir_builder *build, unsigned num_components,
200 nir_load_const_instr_create(build->shader, num_components, bit_size);
206 nir_builder_instr_insert(build, &load_const->instr);
212 nir_imm_zero(nir_builder *build, unsigned num_components, unsigned bit_size)
215 nir_load_const_instr_create(build->shader, num_components, bit_size);
219 nir_builder_instr_insert(build, &load_const->instr);
225 nir_imm_bool(nir_builder *build, bool x)
232 return nir_build_imm(build, 1, 1, &v);
236 nir_imm_true(nir_builder *build)
238 return nir_imm_bool(build, true);
242 nir_imm_false(nir_builder *build)
244 return nir_imm_bool(build, false);
248 nir_imm_float16(nir_builder *build, float x)
255 return nir_build_imm(build, 1, 16, &v);
259 nir_imm_float(nir_builder *build, float x)
266 return nir_build_imm(build, 1, 32, &v);
270 nir_imm_double(nir_builder *build, double x)
277 return nir_build_imm(build, 1, 64, &v);
281 nir_imm_floatN_t(nir_builder *build, double x, unsigned bit_size)
285 return nir_imm_float16(build, x);
287 return nir_imm_float(build, x);
289 return nir_imm_double(build, x);
296 nir_imm_vec2(nir_builder *build, float x, float y)
304 return nir_build_imm(build, 2, 32, v);
308 nir_imm_vec4(nir_builder *build, float x, float y, float z, float w)
318 return nir_build_imm(build, 4, 32, v);
322 nir_imm_ivec2(nir_builder *build, int x, int y)
330 return nir_build_imm(build, 2, 32, v);
334 nir_imm_int(nir_builder *build, int x)
341 return nir_build_imm(build, 1, 32, &v);
345 nir_imm_int64(nir_builder *build, int64_t x)
352 return nir_build_imm(build, 1, 64, &v);
356 nir_imm_intN_t(nir_builder *build, uint64_t x, unsigned bit_size)
367 return nir_build_imm(build, 1, bit_size, &v);
371 nir_imm_ivec4(nir_builder *build, int x, int y, int z, int w)
381 return nir_build_imm(build, 4, 32, v);
385 nir_imm_boolN_t(nir_builder *build, bool x, unsigned bit_size)
388 return nir_imm_intN_t(build, -(int)x, bit_size);
392 nir_builder_alu_instr_finish_and_insert(nir_builder *build, nir_alu_instr *instr)
396 instr->exact = build->exact;
448 nir_builder_instr_insert(build, &instr->instr);
454 nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
457 nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
469 return nir_builder_alu_instr_finish_and_insert(build, instr);
474 nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs)
477 nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
484 return nir_builder_alu_instr_finish_and_insert(build, instr);
490 nir_vec(nir_builder *build, nir_ssa_def **comp, unsigned num_components)
492 return nir_build_alu_src_arr(build, nir_op_vec(num_components), comp);
499 nir_fmov_alu(nir_builder *build, nir_alu_src src, unsigned num_components)
501 nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_fmov);
504 mov->exact = build->exact;
507 nir_builder_instr_insert(build, &mov->instr);
513 nir_imov_alu(nir_builder *build, nir_alu_src src, unsigned num_components)
515 nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_imov);
518 mov->exact = build->exact;
521 nir_builder_instr_insert(build, &mov->instr);
530 nir_swizzle(nir_builder *build, nir_ssa_def *src, const unsigned *swiz,
547 return use_fmov ? nir_fmov_alu(build, alu_src, num_components) :
548 nir_imov_alu(build, alu_src, num_components);
553 nir_fdot(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1)
557 case 1: return nir_fmul(build, src0, src1);
558 case 2: return nir_fdot2(build, src0, src1);
559 case 3: return nir_fdot3(build, src0, src1);
560 case 4: return nir_fdot4(build, src0, src1);
637 nir_i2i(nir_builder *build, nir_ssa_def *x, unsigned dest_bit_size)
643 case 64: return nir_i2i64(build, x);
644 case 32: return nir_i2i32(build, x);
645 case 16: return nir_i2i16(build, x);
646 case 8: return nir_i2i8(build, x);
652 nir_u2u(nir_builder *build, nir_ssa_def *x, unsigned dest_bit_size)
658 case 64: return nir_u2u64(build, x);
659 case 32: return nir_u2u32(build, x);
660 case 16: return nir_u2u16(build, x);
661 case 8: return nir_u2u8(build, x);
667 nir_iadd_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
676 return nir_iadd(build, x, nir_imm_intN_t(build, y, x->bit_size));
681 nir_imul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
688 return nir_imm_intN_t(build, 0, x->bit_size);
692 return nir_ishl(build, x, nir_imm_int(build, ffsll(y) - 1));
694 return nir_imul(build, x, nir_imm_intN_t(build, y, x->bit_size));
699 nir_fadd_imm(nir_builder *build, nir_ssa_def *x, double y)
701 return nir_fadd(build, x, nir_imm_floatN_t(build, y, x->bit_size));
705 nir_fmul_imm(nir_builder *build, nir_ssa_def *x, double y)
707 return nir_fmul(build, x, nir_imm_floatN_t(build, y, x->bit_size));
832 nir_ssa_for_src(nir_builder *build, nir_src src, int num_components)
842 return nir_imov_alu(build, alu, num_components);
850 nir_ssa_for_alu_src(nir_builder *build, nir_alu_instr *instr, unsigned srcn)
863 return nir_imov_alu(build, *src, num_components);
867 nir_get_ptr_bitsize(nir_builder *build)
869 if (build->shader->info.stage == MESA_SHADER_KERNEL)
870 return build->shader->info.cs.ptr_size;
875 nir_build_deref_var(nir_builder *build, nir_variable *var)
878 nir_deref_instr_create(build->shader, nir_deref_type_var);
885 nir_get_ptr_bitsize(build), NULL);
887 nir_builder_instr_insert(build, &deref->instr);
893 nir_build_deref_array(nir_builder *build, nir_deref_instr *parent,
903 nir_deref_instr_create(build->shader, nir_deref_type_array);
914 nir_builder_instr_insert(build, &deref->instr);
920 nir_build_deref_array_imm(nir_builder *build, nir_deref_instr *parent,
924 nir_ssa_def *idx_ssa = nir_imm_intN_t(build, index,
927 return nir_build_deref_array(build, parent, idx_ssa);
931 nir_build_deref_ptr_as_array(nir_builder *build, nir_deref_instr *parent,
941 nir_deref_instr_create(build->shader, nir_deref_type_ptr_as_array);
952 nir_builder_instr_insert(build, &deref->instr);
958 nir_build_deref_array_wildcard(nir_builder *build, nir_deref_instr *parent)
964 nir_deref_instr_create(build->shader, nir_deref_type_array_wildcard);
974 nir_builder_instr_insert(build, &deref->instr);
980 nir_build_deref_struct(nir_builder *build, nir_deref_instr *parent,
986 nir_deref_instr_create(build->shader, nir_deref_type_struct);
997 nir_builder_instr_insert(build, &deref->instr);
1003 nir_build_deref_cast(nir_builder *build, nir_ssa_def *parent,
1008 nir_deref_instr_create(build->shader, nir_deref_type_cast);
1018 nir_builder_instr_insert(build, &deref->instr);
1076 nir_load_reg(nir_builder *build, nir_register *reg)
1078 return nir_ssa_for_src(build, nir_src_for_reg(reg), reg->num_components);
1082 nir_load_deref_with_access(nir_builder *build, nir_deref_instr *deref,
1086 nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_deref);
1092 nir_builder_instr_insert(build, &load->instr);
1097 nir_load_deref(nir_builder *build, nir_deref_instr *deref)
1099 return nir_load_deref_with_access(build, deref, (enum gl_access_qualifier)0);
1103 nir_store_deref_with_access(nir_builder *build, nir_deref_instr *deref,
1108 nir_intrinsic_instr_create(build->shader, nir_intrinsic_store_deref);
1115 nir_builder_instr_insert(build, &store->instr);
1119 nir_store_deref(nir_builder *build, nir_deref_instr *deref,
1122 nir_store_deref_with_access(build, deref, value, writemask,
1127 nir_copy_deref_with_access(nir_builder *build, nir_deref_instr *dest,
1133 nir_intrinsic_instr_create(build->shader, nir_intrinsic_copy_deref);
1138 nir_builder_instr_insert(build, &copy->instr);
1142 nir_copy_deref(nir_builder *build, nir_deref_instr *dest, nir_deref_instr *src)
1144 nir_copy_deref_with_access(build, dest, src,
1150 nir_load_var(nir_builder *build, nir_variable *var)
1152 return nir_load_deref(build, nir_build_deref_var(build, var));
1156 nir_store_var(nir_builder *build, nir_variable *var, nir_ssa_def *value,
1159 nir_store_deref(build, nir_build_deref_var(build, var), value, writemask);
1163 nir_copy_var(nir_builder *build, nir_variable *dest, nir_variable *src)
1165 nir_copy_deref(build, nir_build_deref_var(build, dest),
1166 nir_build_deref_var(build, src));
1170 nir_load_param(nir_builder *build, uint32_t param_idx)
1172 assert(param_idx < build->impl->function->num_params);
1173 nir_parameter *param = &build->impl->function->params[param_idx];
1176 nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_param);
1181 nir_builder_instr_insert(build, &load->instr);
1188 nir_f2b(nir_builder *build, nir_ssa_def *f)
1190 return nir_f2b1(build, f);
1194 nir_i2b(nir_builder *build, nir_ssa_def *i)
1196 return nir_i2b1(build, i);
1200 nir_b2f(nir_builder *build, nir_ssa_def *b, uint32_t bit_size)
1203 case 64: return nir_b2f64(build, b);
1204 case 32: return nir_b2f32(build, b);
1205 case 16: return nir_b2f16(build, b);
1212 nir_load_barycentric(nir_builder *build, nir_intrinsic_op op,
1215 nir_intrinsic_instr *bary = nir_intrinsic_instr_create(build->shader, op);
1218 nir_builder_instr_insert(build, &bary->instr);
1223 nir_jump(nir_builder *build, nir_jump_type jump_type)
1225 nir_jump_instr *jump = nir_jump_instr_create(build->shader, jump_type);
1226 nir_builder_instr_insert(build, &jump->instr);