i965: Don't do legacy userclipping in non-compatibility contexts.
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>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user