Path: blob/21.2-virgl/src/gallium/auxiliary/util/u_dump_state.c
4561 views
/**************************************************************************1*2* Copyright 2008-2010 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/u_string.h"31#include "util/format/u_format.h"32#include "tgsi/tgsi_dump.h"3334#include <inttypes.h>3536#include "u_dump.h"373839/*40* Dump primitives41*/4243static inline void44util_stream_writef(FILE *stream, const char *format, ...)45{46static char buf[1024];47unsigned len;48va_list ap;49va_start(ap, format);50len = vsnprintf(buf, sizeof(buf), format, ap);51va_end(ap);52fwrite(buf, len, 1, stream);53}5455static void56util_dump_bool(FILE *stream, int value)57{58util_stream_writef(stream, "%c", value ? '1' : '0');59}6061static void62util_dump_int(FILE *stream, long long int value)63{64util_stream_writef(stream, "%lli", value);65}6667static void68util_dump_uint(FILE *stream, long long unsigned value)69{70util_stream_writef(stream, "%llu", value);71}7273static void74util_dump_float(FILE *stream, double value)75{76util_stream_writef(stream, "%g", value);77}7879void80util_dump_ns(FILE *f, uint64_t time)81{82uint64_t secs = time / (1000*1000*1000);83unsigned usecs = (time % (1000*1000*1000)) / 1000;84fprintf(f, "%"PRIu64".%06us", secs, usecs);85}8687static void88util_dump_string(FILE *stream, const char *str)89{90fputs("\"", stream);91fputs(str, stream);92fputs("\"", stream);93}9495static void96util_dump_enum(FILE *stream, const char *value)97{98fputs(value, stream);99}100101static void102util_dump_array_begin(FILE *stream)103{104fputs("{", stream);105}106107static void108util_dump_array_end(FILE *stream)109{110fputs("}", stream);111}112113static void114util_dump_elem_begin(UNUSED FILE *stream)115{116}117118static void119util_dump_elem_end(FILE *stream)120{121fputs(", ", stream);122}123124static void125util_dump_struct_begin(FILE *stream, UNUSED const char *name)126{127fputs("{", stream);128}129130static void131util_dump_struct_end(FILE *stream)132{133fputs("}", stream);134}135136static void137util_dump_member_begin(FILE *stream, const char *name)138{139util_stream_writef(stream, "%s = ", name);140}141142static void143util_dump_member_end(FILE *stream)144{145fputs(", ", stream);146}147148static void149util_dump_null(FILE *stream)150{151fputs("NULL", stream);152}153154void155util_dump_ptr(FILE *stream, const void *value)156{157if(value)158util_stream_writef(stream, "%p", value);159else160util_dump_null(stream);161}162163164/*165* Code saving macros.166*/167168#define util_dump_arg(_stream, _type, _arg) \169do { \170util_dump_arg_begin(_stream, #_arg); \171util_dump_##_type(_stream, _arg); \172util_dump_arg_end(_stream); \173} while(0)174175#define util_dump_ret(_stream, _type, _arg) \176do { \177util_dump_ret_begin(_stream); \178util_dump_##_type(_stream, _arg); \179util_dump_ret_end(_stream); \180} while(0)181182#define util_dump_array(_stream, _type, _obj, _size) \183do { \184size_t idx; \185util_dump_array_begin(_stream); \186for(idx = 0; idx < (_size); ++idx) { \187util_dump_elem_begin(_stream); \188util_dump_##_type(_stream, (_obj)[idx]); \189util_dump_elem_end(_stream); \190} \191util_dump_array_end(_stream); \192} while(0)193194#define util_dump_struct_array(_stream, _type, _obj, _size) \195do { \196size_t idx; \197util_dump_array_begin(_stream); \198for(idx = 0; idx < (_size); ++idx) { \199util_dump_elem_begin(_stream); \200util_dump_##_type(_stream, &(_obj)[idx]); \201util_dump_elem_end(_stream); \202} \203util_dump_array_end(_stream); \204} while(0)205206#define util_dump_member(_stream, _type, _obj, _member) \207do { \208util_dump_member_begin(_stream, #_member); \209util_dump_##_type(_stream, (_obj)->_member); \210util_dump_member_end(_stream); \211} while(0)212213#define util_dump_arg_array(_stream, _type, _arg, _size) \214do { \215util_dump_arg_begin(_stream, #_arg); \216util_dump_array(_stream, _type, _arg, _size); \217util_dump_arg_end(_stream); \218} while(0)219220#define util_dump_member_array(_stream, _type, _obj, _member) \221do { \222util_dump_member_begin(_stream, #_member); \223util_dump_array(_stream, _type, (_obj)->_member, sizeof((_obj)->_member)/sizeof((_obj)->_member[0])); \224util_dump_member_end(_stream); \225} while(0)226227228229/*230* Wrappers for enum -> string dumpers.231*/232233234static void235util_dump_format(FILE *stream, enum pipe_format format)236{237util_dump_enum(stream, util_format_name(format));238}239240241static void242util_dump_enum_blend_factor(FILE *stream, unsigned value)243{244util_dump_enum(stream, util_str_blend_factor(value, TRUE));245}246247static void248util_dump_enum_blend_func(FILE *stream, unsigned value)249{250util_dump_enum(stream, util_str_blend_func(value, TRUE));251}252253static void254util_dump_enum_func(FILE *stream, unsigned value)255{256util_dump_enum(stream, util_str_func(value, TRUE));257}258259static void260util_dump_enum_prim_mode(FILE *stream, unsigned value)261{262util_dump_enum(stream, util_str_prim_mode(value, TRUE));263}264265static void266util_dump_enum_tex_target(FILE *stream, unsigned value)267{268util_dump_enum(stream, util_str_tex_target(value, TRUE));269}270271static void272util_dump_enum_tex_filter(FILE *stream, unsigned value)273{274util_dump_enum(stream, util_str_tex_filter(value, TRUE));275}276277static void278util_dump_enum_tex_mipfilter(FILE *stream, unsigned value)279{280util_dump_enum(stream, util_str_tex_mipfilter(value, TRUE));281}282283static void284util_dump_enum_tex_wrap(FILE *stream, unsigned value)285{286util_dump_enum(stream, util_str_tex_wrap(value, TRUE));287}288289static void290util_dump_enum_stencil_op(FILE *stream, unsigned value)291{292util_dump_enum(stream, util_str_stencil_op(value, TRUE));293}294295296/*297* Public functions298*/299300301void302util_dump_resource(FILE *stream, const struct pipe_resource *state)303{304if (!state) {305util_dump_null(stream);306return;307}308309util_dump_struct_begin(stream, "pipe_resource");310311util_dump_member(stream, enum_tex_target, state, target);312util_dump_member(stream, format, state, format);313314util_dump_member(stream, uint, state, width0);315util_dump_member(stream, uint, state, height0);316util_dump_member(stream, uint, state, depth0);317util_dump_member(stream, uint, state, array_size);318319util_dump_member(stream, uint, state, last_level);320util_dump_member(stream, uint, state, nr_samples);321util_dump_member(stream, uint, state, nr_storage_samples);322util_dump_member(stream, uint, state, usage);323util_dump_member(stream, uint, state, bind);324util_dump_member(stream, uint, state, flags);325326util_dump_struct_end(stream);327}328329330void331util_dump_rasterizer_state(FILE *stream, const struct pipe_rasterizer_state *state)332{333if (!state) {334util_dump_null(stream);335return;336}337338util_dump_struct_begin(stream, "pipe_rasterizer_state");339340util_dump_member(stream, bool, state, flatshade);341util_dump_member(stream, bool, state, light_twoside);342util_dump_member(stream, bool, state, clamp_vertex_color);343util_dump_member(stream, bool, state, clamp_fragment_color);344util_dump_member(stream, uint, state, front_ccw);345util_dump_member(stream, uint, state, cull_face);346util_dump_member(stream, uint, state, fill_front);347util_dump_member(stream, uint, state, fill_back);348util_dump_member(stream, bool, state, offset_point);349util_dump_member(stream, bool, state, offset_line);350util_dump_member(stream, bool, state, offset_tri);351util_dump_member(stream, bool, state, scissor);352util_dump_member(stream, bool, state, poly_smooth);353util_dump_member(stream, bool, state, poly_stipple_enable);354util_dump_member(stream, bool, state, point_smooth);355util_dump_member(stream, uint, state, sprite_coord_enable);356util_dump_member(stream, bool, state, sprite_coord_mode);357util_dump_member(stream, bool, state, point_quad_rasterization);358util_dump_member(stream, bool, state, point_tri_clip);359util_dump_member(stream, bool, state, point_size_per_vertex);360util_dump_member(stream, bool, state, multisample);361util_dump_member(stream, bool, state, line_smooth);362util_dump_member(stream, bool, state, line_stipple_enable);363util_dump_member(stream, uint, state, line_stipple_factor);364util_dump_member(stream, uint, state, line_stipple_pattern);365util_dump_member(stream, bool, state, line_last_pixel);366util_dump_member(stream, bool, state, flatshade_first);367util_dump_member(stream, bool, state, half_pixel_center);368util_dump_member(stream, bool, state, bottom_edge_rule);369util_dump_member(stream, bool, state, rasterizer_discard);370util_dump_member(stream, bool, state, depth_clip_near);371util_dump_member(stream, bool, state, depth_clip_far);372util_dump_member(stream, bool, state, clip_halfz);373util_dump_member(stream, uint, state, clip_plane_enable);374375util_dump_member(stream, float, state, line_width);376util_dump_member(stream, float, state, point_size);377util_dump_member(stream, float, state, offset_units);378util_dump_member(stream, float, state, offset_scale);379util_dump_member(stream, float, state, offset_clamp);380381util_dump_struct_end(stream);382}383384385void386util_dump_poly_stipple(FILE *stream, const struct pipe_poly_stipple *state)387{388if (!state) {389util_dump_null(stream);390return;391}392393util_dump_struct_begin(stream, "pipe_poly_stipple");394395util_dump_member_begin(stream, "stipple");396util_dump_member_array(stream, uint, state, stipple);397util_dump_member_end(stream);398399util_dump_struct_end(stream);400}401402403void404util_dump_viewport_state(FILE *stream, const struct pipe_viewport_state *state)405{406if (!state) {407util_dump_null(stream);408return;409}410411util_dump_struct_begin(stream, "pipe_viewport_state");412413util_dump_member_array(stream, float, state, scale);414util_dump_member_array(stream, float, state, translate);415416util_dump_struct_end(stream);417}418419420void421util_dump_scissor_state(FILE *stream, const struct pipe_scissor_state *state)422{423if (!state) {424util_dump_null(stream);425return;426}427428util_dump_struct_begin(stream, "pipe_scissor_state");429430util_dump_member(stream, uint, state, minx);431util_dump_member(stream, uint, state, miny);432util_dump_member(stream, uint, state, maxx);433util_dump_member(stream, uint, state, maxy);434435util_dump_struct_end(stream);436}437438439void440util_dump_clip_state(FILE *stream, const struct pipe_clip_state *state)441{442unsigned i;443444if (!state) {445util_dump_null(stream);446return;447}448449util_dump_struct_begin(stream, "pipe_clip_state");450451util_dump_member_begin(stream, "ucp");452util_dump_array_begin(stream);453for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) {454util_dump_elem_begin(stream);455util_dump_array(stream, float, state->ucp[i], 4);456util_dump_elem_end(stream);457}458util_dump_array_end(stream);459util_dump_member_end(stream);460461util_dump_struct_end(stream);462}463464465void466util_dump_shader_state(FILE *stream, const struct pipe_shader_state *state)467{468unsigned i;469470if (!state) {471util_dump_null(stream);472return;473}474475util_dump_struct_begin(stream, "pipe_shader_state");476477if (state->type == PIPE_SHADER_IR_TGSI) {478util_dump_member_begin(stream, "tokens");479fprintf(stream, "\"\n");480tgsi_dump_to_file(state->tokens, 0, stream);481fprintf(stream, "\"");482util_dump_member_end(stream);483}484485if (state->stream_output.num_outputs) {486util_dump_member_begin(stream, "stream_output");487util_dump_struct_begin(stream, "pipe_stream_output_info");488util_dump_member(stream, uint, &state->stream_output, num_outputs);489util_dump_array(stream, uint, state->stream_output.stride,490ARRAY_SIZE(state->stream_output.stride));491util_dump_array_begin(stream);492for(i = 0; i < state->stream_output.num_outputs; ++i) {493util_dump_elem_begin(stream);494util_dump_struct_begin(stream, ""); /* anonymous */495util_dump_member(stream, uint, &state->stream_output.output[i], register_index);496util_dump_member(stream, uint, &state->stream_output.output[i], start_component);497util_dump_member(stream, uint, &state->stream_output.output[i], num_components);498util_dump_member(stream, uint, &state->stream_output.output[i], output_buffer);499util_dump_struct_end(stream);500util_dump_elem_end(stream);501}502util_dump_array_end(stream);503util_dump_struct_end(stream);504util_dump_member_end(stream);505}506507util_dump_struct_end(stream);508}509510511void512util_dump_depth_stencil_alpha_state(FILE *stream, const struct pipe_depth_stencil_alpha_state *state)513{514unsigned i;515516if (!state) {517util_dump_null(stream);518return;519}520521util_dump_struct_begin(stream, "pipe_depth_stencil_alpha_state");522523util_dump_member(stream, bool, state, depth_enabled);524if (state->depth_enabled) {525util_dump_member(stream, bool, state, depth_writemask);526util_dump_member(stream, enum_func, state, depth_func);527}528529util_dump_member_begin(stream, "stencil");530util_dump_array_begin(stream);531for(i = 0; i < ARRAY_SIZE(state->stencil); ++i) {532util_dump_elem_begin(stream);533util_dump_struct_begin(stream, "pipe_stencil_state");534util_dump_member(stream, bool, &state->stencil[i], enabled);535if (state->stencil[i].enabled) {536util_dump_member(stream, enum_func, &state->stencil[i], func);537util_dump_member(stream, enum_stencil_op,538&state->stencil[i], fail_op);539util_dump_member(stream, enum_stencil_op,540&state->stencil[i], zpass_op);541util_dump_member(stream, enum_stencil_op,542&state->stencil[i], zfail_op);543util_dump_member(stream, uint, &state->stencil[i], valuemask);544util_dump_member(stream, uint, &state->stencil[i], writemask);545}546util_dump_struct_end(stream);547util_dump_elem_end(stream);548}549util_dump_array_end(stream);550util_dump_member_end(stream);551552util_dump_member(stream, bool, state, alpha_enabled);553if (state->alpha_enabled) {554util_dump_member(stream, enum_func, state, alpha_func);555util_dump_member(stream, float, state, alpha_ref_value);556}557558util_dump_struct_end(stream);559}560561void562util_dump_rt_blend_state(FILE *stream, const struct pipe_rt_blend_state *state)563{564util_dump_struct_begin(stream, "pipe_rt_blend_state");565566util_dump_member(stream, uint, state, blend_enable);567if (state->blend_enable) {568util_dump_member(stream, enum_blend_func, state, rgb_func);569util_dump_member(stream, enum_blend_factor, state, rgb_src_factor);570util_dump_member(stream, enum_blend_factor, state, rgb_dst_factor);571572util_dump_member(stream, enum_blend_func, state, alpha_func);573util_dump_member(stream, enum_blend_factor, state, alpha_src_factor);574util_dump_member(stream, enum_blend_factor, state, alpha_dst_factor);575}576577util_dump_member(stream, uint, state, colormask);578579util_dump_struct_end(stream);580}581582void583util_dump_blend_state(FILE *stream, const struct pipe_blend_state *state)584{585unsigned valid_entries = 1;586587if (!state) {588util_dump_null(stream);589return;590}591592util_dump_struct_begin(stream, "pipe_blend_state");593594util_dump_member(stream, bool, state, dither);595util_dump_member(stream, bool, state, alpha_to_coverage);596util_dump_member(stream, bool, state, alpha_to_one);597util_dump_member(stream, uint, state, max_rt);598599util_dump_member(stream, bool, state, logicop_enable);600if (state->logicop_enable) {601util_dump_member(stream, enum_func, state, logicop_func);602}603else {604util_dump_member(stream, bool, state, independent_blend_enable);605606util_dump_member_begin(stream, "rt");607if (state->independent_blend_enable)608valid_entries = state->max_rt + 1;609util_dump_struct_array(stream, rt_blend_state, state->rt, valid_entries);610util_dump_member_end(stream);611}612613util_dump_struct_end(stream);614}615616617void618util_dump_blend_color(FILE *stream, const struct pipe_blend_color *state)619{620if (!state) {621util_dump_null(stream);622return;623}624625util_dump_struct_begin(stream, "pipe_blend_color");626627util_dump_member_array(stream, float, state, color);628629util_dump_struct_end(stream);630}631632void633util_dump_stencil_ref(FILE *stream, const struct pipe_stencil_ref *state)634{635if (!state) {636util_dump_null(stream);637return;638}639640util_dump_struct_begin(stream, "pipe_stencil_ref");641642util_dump_member_array(stream, uint, state, ref_value);643644util_dump_struct_end(stream);645}646647void648util_dump_framebuffer_state(FILE *stream, const struct pipe_framebuffer_state *state)649{650util_dump_struct_begin(stream, "pipe_framebuffer_state");651652util_dump_member(stream, uint, state, width);653util_dump_member(stream, uint, state, height);654util_dump_member(stream, uint, state, samples);655util_dump_member(stream, uint, state, layers);656util_dump_member(stream, uint, state, nr_cbufs);657util_dump_member_array(stream, ptr, state, cbufs);658util_dump_member(stream, ptr, state, zsbuf);659660util_dump_struct_end(stream);661}662663664void665util_dump_sampler_state(FILE *stream, const struct pipe_sampler_state *state)666{667if (!state) {668util_dump_null(stream);669return;670}671672util_dump_struct_begin(stream, "pipe_sampler_state");673674util_dump_member(stream, enum_tex_wrap, state, wrap_s);675util_dump_member(stream, enum_tex_wrap, state, wrap_t);676util_dump_member(stream, enum_tex_wrap, state, wrap_r);677util_dump_member(stream, enum_tex_filter, state, min_img_filter);678util_dump_member(stream, enum_tex_mipfilter, state, min_mip_filter);679util_dump_member(stream, enum_tex_filter, state, mag_img_filter);680util_dump_member(stream, uint, state, compare_mode);681util_dump_member(stream, enum_func, state, compare_func);682util_dump_member(stream, bool, state, normalized_coords);683util_dump_member(stream, uint, state, max_anisotropy);684util_dump_member(stream, bool, state, seamless_cube_map);685util_dump_member(stream, float, state, lod_bias);686util_dump_member(stream, float, state, min_lod);687util_dump_member(stream, float, state, max_lod);688util_dump_member_array(stream, float, state, border_color.f);689690util_dump_struct_end(stream);691}692693694void695util_dump_surface(FILE *stream, const struct pipe_surface *state)696{697if (!state) {698util_dump_null(stream);699return;700}701702util_dump_struct_begin(stream, "pipe_surface");703704util_dump_member(stream, format, state, format);705util_dump_member(stream, uint, state, width);706util_dump_member(stream, uint, state, height);707708util_dump_member(stream, ptr, state, texture);709util_dump_member(stream, uint, state, u.tex.level);710util_dump_member(stream, uint, state, u.tex.first_layer);711util_dump_member(stream, uint, state, u.tex.last_layer);712713util_dump_struct_end(stream);714}715716717void718util_dump_image_view(FILE *stream, const struct pipe_image_view *state)719{720if (!state) {721util_dump_null(stream);722return;723}724725util_dump_struct_begin(stream, "pipe_image_view");726727util_dump_member(stream, ptr, state, resource);728util_dump_member(stream, format, state, format);729730if (state->resource->target == PIPE_BUFFER) {731util_dump_member(stream, uint, state, u.buf.offset);732util_dump_member(stream, uint, state, u.buf.size);733}734else {735util_dump_member(stream, uint, state, u.tex.first_layer);736util_dump_member(stream, uint, state, u.tex.last_layer);737util_dump_member(stream, uint, state, u.tex.level);738}739740util_dump_struct_end(stream);741}742743744void745util_dump_shader_buffer(FILE *stream, const struct pipe_shader_buffer *state)746{747if (!state) {748util_dump_null(stream);749return;750}751752util_dump_struct_begin(stream, "pipe_shader_buffer");753754util_dump_member(stream, ptr, state, buffer);755util_dump_member(stream, uint, state, buffer_offset);756util_dump_member(stream, uint, state, buffer_size);757758util_dump_struct_end(stream);759760}761762763void764util_dump_sampler_view(FILE *stream, const struct pipe_sampler_view *state)765{766if (!state) {767util_dump_null(stream);768return;769}770771util_dump_struct_begin(stream, "pipe_sampler_view");772773util_dump_member(stream, enum_tex_target, state, target);774util_dump_member(stream, format, state, format);775util_dump_member(stream, ptr, state, texture);776777if (state->target == PIPE_BUFFER) {778util_dump_member(stream, uint, state, u.buf.offset);779util_dump_member(stream, uint, state, u.buf.size);780}781else {782util_dump_member(stream, uint, state, u.tex.first_layer);783util_dump_member(stream, uint, state, u.tex.last_layer);784util_dump_member(stream, uint, state, u.tex.first_level);785util_dump_member(stream, uint, state, u.tex.last_level);786}787788util_dump_member(stream, uint, state, swizzle_r);789util_dump_member(stream, uint, state, swizzle_g);790util_dump_member(stream, uint, state, swizzle_b);791util_dump_member(stream, uint, state, swizzle_a);792793util_dump_struct_end(stream);794}795796797void798util_dump_transfer(FILE *stream, const struct pipe_transfer *state)799{800if (!state) {801util_dump_null(stream);802return;803}804805util_dump_struct_begin(stream, "pipe_transfer");806807util_dump_member(stream, ptr, state, resource);808util_dump_member(stream, uint, state, level);809util_dump_member(stream, transfer_usage, state, usage);810util_dump_member_begin(stream, "box");811util_dump_box(stream, &state->box);812util_dump_member_end(stream);813util_dump_member(stream, uint, state, stride);814util_dump_member(stream, uint, state, layer_stride);815816util_dump_struct_end(stream);817}818819820void821util_dump_constant_buffer(FILE *stream,822const struct pipe_constant_buffer *state)823{824if (!state) {825util_dump_null(stream);826return;827}828829util_dump_struct_begin(stream, "pipe_constant_buffer");830831util_dump_member(stream, ptr, state, buffer);832util_dump_member(stream, uint, state, buffer_offset);833util_dump_member(stream, uint, state, buffer_size);834util_dump_member(stream, ptr, state, user_buffer);835836util_dump_struct_end(stream);837}838839840void841util_dump_vertex_buffer(FILE *stream, const struct pipe_vertex_buffer *state)842{843if (!state) {844util_dump_null(stream);845return;846}847848util_dump_struct_begin(stream, "pipe_vertex_buffer");849850util_dump_member(stream, uint, state, stride);851util_dump_member(stream, bool, state, is_user_buffer);852util_dump_member(stream, uint, state, buffer_offset);853util_dump_member(stream, ptr, state, buffer.resource);854855util_dump_struct_end(stream);856}857858859void860util_dump_vertex_element(FILE *stream, const struct pipe_vertex_element *state)861{862if (!state) {863util_dump_null(stream);864return;865}866867util_dump_struct_begin(stream, "pipe_vertex_element");868869util_dump_member(stream, uint, state, src_offset);870util_dump_member(stream, uint, state, instance_divisor);871util_dump_member(stream, uint, state, vertex_buffer_index);872util_dump_member(stream, format, state, src_format);873874util_dump_struct_end(stream);875}876877878void879util_dump_stream_output_target(FILE *stream,880const struct pipe_stream_output_target *state)881{882if (!state) {883util_dump_null(stream);884return;885}886887util_dump_struct_begin(stream, "pipe_stream_output_target");888889util_dump_member(stream, ptr, state, buffer);890util_dump_member(stream, uint, state, buffer_offset);891util_dump_member(stream, uint, state, buffer_size);892893util_dump_struct_end(stream);894}895896897void898util_dump_draw_info(FILE *stream, const struct pipe_draw_info *state)899{900if (!state) {901util_dump_null(stream);902return;903}904905util_dump_struct_begin(stream, "pipe_draw_info");906907util_dump_member(stream, uint, state, index_size);908util_dump_member(stream, uint, state, has_user_indices);909910util_dump_member(stream, enum_prim_mode, state, mode);911912util_dump_member(stream, uint, state, start_instance);913util_dump_member(stream, uint, state, instance_count);914915util_dump_member(stream, uint, state, vertices_per_patch);916917util_dump_member(stream, uint, state, min_index);918util_dump_member(stream, uint, state, max_index);919920util_dump_member(stream, bool, state, primitive_restart);921if (state->primitive_restart)922util_dump_member(stream, uint, state, restart_index);923924if (state->index_size) {925if (state->has_user_indices)926util_dump_member(stream, ptr, state, index.user);927else928util_dump_member(stream, ptr, state, index.resource);929}930util_dump_struct_end(stream);931}932933void934util_dump_draw_start_count_bias(FILE *stream, const struct pipe_draw_start_count_bias *state)935{936util_dump_struct_begin(stream, "pipe_draw_start_count_bias");937util_dump_member(stream, uint, state, start);938util_dump_member(stream, uint, state, count);939util_dump_member(stream, int, state, index_bias);940util_dump_struct_end(stream);941}942943void944util_dump_draw_indirect_info(FILE *stream,945const struct pipe_draw_indirect_info *state)946{947if (!state) {948util_dump_null(stream);949return;950}951952util_dump_struct_begin(stream, "pipe_draw_indirect_info");953util_dump_member(stream, uint, state, offset);954util_dump_member(stream, uint, state, stride);955util_dump_member(stream, uint, state, draw_count);956util_dump_member(stream, uint, state, indirect_draw_count_offset);957util_dump_member(stream, ptr, state, buffer);958util_dump_member(stream, ptr, state, indirect_draw_count);959util_dump_member(stream, ptr, state, count_from_stream_output);960util_dump_struct_end(stream);961}962963void util_dump_grid_info(FILE *stream, const struct pipe_grid_info *state)964{965if (!state) {966util_dump_null(stream);967return;968}969970util_dump_struct_begin(stream, "pipe_grid_info");971972util_dump_member(stream, uint, state, pc);973util_dump_member(stream, ptr, state, input);974util_dump_member(stream, uint, state, work_dim);975976util_dump_member_begin(stream, "block");977util_dump_array(stream, uint, state->block, ARRAY_SIZE(state->block));978util_dump_member_end(stream);979980util_dump_member_begin(stream, "grid");981util_dump_array(stream, uint, state->grid, ARRAY_SIZE(state->grid));982util_dump_member_end(stream);983984util_dump_member(stream, ptr, state, indirect);985util_dump_member(stream, uint, state, indirect_offset);986987util_dump_struct_end(stream);988}989990void util_dump_box(FILE *stream, const struct pipe_box *box)991{992if (!box) {993util_dump_null(stream);994return;995}996997util_dump_struct_begin(stream, "pipe_box");998999util_dump_member(stream, int, box, x);1000util_dump_member(stream, int, box, y);1001util_dump_member(stream, int, box, z);1002util_dump_member(stream, int, box, width);1003util_dump_member(stream, int, box, height);1004util_dump_member(stream, int, box, depth);10051006util_dump_struct_end(stream);1007}10081009void util_dump_blit_info(FILE *stream, const struct pipe_blit_info *info)1010{1011char mask[7];10121013if (!info) {1014util_dump_null(stream);1015return;1016}10171018util_dump_struct_begin(stream, "pipe_blit_info");10191020util_dump_member_begin(stream, "dst");1021util_dump_struct_begin(stream, "dst");1022util_dump_member(stream, ptr, &info->dst, resource);1023util_dump_member(stream, uint, &info->dst, level);1024util_dump_member(stream, format, &info->dst, format);1025util_dump_member_begin(stream, "box");1026util_dump_box(stream, &info->dst.box);1027util_dump_member_end(stream);1028util_dump_struct_end(stream);1029util_dump_member_end(stream);10301031util_dump_member_begin(stream, "src");1032util_dump_struct_begin(stream, "src");1033util_dump_member(stream, ptr, &info->src, resource);1034util_dump_member(stream, uint, &info->src, level);1035util_dump_member(stream, format, &info->src, format);1036util_dump_member_begin(stream, "box");1037util_dump_box(stream, &info->src.box);1038util_dump_member_end(stream);1039util_dump_struct_end(stream);1040util_dump_member_end(stream);10411042mask[0] = (info->mask & PIPE_MASK_R) ? 'R' : '-';1043mask[1] = (info->mask & PIPE_MASK_G) ? 'G' : '-';1044mask[2] = (info->mask & PIPE_MASK_B) ? 'B' : '-';1045mask[3] = (info->mask & PIPE_MASK_A) ? 'A' : '-';1046mask[4] = (info->mask & PIPE_MASK_Z) ? 'Z' : '-';1047mask[5] = (info->mask & PIPE_MASK_S) ? 'S' : '-';1048mask[6] = 0;10491050util_dump_member_begin(stream, "mask");1051util_dump_string(stream, mask);1052util_dump_member_end(stream);1053util_dump_member(stream, enum_tex_filter, info, filter);10541055util_dump_member(stream, bool, info, scissor_enable);1056util_dump_member_begin(stream, "scissor");1057util_dump_scissor_state(stream, &info->scissor);1058util_dump_member_end(stream);10591060util_dump_member(stream, bool, info, render_condition_enable);10611062util_dump_struct_end(stream);1063}106410651066