Lines Matching refs:intr

42 emit_intrinsic_load_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr,
49 offset = ir3_get_src(ctx, &intr->src[2])[0];
51 ldib = ir3_LDIB(b, ir3_ssbo_to_ibo(ctx, intr->src[0]), 0, offset, 0);
52 ldib->dsts[0]->wrmask = MASK(intr->num_components);
53 ldib->cat6.iim_val = intr->num_components;
55 ldib->cat6.type = intr->dest.ssa.bit_size == 16 ? TYPE_U16 : TYPE_U32;
58 ir3_handle_bindless_cat6(ldib, intr->src[0]);
59 ir3_handle_nonuniform(ldib, intr);
61 ir3_split_dest(b, dst, ldib, 0, intr->num_components);
66 emit_intrinsic_store_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
70 unsigned wrmask = nir_intrinsic_write_mask(intr);
73 assert(wrmask == BITFIELD_MASK(intr->num_components));
77 val = ir3_create_collect(b, ir3_get_src(ctx, &intr->src[0]), ncomp);
78 offset = ir3_get_src(ctx, &intr->src[3])[0];
80 stib = ir3_STIB(b, ir3_ssbo_to_ibo(ctx, intr->src[1]), 0, offset, 0, val, 0);
83 stib->cat6.type = intr->src[0].ssa->bit_size == 16 ? TYPE_U16 : TYPE_U32;
86 ir3_handle_bindless_cat6(stib, intr->src[1]);
87 ir3_handle_nonuniform(stib, intr);
110 emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
116 ibo = ir3_ssbo_to_ibo(ctx, intr->src[0]);
118 data = ir3_get_src(ctx, &intr->src[2])[0];
136 if (intr->intrinsic == nir_intrinsic_ssbo_atomic_comp_swap_ir3) {
137 src0 = ir3_get_src(ctx, &intr->src[4])[0];
138 struct ir3_instruction *compare = ir3_get_src(ctx, &intr->src[3])[0];
141 src0 = ir3_get_src(ctx, &intr->src[3])[0];
145 switch (intr->intrinsic) {
187 ir3_handle_bindless_cat6(atomic, intr->src[0]);
201 emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr,
206 struct ir3_instruction *const *coords = ir3_get_src(ctx, &intr->src[1]);
207 unsigned ncoords = ir3_get_image_coords(intr, NULL);
209 ldib = ir3_LDIB(b, ir3_image_to_ibo(ctx, intr->src[0]), 0,
211 ldib->dsts[0]->wrmask = MASK(intr->num_components);
212 ldib->cat6.iim_val = intr->num_components;
214 ldib->cat6.type = ir3_get_type_for_image_intrinsic(intr);
218 ir3_handle_bindless_cat6(ldib, intr->src[0]);
219 ir3_handle_nonuniform(ldib, intr);
221 ir3_split_dest(b, dst, ldib, 0, intr->num_components);
226 emit_intrinsic_store_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
230 struct ir3_instruction *const *value = ir3_get_src(ctx, &intr->src[3]);
231 struct ir3_instruction *const *coords = ir3_get_src(ctx, &intr->src[1]);
232 unsigned ncoords = ir3_get_image_coords(intr, NULL);
233 enum pipe_format format = nir_intrinsic_format(intr);
238 stib = ir3_STIB(b, ir3_image_to_ibo(ctx, intr->src[0]), 0,
243 stib->cat6.type = ir3_get_type_for_image_intrinsic(intr);
247 ir3_handle_bindless_cat6(stib, intr->src[0]);
248 ir3_handle_nonuniform(stib, intr);
255 emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
259 struct ir3_instruction *const *coords = ir3_get_src(ctx, &intr->src[1]);
260 struct ir3_instruction *value = ir3_get_src(ctx, &intr->src[3])[0];
261 unsigned ncoords = ir3_get_image_coords(intr, NULL);
263 ibo = ir3_image_to_ibo(ctx, intr->src[0]);
280 if (intr->intrinsic == nir_intrinsic_image_atomic_comp_swap ||
281 intr->intrinsic == nir_intrinsic_bindless_image_atomic_comp_swap) {
282 struct ir3_instruction *compare = ir3_get_src(ctx, &intr->src[4])[0];
288 switch (intr->intrinsic) {
331 atomic->cat6.type = ir3_get_type_for_image_intrinsic(intr);
335 ir3_handle_bindless_cat6(atomic, intr->src[0]);
348 emit_intrinsic_image_size(struct ir3_context *ctx, nir_intrinsic_instr *intr,
352 struct ir3_instruction *ibo = ir3_image_to_ibo(ctx, intr->src[0]);
355 resinfo->cat6.d = intr->num_components;
359 compile_assert(ctx, intr->num_components <= 3);
361 ir3_handle_bindless_cat6(resinfo, intr->src[0]);
362 ir3_handle_nonuniform(resinfo, intr);
364 ir3_split_dest(b, dst, resinfo, 0, intr->num_components);
369 nir_intrinsic_instr *intr,
373 unsigned dest_components = nir_intrinsic_dest_components(intr);
376 addr = ir3_collect(b, ir3_get_src(ctx, &intr->src[0])[0],
377 ir3_get_src(ctx, &intr->src[0])[1]);
381 bool const_offset_in_bounds = nir_src_is_const(intr->src[1]) &&
382 nir_src_as_int(intr->src[1]) < (1 << 13) &&
383 nir_src_as_int(intr->src[1]) > -(1 << 13);
386 load = ir3_LDG(b, addr, 0, create_immed(b, nir_src_as_int(intr->src[1])),
389 offset = ir3_get_src(ctx, &intr->src[1])[0];
395 load->cat6.type = type_uint_size(intr->dest.ssa.bit_size);
406 nir_intrinsic_instr *intr)
410 unsigned ncomp = nir_intrinsic_src_components(intr, 0);
412 addr = ir3_collect(b, ir3_get_src(ctx, &intr->src[1])[0],
413 ir3_get_src(ctx, &intr->src[1])[1]);
415 value = ir3_create_collect(b, ir3_get_src(ctx, &intr->src[0]), ncomp);
419 bool const_offset_in_bounds = nir_src_is_const(intr->src[2]) &&
420 nir_src_as_int(intr->src[2]) < (1 << 13) &&
421 nir_src_as_int(intr->src[2]) > -(1 << 13);
425 create_immed(b, nir_src_as_int(intr->src[2])), 0,
429 offset = ir3_get_src(ctx, &intr->src[2])[0];
435 stg->cat6.type = type_uint_size(intr->src[0].ssa->bit_size);
445 emit_intrinsic_atomic_global(struct ir3_context *ctx, nir_intrinsic_instr *intr)
449 struct ir3_instruction *value = ir3_get_src(ctx, &intr->src[1])[0];
452 addr = ir3_collect(b, ir3_get_src(ctx, &intr->src[0])[0],
453 ir3_get_src(ctx, &intr->src[0])[1]);
455 if (intr->intrinsic == nir_intrinsic_global_atomic_comp_swap_ir3) {
456 struct ir3_instruction *compare = ir3_get_src(ctx, &intr->src[2])[0];
462 switch (intr->intrinsic) {