Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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 "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_defines.h"
  36. #include "tr_dump_state.h"
  37.  
  38.  
  39. void trace_dump_resource_template(const struct pipe_resource *templat)
  40. {
  41.    if (!trace_dumping_enabled_locked())
  42.       return;
  43.  
  44.    if(!templat) {
  45.       trace_dump_null();
  46.       return;
  47.    }
  48.  
  49.    trace_dump_struct_begin("pipe_resource");
  50.  
  51.    trace_dump_member(int, templat, target);
  52.    trace_dump_member(format, templat, format);
  53.  
  54.    trace_dump_member_begin("width");
  55.    trace_dump_uint(templat->width0);
  56.    trace_dump_member_end();
  57.  
  58.    trace_dump_member_begin("height");
  59.    trace_dump_uint(templat->height0);
  60.    trace_dump_member_end();
  61.  
  62.    trace_dump_member_begin("depth");
  63.    trace_dump_uint(templat->depth0);
  64.    trace_dump_member_end();
  65.  
  66.    trace_dump_member_begin("array_size");
  67.    trace_dump_uint(templat->array_size);
  68.    trace_dump_member_end();
  69.  
  70.    trace_dump_member(uint, templat, last_level);
  71.    trace_dump_member(uint, templat, nr_samples);
  72.    trace_dump_member(uint, templat, usage);
  73.    trace_dump_member(uint, templat, bind);
  74.    trace_dump_member(uint, templat, flags);
  75.  
  76.    trace_dump_struct_end();
  77. }
  78.  
  79.  
  80. void trace_dump_box(const struct pipe_box *box)
  81. {
  82.    if (!trace_dumping_enabled_locked())
  83.       return;
  84.  
  85.    if(!box) {
  86.       trace_dump_null();
  87.       return;
  88.    }
  89.  
  90.    trace_dump_struct_begin("pipe_box");
  91.  
  92.    trace_dump_member(int, box, x);
  93.    trace_dump_member(int, box, y);
  94.    trace_dump_member(int, box, z);
  95.    trace_dump_member(int, box, width);
  96.    trace_dump_member(int, box, height);
  97.    trace_dump_member(int, box, depth);
  98.  
  99.    trace_dump_struct_end();
  100. }
  101.  
  102.  
  103. void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state)
  104. {
  105.    if (!trace_dumping_enabled_locked())
  106.       return;
  107.  
  108.    if(!state) {
  109.       trace_dump_null();
  110.       return;
  111.    }
  112.  
  113.    trace_dump_struct_begin("pipe_rasterizer_state");
  114.  
  115.    trace_dump_member(bool, state, flatshade);
  116.    trace_dump_member(bool, state, light_twoside);
  117.    trace_dump_member(bool, state, clamp_vertex_color);
  118.    trace_dump_member(bool, state, clamp_fragment_color);
  119.    trace_dump_member(uint, state, front_ccw);
  120.    trace_dump_member(uint, state, cull_face);
  121.    trace_dump_member(uint, state, fill_front);
  122.    trace_dump_member(uint, state, fill_back);
  123.    trace_dump_member(bool, state, offset_point);
  124.    trace_dump_member(bool, state, offset_line);
  125.    trace_dump_member(bool, state, offset_tri);
  126.    trace_dump_member(bool, state, scissor);
  127.    trace_dump_member(bool, state, poly_smooth);
  128.    trace_dump_member(bool, state, poly_stipple_enable);
  129.    trace_dump_member(bool, state, point_smooth);
  130.    trace_dump_member(bool, state, sprite_coord_mode);
  131.    trace_dump_member(bool, state, point_quad_rasterization);
  132.    trace_dump_member(bool, state, point_size_per_vertex);
  133.    trace_dump_member(bool, state, multisample);
  134.    trace_dump_member(bool, state, line_smooth);
  135.    trace_dump_member(bool, state, line_stipple_enable);
  136.    trace_dump_member(bool, state, line_last_pixel);
  137.  
  138.    trace_dump_member(bool, state, flatshade_first);
  139.  
  140.    trace_dump_member(bool, state, half_pixel_center);
  141.    trace_dump_member(bool, state, bottom_edge_rule);
  142.  
  143.    trace_dump_member(bool, state, rasterizer_discard);
  144.  
  145.    trace_dump_member(bool, state, depth_clip);
  146.  
  147.    trace_dump_member(bool, state, clip_halfz);
  148.  
  149.    trace_dump_member(uint, state, clip_plane_enable);
  150.  
  151.    trace_dump_member(uint, state, line_stipple_factor);
  152.    trace_dump_member(uint, state, line_stipple_pattern);
  153.  
  154.    trace_dump_member(uint, state, sprite_coord_enable);
  155.  
  156.    trace_dump_member(float, state, line_width);
  157.    trace_dump_member(float, state, point_size);
  158.    trace_dump_member(float, state, offset_units);
  159.    trace_dump_member(float, state, offset_scale);
  160.    trace_dump_member(float, state, offset_clamp);
  161.  
  162.    trace_dump_struct_end();
  163. }
  164.  
  165.  
  166. void trace_dump_poly_stipple(const struct pipe_poly_stipple *state)
  167. {
  168.    if (!trace_dumping_enabled_locked())
  169.       return;
  170.  
  171.    if(!state) {
  172.       trace_dump_null();
  173.       return;
  174.    }
  175.  
  176.    trace_dump_struct_begin("pipe_poly_stipple");
  177.  
  178.    trace_dump_member_begin("stipple");
  179.    trace_dump_array(uint,
  180.                     state->stipple,
  181.                     Elements(state->stipple));
  182.    trace_dump_member_end();
  183.  
  184.    trace_dump_struct_end();
  185. }
  186.  
  187.  
  188. void trace_dump_viewport_state(const struct pipe_viewport_state *state)
  189. {
  190.    if (!trace_dumping_enabled_locked())
  191.       return;
  192.  
  193.    if(!state) {
  194.       trace_dump_null();
  195.       return;
  196.    }
  197.  
  198.    trace_dump_struct_begin("pipe_viewport_state");
  199.  
  200.    trace_dump_member_array(float, state, scale);
  201.    trace_dump_member_array(float, state, translate);
  202.  
  203.    trace_dump_struct_end();
  204. }
  205.  
  206.  
  207. void trace_dump_scissor_state(const struct pipe_scissor_state *state)
  208. {
  209.    if (!trace_dumping_enabled_locked())
  210.       return;
  211.  
  212.    if(!state) {
  213.       trace_dump_null();
  214.       return;
  215.    }
  216.  
  217.    trace_dump_struct_begin("pipe_scissor_state");
  218.  
  219.    trace_dump_member(uint, state, minx);
  220.    trace_dump_member(uint, state, miny);
  221.    trace_dump_member(uint, state, maxx);
  222.    trace_dump_member(uint, state, maxy);
  223.  
  224.    trace_dump_struct_end();
  225. }
  226.  
  227.  
  228. void trace_dump_clip_state(const struct pipe_clip_state *state)
  229. {
  230.    unsigned i;
  231.  
  232.    if (!trace_dumping_enabled_locked())
  233.       return;
  234.  
  235.    if(!state) {
  236.       trace_dump_null();
  237.       return;
  238.    }
  239.  
  240.    trace_dump_struct_begin("pipe_clip_state");
  241.  
  242.    trace_dump_member_begin("ucp");
  243.    trace_dump_array_begin();
  244.    for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) {
  245.       trace_dump_elem_begin();
  246.       trace_dump_array(float, state->ucp[i], 4);
  247.       trace_dump_elem_end();
  248.    }
  249.    trace_dump_array_end();
  250.    trace_dump_member_end();
  251.  
  252.    trace_dump_struct_end();
  253. }
  254.  
  255.  
  256. void trace_dump_shader_state(const struct pipe_shader_state *state)
  257. {
  258.    unsigned i;
  259.  
  260.    if (!trace_dumping_enabled_locked())
  261.       return;
  262.  
  263.    if(!state) {
  264.       trace_dump_null();
  265.       return;
  266.    }
  267.  
  268.  
  269.    trace_dump_struct_begin("pipe_shader_state");
  270.  
  271.    trace_dump_member_begin("tokens");
  272.    if (state->tokens) {
  273.       static char str[64 * 1024];
  274.       tgsi_dump_str(state->tokens, 0, str, sizeof(str));
  275.       trace_dump_string(str);
  276.    } else {
  277.       trace_dump_null();
  278.    }
  279.    trace_dump_member_end();
  280.  
  281.    trace_dump_member_begin("stream_output");
  282.    trace_dump_struct_begin("pipe_stream_output_info");
  283.    trace_dump_member(uint, &state->stream_output, num_outputs);
  284.    trace_dump_member_array(uint, &state->stream_output, stride);
  285.    trace_dump_member_begin("output");
  286.    trace_dump_array_begin();
  287.    for(i = 0; i < state->stream_output.num_outputs; ++i) {
  288.       trace_dump_elem_begin();
  289.       trace_dump_struct_begin(""); /* anonymous */
  290.       trace_dump_member(uint, &state->stream_output.output[i], register_index);
  291.       trace_dump_member(uint, &state->stream_output.output[i], start_component);
  292.       trace_dump_member(uint, &state->stream_output.output[i], num_components);
  293.       trace_dump_member(uint, &state->stream_output.output[i], output_buffer);
  294.       trace_dump_member(uint, &state->stream_output.output[i], dst_offset);
  295.       trace_dump_member(uint, &state->stream_output.output[i], stream);
  296.       trace_dump_struct_end();
  297.       trace_dump_elem_end();
  298.    }
  299.    trace_dump_array_end();
  300.    trace_dump_member_end(); // output
  301.    trace_dump_struct_end();
  302.    trace_dump_member_end(); // stream_output
  303.  
  304.    trace_dump_struct_end();
  305. }
  306.  
  307.  
  308. void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_state *state)
  309. {
  310.    unsigned i;
  311.  
  312.    if (!trace_dumping_enabled_locked())
  313.       return;
  314.  
  315.    if(!state) {
  316.       trace_dump_null();
  317.       return;
  318.    }
  319.  
  320.    trace_dump_struct_begin("pipe_depth_stencil_alpha_state");
  321.  
  322.    trace_dump_member_begin("depth");
  323.    trace_dump_struct_begin("pipe_depth_state");
  324.    trace_dump_member(bool, &state->depth, enabled);
  325.    trace_dump_member(bool, &state->depth, writemask);
  326.    trace_dump_member(uint, &state->depth, func);
  327.    trace_dump_struct_end();
  328.    trace_dump_member_end();
  329.  
  330.    trace_dump_member_begin("stencil");
  331.    trace_dump_array_begin();
  332.    for(i = 0; i < Elements(state->stencil); ++i) {
  333.       trace_dump_elem_begin();
  334.       trace_dump_struct_begin("pipe_stencil_state");
  335.       trace_dump_member(bool, &state->stencil[i], enabled);
  336.       trace_dump_member(uint, &state->stencil[i], func);
  337.       trace_dump_member(uint, &state->stencil[i], fail_op);
  338.       trace_dump_member(uint, &state->stencil[i], zpass_op);
  339.       trace_dump_member(uint, &state->stencil[i], zfail_op);
  340.       trace_dump_member(uint, &state->stencil[i], valuemask);
  341.       trace_dump_member(uint, &state->stencil[i], writemask);
  342.       trace_dump_struct_end();
  343.       trace_dump_elem_end();
  344.    }
  345.    trace_dump_array_end();
  346.    trace_dump_member_end();
  347.  
  348.    trace_dump_member_begin("alpha");
  349.    trace_dump_struct_begin("pipe_alpha_state");
  350.    trace_dump_member(bool, &state->alpha, enabled);
  351.    trace_dump_member(uint, &state->alpha, func);
  352.    trace_dump_member(float, &state->alpha, ref_value);
  353.    trace_dump_struct_end();
  354.    trace_dump_member_end();
  355.  
  356.    trace_dump_struct_end();
  357. }
  358.  
  359. static void trace_dump_rt_blend_state(const struct pipe_rt_blend_state *state)
  360. {
  361.    trace_dump_struct_begin("pipe_rt_blend_state");
  362.  
  363.    trace_dump_member(uint, state, blend_enable);
  364.  
  365.    trace_dump_member(uint, state, rgb_func);
  366.    trace_dump_member(uint, state, rgb_src_factor);
  367.    trace_dump_member(uint, state, rgb_dst_factor);
  368.  
  369.    trace_dump_member(uint, state, alpha_func);
  370.    trace_dump_member(uint, state, alpha_src_factor);
  371.    trace_dump_member(uint, state, alpha_dst_factor);
  372.  
  373.    trace_dump_member(uint, state, colormask);
  374.  
  375.    trace_dump_struct_end();
  376. }
  377.  
  378. void trace_dump_blend_state(const struct pipe_blend_state *state)
  379. {
  380.    unsigned valid_entries = 1;
  381.  
  382.    if (!trace_dumping_enabled_locked())
  383.       return;
  384.  
  385.    if(!state) {
  386.       trace_dump_null();
  387.       return;
  388.    }
  389.  
  390.    trace_dump_struct_begin("pipe_blend_state");
  391.  
  392.    trace_dump_member(bool, state, dither);
  393.  
  394.    trace_dump_member(bool, state, logicop_enable);
  395.    trace_dump_member(uint, state, logicop_func);
  396.  
  397.    trace_dump_member(bool, state, independent_blend_enable);
  398.  
  399.    trace_dump_member_begin("rt");
  400.    if (state->independent_blend_enable)
  401.       valid_entries = PIPE_MAX_COLOR_BUFS;
  402.    trace_dump_struct_array(rt_blend_state, state->rt, valid_entries);
  403.    trace_dump_member_end();
  404.  
  405.    trace_dump_struct_end();
  406. }
  407.  
  408.  
  409. void trace_dump_blend_color(const struct pipe_blend_color *state)
  410. {
  411.    if (!trace_dumping_enabled_locked())
  412.       return;
  413.  
  414.    if(!state) {
  415.       trace_dump_null();
  416.       return;
  417.    }
  418.  
  419.    trace_dump_struct_begin("pipe_blend_color");
  420.  
  421.    trace_dump_member_array(float, state, color);
  422.  
  423.    trace_dump_struct_end();
  424. }
  425.  
  426. void trace_dump_stencil_ref(const struct pipe_stencil_ref *state)
  427. {
  428.    if (!trace_dumping_enabled_locked())
  429.       return;
  430.  
  431.    if(!state) {
  432.       trace_dump_null();
  433.       return;
  434.    }
  435.  
  436.    trace_dump_struct_begin("pipe_stencil_ref");
  437.  
  438.    trace_dump_member_array(uint, state, ref_value);
  439.  
  440.    trace_dump_struct_end();
  441. }
  442.  
  443. void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state)
  444. {
  445.    if (!trace_dumping_enabled_locked())
  446.       return;
  447.  
  448.    trace_dump_struct_begin("pipe_framebuffer_state");
  449.  
  450.    trace_dump_member(uint, state, width);
  451.    trace_dump_member(uint, state, height);
  452.    trace_dump_member(uint, state, nr_cbufs);
  453.    trace_dump_member_array(ptr, state, cbufs);
  454.    trace_dump_member(ptr, state, zsbuf);
  455.  
  456.    trace_dump_struct_end();
  457. }
  458.  
  459.  
  460. void trace_dump_sampler_state(const struct pipe_sampler_state *state)
  461. {
  462.    if (!trace_dumping_enabled_locked())
  463.       return;
  464.  
  465.    if(!state) {
  466.       trace_dump_null();
  467.       return;
  468.    }
  469.  
  470.    trace_dump_struct_begin("pipe_sampler_state");
  471.  
  472.    trace_dump_member(uint, state, wrap_s);
  473.    trace_dump_member(uint, state, wrap_t);
  474.    trace_dump_member(uint, state, wrap_r);
  475.    trace_dump_member(uint, state, min_img_filter);
  476.    trace_dump_member(uint, state, min_mip_filter);
  477.    trace_dump_member(uint, state, mag_img_filter);
  478.    trace_dump_member(uint, state, compare_mode);
  479.    trace_dump_member(uint, state, compare_func);
  480.    trace_dump_member(bool, state, normalized_coords);
  481.    trace_dump_member(uint, state, max_anisotropy);
  482.    trace_dump_member(bool, state, seamless_cube_map);
  483.    trace_dump_member(float, state, lod_bias);
  484.    trace_dump_member(float, state, min_lod);
  485.    trace_dump_member(float, state, max_lod);
  486.    trace_dump_member_array(float, state, border_color.f);
  487.  
  488.    trace_dump_struct_end();
  489. }
  490.  
  491.  
  492. void trace_dump_sampler_view_template(const struct pipe_sampler_view *state,
  493.                                       enum pipe_texture_target target)
  494. {
  495.    if (!trace_dumping_enabled_locked())
  496.       return;
  497.  
  498.    if(!state) {
  499.       trace_dump_null();
  500.       return;
  501.    }
  502.  
  503.    trace_dump_struct_begin("pipe_sampler_view");
  504.  
  505.    trace_dump_member(format, state, format);
  506.  
  507.    trace_dump_member_begin("u");
  508.    trace_dump_struct_begin(""); /* anonymous */
  509.    if (target == PIPE_BUFFER) {
  510.       trace_dump_member_begin("buf");
  511.       trace_dump_struct_begin(""); /* anonymous */
  512.       trace_dump_member(uint, &state->u.buf, first_element);
  513.       trace_dump_member(uint, &state->u.buf, last_element);
  514.       trace_dump_struct_end(); /* anonymous */
  515.       trace_dump_member_end(); /* buf */
  516.    } else {
  517.       trace_dump_member_begin("tex");
  518.       trace_dump_struct_begin(""); /* anonymous */
  519.       trace_dump_member(uint, &state->u.tex, first_layer);
  520.       trace_dump_member(uint, &state->u.tex, last_layer);
  521.       trace_dump_member(uint, &state->u.tex, first_level);
  522.       trace_dump_member(uint, &state->u.tex, last_level);
  523.       trace_dump_struct_end(); /* anonymous */
  524.       trace_dump_member_end(); /* tex */
  525.    }
  526.    trace_dump_struct_end(); /* anonymous */
  527.    trace_dump_member_end(); /* u */
  528.  
  529.    trace_dump_member(uint, state, swizzle_r);
  530.    trace_dump_member(uint, state, swizzle_g);
  531.    trace_dump_member(uint, state, swizzle_b);
  532.    trace_dump_member(uint, state, swizzle_a);
  533.  
  534.    trace_dump_struct_end();
  535. }
  536.  
  537.  
  538. void trace_dump_surface_template(const struct pipe_surface *state,
  539.                                  enum pipe_texture_target target)
  540. {
  541.    if (!trace_dumping_enabled_locked())
  542.       return;
  543.  
  544.    if(!state) {
  545.       trace_dump_null();
  546.       return;
  547.    }
  548.  
  549.    trace_dump_struct_begin("pipe_surface");
  550.  
  551.    trace_dump_member(format, state, format);
  552.    trace_dump_member(uint, state, width);
  553.    trace_dump_member(uint, state, height);
  554.  
  555.    trace_dump_member_begin("u");
  556.    trace_dump_struct_begin(""); /* anonymous */
  557.    if (target == PIPE_BUFFER) {
  558.       trace_dump_member_begin("buf");
  559.       trace_dump_struct_begin(""); /* anonymous */
  560.       trace_dump_member(uint, &state->u.buf, first_element);
  561.       trace_dump_member(uint, &state->u.buf, last_element);
  562.       trace_dump_struct_end(); /* anonymous */
  563.       trace_dump_member_end(); /* buf */
  564.    } else {
  565.       trace_dump_member_begin("tex");
  566.       trace_dump_struct_begin(""); /* anonymous */
  567.       trace_dump_member(uint, &state->u.tex, level);
  568.       trace_dump_member(uint, &state->u.tex, first_layer);
  569.       trace_dump_member(uint, &state->u.tex, last_layer);
  570.       trace_dump_struct_end(); /* anonymous */
  571.       trace_dump_member_end(); /* tex */
  572.    }
  573.    trace_dump_struct_end(); /* anonymous */
  574.    trace_dump_member_end(); /* u */
  575.  
  576.    trace_dump_struct_end();
  577. }
  578.  
  579.  
  580. void trace_dump_transfer(const struct pipe_transfer *state)
  581. {
  582.    if (!trace_dumping_enabled_locked())
  583.       return;
  584.  
  585.    if(!state) {
  586.       trace_dump_null();
  587.       return;
  588.    }
  589.  
  590.    trace_dump_struct_begin("pipe_transfer");
  591.  
  592.    trace_dump_member(uint, state, box.x);
  593.    trace_dump_member(uint, state, box.y);
  594.    trace_dump_member(uint, state, box.z);
  595.    trace_dump_member(uint, state, box.width);
  596.    trace_dump_member(uint, state, box.height);
  597.    trace_dump_member(uint, state, box.depth);
  598.  
  599.    trace_dump_member(uint, state, stride);
  600.    trace_dump_member(uint, state, layer_stride);
  601.    trace_dump_member(uint, state, usage);
  602.  
  603.    trace_dump_member(ptr, state, resource);
  604.  
  605.    trace_dump_struct_end();
  606. }
  607.  
  608.  
  609. void trace_dump_vertex_buffer(const struct pipe_vertex_buffer *state)
  610. {
  611.    if (!trace_dumping_enabled_locked())
  612.       return;
  613.  
  614.    if(!state) {
  615.       trace_dump_null();
  616.       return;
  617.    }
  618.  
  619.    trace_dump_struct_begin("pipe_vertex_buffer");
  620.  
  621.    trace_dump_member(uint, state, stride);
  622.    trace_dump_member(uint, state, buffer_offset);
  623.    trace_dump_member(resource_ptr, state, buffer);
  624.    trace_dump_member(ptr, state, user_buffer);
  625.  
  626.    trace_dump_struct_end();
  627. }
  628.  
  629.  
  630. void trace_dump_index_buffer(const struct pipe_index_buffer *state)
  631. {
  632.    if (!trace_dumping_enabled_locked())
  633.       return;
  634.  
  635.    if(!state) {
  636.       trace_dump_null();
  637.       return;
  638.    }
  639.  
  640.    trace_dump_struct_begin("pipe_index_buffer");
  641.  
  642.    trace_dump_member(uint, state, index_size);
  643.    trace_dump_member(uint, state, offset);
  644.    trace_dump_member(resource_ptr, state, buffer);
  645.    trace_dump_member(ptr, state, user_buffer);
  646.  
  647.    trace_dump_struct_end();
  648. }
  649.  
  650.  
  651. void trace_dump_vertex_element(const struct pipe_vertex_element *state)
  652. {
  653.    if (!trace_dumping_enabled_locked())
  654.       return;
  655.  
  656.    if(!state) {
  657.       trace_dump_null();
  658.       return;
  659.    }
  660.  
  661.    trace_dump_struct_begin("pipe_vertex_element");
  662.  
  663.    trace_dump_member(uint, state, src_offset);
  664.  
  665.    trace_dump_member(uint, state, vertex_buffer_index);
  666.  
  667.    trace_dump_member(format, state, src_format);
  668.  
  669.    trace_dump_struct_end();
  670. }
  671.  
  672.  
  673. void trace_dump_constant_buffer(const struct pipe_constant_buffer *state)
  674. {
  675.    if (!trace_dumping_enabled_locked())
  676.       return;
  677.  
  678.    if(!state) {
  679.       trace_dump_null();
  680.       return;
  681.    }
  682.  
  683.    trace_dump_struct_begin("pipe_constant_buffer");
  684.    trace_dump_member(ptr, state, buffer);
  685.    trace_dump_member(uint, state, buffer_offset);
  686.    trace_dump_member(uint, state, buffer_size);
  687.    trace_dump_struct_end();
  688. }
  689.  
  690.  
  691. void trace_dump_draw_info(const struct pipe_draw_info *state)
  692. {
  693.    if (!trace_dumping_enabled_locked())
  694.       return;
  695.  
  696.    if(!state) {
  697.       trace_dump_null();
  698.       return;
  699.    }
  700.  
  701.    trace_dump_struct_begin("pipe_draw_info");
  702.  
  703.    trace_dump_member(bool, state, indexed);
  704.  
  705.    trace_dump_member(uint, state, mode);
  706.    trace_dump_member(uint, state, start);
  707.    trace_dump_member(uint, state, count);
  708.  
  709.    trace_dump_member(uint, state, start_instance);
  710.    trace_dump_member(uint, state, instance_count);
  711.  
  712.    trace_dump_member(uint, state, vertices_per_patch);
  713.  
  714.    trace_dump_member(int,  state, index_bias);
  715.    trace_dump_member(uint, state, min_index);
  716.    trace_dump_member(uint, state, max_index);
  717.  
  718.    trace_dump_member(bool, state, primitive_restart);
  719.    trace_dump_member(uint, state, restart_index);
  720.  
  721.    trace_dump_member(ptr, state, count_from_stream_output);
  722.  
  723.    trace_dump_member(ptr, state, indirect);
  724.    trace_dump_member(uint, state, indirect_offset);
  725.  
  726.    trace_dump_struct_end();
  727. }
  728.  
  729. void trace_dump_blit_info(const struct pipe_blit_info *info)
  730. {
  731.    char mask[7];
  732.  
  733.    if (!trace_dumping_enabled_locked())
  734.       return;
  735.  
  736.    if (!info) {
  737.       trace_dump_null();
  738.       return;
  739.    }
  740.  
  741.    trace_dump_struct_begin("pipe_blit_info");
  742.  
  743.    trace_dump_member_begin("dst");
  744.    trace_dump_struct_begin("dst");
  745.    trace_dump_member(resource_ptr, &info->dst, resource);
  746.    trace_dump_member(uint, &info->dst, level);
  747.    trace_dump_member(format, &info->dst, format);
  748.    trace_dump_member_begin("box");
  749.    trace_dump_box(&info->dst.box);
  750.    trace_dump_member_end();
  751.    trace_dump_struct_end();
  752.    trace_dump_member_end();
  753.  
  754.    trace_dump_member_begin("src");
  755.    trace_dump_struct_begin("src");
  756.    trace_dump_member(resource_ptr, &info->src, resource);
  757.    trace_dump_member(uint, &info->src, level);
  758.    trace_dump_member(format, &info->src, format);
  759.    trace_dump_member_begin("box");
  760.    trace_dump_box(&info->src.box);
  761.    trace_dump_member_end();
  762.    trace_dump_struct_end();
  763.    trace_dump_member_end();
  764.  
  765.    mask[0] = (info->mask & PIPE_MASK_R) ? 'R' : '-';
  766.    mask[1] = (info->mask & PIPE_MASK_G) ? 'G' : '-';
  767.    mask[2] = (info->mask & PIPE_MASK_B) ? 'B' : '-';
  768.    mask[3] = (info->mask & PIPE_MASK_A) ? 'A' : '-';
  769.    mask[4] = (info->mask & PIPE_MASK_Z) ? 'Z' : '-';
  770.    mask[5] = (info->mask & PIPE_MASK_S) ? 'S' : '-';
  771.    mask[6] = 0;
  772.  
  773.    trace_dump_member_begin("mask");
  774.    trace_dump_string(mask);
  775.    trace_dump_member_end();
  776.    trace_dump_member(uint, info, filter);
  777.  
  778.    trace_dump_member(bool, info, scissor_enable);
  779.    trace_dump_member_begin("scissor");
  780.    trace_dump_scissor_state(&info->scissor);
  781.    trace_dump_member_end();
  782.  
  783.    trace_dump_struct_end();
  784. }
  785.  
  786. void
  787. trace_dump_query_result(unsigned query_type,
  788.                         const union pipe_query_result *result)
  789. {
  790.    if (!trace_dumping_enabled_locked())
  791.       return;
  792.  
  793.    if (!result) {
  794.       trace_dump_null();
  795.       return;
  796.    }
  797.  
  798.    switch (query_type) {
  799.    case PIPE_QUERY_OCCLUSION_PREDICATE:
  800.    case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
  801.    case PIPE_QUERY_GPU_FINISHED:
  802.       trace_dump_bool(result->b);
  803.       break;
  804.  
  805.    case PIPE_QUERY_OCCLUSION_COUNTER:
  806.    case PIPE_QUERY_TIMESTAMP:
  807.    case PIPE_QUERY_TIME_ELAPSED:
  808.    case PIPE_QUERY_PRIMITIVES_GENERATED:
  809.    case PIPE_QUERY_PRIMITIVES_EMITTED:
  810.       trace_dump_uint(result->u64);
  811.       break;
  812.  
  813.    case PIPE_QUERY_SO_STATISTICS:
  814.       trace_dump_struct_begin("pipe_query_data_so_statistics");
  815.       trace_dump_member(uint, &result->so_statistics, num_primitives_written);
  816.       trace_dump_member(uint, &result->so_statistics, primitives_storage_needed);
  817.       trace_dump_struct_end();
  818.       break;
  819.  
  820.    case PIPE_QUERY_TIMESTAMP_DISJOINT:
  821.       trace_dump_struct_begin("pipe_query_data_timestamp_disjoint");
  822.       trace_dump_member(uint, &result->timestamp_disjoint, frequency);
  823.       trace_dump_member(bool, &result->timestamp_disjoint, disjoint);
  824.       trace_dump_struct_end();
  825.       break;
  826.  
  827.    case PIPE_QUERY_PIPELINE_STATISTICS:
  828.       trace_dump_struct_begin("pipe_query_data_pipeline_statistics");
  829.       trace_dump_member(uint, &result->pipeline_statistics, ia_vertices);
  830.       trace_dump_member(uint, &result->pipeline_statistics, ia_primitives);
  831.       trace_dump_member(uint, &result->pipeline_statistics, vs_invocations);
  832.       trace_dump_member(uint, &result->pipeline_statistics, gs_invocations);
  833.       trace_dump_member(uint, &result->pipeline_statistics, gs_primitives);
  834.       trace_dump_member(uint, &result->pipeline_statistics, c_invocations);
  835.       trace_dump_member(uint, &result->pipeline_statistics, c_primitives);
  836.       trace_dump_member(uint, &result->pipeline_statistics, ps_invocations);
  837.       trace_dump_member(uint, &result->pipeline_statistics, hs_invocations);
  838.       trace_dump_member(uint, &result->pipeline_statistics, ds_invocations);
  839.       trace_dump_member(uint, &result->pipeline_statistics, cs_invocations);
  840.       trace_dump_struct_end();
  841.       break;
  842.  
  843.    default:
  844.       assert(query_type >= PIPE_QUERY_DRIVER_SPECIFIC);
  845.       trace_dump_uint(result->u64);
  846.       break;
  847.    }
  848. }
  849.