nv50: fix clip state validation
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 10 Jan 2012 20:33:48 +0000 (21:33 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 10 Jan 2012 20:45:31 +0000 (21:45 +0100)
Don't create clip outputs if no clip planes are enabled.

Move clip validation after program validation: we were calling
linkage validation in case the VP needed rebuilding before the
FP was validated.

The vertex program needs to be built first because when
ClipDistance is used we'll want to only enable those outputs that
are also written.

src/gallium/drivers/nv50/nv50_state_validate.c

index edf648e5533a039c7d3849abbac033a8fbe9e0a1..c8a1c4ecb37381e2268c79e2f270496963ad8249 100644 (file)
@@ -254,7 +254,8 @@ nv50_validate_clip(struct nv50_context *nv50)
    BEGIN_RING(chan, RING_3D(VP_CLIP_DISTANCE_ENABLE), 1);
    OUT_RING  (chan, clip_enable);
 
-   nv50_check_program_ucps(nv50, vp, clip_enable);
+   if (clip_enable)
+      nv50_check_program_ucps(nv50, vp, clip_enable);
 }
 
 static void
@@ -356,8 +357,6 @@ static struct state_validate {
     { nv50_validate_scissor,       NV50_NEW_SCISSOR },
 #endif
     { nv50_validate_viewport,      NV50_NEW_VIEWPORT },
-    { nv50_validate_clip,          NV50_NEW_CLIP | NV50_NEW_RASTERIZER |
-                                   NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
     { nv50_vertprog_validate,      NV50_NEW_VERTPROG },
     { nv50_gmtyprog_validate,      NV50_NEW_GMTYPROG },
     { nv50_fragprog_validate,      NV50_NEW_FRAGPROG },
@@ -366,6 +365,8 @@ static struct state_validate {
     { nv50_gp_linkage_validate,    NV50_NEW_GMTYPROG | NV50_NEW_VERTPROG },
     { nv50_validate_derived_rs,    NV50_NEW_FRAGPROG | NV50_NEW_RASTERIZER |
                                    NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
+    { nv50_validate_clip,          NV50_NEW_CLIP | NV50_NEW_RASTERIZER |
+                                   NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
     { nv50_constbufs_validate,     NV50_NEW_CONSTBUF },
     { nv50_validate_textures,      NV50_NEW_TEXTURES },
     { nv50_validate_samplers,      NV50_NEW_SAMPLERS },