u_dump_state.c revision 1ae9e588fa8e213f414f3d2d2e70c001deb304c8
1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/************************************************************************** 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Copyright 2008-2010 VMware, Inc. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * All Rights Reserved. 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * copy of this software and associated documentation files (the 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * "Software"), to deal in the Software without restriction, including 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * without limitation the rights to use, copy, modify, merge, publish, 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * distribute, sub license, and/or sell copies of the Software, and to 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * permit persons to whom the Software is furnished to do so, subject to 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * the following conditions: 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * The above copyright notice and this permission notice (including the 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * next paragraph) shall be included in all copies or substantial portions 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * of the Software. 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) **************************************************************************/ 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "pipe/p_compiler.h" 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "util/u_memory.h" 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "util/u_string.h" 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "util/u_format.h" 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "tgsi/tgsi_dump.h" 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "u_dump.h" 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Dump primitives 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static INLINE void 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_stream_writef(FILE *stream, const char *format, ...) 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static char buf[1024]; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned len; 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) va_list ap; 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) va_start(ap, format); 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) len = util_vsnprintf(buf, sizeof(buf), format, ap); 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) va_end(ap); 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fwrite(buf, len, 1, stream); 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_bool(FILE *stream, int value) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "%c", value ? '1' : '0'); 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_int(FILE *stream, long long int value) 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "%lli", value); 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)static void 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)util_dump_uint(FILE *stream, long long unsigned value) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles){ 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "%llu", value); 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_float(FILE *stream, double value) 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "%g", value); 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_string(FILE *stream, const char *str) 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("\"", stream); 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs(str, stream); 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("\"", stream); 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_enum(FILE *stream, const char *value) 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs(value, stream); 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_array_begin(FILE *stream) 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("{", stream); 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_array_end(FILE *stream) 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("}", stream); 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_elem_begin(FILE *stream) 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_elem_end(FILE *stream) 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs(", ", stream); 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_struct_begin(FILE *stream, const char *name) 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("{", stream); 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_struct_end(FILE *stream) 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("}", stream); 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_member_begin(FILE *stream, const char *name) 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "%s = ", name); 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_member_end(FILE *stream) 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs(", ", stream); 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_null(FILE *stream) 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) fputs("NULL", stream); 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static void 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)util_dump_ptr(FILE *stream, const void *value) 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles){ 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if(value) 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_stream_writef(stream, "0x%08lx", (unsigned long)(uintptr_t)value); 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) else 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_null(stream); 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Code saving macros. 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define util_dump_arg(_stream, _type, _arg) \ 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) do { \ 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_arg_begin(_stream, #_arg); \ 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_##_type(_stream, _arg); \ 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_arg_end(_stream); \ 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } while(0) 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define util_dump_ret(_stream, _type, _arg) \ 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) do { \ 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_ret_begin(_stream); \ 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_##_type(_stream, _arg); \ 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_ret_end(_stream); \ 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } while(0) 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define util_dump_array(_stream, _type, _obj, _size) \ 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) do { \ 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size_t idx; \ 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_array_begin(_stream); \ 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) for(idx = 0; idx < (_size); ++idx) { \ 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_elem_begin(_stream); \ 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_##_type(_stream, (_obj)[idx]); \ 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_elem_end(_stream); \ 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } \ 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) util_dump_array_end(_stream); \ 183 } while(0) 184 185#define util_dump_struct_array(_stream, _type, _obj, _size) \ 186 do { \ 187 size_t idx; \ 188 util_dump_array_begin(_stream); \ 189 for(idx = 0; idx < (_size); ++idx) { \ 190 util_dump_elem_begin(_stream); \ 191 util_dump_##_type(_stream, &(_obj)[idx]); \ 192 util_dump_elem_end(_stream); \ 193 } \ 194 util_dump_array_end(_stream); \ 195 } while(0) 196 197#define util_dump_member(_stream, _type, _obj, _member) \ 198 do { \ 199 util_dump_member_begin(_stream, #_member); \ 200 util_dump_##_type(_stream, (_obj)->_member); \ 201 util_dump_member_end(_stream); \ 202 } while(0) 203 204#define util_dump_arg_array(_stream, _type, _arg, _size) \ 205 do { \ 206 util_dump_arg_begin(_stream, #_arg); \ 207 util_dump_array(_stream, _type, _arg, _size); \ 208 util_dump_arg_end(_stream); \ 209 } while(0) 210 211#define util_dump_member_array(_stream, _type, _obj, _member) \ 212 do { \ 213 util_dump_member_begin(_stream, #_member); \ 214 util_dump_array(_stream, _type, (_obj)->_member, sizeof((_obj)->_member)/sizeof((_obj)->_member[0])); \ 215 util_dump_member_end(_stream); \ 216 } while(0) 217 218 219 220/* 221 * Wrappers for enum -> string dumpers. 222 */ 223 224 225static void 226util_dump_format(FILE *stream, enum pipe_format format) 227{ 228 util_dump_enum(stream, util_format_name(format)); 229} 230 231 232static void 233util_dump_enum_blend_factor(FILE *stream, unsigned value) 234{ 235 util_dump_enum(stream, util_dump_blend_factor(value, TRUE)); 236} 237 238static void 239util_dump_enum_blend_func(FILE *stream, unsigned value) 240{ 241 util_dump_enum(stream, util_dump_blend_func(value, TRUE)); 242} 243 244static void 245util_dump_enum_func(FILE *stream, unsigned value) 246{ 247 util_dump_enum(stream, util_dump_func(value, TRUE)); 248} 249 250 251/* 252 * Public functions 253 */ 254 255 256void 257util_dump_template(FILE *stream, const struct pipe_resource *templat) 258{ 259 if(!templat) { 260 util_dump_null(stream); 261 return; 262 } 263 264 util_dump_struct_begin(stream, "pipe_resource"); 265 266 util_dump_member(stream, int, templat, target); 267 util_dump_member(stream, format, templat, format); 268 269 util_dump_member_begin(stream, "width"); 270 util_dump_uint(stream, templat->width0); 271 util_dump_member_end(stream); 272 273 util_dump_member_begin(stream, "height"); 274 util_dump_uint(stream, templat->height0); 275 util_dump_member_end(stream); 276 277 util_dump_member_begin(stream, "depth"); 278 util_dump_uint(stream, templat->depth0); 279 util_dump_member_end(stream); 280 281 util_dump_member_begin(stream, "array_size"); 282 util_dump_uint(stream, templat->array_size); 283 util_dump_member_end(stream); 284 285 util_dump_member(stream, uint, templat, last_level); 286 util_dump_member(stream, uint, templat, usage); 287 util_dump_member(stream, uint, templat, bind); 288 util_dump_member(stream, uint, templat, flags); 289 290 util_dump_struct_end(stream); 291} 292 293 294void 295util_dump_rasterizer_state(FILE *stream, const struct pipe_rasterizer_state *state) 296{ 297 if(!state) { 298 util_dump_null(stream); 299 return; 300 } 301 302 util_dump_struct_begin(stream, "pipe_rasterizer_state"); 303 304 util_dump_member(stream, bool, state, flatshade); 305 util_dump_member(stream, bool, state, light_twoside); 306 util_dump_member(stream, uint, state, front_ccw); 307 util_dump_member(stream, uint, state, cull_face); 308 util_dump_member(stream, uint, state, fill_front); 309 util_dump_member(stream, uint, state, fill_back); 310 util_dump_member(stream, bool, state, offset_point); 311 util_dump_member(stream, bool, state, offset_line); 312 util_dump_member(stream, bool, state, offset_tri); 313 util_dump_member(stream, bool, state, scissor); 314 util_dump_member(stream, bool, state, poly_smooth); 315 util_dump_member(stream, bool, state, poly_stipple_enable); 316 util_dump_member(stream, bool, state, point_smooth); 317 util_dump_member(stream, uint, state, sprite_coord_enable); 318 util_dump_member(stream, bool, state, sprite_coord_mode); 319 util_dump_member(stream, bool, state, point_quad_rasterization); 320 util_dump_member(stream, bool, state, point_size_per_vertex); 321 util_dump_member(stream, bool, state, multisample); 322 util_dump_member(stream, bool, state, line_smooth); 323 util_dump_member(stream, bool, state, line_stipple_enable); 324 util_dump_member(stream, uint, state, line_stipple_factor); 325 util_dump_member(stream, uint, state, line_stipple_pattern); 326 util_dump_member(stream, bool, state, line_last_pixel); 327 util_dump_member(stream, bool, state, flatshade_first); 328 util_dump_member(stream, bool, state, gl_rasterization_rules); 329 330 util_dump_member(stream, float, state, line_width); 331 util_dump_member(stream, float, state, point_size); 332 util_dump_member(stream, float, state, offset_units); 333 util_dump_member(stream, float, state, offset_scale); 334 util_dump_member(stream, float, state, offset_clamp); 335 336 util_dump_struct_end(stream); 337} 338 339 340void 341util_dump_poly_stipple(FILE *stream, const struct pipe_poly_stipple *state) 342{ 343 if(!state) { 344 util_dump_null(stream); 345 return; 346 } 347 348 util_dump_struct_begin(stream, "pipe_poly_stipple"); 349 350 util_dump_member_begin(stream, "stipple"); 351 util_dump_member_array(stream, uint, state, stipple); 352 util_dump_member_end(stream); 353 354 util_dump_struct_end(stream); 355} 356 357 358void 359util_dump_viewport_state(FILE *stream, const struct pipe_viewport_state *state) 360{ 361 if(!state) { 362 util_dump_null(stream); 363 return; 364 } 365 366 util_dump_struct_begin(stream, "pipe_viewport_state"); 367 368 util_dump_member_array(stream, float, state, scale); 369 util_dump_member_array(stream, float, state, translate); 370 371 util_dump_struct_end(stream); 372} 373 374 375void 376util_dump_scissor_state(FILE *stream, const struct pipe_scissor_state *state) 377{ 378 if(!state) { 379 util_dump_null(stream); 380 return; 381 } 382 383 util_dump_struct_begin(stream, "pipe_scissor_state"); 384 385 util_dump_member(stream, uint, state, minx); 386 util_dump_member(stream, uint, state, miny); 387 util_dump_member(stream, uint, state, maxx); 388 util_dump_member(stream, uint, state, maxy); 389 390 util_dump_struct_end(stream); 391} 392 393 394void 395util_dump_clip_state(FILE *stream, const struct pipe_clip_state *state) 396{ 397 unsigned i; 398 399 if(!state) { 400 util_dump_null(stream); 401 return; 402 } 403 404 util_dump_struct_begin(stream, "pipe_clip_state"); 405 406 util_dump_member_begin(stream, "ucp"); 407 util_dump_array_begin(stream); 408 for(i = 0; i < PIPE_MAX_CLIP_PLANES; ++i) { 409 util_dump_elem_begin(stream); 410 util_dump_array(stream, float, state->ucp[i], 4); 411 util_dump_elem_end(stream); 412 } 413 util_dump_array_end(stream); 414 util_dump_member_end(stream); 415 416 util_dump_member(stream, uint, state, nr); 417 418 util_dump_struct_end(stream); 419} 420 421 422void 423util_dump_shader_state(FILE *stream, const struct pipe_shader_state *state) 424{ 425 char str[8192]; 426 unsigned i; 427 428 if(!state) { 429 util_dump_null(stream); 430 return; 431 } 432 433 tgsi_dump_str(state->tokens, 0, str, sizeof(str)); 434 435 util_dump_struct_begin(stream, "pipe_shader_state"); 436 437 util_dump_member_begin(stream, "tokens"); 438 util_dump_string(stream, str); 439 util_dump_member_end(stream); 440 441 util_dump_member_begin(stream, "stream_output"); 442 util_dump_struct_begin(stream, "pipe_stream_output_info"); 443 util_dump_member(stream, uint, &state->stream_output, num_outputs); 444 util_dump_member(stream, uint, &state->stream_output, stride); 445 util_dump_array_begin(stream); 446 for(i = 0; i < state->stream_output.num_outputs; ++i) { 447 util_dump_elem_begin(stream); 448 util_dump_struct_begin(stream, ""); /* anonymous */ 449 util_dump_member(stream, uint, &state->stream_output.output[i], register_index); 450 util_dump_member(stream, uint, &state->stream_output.output[i], register_mask); 451 util_dump_member(stream, uint, &state->stream_output.output[i], output_buffer); 452 util_dump_struct_end(stream); 453 util_dump_elem_end(stream); 454 } 455 util_dump_array_end(stream); 456 util_dump_struct_end(stream); 457 util_dump_member_end(stream); 458 459 util_dump_struct_end(stream); 460} 461 462 463void 464util_dump_depth_stencil_alpha_state(FILE *stream, const struct pipe_depth_stencil_alpha_state *state) 465{ 466 unsigned i; 467 468 if(!state) { 469 util_dump_null(stream); 470 return; 471 } 472 473 util_dump_struct_begin(stream, "pipe_depth_stencil_alpha_state"); 474 475 util_dump_member_begin(stream, "depth"); 476 util_dump_struct_begin(stream, "pipe_depth_state"); 477 util_dump_member(stream, bool, &state->depth, enabled); 478 if (state->depth.enabled) { 479 util_dump_member(stream, bool, &state->depth, writemask); 480 util_dump_member(stream, enum_func, &state->depth, func); 481 } 482 util_dump_struct_end(stream); 483 util_dump_member_end(stream); 484 485 util_dump_member_begin(stream, "stencil"); 486 util_dump_array_begin(stream); 487 for(i = 0; i < Elements(state->stencil); ++i) { 488 util_dump_elem_begin(stream); 489 util_dump_struct_begin(stream, "pipe_stencil_state"); 490 util_dump_member(stream, bool, &state->stencil[i], enabled); 491 if (state->stencil[i].enabled) { 492 util_dump_member(stream, enum_func, &state->stencil[i], func); 493 util_dump_member(stream, uint, &state->stencil[i], fail_op); 494 util_dump_member(stream, uint, &state->stencil[i], zpass_op); 495 util_dump_member(stream, uint, &state->stencil[i], zfail_op); 496 util_dump_member(stream, uint, &state->stencil[i], valuemask); 497 util_dump_member(stream, uint, &state->stencil[i], writemask); 498 } 499 util_dump_struct_end(stream); 500 util_dump_elem_end(stream); 501 } 502 util_dump_array_end(stream); 503 util_dump_member_end(stream); 504 505 util_dump_member_begin(stream, "alpha"); 506 util_dump_struct_begin(stream, "pipe_alpha_state"); 507 util_dump_member(stream, bool, &state->alpha, enabled); 508 if (state->alpha.enabled) { 509 util_dump_member(stream, enum_func, &state->alpha, func); 510 util_dump_member(stream, float, &state->alpha, ref_value); 511 } 512 util_dump_struct_end(stream); 513 util_dump_member_end(stream); 514 515 util_dump_struct_end(stream); 516} 517 518void 519util_dump_rt_blend_state(FILE *stream, const struct pipe_rt_blend_state *state) 520{ 521 util_dump_struct_begin(stream, "pipe_rt_blend_state"); 522 523 util_dump_member(stream, uint, state, blend_enable); 524 if (state->blend_enable) { 525 util_dump_member(stream, enum_blend_func, state, rgb_func); 526 util_dump_member(stream, enum_blend_factor, state, rgb_src_factor); 527 util_dump_member(stream, enum_blend_factor, state, rgb_dst_factor); 528 529 util_dump_member(stream, enum_blend_func, state, alpha_func); 530 util_dump_member(stream, enum_blend_factor, state, alpha_src_factor); 531 util_dump_member(stream, enum_blend_factor, state, alpha_dst_factor); 532 } 533 534 util_dump_member(stream, uint, state, colormask); 535 536 util_dump_struct_end(stream); 537} 538 539void 540util_dump_blend_state(FILE *stream, const struct pipe_blend_state *state) 541{ 542 unsigned valid_entries = 1; 543 544 if(!state) { 545 util_dump_null(stream); 546 return; 547 } 548 549 util_dump_struct_begin(stream, "pipe_blend_state"); 550 551 util_dump_member(stream, bool, state, dither); 552 553 util_dump_member(stream, bool, state, logicop_enable); 554 if (state->logicop_enable) { 555 util_dump_member(stream, enum_func, state, logicop_func); 556 } 557 else { 558 util_dump_member(stream, bool, state, independent_blend_enable); 559 560 util_dump_member_begin(stream, "rt"); 561 if (state->independent_blend_enable) 562 valid_entries = PIPE_MAX_COLOR_BUFS; 563 util_dump_struct_array(stream, rt_blend_state, state->rt, valid_entries); 564 util_dump_member_end(stream); 565 } 566 567 util_dump_struct_end(stream); 568} 569 570 571void 572util_dump_blend_color(FILE *stream, const struct pipe_blend_color *state) 573{ 574 if(!state) { 575 util_dump_null(stream); 576 return; 577 } 578 579 util_dump_struct_begin(stream, "pipe_blend_color"); 580 581 util_dump_member_array(stream, float, state, color); 582 583 util_dump_struct_end(stream); 584} 585 586void 587util_dump_stencil_ref(FILE *stream, const struct pipe_stencil_ref *state) 588{ 589 if(!state) { 590 util_dump_null(stream); 591 return; 592 } 593 594 util_dump_struct_begin(stream, "pipe_stencil_ref"); 595 596 util_dump_member_array(stream, uint, state, ref_value); 597 598 util_dump_struct_end(stream); 599} 600 601void 602util_dump_framebuffer_state(FILE *stream, const struct pipe_framebuffer_state *state) 603{ 604 util_dump_struct_begin(stream, "pipe_framebuffer_state"); 605 606 util_dump_member(stream, uint, state, width); 607 util_dump_member(stream, uint, state, height); 608 util_dump_member(stream, uint, state, nr_cbufs); 609 util_dump_member_array(stream, ptr, state, cbufs); 610 util_dump_member(stream, ptr, state, zsbuf); 611 612 util_dump_struct_end(stream); 613} 614 615 616void 617util_dump_sampler_state(FILE *stream, const struct pipe_sampler_state *state) 618{ 619 if(!state) { 620 util_dump_null(stream); 621 return; 622 } 623 624 util_dump_struct_begin(stream, "pipe_sampler_state"); 625 626 util_dump_member(stream, uint, state, wrap_s); 627 util_dump_member(stream, uint, state, wrap_t); 628 util_dump_member(stream, uint, state, wrap_r); 629 util_dump_member(stream, uint, state, min_img_filter); 630 util_dump_member(stream, uint, state, min_mip_filter); 631 util_dump_member(stream, uint, state, mag_img_filter); 632 util_dump_member(stream, uint, state, compare_mode); 633 util_dump_member(stream, enum_func, state, compare_func); 634 util_dump_member(stream, bool, state, normalized_coords); 635 util_dump_member(stream, uint, state, max_anisotropy); 636 util_dump_member(stream, float, state, lod_bias); 637 util_dump_member(stream, float, state, min_lod); 638 util_dump_member(stream, float, state, max_lod); 639 util_dump_member_array(stream, float, state, border_color.f); 640 641 util_dump_struct_end(stream); 642} 643 644 645void 646util_dump_surface(FILE *stream, const struct pipe_surface *state) 647{ 648 if(!state) { 649 util_dump_null(stream); 650 return; 651 } 652 653 util_dump_struct_begin(stream, "pipe_surface"); 654 655 util_dump_member(stream, format, state, format); 656 util_dump_member(stream, uint, state, width); 657 util_dump_member(stream, uint, state, height); 658 659 util_dump_member(stream, uint, state, usage); 660 661 util_dump_member(stream, ptr, state, texture); 662 util_dump_member(stream, uint, state, u.tex.level); 663 util_dump_member(stream, uint, state, u.tex.first_layer); 664 util_dump_member(stream, uint, state, u.tex.last_layer); 665 666 util_dump_struct_end(stream); 667} 668 669 670void 671util_dump_transfer(FILE *stream, const struct pipe_transfer *state) 672{ 673 if(!state) { 674 util_dump_null(stream); 675 return; 676 } 677 678 util_dump_struct_begin(stream, "pipe_transfer"); 679 680 util_dump_member(stream, ptr, state, resource); 681 /*util_dump_member(stream, uint, state, box);*/ 682 683 util_dump_member(stream, uint, state, stride); 684 util_dump_member(stream, uint, state, layer_stride); 685 686 /*util_dump_member(stream, ptr, state, data);*/ 687 688 util_dump_struct_end(stream); 689} 690 691 692void 693util_dump_vertex_buffer(FILE *stream, const struct pipe_vertex_buffer *state) 694{ 695 if(!state) { 696 util_dump_null(stream); 697 return; 698 } 699 700 util_dump_struct_begin(stream, "pipe_vertex_buffer"); 701 702 util_dump_member(stream, uint, state, stride); 703 util_dump_member(stream, uint, state, buffer_offset); 704 util_dump_member(stream, ptr, state, buffer); 705 706 util_dump_struct_end(stream); 707} 708 709 710void 711util_dump_vertex_element(FILE *stream, const struct pipe_vertex_element *state) 712{ 713 if(!state) { 714 util_dump_null(stream); 715 return; 716 } 717 718 util_dump_struct_begin(stream, "pipe_vertex_element"); 719 720 util_dump_member(stream, uint, state, src_offset); 721 722 util_dump_member(stream, uint, state, vertex_buffer_index); 723 724 util_dump_member(stream, format, state, src_format); 725 726 util_dump_struct_end(stream); 727} 728 729 730void 731util_dump_draw_info(FILE *stream, const struct pipe_draw_info *state) 732{ 733 if(!state) { 734 util_dump_null(stream); 735 return; 736 } 737 738 util_dump_struct_begin(stream, "pipe_draw_info"); 739 740 util_dump_member(stream, bool, state, indexed); 741 742 util_dump_member(stream, uint, state, mode); 743 util_dump_member(stream, uint, state, start); 744 util_dump_member(stream, uint, state, count); 745 746 util_dump_member(stream, uint, state, start_instance); 747 util_dump_member(stream, uint, state, instance_count); 748 749 util_dump_member(stream, int, state, index_bias); 750 util_dump_member(stream, uint, state, min_index); 751 util_dump_member(stream, uint, state, max_index); 752 753 util_dump_member(stream, bool, state, primitive_restart); 754 util_dump_member(stream, uint, state, restart_index); 755 756 util_dump_member(stream, ptr, state, count_from_stream_output); 757 758 util_dump_struct_end(stream); 759} 760