Iago Toral Quiroga <[email protected]> writes: > In the vec4 backend the generator sets the execution size for all > instructions to 8, however, we will have to split certain DF instructions > to have an execution size of 4, so we need to indicate this explicitly in the > IR for the generator to set the right execution size for them. > > We will use this in a later patch when we implement a SIMD splitting pass. > --- > src/mesa/drivers/dri/i965/brw_ir_vec4.h | 2 ++ > src/mesa/drivers/dri/i965/brw_vec4_generator.cpp | 3 +++ > src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 1 + > 3 files changed, 6 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h > b/src/mesa/drivers/dri/i965/brw_ir_vec4.h > index 81b6a13..721772e 100644 > --- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h > +++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h > @@ -166,6 +166,8 @@ public: > bool sol_final_write; /**< gen6: send commit message */ > unsigned sol_vertex; /**< gen6: used for setting dst index in SVB header > */ > > + uint8_t exec_size; > +
How about we move this up into backend_instruction instead? It has the
same semantics as the FS back-end's so it would make sense to share it.
> bool is_send_from_grf();
> unsigned regs_read(unsigned arg) const;
> bool can_reswizzle(const struct brw_device_info *devinfo, int
> dst_writemask,
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> index d7e6e2d..c6e040e 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> @@ -1526,6 +1526,9 @@ generate_code(struct brw_codegen *p,
> }
> brw_set_default_exec_size(p, BRW_EXECUTE_4);
> fix_exec_size = true;
Ugh, the above seems like a nasty hack (which seems to have caused
trouble with double-precision you had to work around in PATCH 14) to
sidestep the missing support for arbitrary execution sizes in the vec4
back-end. I'd rather drop the hack above and set
vec4_instruction::exec_size to the right size from the visitor when
an execution size other than the default is intended.
> + } else {
> + assert(inst->exec_size == 8 || inst->exec_size == 4);
Execution sizes other than these can be valid and potentially useful, I
think I'd drop this assertion.
> + brw_set_default_exec_size(p, cvt(inst->exec_size) - 1);
> }
>
> switch (inst->opcode) {
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 652b453..265bb17 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -55,6 +55,7 @@ vec4_instruction::vec4_instruction(enum opcode opcode,
> const dst_reg &dst,
> this->mlen = 0;
> this->base_mrf = 0;
> this->offset = 0;
> + this->exec_size = 8;
> this->annotation = NULL;
> }
>
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
