X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fstate_tracker%2Fst_atom_rasterizer.c;h=250cbb2260c9425528b24b4d005b6a48409911c2;hb=b94a926f396d366b6bb5d24b32dd93ffb7609205;hp=f92ca13d5e4df085750d5e702bdeb0de21d52a97;hpb=b2ddb93ff3b8c88682634ccdef247967e31fab84;p=mesa.git diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c index f92ca13d5e4..250cbb2260c 100644 --- a/src/mesa/state_tracker/st_atom_rasterizer.c +++ b/src/mesa/state_tracker/st_atom_rasterizer.c @@ -70,14 +70,16 @@ static void update_raster_state( struct st_context *st ) { raster->front_ccw = (ctx->Polygon.FrontFace == GL_CCW); - /* XXX - * I think the intention here is that user-created framebuffer objects - * use Y=0=TOP layout instead of OpenGL's normal Y=0=bottom layout. - * Flipping Y changes CW to CCW and vice-versa. - * But this is an implementation/driver-specific artifact - remove... + /* + * Gallium's surfaces are Y=0=TOP orientation. OpenGL is the + * opposite. Window system surfaces are Y=0=TOP. Mesa's FBOs + * must match OpenGL conventions so FBOs use Y=0=BOTTOM. In that + * case, we must invert Y and flip the notion of front vs. back. */ - if (ctx->DrawBuffer && ctx->DrawBuffer->Name != 0) + if (st_fb_orientation(ctx->DrawBuffer) == Y_0_BOTTOM) { + /* Drawing to an FBO. The viewport will be inverted. */ raster->front_ccw ^= 1; + } } /* _NEW_LIGHT @@ -110,6 +112,8 @@ static void update_raster_state( struct st_context *st ) raster->light_twoside = 1; } + raster->clamp_vertex_color = ctx->Light._ClampVertexColor; + /* _NEW_POLYGON */ if (ctx->Polygon.CullFlag) { @@ -250,6 +254,9 @@ static void update_raster_state( struct st_context *st ) if (ctx->Scissor.Enabled) raster->scissor = 1; + /* _NEW_FRAG_CLAMP */ + raster->clamp_fragment_color = ctx->Color._ClampFragmentColor; + raster->gl_rasterization_rules = 1; cso_set_rasterizer(st->cso_context, raster); @@ -265,7 +272,8 @@ const struct st_tracked_state st_update_rasterizer = { _NEW_POINT | _NEW_POLYGON | _NEW_PROGRAM | - _NEW_SCISSOR), /* mesa state dependencies*/ + _NEW_SCISSOR | + _NEW_FRAG_CLAMP), /* mesa state dependencies*/ ST_NEW_VERTEX_PROGRAM, /* state tracker dependencies */ }, update_raster_state /* update function */