Mesa (master): v3d: Implement ALPHA_TO_COVERAGE.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 20 16:37:28 UTC 2018
Module: Mesa
Branch: master
Commit: f49d112a01f9bec79b0ddb028163dc189f663634
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f49d112a01f9bec79b0ddb028163dc189f663634
Author: Eric Anholt <eric at anholt.net>
Date: Tue Jun 19 16:27:17 2018 -0700
v3d: Implement ALPHA_TO_COVERAGE.
There's a convenient "FTOC" instruction for generating the coverage now,
unlike vc4. This fixes
dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_alpha_to_coverage
---
src/broadcom/compiler/nir_to_vir.c | 14 +++++++++++++-
src/broadcom/compiler/vir.c | 3 ++-
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index 4cbdb764ea..267d61a25a 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -920,6 +920,16 @@ emit_frag_end(struct v3d_compile *c)
has_any_tlb_color_write = true;
}
+ if (c->fs_key->sample_alpha_to_coverage && c->output_color_var[0]) {
+ struct nir_variable *var = c->output_color_var[0];
+ struct qreg *color = &c->outputs[var->data.driver_location * 4];
+
+ vir_SETMSF_dest(c, vir_reg(QFILE_NULL, 0),
+ vir_AND(c,
+ vir_MSF(c),
+ vir_FTOC(c, color[3])));
+ }
+
if (c->output_position_index != -1) {
struct qinst *inst = vir_MOV_dest(c,
vir_reg(QFILE_TLBU, 0),
@@ -930,7 +940,9 @@ emit_frag_end(struct v3d_compile *c)
TLB_TYPE_DEPTH |
TLB_DEPTH_TYPE_PER_PIXEL |
0xffffff00);
- } else if (c->s->info.fs.uses_discard || !has_any_tlb_color_write) {
+ } else if (c->s->info.fs.uses_discard ||
+ c->fs_key->sample_alpha_to_coverage ||
+ !has_any_tlb_color_write) {
/* Emit passthrough Z if it needed to be delayed until shader
* end due to potential discards.
*
diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c
index 28e25cb23e..2754924e6c 100644
--- a/src/broadcom/compiler/vir.c
+++ b/src/broadcom/compiler/vir.c
@@ -840,7 +840,8 @@ uint64_t *v3d_compile_fs(const struct v3d_compiler *compiler,
v3d_set_fs_prog_data_inputs(c, prog_data);
prog_data->writes_z = (c->s->info.outputs_written &
(1 << FRAG_RESULT_DEPTH));
- prog_data->discard = c->s->info.fs.uses_discard;
+ prog_data->discard = (c->s->info.fs.uses_discard ||
+ c->fs_key->sample_alpha_to_coverage);
prog_data->uses_center_w = c->uses_center_w;
return v3d_return_qpu_insts(c, final_assembly_size);
More information about the mesa-commit
mailing list