mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-14 14:28:08 +02:00
draw: disable depth clipping if depth clamp is enabled
This commit is contained in:
parent
c304869ec0
commit
9ca48de106
3 changed files with 11 additions and 4 deletions
|
|
@ -216,6 +216,7 @@ void draw_set_clip_state( struct draw_context *draw,
|
||||||
assert(clip->nr <= PIPE_MAX_CLIP_PLANES);
|
assert(clip->nr <= PIPE_MAX_CLIP_PLANES);
|
||||||
memcpy(&draw->plane[6], clip->ucp, clip->nr * sizeof(clip->ucp[0]));
|
memcpy(&draw->plane[6], clip->ucp, clip->nr * sizeof(clip->ucp[0]));
|
||||||
draw->nr_planes = 6 + clip->nr;
|
draw->nr_planes = 6 + clip->nr;
|
||||||
|
draw->depth_clamp = clip->depth_clamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,7 @@ struct draw_context
|
||||||
*/
|
*/
|
||||||
float plane[12][4];
|
float plane[12][4];
|
||||||
unsigned nr_planes;
|
unsigned nr_planes;
|
||||||
|
boolean depth_clamp;
|
||||||
|
|
||||||
/* If a prim stage introduces new vertex attributes, they'll be stored here
|
/* If a prim stage introduces new vertex attributes, they'll be stored here
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,8 @@ dot4(const float *a, const float *b)
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE unsigned
|
static INLINE unsigned
|
||||||
compute_clipmask_gl(const float *clip, /*const*/ float plane[][4], unsigned nr)
|
compute_clipmask_gl(const float *clip, /*const*/ float plane[][4], unsigned nr,
|
||||||
|
boolean clip_depth)
|
||||||
{
|
{
|
||||||
unsigned mask = 0x0;
|
unsigned mask = 0x0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
@ -74,8 +75,10 @@ compute_clipmask_gl(const float *clip, /*const*/ float plane[][4], unsigned nr)
|
||||||
if ( clip[0] + clip[3] < 0) mask |= (1<<1);
|
if ( clip[0] + clip[3] < 0) mask |= (1<<1);
|
||||||
if (-clip[1] + clip[3] < 0) mask |= (1<<2);
|
if (-clip[1] + clip[3] < 0) mask |= (1<<2);
|
||||||
if ( clip[1] + clip[3] < 0) mask |= (1<<3);
|
if ( clip[1] + clip[3] < 0) mask |= (1<<3);
|
||||||
if ( clip[2] + clip[3] < 0) mask |= (1<<4); /* match mesa clipplane numbering - for now */
|
if (clip_depth) {
|
||||||
if (-clip[2] + clip[3] < 0) mask |= (1<<5); /* match mesa clipplane numbering - for now */
|
if ( clip[2] + clip[3] < 0) mask |= (1<<4); /* match mesa clipplane numbering - for now */
|
||||||
|
if (-clip[2] + clip[3] < 0) mask |= (1<<5); /* match mesa clipplane numbering - for now */
|
||||||
|
}
|
||||||
|
|
||||||
/* Followed by any remaining ones:
|
/* Followed by any remaining ones:
|
||||||
*/
|
*/
|
||||||
|
|
@ -120,9 +123,11 @@ static boolean post_vs_cliptest_viewport_gl( struct pt_post_vs *pvs,
|
||||||
out->clip[3] = position[3];
|
out->clip[3] = position[3];
|
||||||
|
|
||||||
out->vertex_id = 0xffff;
|
out->vertex_id = 0xffff;
|
||||||
|
/* Disable depth clipping if depth clamping is enabled. */
|
||||||
out->clipmask = compute_clipmask_gl(out->clip,
|
out->clipmask = compute_clipmask_gl(out->clip,
|
||||||
pvs->draw->plane,
|
pvs->draw->plane,
|
||||||
pvs->draw->nr_planes);
|
pvs->draw->nr_planes,
|
||||||
|
!pvs->draw->depth_clamp);
|
||||||
clipped += out->clipmask;
|
clipped += out->clipmask;
|
||||||
|
|
||||||
if (out->clipmask == 0)
|
if (out->clipmask == 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue