nouveau_state.c revision 75f52d1e5210944d7e92787c637285fd83533053
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
36bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_alpha_func(GLcontext *ctx, GLenum func, GLfloat ref)
37bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
38bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, ALPHA_FUNC);
39bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
40bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
41bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
42bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_blend_color(GLcontext *ctx, const GLfloat color[4])
43bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
44bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, BLEND_COLOR);
45bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
46bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
47bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
48bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_blend_equation_separate(GLcontext *ctx, GLenum modeRGB, GLenum modeA)
49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
50bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, BLEND_EQUATION);
51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
52bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
54bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_blend_func_separate(GLcontext *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
61bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_clip_plane(GLcontext *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
67bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_color_mask(GLcontext *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
74bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_color_material(GLcontext *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
86bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_cull_face(GLcontext *ctx, GLenum mode)
87bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
88bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, CULL_FACE);
89bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
90bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
91bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
92bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_front_face(GLcontext *ctx, GLenum mode)
93bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
94bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FRONT_FACE);
95bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
96bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
97bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
98bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_depth_func(GLcontext *ctx, GLenum func)
99bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
100bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, DEPTH);
101bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
102bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
103bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
104bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_depth_mask(GLcontext *ctx, GLboolean flag)
105bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
106bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, DEPTH);
107bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
108bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
109bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
110bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_depth_range(GLcontext *ctx, GLclampd nearval, GLclampd farval)
111bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
112bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, VIEWPORT);
113bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
114bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
115bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
116bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_draw_buffer(GLcontext *ctx, GLenum buffer)
117bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
118bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FRAMEBUFFER);
119bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
120bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
121bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
122bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_draw_buffers(GLcontext *ctx, GLsizei n, const GLenum *buffers)
123bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
124bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FRAMEBUFFER);
125bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
126bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
127bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
128bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_enable(GLcontext *ctx, GLenum cap, GLboolean state)
129bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
130bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i;
131bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
132bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (cap) {
133bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_ALPHA_TEST:
134bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, ALPHA_FUNC);
135bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
136bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_BLEND:
137bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, BLEND_EQUATION);
138bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
139bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_LOGIC_OP:
140bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LOGIC_OPCODE);
141bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
142bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_MATERIAL:
143bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, COLOR_MATERIAL);
144bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
145bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
146bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
147bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
148bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
149bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
150bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
151bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_COLOR_SUM_EXT:
152bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
15375f52d1e5210944d7e92787c637285fd83533053Francisco Jerez		context_dirty(ctx, LIGHT_MODEL);
154bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
155bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_CULL_FACE:
156bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, CULL_FACE);
157bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
158bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DEPTH_TEST:
159bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, DEPTH);
160bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
161bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DITHER:
162bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, DITHER);
163bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
164bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_FOG:
165bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FOG);
166bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
167bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
168bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
169bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT0:
170bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT1:
171bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT2:
172bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT3:
173bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT4:
174bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT5:
175bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT6:
176bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHT7:
177bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
178bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
179bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, cap - GL_LIGHT0);
180bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
181bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
182bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
183bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
184bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
185bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
186bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
187bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
188bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
189bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LIGHTING:
190bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, FRAG);
191bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
192bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
193bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
194bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		for (i = 0; i < MAX_LIGHTS; i++) {
195bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			if (ctx->Light.Light[i].Enabled)
196bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez				context_dirty_i(ctx, LIGHT_SOURCE, i);
197bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		}
198bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
199bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
200bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
201bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
202bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
203bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
204bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
205bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
206bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
207bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
208bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_LINE_SMOOTH:
209bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LINE_MODE);
210bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
211bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_NORMALIZE:
212bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
213bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
214bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POINT_SMOOTH:
215bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POINT_MODE);
216bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
217bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_POINT:
218bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_LINE:
219bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_OFFSET_FILL:
220bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POLYGON_OFFSET);
221bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
222bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POLYGON_SMOOTH:
223bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, POLYGON_MODE);
224bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
225bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SCISSOR_TEST:
226bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, SCISSOR);
227bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
228bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_STENCIL_TEST:
229bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, STENCIL_FUNC);
230bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
231bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_1D:
232bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_2D:
233bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_3D:
234bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
235bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
236bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
237bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
238bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
239bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
240bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
241bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_fog(GLcontext *ctx, GLenum pname, const GLfloat *params)
242bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
243bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, FOG);
244bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
245bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
246bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
247bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_light(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params)
248bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
249bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (pname) {
250bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_AMBIENT:
251bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
252bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
253bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
254bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_DIFFUSE:
255bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
256bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
257bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
258bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SPECULAR:
259bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
260bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
261bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
262bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_SPOT_CUTOFF:
263bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_POSITION:
264bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
265bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, LIGHT_ENABLE);
266bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, light - GL_LIGHT0);
267bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
268bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	default:
269bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, LIGHT_SOURCE, light - GL_LIGHT0);
270bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
271bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
272bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
273bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
274bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
275bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_light_model(GLcontext *ctx, GLenum pname, const GLfloat *params)
276bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
277bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LIGHT_MODEL);
278bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, MODELVIEW);
279bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
280bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
281bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
282bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_line_stipple(GLcontext *ctx, GLint factor, GLushort pattern )
283bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
284bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LINE_STIPPLE);
285bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
286bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
287bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
288bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_line_width(GLcontext *ctx, GLfloat width)
289bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
290bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LINE_MODE);
291bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
292bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
293bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
294bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_logic_opcode(GLcontext *ctx, GLenum opcode)
295bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
296bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, LOGIC_OPCODE);
297bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
298bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
299bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
300bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_point_parameter(GLcontext *ctx, GLenum pname, const GLfloat *params)
301bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
302bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POINT_PARAMETER);
303bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
304bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
305bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
306bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_point_size(GLcontext *ctx, GLfloat size)
307bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
308bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POINT_MODE);
309bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
310bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
311bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
312bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_polygon_mode(GLcontext *ctx, GLenum face, GLenum mode)
313bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
314bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_MODE);
315bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
316bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
317bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
318bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_polygon_offset(GLcontext *ctx, GLfloat factor, GLfloat units)
319bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
320bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_OFFSET);
321bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
322bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
323bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
324bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_polygon_stipple(GLcontext *ctx, const GLubyte *mask)
325bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
326bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, POLYGON_STIPPLE);
327bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
328bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
329bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
330bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_render_mode(GLcontext *ctx, GLenum mode)
331bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
332bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, RENDER_MODE);
333bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
334bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
335bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
336bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_scissor(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
337bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
338bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, SCISSOR);
339bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
340bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
341bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
342bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_shade_model(GLcontext *ctx, GLenum mode)
343bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
344bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, SHADE_MODEL);
345bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
346bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
347bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
348bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_stencil_func_separate(GLcontext *ctx, GLenum face, GLenum func,
349bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			      GLint ref, GLuint mask)
350bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
351bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_FUNC);
352bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
353bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
354bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
355bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_stencil_mask_separate(GLcontext *ctx, GLenum face, GLuint mask)
356bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
357bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_MASK);
358bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
359bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
360bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
361bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_stencil_op_separate(GLcontext *ctx, GLenum face, GLenum fail,
362bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			    GLenum zfail, GLenum zpass)
363bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
364bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, STENCIL_OP);
365bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
366bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
367bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
368bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_tex_gen(GLcontext *ctx, GLenum coord, GLenum pname,
369bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		const GLfloat *params)
370bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
371bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty_i(ctx, TEX_GEN, ctx->Texture.CurrentUnit);
372bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
373bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
374bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
375bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_tex_env(GLcontext *ctx, GLenum target, GLenum pname,
376bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		const GLfloat *param)
377bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
378bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (target) {
379bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_FILTER_CONTROL_EXT:
380bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
381bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
382bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	default:
383bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
384bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
385bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
386bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
387bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
388bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
389bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_tex_parameter(GLcontext *ctx, GLenum target,
390bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		      struct gl_texture_object *t, GLenum pname,
391bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		      const GLfloat *params)
392bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
393bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (pname) {
394bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAG_FILTER:
395bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_S:
396bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_T:
397bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_WRAP_R:
398bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MIN_LOD:
399bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_LOD:
400bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_ANISOTROPY_EXT:
401bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_LOD_BIAS:
402bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
403bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
404bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
405323e6bbb052f37f91c7340e16c2352bb780a43d8Francisco Jerez	case GL_TEXTURE_MIN_FILTER:
406bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_BASE_LEVEL:
407bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_TEXTURE_MAX_LEVEL:
408323e6bbb052f37f91c7340e16c2352bb780a43d8Francisco Jerez		nouveau_texture_reallocate(ctx, t);
409bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
410bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		break;
411bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
412bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
413bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
414bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
415bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
416bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
417bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	context_dirty(ctx, VIEWPORT);
418bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
419bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
420bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
421bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_emit_nothing(GLcontext *ctx, int emit)
422bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
423bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
424bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
425bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezint
426bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_next_dirty_state(GLcontext *ctx)
427bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
428bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
429bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i = BITSET_FFS(nctx->dirty) - 1;
430bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
431bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (i < 0 || i >= context_drv(ctx)->num_emit)
432bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		return -1;
433bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
434bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	return i;
435bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
436bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
437bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
438bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_state_emit(GLcontext *ctx)
439bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
440bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
441bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	const struct nouveau_driver *drv = context_drv(ctx);
442bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	int i;
443bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
444bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	while ((i = nouveau_next_dirty_state(ctx)) >= 0) {
445bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		BITSET_CLEAR(nctx->dirty, i);
446bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		drv->emit[i](ctx, i);
447bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
448bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
449bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	BITSET_ZERO(nctx->dirty);
450bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
451bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	nouveau_bo_state_emit(ctx);
452bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
453bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
454bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
455bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_update_state(GLcontext *ctx, GLbitfield new_state)
456bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
457bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & (_NEW_PROJECTION | _NEW_MODELVIEW))
458bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, PROJECTION);
459bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
460bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & _NEW_MODELVIEW)
461bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MODELVIEW);
462bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
463bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (new_state & _NEW_CURRENT_ATTRIB &&
464bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	    new_state & _NEW_LIGHT) {
465bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_AMBIENT);
466bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_AMBIENT);
467bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_DIFFUSE);
468bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_DIFFUSE);
469bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SPECULAR);
470bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SPECULAR);
471bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_FRONT_SHININESS);
472bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		context_dirty(ctx, MATERIAL_BACK_SHININESS);
473bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
474bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
475bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	_swrast_InvalidateState(ctx, new_state);
476bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	_tnl_InvalidateState(ctx, new_state);
477bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
478bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	nouveau_state_emit(ctx);
479bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
480bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
481bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid
482bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznouveau_state_init(GLcontext *ctx)
483bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
484bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
485bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
486bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.AlphaFunc = nouveau_alpha_func;
487bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendColor = nouveau_blend_color;
488bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendEquationSeparate = nouveau_blend_equation_separate;
489bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.BlendFuncSeparate = nouveau_blend_func_separate;
490bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ClipPlane = nouveau_clip_plane;
491bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ColorMask = nouveau_color_mask;
492bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ColorMaterial = nouveau_color_material;
493bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.CullFace = nouveau_cull_face;
494bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.FrontFace = nouveau_front_face;
495bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthFunc = nouveau_depth_func;
496bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthMask = nouveau_depth_mask;
497bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DepthRange = nouveau_depth_range;
498bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DrawBuffer = nouveau_draw_buffer;
499bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.DrawBuffers = nouveau_draw_buffers;
500bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Enable = nouveau_enable;
501bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Fogfv = nouveau_fog;
502bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Lightfv = nouveau_light;
503bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LightModelfv = nouveau_light_model;
504bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LineStipple = nouveau_line_stipple;
505bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LineWidth = nouveau_line_width;
506bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.LogicOpcode = nouveau_logic_opcode;
507bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PointParameterfv = nouveau_point_parameter;
508bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PointSize = nouveau_point_size;
509bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonMode = nouveau_polygon_mode;
510bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonOffset = nouveau_polygon_offset;
511bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.PolygonStipple = nouveau_polygon_stipple;
512bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.RenderMode = nouveau_render_mode;
513bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Scissor = nouveau_scissor;
514bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.ShadeModel = nouveau_shade_model;
515bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilFuncSeparate = nouveau_stencil_func_separate;
516bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilMaskSeparate = nouveau_stencil_mask_separate;
517bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.StencilOpSeparate = nouveau_stencil_op_separate;
518bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexGen = nouveau_tex_gen;
519bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexEnv = nouveau_tex_env;
520bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.TexParameter = nouveau_tex_parameter;
521bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.Viewport = nouveau_viewport;
522bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
523bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Driver.UpdateState = nouveau_update_state;
524bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
525bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	BITSET_ONES(nctx->dirty);
526bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
527