Merge remote-tracking branch 'mesa-public/master' into vulkan
[mesa.git] / src / gallium / auxiliary / util / u_dump_defines.c
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)
362
363
364 static const char *
365 util_dump_query_type_names[] = {
366 "PIPE_QUERY_OCCLUSION_COUNTER",
367 "PIPE_QUERY_OCCLUSION_PREDICATE",
368 "PIPE_QUERY_TIMESTAMP",
369 "PIPE_QUERY_TIMESTAMP_DISJOINT",
370 "PIPE_QUERY_TIME_ELAPSED",
371 "PIPE_QUERY_PRIMITIVES_GENERATED",
372 "PIPE_QUERY_PRIMITIVES_EMITTED",
373 "PIPE_QUERY_SO_STATISTICS",
374 "PIPE_QUERY_SO_OVERFLOW_PREDICATE",
375 "PIPE_QUERY_GPU_FINISHED",
376 "PIPE_QUERY_PIPELINE_STATISTICS",
377 };
378
379 static const char *
380 util_dump_query_type_short_names[] = {
381 "occlusion_counter",
382 "occlusion_predicate",
383 "timestamp",
384 "timestamp_disjoint",
385 "time_elapsed",
386 "primitives_generated",
387 "primitives_emitted",
388 "so_statistics",
389 "so_overflow_predicate",
390 "gpu_finished",
391 "pipeline_statistics",
392 };
393
394 DEFINE_UTIL_DUMP_CONTINUOUS(query_type)
395
396
397 static const char *
398 util_dump_prim_mode_names[] = {
399 "PIPE_PRIM_POINTS",
400 "PIPE_PRIM_LINES",
401 "PIPE_PRIM_LINE_LOOP",
402 "PIPE_PRIM_LINE_STRIP",
403 "PIPE_PRIM_TRIANGLES",
404 "PIPE_PRIM_TRIANGLE_STRIP",
405 "PIPE_PRIM_TRIANGLE_FAN",
406 "PIPE_PRIM_QUADS",
407 "PIPE_PRIM_QUAD_STRIP",
408 "PIPE_PRIM_POLYGON",
409 "PIPE_PRIM_LINES_ADJACENCY",
410 "PIPE_PRIM_LINE_STRIP_ADJACENCY",
411 "PIPE_PRIM_TRIANGLES_ADJACENCY",
412 "PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY",
413 "PIPE_PRIM_PATCHES",
414 };
415
416 static const char *
417 util_dump_prim_mode_short_names[] = {
418 "points",
419 "lines",
420 "line_loop",
421 "line_strip",
422 "triangles",
423 "triangle_strip",
424 "triangle_fan",
425 "quads",
426 "quad_strip",
427 "polygon",
428 "lines_adjacency",
429 "line_strip_adjacency",
430 "triangles_adjacency",
431 "triangle_strip_adjacency",
432 "patches",
433 };
434
435 DEFINE_UTIL_DUMP_CONTINUOUS(prim_mode)