pan/bi: Model 3rd source for ATEST

ATEST on Valhall takes atest-param as an explicit encoded source. The source
also exists on Bifrost, but it's implied in the encoding. Rather than treating
it as a "ghost" source, model it in the IR explicitly so the count is correct.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17794>
This commit is contained in:
Alyssa Rosenzweig 2022-07-21 12:04:23 -04:00 committed by Marge Bot
parent 42b815397c
commit 0bef566fba
5 changed files with 20 additions and 18 deletions

View file

@ -2496,6 +2496,9 @@
<ins name="+ATEST" staging="w=1" mask="0xfff00" exact="0xc8f00" message="atest" table="true">
<src start="0" mask="0xf7"/>
<src start="3" mask="0xf7"/>
<!-- ATEST parameter datum. Implicitly encoded into the tuple on Bifrost.
Real source on Valhall. -->
<src start="6" pseudo="true"/>
<mod name="widen1" start="6" size="2">
<reserved/>
<opt>none</opt>

View file

@ -859,12 +859,9 @@ bi_skip_atest(bi_context *ctx, bool emit_zs)
static void
bi_emit_atest(bi_builder *b, bi_index alpha)
{
bi_instr *atest = bi_atest_to(b, bi_temp(b->shader), bi_coverage(b), alpha);
b->shader->coverage = bi_atest(b, bi_coverage(b), alpha,
bi_fau(BIR_FAU_ATEST_PARAM, false));
b->shader->emitted_atest = true;
b->shader->coverage = atest->dest[0];
/* Pseudo-source to encode in the tuple */
atest->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false);
}
static void

View file

@ -109,7 +109,8 @@ TEST_F(InsertFlow, AtestWait6AndWait0After) {
flow(DISCARD);
bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
flow(WAIT0126);
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5),
bi_fau(BIR_FAU_ATEST_PARAM, false));
flow(WAIT0);
flow(END);
});

View file

@ -53,6 +53,7 @@ class MergeFlow : public testing::Test {
protected:
MergeFlow() {
mem_ctx = ralloc_context(NULL);
atest = bi_fau(BIR_FAU_ATEST_PARAM, false);
}
~MergeFlow() {
@ -61,6 +62,7 @@ protected:
void *mem_ctx;
bi_instr *I;
bi_index atest;
};
TEST_F(MergeFlow, End) {
@ -101,12 +103,12 @@ TEST_F(MergeFlow, TrivialWait) {
CASE({
bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
flow(WAIT0126);
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest);
},
{
I = bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
I->flow = VA_FLOW_WAIT0126;
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest);
});
}
@ -269,7 +271,7 @@ TEST_F(MergeFlow, DeletePointlessDiscard) {
flow(DISCARD);
flow(WAIT0);
flow(WAIT0126);
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest);
flow(WAIT);
bi_blend_to(b, bi_register(0), bi_register(4), bi_register(5),
bi_register(6), bi_register(7), bi_register(8),
@ -283,7 +285,7 @@ TEST_F(MergeFlow, DeletePointlessDiscard) {
BI_REGISTER_FORMAT_F32, false, false,
BI_VA_LOD_MODE_COMPUTED_LOD, BI_WRITE_MASK_RGBA, 4);
I->flow = VA_FLOW_WAIT0126;
I = bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
I = bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest);
I->flow = VA_FLOW_WAIT;
I = bi_blend_to(b, bi_register(0), bi_register(4), bi_register(5),
bi_register(6), bi_register(7), bi_register(8),

View file

@ -193,17 +193,16 @@ TEST_F(ValhallPacking, Mux) {
}
TEST_F(ValhallPacking, AtestFP16) {
bi_instr *I = bi_atest_to(b, bi_register(60), bi_register(60),
bi_half(bi_register(1), true));
I->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false);
CASE(I, 0x007dbc0208ea013c);
CASE(bi_atest_to(b, bi_register(60), bi_register(60),
bi_half(bi_register(1), true),
bi_fau(BIR_FAU_ATEST_PARAM, false)),
0x007dbc0208ea013c);
}
TEST_F(ValhallPacking, AtestFP32) {
bi_instr *I = bi_atest_to(b, bi_register(60), bi_register(60), one);
I->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false);
CASE(I, 0x007dbc0200ead03c);
CASE(bi_atest_to(b, bi_register(60), bi_register(60), one,
bi_fau(BIR_FAU_ATEST_PARAM, false)),
0x007dbc0200ead03c);
}
TEST_F(ValhallPacking, Transcendentals) {