c5ef909dbf1ce924be9bfd790c2812e14e45eef4
[mesa.git] / src / mesa / drivers / dri / intel / 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 "main/glheader.h"
30 #include "main/context.h"
31 #include "main/macros.h"
32 #include "main/enums.h"
33 #include "main/colormac.h"
34 #include "main/dd.h"
35
36 #include "intel_screen.h"
37 #include "intel_context.h"
38
39 int
40 intel_translate_shadow_compare_func(GLenum func)
41 {
42 switch (func) {
43 case GL_NEVER:
44 return COMPAREFUNC_ALWAYS;
45 case GL_LESS:
46 return COMPAREFUNC_LEQUAL;
47 case GL_LEQUAL:
48 return COMPAREFUNC_LESS;
49 case GL_GREATER:
50 return COMPAREFUNC_GEQUAL;
51 case GL_GEQUAL:
52 return COMPAREFUNC_GREATER;
53 case GL_NOTEQUAL:
54 return COMPAREFUNC_EQUAL;
55 case GL_EQUAL:
56 return COMPAREFUNC_NOTEQUAL;
57 case GL_ALWAYS:
58 return COMPAREFUNC_NEVER;
59 }
60
61 fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, func);
62 return COMPAREFUNC_NEVER;
63 }
64
65 int
66 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
92 intel_translate_stencil_op(GLenum op)
93 {
94 switch (op) {
95 case GL_KEEP:
96 return STENCILOP_KEEP;
97 case GL_ZERO:
98 return STENCILOP_ZERO;
99 case GL_REPLACE:
100 return STENCILOP_REPLACE;
101 case GL_INCR:
102 return STENCILOP_INCRSAT;
103 case GL_DECR:
104 return STENCILOP_DECRSAT;
105 case GL_INCR_WRAP:
106 return STENCILOP_INCR;
107 case GL_DECR_WRAP:
108 return STENCILOP_DECR;
109 case GL_INVERT:
110 return STENCILOP_INVERT;
111 default:
112 return STENCILOP_ZERO;
113 }
114 }
115
116 int
117 intel_translate_blend_factor(GLenum factor)
118 {
119 switch (factor) {
120 case GL_ZERO:
121 return BLENDFACT_ZERO;
122 case GL_SRC_ALPHA:
123 return BLENDFACT_SRC_ALPHA;
124 case GL_ONE:
125 return BLENDFACT_ONE;
126 case GL_SRC_COLOR:
127 return BLENDFACT_SRC_COLR;
128 case GL_ONE_MINUS_SRC_COLOR:
129 return BLENDFACT_INV_SRC_COLR;
130 case GL_DST_COLOR:
131 return BLENDFACT_DST_COLR;
132 case GL_ONE_MINUS_DST_COLOR:
133 return BLENDFACT_INV_DST_COLR;
134 case GL_ONE_MINUS_SRC_ALPHA:
135 return BLENDFACT_INV_SRC_ALPHA;
136 case GL_DST_ALPHA:
137 return BLENDFACT_DST_ALPHA;
138 case GL_ONE_MINUS_DST_ALPHA:
139 return BLENDFACT_INV_DST_ALPHA;
140 case GL_SRC_ALPHA_SATURATE:
141 return BLENDFACT_SRC_ALPHA_SATURATE;
142 case GL_CONSTANT_COLOR:
143 return BLENDFACT_CONST_COLOR;
144 case GL_ONE_MINUS_CONSTANT_COLOR:
145 return BLENDFACT_INV_CONST_COLOR;
146 case GL_CONSTANT_ALPHA:
147 return BLENDFACT_CONST_ALPHA;
148 case GL_ONE_MINUS_CONSTANT_ALPHA:
149 return BLENDFACT_INV_CONST_ALPHA;
150 }
151
152 fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, factor);
153 return BLENDFACT_ZERO;
154 }
155
156 int
157 intel_translate_logic_op(GLenum opcode)
158 {
159 switch (opcode) {
160 case GL_CLEAR:
161 return LOGICOP_CLEAR;
162 case GL_AND:
163 return LOGICOP_AND;
164 case GL_AND_REVERSE:
165 return LOGICOP_AND_RVRSE;
166 case GL_COPY:
167 return LOGICOP_COPY;
168 case GL_COPY_INVERTED:
169 return LOGICOP_COPY_INV;
170 case GL_AND_INVERTED:
171 return LOGICOP_AND_INV;
172 case GL_NOOP:
173 return LOGICOP_NOOP;
174 case GL_XOR:
175 return LOGICOP_XOR;
176 case GL_OR:
177 return LOGICOP_OR;
178 case GL_OR_INVERTED:
179 return LOGICOP_OR_INV;
180 case GL_NOR:
181 return LOGICOP_NOR;
182 case GL_EQUIV:
183 return LOGICOP_EQUIV;
184 case GL_INVERT:
185 return LOGICOP_INV;
186 case GL_OR_REVERSE:
187 return LOGICOP_OR_RVRSE;
188 case GL_NAND:
189 return LOGICOP_NAND;
190 case GL_SET:
191 return LOGICOP_SET;
192 default:
193 return LOGICOP_SET;
194 }
195 }
196
197 /* Fallback to swrast for select and feedback.
198 */
199 static void
200 intelRenderMode(GLcontext *ctx, GLenum mode)
201 {
202 struct intel_context *intel = intel_context(ctx);
203 FALLBACK(intel, INTEL_FALLBACK_RENDERMODE, (mode != GL_RENDER));
204 }
205
206
207 void
208 intelInitStateFuncs(struct dd_function_table *functions)
209 {
210 functions->RenderMode = intelRenderMode;
211 }