intel / DRI2: When available, use DRI2GetBuffersWithFormat
[mesa.git] / src / mesa / state_tracker / st_atom_rasterizer.c
index 9f4e1c1c6965f088e1840f87479398e302e60186..61687fbc3e285c7049691517133e28532452ec1b 100644 (file)
@@ -79,8 +79,6 @@ static void update_raster_state( struct st_context *st )
 
    memset(raster, 0, sizeof(*raster));
 
-   raster->origin_lower_left = 1; /* Always true for OpenGL */
-   
    /* _NEW_POLYGON, _NEW_BUFFERS
     */
    {
@@ -107,12 +105,15 @@ static void update_raster_state( struct st_context *st )
    /* _NEW_LIGHT | _NEW_PROGRAM
     *
     * Back-face colors can come from traditional lighting (when
-    * GL_LIGHT_MODEL_TWO_SIDE is set) or from vertex programs (when
+    * GL_LIGHT_MODEL_TWO_SIDE is set) or from vertex programs/shaders (when
     * GL_VERTEX_PROGRAM_TWO_SIDE is set).  Note the logic here.
     */
    if (ctx->VertexProgram._Current) {
-      if (ctx->VertexProgram._Enabled) {
-         /* user-defined program */
+      if (ctx->VertexProgram._Enabled ||
+          (ctx->Shader.CurrentProgram &&
+           ctx->Shader.CurrentProgram->VertexProgram &&
+           ctx->Shader.CurrentProgram->LinkStatus)) {
+         /* user-defined vertex program or shader */
          raster->light_twoside = ctx->VertexProgram.TwoSideEnabled;
       }
       else {
@@ -215,6 +216,9 @@ static void update_raster_state( struct st_context *st )
          raster->sprite_coord_mode[i] = PIPE_SPRITE_COORD_NONE;
       }
    }
+
+   /* ST_NEW_VERTEX_PROGRAM
+    */
    if (vertProg) {
       if (vertProg->Base.Id == 0) {
          if (vertProg->Base.OutputsWritten & (1 << VERT_RESULT_PSIZ)) {
@@ -254,7 +258,7 @@ static void update_raster_state( struct st_context *st )
    raster->line_stipple_factor = ctx->Line.StippleFactor - 1;
 
    /* _NEW_MULTISAMPLE */
-   if (ctx->Multisample._Enabled)
+   if (ctx->Multisample._Enabled || st->force_msaa)
       raster->multisample = 1;
 
    /* _NEW_SCISSOR */
@@ -267,11 +271,17 @@ static void update_raster_state( struct st_context *st )
 }
 
 const struct st_tracked_state st_update_rasterizer = {
-   "st_update_rasterizer",                                     /* name */
-   {                                                           /* dirty */
-      (_NEW_LIGHT | _NEW_POLYGON | _NEW_LINE | _NEW_SCISSOR |  /* mesa */
-               _NEW_POINT | _NEW_BUFFERS | _NEW_MULTISAMPLE),  
-      0,                                                       /* st */
+   "st_update_rasterizer",    /* name */
+   {
+      (_NEW_BUFFERS |
+       _NEW_LIGHT |
+       _NEW_LINE |
+       _NEW_MULTISAMPLE |
+       _NEW_POINT |
+       _NEW_POLYGON |
+       _NEW_PROGRAM |
+       _NEW_SCISSOR),      /* mesa state dependencies*/
+      ST_NEW_VERTEX_PROGRAM,  /* state tracker dependencies */
    },
-   update_raster_state                                         /* update */
+   update_raster_state     /* update function */
 };