From 7ef7738a61ded5632105b8de6f8141307592e20a Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 14 Jul 2016 16:52:10 -0700 Subject: [PATCH] i965: Write gl_FragCoord directly to the destination. This patch makes emit_general_interpolation take a destination register as an argument, and write directly to that. This is simpler than the old approach of ralloc'ing a register, writing to that temporary, and then making the caller emit per-component MOVs to copy it to the actual destination. Signed-off-by: Kenneth Graunke Reviewed-by: Timothy Arceri --- src/mesa/drivers/dri/i965/brw_fs.cpp | 8 ++------ src/mesa/drivers/dri/i965/brw_fs.h | 2 +- src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 4 +--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 940f425b98e..7316247dbd2 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1039,12 +1039,10 @@ fs_visitor::import_uniforms(fs_visitor *v) this->uniforms = v->uniforms; } -fs_reg * -fs_visitor::emit_fragcoord_interpolation() +void +fs_visitor::emit_fragcoord_interpolation(fs_reg wpos) { assert(stage == MESA_SHADER_FRAGMENT); - fs_reg *reg = new(this->mem_ctx) fs_reg(vgrf(glsl_type::vec4_type)); - fs_reg wpos = *reg; /* gl_FragCoord.x */ bld.MOV(wpos, this->pixel_x); @@ -1066,8 +1064,6 @@ fs_visitor::emit_fragcoord_interpolation() /* gl_FragCoord.w: Already set up in emit_interpolation */ bld.MOV(wpos, this->wpos_w); - - return reg; } static enum brw_barycentric_mode diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 29c13cd8028..7998f514155 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -169,7 +169,7 @@ public: void emit_dummy_fs(); void emit_repclear_shader(); - fs_reg *emit_fragcoord_interpolation(); + void emit_fragcoord_interpolation(fs_reg wpos); fs_reg *emit_frontfacing_interpolation(); fs_reg *emit_samplepos_setup(); fs_reg *emit_sampleid_setup(); diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index ccf0d093f5b..898f23ae746 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -62,9 +62,7 @@ fs_visitor::nir_setup_inputs() fs_reg reg; if (var->data.location == VARYING_SLOT_POS) { - reg = *emit_fragcoord_interpolation(); - emit_percomp(bld, fs_inst(BRW_OPCODE_MOV, bld.dispatch_width(), - input, reg), 0xF); + emit_fragcoord_interpolation(input); } else if (var->data.location == VARYING_SLOT_LAYER) { struct brw_reg reg = suboffset(interp_reg(VARYING_SLOT_LAYER, 1), 3); reg.type = BRW_REGISTER_TYPE_D; -- 2.30.2