[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