i965: Don't do legacy userclipping in non-compatibility contexts.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 28 Aug 2015 08:43:23 +0000 (01:43 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 4 Sep 2015 05:31:04 +0000 (22:31 -0700)
According to the GLSL 1.50 specification, page 76:
"The shader must also set all values in gl_ClipDistance that have been
 enabled via the OpenGL API, or results are undefined."

With this patch, we only enable clip distance writes when the shader
actually writes them.  We no longer force a value to be written when
clip planes are enabled in the API.  This could mean the first varying
slot would be used as clip distances - I believe it should be the safe
kind of undefined behavior.

Empirically, it doesn't seem to cause a problem.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_vs.c

index df7e5314d6e7f1c89d7a0225c4d495bb4ff9488f..05457d4a3fe291bfa02d93e6c460fbebd9755559 100644 (file)
@@ -308,6 +308,7 @@ brw_vs_populate_key(struct brw_context *brw,
    key->program_string_id = vp->id;
 
    if (ctx->Transform.ClipPlanesEnabled != 0 &&
+       ctx->API == API_OPENGL_COMPAT &&
        !vp->program.Base.UsesClipDistanceOut) {
       key->nr_userclip_plane_consts =
          _mesa_logbase2(ctx->Transform.ClipPlanesEnabled) + 1;