From 88ca73bcd04582ad5e42507e53b3cdff96a87fbd Mon Sep 17 00:00:00 2001 From: Jonathan Marek Date: Thu, 5 Sep 2019 17:21:54 -0400 Subject: [PATCH] freedreno/a2xx: implement polygon offset Fixes failures in the following deqp tests: dEQP-GLES2.functional.polygon_offset.* Signed-off-by: Jonathan Marek Reviewed-by: Rob Clark Reviewed-by: Eric Anholt --- src/freedreno/registers/a2xx.xml | 2 ++ src/gallium/drivers/freedreno/a2xx/fd2_emit.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/freedreno/registers/a2xx.xml b/src/freedreno/registers/a2xx.xml index 1b0bf44bd3d..2c7388d9fcd 100644 --- a/src/freedreno/registers/a2xx.xml +++ b/src/freedreno/registers/a2xx.xml @@ -1387,6 +1387,8 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd"> + + diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c index 38286ec939b..32da74f85a5 100644 --- a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c +++ b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c @@ -301,6 +301,18 @@ fd2_emit_state(struct fd_context *ctx, const enum fd_dirty_3d_state dirty) OUT_RING(ring, fui(1.0)); /* PA_CL_GB_VERT_DISC_ADJ */ OUT_RING(ring, fui(1.0)); /* PA_CL_GB_HORZ_CLIP_ADJ */ OUT_RING(ring, fui(1.0)); /* PA_CL_GB_HORZ_DISC_ADJ */ + + if (rasterizer->base.offset_tri) { + /* TODO: why multiply scale by 2 ? without it deqp test fails + * deqp/piglit tests aren't very precise + */ + OUT_PKT3(ring, CP_SET_CONSTANT, 5); + OUT_RING(ring, CP_REG(REG_A2XX_PA_SU_POLY_OFFSET_FRONT_SCALE)); + OUT_RING(ring, fui(rasterizer->base.offset_scale * 2.0f)); /* FRONT_SCALE */ + OUT_RING(ring, fui(rasterizer->base.offset_units)); /* FRONT_OFFSET */ + OUT_RING(ring, fui(rasterizer->base.offset_scale * 2.0f)); /* BACK_SCALE */ + OUT_RING(ring, fui(rasterizer->base.offset_units)); /* BACK_OFFSET */ + } } /* NOTE: scissor enabled bit is part of rasterizer state: */ -- 2.30.2