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