diff options
author | Alyssa Rosenzweig <alyssa@collabora.com> | 2022-06-17 10:40:27 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-06-21 22:42:34 +0000 |
commit | 9dd0bc92b588c37de2150b4cb9761188c3edce90 (patch) | |
tree | c32f9c659f9e07bf5bc6a34af866a2c0c6134be9 | |
parent | 1a882ecdab06d3cf3786698d23eb015c2baa332a (diff) |
pan/va: Lower FADD_RSCALE.f32 to FMA_RSCALE.f32
We generate FADD_RSCALE.f32 in our sample variables implementations. Valhall
doesn't have a dedicated FADD_RSCALE.f32 implementation, it should be aliased to
FMA_RSCALE.f32. Handle that alias in isel lowering. This will fix:
dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_offset.*
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17101>
-rw-r--r-- | src/panfrost/bifrost/valhall/test/test-lower-isel.cpp | 8 | ||||
-rw-r--r-- | src/panfrost/bifrost/valhall/va_lower_isel.c | 8 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp index f9c3b7874f3..97ff6391750 100644 --- a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp +++ b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp @@ -125,6 +125,14 @@ TEST_F(LowerIsel, MuxInt8) { NEGCASE(bi_mux_v4i8(b, x, y, z, BI_MUX_FP_ZERO)); } +TEST_F(LowerIsel, FaddRscale) { + CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_NONE), + bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_NONE)); + + CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_N), + bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_N)); +} + TEST_F(LowerIsel, Smoke) { NEGCASE(bi_fadd_f32_to(b, reg, reg, reg)); NEGCASE(bi_csel_s32_to(b, reg, reg, reg, reg, reg, BI_CMPF_LT)); diff --git a/src/panfrost/bifrost/valhall/va_lower_isel.c b/src/panfrost/bifrost/valhall/va_lower_isel.c index ad54a9352ba..a43ddc582ba 100644 --- a/src/panfrost/bifrost/valhall/va_lower_isel.c +++ b/src/panfrost/bifrost/valhall/va_lower_isel.c @@ -111,6 +111,14 @@ va_lower_isel(bi_instr *I) break; + /* FADD_RSCALE.f32(x, y, z) -> FMA_RSCALE.f32(x, 1.0, y, z) */ + case BI_OPCODE_FADD_RSCALE_F32: + I->op = BI_OPCODE_FMA_RSCALE_F32; + I->src[3] = I->src[2]; + I->src[2] = I->src[1]; + I->src[1] = bi_imm_f32(1.0); + break; + default: break; } |