- key.do_point_sprite = brw->attribs.Point->PointSprite;
- key.SpriteOrigin = brw->attribs.Point->SpriteOrigin;
- /* _NEW_LIGHT */
- key.do_flat_shading = (brw->attribs.Light->ShadeModel == GL_FLAT);
- key.do_twoside_color = (brw->attribs.Light->Enabled && brw->attribs.Light->Model.TwoSide);
+ /* _NEW_TRANSFORM */
+ key.userclip_active = (ctx->Transform.ClipPlanesEnabled != 0);
+
+ /* _NEW_POINT */
+ key.do_point_sprite = ctx->Point.PointSprite;
+ if (key.do_point_sprite) {
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ if (ctx->Point.CoordReplace[i])
+ key.point_sprite_coord_replace |= (1 << i);
+ }
+ }
+ if (brw->fragment_program->Base.InputsRead & BITFIELD64_BIT(VARYING_SLOT_PNTC))
+ key.do_point_coord = 1;
+ /*
+ * Window coordinates in a FBO are inverted, which means point
+ * sprite origin must be inverted, too.
+ */
+ if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo)
+ key.sprite_origin_lower_left = true;
+
+ /* BRW_NEW_INTERPOLATION_MAP */
+ key.interpolation_mode = brw->interpolation_mode;
+
+ /* _NEW_LIGHT | _NEW_PROGRAM */
+ key.do_twoside_color = ((ctx->Light.Enabled && ctx->Light.Model.TwoSide) ||
+ ctx->VertexProgram._TwoSideEnabled);