Merge branch '7.8'
[mesa.git] / src / gallium / drivers / trace / tr_dump_state.c
1 /**************************************************************************
2 *
3 * Copyright 2008 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 "pipe/p_compiler.h"
30 #include "util/u_memory.h"
31 #include "util/u_format.h"
32 #include "tgsi/tgsi_dump.h"
33
34 #include "tr_dump.h"
35 #include "tr_dump_state.h"
36
37
38 void trace_dump_format(enum pipe_format format)
39 {
40 if (!trace_dumping_enabled_locked())
41 return;
42
43 trace_dump_enum(util_format_name(format) );
44 }
45
46
47 void trace_dump_resource_template(const struct pipe_resource *templat)
48 {
49 if (!trace_dumping_enabled_locked())
50 return;
51
52 if(!templat) {
53 trace_dump_null();
54 return;
55 }
56
57 trace_dump_struct_begin("pipe_resource");
58
59 trace_dump_member(int, templat, target);
60 trace_dump_member(format, templat, format);
61
62 trace_dump_member_begin("width");
63 trace_dump_uint(templat->width0);
64 trace_dump_member_end();
65
66 trace_dump_member_begin("height");
67 trace_dump_uint(templat->height0);
68 trace_dump_member_end();
69
70 trace_dump_member_begin("depth");
71 trace_dump_uint(templat->depth0);
72 trace_dump_member_end();
73
74 trace_dump_member(uint, templat, last_level);
75 trace_dump_member(uint, templat, _usage);
76 trace_dump_member(uint, templat, bind);
77 trace_dump_member(uint, templat, flags);
78
79 trace_dump_struct_end();
80 }
81
82
83 void trace_dump_subresource(const struct pipe_subresource *subresource)
84 {
85 if (!trace_dumping_enabled_locked())
86 return;
87
88 if(!subresource) {
89 trace_dump_null();
90 return;
91 }
92
93 trace_dump_struct_begin("pipe_subresource");
94
95 trace_dump_member(uint, subresource, face);
96 trace_dump_member(uint, subresource, level);
97
98 trace_dump_struct_end();
99 }
100
101
102 void trace_dump_box(const struct pipe_box *box)
103 {
104 if (!trace_dumping_enabled_locked())
105 return;
106
107 if(!box) {
108 trace_dump_null();
109 return;
110 }
111
112 trace_dump_struct_begin("pipe_box");
113
114 trace_dump_member(uint, box, x);
115 trace_dump_member(uint, box, y);
116 trace_dump_member(uint, box, z);
117 trace_dump_member(uint, box, width);
118 trace_dump_member(uint, box, height);
119 trace_dump_member(uint, box, depth);
120
121 trace_dump_struct_end();
122 }
123
124
125 void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state)
126 {
127 if (!trace_dumping_enabled_locked())
128 return;
129
130 if(!state) {
131 trace_dump_null();
132 return;
133 }
134
135 trace_dump_struct_begin("pipe_rasterizer_state");
136
137 trace_dump_member(bool, state, flatshade);
138 trace_dump_member(bool, state, light_twoside);
139 trace_dump_member(uint, state, front_winding);
140 trace_dump_member(uint, state, cull_mode);
141 trace_dump_member(uint, state, fill_cw);
142 trace_dump_member(uint, state, fill_ccw);
143 trace_dump_member(bool, state, offset_cw);
144 trace_dump_member(bool, state, offset_ccw);
145 trace_dump_member(bool, state, scissor);
146 trace_dump_member(bool, state, poly_smooth);
147 trace_dump_member(bool, state, poly_stipple_enable);
148 trace_dump_member(bool, state, point_smooth);
149 trace_dump_member(uint, state, sprite_coord_enable);
150 trace_dump_member(bool, state, sprite_coord_mode);
151 trace_dump_member(bool, state, point_quad_rasterization);
152 trace_dump_member(bool, state, point_size_per_vertex);
153 trace_dump_member(bool, state, multisample);
154 trace_dump_member(bool, state, line_smooth);
155 trace_dump_member(bool, state, line_stipple_enable);
156 trace_dump_member(uint, state, line_stipple_factor);
157 trace_dump_member(uint, state, line_stipple_pattern);
158 trace_dump_member(bool, state, line_last_pixel);
159 trace_dump_member(bool, state, flatshade_first);
160 trace_dump_member(bool, state, gl_rasterization_rules);
161
162 trace_dump_member(float, state, line_width);
163 trace_dump_member(float, state, point_size);
164 trace_dump_member(float, state, offset_units);
165 trace_dump_member(float, state, offset_scale);
166
167 trace_dump_struct_end();
168 }
169
170
171 void trace_dump_poly_stipple(const struct pipe_poly_stipple *state)
172 {
173 if (!trace_dumping_enabled_locked())
174 return;
175
176 if(!state) {
177 trace_dump_null();
178 return;
179 }
180
181 trace_dump_struct_begin("pipe_poly_stipple");
182
183 trace_dump_member_begin("stipple");
184 trace_dump_array(uint,
185 state->stipple,
186 Elements(state->stipple));
187 trace_dump_member_end();
188
189 trace_dump_struct_end();
190 }
191
192
193 void trace_dump_viewport_state(const struct pipe_viewport_state *state)
194 {
195 if (!trace_dumping_enabled_locked())
196 return;
197
198 if(!state) {
199 trace_dump_null();
200 return;
201 }
202
203 trace_dump_struct_begin("pipe_viewport_state");
204
205 trace_dump_member_array(float, state, scale);
206 trace_dump_member_array(float, state, translate);
207
208 trace_dump_struct_end();
209 }
210
211
212 void trace_dump_scissor_state(const struct pipe_scissor_state *state)
213 {
214 if (!trace_dumping_enabled_locked())
215 return;
216
217 if(!state) {
218 trace_dump_null();
219 return;
220 }
221
222 trace_dump_struct_begin("pipe_scissor_state");
223
224 trace_dump_member(uint, state, minx);
225 trace_dump_member(uint, state, miny);
226 trace_dump_member(uint, state, maxx);
227 trace_dump_member(uint, state, maxy);
228
229 trace_dump_struct_end();
230 }
231
232
233 void trace_dump_clip_state(const struct pipe_clip_state *state)
234 {
235 unsigned i;
236
237 if (!trace_dumping_enabled_locked())
238 return;
239
240 if(!state) {
241 trace_dump_null();
242 return;
243 }
244
245 trace_dump_struct_begin("pipe_clip_state");
246
247 trace_dump_member_begin("ucp");
248 trace_dump_array_begin();
249 for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) {
250 trace_dump_elem_begin();
251 trace_dump_array(float, state->ucp[i], 4);
252 trace_dump_elem_end();
253 }
254 trace_dump_array_end();
255 trace_dump_member_end();
256
257 trace_dump_member(uint, state, nr);
258
259 trace_dump_struct_end();
260 }
261
262
263 void trace_dump_shader_state(const struct pipe_shader_state *state)
264 {
265 static char str[8192];
266
267 if (!trace_dumping_enabled_locked())
268 return;
269
270 if(!state) {
271 trace_dump_null();
272 return;
273 }
274
275 tgsi_dump_str(state->tokens, 0, str, sizeof(str));
276
277 trace_dump_struct_begin("pipe_shader_state");
278
279 trace_dump_member_begin("tokens");
280 trace_dump_string(str);
281 trace_dump_member_end();
282
283 trace_dump_struct_end();
284 }
285
286
287 void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_state *state)
288 {
289 unsigned i;
290
291 if (!trace_dumping_enabled_locked())
292 return;
293
294 if(!state) {
295 trace_dump_null();
296 return;
297 }
298
299 trace_dump_struct_begin("pipe_depth_stencil_alpha_state");
300
301 trace_dump_member_begin("depth");
302 trace_dump_struct_begin("pipe_depth_state");
303 trace_dump_member(bool, &state->depth, enabled);
304 trace_dump_member(bool, &state->depth, writemask);
305 trace_dump_member(uint, &state->depth, func);
306 trace_dump_struct_end();
307 trace_dump_member_end();
308
309 trace_dump_member_begin("stencil");
310 trace_dump_array_begin();
311 for(i = 0; i < Elements(state->stencil); ++i) {
312 trace_dump_elem_begin();
313 trace_dump_struct_begin("pipe_stencil_state");
314 trace_dump_member(bool, &state->stencil[i], enabled);
315 trace_dump_member(uint, &state->stencil[i], func);
316 trace_dump_member(uint, &state->stencil[i], fail_op);
317 trace_dump_member(uint, &state->stencil[i], zpass_op);
318 trace_dump_member(uint, &state->stencil[i], zfail_op);
319 trace_dump_member(uint, &state->stencil[i], valuemask);
320 trace_dump_member(uint, &state->stencil[i], writemask);
321 trace_dump_struct_end();
322 trace_dump_elem_end();
323 }
324 trace_dump_array_end();
325 trace_dump_member_end();
326
327 trace_dump_member_begin("alpha");
328 trace_dump_struct_begin("pipe_alpha_state");
329 trace_dump_member(bool, &state->alpha, enabled);
330 trace_dump_member(uint, &state->alpha, func);
331 trace_dump_member(float, &state->alpha, ref_value);
332 trace_dump_struct_end();
333 trace_dump_member_end();
334
335 trace_dump_struct_end();
336 }
337
338 void trace_dump_blend_state(const struct pipe_blend_state *state)
339 {
340 if (!trace_dumping_enabled_locked())
341 return;
342
343 if(!state) {
344 trace_dump_null();
345 return;
346 }
347
348 trace_dump_bytes(state, sizeof *state);
349 }
350
351
352 void trace_dump_blend_color(const struct pipe_blend_color *state)
353 {
354 if (!trace_dumping_enabled_locked())
355 return;
356
357 if(!state) {
358 trace_dump_null();
359 return;
360 }
361
362 trace_dump_struct_begin("pipe_blend_color");
363
364 trace_dump_member_array(float, state, color);
365
366 trace_dump_struct_end();
367 }
368
369 void trace_dump_stencil_ref(const struct pipe_stencil_ref *state)
370 {
371 if (!trace_dumping_enabled_locked())
372 return;
373
374 if(!state) {
375 trace_dump_null();
376 return;
377 }
378
379 trace_dump_struct_begin("pipe_stencil_ref");
380
381 trace_dump_member_array(uint, state, ref_value);
382
383 trace_dump_struct_end();
384 }
385
386 void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state)
387 {
388 if (!trace_dumping_enabled_locked())
389 return;
390
391 trace_dump_struct_begin("pipe_framebuffer_state");
392
393 trace_dump_member(uint, state, width);
394 trace_dump_member(uint, state, height);
395 trace_dump_member(uint, state, nr_cbufs);
396 trace_dump_member_array(ptr, state, cbufs);
397 trace_dump_member(ptr, state, zsbuf);
398
399 trace_dump_struct_end();
400 }
401
402
403 void trace_dump_sampler_state(const struct pipe_sampler_state *state)
404 {
405 if (!trace_dumping_enabled_locked())
406 return;
407
408 if(!state) {
409 trace_dump_null();
410 return;
411 }
412
413 trace_dump_struct_begin("pipe_sampler_state");
414
415 trace_dump_member(uint, state, wrap_s);
416 trace_dump_member(uint, state, wrap_t);
417 trace_dump_member(uint, state, wrap_r);
418 trace_dump_member(uint, state, min_img_filter);
419 trace_dump_member(uint, state, min_mip_filter);
420 trace_dump_member(uint, state, mag_img_filter);
421 trace_dump_member(uint, state, compare_mode);
422 trace_dump_member(uint, state, compare_func);
423 trace_dump_member(bool, state, normalized_coords);
424 trace_dump_member(uint, state, max_anisotropy);
425 trace_dump_member(float, state, lod_bias);
426 trace_dump_member(float, state, min_lod);
427 trace_dump_member(float, state, max_lod);
428 trace_dump_member_array(float, state, border_color);
429
430 trace_dump_struct_end();
431 }
432
433
434 void trace_dump_sampler_view_template(const struct pipe_sampler_view *state)
435 {
436 if (!trace_dumping_enabled_locked())
437 return;
438
439 if(!state) {
440 trace_dump_null();
441 return;
442 }
443
444 trace_dump_struct_begin("pipe_sampler_view");
445
446 trace_dump_member(format, state, format);
447 trace_dump_member(uint, state, first_level);
448 trace_dump_member(uint, state, last_level);
449 trace_dump_member(uint, state, swizzle_r);
450 trace_dump_member(uint, state, swizzle_g);
451 trace_dump_member(uint, state, swizzle_b);
452 trace_dump_member(uint, state, swizzle_a);
453
454 trace_dump_struct_end();
455 }
456
457
458 void trace_dump_surface(const struct pipe_surface *state)
459 {
460 if (!trace_dumping_enabled_locked())
461 return;
462
463 if(!state) {
464 trace_dump_null();
465 return;
466 }
467
468 trace_dump_struct_begin("pipe_surface");
469
470 trace_dump_member(format, state, format);
471 trace_dump_member(uint, state, width);
472 trace_dump_member(uint, state, height);
473
474 trace_dump_member(uint, state, layout);
475 trace_dump_member(uint, state, offset);
476 trace_dump_member(uint, state, usage);
477
478 trace_dump_member(ptr, state, texture);
479 trace_dump_member(uint, state, face);
480 trace_dump_member(uint, state, level);
481 trace_dump_member(uint, state, zslice);
482
483 trace_dump_struct_end();
484 }
485
486
487 void trace_dump_transfer(const struct pipe_transfer *state)
488 {
489 if (!trace_dumping_enabled_locked())
490 return;
491
492 if(!state) {
493 trace_dump_null();
494 return;
495 }
496
497 trace_dump_struct_begin("pipe_transfer");
498
499 trace_dump_member(uint, state, box.width);
500 trace_dump_member(uint, state, box.height);
501
502 trace_dump_member(uint, state, stride);
503 trace_dump_member(uint, state, usage);
504
505 trace_dump_member(ptr, state, resource);
506 trace_dump_member(uint, state, sr.face);
507 trace_dump_member(uint, state, sr.level);
508 trace_dump_member(uint, state, box.z);
509
510 trace_dump_struct_end();
511 }
512
513
514 void trace_dump_vertex_buffer(const struct pipe_vertex_buffer *state)
515 {
516 if (!trace_dumping_enabled_locked())
517 return;
518
519 if(!state) {
520 trace_dump_null();
521 return;
522 }
523
524 trace_dump_struct_begin("pipe_vertex_buffer");
525
526 trace_dump_member(uint, state, stride);
527 trace_dump_member(uint, state, max_index);
528 trace_dump_member(uint, state, buffer_offset);
529 trace_dump_member(resource_ptr, state, buffer);
530
531 trace_dump_struct_end();
532 }
533
534
535 void trace_dump_vertex_element(const struct pipe_vertex_element *state)
536 {
537 if (!trace_dumping_enabled_locked())
538 return;
539
540 if(!state) {
541 trace_dump_null();
542 return;
543 }
544
545 trace_dump_struct_begin("pipe_vertex_element");
546
547 trace_dump_member(uint, state, src_offset);
548
549 trace_dump_member(uint, state, vertex_buffer_index);
550
551 trace_dump_member(format, state, src_format);
552
553 trace_dump_struct_end();
554 }