Merge commit 'origin/gallium-0.1' into gallium-0.2
[mesa.git] / src / mesa / drivers / dri / i965 / intel_state.c
1 /**************************************************************************
2 *
3 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28
29 #include "glheader.h"
30 #include "context.h"
31 #include "macros.h"
32 #include "enums.h"
33 #include "colormac.h"
34 #include "dd.h"
35
36 #include "intel_screen.h"
37 #include "intel_context.h"
38 #include "intel_regions.h"
39 #include "swrast/swrast.h"
40
41 int intel_translate_shadow_compare_func( GLenum func )
42 {
43 switch(func) {
44 case GL_NEVER:
45 return COMPAREFUNC_ALWAYS;
46 case GL_LESS:
47 return COMPAREFUNC_LEQUAL;
48 case GL_LEQUAL:
49 return COMPAREFUNC_LESS;
50 case GL_GREATER:
51 return COMPAREFUNC_GEQUAL;
52 case GL_GEQUAL:
53 return COMPAREFUNC_GREATER;
54 case GL_NOTEQUAL:
55 return COMPAREFUNC_EQUAL;
56 case GL_EQUAL:
57 return COMPAREFUNC_NOTEQUAL;
58 case GL_ALWAYS:
59 return COMPAREFUNC_NEVER;
60 }
61
62 fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, func);
63 return COMPAREFUNC_NEVER;
64 }
65
66 int intel_translate_compare_func( GLenum func )
67 {
68 switch(func) {
69 case GL_NEVER:
70 return COMPAREFUNC_NEVER;
71 case GL_LESS:
72 return COMPAREFUNC_LESS;
73 case GL_LEQUAL:
74 return COMPAREFUNC_LEQUAL;
75 case GL_GREATER:
76 return COMPAREFUNC_GREATER;
77 case GL_GEQUAL:
78 return COMPAREFUNC_GEQUAL;
79 case GL_NOTEQUAL:
80 return COMPAREFUNC_NOTEQUAL;
81 case GL_EQUAL:
82 return COMPAREFUNC_EQUAL;
83 case GL_ALWAYS:
84 return COMPAREFUNC_ALWAYS;
85 }
86
87 fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, func);
88 return COMPAREFUNC_ALWAYS;
89 }
90
91 int intel_translate_stencil_op( GLenum op )
92 {
93 switch(op) {
94 case GL_KEEP:
95 return STENCILOP_KEEP;
96 case GL_ZERO:
97 return STENCILOP_ZERO;
98 case GL_REPLACE:
99 return STENCILOP_REPLACE;
100 case GL_INCR:
101 return STENCILOP_INCRSAT;
102 case GL_DECR:
103 return STENCILOP_DECRSAT;
104 case GL_INCR_WRAP:
105 return STENCILOP_INCR;
106 case GL_DECR_WRAP:
107 return STENCILOP_DECR;
108 case GL_INVERT:
109 return STENCILOP_INVERT;
110 default:
111 return STENCILOP_ZERO;
112 }
113 }
114
115 int intel_translate_blend_factor( GLenum factor )
116 {
117 switch(factor) {
118 case GL_ZERO:
119 return BLENDFACT_ZERO;
120 case GL_SRC_ALPHA:
121 return BLENDFACT_SRC_ALPHA;
122 case GL_ONE:
123 return BLENDFACT_ONE;
124 case GL_SRC_COLOR:
125 return BLENDFACT_SRC_COLR;
126 case GL_ONE_MINUS_SRC_COLOR:
127 return BLENDFACT_INV_SRC_COLR;
128 case GL_DST_COLOR:
129 return BLENDFACT_DST_COLR;
130 case GL_ONE_MINUS_DST_COLOR:
131 return BLENDFACT_INV_DST_COLR;
132 case GL_ONE_MINUS_SRC_ALPHA:
133 return BLENDFACT_INV_SRC_ALPHA;
134 case GL_DST_ALPHA:
135 return BLENDFACT_DST_ALPHA;
136 case GL_ONE_MINUS_DST_ALPHA:
137 return BLENDFACT_INV_DST_ALPHA;
138 case GL_SRC_ALPHA_SATURATE:
139 return BLENDFACT_SRC_ALPHA_SATURATE;
140 case GL_CONSTANT_COLOR:
141 return BLENDFACT_CONST_COLOR;
142 case GL_ONE_MINUS_CONSTANT_COLOR:
143 return BLENDFACT_INV_CONST_COLOR;
144 case GL_CONSTANT_ALPHA:
145 return BLENDFACT_CONST_ALPHA;
146 case GL_ONE_MINUS_CONSTANT_ALPHA:
147 return BLENDFACT_INV_CONST_ALPHA;
148 }
149
150 fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, factor);
151 return BLENDFACT_ZERO;
152 }
153
154 int intel_translate_logic_op( GLenum opcode )
155 {
156 switch(opcode) {
157 case GL_CLEAR:
158 return LOGICOP_CLEAR;
159 case GL_AND:
160 return LOGICOP_AND;
161 case GL_AND_REVERSE:
162 return LOGICOP_AND_RVRSE;
163 case GL_COPY:
164 return LOGICOP_COPY;
165 case GL_COPY_INVERTED:
166 return LOGICOP_COPY_INV;
167 case GL_AND_INVERTED:
168 return LOGICOP_AND_INV;
169 case GL_NOOP:
170 return LOGICOP_NOOP;
171 case GL_XOR:
172 return LOGICOP_XOR;
173 case GL_OR:
174 return LOGICOP_OR;
175 case GL_OR_INVERTED:
176 return LOGICOP_OR_INV;
177 case GL_NOR:
178 return LOGICOP_NOR;
179 case GL_EQUIV:
180 return LOGICOP_EQUIV;
181 case GL_INVERT:
182 return LOGICOP_INV;
183 case GL_OR_REVERSE:
184 return LOGICOP_OR_RVRSE;
185 case GL_NAND:
186 return LOGICOP_NAND;
187 case GL_SET:
188 return LOGICOP_SET;
189 default:
190 return LOGICOP_SET;
191 }
192 }
193
194
195 static void intelClearColor(GLcontext *ctx, const GLfloat color[4])
196 {
197 struct intel_context *intel = intel_context(ctx);
198
199 UNCLAMPED_FLOAT_TO_RGBA_CHAN(intel->clear_chan, color);
200
201 intel->ClearColor8888 = INTEL_PACKCOLOR8888(intel->clear_chan[0],
202 intel->clear_chan[1],
203 intel->clear_chan[2],
204 intel->clear_chan[3]);
205 intel->ClearColor565 = INTEL_PACKCOLOR565(intel->clear_chan[0],
206 intel->clear_chan[1],
207 intel->clear_chan[2]);
208 }
209
210
211
212 /* Fallback to swrast for select and feedback.
213 */
214 static void intelRenderMode( GLcontext *ctx, GLenum mode )
215 {
216 struct intel_context *intel = intel_context(ctx);
217 FALLBACK( intel, INTEL_FALLBACK_RENDERMODE, (mode != GL_RENDER) );
218 }
219
220
221 void intelInitStateFuncs( struct dd_function_table *functions )
222 {
223 functions->RenderMode = intelRenderMode;
224 functions->ClearColor = intelClearColor;
225 }