lima: implement polygon offset
authorVasily Khoruzhick <anarsoul@gmail.com>
Sat, 11 Jan 2020 03:48:11 +0000 (19:48 -0800)
committerVasily Khoruzhick <anarsoul@gmail.com>
Sun, 12 Jan 2020 08:10:04 +0000 (00:10 -0800)
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>
src/gallium/drivers/lima/lima_draw.c

index d8ca64c925326ed5b2c52c35d9ce0f60d9550458..ec98469f39f2bc91d8b145ee8523b5b12b681619 100644 (file)
@@ -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 */
 }