[Mesa-dev] [PATCH v3 18/24] i965/vec4: adapt setup_imm_df() to allow inserting instructions before another one
Francisco Jerez
currojerez at riseup.net
Sat Mar 4 00:16:39 UTC 2017
Samuel Iglesias Gonsálvez <siglesias at igalia.com> writes:
> Add a new setup_imm_df() that allows the insertion of the instructions
> before another one. This will be used in the lowering passes for DF
> instructions.
>
> v2:
> - Adapt emission of DIM instruction too.
>
> Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
> ---
> src/mesa/drivers/dri/i965/brw_vec4.h | 2 ++
> src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 26 +++++++++++++++++++++-----
> 2 files changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
> index 29b203af89e..01b928ef4a7 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
> @@ -328,6 +328,8 @@ public:
> brw_reg_type single_type);
>
> src_reg setup_imm_df(double v);
> + src_reg setup_imm_df(double v, struct bblock_t *block,
> + vec4_instruction *inst);
>
> vec4_instruction *shuffle_64bit_data(dst_reg dst, src_reg src,
> bool for_write,
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index 2127415be7a..e99db2cef8e 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -1213,6 +1213,12 @@ vec4_visitor::emit_conversion_to_double(dst_reg dst, src_reg src,
> src_reg
> vec4_visitor::setup_imm_df(double v)
> {
> + return setup_imm_df(v, NULL, NULL);
> +}
> +
> +src_reg
> +vec4_visitor::setup_imm_df(double v, struct bblock_t *block, brw::vec4_instruction *inst)
> +{
> assert(devinfo->gen >= 7);
>
> if (devinfo->gen >= 8)
> @@ -1223,7 +1229,10 @@ vec4_visitor::setup_imm_df(double v)
> */
> if (devinfo->is_haswell) {
> dst_reg dst = retype(dst_reg(VGRF, alloc.allocate(2)), BRW_REGISTER_TYPE_DF);
> - emit(DIM(dst, brw_imm_df(v)))->force_writemask_all = true;
> + if (block)
> + emit_before(block, inst, DIM(dst, brw_imm_df(v)))->force_writemask_all = true;
> + else
> + emit(DIM(dst, brw_imm_df(v)))->force_writemask_all = true;
> return swizzle(src_reg(retype(dst, BRW_REGISTER_TYPE_DF)), BRW_SWIZZLE_XXXX);
> }
>
> @@ -1248,10 +1257,17 @@ vec4_visitor::setup_imm_df(double v)
> const dst_reg tmp =
> retype(dst_reg(VGRF, alloc.allocate(2)), BRW_REGISTER_TYPE_UD);
> for (int n = 0; n < 2; n++) {
> - emit(MOV(writemask(offset(tmp, 8, n), WRITEMASK_X), brw_imm_ud(di.i1)))
> - ->force_writemask_all = true;
> - emit(MOV(writemask(offset(tmp, 8, n), WRITEMASK_Y), brw_imm_ud(di.i2)))
> - ->force_writemask_all = true;
> + if (block) {
> + emit_before(block, inst, MOV(writemask(offset(tmp, 8, n), WRITEMASK_X), brw_imm_ud(di.i1)))
> + ->force_writemask_all = true;
> + emit_before(block, inst, MOV(writemask(offset(tmp, 8, n), WRITEMASK_Y), brw_imm_ud(di.i2)))
> + ->force_writemask_all = true;
> + } else {
> + emit(MOV(writemask(offset(tmp, 8, n), WRITEMASK_X), brw_imm_ud(di.i1)))
> + ->force_writemask_all = true;
> + emit(MOV(writemask(offset(tmp, 8, n), WRITEMASK_Y), brw_imm_ud(di.i2)))
> + ->force_writemask_all = true;
> + }
This would be substantially easier if you used the builder interface,
you wouldn't even need to add any additional arguments to setup_imm_df()
and the conditional block would be unnecessary.
> }
>
> return swizzle(src_reg(retype(tmp, BRW_REGISTER_TYPE_DF)), BRW_SWIZZLE_XXXX);
> --
> 2.11.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/20170303/a5260630/attachment.sig>
More information about the mesa-dev
mailing list