1bf215546Sopenharmony_ci/************************************************************************** 2bf215546Sopenharmony_ci * 3bf215546Sopenharmony_ci * Copyright 2008-2010 VMware, Inc. 4bf215546Sopenharmony_ci * All Rights Reserved. 5bf215546Sopenharmony_ci * 6bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 7bf215546Sopenharmony_ci * copy of this software and associated documentation files (the 8bf215546Sopenharmony_ci * "Software"), to deal in the Software without restriction, including 9bf215546Sopenharmony_ci * without limitation the rights to use, copy, modify, merge, publish, 10bf215546Sopenharmony_ci * distribute, sub license, and/or sell copies of the Software, and to 11bf215546Sopenharmony_ci * permit persons to whom the Software is furnished to do so, subject to 12bf215546Sopenharmony_ci * the following conditions: 13bf215546Sopenharmony_ci * 14bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the 15bf215546Sopenharmony_ci * next paragraph) shall be included in all copies or substantial portions 16bf215546Sopenharmony_ci * of the Software. 17bf215546Sopenharmony_ci * 18bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19bf215546Sopenharmony_ci * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20bf215546Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21bf215546Sopenharmony_ci * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22bf215546Sopenharmony_ci * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23bf215546Sopenharmony_ci * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24bf215546Sopenharmony_ci * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25bf215546Sopenharmony_ci * 26bf215546Sopenharmony_ci **************************************************************************/ 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci 29bf215546Sopenharmony_ci#include "pipe/p_compiler.h" 30bf215546Sopenharmony_ci#include "util/u_memory.h" 31bf215546Sopenharmony_ci#include "util/u_string.h" 32bf215546Sopenharmony_ci#include "util/format/u_format.h" 33bf215546Sopenharmony_ci#include "tgsi/tgsi_dump.h" 34bf215546Sopenharmony_ci 35bf215546Sopenharmony_ci#include <inttypes.h> 36bf215546Sopenharmony_ci 37bf215546Sopenharmony_ci#include "u_dump.h" 38bf215546Sopenharmony_ci 39bf215546Sopenharmony_ci 40bf215546Sopenharmony_ci/* 41bf215546Sopenharmony_ci * Dump primitives 42bf215546Sopenharmony_ci */ 43bf215546Sopenharmony_ci 44bf215546Sopenharmony_cistatic inline void 45bf215546Sopenharmony_ciutil_stream_writef(FILE *stream, const char *format, ...) 46bf215546Sopenharmony_ci{ 47bf215546Sopenharmony_ci static char buf[1024]; 48bf215546Sopenharmony_ci unsigned len; 49bf215546Sopenharmony_ci va_list ap; 50bf215546Sopenharmony_ci va_start(ap, format); 51bf215546Sopenharmony_ci len = vsnprintf(buf, sizeof(buf), format, ap); 52bf215546Sopenharmony_ci va_end(ap); 53bf215546Sopenharmony_ci fwrite(buf, len, 1, stream); 54bf215546Sopenharmony_ci} 55bf215546Sopenharmony_ci 56bf215546Sopenharmony_cistatic void 57bf215546Sopenharmony_ciutil_dump_bool(FILE *stream, int value) 58bf215546Sopenharmony_ci{ 59bf215546Sopenharmony_ci util_stream_writef(stream, "%c", value ? '1' : '0'); 60bf215546Sopenharmony_ci} 61bf215546Sopenharmony_ci 62bf215546Sopenharmony_cistatic void 63bf215546Sopenharmony_ciutil_dump_int(FILE *stream, long long int value) 64bf215546Sopenharmony_ci{ 65bf215546Sopenharmony_ci util_stream_writef(stream, "%lli", value); 66bf215546Sopenharmony_ci} 67bf215546Sopenharmony_ci 68bf215546Sopenharmony_cistatic void 69bf215546Sopenharmony_ciutil_dump_uint(FILE *stream, long long unsigned value) 70bf215546Sopenharmony_ci{ 71bf215546Sopenharmony_ci util_stream_writef(stream, "%llu", value); 72bf215546Sopenharmony_ci} 73bf215546Sopenharmony_ci 74bf215546Sopenharmony_cistatic void 75bf215546Sopenharmony_ciutil_dump_float(FILE *stream, double value) 76bf215546Sopenharmony_ci{ 77bf215546Sopenharmony_ci util_stream_writef(stream, "%g", value); 78bf215546Sopenharmony_ci} 79bf215546Sopenharmony_ci 80bf215546Sopenharmony_civoid 81bf215546Sopenharmony_ciutil_dump_ns(FILE *f, uint64_t time) 82bf215546Sopenharmony_ci{ 83bf215546Sopenharmony_ci uint64_t secs = time / (1000*1000*1000); 84bf215546Sopenharmony_ci unsigned usecs = (time % (1000*1000*1000)) / 1000; 85bf215546Sopenharmony_ci fprintf(f, "%"PRIu64".%06us", secs, usecs); 86bf215546Sopenharmony_ci} 87bf215546Sopenharmony_ci 88bf215546Sopenharmony_cistatic void 89bf215546Sopenharmony_ciutil_dump_string(FILE *stream, const char *str) 90bf215546Sopenharmony_ci{ 91bf215546Sopenharmony_ci fputs("\"", stream); 92bf215546Sopenharmony_ci fputs(str, stream); 93bf215546Sopenharmony_ci fputs("\"", stream); 94bf215546Sopenharmony_ci} 95bf215546Sopenharmony_ci 96bf215546Sopenharmony_cistatic void 97bf215546Sopenharmony_ciutil_dump_enum(FILE *stream, const char *value) 98bf215546Sopenharmony_ci{ 99bf215546Sopenharmony_ci fputs(value, stream); 100bf215546Sopenharmony_ci} 101bf215546Sopenharmony_ci 102bf215546Sopenharmony_cistatic void 103bf215546Sopenharmony_ciutil_dump_array_begin(FILE *stream) 104bf215546Sopenharmony_ci{ 105bf215546Sopenharmony_ci fputs("{", stream); 106bf215546Sopenharmony_ci} 107bf215546Sopenharmony_ci 108bf215546Sopenharmony_cistatic void 109bf215546Sopenharmony_ciutil_dump_array_end(FILE *stream) 110bf215546Sopenharmony_ci{ 111bf215546Sopenharmony_ci fputs("}", stream); 112bf215546Sopenharmony_ci} 113bf215546Sopenharmony_ci 114bf215546Sopenharmony_cistatic void 115bf215546Sopenharmony_ciutil_dump_elem_begin(UNUSED FILE *stream) 116bf215546Sopenharmony_ci{ 117bf215546Sopenharmony_ci} 118bf215546Sopenharmony_ci 119bf215546Sopenharmony_cistatic void 120bf215546Sopenharmony_ciutil_dump_elem_end(FILE *stream) 121bf215546Sopenharmony_ci{ 122bf215546Sopenharmony_ci fputs(", ", stream); 123bf215546Sopenharmony_ci} 124bf215546Sopenharmony_ci 125bf215546Sopenharmony_cistatic void 126bf215546Sopenharmony_ciutil_dump_struct_begin(FILE *stream, UNUSED const char *name) 127bf215546Sopenharmony_ci{ 128bf215546Sopenharmony_ci fputs("{", stream); 129bf215546Sopenharmony_ci} 130bf215546Sopenharmony_ci 131bf215546Sopenharmony_cistatic void 132bf215546Sopenharmony_ciutil_dump_struct_end(FILE *stream) 133bf215546Sopenharmony_ci{ 134bf215546Sopenharmony_ci fputs("}", stream); 135bf215546Sopenharmony_ci} 136bf215546Sopenharmony_ci 137bf215546Sopenharmony_cistatic void 138bf215546Sopenharmony_ciutil_dump_member_begin(FILE *stream, const char *name) 139bf215546Sopenharmony_ci{ 140bf215546Sopenharmony_ci util_stream_writef(stream, "%s = ", name); 141bf215546Sopenharmony_ci} 142bf215546Sopenharmony_ci 143bf215546Sopenharmony_cistatic void 144bf215546Sopenharmony_ciutil_dump_member_end(FILE *stream) 145bf215546Sopenharmony_ci{ 146bf215546Sopenharmony_ci fputs(", ", stream); 147bf215546Sopenharmony_ci} 148bf215546Sopenharmony_ci 149bf215546Sopenharmony_cistatic void 150bf215546Sopenharmony_ciutil_dump_null(FILE *stream) 151bf215546Sopenharmony_ci{ 152bf215546Sopenharmony_ci fputs("NULL", stream); 153bf215546Sopenharmony_ci} 154bf215546Sopenharmony_ci 155bf215546Sopenharmony_civoid 156bf215546Sopenharmony_ciutil_dump_ptr(FILE *stream, const void *value) 157bf215546Sopenharmony_ci{ 158bf215546Sopenharmony_ci if(value) 159bf215546Sopenharmony_ci util_stream_writef(stream, "%p", value); 160bf215546Sopenharmony_ci else 161bf215546Sopenharmony_ci util_dump_null(stream); 162bf215546Sopenharmony_ci} 163bf215546Sopenharmony_ci 164bf215546Sopenharmony_ci 165bf215546Sopenharmony_ci/* 166bf215546Sopenharmony_ci * Code saving macros. 167bf215546Sopenharmony_ci */ 168bf215546Sopenharmony_ci 169bf215546Sopenharmony_ci#define util_dump_arg(_stream, _type, _arg) \ 170bf215546Sopenharmony_ci do { \ 171bf215546Sopenharmony_ci util_dump_arg_begin(_stream, #_arg); \ 172bf215546Sopenharmony_ci util_dump_##_type(_stream, _arg); \ 173bf215546Sopenharmony_ci util_dump_arg_end(_stream); \ 174bf215546Sopenharmony_ci } while(0) 175bf215546Sopenharmony_ci 176bf215546Sopenharmony_ci#define util_dump_ret(_stream, _type, _arg) \ 177bf215546Sopenharmony_ci do { \ 178bf215546Sopenharmony_ci util_dump_ret_begin(_stream); \ 179bf215546Sopenharmony_ci util_dump_##_type(_stream, _arg); \ 180bf215546Sopenharmony_ci util_dump_ret_end(_stream); \ 181bf215546Sopenharmony_ci } while(0) 182bf215546Sopenharmony_ci 183bf215546Sopenharmony_ci#define util_dump_array(_stream, _type, _obj, _size) \ 184bf215546Sopenharmony_ci do { \ 185bf215546Sopenharmony_ci size_t idx; \ 186bf215546Sopenharmony_ci util_dump_array_begin(_stream); \ 187bf215546Sopenharmony_ci for(idx = 0; idx < (_size); ++idx) { \ 188bf215546Sopenharmony_ci util_dump_elem_begin(_stream); \ 189bf215546Sopenharmony_ci util_dump_##_type(_stream, (_obj)[idx]); \ 190bf215546Sopenharmony_ci util_dump_elem_end(_stream); \ 191bf215546Sopenharmony_ci } \ 192bf215546Sopenharmony_ci util_dump_array_end(_stream); \ 193bf215546Sopenharmony_ci } while(0) 194bf215546Sopenharmony_ci 195bf215546Sopenharmony_ci#define util_dump_struct_array(_stream, _type, _obj, _size) \ 196bf215546Sopenharmony_ci do { \ 197bf215546Sopenharmony_ci size_t idx; \ 198bf215546Sopenharmony_ci util_dump_array_begin(_stream); \ 199bf215546Sopenharmony_ci for(idx = 0; idx < (_size); ++idx) { \ 200bf215546Sopenharmony_ci util_dump_elem_begin(_stream); \ 201bf215546Sopenharmony_ci util_dump_##_type(_stream, &(_obj)[idx]); \ 202bf215546Sopenharmony_ci util_dump_elem_end(_stream); \ 203bf215546Sopenharmony_ci } \ 204bf215546Sopenharmony_ci util_dump_array_end(_stream); \ 205bf215546Sopenharmony_ci } while(0) 206bf215546Sopenharmony_ci 207bf215546Sopenharmony_ci#define util_dump_member(_stream, _type, _obj, _member) \ 208bf215546Sopenharmony_ci do { \ 209bf215546Sopenharmony_ci util_dump_member_begin(_stream, #_member); \ 210bf215546Sopenharmony_ci util_dump_##_type(_stream, (_obj)->_member); \ 211bf215546Sopenharmony_ci util_dump_member_end(_stream); \ 212bf215546Sopenharmony_ci } while(0) 213bf215546Sopenharmony_ci 214bf215546Sopenharmony_ci#define util_dump_arg_array(_stream, _type, _arg, _size) \ 215bf215546Sopenharmony_ci do { \ 216bf215546Sopenharmony_ci util_dump_arg_begin(_stream, #_arg); \ 217bf215546Sopenharmony_ci util_dump_array(_stream, _type, _arg, _size); \ 218bf215546Sopenharmony_ci util_dump_arg_end(_stream); \ 219bf215546Sopenharmony_ci } while(0) 220bf215546Sopenharmony_ci 221bf215546Sopenharmony_ci#define util_dump_member_array(_stream, _type, _obj, _member) \ 222bf215546Sopenharmony_ci do { \ 223bf215546Sopenharmony_ci util_dump_member_begin(_stream, #_member); \ 224bf215546Sopenharmony_ci util_dump_array(_stream, _type, (_obj)->_member, sizeof((_obj)->_member)/sizeof((_obj)->_member[0])); \ 225bf215546Sopenharmony_ci util_dump_member_end(_stream); \ 226bf215546Sopenharmony_ci } while(0) 227bf215546Sopenharmony_ci 228bf215546Sopenharmony_ci 229bf215546Sopenharmony_ci 230bf215546Sopenharmony_ci/* 231bf215546Sopenharmony_ci * Wrappers for enum -> string dumpers. 232bf215546Sopenharmony_ci */ 233bf215546Sopenharmony_ci 234bf215546Sopenharmony_ci 235bf215546Sopenharmony_cistatic void 236bf215546Sopenharmony_ciutil_dump_format(FILE *stream, enum pipe_format format) 237bf215546Sopenharmony_ci{ 238bf215546Sopenharmony_ci util_dump_enum(stream, util_format_name(format)); 239bf215546Sopenharmony_ci} 240bf215546Sopenharmony_ci 241bf215546Sopenharmony_ci 242bf215546Sopenharmony_cistatic void 243bf215546Sopenharmony_ciutil_dump_enum_blend_factor(FILE *stream, unsigned value) 244bf215546Sopenharmony_ci{ 245bf215546Sopenharmony_ci util_dump_enum(stream, util_str_blend_factor(value, TRUE)); 246bf215546Sopenharmony_ci} 247bf215546Sopenharmony_ci 248bf215546Sopenharmony_cistatic void 249bf215546Sopenharmony_ciutil_dump_enum_blend_func(FILE *stream, unsigned value) 250bf215546Sopenharmony_ci{ 251bf215546Sopenharmony_ci util_dump_enum(stream, util_str_blend_func(value, TRUE)); 252bf215546Sopenharmony_ci} 253bf215546Sopenharmony_ci 254bf215546Sopenharmony_cistatic void 255bf215546Sopenharmony_ciutil_dump_enum_func(FILE *stream, unsigned value) 256bf215546Sopenharmony_ci{ 257bf215546Sopenharmony_ci util_dump_enum(stream, util_str_func(value, TRUE)); 258bf215546Sopenharmony_ci} 259bf215546Sopenharmony_ci 260bf215546Sopenharmony_cistatic void 261bf215546Sopenharmony_ciutil_dump_enum_prim_mode(FILE *stream, unsigned value) 262bf215546Sopenharmony_ci{ 263bf215546Sopenharmony_ci util_dump_enum(stream, util_str_prim_mode(value, TRUE)); 264bf215546Sopenharmony_ci} 265bf215546Sopenharmony_ci 266bf215546Sopenharmony_cistatic void 267bf215546Sopenharmony_ciutil_dump_enum_tex_target(FILE *stream, unsigned value) 268bf215546Sopenharmony_ci{ 269bf215546Sopenharmony_ci util_dump_enum(stream, util_str_tex_target(value, TRUE)); 270bf215546Sopenharmony_ci} 271bf215546Sopenharmony_ci 272bf215546Sopenharmony_cistatic void 273bf215546Sopenharmony_ciutil_dump_enum_tex_filter(FILE *stream, unsigned value) 274bf215546Sopenharmony_ci{ 275bf215546Sopenharmony_ci util_dump_enum(stream, util_str_tex_filter(value, TRUE)); 276bf215546Sopenharmony_ci} 277bf215546Sopenharmony_ci 278bf215546Sopenharmony_cistatic void 279bf215546Sopenharmony_ciutil_dump_enum_tex_mipfilter(FILE *stream, unsigned value) 280bf215546Sopenharmony_ci{ 281bf215546Sopenharmony_ci util_dump_enum(stream, util_str_tex_mipfilter(value, TRUE)); 282bf215546Sopenharmony_ci} 283bf215546Sopenharmony_ci 284bf215546Sopenharmony_cistatic void 285bf215546Sopenharmony_ciutil_dump_enum_tex_wrap(FILE *stream, unsigned value) 286bf215546Sopenharmony_ci{ 287bf215546Sopenharmony_ci util_dump_enum(stream, util_str_tex_wrap(value, TRUE)); 288bf215546Sopenharmony_ci} 289bf215546Sopenharmony_ci 290bf215546Sopenharmony_cistatic void 291bf215546Sopenharmony_ciutil_dump_enum_stencil_op(FILE *stream, unsigned value) 292bf215546Sopenharmony_ci{ 293bf215546Sopenharmony_ci util_dump_enum(stream, util_str_stencil_op(value, TRUE)); 294bf215546Sopenharmony_ci} 295bf215546Sopenharmony_ci 296bf215546Sopenharmony_ci 297bf215546Sopenharmony_ci/* 298bf215546Sopenharmony_ci * Public functions 299bf215546Sopenharmony_ci */ 300bf215546Sopenharmony_ci 301bf215546Sopenharmony_ci 302bf215546Sopenharmony_civoid 303bf215546Sopenharmony_ciutil_dump_resource(FILE *stream, const struct pipe_resource *state) 304bf215546Sopenharmony_ci{ 305bf215546Sopenharmony_ci if (!state) { 306bf215546Sopenharmony_ci util_dump_null(stream); 307bf215546Sopenharmony_ci return; 308bf215546Sopenharmony_ci } 309bf215546Sopenharmony_ci 310bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_resource"); 311bf215546Sopenharmony_ci 312bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_target, state, target); 313bf215546Sopenharmony_ci util_dump_member(stream, format, state, format); 314bf215546Sopenharmony_ci 315bf215546Sopenharmony_ci util_dump_member(stream, uint, state, width0); 316bf215546Sopenharmony_ci util_dump_member(stream, uint, state, height0); 317bf215546Sopenharmony_ci util_dump_member(stream, uint, state, depth0); 318bf215546Sopenharmony_ci util_dump_member(stream, uint, state, array_size); 319bf215546Sopenharmony_ci 320bf215546Sopenharmony_ci util_dump_member(stream, uint, state, last_level); 321bf215546Sopenharmony_ci util_dump_member(stream, uint, state, nr_samples); 322bf215546Sopenharmony_ci util_dump_member(stream, uint, state, nr_storage_samples); 323bf215546Sopenharmony_ci util_dump_member(stream, uint, state, usage); 324bf215546Sopenharmony_ci util_dump_member(stream, uint, state, bind); 325bf215546Sopenharmony_ci util_dump_member(stream, uint, state, flags); 326bf215546Sopenharmony_ci 327bf215546Sopenharmony_ci util_dump_struct_end(stream); 328bf215546Sopenharmony_ci} 329bf215546Sopenharmony_ci 330bf215546Sopenharmony_ci 331bf215546Sopenharmony_civoid 332bf215546Sopenharmony_ciutil_dump_rasterizer_state(FILE *stream, const struct pipe_rasterizer_state *state) 333bf215546Sopenharmony_ci{ 334bf215546Sopenharmony_ci if (!state) { 335bf215546Sopenharmony_ci util_dump_null(stream); 336bf215546Sopenharmony_ci return; 337bf215546Sopenharmony_ci } 338bf215546Sopenharmony_ci 339bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_rasterizer_state"); 340bf215546Sopenharmony_ci 341bf215546Sopenharmony_ci util_dump_member(stream, bool, state, flatshade); 342bf215546Sopenharmony_ci util_dump_member(stream, bool, state, light_twoside); 343bf215546Sopenharmony_ci util_dump_member(stream, bool, state, clamp_vertex_color); 344bf215546Sopenharmony_ci util_dump_member(stream, bool, state, clamp_fragment_color); 345bf215546Sopenharmony_ci util_dump_member(stream, uint, state, front_ccw); 346bf215546Sopenharmony_ci util_dump_member(stream, uint, state, cull_face); 347bf215546Sopenharmony_ci util_dump_member(stream, uint, state, fill_front); 348bf215546Sopenharmony_ci util_dump_member(stream, uint, state, fill_back); 349bf215546Sopenharmony_ci util_dump_member(stream, bool, state, offset_point); 350bf215546Sopenharmony_ci util_dump_member(stream, bool, state, offset_line); 351bf215546Sopenharmony_ci util_dump_member(stream, bool, state, offset_tri); 352bf215546Sopenharmony_ci util_dump_member(stream, bool, state, scissor); 353bf215546Sopenharmony_ci util_dump_member(stream, bool, state, poly_smooth); 354bf215546Sopenharmony_ci util_dump_member(stream, bool, state, poly_stipple_enable); 355bf215546Sopenharmony_ci util_dump_member(stream, bool, state, point_smooth); 356bf215546Sopenharmony_ci util_dump_member(stream, uint, state, sprite_coord_enable); 357bf215546Sopenharmony_ci util_dump_member(stream, bool, state, sprite_coord_mode); 358bf215546Sopenharmony_ci util_dump_member(stream, bool, state, point_quad_rasterization); 359bf215546Sopenharmony_ci util_dump_member(stream, bool, state, point_tri_clip); 360bf215546Sopenharmony_ci util_dump_member(stream, bool, state, point_size_per_vertex); 361bf215546Sopenharmony_ci util_dump_member(stream, bool, state, multisample); 362bf215546Sopenharmony_ci util_dump_member(stream, bool, state, line_smooth); 363bf215546Sopenharmony_ci util_dump_member(stream, bool, state, line_stipple_enable); 364bf215546Sopenharmony_ci util_dump_member(stream, uint, state, line_stipple_factor); 365bf215546Sopenharmony_ci util_dump_member(stream, uint, state, line_stipple_pattern); 366bf215546Sopenharmony_ci util_dump_member(stream, bool, state, line_last_pixel); 367bf215546Sopenharmony_ci util_dump_member(stream, bool, state, flatshade_first); 368bf215546Sopenharmony_ci util_dump_member(stream, bool, state, half_pixel_center); 369bf215546Sopenharmony_ci util_dump_member(stream, bool, state, bottom_edge_rule); 370bf215546Sopenharmony_ci util_dump_member(stream, bool, state, rasterizer_discard); 371bf215546Sopenharmony_ci util_dump_member(stream, bool, state, depth_clip_near); 372bf215546Sopenharmony_ci util_dump_member(stream, bool, state, depth_clip_far); 373bf215546Sopenharmony_ci util_dump_member(stream, bool, state, clip_halfz); 374bf215546Sopenharmony_ci util_dump_member(stream, uint, state, clip_plane_enable); 375bf215546Sopenharmony_ci 376bf215546Sopenharmony_ci util_dump_member(stream, float, state, line_width); 377bf215546Sopenharmony_ci util_dump_member(stream, float, state, point_size); 378bf215546Sopenharmony_ci util_dump_member(stream, float, state, offset_units); 379bf215546Sopenharmony_ci util_dump_member(stream, float, state, offset_scale); 380bf215546Sopenharmony_ci util_dump_member(stream, float, state, offset_clamp); 381bf215546Sopenharmony_ci 382bf215546Sopenharmony_ci util_dump_struct_end(stream); 383bf215546Sopenharmony_ci} 384bf215546Sopenharmony_ci 385bf215546Sopenharmony_ci 386bf215546Sopenharmony_civoid 387bf215546Sopenharmony_ciutil_dump_poly_stipple(FILE *stream, const struct pipe_poly_stipple *state) 388bf215546Sopenharmony_ci{ 389bf215546Sopenharmony_ci if (!state) { 390bf215546Sopenharmony_ci util_dump_null(stream); 391bf215546Sopenharmony_ci return; 392bf215546Sopenharmony_ci } 393bf215546Sopenharmony_ci 394bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_poly_stipple"); 395bf215546Sopenharmony_ci 396bf215546Sopenharmony_ci util_dump_member_begin(stream, "stipple"); 397bf215546Sopenharmony_ci util_dump_member_array(stream, uint, state, stipple); 398bf215546Sopenharmony_ci util_dump_member_end(stream); 399bf215546Sopenharmony_ci 400bf215546Sopenharmony_ci util_dump_struct_end(stream); 401bf215546Sopenharmony_ci} 402bf215546Sopenharmony_ci 403bf215546Sopenharmony_ci 404bf215546Sopenharmony_civoid 405bf215546Sopenharmony_ciutil_dump_viewport_state(FILE *stream, const struct pipe_viewport_state *state) 406bf215546Sopenharmony_ci{ 407bf215546Sopenharmony_ci if (!state) { 408bf215546Sopenharmony_ci util_dump_null(stream); 409bf215546Sopenharmony_ci return; 410bf215546Sopenharmony_ci } 411bf215546Sopenharmony_ci 412bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_viewport_state"); 413bf215546Sopenharmony_ci 414bf215546Sopenharmony_ci util_dump_member_array(stream, float, state, scale); 415bf215546Sopenharmony_ci util_dump_member_array(stream, float, state, translate); 416bf215546Sopenharmony_ci 417bf215546Sopenharmony_ci util_dump_struct_end(stream); 418bf215546Sopenharmony_ci} 419bf215546Sopenharmony_ci 420bf215546Sopenharmony_ci 421bf215546Sopenharmony_civoid 422bf215546Sopenharmony_ciutil_dump_scissor_state(FILE *stream, const struct pipe_scissor_state *state) 423bf215546Sopenharmony_ci{ 424bf215546Sopenharmony_ci if (!state) { 425bf215546Sopenharmony_ci util_dump_null(stream); 426bf215546Sopenharmony_ci return; 427bf215546Sopenharmony_ci } 428bf215546Sopenharmony_ci 429bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_scissor_state"); 430bf215546Sopenharmony_ci 431bf215546Sopenharmony_ci util_dump_member(stream, uint, state, minx); 432bf215546Sopenharmony_ci util_dump_member(stream, uint, state, miny); 433bf215546Sopenharmony_ci util_dump_member(stream, uint, state, maxx); 434bf215546Sopenharmony_ci util_dump_member(stream, uint, state, maxy); 435bf215546Sopenharmony_ci 436bf215546Sopenharmony_ci util_dump_struct_end(stream); 437bf215546Sopenharmony_ci} 438bf215546Sopenharmony_ci 439bf215546Sopenharmony_ci 440bf215546Sopenharmony_civoid 441bf215546Sopenharmony_ciutil_dump_clip_state(FILE *stream, const struct pipe_clip_state *state) 442bf215546Sopenharmony_ci{ 443bf215546Sopenharmony_ci unsigned i; 444bf215546Sopenharmony_ci 445bf215546Sopenharmony_ci if (!state) { 446bf215546Sopenharmony_ci util_dump_null(stream); 447bf215546Sopenharmony_ci return; 448bf215546Sopenharmony_ci } 449bf215546Sopenharmony_ci 450bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_clip_state"); 451bf215546Sopenharmony_ci 452bf215546Sopenharmony_ci util_dump_member_begin(stream, "ucp"); 453bf215546Sopenharmony_ci util_dump_array_begin(stream); 454bf215546Sopenharmony_ci for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) { 455bf215546Sopenharmony_ci util_dump_elem_begin(stream); 456bf215546Sopenharmony_ci util_dump_array(stream, float, state->ucp[i], 4); 457bf215546Sopenharmony_ci util_dump_elem_end(stream); 458bf215546Sopenharmony_ci } 459bf215546Sopenharmony_ci util_dump_array_end(stream); 460bf215546Sopenharmony_ci util_dump_member_end(stream); 461bf215546Sopenharmony_ci 462bf215546Sopenharmony_ci util_dump_struct_end(stream); 463bf215546Sopenharmony_ci} 464bf215546Sopenharmony_ci 465bf215546Sopenharmony_civoid 466bf215546Sopenharmony_ciutil_dump_stream_output_info(FILE *stream, 467bf215546Sopenharmony_ci const struct pipe_stream_output_info *state) 468bf215546Sopenharmony_ci{ 469bf215546Sopenharmony_ci if (!state) { 470bf215546Sopenharmony_ci util_dump_null(stream); 471bf215546Sopenharmony_ci return; 472bf215546Sopenharmony_ci } 473bf215546Sopenharmony_ci 474bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_stream_output_info"); 475bf215546Sopenharmony_ci util_dump_member(stream, uint, state, num_outputs); 476bf215546Sopenharmony_ci util_dump_array(stream, uint, state->stride, 477bf215546Sopenharmony_ci ARRAY_SIZE(state->stride)); 478bf215546Sopenharmony_ci util_dump_array_begin(stream); 479bf215546Sopenharmony_ci for (unsigned i = 0; i < state->num_outputs; ++i) { 480bf215546Sopenharmony_ci util_dump_elem_begin(stream); 481bf215546Sopenharmony_ci util_dump_struct_begin(stream, ""); /* anonymous */ 482bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->output[i], register_index); 483bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->output[i], start_component); 484bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->output[i], num_components); 485bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->output[i], output_buffer); 486bf215546Sopenharmony_ci util_dump_struct_end(stream); 487bf215546Sopenharmony_ci util_dump_elem_end(stream); 488bf215546Sopenharmony_ci } 489bf215546Sopenharmony_ci util_dump_array_end(stream); 490bf215546Sopenharmony_ci util_dump_struct_end(stream); 491bf215546Sopenharmony_ci} 492bf215546Sopenharmony_ci 493bf215546Sopenharmony_civoid 494bf215546Sopenharmony_ciutil_dump_shader_state(FILE *stream, const struct pipe_shader_state *state) 495bf215546Sopenharmony_ci{ 496bf215546Sopenharmony_ci if (!state) { 497bf215546Sopenharmony_ci util_dump_null(stream); 498bf215546Sopenharmony_ci return; 499bf215546Sopenharmony_ci } 500bf215546Sopenharmony_ci 501bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_shader_state"); 502bf215546Sopenharmony_ci 503bf215546Sopenharmony_ci if (state->type == PIPE_SHADER_IR_TGSI) { 504bf215546Sopenharmony_ci util_dump_member_begin(stream, "tokens"); 505bf215546Sopenharmony_ci fprintf(stream, "\"\n"); 506bf215546Sopenharmony_ci tgsi_dump_to_file(state->tokens, 0, stream); 507bf215546Sopenharmony_ci fprintf(stream, "\""); 508bf215546Sopenharmony_ci util_dump_member_end(stream); 509bf215546Sopenharmony_ci } 510bf215546Sopenharmony_ci 511bf215546Sopenharmony_ci if (state->stream_output.num_outputs) { 512bf215546Sopenharmony_ci util_dump_member_begin(stream, "stream_output"); 513bf215546Sopenharmony_ci util_dump_stream_output_info(stream, &state->stream_output); 514bf215546Sopenharmony_ci util_dump_member_end(stream); 515bf215546Sopenharmony_ci } 516bf215546Sopenharmony_ci 517bf215546Sopenharmony_ci util_dump_struct_end(stream); 518bf215546Sopenharmony_ci} 519bf215546Sopenharmony_ci 520bf215546Sopenharmony_ci 521bf215546Sopenharmony_civoid 522bf215546Sopenharmony_ciutil_dump_depth_stencil_alpha_state(FILE *stream, const struct pipe_depth_stencil_alpha_state *state) 523bf215546Sopenharmony_ci{ 524bf215546Sopenharmony_ci unsigned i; 525bf215546Sopenharmony_ci 526bf215546Sopenharmony_ci if (!state) { 527bf215546Sopenharmony_ci util_dump_null(stream); 528bf215546Sopenharmony_ci return; 529bf215546Sopenharmony_ci } 530bf215546Sopenharmony_ci 531bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_depth_stencil_alpha_state"); 532bf215546Sopenharmony_ci 533bf215546Sopenharmony_ci util_dump_member(stream, bool, state, depth_enabled); 534bf215546Sopenharmony_ci if (state->depth_enabled) { 535bf215546Sopenharmony_ci util_dump_member(stream, bool, state, depth_writemask); 536bf215546Sopenharmony_ci util_dump_member(stream, enum_func, state, depth_func); 537bf215546Sopenharmony_ci } 538bf215546Sopenharmony_ci 539bf215546Sopenharmony_ci util_dump_member_begin(stream, "stencil"); 540bf215546Sopenharmony_ci util_dump_array_begin(stream); 541bf215546Sopenharmony_ci for(i = 0; i < ARRAY_SIZE(state->stencil); ++i) { 542bf215546Sopenharmony_ci util_dump_elem_begin(stream); 543bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_stencil_state"); 544bf215546Sopenharmony_ci util_dump_member(stream, bool, &state->stencil[i], enabled); 545bf215546Sopenharmony_ci if (state->stencil[i].enabled) { 546bf215546Sopenharmony_ci util_dump_member(stream, enum_func, &state->stencil[i], func); 547bf215546Sopenharmony_ci util_dump_member(stream, enum_stencil_op, 548bf215546Sopenharmony_ci &state->stencil[i], fail_op); 549bf215546Sopenharmony_ci util_dump_member(stream, enum_stencil_op, 550bf215546Sopenharmony_ci &state->stencil[i], zpass_op); 551bf215546Sopenharmony_ci util_dump_member(stream, enum_stencil_op, 552bf215546Sopenharmony_ci &state->stencil[i], zfail_op); 553bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->stencil[i], valuemask); 554bf215546Sopenharmony_ci util_dump_member(stream, uint, &state->stencil[i], writemask); 555bf215546Sopenharmony_ci } 556bf215546Sopenharmony_ci util_dump_struct_end(stream); 557bf215546Sopenharmony_ci util_dump_elem_end(stream); 558bf215546Sopenharmony_ci } 559bf215546Sopenharmony_ci util_dump_array_end(stream); 560bf215546Sopenharmony_ci util_dump_member_end(stream); 561bf215546Sopenharmony_ci 562bf215546Sopenharmony_ci util_dump_member(stream, bool, state, alpha_enabled); 563bf215546Sopenharmony_ci if (state->alpha_enabled) { 564bf215546Sopenharmony_ci util_dump_member(stream, enum_func, state, alpha_func); 565bf215546Sopenharmony_ci util_dump_member(stream, float, state, alpha_ref_value); 566bf215546Sopenharmony_ci } 567bf215546Sopenharmony_ci 568bf215546Sopenharmony_ci util_dump_struct_end(stream); 569bf215546Sopenharmony_ci} 570bf215546Sopenharmony_ci 571bf215546Sopenharmony_civoid 572bf215546Sopenharmony_ciutil_dump_rt_blend_state(FILE *stream, const struct pipe_rt_blend_state *state) 573bf215546Sopenharmony_ci{ 574bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_rt_blend_state"); 575bf215546Sopenharmony_ci 576bf215546Sopenharmony_ci util_dump_member(stream, uint, state, blend_enable); 577bf215546Sopenharmony_ci if (state->blend_enable) { 578bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_func, state, rgb_func); 579bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_factor, state, rgb_src_factor); 580bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_factor, state, rgb_dst_factor); 581bf215546Sopenharmony_ci 582bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_func, state, alpha_func); 583bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_factor, state, alpha_src_factor); 584bf215546Sopenharmony_ci util_dump_member(stream, enum_blend_factor, state, alpha_dst_factor); 585bf215546Sopenharmony_ci } 586bf215546Sopenharmony_ci 587bf215546Sopenharmony_ci util_dump_member(stream, uint, state, colormask); 588bf215546Sopenharmony_ci 589bf215546Sopenharmony_ci util_dump_struct_end(stream); 590bf215546Sopenharmony_ci} 591bf215546Sopenharmony_ci 592bf215546Sopenharmony_civoid 593bf215546Sopenharmony_ciutil_dump_blend_state(FILE *stream, const struct pipe_blend_state *state) 594bf215546Sopenharmony_ci{ 595bf215546Sopenharmony_ci unsigned valid_entries = 1; 596bf215546Sopenharmony_ci 597bf215546Sopenharmony_ci if (!state) { 598bf215546Sopenharmony_ci util_dump_null(stream); 599bf215546Sopenharmony_ci return; 600bf215546Sopenharmony_ci } 601bf215546Sopenharmony_ci 602bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_blend_state"); 603bf215546Sopenharmony_ci 604bf215546Sopenharmony_ci util_dump_member(stream, bool, state, dither); 605bf215546Sopenharmony_ci util_dump_member(stream, bool, state, alpha_to_coverage); 606bf215546Sopenharmony_ci util_dump_member(stream, bool, state, alpha_to_one); 607bf215546Sopenharmony_ci util_dump_member(stream, uint, state, max_rt); 608bf215546Sopenharmony_ci 609bf215546Sopenharmony_ci util_dump_member(stream, bool, state, logicop_enable); 610bf215546Sopenharmony_ci if (state->logicop_enable) { 611bf215546Sopenharmony_ci util_dump_member(stream, enum_func, state, logicop_func); 612bf215546Sopenharmony_ci } 613bf215546Sopenharmony_ci else { 614bf215546Sopenharmony_ci util_dump_member(stream, bool, state, independent_blend_enable); 615bf215546Sopenharmony_ci 616bf215546Sopenharmony_ci util_dump_member_begin(stream, "rt"); 617bf215546Sopenharmony_ci if (state->independent_blend_enable) 618bf215546Sopenharmony_ci valid_entries = state->max_rt + 1; 619bf215546Sopenharmony_ci util_dump_struct_array(stream, rt_blend_state, state->rt, valid_entries); 620bf215546Sopenharmony_ci util_dump_member_end(stream); 621bf215546Sopenharmony_ci } 622bf215546Sopenharmony_ci 623bf215546Sopenharmony_ci util_dump_struct_end(stream); 624bf215546Sopenharmony_ci} 625bf215546Sopenharmony_ci 626bf215546Sopenharmony_ci 627bf215546Sopenharmony_civoid 628bf215546Sopenharmony_ciutil_dump_blend_color(FILE *stream, const struct pipe_blend_color *state) 629bf215546Sopenharmony_ci{ 630bf215546Sopenharmony_ci if (!state) { 631bf215546Sopenharmony_ci util_dump_null(stream); 632bf215546Sopenharmony_ci return; 633bf215546Sopenharmony_ci } 634bf215546Sopenharmony_ci 635bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_blend_color"); 636bf215546Sopenharmony_ci 637bf215546Sopenharmony_ci util_dump_member_array(stream, float, state, color); 638bf215546Sopenharmony_ci 639bf215546Sopenharmony_ci util_dump_struct_end(stream); 640bf215546Sopenharmony_ci} 641bf215546Sopenharmony_ci 642bf215546Sopenharmony_civoid 643bf215546Sopenharmony_ciutil_dump_stencil_ref(FILE *stream, const struct pipe_stencil_ref *state) 644bf215546Sopenharmony_ci{ 645bf215546Sopenharmony_ci if (!state) { 646bf215546Sopenharmony_ci util_dump_null(stream); 647bf215546Sopenharmony_ci return; 648bf215546Sopenharmony_ci } 649bf215546Sopenharmony_ci 650bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_stencil_ref"); 651bf215546Sopenharmony_ci 652bf215546Sopenharmony_ci util_dump_member_array(stream, uint, state, ref_value); 653bf215546Sopenharmony_ci 654bf215546Sopenharmony_ci util_dump_struct_end(stream); 655bf215546Sopenharmony_ci} 656bf215546Sopenharmony_ci 657bf215546Sopenharmony_civoid 658bf215546Sopenharmony_ciutil_dump_framebuffer_state(FILE *stream, const struct pipe_framebuffer_state *state) 659bf215546Sopenharmony_ci{ 660bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_framebuffer_state"); 661bf215546Sopenharmony_ci 662bf215546Sopenharmony_ci util_dump_member(stream, uint, state, width); 663bf215546Sopenharmony_ci util_dump_member(stream, uint, state, height); 664bf215546Sopenharmony_ci util_dump_member(stream, uint, state, samples); 665bf215546Sopenharmony_ci util_dump_member(stream, uint, state, layers); 666bf215546Sopenharmony_ci util_dump_member(stream, uint, state, nr_cbufs); 667bf215546Sopenharmony_ci util_dump_member_array(stream, ptr, state, cbufs); 668bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, zsbuf); 669bf215546Sopenharmony_ci 670bf215546Sopenharmony_ci util_dump_struct_end(stream); 671bf215546Sopenharmony_ci} 672bf215546Sopenharmony_ci 673bf215546Sopenharmony_ci 674bf215546Sopenharmony_civoid 675bf215546Sopenharmony_ciutil_dump_sampler_state(FILE *stream, const struct pipe_sampler_state *state) 676bf215546Sopenharmony_ci{ 677bf215546Sopenharmony_ci if (!state) { 678bf215546Sopenharmony_ci util_dump_null(stream); 679bf215546Sopenharmony_ci return; 680bf215546Sopenharmony_ci } 681bf215546Sopenharmony_ci 682bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_sampler_state"); 683bf215546Sopenharmony_ci 684bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_wrap, state, wrap_s); 685bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_wrap, state, wrap_t); 686bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_wrap, state, wrap_r); 687bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_filter, state, min_img_filter); 688bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_mipfilter, state, min_mip_filter); 689bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_filter, state, mag_img_filter); 690bf215546Sopenharmony_ci util_dump_member(stream, uint, state, compare_mode); 691bf215546Sopenharmony_ci util_dump_member(stream, enum_func, state, compare_func); 692bf215546Sopenharmony_ci util_dump_member(stream, bool, state, normalized_coords); 693bf215546Sopenharmony_ci util_dump_member(stream, uint, state, max_anisotropy); 694bf215546Sopenharmony_ci util_dump_member(stream, bool, state, seamless_cube_map); 695bf215546Sopenharmony_ci util_dump_member(stream, float, state, lod_bias); 696bf215546Sopenharmony_ci util_dump_member(stream, float, state, min_lod); 697bf215546Sopenharmony_ci util_dump_member(stream, float, state, max_lod); 698bf215546Sopenharmony_ci util_dump_member_array(stream, float, state, border_color.f); 699bf215546Sopenharmony_ci 700bf215546Sopenharmony_ci util_dump_struct_end(stream); 701bf215546Sopenharmony_ci} 702bf215546Sopenharmony_ci 703bf215546Sopenharmony_ci 704bf215546Sopenharmony_civoid 705bf215546Sopenharmony_ciutil_dump_surface(FILE *stream, const struct pipe_surface *state) 706bf215546Sopenharmony_ci{ 707bf215546Sopenharmony_ci if (!state) { 708bf215546Sopenharmony_ci util_dump_null(stream); 709bf215546Sopenharmony_ci return; 710bf215546Sopenharmony_ci } 711bf215546Sopenharmony_ci 712bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_surface"); 713bf215546Sopenharmony_ci 714bf215546Sopenharmony_ci util_dump_member(stream, format, state, format); 715bf215546Sopenharmony_ci util_dump_member(stream, uint, state, width); 716bf215546Sopenharmony_ci util_dump_member(stream, uint, state, height); 717bf215546Sopenharmony_ci 718bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, texture); 719bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.level); 720bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.first_layer); 721bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.last_layer); 722bf215546Sopenharmony_ci 723bf215546Sopenharmony_ci util_dump_struct_end(stream); 724bf215546Sopenharmony_ci} 725bf215546Sopenharmony_ci 726bf215546Sopenharmony_ci 727bf215546Sopenharmony_civoid 728bf215546Sopenharmony_ciutil_dump_image_view(FILE *stream, const struct pipe_image_view *state) 729bf215546Sopenharmony_ci{ 730bf215546Sopenharmony_ci if (!state) { 731bf215546Sopenharmony_ci util_dump_null(stream); 732bf215546Sopenharmony_ci return; 733bf215546Sopenharmony_ci } 734bf215546Sopenharmony_ci 735bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_image_view"); 736bf215546Sopenharmony_ci 737bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, resource); 738bf215546Sopenharmony_ci util_dump_member(stream, format, state, format); 739bf215546Sopenharmony_ci 740bf215546Sopenharmony_ci if (state->resource->target == PIPE_BUFFER) { 741bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.buf.offset); 742bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.buf.size); 743bf215546Sopenharmony_ci } 744bf215546Sopenharmony_ci else { 745bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.first_layer); 746bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.last_layer); 747bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.level); 748bf215546Sopenharmony_ci } 749bf215546Sopenharmony_ci 750bf215546Sopenharmony_ci util_dump_struct_end(stream); 751bf215546Sopenharmony_ci} 752bf215546Sopenharmony_ci 753bf215546Sopenharmony_ci 754bf215546Sopenharmony_civoid 755bf215546Sopenharmony_ciutil_dump_shader_buffer(FILE *stream, const struct pipe_shader_buffer *state) 756bf215546Sopenharmony_ci{ 757bf215546Sopenharmony_ci if (!state) { 758bf215546Sopenharmony_ci util_dump_null(stream); 759bf215546Sopenharmony_ci return; 760bf215546Sopenharmony_ci } 761bf215546Sopenharmony_ci 762bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_shader_buffer"); 763bf215546Sopenharmony_ci 764bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, buffer); 765bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_offset); 766bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_size); 767bf215546Sopenharmony_ci 768bf215546Sopenharmony_ci util_dump_struct_end(stream); 769bf215546Sopenharmony_ci 770bf215546Sopenharmony_ci} 771bf215546Sopenharmony_ci 772bf215546Sopenharmony_ci 773bf215546Sopenharmony_civoid 774bf215546Sopenharmony_ciutil_dump_sampler_view(FILE *stream, const struct pipe_sampler_view *state) 775bf215546Sopenharmony_ci{ 776bf215546Sopenharmony_ci if (!state) { 777bf215546Sopenharmony_ci util_dump_null(stream); 778bf215546Sopenharmony_ci return; 779bf215546Sopenharmony_ci } 780bf215546Sopenharmony_ci 781bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_sampler_view"); 782bf215546Sopenharmony_ci 783bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_target, state, target); 784bf215546Sopenharmony_ci util_dump_member(stream, format, state, format); 785bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, texture); 786bf215546Sopenharmony_ci 787bf215546Sopenharmony_ci if (state->target == PIPE_BUFFER) { 788bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.buf.offset); 789bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.buf.size); 790bf215546Sopenharmony_ci } 791bf215546Sopenharmony_ci else { 792bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.first_layer); 793bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.last_layer); 794bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.first_level); 795bf215546Sopenharmony_ci util_dump_member(stream, uint, state, u.tex.last_level); 796bf215546Sopenharmony_ci } 797bf215546Sopenharmony_ci 798bf215546Sopenharmony_ci util_dump_member(stream, uint, state, swizzle_r); 799bf215546Sopenharmony_ci util_dump_member(stream, uint, state, swizzle_g); 800bf215546Sopenharmony_ci util_dump_member(stream, uint, state, swizzle_b); 801bf215546Sopenharmony_ci util_dump_member(stream, uint, state, swizzle_a); 802bf215546Sopenharmony_ci 803bf215546Sopenharmony_ci util_dump_struct_end(stream); 804bf215546Sopenharmony_ci} 805bf215546Sopenharmony_ci 806bf215546Sopenharmony_ci 807bf215546Sopenharmony_civoid 808bf215546Sopenharmony_ciutil_dump_transfer(FILE *stream, const struct pipe_transfer *state) 809bf215546Sopenharmony_ci{ 810bf215546Sopenharmony_ci if (!state) { 811bf215546Sopenharmony_ci util_dump_null(stream); 812bf215546Sopenharmony_ci return; 813bf215546Sopenharmony_ci } 814bf215546Sopenharmony_ci 815bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_transfer"); 816bf215546Sopenharmony_ci 817bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, resource); 818bf215546Sopenharmony_ci util_dump_member(stream, uint, state, level); 819bf215546Sopenharmony_ci util_dump_member(stream, transfer_usage, state, usage); 820bf215546Sopenharmony_ci util_dump_member_begin(stream, "box"); 821bf215546Sopenharmony_ci util_dump_box(stream, &state->box); 822bf215546Sopenharmony_ci util_dump_member_end(stream); 823bf215546Sopenharmony_ci util_dump_member(stream, uint, state, stride); 824bf215546Sopenharmony_ci util_dump_member(stream, uint, state, layer_stride); 825bf215546Sopenharmony_ci 826bf215546Sopenharmony_ci util_dump_struct_end(stream); 827bf215546Sopenharmony_ci} 828bf215546Sopenharmony_ci 829bf215546Sopenharmony_ci 830bf215546Sopenharmony_civoid 831bf215546Sopenharmony_ciutil_dump_constant_buffer(FILE *stream, 832bf215546Sopenharmony_ci const struct pipe_constant_buffer *state) 833bf215546Sopenharmony_ci{ 834bf215546Sopenharmony_ci if (!state) { 835bf215546Sopenharmony_ci util_dump_null(stream); 836bf215546Sopenharmony_ci return; 837bf215546Sopenharmony_ci } 838bf215546Sopenharmony_ci 839bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_constant_buffer"); 840bf215546Sopenharmony_ci 841bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, buffer); 842bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_offset); 843bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_size); 844bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, user_buffer); 845bf215546Sopenharmony_ci 846bf215546Sopenharmony_ci util_dump_struct_end(stream); 847bf215546Sopenharmony_ci} 848bf215546Sopenharmony_ci 849bf215546Sopenharmony_ci 850bf215546Sopenharmony_civoid 851bf215546Sopenharmony_ciutil_dump_vertex_buffer(FILE *stream, const struct pipe_vertex_buffer *state) 852bf215546Sopenharmony_ci{ 853bf215546Sopenharmony_ci if (!state) { 854bf215546Sopenharmony_ci util_dump_null(stream); 855bf215546Sopenharmony_ci return; 856bf215546Sopenharmony_ci } 857bf215546Sopenharmony_ci 858bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_vertex_buffer"); 859bf215546Sopenharmony_ci 860bf215546Sopenharmony_ci util_dump_member(stream, uint, state, stride); 861bf215546Sopenharmony_ci util_dump_member(stream, bool, state, is_user_buffer); 862bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_offset); 863bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, buffer.resource); 864bf215546Sopenharmony_ci 865bf215546Sopenharmony_ci util_dump_struct_end(stream); 866bf215546Sopenharmony_ci} 867bf215546Sopenharmony_ci 868bf215546Sopenharmony_ci 869bf215546Sopenharmony_civoid 870bf215546Sopenharmony_ciutil_dump_vertex_element(FILE *stream, const struct pipe_vertex_element *state) 871bf215546Sopenharmony_ci{ 872bf215546Sopenharmony_ci if (!state) { 873bf215546Sopenharmony_ci util_dump_null(stream); 874bf215546Sopenharmony_ci return; 875bf215546Sopenharmony_ci } 876bf215546Sopenharmony_ci 877bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_vertex_element"); 878bf215546Sopenharmony_ci 879bf215546Sopenharmony_ci util_dump_member(stream, uint, state, src_offset); 880bf215546Sopenharmony_ci util_dump_member(stream, uint, state, instance_divisor); 881bf215546Sopenharmony_ci util_dump_member(stream, uint, state, vertex_buffer_index); 882bf215546Sopenharmony_ci util_dump_member(stream, format, state, src_format); 883bf215546Sopenharmony_ci 884bf215546Sopenharmony_ci util_dump_struct_end(stream); 885bf215546Sopenharmony_ci} 886bf215546Sopenharmony_ci 887bf215546Sopenharmony_ci 888bf215546Sopenharmony_civoid 889bf215546Sopenharmony_ciutil_dump_stream_output_target(FILE *stream, 890bf215546Sopenharmony_ci const struct pipe_stream_output_target *state) 891bf215546Sopenharmony_ci{ 892bf215546Sopenharmony_ci if (!state) { 893bf215546Sopenharmony_ci util_dump_null(stream); 894bf215546Sopenharmony_ci return; 895bf215546Sopenharmony_ci } 896bf215546Sopenharmony_ci 897bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_stream_output_target"); 898bf215546Sopenharmony_ci 899bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, buffer); 900bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_offset); 901bf215546Sopenharmony_ci util_dump_member(stream, uint, state, buffer_size); 902bf215546Sopenharmony_ci 903bf215546Sopenharmony_ci util_dump_struct_end(stream); 904bf215546Sopenharmony_ci} 905bf215546Sopenharmony_ci 906bf215546Sopenharmony_ci 907bf215546Sopenharmony_civoid 908bf215546Sopenharmony_ciutil_dump_draw_info(FILE *stream, const struct pipe_draw_info *state) 909bf215546Sopenharmony_ci{ 910bf215546Sopenharmony_ci if (!state) { 911bf215546Sopenharmony_ci util_dump_null(stream); 912bf215546Sopenharmony_ci return; 913bf215546Sopenharmony_ci } 914bf215546Sopenharmony_ci 915bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_draw_info"); 916bf215546Sopenharmony_ci 917bf215546Sopenharmony_ci util_dump_member(stream, uint, state, index_size); 918bf215546Sopenharmony_ci util_dump_member(stream, uint, state, has_user_indices); 919bf215546Sopenharmony_ci 920bf215546Sopenharmony_ci util_dump_member(stream, enum_prim_mode, state, mode); 921bf215546Sopenharmony_ci 922bf215546Sopenharmony_ci util_dump_member(stream, uint, state, start_instance); 923bf215546Sopenharmony_ci util_dump_member(stream, uint, state, instance_count); 924bf215546Sopenharmony_ci 925bf215546Sopenharmony_ci util_dump_member(stream, uint, state, min_index); 926bf215546Sopenharmony_ci util_dump_member(stream, uint, state, max_index); 927bf215546Sopenharmony_ci 928bf215546Sopenharmony_ci util_dump_member(stream, bool, state, primitive_restart); 929bf215546Sopenharmony_ci if (state->primitive_restart) 930bf215546Sopenharmony_ci util_dump_member(stream, uint, state, restart_index); 931bf215546Sopenharmony_ci 932bf215546Sopenharmony_ci if (state->index_size) { 933bf215546Sopenharmony_ci if (state->has_user_indices) 934bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, index.user); 935bf215546Sopenharmony_ci else 936bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, index.resource); 937bf215546Sopenharmony_ci } 938bf215546Sopenharmony_ci util_dump_struct_end(stream); 939bf215546Sopenharmony_ci} 940bf215546Sopenharmony_ci 941bf215546Sopenharmony_civoid 942bf215546Sopenharmony_ciutil_dump_draw_start_count_bias(FILE *stream, const struct pipe_draw_start_count_bias *state) 943bf215546Sopenharmony_ci{ 944bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_draw_start_count_bias"); 945bf215546Sopenharmony_ci util_dump_member(stream, uint, state, start); 946bf215546Sopenharmony_ci util_dump_member(stream, uint, state, count); 947bf215546Sopenharmony_ci util_dump_member(stream, int, state, index_bias); 948bf215546Sopenharmony_ci util_dump_struct_end(stream); 949bf215546Sopenharmony_ci} 950bf215546Sopenharmony_ci 951bf215546Sopenharmony_civoid 952bf215546Sopenharmony_ciutil_dump_draw_indirect_info(FILE *stream, 953bf215546Sopenharmony_ci const struct pipe_draw_indirect_info *state) 954bf215546Sopenharmony_ci{ 955bf215546Sopenharmony_ci if (!state) { 956bf215546Sopenharmony_ci util_dump_null(stream); 957bf215546Sopenharmony_ci return; 958bf215546Sopenharmony_ci } 959bf215546Sopenharmony_ci 960bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_draw_indirect_info"); 961bf215546Sopenharmony_ci util_dump_member(stream, uint, state, offset); 962bf215546Sopenharmony_ci util_dump_member(stream, uint, state, stride); 963bf215546Sopenharmony_ci util_dump_member(stream, uint, state, draw_count); 964bf215546Sopenharmony_ci util_dump_member(stream, uint, state, indirect_draw_count_offset); 965bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, buffer); 966bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, indirect_draw_count); 967bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, count_from_stream_output); 968bf215546Sopenharmony_ci util_dump_struct_end(stream); 969bf215546Sopenharmony_ci} 970bf215546Sopenharmony_ci 971bf215546Sopenharmony_civoid util_dump_grid_info(FILE *stream, const struct pipe_grid_info *state) 972bf215546Sopenharmony_ci{ 973bf215546Sopenharmony_ci if (!state) { 974bf215546Sopenharmony_ci util_dump_null(stream); 975bf215546Sopenharmony_ci return; 976bf215546Sopenharmony_ci } 977bf215546Sopenharmony_ci 978bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_grid_info"); 979bf215546Sopenharmony_ci 980bf215546Sopenharmony_ci util_dump_member(stream, uint, state, pc); 981bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, input); 982bf215546Sopenharmony_ci util_dump_member(stream, uint, state, work_dim); 983bf215546Sopenharmony_ci 984bf215546Sopenharmony_ci util_dump_member_begin(stream, "block"); 985bf215546Sopenharmony_ci util_dump_array(stream, uint, state->block, ARRAY_SIZE(state->block)); 986bf215546Sopenharmony_ci util_dump_member_end(stream); 987bf215546Sopenharmony_ci 988bf215546Sopenharmony_ci util_dump_member_begin(stream, "grid"); 989bf215546Sopenharmony_ci util_dump_array(stream, uint, state->grid, ARRAY_SIZE(state->grid)); 990bf215546Sopenharmony_ci util_dump_member_end(stream); 991bf215546Sopenharmony_ci 992bf215546Sopenharmony_ci util_dump_member(stream, ptr, state, indirect); 993bf215546Sopenharmony_ci util_dump_member(stream, uint, state, indirect_offset); 994bf215546Sopenharmony_ci 995bf215546Sopenharmony_ci util_dump_struct_end(stream); 996bf215546Sopenharmony_ci} 997bf215546Sopenharmony_ci 998bf215546Sopenharmony_civoid util_dump_box(FILE *stream, const struct pipe_box *box) 999bf215546Sopenharmony_ci{ 1000bf215546Sopenharmony_ci if (!box) { 1001bf215546Sopenharmony_ci util_dump_null(stream); 1002bf215546Sopenharmony_ci return; 1003bf215546Sopenharmony_ci } 1004bf215546Sopenharmony_ci 1005bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_box"); 1006bf215546Sopenharmony_ci 1007bf215546Sopenharmony_ci util_dump_member(stream, int, box, x); 1008bf215546Sopenharmony_ci util_dump_member(stream, int, box, y); 1009bf215546Sopenharmony_ci util_dump_member(stream, int, box, z); 1010bf215546Sopenharmony_ci util_dump_member(stream, int, box, width); 1011bf215546Sopenharmony_ci util_dump_member(stream, int, box, height); 1012bf215546Sopenharmony_ci util_dump_member(stream, int, box, depth); 1013bf215546Sopenharmony_ci 1014bf215546Sopenharmony_ci util_dump_struct_end(stream); 1015bf215546Sopenharmony_ci} 1016bf215546Sopenharmony_ci 1017bf215546Sopenharmony_civoid util_dump_blit_info(FILE *stream, const struct pipe_blit_info *info) 1018bf215546Sopenharmony_ci{ 1019bf215546Sopenharmony_ci char mask[7]; 1020bf215546Sopenharmony_ci 1021bf215546Sopenharmony_ci if (!info) { 1022bf215546Sopenharmony_ci util_dump_null(stream); 1023bf215546Sopenharmony_ci return; 1024bf215546Sopenharmony_ci } 1025bf215546Sopenharmony_ci 1026bf215546Sopenharmony_ci util_dump_struct_begin(stream, "pipe_blit_info"); 1027bf215546Sopenharmony_ci 1028bf215546Sopenharmony_ci util_dump_member_begin(stream, "dst"); 1029bf215546Sopenharmony_ci util_dump_struct_begin(stream, "dst"); 1030bf215546Sopenharmony_ci util_dump_member(stream, ptr, &info->dst, resource); 1031bf215546Sopenharmony_ci util_dump_member(stream, uint, &info->dst, level); 1032bf215546Sopenharmony_ci util_dump_member(stream, format, &info->dst, format); 1033bf215546Sopenharmony_ci util_dump_member_begin(stream, "box"); 1034bf215546Sopenharmony_ci util_dump_box(stream, &info->dst.box); 1035bf215546Sopenharmony_ci util_dump_member_end(stream); 1036bf215546Sopenharmony_ci util_dump_struct_end(stream); 1037bf215546Sopenharmony_ci util_dump_member_end(stream); 1038bf215546Sopenharmony_ci 1039bf215546Sopenharmony_ci util_dump_member_begin(stream, "src"); 1040bf215546Sopenharmony_ci util_dump_struct_begin(stream, "src"); 1041bf215546Sopenharmony_ci util_dump_member(stream, ptr, &info->src, resource); 1042bf215546Sopenharmony_ci util_dump_member(stream, uint, &info->src, level); 1043bf215546Sopenharmony_ci util_dump_member(stream, format, &info->src, format); 1044bf215546Sopenharmony_ci util_dump_member_begin(stream, "box"); 1045bf215546Sopenharmony_ci util_dump_box(stream, &info->src.box); 1046bf215546Sopenharmony_ci util_dump_member_end(stream); 1047bf215546Sopenharmony_ci util_dump_struct_end(stream); 1048bf215546Sopenharmony_ci util_dump_member_end(stream); 1049bf215546Sopenharmony_ci 1050bf215546Sopenharmony_ci mask[0] = (info->mask & PIPE_MASK_R) ? 'R' : '-'; 1051bf215546Sopenharmony_ci mask[1] = (info->mask & PIPE_MASK_G) ? 'G' : '-'; 1052bf215546Sopenharmony_ci mask[2] = (info->mask & PIPE_MASK_B) ? 'B' : '-'; 1053bf215546Sopenharmony_ci mask[3] = (info->mask & PIPE_MASK_A) ? 'A' : '-'; 1054bf215546Sopenharmony_ci mask[4] = (info->mask & PIPE_MASK_Z) ? 'Z' : '-'; 1055bf215546Sopenharmony_ci mask[5] = (info->mask & PIPE_MASK_S) ? 'S' : '-'; 1056bf215546Sopenharmony_ci mask[6] = 0; 1057bf215546Sopenharmony_ci 1058bf215546Sopenharmony_ci util_dump_member_begin(stream, "mask"); 1059bf215546Sopenharmony_ci util_dump_string(stream, mask); 1060bf215546Sopenharmony_ci util_dump_member_end(stream); 1061bf215546Sopenharmony_ci util_dump_member(stream, enum_tex_filter, info, filter); 1062bf215546Sopenharmony_ci 1063bf215546Sopenharmony_ci util_dump_member(stream, bool, info, scissor_enable); 1064bf215546Sopenharmony_ci util_dump_member_begin(stream, "scissor"); 1065bf215546Sopenharmony_ci util_dump_scissor_state(stream, &info->scissor); 1066bf215546Sopenharmony_ci util_dump_member_end(stream); 1067bf215546Sopenharmony_ci 1068bf215546Sopenharmony_ci util_dump_member(stream, bool, info, render_condition_enable); 1069bf215546Sopenharmony_ci 1070bf215546Sopenharmony_ci util_dump_struct_end(stream); 1071bf215546Sopenharmony_ci} 1072