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