Lines Matching refs:build
48 nir_builder_init(nir_builder *build, nir_function_impl *impl)
50 memset(build, 0, sizeof(*build));
51 build->exact = false;
52 build->impl = impl;
53 build->shader = impl->function->shader;
128 nir_builder_instr_insert(nir_builder *build, nir_instr *instr)
130 nir_instr_insert(build->cursor, instr);
132 if (build->update_divergence)
133 nir_update_instr_divergence(build->shader, instr);
136 build->cursor = nir_after_instr(instr);
140 nir_builder_last_instr(nir_builder *build)
142 assert(build->cursor.option == nir_cursor_after_instr);
143 return build->cursor.instr;
147 nir_builder_cf_insert(nir_builder *build, nir_cf_node *cf)
149 nir_cf_node_insert(build->cursor, cf);
153 nir_builder_is_inside_cf(nir_builder *build, nir_cf_node *cf_node)
155 nir_block *block = nir_cursor_current_block(build->cursor);
164 nir_push_if_src(nir_builder *build, nir_src condition)
166 nir_if *nif = nir_if_create(build->shader);
168 nir_builder_cf_insert(build, &nif->cf_node);
169 build->cursor = nir_before_cf_list(&nif->then_list);
174 nir_push_if(nir_builder *build, nir_ssa_def *condition)
176 return nir_push_if_src(build, nir_src_for_ssa(condition));
180 nir_push_else(nir_builder *build, nir_if *nif)
183 assert(nir_builder_is_inside_cf(build, &nif->cf_node));
185 nir_block *block = nir_cursor_current_block(build->cursor);
188 build->cursor = nir_before_cf_list(&nif->else_list);
193 nir_pop_if(nir_builder *build, nir_if *nif)
196 assert(nir_builder_is_inside_cf(build, &nif->cf_node));
198 nir_block *block = nir_cursor_current_block(build->cursor);
201 build->cursor = nir_after_cf_node(&nif->cf_node);
205 nir_if_phi(nir_builder *build, nir_ssa_def *then_def, nir_ssa_def *else_def)
207 nir_block *block = nir_cursor_current_block(build->cursor);
210 nir_phi_instr *phi = nir_phi_instr_create(build->shader);
219 nir_builder_instr_insert(build, &phi->instr);
225 nir_push_loop(nir_builder *build)
227 nir_loop *loop = nir_loop_create(build->shader);
228 nir_builder_cf_insert(build, &loop->cf_node);
229 build->cursor = nir_before_cf_list(&loop->body);
234 nir_pop_loop(nir_builder *build, nir_loop *loop)
237 assert(nir_builder_is_inside_cf(build, &loop->cf_node));
239 nir_block *block = nir_cursor_current_block(build->cursor);
242 build->cursor = nir_after_cf_node(&loop->cf_node);
246 nir_ssa_undef(nir_builder *build, unsigned num_components, unsigned bit_size)
249 nir_ssa_undef_instr_create(build->shader, num_components, bit_size);
253 nir_instr_insert(nir_before_cf_list(&build->impl->body), &undef->instr);
254 if (build->update_divergence)
255 nir_update_instr_divergence(build->shader, &undef->instr);
261 nir_build_imm(nir_builder *build, unsigned num_components,
265 nir_load_const_instr_create(build->shader, num_components, bit_size);
271 nir_builder_instr_insert(build, &load_const->instr);
277 nir_imm_zero(nir_builder *build, unsigned num_components, unsigned bit_size)
280 nir_load_const_instr_create(build->shader, num_components, bit_size);
284 nir_builder_instr_insert(build, &load_const->instr);
290 nir_imm_boolN_t(nir_builder *build, bool x, unsigned bit_size)
293 return nir_build_imm(build, 1, bit_size, &v);
297 nir_imm_bool(nir_builder *build, bool x)
299 return nir_imm_boolN_t(build, x, 1);
303 nir_imm_true(nir_builder *build)
305 return nir_imm_bool(build, true);
309 nir_imm_false(nir_builder *build)
311 return nir_imm_bool(build, false);
315 nir_imm_floatN_t(nir_builder *build, double x, unsigned bit_size)
318 return nir_build_imm(build, 1, bit_size, &v);
322 nir_imm_float16(nir_builder *build, float x)
324 return nir_imm_floatN_t(build, x, 16);
328 nir_imm_float(nir_builder *build, float x)
330 return nir_imm_floatN_t(build, x, 32);
334 nir_imm_double(nir_builder *build, double x)
336 return nir_imm_floatN_t(build, x, 64);
340 nir_imm_vec2(nir_builder *build, float x, float y)
346 return nir_build_imm(build, 2, 32, v);
350 nir_imm_vec3(nir_builder *build, float x, float y, float z)
357 return nir_build_imm(build, 3, 32, v);
361 nir_imm_vec4(nir_builder *build, float x, float y, float z, float w)
370 return nir_build_imm(build, 4, 32, v);
374 nir_imm_vec4_16(nir_builder *build, float x, float y, float z, float w)
383 return nir_build_imm(build, 4, 16, v);
387 nir_imm_intN_t(nir_builder *build, uint64_t x, unsigned bit_size)
390 return nir_build_imm(build, 1, bit_size, &v);
394 nir_imm_int(nir_builder *build, int x)
396 return nir_imm_intN_t(build, x, 32);
400 nir_imm_int64(nir_builder *build, int64_t x)
402 return nir_imm_intN_t(build, x, 64);
406 nir_imm_ivec2(nir_builder *build, int x, int y)
413 return nir_build_imm(build, 2, 32, v);
417 nir_imm_ivec3(nir_builder *build, int x, int y, int z)
425 return nir_build_imm(build, 3, 32, v);
429 nir_imm_ivec4(nir_builder *build, int x, int y, int z, int w)
438 return nir_build_imm(build, 4, 32, v);
442 nir_builder_alu_instr_finish_and_insert(nir_builder *build, nir_alu_instr *instr)
446 instr->exact = build->exact;
498 nir_builder_instr_insert(build, &instr->instr);
504 nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
507 nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
519 return nir_builder_alu_instr_finish_and_insert(build, instr);
524 nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs)
527 nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
534 return nir_builder_alu_instr_finish_and_insert(build, instr);
539 nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index,
542 nir_intrinsic_instr *load = nir_intrinsic_instr_create(build->shader, op);
551 nir_builder_instr_insert(build, &load->instr);
559 nir_vec(nir_builder *build, nir_ssa_def **comp, unsigned num_components)
561 return nir_build_alu_src_arr(build, nir_op_vec(num_components), comp);
565 nir_mov_alu(nir_builder *build, nir_alu_src src, unsigned num_components)
578 nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_mov);
581 mov->exact = build->exact;
584 nir_builder_instr_insert(build, &mov->instr);
593 nir_swizzle(nir_builder *build, nir_ssa_def *src, const unsigned *swiz,
610 return nir_mov_alu(build, alu_src, num_components);
615 nir_fdot(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1)
619 case 1: return nir_fmul(build, src0, src1);
620 case 2: return nir_fdot2(build, src0, src1);
621 case 3: return nir_fdot3(build, src0, src1);
622 case 4: return nir_fdot4(build, src0, src1);
623 case 5: return nir_fdot5(build, src0, src1);
624 case 8: return nir_fdot8(build, src0, src1);
625 case 16: return nir_fdot16(build, src0, src1);
793 nir_i2i(nir_builder *build, nir_ssa_def *x, unsigned dest_bit_size)
799 case 64: return nir_i2i64(build, x);
800 case 32: return nir_i2i32(build, x);
801 case 16: return nir_i2i16(build, x);
802 case 8: return nir_i2i8(build, x);
808 nir_u2u(nir_builder *build, nir_ssa_def *x, unsigned dest_bit_size)
814 case 64: return nir_u2u64(build, x);
815 case 32: return nir_u2u32(build, x);
816 case 16: return nir_u2u16(build, x);
817 case 8: return nir_u2u8(build, x);
823 nir_iadd_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
831 return nir_iadd(build, x, nir_imm_intN_t(build, y, x->bit_size));
853 nir_ieq_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
855 return nir_ieq(build, x, nir_imm_intN_t(build, y, x->bit_size));
860 nir_isub_imm(nir_builder *build, uint64_t y, nir_ssa_def *x)
862 return nir_isub(build, nir_imm_intN_t(build, y, x->bit_size), x);
866 _nir_mul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y, bool amul)
872 return nir_imm_intN_t(build, 0, x->bit_size);
875 } else if (!build->shader->options->lower_bitops &&
877 return nir_ishl(build, x, nir_imm_int(build, ffsll(y) - 1));
879 return nir_amul(build, x, nir_imm_intN_t(build, y, x->bit_size));
881 return nir_imul(build, x, nir_imm_intN_t(build, y, x->bit_size));
886 nir_imul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
888 return _nir_mul_imm(build, x, y, false);
892 nir_amul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
894 return _nir_mul_imm(build, x, y, true);
898 nir_fadd_imm(nir_builder *build, nir_ssa_def *x, double y)
900 return nir_fadd(build, x, nir_imm_floatN_t(build, y, x->bit_size));
904 nir_fmul_imm(nir_builder *build, nir_ssa_def *x, double y)
906 return nir_fmul(build, x, nir_imm_floatN_t(build, y, x->bit_size));
910 nir_iand_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
916 return nir_imm_intN_t(build, 0, x->bit_size);
920 return nir_iand(build, x, nir_imm_intN_t(build, y, x->bit_size));
925 nir_ishr_imm(nir_builder *build, nir_ssa_def *x, uint32_t y)
930 return nir_ishr(build, x, nir_imm_int(build, y));
935 nir_ushr_imm(nir_builder *build, nir_ssa_def *x, uint32_t y)
940 return nir_ushr(build, x, nir_imm_int(build, y));
945 nir_udiv_imm(nir_builder *build, nir_ssa_def *x, uint64_t y)
953 return nir_ushr_imm(build, x, ffsll(y) - 1);
955 return nir_udiv(build, x, nir_imm_intN_t(build, y, x->bit_size));
981 nir_ffma_imm12(nir_builder *build, nir_ssa_def *src0, double src1, double src2)
983 if (build->shader->options->avoid_ternary_with_two_constants)
984 return nir_fadd_imm(build, nir_fmul_imm(build, src0, src1), src2);
986 return nir_ffma(build, src0, nir_imm_floatN_t(build, src1, src0->bit_size),
987 nir_imm_floatN_t(build, src2, src0->bit_size));
991 nir_ffma_imm1(nir_builder *build, nir_ssa_def *src0, double src1, nir_ssa_def *src2)
993 return nir_ffma(build, src0, nir_imm_floatN_t(build, src1, src0->bit_size), src2);
997 nir_ffma_imm2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, double src2)
999 return nir_ffma(build, src0, src1, nir_imm_floatN_t(build, src2, src0->bit_size));
1003 nir_a_minus_bc(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1,
1006 return nir_ffma(build, nir_fneg(build, src1), src2, src0);
1230 nir_ssa_for_src(nir_builder *build, nir_src src, int num_components)
1242 return nir_mov_alu(build, alu, num_components);
1250 nir_ssa_for_alu_src(nir_builder *build, nir_alu_instr *instr, unsigned srcn)
1257 return nir_mov_alu(build, *src, num_components);
1269 nir_build_deref_var(nir_builder *build, nir_variable *var)
1272 nir_deref_instr_create(build->shader, nir_deref_type_var);
1279 nir_get_ptr_bitsize(build->shader), NULL);
1281 nir_builder_instr_insert(build, &deref->instr);
1287 nir_build_deref_array(nir_builder *build, nir_deref_instr *parent,
1297 nir_deref_instr_create(build->shader, nir_deref_type_array);
1308 nir_builder_instr_insert(build, &deref->instr);
1314 nir_build_deref_array_imm(nir_builder *build, nir_deref_instr *parent,
1318 nir_ssa_def *idx_ssa = nir_imm_intN_t(build, index,
1321 return nir_build_deref_array(build, parent, idx_ssa);
1325 nir_build_deref_ptr_as_array(nir_builder *build, nir_deref_instr *parent,
1335 nir_deref_instr_create(build->shader, nir_deref_type_ptr_as_array);
1346 nir_builder_instr_insert(build, &deref->instr);
1352 nir_build_deref_array_wildcard(nir_builder *build, nir_deref_instr *parent)
1358 nir_deref_instr_create(build->shader, nir_deref_type_array_wildcard);
1368 nir_builder_instr_insert(build, &deref->instr);
1374 nir_build_deref_struct(nir_builder *build, nir_deref_instr *parent,
1380 nir_deref_instr_create(build->shader, nir_deref_type_struct);
1391 nir_builder_instr_insert(build, &deref->instr);
1397 nir_build_deref_cast(nir_builder *build, nir_ssa_def *parent,
1402 nir_deref_instr_create(build->shader, nir_deref_type_cast);
1412 nir_builder_instr_insert(build, &deref->instr);
1418 nir_alignment_deref_cast(nir_builder *build, nir_deref_instr *parent,
1422 nir_deref_instr_create(build->shader, nir_deref_type_cast);
1435 nir_builder_instr_insert(build, &deref->instr);
1493 nir_load_reg(nir_builder *build, nir_register *reg)
1495 return nir_ssa_for_src(build, nir_src_for_reg(reg), reg->num_components);
1499 nir_store_reg(nir_builder *build, nir_register *reg,
1505 nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_mov);
1509 nir_builder_instr_insert(build, &mov->instr);
1513 nir_load_deref_with_access(nir_builder *build, nir_deref_instr *deref,
1516 return nir_build_load_deref(build, glsl_get_vector_elements(deref->type),
1523 nir_load_deref(nir_builder *build, nir_deref_instr *deref)
1525 return nir_load_deref_with_access(build, deref, (enum gl_access_qualifier)0);
1529 nir_store_deref_with_access(nir_builder *build, nir_deref_instr *deref,
1534 nir_build_store_deref(build, &deref->dest.ssa, value, writemask, access);
1539 nir_store_deref(nir_builder *build, nir_deref_instr *deref,
1542 nir_store_deref_with_access(build, deref, value, writemask,
1547 nir_copy_deref_with_access(nir_builder *build, nir_deref_instr *dest,
1552 nir_build_copy_deref(build, &dest->dest.ssa, &src->dest.ssa, dest_access, src_access);
1557 nir_copy_deref(nir_builder *build, nir_deref_instr *dest, nir_deref_instr *src)
1559 nir_copy_deref_with_access(build, dest, src,
1565 nir_memcpy_deref_with_access(nir_builder *build, nir_deref_instr *dest,
1570 nir_build_memcpy_deref(build, &dest->dest.ssa, &src->dest.ssa,
1576 nir_memcpy_deref(nir_builder *build, nir_deref_instr *dest,
1579 nir_memcpy_deref_with_access(build, dest, src, size,
1585 nir_load_var(nir_builder *build, nir_variable *var)
1587 return nir_load_deref(build, nir_build_deref_var(build, var));
1591 nir_store_var(nir_builder *build, nir_variable *var, nir_ssa_def *value,
1594 nir_store_deref(build, nir_build_deref_var(build, var), value, writemask);
1598 nir_copy_var(nir_builder *build, nir_variable *dest, nir_variable *src)
1600 nir_copy_deref(build, nir_build_deref_var(build, dest),
1601 nir_build_deref_var(build, src));
1606 nir_load_global(nir_builder *build, nir_ssa_def *addr, unsigned align,
1610 nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_global);
1616 nir_builder_instr_insert(build, &load->instr);
1622 nir_store_global(nir_builder *build, nir_ssa_def *addr, unsigned align,
1626 nir_intrinsic_instr_create(build->shader, nir_intrinsic_store_global);
1633 nir_builder_instr_insert(build, &store->instr);
1638 nir_load_global_constant(nir_builder *build, nir_ssa_def *addr, unsigned align,
1642 nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_global_constant);
1648 nir_builder_instr_insert(build, &load->instr);
1654 nir_load_param(nir_builder *build, uint32_t param_idx)
1656 assert(param_idx < build->impl->function->num_params);
1657 nir_parameter *param = &build->impl->function->params[param_idx];
1658 return nir_build_load_param(build, param->num_components, param->bit_size, param_idx);
1696 nir_f2b(nir_builder *build, nir_ssa_def *f)
1698 return nir_f2b1(build, f);
1702 nir_i2b(nir_builder *build, nir_ssa_def *i)
1704 return nir_i2b1(build, i);
1708 nir_b2f(nir_builder *build, nir_ssa_def *b, uint32_t bit_size)
1711 case 64: return nir_b2f64(build, b);
1712 case 32: return nir_b2f32(build, b);
1713 case 16: return nir_b2f16(build, b);
1720 nir_b2i(nir_builder *build, nir_ssa_def *b, uint32_t bit_size)
1723 case 64: return nir_b2i64(build, b);
1724 case 32: return nir_b2i32(build, b);
1725 case 16: return nir_b2i16(build, b);
1726 case 8: return nir_b2i8(build, b);
1732 nir_load_barycentric(nir_builder *build, nir_intrinsic_op op,
1736 nir_intrinsic_instr *bary = nir_intrinsic_instr_create(build->shader, op);
1739 nir_builder_instr_insert(build, &bary->instr);
1744 nir_jump(nir_builder *build, nir_jump_type jump_type)
1747 nir_jump_instr *jump = nir_jump_instr_create(build->shader, jump_type);
1748 nir_builder_instr_insert(build, &jump->instr);
1752 nir_goto(nir_builder *build, struct nir_block *target)
1754 assert(!build->impl->structured);
1755 nir_jump_instr *jump = nir_jump_instr_create(build->shader, nir_jump_goto);
1757 nir_builder_instr_insert(build, &jump->instr);
1761 nir_goto_if(nir_builder *build, struct nir_block *target, nir_src cond,
1764 assert(!build->impl->structured);
1765 nir_jump_instr *jump = nir_jump_instr_create(build->shader, nir_jump_goto_if);
1769 nir_builder_instr_insert(build, &jump->instr);