diff options
author | Vasily Khoruzhick <[email protected]> | 2020-01-10 19:48:11 -0800 |
---|---|---|
committer | Vasily Khoruzhick <[email protected]> | 2020-01-12 00:10:04 -0800 |
commit | 8a421135fa3c55bd2ef39f6ef07981aa415f6c22 (patch) | |
tree | 3c5e2a06f9377d1a2f6b9de38fe54455b6c33591 /src/gallium/drivers/lima | |
parent | b936b1f9b49b0eb5c5ca3048790f032aa9b02ecb (diff) |
lima: implement polygon offset
Fixes some of dEQP-GLES2.functional.polygon_offset.* tests and shadows in Q3A.
Reviewed-by: Qiang Yu <[email protected]>
Tested-by: Andreas Baierl <[email protected]>
Signed-off-by: Vasily Khoruzhick <[email protected]>
Diffstat (limited to 'src/gallium/drivers/lima')
-rw-r--r-- | src/gallium/drivers/lima/lima_draw.c | 23 |
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 */ } |