Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3770 | Serge | 1 | /************************************************************************** |
2 | * |
||
3 | * Copyright 2009 VMware, Inc. |
||
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 VMWARE 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 "util/u_memory.h" |
||
30 | #include "util/u_debug.h" |
||
31 | #include "util/u_dump.h" |
||
32 | |||
33 | |||
34 | #if 0 |
||
35 | static const char * |
||
36 | util_dump_strip_prefix(const char *name, |
||
37 | const char *prefix) |
||
38 | { |
||
39 | const char *stripped; |
||
40 | assert(name); |
||
41 | assert(prefix); |
||
42 | stripped = name; |
||
43 | while(*prefix) { |
||
44 | if(*stripped != *prefix) |
||
45 | return name; |
||
46 | |||
47 | ++stripped; |
||
48 | ++prefix; |
||
49 | } |
||
50 | return stripped; |
||
51 | } |
||
52 | #endif |
||
53 | |||
54 | static const char * |
||
55 | util_dump_enum_continuous(unsigned value, |
||
56 | unsigned num_names, |
||
57 | const char **names) |
||
58 | { |
||
59 | if (value >= num_names) |
||
60 | return UTIL_DUMP_INVALID_NAME; |
||
61 | return names[value]; |
||
62 | } |
||
63 | |||
64 | |||
65 | #define DEFINE_UTIL_DUMP_CONTINUOUS(_name) \ |
||
66 | const char * \ |
||
67 | util_dump_##_name(unsigned value, boolean shortened) \ |
||
68 | { \ |
||
69 | if(shortened) \ |
||
70 | return util_dump_enum_continuous(value, Elements(util_dump_##_name##_short_names), util_dump_##_name##_short_names); \ |
||
71 | else \ |
||
72 | return util_dump_enum_continuous(value, Elements(util_dump_##_name##_names), util_dump_##_name##_names); \ |
||
73 | } |
||
74 | |||
75 | |||
76 | /** |
||
77 | * Same as DEFINE_UTIL_DUMP_CONTINUOUS but with static assertions to detect |
||
78 | * failures to update lists. |
||
79 | */ |
||
80 | #define DEFINE_UTIL_DUMP_CONTINUOUS_COUNT(_name, _count) \ |
||
81 | const char * \ |
||
82 | util_dump_##_name(unsigned value, boolean shortened) \ |
||
83 | { \ |
||
84 | STATIC_ASSERT(Elements(util_dump_##_name##_names) == _count); \ |
||
85 | STATIC_ASSERT(Elements(util_dump_##_name##_short_names) == _count); \ |
||
86 | if(shortened) \ |
||
87 | return util_dump_enum_continuous(value, Elements(util_dump_##_name##_short_names), util_dump_##_name##_short_names); \ |
||
88 | else \ |
||
89 | return util_dump_enum_continuous(value, Elements(util_dump_##_name##_names), util_dump_##_name##_names); \ |
||
90 | } |
||
91 | |||
92 | |||
93 | static const char * |
||
94 | util_dump_blend_factor_names[] = { |
||
95 | UTIL_DUMP_INVALID_NAME, /* 0x0 */ |
||
96 | "PIPE_BLENDFACTOR_ONE", |
||
97 | "PIPE_BLENDFACTOR_SRC_COLOR", |
||
98 | "PIPE_BLENDFACTOR_SRC_ALPHA", |
||
99 | "PIPE_BLENDFACTOR_DST_ALPHA", |
||
100 | "PIPE_BLENDFACTOR_DST_COLOR", |
||
101 | "PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE", |
||
102 | "PIPE_BLENDFACTOR_CONST_COLOR", |
||
103 | "PIPE_BLENDFACTOR_CONST_ALPHA", |
||
104 | "PIPE_BLENDFACTOR_SRC1_COLOR", |
||
105 | "PIPE_BLENDFACTOR_SRC1_ALPHA", |
||
106 | UTIL_DUMP_INVALID_NAME, /* 0x0b */ |
||
107 | UTIL_DUMP_INVALID_NAME, /* 0x0c */ |
||
108 | UTIL_DUMP_INVALID_NAME, /* 0x0d */ |
||
109 | UTIL_DUMP_INVALID_NAME, /* 0x0e */ |
||
110 | UTIL_DUMP_INVALID_NAME, /* 0x0f */ |
||
111 | UTIL_DUMP_INVALID_NAME, /* 0x10 */ |
||
112 | "PIPE_BLENDFACTOR_ZERO", |
||
113 | "PIPE_BLENDFACTOR_INV_SRC_COLOR", |
||
114 | "PIPE_BLENDFACTOR_INV_SRC_ALPHA", |
||
115 | "PIPE_BLENDFACTOR_INV_DST_ALPHA", |
||
116 | "PIPE_BLENDFACTOR_INV_DST_COLOR", |
||
117 | UTIL_DUMP_INVALID_NAME, /* 0x16 */ |
||
118 | "PIPE_BLENDFACTOR_INV_CONST_COLOR", |
||
119 | "PIPE_BLENDFACTOR_INV_CONST_ALPHA", |
||
120 | "PIPE_BLENDFACTOR_INV_SRC1_COLOR", |
||
121 | "PIPE_BLENDFACTOR_INV_SRC1_ALPHA" |
||
122 | }; |
||
123 | |||
124 | static const char * |
||
125 | util_dump_blend_factor_short_names[] = { |
||
126 | UTIL_DUMP_INVALID_NAME, /* 0x0 */ |
||
127 | "one", |
||
128 | "src_color", |
||
129 | "src_alpha", |
||
130 | "dst_alpha", |
||
131 | "dst_color", |
||
132 | "src_alpha_saturate", |
||
133 | "const_color", |
||
134 | "const_alpha", |
||
135 | "src1_color", |
||
136 | "src1_alpha", |
||
137 | UTIL_DUMP_INVALID_NAME, /* 0x0b */ |
||
138 | UTIL_DUMP_INVALID_NAME, /* 0x0c */ |
||
139 | UTIL_DUMP_INVALID_NAME, /* 0x0d */ |
||
140 | UTIL_DUMP_INVALID_NAME, /* 0x0e */ |
||
141 | UTIL_DUMP_INVALID_NAME, /* 0x0f */ |
||
142 | UTIL_DUMP_INVALID_NAME, /* 0x10 */ |
||
143 | "zero", |
||
144 | "inv_src_color", |
||
145 | "inv_src_alpha", |
||
146 | "inv_dst_alpha", |
||
147 | "inv_dst_color", |
||
148 | UTIL_DUMP_INVALID_NAME, /* 0x16 */ |
||
149 | "inv_const_color", |
||
150 | "inv_const_alpha", |
||
151 | "inv_src1_color", |
||
152 | "inv_src1_alpha" |
||
153 | }; |
||
154 | |||
155 | DEFINE_UTIL_DUMP_CONTINUOUS(blend_factor) |
||
156 | |||
157 | |||
158 | static const char * |
||
159 | util_dump_blend_func_names[] = { |
||
160 | "PIPE_BLEND_ADD", |
||
161 | "PIPE_BLEND_SUBTRACT", |
||
162 | "PIPE_BLEND_REVERSE_SUBTRACT", |
||
163 | "PIPE_BLEND_MIN", |
||
164 | "PIPE_BLEND_MAX" |
||
165 | }; |
||
166 | |||
167 | static const char * |
||
168 | util_dump_blend_func_short_names[] = { |
||
169 | "add", |
||
170 | "sub", |
||
171 | "rev_sub", |
||
172 | "min", |
||
173 | "max" |
||
174 | }; |
||
175 | |||
176 | DEFINE_UTIL_DUMP_CONTINUOUS(blend_func) |
||
177 | |||
178 | |||
179 | static const char * |
||
180 | util_dump_logicop_names[] = { |
||
181 | "PIPE_LOGICOP_CLEAR", |
||
182 | "PIPE_LOGICOP_NOR", |
||
183 | "PIPE_LOGICOP_AND_INVERTED", |
||
184 | "PIPE_LOGICOP_COPY_INVERTED", |
||
185 | "PIPE_LOGICOP_AND_REVERSE", |
||
186 | "PIPE_LOGICOP_INVERT", |
||
187 | "PIPE_LOGICOP_XOR", |
||
188 | "PIPE_LOGICOP_NAND", |
||
189 | "PIPE_LOGICOP_AND", |
||
190 | "PIPE_LOGICOP_EQUIV", |
||
191 | "PIPE_LOGICOP_NOOP", |
||
192 | "PIPE_LOGICOP_OR_INVERTED", |
||
193 | "PIPE_LOGICOP_COPY", |
||
194 | "PIPE_LOGICOP_OR_REVERSE", |
||
195 | "PIPE_LOGICOP_OR", |
||
196 | "PIPE_LOGICOP_SET" |
||
197 | }; |
||
198 | |||
199 | static const char * |
||
200 | util_dump_logicop_short_names[] = { |
||
201 | "clear", |
||
202 | "nor", |
||
203 | "and_inverted", |
||
204 | "copy_inverted", |
||
205 | "and_reverse", |
||
206 | "invert", |
||
207 | "xor", |
||
208 | "nand", |
||
209 | "and", |
||
210 | "equiv", |
||
211 | "noop", |
||
212 | "or_inverted", |
||
213 | "copy", |
||
214 | "or_reverse", |
||
215 | "or", |
||
216 | "set" |
||
217 | }; |
||
218 | |||
219 | DEFINE_UTIL_DUMP_CONTINUOUS(logicop) |
||
220 | |||
221 | |||
222 | static const char * |
||
223 | util_dump_func_names[] = { |
||
224 | "PIPE_FUNC_NEVER", |
||
225 | "PIPE_FUNC_LESS", |
||
226 | "PIPE_FUNC_EQUAL", |
||
227 | "PIPE_FUNC_LEQUAL", |
||
228 | "PIPE_FUNC_GREATER", |
||
229 | "PIPE_FUNC_NOTEQUAL", |
||
230 | "PIPE_FUNC_GEQUAL", |
||
231 | "PIPE_FUNC_ALWAYS" |
||
232 | }; |
||
233 | |||
234 | static const char * |
||
235 | util_dump_func_short_names[] = { |
||
236 | "never", |
||
237 | "less", |
||
238 | "equal", |
||
239 | "less_equal", |
||
240 | "greater", |
||
241 | "not_equal", |
||
242 | "greater_equal", |
||
243 | "always" |
||
244 | }; |
||
245 | |||
246 | DEFINE_UTIL_DUMP_CONTINUOUS(func) |
||
247 | |||
248 | |||
249 | static const char * |
||
250 | util_dump_stencil_op_names[] = { |
||
251 | "PIPE_STENCIL_OP_KEEP", |
||
252 | "PIPE_STENCIL_OP_ZERO", |
||
253 | "PIPE_STENCIL_OP_REPLACE", |
||
254 | "PIPE_STENCIL_OP_INCR", |
||
255 | "PIPE_STENCIL_OP_DECR", |
||
256 | "PIPE_STENCIL_OP_INCR_WRAP", |
||
257 | "PIPE_STENCIL_OP_DECR_WRAP", |
||
258 | "PIPE_STENCIL_OP_INVERT" |
||
259 | }; |
||
260 | |||
261 | static const char * |
||
262 | util_dump_stencil_op_short_names[] = { |
||
263 | "keep", |
||
264 | "zero", |
||
265 | "replace", |
||
266 | "incr", |
||
267 | "decr", |
||
268 | "incr_wrap", |
||
269 | "decr_wrap", |
||
270 | "invert" |
||
271 | }; |
||
272 | |||
273 | DEFINE_UTIL_DUMP_CONTINUOUS(stencil_op) |
||
274 | |||
275 | |||
276 | static const char * |
||
277 | util_dump_tex_target_names[] = { |
||
278 | "PIPE_BUFFER", |
||
279 | "PIPE_TEXTURE_1D", |
||
280 | "PIPE_TEXTURE_2D", |
||
281 | "PIPE_TEXTURE_3D", |
||
282 | "PIPE_TEXTURE_CUBE", |
||
283 | "PIPE_TEXTURE_RECT", |
||
284 | "PIPE_TEXTURE_1D_ARRAY", |
||
285 | "PIPE_TEXTURE_2D_ARRAY", |
||
286 | "PIPE_TEXTURE_CUBE_ARRAY", |
||
287 | }; |
||
288 | |||
289 | static const char * |
||
290 | util_dump_tex_target_short_names[] = { |
||
291 | "buffer", |
||
292 | "1d", |
||
293 | "2d", |
||
294 | "3d", |
||
295 | "cube", |
||
296 | "rect", |
||
297 | "1d_array", |
||
298 | "2d_array", |
||
299 | "cube_array", |
||
300 | }; |
||
301 | |||
302 | DEFINE_UTIL_DUMP_CONTINUOUS_COUNT(tex_target, PIPE_MAX_TEXTURE_TYPES) |
||
303 | |||
304 | |||
305 | static const char * |
||
306 | util_dump_tex_wrap_names[] = { |
||
307 | "PIPE_TEX_WRAP_REPEAT", |
||
308 | "PIPE_TEX_WRAP_CLAMP", |
||
309 | "PIPE_TEX_WRAP_CLAMP_TO_EDGE", |
||
310 | "PIPE_TEX_WRAP_CLAMP_TO_BORDER", |
||
311 | "PIPE_TEX_WRAP_MIRROR_REPEAT", |
||
312 | "PIPE_TEX_WRAP_MIRROR_CLAMP", |
||
313 | "PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE", |
||
314 | "PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER" |
||
315 | }; |
||
316 | |||
317 | static const char * |
||
318 | util_dump_tex_wrap_short_names[] = { |
||
319 | "repeat", |
||
320 | "clamp", |
||
321 | "clamp_to_edge", |
||
322 | "clamp_to_border", |
||
323 | "mirror_repeat", |
||
324 | "mirror_clamp", |
||
325 | "mirror_clamp_to_edge", |
||
326 | "mirror_clamp_to_border" |
||
327 | }; |
||
328 | |||
329 | DEFINE_UTIL_DUMP_CONTINUOUS(tex_wrap) |
||
330 | |||
331 | |||
332 | static const char * |
||
333 | util_dump_tex_mipfilter_names[] = { |
||
334 | "PIPE_TEX_MIPFILTER_NEAREST", |
||
335 | "PIPE_TEX_MIPFILTER_LINEAR", |
||
336 | "PIPE_TEX_MIPFILTER_NONE" |
||
337 | }; |
||
338 | |||
339 | static const char * |
||
340 | util_dump_tex_mipfilter_short_names[] = { |
||
341 | "nearest", |
||
342 | "linear", |
||
343 | "none" |
||
344 | }; |
||
345 | |||
346 | DEFINE_UTIL_DUMP_CONTINUOUS(tex_mipfilter) |
||
347 | |||
348 | |||
349 | static const char * |
||
350 | util_dump_tex_filter_names[] = { |
||
351 | "PIPE_TEX_FILTER_NEAREST", |
||
352 | "PIPE_TEX_FILTER_LINEAR" |
||
353 | }; |
||
354 | |||
355 | static const char * |
||
356 | util_dump_tex_filter_short_names[] = { |
||
357 | "nearest", |
||
358 | "linear" |
||
359 | }; |
||
360 | |||
361 | DEFINE_UTIL_DUMP_CONTINUOUS(tex_filter) |