diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-08-16 10:25:34 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-08-21 10:44:45 -0700 |
commit | d4542f8cb5fc999e21fd3ab56f5b446116d8fdef (patch) | |
tree | 9f923ab32c4c773647160cd04dfa2c450c58aff2 /src/gallium/drivers/panfrost/pan_context.c | |
parent | 5e268a01d260d0dd4037b048e1f7a406d92515bf (diff) |
panfrost: Implement depth range clipping
This should fix glDepthRangef issues. Eventually, something similar
should allow implementing the depth bounds test.
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/gallium/drivers/panfrost/pan_context.c')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index f9e03ab4fbd..e8ca6a66377 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1209,9 +1209,6 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) .clip_miny = -INFINITY, .clip_maxx = INFINITY, .clip_maxy = INFINITY, - - .clip_minz = 0.0, - .clip_maxz = 1.0, }; /* Always scissor to the viewport by default. */ @@ -1221,6 +1218,9 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) float vp_miny = (int) (vp->translate[1] - fabsf(vp->scale[1])); float vp_maxy = (int) (vp->translate[1] + fabsf(vp->scale[1])); + float minz = (vp->translate[2] - fabsf(vp->scale[2])); + float maxz = (vp->translate[2] + fabsf(vp->scale[2])); + /* Apply the scissor test */ unsigned minx, miny, maxx, maxy; @@ -1253,6 +1253,12 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) maxx = temp; } + if (minz > maxz) { + float temp = minz; + minz = maxz; + maxz = temp; + } + /* Clamp to the framebuffer size as a last check */ minx = MIN2(ctx->pipe_framebuffer.width, minx); @@ -1276,6 +1282,9 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) view.viewport0[1] = miny; view.viewport1[1] = MALI_POSITIVE(maxy); + view.clip_minz = minz; + view.clip_maxz = maxz; + ctx->payloads[PIPE_SHADER_FRAGMENT].postfix.viewport = panfrost_upload_transient(ctx, &view, |