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