xref: /aosp_15_r20/external/mesa3d/src/gallium/auxiliary/driver_trace/tr_dump_state.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /**************************************************************************
2  *
3  * Copyright 2008 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/compiler.h"
30 #include "util/u_memory.h"
31 #include "util/format/u_format.h"
32 #include "tgsi/tgsi_dump.h"
33 #include "frontend/winsys_handle.h"
34 #include "tr_dump.h"
35 #include "tr_dump_defines.h"
36 #include "tr_dump_state.h"
37 #include "tr_util.h"
38 
39 
trace_dump_resource_template(const struct pipe_resource * templat)40 void trace_dump_resource_template(const struct pipe_resource *templat)
41 {
42    if (!trace_dumping_enabled_locked())
43       return;
44 
45    if (!templat) {
46       trace_dump_null();
47       return;
48    }
49 
50    trace_dump_struct_begin("pipe_resource");
51 
52    trace_dump_member_enum(pipe_texture_target, templat, target);
53    trace_dump_member(format, templat, format);
54 
55    trace_dump_member_begin("width");
56    trace_dump_uint(templat->width0);
57    trace_dump_member_end();
58 
59    trace_dump_member_begin("height");
60    trace_dump_uint(templat->height0);
61    trace_dump_member_end();
62 
63    trace_dump_member_begin("depth");
64    trace_dump_uint(templat->depth0);
65    trace_dump_member_end();
66 
67    trace_dump_member_begin("array_size");
68    trace_dump_uint(templat->array_size);
69    trace_dump_member_end();
70 
71    trace_dump_member(uint, templat, last_level);
72    trace_dump_member(uint, templat, nr_samples);
73    trace_dump_member(uint, templat, nr_storage_samples);
74    trace_dump_member(uint, templat, usage);
75    trace_dump_member(uint, templat, bind);
76    trace_dump_member(uint, templat, flags);
77 
78    trace_dump_struct_end();
79 }
80 
81 
trace_dump_video_codec_template(const struct pipe_video_codec * templat)82 void trace_dump_video_codec_template(const struct pipe_video_codec *templat)
83 {
84    if (!trace_dumping_enabled_locked())
85       return;
86 
87    if (!templat) {
88       trace_dump_null();
89       return;
90    }
91 
92    trace_dump_struct_begin("pipe_video_codec");
93 
94    trace_dump_member_enum(pipe_video_profile, templat, profile);
95    trace_dump_member(uint, templat, level);
96    trace_dump_member_enum(pipe_video_entrypoint, templat, entrypoint);
97    trace_dump_member(chroma_format, templat, chroma_format);
98    trace_dump_member(uint, templat, width);
99    trace_dump_member(uint, templat, height);
100    trace_dump_member(uint, templat, max_references);
101    trace_dump_member(bool, templat, expect_chunked_decode);
102 
103    trace_dump_struct_end();
104 }
105 
106 
trace_dump_video_buffer_template(const struct pipe_video_buffer * templat)107 void trace_dump_video_buffer_template(const struct pipe_video_buffer *templat)
108 {
109    if (!trace_dumping_enabled_locked())
110       return;
111 
112    if (!templat) {
113       trace_dump_null();
114       return;
115    }
116 
117    trace_dump_struct_begin("pipe_video_buffer");
118 
119    trace_dump_member(format, templat, buffer_format);
120    trace_dump_member(uint, templat, width);
121    trace_dump_member(uint, templat, height);
122    trace_dump_member(bool, templat, interlaced);
123    trace_dump_member(uint, templat, bind);
124 
125    trace_dump_struct_end();
126 }
127 
128 
trace_dump_box(const struct pipe_box * box)129 void trace_dump_box(const struct pipe_box *box)
130 {
131    if (!trace_dumping_enabled_locked())
132       return;
133 
134    if (!box) {
135       trace_dump_null();
136       return;
137    }
138 
139    trace_dump_struct_begin("pipe_box");
140 
141    trace_dump_member(int, box, x);
142    trace_dump_member(int, box, y);
143    trace_dump_member(int, box, z);
144    trace_dump_member(int, box, width);
145    trace_dump_member(int, box, height);
146    trace_dump_member(int, box, depth);
147 
148    trace_dump_struct_end();
149 }
150 
trace_dump_u_rect(const struct u_rect * rect)151 void trace_dump_u_rect(const struct u_rect *rect)
152 {
153    if (!trace_dumping_enabled_locked())
154       return;
155 
156    if (!rect) {
157       trace_dump_null();
158       return;
159    }
160 
161    trace_dump_struct_begin("u_rect");
162 
163    trace_dump_member(int, rect, x0);
164    trace_dump_member(int, rect, x1);
165    trace_dump_member(int, rect, y0);
166    trace_dump_member(int, rect, y1);
167 
168    trace_dump_struct_end();
169 }
170 
trace_dump_rasterizer_state(const struct pipe_rasterizer_state * state)171 void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *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_rasterizer_state");
182 
183    trace_dump_member(bool, state, flatshade);
184    trace_dump_member(bool, state, light_twoside);
185    trace_dump_member(bool, state, clamp_vertex_color);
186    trace_dump_member(bool, state, clamp_fragment_color);
187    trace_dump_member(uint, state, front_ccw);
188    trace_dump_member(uint, state, cull_face);
189    trace_dump_member(uint, state, fill_front);
190    trace_dump_member(uint, state, fill_back);
191    trace_dump_member(bool, state, offset_point);
192    trace_dump_member(bool, state, offset_line);
193    trace_dump_member(bool, state, offset_tri);
194    trace_dump_member(bool, state, scissor);
195    trace_dump_member(bool, state, poly_smooth);
196    trace_dump_member(bool, state, poly_stipple_enable);
197    trace_dump_member(bool, state, point_smooth);
198    trace_dump_member(bool, state, sprite_coord_mode);
199    trace_dump_member(bool, state, point_quad_rasterization);
200    trace_dump_member(bool, state, point_size_per_vertex);
201    trace_dump_member(bool, state, multisample);
202    trace_dump_member(bool, state, no_ms_sample_mask_out);
203    trace_dump_member(bool, state, force_persample_interp);
204    trace_dump_member(bool, state, line_smooth);
205    trace_dump_member(bool, state, line_rectangular);
206    trace_dump_member(bool, state, line_stipple_enable);
207    trace_dump_member(bool, state, line_last_pixel);
208 
209    trace_dump_member(bool, state, flatshade_first);
210 
211    trace_dump_member(bool, state, half_pixel_center);
212    trace_dump_member(bool, state, bottom_edge_rule);
213 
214    trace_dump_member(bool, state, rasterizer_discard);
215 
216    trace_dump_member(bool, state, depth_clamp);
217    trace_dump_member(bool, state, depth_clip_near);
218    trace_dump_member(bool, state, depth_clip_far);
219 
220    trace_dump_member(bool, state, clip_halfz);
221 
222    trace_dump_member(uint, state, clip_plane_enable);
223 
224    trace_dump_member(uint, state, line_stipple_factor);
225    trace_dump_member(uint, state, line_stipple_pattern);
226 
227    trace_dump_member(uint, state, sprite_coord_enable);
228 
229    trace_dump_member(float, state, line_width);
230    trace_dump_member(float, state, point_size);
231    trace_dump_member(float, state, offset_units);
232    trace_dump_member(float, state, offset_scale);
233    trace_dump_member(float, state, offset_clamp);
234 
235    trace_dump_struct_end();
236 }
237 
238 
trace_dump_poly_stipple(const struct pipe_poly_stipple * state)239 void trace_dump_poly_stipple(const struct pipe_poly_stipple *state)
240 {
241    if (!trace_dumping_enabled_locked())
242       return;
243 
244    if (!state) {
245       trace_dump_null();
246       return;
247    }
248 
249    trace_dump_struct_begin("pipe_poly_stipple");
250 
251    trace_dump_member_begin("stipple");
252    trace_dump_array(uint,
253                     state->stipple,
254                     ARRAY_SIZE(state->stipple));
255    trace_dump_member_end();
256 
257    trace_dump_struct_end();
258 }
259 
260 
trace_dump_viewport_state(const struct pipe_viewport_state * state)261 void trace_dump_viewport_state(const struct pipe_viewport_state *state)
262 {
263    if (!trace_dumping_enabled_locked())
264       return;
265 
266    if (!state) {
267       trace_dump_null();
268       return;
269    }
270 
271    trace_dump_struct_begin("pipe_viewport_state");
272 
273    trace_dump_member_array(float, state, scale);
274    trace_dump_member_array(float, state, translate);
275 
276    trace_dump_struct_end();
277 }
278 
279 
trace_dump_scissor_state(const struct pipe_scissor_state * state)280 void trace_dump_scissor_state(const struct pipe_scissor_state *state)
281 {
282    if (!trace_dumping_enabled_locked())
283       return;
284 
285    if (!state) {
286       trace_dump_null();
287       return;
288    }
289 
290    trace_dump_struct_begin("pipe_scissor_state");
291 
292    trace_dump_member(uint, state, minx);
293    trace_dump_member(uint, state, miny);
294    trace_dump_member(uint, state, maxx);
295    trace_dump_member(uint, state, maxy);
296 
297    trace_dump_struct_end();
298 }
299 
300 
trace_dump_clip_state(const struct pipe_clip_state * state)301 void trace_dump_clip_state(const struct pipe_clip_state *state)
302 {
303    unsigned i;
304 
305    if (!trace_dumping_enabled_locked())
306       return;
307 
308    if (!state) {
309       trace_dump_null();
310       return;
311    }
312 
313    trace_dump_struct_begin("pipe_clip_state");
314 
315    trace_dump_member_begin("ucp");
316    trace_dump_array_begin();
317    for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) {
318       trace_dump_elem_begin();
319       trace_dump_array(float, state->ucp[i], 4);
320       trace_dump_elem_end();
321    }
322    trace_dump_array_end();
323    trace_dump_member_end();
324 
325    trace_dump_struct_end();
326 }
327 
328 
trace_dump_shader_state(const struct pipe_shader_state * state)329 void trace_dump_shader_state(const struct pipe_shader_state *state)
330 {
331    unsigned i;
332 
333    if (!trace_dumping_enabled_locked())
334       return;
335 
336    if (!state) {
337       trace_dump_null();
338       return;
339    }
340 
341 
342    trace_dump_struct_begin("pipe_shader_state");
343 
344    trace_dump_member(uint, state, type);
345 
346    trace_dump_member_begin("tokens");
347    if (state->tokens) {
348       static char str[64 * 1024];
349       tgsi_dump_str(state->tokens, 0, str, sizeof(str));
350       trace_dump_string(str);
351    } else {
352       trace_dump_null();
353    }
354    trace_dump_member_end();
355 
356    trace_dump_member_begin("ir");
357    if (state->type == PIPE_SHADER_IR_NIR) {
358       trace_dump_nir(state->ir.nir);
359    } else {
360       trace_dump_null();
361    }
362    trace_dump_member_end();
363 
364    trace_dump_member_begin("stream_output");
365    trace_dump_struct_begin("pipe_stream_output_info");
366    trace_dump_member(uint, &state->stream_output, num_outputs);
367    trace_dump_member_array(uint, &state->stream_output, stride);
368    trace_dump_member_begin("output");
369    trace_dump_array_begin();
370    for(i = 0; i < state->stream_output.num_outputs; ++i) {
371       trace_dump_elem_begin();
372       trace_dump_struct_begin(""); /* anonymous */
373       trace_dump_member(uint, &state->stream_output.output[i], register_index);
374       trace_dump_member(uint, &state->stream_output.output[i], start_component);
375       trace_dump_member(uint, &state->stream_output.output[i], num_components);
376       trace_dump_member(uint, &state->stream_output.output[i], output_buffer);
377       trace_dump_member(uint, &state->stream_output.output[i], dst_offset);
378       trace_dump_member(uint, &state->stream_output.output[i], stream);
379       trace_dump_struct_end();
380       trace_dump_elem_end();
381    }
382    trace_dump_array_end();
383    trace_dump_member_end(); // output
384    trace_dump_struct_end();
385    trace_dump_member_end(); // stream_output
386 
387    trace_dump_struct_end();
388 }
389 
390 
trace_dump_compute_state(const struct pipe_compute_state * state)391 void trace_dump_compute_state(const struct pipe_compute_state *state)
392 {
393    if (!trace_dumping_enabled_locked())
394       return;
395 
396    if (!state) {
397       trace_dump_null();
398       return;
399    }
400 
401    trace_dump_struct_begin("pipe_compute_state");
402 
403    trace_dump_member(uint, state, ir_type);
404 
405    trace_dump_member_begin("prog");
406    if (state->prog && state->ir_type == PIPE_SHADER_IR_TGSI) {
407       static char str[64 * 1024];
408       tgsi_dump_str(state->prog, 0, str, sizeof(str));
409       trace_dump_string(str);
410    } else {
411       trace_dump_null();
412    }
413    trace_dump_member_end();
414 
415    trace_dump_member(uint, state, static_shared_mem);
416    trace_dump_member(uint, state, req_input_mem);
417 
418    trace_dump_struct_end();
419 }
420 
421 
trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_state * state)422 void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_state *state)
423 {
424    unsigned i;
425 
426    if (!trace_dumping_enabled_locked())
427       return;
428 
429    if (!state) {
430       trace_dump_null();
431       return;
432    }
433 
434    trace_dump_struct_begin("pipe_depth_stencil_alpha_state");
435 
436    trace_dump_member(bool, state, depth_enabled);
437    trace_dump_member(bool, state, depth_writemask);
438    trace_dump_member(uint, state, depth_func);
439 
440    trace_dump_member_begin("stencil");
441    trace_dump_array_begin();
442    for(i = 0; i < ARRAY_SIZE(state->stencil); ++i) {
443       trace_dump_elem_begin();
444       trace_dump_struct_begin("pipe_stencil_state");
445       trace_dump_member(bool, &state->stencil[i], enabled);
446       trace_dump_member(uint, &state->stencil[i], func);
447       trace_dump_member(uint, &state->stencil[i], fail_op);
448       trace_dump_member(uint, &state->stencil[i], zpass_op);
449       trace_dump_member(uint, &state->stencil[i], zfail_op);
450       trace_dump_member(uint, &state->stencil[i], valuemask);
451       trace_dump_member(uint, &state->stencil[i], writemask);
452       trace_dump_struct_end();
453       trace_dump_elem_end();
454    }
455    trace_dump_array_end();
456    trace_dump_member_end();
457 
458    trace_dump_member(bool, state, alpha_enabled);
459    trace_dump_member(uint, state, alpha_func);
460    trace_dump_member(float, state, alpha_ref_value);
461 
462    trace_dump_struct_end();
463 }
464 
trace_dump_rt_blend_state(const struct pipe_rt_blend_state * state)465 static void trace_dump_rt_blend_state(const struct pipe_rt_blend_state *state)
466 {
467    trace_dump_struct_begin("pipe_rt_blend_state");
468 
469    trace_dump_member(uint, state, blend_enable);
470 
471    trace_dump_member_enum(pipe_blend_func, state, rgb_func);
472    trace_dump_member_enum(pipe_blendfactor, state, rgb_src_factor);
473    trace_dump_member_enum(pipe_blendfactor, state, rgb_dst_factor);
474 
475    trace_dump_member_enum(pipe_blend_func, state, alpha_func);
476    trace_dump_member_enum(pipe_blendfactor, state, alpha_src_factor);
477    trace_dump_member_enum(pipe_blendfactor, state, alpha_dst_factor);
478 
479    trace_dump_member(uint, state, colormask);
480 
481    trace_dump_struct_end();
482 }
483 
trace_dump_blend_state(const struct pipe_blend_state * state)484 void trace_dump_blend_state(const struct pipe_blend_state *state)
485 {
486    unsigned valid_entries = 1;
487 
488    if (!trace_dumping_enabled_locked())
489       return;
490 
491    if (!state) {
492       trace_dump_null();
493       return;
494    }
495 
496    trace_dump_struct_begin("pipe_blend_state");
497 
498    trace_dump_member(bool, state, independent_blend_enable);
499    trace_dump_member(bool, state, logicop_enable);
500    trace_dump_member_enum(pipe_logicop, state, logicop_func);
501    trace_dump_member(bool, state, dither);
502    trace_dump_member(bool, state, alpha_to_coverage);
503    trace_dump_member(bool, state, alpha_to_coverage_dither);
504    trace_dump_member(bool, state, alpha_to_one);
505    trace_dump_member(uint, state, max_rt);
506    trace_dump_member(uint, state, advanced_blend_func);
507 
508    trace_dump_member_begin("rt");
509    if (state->independent_blend_enable)
510       valid_entries = state->max_rt + 1;
511    trace_dump_struct_array(rt_blend_state, state->rt, valid_entries);
512    trace_dump_member_end();
513 
514    trace_dump_struct_end();
515 }
516 
517 
trace_dump_blend_color(const struct pipe_blend_color * state)518 void trace_dump_blend_color(const struct pipe_blend_color *state)
519 {
520    if (!trace_dumping_enabled_locked())
521       return;
522 
523    if (!state) {
524       trace_dump_null();
525       return;
526    }
527 
528    trace_dump_struct_begin("pipe_blend_color");
529 
530    trace_dump_member_array(float, state, color);
531 
532    trace_dump_struct_end();
533 }
534 
trace_dump_stencil_ref(const struct pipe_stencil_ref * state)535 void trace_dump_stencil_ref(const struct pipe_stencil_ref *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_stencil_ref");
546 
547    trace_dump_member_array(uint, state, ref_value);
548 
549    trace_dump_struct_end();
550 }
551 
trace_dump_framebuffer_state(const struct pipe_framebuffer_state * state)552 void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state)
553 {
554    if (!trace_dumping_enabled_locked())
555       return;
556 
557    trace_dump_struct_begin("pipe_framebuffer_state");
558 
559    trace_dump_member(uint, state, width);
560    trace_dump_member(uint, state, height);
561    trace_dump_member(uint, state, samples);
562    trace_dump_member(uint, state, layers);
563    trace_dump_member(uint, state, nr_cbufs);
564    trace_dump_member_array(ptr, state, cbufs);
565    trace_dump_member(ptr, state, zsbuf);
566 
567    trace_dump_struct_end();
568 }
569 
trace_dump_framebuffer_state_deep(const struct pipe_framebuffer_state * state)570 void trace_dump_framebuffer_state_deep(const struct pipe_framebuffer_state *state)
571 {
572    if (!trace_dumping_enabled_locked())
573       return;
574 
575    trace_dump_struct_begin("pipe_framebuffer_state");
576 
577    trace_dump_member(uint, state, width);
578    trace_dump_member(uint, state, height);
579    trace_dump_member(uint, state, samples);
580    trace_dump_member(uint, state, layers);
581    trace_dump_member(uint, state, nr_cbufs);
582    trace_dump_member_array(surface, state, cbufs);
583    trace_dump_member(surface, state, zsbuf);
584 
585    trace_dump_struct_end();
586 }
587 
588 
trace_dump_sampler_state(const struct pipe_sampler_state * state)589 void trace_dump_sampler_state(const struct pipe_sampler_state *state)
590 {
591    if (!trace_dumping_enabled_locked())
592       return;
593 
594    if (!state) {
595       trace_dump_null();
596       return;
597    }
598 
599    trace_dump_struct_begin("pipe_sampler_state");
600 
601    trace_dump_member(uint, state, wrap_s);
602    trace_dump_member(uint, state, wrap_t);
603    trace_dump_member(uint, state, wrap_r);
604    trace_dump_member(uint, state, min_img_filter);
605    trace_dump_member(uint, state, min_mip_filter);
606    trace_dump_member(uint, state, mag_img_filter);
607    trace_dump_member(uint, state, compare_mode);
608    trace_dump_member(uint, state, compare_func);
609    trace_dump_member(bool, state, unnormalized_coords);
610    trace_dump_member(uint, state, max_anisotropy);
611    trace_dump_member(bool, state, seamless_cube_map);
612    trace_dump_member(float, state, lod_bias);
613    trace_dump_member(float, state, min_lod);
614    trace_dump_member(float, state, max_lod);
615    trace_dump_member_array(float, state, border_color.f);
616    trace_dump_member(format, state, border_color_format);
617 
618    trace_dump_struct_end();
619 }
620 
621 
trace_dump_sampler_view_template(const struct pipe_sampler_view * state)622 void trace_dump_sampler_view_template(const struct pipe_sampler_view *state)
623 {
624    if (!trace_dumping_enabled_locked())
625       return;
626 
627    if (!state) {
628       trace_dump_null();
629       return;
630    }
631 
632    trace_dump_struct_begin("pipe_sampler_view");
633 
634    trace_dump_member(format, state, format);
635 
636    trace_dump_member_enum(pipe_texture_target, state, target);
637    trace_dump_member(ptr, state, texture);
638 
639    trace_dump_member_begin("u");
640    trace_dump_struct_begin(""); /* anonymous */
641    if (state->target == PIPE_BUFFER) {
642       trace_dump_member_begin("buf");
643       trace_dump_struct_begin(""); /* anonymous */
644       trace_dump_member(uint, &state->u.buf, offset);
645       trace_dump_member(uint, &state->u.buf, size);
646       trace_dump_struct_end(); /* anonymous */
647       trace_dump_member_end(); /* buf */
648    } else {
649       trace_dump_member_begin("tex");
650       trace_dump_struct_begin(""); /* anonymous */
651       trace_dump_member(uint, &state->u.tex, first_layer);
652       trace_dump_member(uint, &state->u.tex, last_layer);
653       trace_dump_member(uint, &state->u.tex, first_level);
654       trace_dump_member(uint, &state->u.tex, last_level);
655       trace_dump_struct_end(); /* anonymous */
656       trace_dump_member_end(); /* tex */
657    }
658    trace_dump_struct_end(); /* anonymous */
659    trace_dump_member_end(); /* u */
660 
661    trace_dump_member(uint, state, swizzle_r);
662    trace_dump_member(uint, state, swizzle_g);
663    trace_dump_member(uint, state, swizzle_b);
664    trace_dump_member(uint, state, swizzle_a);
665 
666    trace_dump_struct_end();
667 }
668 
669 
trace_dump_surface(const struct pipe_surface * surface)670 void trace_dump_surface(const struct pipe_surface *surface)
671 {
672    trace_dump_surface_template(surface, surface ? surface->texture->target : 0);
673 }
674 
675 
trace_dump_surface_template(const struct pipe_surface * state,enum pipe_texture_target target)676 void trace_dump_surface_template(const struct pipe_surface *state,
677                                  enum pipe_texture_target target)
678 {
679    if (!trace_dumping_enabled_locked())
680       return;
681 
682    if (!state) {
683       trace_dump_null();
684       return;
685    }
686 
687    trace_dump_struct_begin("pipe_surface");
688 
689    trace_dump_member(format, state, format);
690    trace_dump_member(ptr, state, texture);
691    trace_dump_member(uint, state, width);
692    trace_dump_member(uint, state, height);
693 
694    trace_dump_member_begin("target");
695    trace_dump_enum(tr_util_pipe_texture_target_name(target));
696    trace_dump_member_end();
697 
698    trace_dump_member_begin("u");
699    trace_dump_struct_begin(""); /* anonymous */
700    if (target == PIPE_BUFFER) {
701       trace_dump_member_begin("buf");
702       trace_dump_struct_begin(""); /* anonymous */
703       trace_dump_member(uint, &state->u.buf, first_element);
704       trace_dump_member(uint, &state->u.buf, last_element);
705       trace_dump_struct_end(); /* anonymous */
706       trace_dump_member_end(); /* buf */
707    } else {
708       trace_dump_member_begin("tex");
709       trace_dump_struct_begin(""); /* anonymous */
710       trace_dump_member(uint, &state->u.tex, level);
711       trace_dump_member(uint, &state->u.tex, first_layer);
712       trace_dump_member(uint, &state->u.tex, last_layer);
713       trace_dump_struct_end(); /* anonymous */
714       trace_dump_member_end(); /* tex */
715    }
716    trace_dump_struct_end(); /* anonymous */
717    trace_dump_member_end(); /* u */
718 
719    trace_dump_struct_end();
720 }
721 
722 
trace_dump_transfer(const struct pipe_transfer * state)723 void trace_dump_transfer(const struct pipe_transfer *state)
724 {
725    if (!trace_dumping_enabled_locked())
726       return;
727 
728    if (!state) {
729       trace_dump_null();
730       return;
731    }
732 
733    trace_dump_struct_begin("pipe_transfer");
734 
735    trace_dump_member(uint, state, box.x);
736    trace_dump_member(uint, state, box.y);
737    trace_dump_member(uint, state, box.z);
738    trace_dump_member(uint, state, box.width);
739    trace_dump_member(uint, state, box.height);
740    trace_dump_member(uint, state, box.depth);
741 
742    trace_dump_member(uint, state, stride);
743    trace_dump_member(uint, state, layer_stride);
744    trace_dump_member(uint, state, usage);
745 
746    trace_dump_member(ptr, state, resource);
747 
748    trace_dump_struct_end();
749 }
750 
751 
trace_dump_vertex_buffer(const struct pipe_vertex_buffer * state)752 void trace_dump_vertex_buffer(const struct pipe_vertex_buffer *state)
753 {
754    if (!trace_dumping_enabled_locked())
755       return;
756 
757    if (!state) {
758       trace_dump_null();
759       return;
760    }
761 
762    trace_dump_struct_begin("pipe_vertex_buffer");
763 
764    trace_dump_member(bool, state, is_user_buffer);
765    trace_dump_member(uint, state, buffer_offset);
766    trace_dump_member(ptr, state, buffer.resource);
767 
768    trace_dump_struct_end();
769 }
770 
771 
trace_dump_vertex_element(const struct pipe_vertex_element * state)772 void trace_dump_vertex_element(const struct pipe_vertex_element *state)
773 {
774    if (!trace_dumping_enabled_locked())
775       return;
776 
777    if (!state) {
778       trace_dump_null();
779       return;
780    }
781 
782    trace_dump_struct_begin("pipe_vertex_element");
783 
784    trace_dump_member(uint, state, src_offset);
785 
786    trace_dump_member(uint, state, vertex_buffer_index);
787 
788    trace_dump_member(uint, state, instance_divisor);
789 
790    trace_dump_member(bool, state, dual_slot);
791 
792    trace_dump_member(format, state, src_format);
793    trace_dump_member(uint, state, src_stride);
794 
795    trace_dump_struct_end();
796 }
797 
798 
trace_dump_constant_buffer(const struct pipe_constant_buffer * state)799 void trace_dump_constant_buffer(const struct pipe_constant_buffer *state)
800 {
801    if (!trace_dumping_enabled_locked())
802       return;
803 
804    if (!state) {
805       trace_dump_null();
806       return;
807    }
808 
809    trace_dump_struct_begin("pipe_constant_buffer");
810    trace_dump_member(ptr, state, buffer);
811    trace_dump_member(uint, state, buffer_offset);
812    trace_dump_member(uint, state, buffer_size);
813    trace_dump_struct_end();
814 }
815 
816 
trace_dump_shader_buffer(const struct pipe_shader_buffer * state)817 void trace_dump_shader_buffer(const struct pipe_shader_buffer *state)
818 {
819    if (!trace_dumping_enabled_locked())
820       return;
821 
822    if(!state) {
823       trace_dump_null();
824       return;
825    }
826 
827    trace_dump_struct_begin("pipe_shader_buffer");
828    trace_dump_member(ptr, state, buffer);
829    trace_dump_member(uint, state, buffer_offset);
830    trace_dump_member(uint, state, buffer_size);
831    trace_dump_struct_end();
832 }
833 
834 
trace_dump_image_view(const struct pipe_image_view * state)835 void trace_dump_image_view(const struct pipe_image_view *state)
836 {
837    if (!trace_dumping_enabled_locked())
838       return;
839 
840    if (!state || !state->resource) {
841       trace_dump_null();
842       return;
843    }
844 
845    trace_dump_struct_begin("pipe_image_view");
846    trace_dump_member(ptr, state, resource);
847    trace_dump_member(format, state, format);
848    trace_dump_member(uint, state, access);
849 
850    trace_dump_member_begin("u");
851    trace_dump_struct_begin(""); /* anonymous */
852    if (state->resource->target == PIPE_BUFFER) {
853       trace_dump_member_begin("buf");
854       trace_dump_struct_begin(""); /* anonymous */
855       trace_dump_member(uint, &state->u.buf, offset);
856       trace_dump_member(uint, &state->u.buf, size);
857       trace_dump_struct_end(); /* anonymous */
858       trace_dump_member_end(); /* buf */
859    } else {
860       trace_dump_member_begin("tex");
861       trace_dump_struct_begin(""); /* anonymous */
862       trace_dump_member(uint, &state->u.tex, first_layer);
863       trace_dump_member(uint, &state->u.tex, last_layer);
864       trace_dump_member(uint, &state->u.tex, level);
865       trace_dump_struct_end(); /* anonymous */
866       trace_dump_member_end(); /* tex */
867    }
868    trace_dump_struct_end(); /* anonymous */
869    trace_dump_member_end(); /* u */
870 
871    trace_dump_struct_end();
872 }
873 
874 
trace_dump_memory_info(const struct pipe_memory_info * state)875 void trace_dump_memory_info(const struct pipe_memory_info *state)
876 {
877    if (!trace_dumping_enabled_locked())
878       return;
879 
880    if (!state) {
881       trace_dump_null();
882       return;
883    }
884 
885    trace_dump_struct_begin("pipe_memory_info");
886    trace_dump_member(uint, state, total_device_memory);
887    trace_dump_member(uint, state, avail_device_memory);
888    trace_dump_member(uint, state, total_staging_memory);
889    trace_dump_member(uint, state, avail_staging_memory);
890    trace_dump_member(uint, state, device_memory_evicted);
891    trace_dump_member(uint, state, nr_device_memory_evictions);
892    trace_dump_struct_end();
893 }
894 
trace_dump_draw_info(const struct pipe_draw_info * state)895 void trace_dump_draw_info(const struct pipe_draw_info *state)
896 {
897    if (!trace_dumping_enabled_locked())
898       return;
899 
900    if (!state) {
901       trace_dump_null();
902       return;
903    }
904 
905    trace_dump_struct_begin("pipe_draw_info");
906 
907    trace_dump_member(uint, state, index_size);
908    trace_dump_member(uint, state, has_user_indices);
909    trace_dump_member(uint, state, mode);
910    trace_dump_member(uint, state, start_instance);
911    trace_dump_member(uint, state, instance_count);
912 
913    trace_dump_member(uint, state, min_index);
914    trace_dump_member(uint, state, max_index);
915 
916    trace_dump_member(bool, state, primitive_restart);
917    trace_dump_member(uint, state, restart_index);
918 
919    trace_dump_member(ptr, state, index.resource);
920    trace_dump_struct_end();
921 }
922 
trace_dump_draw_vertex_state_info(struct pipe_draw_vertex_state_info state)923 void trace_dump_draw_vertex_state_info(struct pipe_draw_vertex_state_info state)
924 {
925    if (!trace_dumping_enabled_locked())
926       return;
927 
928    trace_dump_struct_begin("pipe_draw_vertex_state_info");
929    trace_dump_member(uint, &state, mode);
930    trace_dump_member(uint, &state, take_vertex_state_ownership);
931    trace_dump_struct_end();
932 }
933 
trace_dump_draw_start_count(const struct pipe_draw_start_count_bias * state)934 void trace_dump_draw_start_count(const struct pipe_draw_start_count_bias *state)
935 {
936    if (!trace_dumping_enabled_locked())
937       return;
938 
939    trace_dump_struct_begin("pipe_draw_start_count_bias");
940    trace_dump_member(uint, state, start);
941    trace_dump_member(uint, state, count);
942    trace_dump_member(int,  state, index_bias);
943    trace_dump_struct_end();
944 }
945 
trace_dump_draw_indirect_info(const struct pipe_draw_indirect_info * state)946 void trace_dump_draw_indirect_info(const struct pipe_draw_indirect_info *state)
947 {
948    if (!trace_dumping_enabled_locked())
949       return;
950 
951    if (!state) {
952       trace_dump_null();
953       return;
954    }
955 
956    trace_dump_struct_begin("pipe_draw_indirect_info");
957    trace_dump_member(uint, state, offset);
958    trace_dump_member(uint, state, stride);
959    trace_dump_member(uint, state, draw_count);
960    trace_dump_member(uint, state, indirect_draw_count_offset);
961    trace_dump_member(ptr, state, buffer);
962    trace_dump_member(ptr, state, indirect_draw_count);
963    trace_dump_member(ptr, state, count_from_stream_output);
964    trace_dump_struct_end();
965 }
966 
trace_dump_blit_info(const struct pipe_blit_info * info)967 void trace_dump_blit_info(const struct pipe_blit_info *info)
968 {
969    char mask[7];
970 
971    if (!trace_dumping_enabled_locked())
972       return;
973 
974    if (!info) {
975       trace_dump_null();
976       return;
977    }
978 
979    trace_dump_struct_begin("pipe_blit_info");
980 
981    trace_dump_member_begin("dst");
982    trace_dump_struct_begin("dst");
983    trace_dump_member(ptr, &info->dst, resource);
984    trace_dump_member(uint, &info->dst, level);
985    trace_dump_member(format, &info->dst, format);
986    trace_dump_member_begin("box");
987    trace_dump_box(&info->dst.box);
988    trace_dump_member_end();
989    trace_dump_struct_end();
990    trace_dump_member_end();
991 
992    trace_dump_member_begin("src");
993    trace_dump_struct_begin("src");
994    trace_dump_member(ptr, &info->src, resource);
995    trace_dump_member(uint, &info->src, level);
996    trace_dump_member(format, &info->src, format);
997    trace_dump_member_begin("box");
998    trace_dump_box(&info->src.box);
999    trace_dump_member_end();
1000    trace_dump_struct_end();
1001    trace_dump_member_end();
1002 
1003    mask[0] = (info->mask & PIPE_MASK_R) ? 'R' : '-';
1004    mask[1] = (info->mask & PIPE_MASK_G) ? 'G' : '-';
1005    mask[2] = (info->mask & PIPE_MASK_B) ? 'B' : '-';
1006    mask[3] = (info->mask & PIPE_MASK_A) ? 'A' : '-';
1007    mask[4] = (info->mask & PIPE_MASK_Z) ? 'Z' : '-';
1008    mask[5] = (info->mask & PIPE_MASK_S) ? 'S' : '-';
1009    mask[6] = 0;
1010 
1011    trace_dump_member_begin("mask");
1012    trace_dump_string(mask);
1013    trace_dump_member_end();
1014    trace_dump_member(uint, info, filter);
1015 
1016    trace_dump_member(bool, info, scissor_enable);
1017    trace_dump_member_begin("scissor");
1018    trace_dump_scissor_state(&info->scissor);
1019    trace_dump_member_end();
1020 
1021    trace_dump_struct_end();
1022 }
1023 
1024 void
trace_dump_query_result(unsigned query_type,unsigned index,const union pipe_query_result * result)1025 trace_dump_query_result(unsigned query_type, unsigned index,
1026                         const union pipe_query_result *result)
1027 {
1028    if (!trace_dumping_enabled_locked())
1029       return;
1030 
1031    if (!result) {
1032       trace_dump_null();
1033       return;
1034    }
1035 
1036    switch (query_type) {
1037    case PIPE_QUERY_OCCLUSION_PREDICATE:
1038    case PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE:
1039    case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
1040    case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
1041    case PIPE_QUERY_GPU_FINISHED:
1042       trace_dump_bool(result->b);
1043       break;
1044 
1045    case PIPE_QUERY_OCCLUSION_COUNTER:
1046    case PIPE_QUERY_TIMESTAMP:
1047    case PIPE_QUERY_TIME_ELAPSED:
1048    case PIPE_QUERY_PRIMITIVES_GENERATED:
1049    case PIPE_QUERY_PRIMITIVES_EMITTED:
1050       trace_dump_uint(result->u64);
1051       break;
1052 
1053    case PIPE_QUERY_SO_STATISTICS:
1054       trace_dump_struct_begin("pipe_query_data_so_statistics");
1055       trace_dump_member(uint, &result->so_statistics, num_primitives_written);
1056       trace_dump_member(uint, &result->so_statistics, primitives_storage_needed);
1057       trace_dump_struct_end();
1058       break;
1059 
1060    case PIPE_QUERY_TIMESTAMP_DISJOINT:
1061       trace_dump_struct_begin("pipe_query_data_timestamp_disjoint");
1062       trace_dump_member(uint, &result->timestamp_disjoint, frequency);
1063       trace_dump_member(bool, &result->timestamp_disjoint, disjoint);
1064       trace_dump_struct_end();
1065       break;
1066 
1067    case PIPE_QUERY_PIPELINE_STATISTICS:
1068       trace_dump_struct_begin("pipe_query_data_pipeline_statistics");
1069       trace_dump_member(uint, &result->pipeline_statistics, ia_vertices);
1070       trace_dump_member(uint, &result->pipeline_statistics, ia_primitives);
1071       trace_dump_member(uint, &result->pipeline_statistics, vs_invocations);
1072       trace_dump_member(uint, &result->pipeline_statistics, gs_invocations);
1073       trace_dump_member(uint, &result->pipeline_statistics, gs_primitives);
1074       trace_dump_member(uint, &result->pipeline_statistics, c_invocations);
1075       trace_dump_member(uint, &result->pipeline_statistics, c_primitives);
1076       trace_dump_member(uint, &result->pipeline_statistics, ps_invocations);
1077       trace_dump_member(uint, &result->pipeline_statistics, hs_invocations);
1078       trace_dump_member(uint, &result->pipeline_statistics, ds_invocations);
1079       trace_dump_member(uint, &result->pipeline_statistics, cs_invocations);
1080       trace_dump_struct_end();
1081       break;
1082 
1083    case PIPE_QUERY_PIPELINE_STATISTICS_SINGLE:
1084       trace_dump_struct_begin("pipe_query_data_pipeline_statistics");
1085       switch (index) {
1086       case PIPE_STAT_QUERY_IA_VERTICES:
1087          trace_dump_member(uint, &result->pipeline_statistics, ia_vertices);
1088          break;
1089       case PIPE_STAT_QUERY_IA_PRIMITIVES:
1090          trace_dump_member(uint, &result->pipeline_statistics, ia_primitives);
1091          break;
1092       case PIPE_STAT_QUERY_VS_INVOCATIONS:
1093          trace_dump_member(uint, &result->pipeline_statistics, vs_invocations);
1094          break;
1095       case PIPE_STAT_QUERY_GS_INVOCATIONS:
1096          trace_dump_member(uint, &result->pipeline_statistics, gs_invocations);
1097          break;
1098       case PIPE_STAT_QUERY_GS_PRIMITIVES:
1099          trace_dump_member(uint, &result->pipeline_statistics, gs_primitives);
1100          break;
1101       case PIPE_STAT_QUERY_C_INVOCATIONS:
1102          trace_dump_member(uint, &result->pipeline_statistics, c_invocations);
1103          break;
1104       case PIPE_STAT_QUERY_C_PRIMITIVES:
1105          trace_dump_member(uint, &result->pipeline_statistics, c_primitives);
1106          break;
1107       case PIPE_STAT_QUERY_PS_INVOCATIONS:
1108          trace_dump_member(uint, &result->pipeline_statistics, ps_invocations);
1109          break;
1110       case PIPE_STAT_QUERY_HS_INVOCATIONS:
1111          trace_dump_member(uint, &result->pipeline_statistics, hs_invocations);
1112          break;
1113       case PIPE_STAT_QUERY_DS_INVOCATIONS:
1114          trace_dump_member(uint, &result->pipeline_statistics, ds_invocations);
1115          break;
1116       case PIPE_STAT_QUERY_CS_INVOCATIONS:
1117          trace_dump_member(uint, &result->pipeline_statistics, cs_invocations);
1118          break;
1119       }
1120       trace_dump_struct_end();
1121       break;
1122 
1123    default:
1124       assert(query_type >= PIPE_QUERY_DRIVER_SPECIFIC);
1125       trace_dump_uint(result->u64);
1126       break;
1127    }
1128 }
1129 
trace_dump_grid_info(const struct pipe_grid_info * state)1130 void trace_dump_grid_info(const struct pipe_grid_info *state)
1131 {
1132    if (!trace_dumping_enabled_locked())
1133       return;
1134 
1135    if (!state) {
1136       trace_dump_null();
1137       return;
1138    }
1139 
1140    trace_dump_struct_begin("pipe_grid_info");
1141 
1142    trace_dump_member(uint, state, pc);
1143    trace_dump_member(ptr, state, input);
1144    trace_dump_member(uint, state, variable_shared_mem);
1145 
1146    trace_dump_member_begin("block");
1147    trace_dump_array(uint, state->block, ARRAY_SIZE(state->block));
1148    trace_dump_member_end();
1149 
1150    trace_dump_member_begin("grid");
1151    trace_dump_array(uint, state->grid, ARRAY_SIZE(state->grid));
1152    trace_dump_member_end();
1153 
1154    trace_dump_member(ptr, state, indirect);
1155    trace_dump_member(uint, state, indirect_offset);
1156 
1157    trace_dump_struct_end();
1158 }
1159 
trace_dump_winsys_handle(const struct winsys_handle * whandle)1160 void trace_dump_winsys_handle(const struct winsys_handle *whandle)
1161 {
1162    if (!trace_dumping_enabled_locked())
1163       return;
1164 
1165    if (!whandle) {
1166       trace_dump_null();
1167       return;
1168    }
1169 
1170    trace_dump_struct_begin("winsys_handle");
1171 
1172    trace_dump_member(uint, whandle, type);
1173    trace_dump_member(uint, whandle, layer);
1174    trace_dump_member(uint, whandle, plane);
1175 #ifdef _WIN32
1176    trace_dump_member(ptr, whandle, handle);
1177 #else
1178    trace_dump_member(uint, whandle, handle);
1179 #endif
1180    trace_dump_member(uint, whandle, stride);
1181    trace_dump_member(uint, whandle, offset);
1182    trace_dump_member(format, whandle, format);
1183    trace_dump_member(uint, whandle, modifier);
1184    trace_dump_member(uint, whandle, size);
1185 
1186    trace_dump_struct_end();
1187 }
1188 
trace_dump_pipe_picture_desc(const struct pipe_picture_desc * picture)1189 void trace_dump_pipe_picture_desc(const struct pipe_picture_desc *picture)
1190 {
1191    if (!trace_dumping_enabled_locked())
1192       return;
1193 
1194    if (!picture) {
1195       trace_dump_null();
1196       return;
1197    }
1198 
1199    trace_dump_struct_begin("pipe_picture_desc");
1200 
1201    trace_dump_member_enum(pipe_video_profile, picture, profile);
1202    trace_dump_member_enum(pipe_video_entrypoint, picture, entry_point);
1203    trace_dump_member(bool, picture, protected_playback);
1204    trace_dump_member_begin("decrypt_key");
1205    trace_dump_array(uint, picture->decrypt_key, picture->key_size);
1206    trace_dump_member_end();
1207    trace_dump_member(uint, picture, key_size);
1208    trace_dump_member(format, picture, input_format);
1209    trace_dump_member(bool, picture, input_full_range);
1210    trace_dump_member(format, picture, output_format);
1211    trace_dump_member(ptr, picture, fence);
1212    trace_dump_struct_end();
1213 }
1214 
trace_dump_pipe_vpp_blend(const struct pipe_vpp_blend * blend)1215 void trace_dump_pipe_vpp_blend(const struct pipe_vpp_blend *blend)
1216 {
1217    if (!trace_dumping_enabled_locked())
1218       return;
1219 
1220    if (!blend) {
1221       trace_dump_null();
1222       return;
1223    }
1224 
1225    trace_dump_struct_begin("pipe_vpp_blend");
1226    trace_dump_member_enum(pipe_video_vpp_blend_mode, blend, mode);
1227    trace_dump_member(float, blend, global_alpha);
1228    trace_dump_struct_end();
1229 }
1230 
trace_dump_pipe_vpp_desc(const struct pipe_vpp_desc * process_properties)1231 void trace_dump_pipe_vpp_desc(const struct pipe_vpp_desc *process_properties)
1232 {
1233    if (!trace_dumping_enabled_locked())
1234       return;
1235 
1236    if (!process_properties) {
1237       trace_dump_null();
1238       return;
1239    }
1240 
1241    trace_dump_struct_begin("pipe_vpp_desc");
1242    trace_dump_member_struct(pipe_picture_desc, process_properties, base);
1243    trace_dump_member_struct(u_rect, process_properties, src_region);
1244    trace_dump_member_struct(u_rect, process_properties, dst_region);
1245    trace_dump_member_enum(pipe_video_vpp_orientation, process_properties, orientation);
1246    trace_dump_member_struct(pipe_vpp_blend, process_properties, blend);
1247    trace_dump_member(ptr, process_properties, src_surface_fence);
1248    trace_dump_struct_end();
1249 }
1250