Alejandro Piñeiro <apinhe...@igalia.com> writes: > surface_access emit_untyped_read and emit_untyped_atomic provides the same > functionality. > --- > > This patch also fixes the indentation at switch (instr->intrinsic). > > src/mesa/drivers/dri/i965/brw_vec4.h | 7 ---- > src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 39 ++++++++++++------ > src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 55 > -------------------------- > 3 files changed, 26 insertions(+), 75 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h > b/src/mesa/drivers/dri/i965/brw_vec4.h > index 633f13c..1e9f1e2 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4.h > +++ b/src/mesa/drivers/dri/i965/brw_vec4.h > @@ -276,13 +276,6 @@ public: > void emit_shader_time_end(); > void emit_shader_time_write(int shader_time_subindex, src_reg value); > > - void emit_untyped_atomic(unsigned atomic_op, unsigned surf_index, > - dst_reg dst, src_reg offset, src_reg src0, > - src_reg src1); > - > - void emit_untyped_surface_read(unsigned surf_index, dst_reg dst, > - src_reg offset); > - > src_reg get_scratch_offset(bblock_t *block, vec4_instruction *inst, > src_reg *reladdr, int reg_offset); > src_reg get_pull_constant_offset(bblock_t *block, vec4_instruction *inst, > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > index 9b721e5..8ae8d9e 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > @@ -724,24 +724,37 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr > *instr) > (unsigned) instr->const_index[0]; > src_reg offset = get_nir_src(instr->src[0], nir_type_int, > instr->num_components); > + src_reg surface = brw_imm_ud(surf_index);
const. > + const vec4_builder bld = > + vec4_builder(this).at_end().annotate(current_annotation, base_ir); > + src_reg tmp; > + > dest = get_nir_dest(instr->dest); > > switch (instr->intrinsic) { > - case nir_intrinsic_atomic_counter_inc: > - emit_untyped_atomic(BRW_AOP_INC, surf_index, dest, offset, > - src_reg(), src_reg()); > - break; > - case nir_intrinsic_atomic_counter_dec: > - emit_untyped_atomic(BRW_AOP_PREDEC, surf_index, dest, offset, > - src_reg(), src_reg()); > - break; > - case nir_intrinsic_atomic_counter_read: > - emit_untyped_surface_read(surf_index, dest, offset); > - break; > - default: > - unreachable("Unreachable"); > + case nir_intrinsic_atomic_counter_inc: > + tmp = emit_untyped_atomic(bld, surface, offset, > + src_reg(), src_reg(), > + 1, 1, > + BRW_AOP_INC, > + BRW_PREDICATE_NONE); No need to specify a predicate. > + break; > + case nir_intrinsic_atomic_counter_dec: > + tmp = emit_untyped_atomic(bld, surface, offset, > + src_reg(), src_reg(), > + 1, 1, > + BRW_AOP_PREDEC, > + BRW_PREDICATE_NONE); Same here. > + break; > + case nir_intrinsic_atomic_counter_read: > + tmp = emit_untyped_read(bld, surface, offset, 1, 1); > + break; > + default: > + unreachable("Unreachable"); > } > > + dest.type = tmp.type; > + bld.MOV(dest, tmp); You can use retype(dest, tmp.type). With these nit-picks addressed: Reviewed-by: Francisco Jerez <curroje...@riseup.net> > brw_mark_surface_used(stage_prog_data, surf_index); > break; > } > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp > index cfd4d9b..d30330a 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp > @@ -1115,61 +1115,6 @@ vec4_visitor::gs_end_primitive() > } > > void > -vec4_visitor::emit_untyped_atomic(unsigned atomic_op, unsigned surf_index, > - dst_reg dst, src_reg surf_offset, > - src_reg src0, src_reg src1) > -{ > - unsigned mlen = 1 + (src0.file != BAD_FILE) + (src1.file != BAD_FILE); > - src_reg src_payload(this, glsl_type::uint_type, mlen); > - dst_reg payload(src_payload); > - payload.writemask = WRITEMASK_X; > - > - /* Set the atomic operation offset. */ > - emit(MOV(offset(payload, 0), surf_offset)); > - unsigned i = 1; > - > - /* Set the atomic operation arguments. */ > - if (src0.file != BAD_FILE) { > - emit(MOV(offset(payload, i), src0)); > - i++; > - } > - > - if (src1.file != BAD_FILE) { > - emit(MOV(offset(payload, i), src1)); > - i++; > - } > - > - /* Emit the instruction. Note that this maps to the normal SIMD8 > - * untyped atomic message on Ivy Bridge, but that's OK because > - * unused channels will be masked out. > - */ > - vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_ATOMIC, dst, > - src_payload, > - brw_imm_ud(surf_index), > brw_imm_ud(atomic_op)); > - inst->mlen = mlen; > -} > - > -void > -vec4_visitor::emit_untyped_surface_read(unsigned surf_index, dst_reg dst, > - src_reg surf_offset) > -{ > - dst_reg offset(this, glsl_type::uint_type); > - offset.writemask = WRITEMASK_X; > - > - /* Set the surface read offset. */ > - emit(MOV(offset, surf_offset)); > - > - /* Emit the instruction. Note that this maps to the normal SIMD8 > - * untyped surface read message, but that's OK because unused > - * channels will be masked out. > - */ > - vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_SURFACE_READ, dst, > - src_reg(offset), > - brw_imm_ud(surf_index), brw_imm_d(1)); > - inst->mlen = 1; > -} > - > -void > vec4_visitor::emit_ndc_computation() > { > if (output_reg[VARYING_SLOT_POS].file == BAD_FILE) > -- > 2.5.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev