gallium: don't use edgeflags if the app didn't supply them
[mesa.git] / src / mesa / state_tracker / st_atom_shader.c
index 09baff875bc1e7f9d58877935a89a52091be18ce..46c8cbb30987596c3269b7c4b39854eb97a9cb36 100644 (file)
@@ -106,7 +106,18 @@ find_translated_vp(struct st_context *st,
    /* Nothing in our key yet.  This will change:
     */
    memset(&key, 0, sizeof key);
-   key.dummy = 0;
+
+   /* When this is true, we will add an extra input to the vertex
+    * shader translation (for edgeflags), an extra output with
+    * edgeflag semantics, and extend the vertex shader to pass through
+    * the input to the output.  We'll need to use similar logic to set
+    * up the extra vertex_element input for edgeflags.
+    * _NEW_POLYGON, ST_NEW_EDGEFLAGS_DATA
+    */
+   key.passthrough_edgeflags = (st->vertdata_edgeflags && (
+                                st->ctx->Polygon.FrontMode != GL_FILL ||
+                                st->ctx->Polygon.BackMode != GL_FILL));
+
 
    /* Do we need to throw away old translations after a change in the
     * GL program string?
@@ -218,8 +229,8 @@ update_vp( struct st_context *st )
 const struct st_tracked_state st_update_vp = {
    "st_update_vp",                                     /* name */
    {                                                   /* dirty */
-      0,                                               /* mesa */
-      ST_NEW_VERTEX_PROGRAM                             /* st */
+      _NEW_POLYGON,                                    /* mesa */
+      ST_NEW_VERTEX_PROGRAM | ST_NEW_EDGEFLAGS_DATA    /* st */
    },
    update_vp                                   /* update */
 };