Path: blob/21.2-virgl/src/gallium/auxiliary/driver_trace/tr_dump_state.c
4565 views
/**************************************************************************1*2* Copyright 2008 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/262728#include "pipe/p_compiler.h"29#include "util/u_memory.h"30#include "util/format/u_format.h"31#include "tgsi/tgsi_dump.h"3233#include "tr_dump.h"34#include "tr_dump_defines.h"35#include "tr_dump_state.h"363738void trace_dump_resource_template(const struct pipe_resource *templat)39{40if (!trace_dumping_enabled_locked())41return;4243if (!templat) {44trace_dump_null();45return;46}4748trace_dump_struct_begin("pipe_resource");4950trace_dump_member(int, templat, target);51trace_dump_member(format, templat, format);5253trace_dump_member_begin("width");54trace_dump_uint(templat->width0);55trace_dump_member_end();5657trace_dump_member_begin("height");58trace_dump_uint(templat->height0);59trace_dump_member_end();6061trace_dump_member_begin("depth");62trace_dump_uint(templat->depth0);63trace_dump_member_end();6465trace_dump_member_begin("array_size");66trace_dump_uint(templat->array_size);67trace_dump_member_end();6869trace_dump_member(uint, templat, last_level);70trace_dump_member(uint, templat, nr_samples);71trace_dump_member(uint, templat, nr_storage_samples);72trace_dump_member(uint, templat, usage);73trace_dump_member(uint, templat, bind);74trace_dump_member(uint, templat, flags);7576trace_dump_struct_end();77}787980void trace_dump_box(const struct pipe_box *box)81{82if (!trace_dumping_enabled_locked())83return;8485if (!box) {86trace_dump_null();87return;88}8990trace_dump_struct_begin("pipe_box");9192trace_dump_member(int, box, x);93trace_dump_member(int, box, y);94trace_dump_member(int, box, z);95trace_dump_member(int, box, width);96trace_dump_member(int, box, height);97trace_dump_member(int, box, depth);9899trace_dump_struct_end();100}101102103void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state)104{105if (!trace_dumping_enabled_locked())106return;107108if (!state) {109trace_dump_null();110return;111}112113trace_dump_struct_begin("pipe_rasterizer_state");114115trace_dump_member(bool, state, flatshade);116trace_dump_member(bool, state, light_twoside);117trace_dump_member(bool, state, clamp_vertex_color);118trace_dump_member(bool, state, clamp_fragment_color);119trace_dump_member(uint, state, front_ccw);120trace_dump_member(uint, state, cull_face);121trace_dump_member(uint, state, fill_front);122trace_dump_member(uint, state, fill_back);123trace_dump_member(bool, state, offset_point);124trace_dump_member(bool, state, offset_line);125trace_dump_member(bool, state, offset_tri);126trace_dump_member(bool, state, scissor);127trace_dump_member(bool, state, poly_smooth);128trace_dump_member(bool, state, poly_stipple_enable);129trace_dump_member(bool, state, point_smooth);130trace_dump_member(bool, state, sprite_coord_mode);131trace_dump_member(bool, state, point_quad_rasterization);132trace_dump_member(bool, state, point_size_per_vertex);133trace_dump_member(bool, state, multisample);134trace_dump_member(bool, state, line_smooth);135trace_dump_member(bool, state, line_stipple_enable);136trace_dump_member(bool, state, line_last_pixel);137138trace_dump_member(bool, state, flatshade_first);139140trace_dump_member(bool, state, half_pixel_center);141trace_dump_member(bool, state, bottom_edge_rule);142143trace_dump_member(bool, state, rasterizer_discard);144145trace_dump_member(bool, state, depth_clip_near);146trace_dump_member(bool, state, depth_clip_far);147148trace_dump_member(bool, state, clip_halfz);149150trace_dump_member(uint, state, clip_plane_enable);151152trace_dump_member(uint, state, line_stipple_factor);153trace_dump_member(uint, state, line_stipple_pattern);154155trace_dump_member(uint, state, sprite_coord_enable);156157trace_dump_member(float, state, line_width);158trace_dump_member(float, state, point_size);159trace_dump_member(float, state, offset_units);160trace_dump_member(float, state, offset_scale);161trace_dump_member(float, state, offset_clamp);162163trace_dump_struct_end();164}165166167void trace_dump_poly_stipple(const struct pipe_poly_stipple *state)168{169if (!trace_dumping_enabled_locked())170return;171172if (!state) {173trace_dump_null();174return;175}176177trace_dump_struct_begin("pipe_poly_stipple");178179trace_dump_member_begin("stipple");180trace_dump_array(uint,181state->stipple,182ARRAY_SIZE(state->stipple));183trace_dump_member_end();184185trace_dump_struct_end();186}187188189void trace_dump_viewport_state(const struct pipe_viewport_state *state)190{191if (!trace_dumping_enabled_locked())192return;193194if (!state) {195trace_dump_null();196return;197}198199trace_dump_struct_begin("pipe_viewport_state");200201trace_dump_member_array(float, state, scale);202trace_dump_member_array(float, state, translate);203204trace_dump_struct_end();205}206207208void trace_dump_scissor_state(const struct pipe_scissor_state *state)209{210if (!trace_dumping_enabled_locked())211return;212213if (!state) {214trace_dump_null();215return;216}217218trace_dump_struct_begin("pipe_scissor_state");219220trace_dump_member(uint, state, minx);221trace_dump_member(uint, state, miny);222trace_dump_member(uint, state, maxx);223trace_dump_member(uint, state, maxy);224225trace_dump_struct_end();226}227228229void trace_dump_clip_state(const struct pipe_clip_state *state)230{231unsigned i;232233if (!trace_dumping_enabled_locked())234return;235236if (!state) {237trace_dump_null();238return;239}240241trace_dump_struct_begin("pipe_clip_state");242243trace_dump_member_begin("ucp");244trace_dump_array_begin();245for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) {246trace_dump_elem_begin();247trace_dump_array(float, state->ucp[i], 4);248trace_dump_elem_end();249}250trace_dump_array_end();251trace_dump_member_end();252253trace_dump_struct_end();254}255256257void trace_dump_shader_state(const struct pipe_shader_state *state)258{259unsigned i;260261if (!trace_dumping_enabled_locked())262return;263264if (!state) {265trace_dump_null();266return;267}268269270trace_dump_struct_begin("pipe_shader_state");271272trace_dump_member_begin("tokens");273if (state->tokens) {274static char str[64 * 1024];275tgsi_dump_str(state->tokens, 0, str, sizeof(str));276trace_dump_string(str);277} else {278trace_dump_null();279}280trace_dump_member_end();281282trace_dump_member_begin("stream_output");283trace_dump_struct_begin("pipe_stream_output_info");284trace_dump_member(uint, &state->stream_output, num_outputs);285trace_dump_member_array(uint, &state->stream_output, stride);286trace_dump_member_begin("output");287trace_dump_array_begin();288for(i = 0; i < state->stream_output.num_outputs; ++i) {289trace_dump_elem_begin();290trace_dump_struct_begin(""); /* anonymous */291trace_dump_member(uint, &state->stream_output.output[i], register_index);292trace_dump_member(uint, &state->stream_output.output[i], start_component);293trace_dump_member(uint, &state->stream_output.output[i], num_components);294trace_dump_member(uint, &state->stream_output.output[i], output_buffer);295trace_dump_member(uint, &state->stream_output.output[i], dst_offset);296trace_dump_member(uint, &state->stream_output.output[i], stream);297trace_dump_struct_end();298trace_dump_elem_end();299}300trace_dump_array_end();301trace_dump_member_end(); // output302trace_dump_struct_end();303trace_dump_member_end(); // stream_output304305trace_dump_struct_end();306}307308309void trace_dump_compute_state(const struct pipe_compute_state *state)310{311if (!trace_dumping_enabled_locked())312return;313314if (!state) {315trace_dump_null();316return;317}318319trace_dump_struct_begin("pipe_compute_state");320321trace_dump_member(uint, state, ir_type);322323trace_dump_member_begin("prog");324if (state->prog && state->ir_type == PIPE_SHADER_IR_TGSI) {325static char str[64 * 1024];326tgsi_dump_str(state->prog, 0, str, sizeof(str));327trace_dump_string(str);328} else {329trace_dump_null();330}331trace_dump_member_end();332333trace_dump_member(uint, state, req_local_mem);334trace_dump_member(uint, state, req_private_mem);335trace_dump_member(uint, state, req_input_mem);336337trace_dump_struct_end();338}339340341void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_state *state)342{343unsigned i;344345if (!trace_dumping_enabled_locked())346return;347348if (!state) {349trace_dump_null();350return;351}352353trace_dump_struct_begin("pipe_depth_stencil_alpha_state");354355trace_dump_member(bool, state, depth_enabled);356trace_dump_member(bool, state, depth_writemask);357trace_dump_member(uint, state, depth_func);358359trace_dump_member_begin("stencil");360trace_dump_array_begin();361for(i = 0; i < ARRAY_SIZE(state->stencil); ++i) {362trace_dump_elem_begin();363trace_dump_struct_begin("pipe_stencil_state");364trace_dump_member(bool, &state->stencil[i], enabled);365trace_dump_member(uint, &state->stencil[i], func);366trace_dump_member(uint, &state->stencil[i], fail_op);367trace_dump_member(uint, &state->stencil[i], zpass_op);368trace_dump_member(uint, &state->stencil[i], zfail_op);369trace_dump_member(uint, &state->stencil[i], valuemask);370trace_dump_member(uint, &state->stencil[i], writemask);371trace_dump_struct_end();372trace_dump_elem_end();373}374trace_dump_array_end();375trace_dump_member_end();376377trace_dump_member(bool, state, alpha_enabled);378trace_dump_member(uint, state, alpha_func);379trace_dump_member(float, state, alpha_ref_value);380381trace_dump_struct_end();382}383384static void trace_dump_rt_blend_state(const struct pipe_rt_blend_state *state)385{386trace_dump_struct_begin("pipe_rt_blend_state");387388trace_dump_member(uint, state, blend_enable);389390trace_dump_member(uint, state, rgb_func);391trace_dump_member(uint, state, rgb_src_factor);392trace_dump_member(uint, state, rgb_dst_factor);393394trace_dump_member(uint, state, alpha_func);395trace_dump_member(uint, state, alpha_src_factor);396trace_dump_member(uint, state, alpha_dst_factor);397398trace_dump_member(uint, state, colormask);399400trace_dump_struct_end();401}402403void trace_dump_blend_state(const struct pipe_blend_state *state)404{405unsigned valid_entries = 1;406407if (!trace_dumping_enabled_locked())408return;409410if (!state) {411trace_dump_null();412return;413}414415trace_dump_struct_begin("pipe_blend_state");416417trace_dump_member(bool, state, independent_blend_enable);418trace_dump_member(bool, state, logicop_enable);419trace_dump_member(uint, state, logicop_func);420trace_dump_member(bool, state, dither);421trace_dump_member(bool, state, alpha_to_coverage);422trace_dump_member(bool, state, alpha_to_coverage_dither);423trace_dump_member(bool, state, alpha_to_one);424trace_dump_member(uint, state, max_rt);425trace_dump_member(uint, state, advanced_blend_func);426427trace_dump_member_begin("rt");428if (state->independent_blend_enable)429valid_entries = state->max_rt + 1;430trace_dump_struct_array(rt_blend_state, state->rt, valid_entries);431trace_dump_member_end();432433trace_dump_struct_end();434}435436437void trace_dump_blend_color(const struct pipe_blend_color *state)438{439if (!trace_dumping_enabled_locked())440return;441442if (!state) {443trace_dump_null();444return;445}446447trace_dump_struct_begin("pipe_blend_color");448449trace_dump_member_array(float, state, color);450451trace_dump_struct_end();452}453454void trace_dump_stencil_ref(const struct pipe_stencil_ref *state)455{456if (!trace_dumping_enabled_locked())457return;458459if (!state) {460trace_dump_null();461return;462}463464trace_dump_struct_begin("pipe_stencil_ref");465466trace_dump_member_array(uint, state, ref_value);467468trace_dump_struct_end();469}470471void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state)472{473if (!trace_dumping_enabled_locked())474return;475476trace_dump_struct_begin("pipe_framebuffer_state");477478trace_dump_member(uint, state, width);479trace_dump_member(uint, state, height);480trace_dump_member(uint, state, samples);481trace_dump_member(uint, state, layers);482trace_dump_member(uint, state, nr_cbufs);483trace_dump_member_array(ptr, state, cbufs);484trace_dump_member(ptr, state, zsbuf);485486trace_dump_struct_end();487}488489void trace_dump_framebuffer_state_deep(const struct pipe_framebuffer_state *state)490{491if (!trace_dumping_enabled_locked())492return;493494trace_dump_struct_begin("pipe_framebuffer_state");495496trace_dump_member(uint, state, width);497trace_dump_member(uint, state, height);498trace_dump_member(uint, state, samples);499trace_dump_member(uint, state, layers);500trace_dump_member(uint, state, nr_cbufs);501trace_dump_member_array(surface, state, cbufs);502trace_dump_member(surface, state, zsbuf);503504trace_dump_struct_end();505}506507508void trace_dump_sampler_state(const struct pipe_sampler_state *state)509{510if (!trace_dumping_enabled_locked())511return;512513if (!state) {514trace_dump_null();515return;516}517518trace_dump_struct_begin("pipe_sampler_state");519520trace_dump_member(uint, state, wrap_s);521trace_dump_member(uint, state, wrap_t);522trace_dump_member(uint, state, wrap_r);523trace_dump_member(uint, state, min_img_filter);524trace_dump_member(uint, state, min_mip_filter);525trace_dump_member(uint, state, mag_img_filter);526trace_dump_member(uint, state, compare_mode);527trace_dump_member(uint, state, compare_func);528trace_dump_member(bool, state, normalized_coords);529trace_dump_member(uint, state, max_anisotropy);530trace_dump_member(bool, state, seamless_cube_map);531trace_dump_member(float, state, lod_bias);532trace_dump_member(float, state, min_lod);533trace_dump_member(float, state, max_lod);534trace_dump_member_array(float, state, border_color.f);535536trace_dump_struct_end();537}538539540void trace_dump_sampler_view_template(const struct pipe_sampler_view *state,541enum pipe_texture_target target)542{543if (!trace_dumping_enabled_locked())544return;545546if (!state) {547trace_dump_null();548return;549}550551trace_dump_struct_begin("pipe_sampler_view");552553trace_dump_member(format, state, format);554trace_dump_member(ptr, state, texture);555556trace_dump_member_begin("u");557trace_dump_struct_begin(""); /* anonymous */558if (target == PIPE_BUFFER) {559trace_dump_member_begin("buf");560trace_dump_struct_begin(""); /* anonymous */561trace_dump_member(uint, &state->u.buf, offset);562trace_dump_member(uint, &state->u.buf, size);563trace_dump_struct_end(); /* anonymous */564trace_dump_member_end(); /* buf */565} else {566trace_dump_member_begin("tex");567trace_dump_struct_begin(""); /* anonymous */568trace_dump_member(uint, &state->u.tex, first_layer);569trace_dump_member(uint, &state->u.tex, last_layer);570trace_dump_member(uint, &state->u.tex, first_level);571trace_dump_member(uint, &state->u.tex, last_level);572trace_dump_struct_end(); /* anonymous */573trace_dump_member_end(); /* tex */574}575trace_dump_struct_end(); /* anonymous */576trace_dump_member_end(); /* u */577578trace_dump_member(uint, state, swizzle_r);579trace_dump_member(uint, state, swizzle_g);580trace_dump_member(uint, state, swizzle_b);581trace_dump_member(uint, state, swizzle_a);582583trace_dump_struct_end();584}585586587void trace_dump_surface(const struct pipe_surface *surface)588{589trace_dump_surface_template(surface, surface ? surface->texture->target : 0);590}591592593void trace_dump_surface_template(const struct pipe_surface *state,594enum pipe_texture_target target)595{596if (!trace_dumping_enabled_locked())597return;598599if (!state) {600trace_dump_null();601return;602}603604trace_dump_struct_begin("pipe_surface");605606trace_dump_member(format, state, format);607trace_dump_member(ptr, state, texture);608trace_dump_member(uint, state, width);609trace_dump_member(uint, state, height);610611trace_dump_member_begin("u");612trace_dump_struct_begin(""); /* anonymous */613if (target == PIPE_BUFFER) {614trace_dump_member_begin("buf");615trace_dump_struct_begin(""); /* anonymous */616trace_dump_member(uint, &state->u.buf, first_element);617trace_dump_member(uint, &state->u.buf, last_element);618trace_dump_struct_end(); /* anonymous */619trace_dump_member_end(); /* buf */620} else {621trace_dump_member_begin("tex");622trace_dump_struct_begin(""); /* anonymous */623trace_dump_member(uint, &state->u.tex, level);624trace_dump_member(uint, &state->u.tex, first_layer);625trace_dump_member(uint, &state->u.tex, last_layer);626trace_dump_struct_end(); /* anonymous */627trace_dump_member_end(); /* tex */628}629trace_dump_struct_end(); /* anonymous */630trace_dump_member_end(); /* u */631632trace_dump_struct_end();633}634635636void trace_dump_transfer(const struct pipe_transfer *state)637{638if (!trace_dumping_enabled_locked())639return;640641if (!state) {642trace_dump_null();643return;644}645646trace_dump_struct_begin("pipe_transfer");647648trace_dump_member(uint, state, box.x);649trace_dump_member(uint, state, box.y);650trace_dump_member(uint, state, box.z);651trace_dump_member(uint, state, box.width);652trace_dump_member(uint, state, box.height);653trace_dump_member(uint, state, box.depth);654655trace_dump_member(uint, state, stride);656trace_dump_member(uint, state, layer_stride);657trace_dump_member(uint, state, usage);658659trace_dump_member(ptr, state, resource);660661trace_dump_struct_end();662}663664665void trace_dump_vertex_buffer(const struct pipe_vertex_buffer *state)666{667if (!trace_dumping_enabled_locked())668return;669670if (!state) {671trace_dump_null();672return;673}674675trace_dump_struct_begin("pipe_vertex_buffer");676677trace_dump_member(uint, state, stride);678trace_dump_member(bool, state, is_user_buffer);679trace_dump_member(uint, state, buffer_offset);680trace_dump_member(ptr, state, buffer.resource);681682trace_dump_struct_end();683}684685686void trace_dump_vertex_element(const struct pipe_vertex_element *state)687{688if (!trace_dumping_enabled_locked())689return;690691if (!state) {692trace_dump_null();693return;694}695696trace_dump_struct_begin("pipe_vertex_element");697698trace_dump_member(uint, state, src_offset);699700trace_dump_member(uint, state, vertex_buffer_index);701702trace_dump_member(format, state, src_format);703704trace_dump_struct_end();705}706707708void trace_dump_constant_buffer(const struct pipe_constant_buffer *state)709{710if (!trace_dumping_enabled_locked())711return;712713if (!state) {714trace_dump_null();715return;716}717718trace_dump_struct_begin("pipe_constant_buffer");719trace_dump_member(ptr, state, buffer);720trace_dump_member(uint, state, buffer_offset);721trace_dump_member(uint, state, buffer_size);722trace_dump_struct_end();723}724725726void trace_dump_shader_buffer(const struct pipe_shader_buffer *state)727{728if (!trace_dumping_enabled_locked())729return;730731if(!state) {732trace_dump_null();733return;734}735736trace_dump_struct_begin("pipe_shader_buffer");737trace_dump_member(ptr, state, buffer);738trace_dump_member(uint, state, buffer_offset);739trace_dump_member(uint, state, buffer_size);740trace_dump_struct_end();741}742743744void trace_dump_image_view(const struct pipe_image_view *state)745{746if (!trace_dumping_enabled_locked())747return;748749if (!state || !state->resource) {750trace_dump_null();751return;752}753754trace_dump_struct_begin("pipe_image_view");755trace_dump_member(ptr, state, resource);756trace_dump_member(uint, state, format);757trace_dump_member(uint, state, access);758759trace_dump_member_begin("u");760trace_dump_struct_begin(""); /* anonymous */761if (state->resource->target == PIPE_BUFFER) {762trace_dump_member_begin("buf");763trace_dump_struct_begin(""); /* anonymous */764trace_dump_member(uint, &state->u.buf, offset);765trace_dump_member(uint, &state->u.buf, size);766trace_dump_struct_end(); /* anonymous */767trace_dump_member_end(); /* buf */768} else {769trace_dump_member_begin("tex");770trace_dump_struct_begin(""); /* anonymous */771trace_dump_member(uint, &state->u.tex, first_layer);772trace_dump_member(uint, &state->u.tex, last_layer);773trace_dump_member(uint, &state->u.tex, level);774trace_dump_struct_end(); /* anonymous */775trace_dump_member_end(); /* tex */776}777trace_dump_struct_end(); /* anonymous */778trace_dump_member_end(); /* u */779780trace_dump_struct_end();781}782783784void trace_dump_memory_info(const struct pipe_memory_info *state)785{786if (!trace_dumping_enabled_locked())787return;788789if (!state) {790trace_dump_null();791return;792}793794trace_dump_struct_begin("pipe_memory_info");795trace_dump_member(uint, state, total_device_memory);796trace_dump_member(uint, state, avail_device_memory);797trace_dump_member(uint, state, total_staging_memory);798trace_dump_member(uint, state, avail_staging_memory);799trace_dump_member(uint, state, device_memory_evicted);800trace_dump_member(uint, state, nr_device_memory_evictions);801trace_dump_struct_end();802}803804void trace_dump_draw_info(const struct pipe_draw_info *state)805{806if (!trace_dumping_enabled_locked())807return;808809if (!state) {810trace_dump_null();811return;812}813814trace_dump_struct_begin("pipe_draw_info");815816trace_dump_member(uint, state, index_size);817trace_dump_member(uint, state, has_user_indices);818trace_dump_member(uint, state, mode);819trace_dump_member(uint, state, start_instance);820trace_dump_member(uint, state, instance_count);821822trace_dump_member(uint, state, vertices_per_patch);823824trace_dump_member(uint, state, min_index);825trace_dump_member(uint, state, max_index);826827trace_dump_member(bool, state, primitive_restart);828trace_dump_member(uint, state, restart_index);829830trace_dump_member(ptr, state, index.resource);831trace_dump_struct_end();832}833834void trace_dump_draw_start_count(const struct pipe_draw_start_count_bias *state)835{836if (!trace_dumping_enabled_locked())837return;838839trace_dump_struct_begin("pipe_draw_start_count_bias");840trace_dump_member(uint, state, start);841trace_dump_member(uint, state, count);842trace_dump_member(int, state, index_bias);843trace_dump_struct_end();844}845846void trace_dump_draw_indirect_info(const struct pipe_draw_indirect_info *state)847{848if (!trace_dumping_enabled_locked())849return;850851if (!state) {852trace_dump_null();853return;854}855856trace_dump_struct_begin("pipe_draw_indirect_info");857trace_dump_member(uint, state, offset);858trace_dump_member(uint, state, stride);859trace_dump_member(uint, state, draw_count);860trace_dump_member(uint, state, indirect_draw_count_offset);861trace_dump_member(ptr, state, buffer);862trace_dump_member(ptr, state, indirect_draw_count);863trace_dump_member(ptr, state, count_from_stream_output);864trace_dump_struct_end();865}866867void trace_dump_blit_info(const struct pipe_blit_info *info)868{869char mask[7];870871if (!trace_dumping_enabled_locked())872return;873874if (!info) {875trace_dump_null();876return;877}878879trace_dump_struct_begin("pipe_blit_info");880881trace_dump_member_begin("dst");882trace_dump_struct_begin("dst");883trace_dump_member(ptr, &info->dst, resource);884trace_dump_member(uint, &info->dst, level);885trace_dump_member(format, &info->dst, format);886trace_dump_member_begin("box");887trace_dump_box(&info->dst.box);888trace_dump_member_end();889trace_dump_struct_end();890trace_dump_member_end();891892trace_dump_member_begin("src");893trace_dump_struct_begin("src");894trace_dump_member(ptr, &info->src, resource);895trace_dump_member(uint, &info->src, level);896trace_dump_member(format, &info->src, format);897trace_dump_member_begin("box");898trace_dump_box(&info->src.box);899trace_dump_member_end();900trace_dump_struct_end();901trace_dump_member_end();902903mask[0] = (info->mask & PIPE_MASK_R) ? 'R' : '-';904mask[1] = (info->mask & PIPE_MASK_G) ? 'G' : '-';905mask[2] = (info->mask & PIPE_MASK_B) ? 'B' : '-';906mask[3] = (info->mask & PIPE_MASK_A) ? 'A' : '-';907mask[4] = (info->mask & PIPE_MASK_Z) ? 'Z' : '-';908mask[5] = (info->mask & PIPE_MASK_S) ? 'S' : '-';909mask[6] = 0;910911trace_dump_member_begin("mask");912trace_dump_string(mask);913trace_dump_member_end();914trace_dump_member(uint, info, filter);915916trace_dump_member(bool, info, scissor_enable);917trace_dump_member_begin("scissor");918trace_dump_scissor_state(&info->scissor);919trace_dump_member_end();920921trace_dump_struct_end();922}923924void925trace_dump_query_result(unsigned query_type,926const union pipe_query_result *result)927{928if (!trace_dumping_enabled_locked())929return;930931if (!result) {932trace_dump_null();933return;934}935936switch (query_type) {937case PIPE_QUERY_OCCLUSION_PREDICATE:938case PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE:939case PIPE_QUERY_SO_OVERFLOW_PREDICATE:940case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:941case PIPE_QUERY_GPU_FINISHED:942trace_dump_bool(result->b);943break;944945case PIPE_QUERY_OCCLUSION_COUNTER:946case PIPE_QUERY_TIMESTAMP:947case PIPE_QUERY_TIME_ELAPSED:948case PIPE_QUERY_PRIMITIVES_GENERATED:949case PIPE_QUERY_PRIMITIVES_EMITTED:950trace_dump_uint(result->u64);951break;952953case PIPE_QUERY_SO_STATISTICS:954trace_dump_struct_begin("pipe_query_data_so_statistics");955trace_dump_member(uint, &result->so_statistics, num_primitives_written);956trace_dump_member(uint, &result->so_statistics, primitives_storage_needed);957trace_dump_struct_end();958break;959960case PIPE_QUERY_TIMESTAMP_DISJOINT:961trace_dump_struct_begin("pipe_query_data_timestamp_disjoint");962trace_dump_member(uint, &result->timestamp_disjoint, frequency);963trace_dump_member(bool, &result->timestamp_disjoint, disjoint);964trace_dump_struct_end();965break;966967case PIPE_QUERY_PIPELINE_STATISTICS:968trace_dump_struct_begin("pipe_query_data_pipeline_statistics");969trace_dump_member(uint, &result->pipeline_statistics, ia_vertices);970trace_dump_member(uint, &result->pipeline_statistics, ia_primitives);971trace_dump_member(uint, &result->pipeline_statistics, vs_invocations);972trace_dump_member(uint, &result->pipeline_statistics, gs_invocations);973trace_dump_member(uint, &result->pipeline_statistics, gs_primitives);974trace_dump_member(uint, &result->pipeline_statistics, c_invocations);975trace_dump_member(uint, &result->pipeline_statistics, c_primitives);976trace_dump_member(uint, &result->pipeline_statistics, ps_invocations);977trace_dump_member(uint, &result->pipeline_statistics, hs_invocations);978trace_dump_member(uint, &result->pipeline_statistics, ds_invocations);979trace_dump_member(uint, &result->pipeline_statistics, cs_invocations);980trace_dump_struct_end();981break;982983default:984assert(query_type >= PIPE_QUERY_DRIVER_SPECIFIC);985trace_dump_uint(result->u64);986break;987}988}989990void trace_dump_grid_info(const struct pipe_grid_info *state)991{992if (!trace_dumping_enabled_locked())993return;994995if (!state) {996trace_dump_null();997return;998}9991000trace_dump_struct_begin("pipe_grid_info");10011002trace_dump_member(uint, state, pc);1003trace_dump_member(ptr, state, input);10041005trace_dump_member_begin("block");1006trace_dump_array(uint, state->block, ARRAY_SIZE(state->block));1007trace_dump_member_end();10081009trace_dump_member_begin("grid");1010trace_dump_array(uint, state->grid, ARRAY_SIZE(state->grid));1011trace_dump_member_end();10121013trace_dump_member(ptr, state, indirect);1014trace_dump_member(uint, state, indirect_offset);10151016trace_dump_struct_end();1017}1018101910201021