mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
i965/fs: Get rid of fs_visitor::do_dual_src.
This boolean flag was being used for two different things: - To set the brw_wm_prog_data::dual_src_blend flag. Instead we can just set it based on whether the dual_src_output register is valid, which will be the case if the shader writes the secondary blending color. - To decide whether to call emit_single_fb_write() once, or in a loop that would iterate only once, which seems pretty useless. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
aee3d8f0d9
commit
4a87e4ade7
3 changed files with 14 additions and 26 deletions
|
|
@ -316,7 +316,6 @@ public:
|
|||
fs_reg sample_mask;
|
||||
fs_reg outputs[VARYING_SLOT_MAX];
|
||||
fs_reg dual_src_output;
|
||||
bool do_dual_src;
|
||||
int first_non_payload_grf;
|
||||
/** Either BRW_MAX_GRF or GEN7_MRF_HACK_START */
|
||||
unsigned max_grf;
|
||||
|
|
|
|||
|
|
@ -103,12 +103,10 @@ fs_visitor::nir_setup_outputs()
|
|||
if (key->force_dual_color_blend &&
|
||||
var->data.location == FRAG_RESULT_DATA1) {
|
||||
this->dual_src_output = reg;
|
||||
this->do_dual_src = true;
|
||||
} else if (var->data.index > 0) {
|
||||
assert(var->data.location == FRAG_RESULT_DATA0);
|
||||
assert(var->data.index == 1);
|
||||
this->dual_src_output = reg;
|
||||
this->do_dual_src = true;
|
||||
} else if (var->data.location == FRAG_RESULT_COLOR) {
|
||||
/* Writing gl_FragColor outputs to all color regions. */
|
||||
for (unsigned int i = 0; i < MAX2(key->nr_color_regions, 1); i++) {
|
||||
|
|
|
|||
|
|
@ -469,33 +469,25 @@ fs_visitor::emit_fb_writes()
|
|||
"in SIMD16+ mode.\n");
|
||||
}
|
||||
|
||||
if (do_dual_src) {
|
||||
const fs_builder abld = bld.annotate("FB dual-source write");
|
||||
for (int target = 0; target < key->nr_color_regions; target++) {
|
||||
/* Skip over outputs that weren't written. */
|
||||
if (this->outputs[target].file == BAD_FILE)
|
||||
continue;
|
||||
|
||||
inst = emit_single_fb_write(abld, this->outputs[0],
|
||||
this->dual_src_output, reg_undef, 4);
|
||||
inst->target = 0;
|
||||
const fs_builder abld = bld.annotate(
|
||||
ralloc_asprintf(this->mem_ctx, "FB write target %d", target));
|
||||
|
||||
prog_data->dual_src_blend = true;
|
||||
} else {
|
||||
for (int target = 0; target < key->nr_color_regions; target++) {
|
||||
/* Skip over outputs that weren't written. */
|
||||
if (this->outputs[target].file == BAD_FILE)
|
||||
continue;
|
||||
fs_reg src0_alpha;
|
||||
if (devinfo->gen >= 6 && key->replicate_alpha && target != 0)
|
||||
src0_alpha = offset(outputs[0], bld, 3);
|
||||
|
||||
const fs_builder abld = bld.annotate(
|
||||
ralloc_asprintf(this->mem_ctx, "FB write target %d", target));
|
||||
|
||||
fs_reg src0_alpha;
|
||||
if (devinfo->gen >= 6 && key->replicate_alpha && target != 0)
|
||||
src0_alpha = offset(outputs[0], bld, 3);
|
||||
|
||||
inst = emit_single_fb_write(abld, this->outputs[target], reg_undef,
|
||||
src0_alpha, 4);
|
||||
inst->target = target;
|
||||
}
|
||||
inst = emit_single_fb_write(abld, this->outputs[target],
|
||||
this->dual_src_output, src0_alpha, 4);
|
||||
inst->target = target;
|
||||
}
|
||||
|
||||
prog_data->dual_src_blend = (this->dual_src_output.file != BAD_FILE);
|
||||
|
||||
if (inst == NULL) {
|
||||
/* Even if there's no color buffers enabled, we still need to send
|
||||
* alpha out the pipeline to our null renderbuffer to support
|
||||
|
|
@ -946,7 +938,6 @@ fs_visitor::init()
|
|||
this->promoted_constants = 0,
|
||||
|
||||
this->spilled_any_registers = false;
|
||||
this->do_dual_src = false;
|
||||
}
|
||||
|
||||
fs_visitor::~fs_visitor()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue