1bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/*
2bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Copyright (C) 2009 Francisco Jerez.
3bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * All Rights Reserved.
4bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
5bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Permission is hereby granted, free of charge, to any person obtaining
6bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * a copy of this software and associated documentation files (the
7bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * "Software"), to deal in the Software without restriction, including
8bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * without limitation the rights to use, copy, modify, merge, publish,
9bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * distribute, sublicense, and/or sell copies of the Software, and to
10bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * permit persons to whom the Software is furnished to do so, subject to
11bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * the following conditions:
12bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
13bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * The above copyright notice and this permission notice (including the
14bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * next paragraph) shall be included in all copies or substantial
15bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * portions of the Software.
16bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
17bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
25bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez */
26bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
27bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_driver.h"
28bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_context.h"
29bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_texture.h"
30bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_util.h"
31bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "swrast/swrast.h"
33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "tnl/tnl.h"
34bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
35bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
36f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_alpha_func(struct gl_context *ctx, GLenum func, GLfloat ref)
37bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
38bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, ALPHA_FUNC);
39bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
40bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
41bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
42f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_blend_color(struct gl_context *ctx, const GLfloat color[4])
43bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
44bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, BLEND_COLOR);
45bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
46bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
47bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
48f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_blend_equation_separate(struct gl_context *ctx, GLenum modeRGB, GLenum modeA)
49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
50bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, BLEND_EQUATION);
51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
52bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
54f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_blend_func_separate(struct gl_context *ctx, GLenum sfactorRGB,
55bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			    GLenum dfactorRGB, GLenum sfactorA, GLenum dfactorA)
56bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
57bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, BLEND_FUNC);
58bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
59bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
60bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
61f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_clip_plane(struct gl_context *ctx, GLenum plane, const GLfloat *equation)
62bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
63bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty_i(ctx, CLIP_PLANE, plane - GL_CLIP_PLANE0);
64bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
65bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
66bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
67f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_color_mask(struct gl_context *ctx, GLboolean rmask, GLboolean gmask,
68bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		   GLboolean bmask, GLboolean amask)
69bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
70bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, COLOR_MASK);
71bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
72bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
73bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
74f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_color_material(struct gl_context *ctx, GLenum face, GLenum mode)
75bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
76bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, COLOR_MATERIAL);
77bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
78bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_BACK_AMBIENT);
79bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
80bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
81bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
82bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MATERIAL_BACK_SPECULAR);
83bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
84bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
85bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
86f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_cull_face(struct gl_context *ctx, GLenum mode)
87bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
88bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, CULL_FACE);
89bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
90bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
91bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
92f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_front_face(struct gl_context *ctx, GLenum mode)
93bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
94bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FRONT_FACE);
95bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
96bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
97bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
98f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_depth_func(struct gl_context *ctx, GLenum func)
99bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
100bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, DEPTH);
101bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
102bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
103bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
104f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_depth_mask(struct gl_context *ctx, GLboolean flag)
105bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
106bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, DEPTH);
107bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
108bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
109bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
110f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_depth_range(struct gl_context *ctx, GLclampd nearval, GLclampd farval)
111bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
112bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, VIEWPORT);
113bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
114bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
115bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
1164a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jereznouveau_read_buffer(struct gl_context *ctx, GLenum buffer)
1174a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerez{
1184a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerez	nouveau_validate_framebuffer(ctx);
1194a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerez}
1204a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerez
1214a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerezstatic void
122f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_draw_buffers(struct gl_context *ctx, GLsizei n, const GLenum *buffers)
123bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
124bfc7518ab993b006dffaad5f605137e94ff9d7bcFrancisco Jerez	nouveau_validate_framebuffer(ctx);
125bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FRAMEBUFFER);
126bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
127bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
128bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
129f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
130bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
131bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i;
132bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
133bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (cap) {
134bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_ALPHA_TEST:
135bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, ALPHA_FUNC);
136bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
137bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_BLEND:
138bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, BLEND_EQUATION);
139bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
140bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_LOGIC_OP:
141bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LOGIC_OPCODE);
142bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
143bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_MATERIAL:
144bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, COLOR_MATERIAL);
145bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
146bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
147bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
148bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
149bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
150bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
151bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
152bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_SUM_EXT:
153bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
15475f52d1e5210944d7e92787c637285fd83533053Francisco Jerez		context_dirty(ctx, LIGHT_MODEL);
155bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
156bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_CULL_FACE:
157bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, CULL_FACE);
158bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
159bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DEPTH_TEST:
160bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, DEPTH);
161bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
162bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DITHER:
163bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, DITHER);
164bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
165bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_FOG:
166bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FOG);
167bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
168bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
169bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
170bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT0:
171bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT1:
172bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT2:
173bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT3:
174bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT4:
175bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT5:
176bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT6:
177bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT7:
178bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
179bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
180bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, cap - GL_LIGHT0);
181bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
182bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
183bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
184bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
185bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
186bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
187bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
188bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
189bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
190bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHTING:
191bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
192bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
193c48226e81d6a070a4bbaf42e0a310a868bcbe935Francisco Jerez		context_dirty(ctx, LIGHT_MODEL);
194bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
195bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
196bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		for (i = 0; i < MAX_LIGHTS; i++) {
197bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			if (ctx->Light.Light[i].Enabled)
198bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez				context_dirty_i(ctx, LIGHT_SOURCE, i);
199bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		}
200bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
201bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
202bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
203bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
204bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
205bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
206bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
207bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
208bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
209bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
210bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LINE_SMOOTH:
211bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LINE_MODE);
212bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
213bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_NORMALIZE:
214bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
215bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
216bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POINT_SMOOTH:
217bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POINT_MODE);
218bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
219bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_POINT:
220bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_LINE:
221bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_FILL:
222bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POLYGON_OFFSET);
223bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
224bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_SMOOTH:
225bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POLYGON_MODE);
226bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
227bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SCISSOR_TEST:
228bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, SCISSOR);
229bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
230bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_STENCIL_TEST:
231bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, STENCIL_FUNC);
232bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
233bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_1D:
234bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_2D:
235bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_3D:
236fc14fb9d1a897dbcf750b8158d6cb08388a422c4Francisco Jerez	case GL_TEXTURE_RECTANGLE:
237bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
238bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
239bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
240c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	case GL_TEXTURE_GEN_S:
241c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	case GL_TEXTURE_GEN_T:
242c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	case GL_TEXTURE_GEN_R:
243c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	case GL_TEXTURE_GEN_Q:
244c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		context_dirty_i(ctx, TEX_GEN, ctx->Texture.CurrentUnit);
245c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		context_dirty(ctx, MODELVIEW);
246c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		break;
247bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
248bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
249bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
250bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
251f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_fog(struct gl_context *ctx, GLenum pname, const GLfloat *params)
252bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
253bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FOG);
254bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
255bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
256bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
257f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_light(struct gl_context *ctx, GLenum light, GLenum pname, const GLfloat *params)
258bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
259bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (pname) {
260bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_AMBIENT:
261bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
262bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
263bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
264bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DIFFUSE:
265bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
266bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
267bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
268bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SPECULAR:
269bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
270bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
271bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
272bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SPOT_CUTOFF:
273bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POSITION:
274bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
275bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
276bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, light - GL_LIGHT0);
277bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
278bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	default:
279bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, light - GL_LIGHT0);
280bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
281bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
282bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
283bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
284bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
285f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_light_model(struct gl_context *ctx, GLenum pname, const GLfloat *params)
286bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
287bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LIGHT_MODEL);
288bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MODELVIEW);
289bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
290bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
291bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
292f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_line_stipple(struct gl_context *ctx, GLint factor, GLushort pattern )
293bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
294bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LINE_STIPPLE);
295bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
296bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
297bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
298f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_line_width(struct gl_context *ctx, GLfloat width)
299bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
300bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LINE_MODE);
301bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
302bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
303bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
304f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_logic_opcode(struct gl_context *ctx, GLenum opcode)
305bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
306bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LOGIC_OPCODE);
307bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
308bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
309bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
310f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_point_parameter(struct gl_context *ctx, GLenum pname, const GLfloat *params)
311bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
312bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POINT_PARAMETER);
313bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
314bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
315bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
316f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_point_size(struct gl_context *ctx, GLfloat size)
317bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
318bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POINT_MODE);
319bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
320bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
321bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
322f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_polygon_mode(struct gl_context *ctx, GLenum face, GLenum mode)
323bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
324bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_MODE);
325bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
326bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
327bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
328f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_polygon_offset(struct gl_context *ctx, GLfloat factor, GLfloat units)
329bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
330bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_OFFSET);
331bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
332bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
333bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
334f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_polygon_stipple(struct gl_context *ctx, const GLubyte *mask)
335bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
336bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_STIPPLE);
337bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
338bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
339bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
340f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_render_mode(struct gl_context *ctx, GLenum mode)
341bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
342bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, RENDER_MODE);
343bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
344bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
345bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
346f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_scissor(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
347bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
348bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, SCISSOR);
349bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
350bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
351bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
352f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_shade_model(struct gl_context *ctx, GLenum mode)
353bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
354bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, SHADE_MODEL);
355bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
356bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
357bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
358f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_stencil_func_separate(struct gl_context *ctx, GLenum face, GLenum func,
359bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			      GLint ref, GLuint mask)
360bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
361bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_FUNC);
362bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
363bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
364bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
365f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_stencil_mask_separate(struct gl_context *ctx, GLenum face, GLuint mask)
366bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
367bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_MASK);
368bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
369bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
370bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
371f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_stencil_op_separate(struct gl_context *ctx, GLenum face, GLenum fail,
372bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			    GLenum zfail, GLenum zpass)
373bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
374bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_OP);
375bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
376bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
377bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
378f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_tex_gen(struct gl_context *ctx, GLenum coord, GLenum pname,
379bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		const GLfloat *params)
380bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
381c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	switch (pname) {
382c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	case GL_TEXTURE_GEN_MODE:
383c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		context_dirty_i(ctx, TEX_GEN, ctx->Texture.CurrentUnit);
384c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		context_dirty(ctx, MODELVIEW);
385c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		break;
386c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	default:
387c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		context_dirty_i(ctx, TEX_GEN, ctx->Texture.CurrentUnit);
388c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		break;
389c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez	}
390bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
391bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
392bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
393f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_tex_env(struct gl_context *ctx, GLenum target, GLenum pname,
394bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		const GLfloat *param)
395bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
396bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (target) {
397bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_FILTER_CONTROL_EXT:
398bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
399bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
400bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	default:
401bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
402bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
403bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
404bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
405bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
406bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
407f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_tex_parameter(struct gl_context *ctx, GLenum target,
408bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		      struct gl_texture_object *t, GLenum pname,
409bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		      const GLfloat *params)
410bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
411bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (pname) {
412bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAG_FILTER:
413bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_S:
414bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_T:
415bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_R:
416bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MIN_LOD:
417bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_LOD:
418bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_ANISOTROPY_EXT:
419bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_LOD_BIAS:
420bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
421bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
422bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
423323e6bbb052f37f91c7340e16c2352bb780a43d8Francisco Jerez	case GL_TEXTURE_MIN_FILTER:
424bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_BASE_LEVEL:
425bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_LEVEL:
426323e6bbb052f37f91c7340e16c2352bb780a43d8Francisco Jerez		nouveau_texture_reallocate(ctx, t);
427bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
428bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
429bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
430bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
431bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
432bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
433f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_viewport(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
434bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
435bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, VIEWPORT);
436bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
437bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
438bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
439f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_emit_nothing(struct gl_context *ctx, int emit)
440bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
441bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
442bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
443bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezint
444f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_next_dirty_state(struct gl_context *ctx)
445bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
446bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
447bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i = BITSET_FFS(nctx->dirty) - 1;
448bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
449bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (i < 0 || i >= context_drv(ctx)->num_emit)
450bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		return -1;
451bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
452bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	return i;
453bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
454bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
455bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
456f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_state_emit(struct gl_context *ctx)
457bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
458bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
459bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	const struct nouveau_driver *drv = context_drv(ctx);
460bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i;
461bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
462bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	while ((i = nouveau_next_dirty_state(ctx)) >= 0) {
463bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		BITSET_CLEAR(nctx->dirty, i);
464bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		drv->emit[i](ctx, i);
465bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
466bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
467bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	BITSET_ZERO(nctx->dirty);
468bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
469bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
470bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
471f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_update_state(struct gl_context *ctx, GLbitfield new_state)
472bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
4731a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez	int i;
4741a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez
475bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & (_NEW_PROJECTION | _NEW_MODELVIEW))
476bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, PROJECTION);
477bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
478bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & _NEW_MODELVIEW)
479bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
480bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
4811a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez	if (new_state & _NEW_TEXTURE_MATRIX) {
4821a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez		for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++)
4831a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez			context_dirty_i(ctx, TEX_MAT, i);
4841a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez	}
4851a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez
486bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & _NEW_CURRENT_ATTRIB &&
487bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	    new_state & _NEW_LIGHT) {
488bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
489bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
490bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
491bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
492bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
493bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
494bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
495bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
496bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
497bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
49854808e560f773f652919a2865c7371e4715df510Pauli Nieminen	if (new_state & _NEW_TEXTURE) {
49954808e560f773f652919a2865c7371e4715df510Pauli Nieminen		for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
50054808e560f773f652919a2865c7371e4715df510Pauli Nieminen			if (ctx->Texture.Unit[i].Sampler)
50154808e560f773f652919a2865c7371e4715df510Pauli Nieminen				context_dirty_i(ctx, TEX_OBJ, i);
50254808e560f773f652919a2865c7371e4715df510Pauli Nieminen		}
50354808e560f773f652919a2865c7371e4715df510Pauli Nieminen	}
50454808e560f773f652919a2865c7371e4715df510Pauli Nieminen
505bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	_swrast_InvalidateState(ctx, new_state);
506bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	_tnl_InvalidateState(ctx, new_state);
507bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
508bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	nouveau_state_emit(ctx);
509bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
510bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
511bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
512f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnouveau_state_init(struct gl_context *ctx)
513bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
514bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
515bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
516bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.AlphaFunc = nouveau_alpha_func;
517bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendColor = nouveau_blend_color;
518bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendEquationSeparate = nouveau_blend_equation_separate;
519bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendFuncSeparate = nouveau_blend_func_separate;
520bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ClipPlane = nouveau_clip_plane;
521bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ColorMask = nouveau_color_mask;
522bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ColorMaterial = nouveau_color_material;
523bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.CullFace = nouveau_cull_face;
524bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.FrontFace = nouveau_front_face;
525bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthFunc = nouveau_depth_func;
526bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthMask = nouveau_depth_mask;
527bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthRange = nouveau_depth_range;
5284a282629c28864b977a86cf5c314bf2fafdff3bfFrancisco Jerez	ctx->Driver.ReadBuffer = nouveau_read_buffer;
529bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DrawBuffers = nouveau_draw_buffers;
530bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Enable = nouveau_enable;
531bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Fogfv = nouveau_fog;
532bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Lightfv = nouveau_light;
533bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LightModelfv = nouveau_light_model;
534bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LineStipple = nouveau_line_stipple;
535bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LineWidth = nouveau_line_width;
536bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LogicOpcode = nouveau_logic_opcode;
537bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PointParameterfv = nouveau_point_parameter;
538bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PointSize = nouveau_point_size;
539bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonMode = nouveau_polygon_mode;
540bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonOffset = nouveau_polygon_offset;
541bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonStipple = nouveau_polygon_stipple;
542bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.RenderMode = nouveau_render_mode;
543bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Scissor = nouveau_scissor;
544bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ShadeModel = nouveau_shade_model;
545bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilFuncSeparate = nouveau_stencil_func_separate;
546bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilMaskSeparate = nouveau_stencil_mask_separate;
547bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilOpSeparate = nouveau_stencil_op_separate;
548bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexGen = nouveau_tex_gen;
549bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexEnv = nouveau_tex_env;
550bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexParameter = nouveau_tex_parameter;
551bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Viewport = nouveau_viewport;
552bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
553bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.UpdateState = nouveau_update_state;
554bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
555bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	BITSET_ONES(nctx->dirty);
556bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
557