[Mesa-dev] [PATCH 2/3] i965/vec4/nir: remove emit_untyped_surface_read and emit_untyped_atomic at brw_vec4_visitor
Francisco Jerez
currojerez at riseup.net
Sat Mar 5 02:43:56 UTC 2016
Alejandro PiƱeiro <apinheiro at 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 <currojerez at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160304/d49fe25d/attachment.sig>
More information about the mesa-dev
mailing list