mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
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 <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
5e268a01d2
commit
d4542f8cb5
1 changed files with 12 additions and 3 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue