diff options
author | marha <marha@users.sourceforge.net> | 2012-01-09 17:12:32 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-01-09 17:12:32 +0100 |
commit | 63c3a3a61863ccdc2ff3ab6a9f34d4a6fb72a8c8 (patch) | |
tree | c2ec625befefca3759575095264161ffc2267572 /mesalib/src/mesa/state_tracker/st_atom_clip.c | |
parent | 2ae775fec514a032da4e6ec7528c2ef98c3913ee (diff) | |
parent | a1e97828c89278770cb249039ec92d959440c640 (diff) | |
download | vcxsrv-63c3a3a61863ccdc2ff3ab6a9f34d4a6fb72a8c8.tar.gz vcxsrv-63c3a3a61863ccdc2ff3ab6a9f34d4a6fb72a8c8.tar.bz2 vcxsrv-63c3a3a61863ccdc2ff3ab6a9f34d4a6fb72a8c8.zip |
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'mesalib/src/mesa/state_tracker/st_atom_clip.c')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_atom_clip.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_atom_clip.c b/mesalib/src/mesa/state_tracker/st_atom_clip.c index 1330db843..236d3cf40 100644 --- a/mesalib/src/mesa/state_tracker/st_atom_clip.c +++ b/mesalib/src/mesa/state_tracker/st_atom_clip.c @@ -34,7 +34,7 @@ #include "st_context.h" #include "pipe/p_context.h" #include "st_atom.h" - +#include "st_program.h" #include "cso_cache/cso_context.h" @@ -45,15 +45,23 @@ static void update_clip( struct st_context *st ) struct pipe_clip_state clip; const struct gl_context *ctx = st->ctx; GLuint i; + bool use_eye = FALSE; memset(&clip, 0, sizeof(clip)); + /* if we have a vertex shader that writes clip vertex we need to pass + the pre-projection transformed coordinates into the driver. */ + if (st->vp) { + if (ctx->Shader.CurrentVertexProgram) + use_eye = TRUE; + } + for (i = 0; i < PIPE_MAX_CLIP_PLANES; i++) { if (ctx->Transform.ClipPlanesEnabled & (1 << i)) { - memcpy(clip.ucp[clip.nr], - ctx->Transform._ClipUserPlane[i], - sizeof(clip.ucp[0])); - clip.nr++; + memcpy(clip.ucp[clip.nr], + use_eye ? ctx->Transform.EyeUserPlane[i] : ctx->Transform._ClipUserPlane[i], + sizeof(clip.ucp[0])); + clip.nr++; } } @@ -69,7 +77,7 @@ static void update_clip( struct st_context *st ) const struct st_tracked_state st_update_clip = { "st_update_clip", /* name */ { /* dirty */ - (_NEW_TRANSFORM), /* mesa */ + (_NEW_TRANSFORM | _NEW_PROGRAM), /* mesa */ 0, /* st */ }, update_clip /* update */ |