--- 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; } -- 2.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev