summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasily Khoruzhick <anarsoul@gmail.com>2020-01-10 19:48:11 -0800
committerVasily Khoruzhick <anarsoul@gmail.com>2020-01-12 00:10:04 -0800
commit8a421135fa3c55bd2ef39f6ef07981aa415f6c22 (patch)
tree3c5e2a06f9377d1a2f6b9de38fe54455b6c33591
parentb936b1f9b49b0eb5c5ca3048790f032aa9b02ecb (diff)
lima: implement polygon offset
Fixes some of dEQP-GLES2.functional.polygon_offset.* tests and shadows in Q3A. Reviewed-by: Qiang Yu <yuq825@gmail.com> Tested-by: Andreas Baierl <ichgeh@imkreisrum.de> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
-rw-r--r--src/gallium/drivers/lima/lima_draw.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/src/gallium/drivers/lima/lima_draw.c b/src/gallium/drivers/lima/lima_draw.c
index d8ca64c9253..ec98469f39f 100644
--- a/src/gallium/drivers/lima/lima_draw.c
+++ b/src/gallium/drivers/lima/lima_draw.c
@@ -1030,29 +1030,24 @@ lima_stencil_op(enum pipe_stencil_op pipe)
}
#endif
-static int
+static unsigned
lima_calculate_depth_test(struct pipe_depth_state *depth, struct pipe_rasterizer_state *rst)
{
+ int offset_scale = 0, offset_units = 0;
enum pipe_compare_func func = (depth->enabled ? depth->func : PIPE_FUNC_ALWAYS);
- int offset_scale = 0;
-
- //TODO: implement polygon offset
-#if 0
- if (rst->offset_scale < -32)
- offset_scale = -32;
- else if (rst->offset_scale > 31)
- offset_scale = 31;
- else
- offset_scale = rst->offset_scale * 4;
-
+ offset_scale = CLAMP(rst->offset_scale * 4, -128, 127);
if (offset_scale < 0)
- offset_scale = 0x100 + offset_scale;
-#endif
+ offset_scale += 0x100;
+
+ offset_units = CLAMP(rst->offset_units * 2, -128, 127);
+ if (offset_units < 0)
+ offset_units += 0x100;
return (depth->enabled && depth->writemask) |
((int)func << 1) |
(offset_scale << 16) |
+ (offset_units << 24) |
0x30; /* find out what is this */
}