[Mesa-dev] [PATCH 05/13] i965/fs: Make emit_single_fb_write take an explicit exec_size

Kenneth Graunke kenneth at whitecape.org
Tue Apr 14 01:30:14 PDT 2015


On Wednesday, April 01, 2015 06:19:16 PM Jason Ekstrand wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_fs.h           |  2 +-
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 16 +++++++++-------
>  2 files changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
> index 278a8ee..4ea579d 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -378,7 +378,7 @@ public:
>     void emit_alpha_test();
>     fs_inst *emit_single_fb_write(fs_reg color1, fs_reg color2,
>                                   fs_reg src0_alpha, unsigned components,
> -                                 bool use_2nd_half = false);
> +                                 unsigned exec_size, bool use_2nd_half = false);
>     void emit_fb_writes();
>     void emit_urb_writes();
>  
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index 0624528..31d2310 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -3589,7 +3589,7 @@ fs_visitor::emit_alpha_test()
>  fs_inst *
>  fs_visitor::emit_single_fb_write(fs_reg color0, fs_reg color1,
>                                   fs_reg src0_alpha, unsigned components,
> -                                 bool use_2nd_half)
> +                                 unsigned exec_size, bool use_2nd_half)
>  {
>     assert(stage == MESA_SHADER_FRAGMENT);
>     brw_wm_prog_data *prog_data = (brw_wm_prog_data*) this->prog_data;
> @@ -3597,7 +3597,7 @@ fs_visitor::emit_single_fb_write(fs_reg color0, fs_reg color1,
>  
>     this->current_annotation = "FB write header";
>     int header_size = 2;
> -   int reg_size = dispatch_width / 8;
> +   int reg_size = exec_size / 8;
>  
>     /* We can potentially have a message length of up to 15, so we have to set
>      * base_mrf to either 0 or 1 in order to fit in m0..m15.
> @@ -3717,7 +3717,7 @@ fs_visitor::emit_single_fb_write(fs_reg color0, fs_reg color1,
>        load = emit(LOAD_PAYLOAD(fs_reg(MRF, 1, BRW_REGISTER_TYPE_F),
>                                 sources, length));
>        write = emit(FS_OPCODE_FB_WRITE);
> -      write->exec_size = dispatch_width;
> +      write->exec_size = exec_size;
>        write->base_mrf = 1;
>     }
>  
> @@ -3742,7 +3742,7 @@ fs_visitor::emit_fb_writes()
>        this->current_annotation = ralloc_asprintf(this->mem_ctx,
>  						 "FB dual-source write");
>        inst = emit_single_fb_write(this->outputs[0], this->dual_src_output,
> -                                  reg_undef, 4);
> +                                  reg_undef, 4, 8);
>        inst->target = 0;
>  
>        /* SIMD16 dual source blending requires to send two SIMD8 dual source
> @@ -3764,7 +3764,7 @@ fs_visitor::emit_fb_writes()
>         */
>        if (dispatch_width == 16) {
>           inst = emit_single_fb_write(this->outputs[0], this->dual_src_output,
> -                                     reg_undef, 4, true);
> +                                     reg_undef, 4, 8, true);
>           inst->target = 0;
>        }
>  
> @@ -3784,7 +3784,8 @@ fs_visitor::emit_fb_writes()
>  
>           inst = emit_single_fb_write(this->outputs[target], reg_undef,
>                                       src0_alpha,
> -                                     this->output_components[target]);
> +                                     this->output_components[target],
> +                                     dispatch_width);
>           inst->target = target;
>        }
>     }
> @@ -3794,7 +3795,8 @@ fs_visitor::emit_fb_writes()
>         * alpha out the pipeline to our null renderbuffer to support
>         * alpha-testing, alpha-to-coverage, and so on.
>         */
> -      inst = emit_single_fb_write(reg_undef, reg_undef, reg_undef, 0);
> +      inst = emit_single_fb_write(reg_undef, reg_undef, reg_undef, 0,
> +                                  dispatch_width);
>        inst->target = 0;
>     }
>  
> 

This seems like a good idea.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150414/c4be2252/attachment.sig>


More information about the mesa-dev mailing list