[Mesa-dev] [PATCH 1/6] i965/vec4: Move can_do_writemask to vec4_instruction
Michael Schellenberger Costa
mschellenbergercosta at googlemail.com
Wed Apr 6 07:58:38 UTC 2016
Hi Jason,
Am 06.04.2016 um 06:11 schrieb Jason Ekstrand:
> ---
> src/mesa/drivers/dri/i965/brw_ir_vec4.h | 1 +
> src/mesa/drivers/dri/i965/brw_vec4.cpp | 28 +++++++++++++++++++
> .../dri/i965/brw_vec4_dead_code_eliminate.cpp | 31 +---------------------
> 3 files changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
> index 2b6872e..81b6a13 100644
> --- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
> @@ -172,6 +172,7 @@ public:
> int swizzle, int swizzle_mask);
> void reswizzle(int dst_writemask, int swizzle);
> bool can_do_source_mods(const struct brw_device_info *devinfo);
> + bool can_do_writemask(const struct brw_device_info *devinfo);
> bool can_change_types() const;
> bool has_source_and_destination_hazard() const;
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> index 0025343..4d0efa8 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> @@ -239,6 +239,34 @@ vec4_instruction::can_do_source_mods(const struct brw_device_info *devinfo)
> }
>
> bool
> +vec4_instruction::can_do_writemask(const struct brw_device_info *devinfo)
> +{
> + switch (opcode) {
> + case SHADER_OPCODE_GEN4_SCRATCH_READ:
> + case VS_OPCODE_PULL_CONSTANT_LOAD:
> + case VS_OPCODE_PULL_CONSTANT_LOAD_GEN7:
> + case VS_OPCODE_SET_SIMD4X2_HEADER_GEN9:
Can you order the stages alphabetically here, that improves readability
a lot?
Michael
> + case TCS_OPCODE_SET_INPUT_URB_OFFSETS:
> + case TCS_OPCODE_SET_OUTPUT_URB_OFFSETS:
> + case TES_OPCODE_CREATE_INPUT_READ_HEADER:
> + case TES_OPCODE_ADD_INDIRECT_URB_OFFSET:
> + case VEC4_OPCODE_URB_READ:
> + return false;
> + default:
> + /* The MATH instruction on Gen6 only executes in align1 mode, which does
> + * not support writemasking.
> + */
> + if (devinfo->gen == 6 && is_math())
> + return false;
> +
> + if (is_tex())
> + return false;
> +
> + return true;
> + }
> +}
> +
> +bool
> vec4_instruction::can_change_types() const
> {
> return dst.type == src[0].type &&
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> index 166bc17..c643212 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> @@ -36,35 +36,6 @@
>
> using namespace brw;
>
> -static bool
> -can_do_writemask(const struct brw_device_info *devinfo,
> - const vec4_instruction *inst)
> -{
> - switch (inst->opcode) {
> - case SHADER_OPCODE_GEN4_SCRATCH_READ:
> - case VS_OPCODE_PULL_CONSTANT_LOAD:
> - case VS_OPCODE_PULL_CONSTANT_LOAD_GEN7:
> - case VS_OPCODE_SET_SIMD4X2_HEADER_GEN9:
> - case TCS_OPCODE_SET_INPUT_URB_OFFSETS:
> - case TCS_OPCODE_SET_OUTPUT_URB_OFFSETS:
> - case TES_OPCODE_CREATE_INPUT_READ_HEADER:
> - case TES_OPCODE_ADD_INDIRECT_URB_OFFSET:
> - case VEC4_OPCODE_URB_READ:
> - return false;
> - default:
> - /* The MATH instruction on Gen6 only executes in align1 mode, which does
> - * not support writemasking.
> - */
> - if (devinfo->gen == 6 && inst->is_math())
> - return false;
> -
> - if (inst->is_tex())
> - return false;
> -
> - return true;
> - }
> -}
> -
> bool
> vec4_visitor::dead_code_eliminate()
> {
> @@ -101,7 +72,7 @@ vec4_visitor::dead_code_eliminate()
> /* If the instruction can't do writemasking, then it's all or
> * nothing.
> */
> - if (!can_do_writemask(devinfo, inst)) {
> + if (!inst->can_do_writemask(devinfo)) {
> bool result = result_live[0] | result_live[1] |
> result_live[2] | result_live[3];
> result_live[0] = result;
More information about the mesa-dev
mailing list