tr_context.c revision 9dee60969df7ff263e05430e69ef26982fe2bd94
1/************************************************************************** 2 * 3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28#include "pipe/p_util.h" 29 30#include "tr_stream.h" 31#include "tr_dump.h" 32#include "tr_state.h" 33#include "tr_screen.h" 34#include "tr_context.h" 35 36 37static INLINE void 38trace_context_set_edgeflags(struct pipe_context *_pipe, 39 const unsigned *bitfield) 40{ 41 struct trace_context *tr_ctx = trace_context(_pipe); 42 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 43 struct trace_stream *stream = tr_scr->stream; 44 struct pipe_context *pipe = tr_ctx->pipe; 45 46 trace_dump_call_begin(stream, "pipe_context", "set_edgeflags"); 47 48 trace_dump_arg(stream, ptr, pipe); 49 /* FIXME: we don't know how big this array is */ 50 trace_dump_arg(stream, ptr, bitfield); 51 52 pipe->set_edgeflags(pipe, bitfield);; 53 54 trace_dump_call_end(stream); 55} 56 57 58static INLINE boolean 59trace_context_draw_arrays(struct pipe_context *_pipe, 60 unsigned mode, unsigned start, unsigned count) 61{ 62 struct trace_context *tr_ctx = trace_context(_pipe); 63 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 64 struct trace_stream *stream = tr_scr->stream; 65 struct pipe_context *pipe = tr_ctx->pipe; 66 boolean result; 67 68 trace_dump_call_begin(stream, "pipe_context", "draw_arrays"); 69 70 trace_dump_arg(stream, ptr, pipe); 71 trace_dump_arg(stream, uint, mode); 72 trace_dump_arg(stream, uint, start); 73 trace_dump_arg(stream, uint, count); 74 75 result = pipe->draw_arrays(pipe, mode, start, count);; 76 77 trace_dump_ret(stream, bool, result); 78 79 trace_dump_call_end(stream); 80 81 return result; 82} 83 84 85static INLINE boolean 86trace_context_draw_elements(struct pipe_context *_pipe, 87 struct pipe_buffer *indexBuffer, 88 unsigned indexSize, 89 unsigned mode, unsigned start, unsigned count) 90{ 91 struct trace_context *tr_ctx = trace_context(_pipe); 92 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 93 struct trace_stream *stream = tr_scr->stream; 94 struct pipe_context *pipe = tr_ctx->pipe; 95 boolean result; 96 97 trace_dump_call_begin(stream, "pipe_context", "draw_elements"); 98 99 trace_dump_arg(stream, ptr, pipe); 100 trace_dump_arg(stream, ptr, indexBuffer); 101 trace_dump_arg(stream, uint, indexSize); 102 trace_dump_arg(stream, uint, mode); 103 trace_dump_arg(stream, uint, start); 104 trace_dump_arg(stream, uint, count); 105 106 result = pipe->draw_elements(pipe, indexBuffer, indexSize, mode, start, count);; 107 108 trace_dump_ret(stream, bool, result); 109 110 trace_dump_call_end(stream); 111 112 return result; 113} 114 115 116static INLINE boolean 117trace_context_draw_range_elements(struct pipe_context *_pipe, 118 struct pipe_buffer *indexBuffer, 119 unsigned indexSize, 120 unsigned minIndex, 121 unsigned maxIndex, 122 unsigned mode, 123 unsigned start, 124 unsigned count) 125{ 126 struct trace_context *tr_ctx = trace_context(_pipe); 127 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 128 struct trace_stream *stream = tr_scr->stream; 129 struct pipe_context *pipe = tr_ctx->pipe; 130 boolean result; 131 132 trace_dump_call_begin(stream, "pipe_context", "draw_range_elements"); 133 134 trace_dump_arg(stream, ptr, pipe); 135 trace_dump_arg(stream, ptr, indexBuffer); 136 trace_dump_arg(stream, uint, indexSize); 137 trace_dump_arg(stream, uint, minIndex); 138 trace_dump_arg(stream, uint, maxIndex); 139 trace_dump_arg(stream, uint, mode); 140 trace_dump_arg(stream, uint, start); 141 trace_dump_arg(stream, uint, count); 142 143 result = pipe->draw_range_elements(pipe, 144 indexBuffer, 145 indexSize, minIndex, maxIndex, 146 mode, start, count); 147 148 trace_dump_ret(stream, bool, result); 149 150 trace_dump_call_end(stream); 151 152 return result; 153} 154 155 156static INLINE struct pipe_query * 157trace_context_create_query(struct pipe_context *_pipe, 158 unsigned query_type) 159{ 160 struct trace_context *tr_ctx = trace_context(_pipe); 161 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 162 struct trace_stream *stream = tr_scr->stream; 163 struct pipe_context *pipe = tr_ctx->pipe; 164 struct pipe_query *result; 165 166 trace_dump_call_begin(stream, "pipe_context", "create_query"); 167 168 trace_dump_arg(stream, ptr, pipe); 169 trace_dump_arg(stream, uint, query_type); 170 171 result = pipe->create_query(pipe, query_type);; 172 173 trace_dump_ret(stream, ptr, result); 174 175 trace_dump_call_end(stream); 176 177 return result; 178} 179 180 181static INLINE void 182trace_context_destroy_query(struct pipe_context *_pipe, 183 struct pipe_query *query) 184{ 185 struct trace_context *tr_ctx = trace_context(_pipe); 186 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 187 struct trace_stream *stream = tr_scr->stream; 188 struct pipe_context *pipe = tr_ctx->pipe; 189 190 trace_dump_call_begin(stream, "pipe_context", "destroy_query"); 191 192 trace_dump_arg(stream, ptr, pipe); 193 trace_dump_arg(stream, ptr, query); 194 195 pipe->destroy_query(pipe, query);; 196 197 trace_dump_call_end(stream); 198} 199 200 201static INLINE void 202trace_context_begin_query(struct pipe_context *_pipe, 203 struct pipe_query *query) 204{ 205 struct trace_context *tr_ctx = trace_context(_pipe); 206 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 207 struct trace_stream *stream = tr_scr->stream; 208 struct pipe_context *pipe = tr_ctx->pipe; 209 210 trace_dump_call_begin(stream, "pipe_context", "begin_query"); 211 212 trace_dump_arg(stream, ptr, pipe); 213 trace_dump_arg(stream, ptr, query); 214 215 pipe->begin_query(pipe, query);; 216 217 trace_dump_call_end(stream); 218} 219 220 221static INLINE void 222trace_context_end_query(struct pipe_context *_pipe, 223 struct pipe_query *query) 224{ 225 struct trace_context *tr_ctx = trace_context(_pipe); 226 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 227 struct trace_stream *stream = tr_scr->stream; 228 struct pipe_context *pipe = tr_ctx->pipe; 229 230 trace_dump_call_begin(stream, "pipe_context", "end_query"); 231 232 trace_dump_arg(stream, ptr, pipe); 233 trace_dump_arg(stream, ptr, query); 234 235 pipe->end_query(pipe, query); 236 237 trace_dump_call_end(stream); 238} 239 240 241static INLINE boolean 242trace_context_get_query_result(struct pipe_context *_pipe, 243 struct pipe_query *query, 244 boolean wait, 245 uint64 *presult) 246{ 247 struct trace_context *tr_ctx = trace_context(_pipe); 248 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 249 struct trace_stream *stream = tr_scr->stream; 250 struct pipe_context *pipe = tr_ctx->pipe; 251 uint64 result; 252 boolean _result; 253 254 trace_dump_call_begin(stream, "pipe_context", "get_query_result"); 255 256 trace_dump_arg(stream, ptr, pipe); 257 258 _result = pipe->get_query_result(pipe, query, wait, presult);; 259 result = *presult; 260 261 trace_dump_arg(stream, uint, result); 262 trace_dump_ret(stream, bool, _result); 263 264 trace_dump_call_end(stream); 265 266 return _result; 267} 268 269 270static INLINE void * 271trace_context_create_blend_state(struct pipe_context *_pipe, 272 const struct pipe_blend_state *state) 273{ 274 struct trace_context *tr_ctx = trace_context(_pipe); 275 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 276 struct trace_stream *stream = tr_scr->stream; 277 struct pipe_context *pipe = tr_ctx->pipe; 278 void * result; 279 280 trace_dump_call_begin(stream, "pipe_context", "create_blend_state"); 281 282 trace_dump_arg(stream, ptr, pipe); 283 trace_dump_arg(stream, blend_state, state); 284 285 result = pipe->create_blend_state(pipe, state);; 286 287 trace_dump_call_end(stream); 288 289 return result; 290} 291 292 293static INLINE void 294trace_context_bind_blend_state(struct pipe_context *_pipe, 295 void *state) 296{ 297 struct trace_context *tr_ctx = trace_context(_pipe); 298 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 299 struct trace_stream *stream = tr_scr->stream; 300 struct pipe_context *pipe = tr_ctx->pipe; 301 302 trace_dump_call_begin(stream, "pipe_context", "bind_blend_state"); 303 304 trace_dump_arg(stream, ptr, pipe); 305 trace_dump_arg(stream, ptr, state); 306 307 pipe->bind_blend_state(pipe, state);; 308 309 trace_dump_call_end(stream); 310} 311 312 313static INLINE void 314trace_context_delete_blend_state(struct pipe_context *_pipe, 315 void *state) 316{ 317 struct trace_context *tr_ctx = trace_context(_pipe); 318 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 319 struct trace_stream *stream = tr_scr->stream; 320 struct pipe_context *pipe = tr_ctx->pipe; 321 322 trace_dump_call_begin(stream, "pipe_context", "delete_blend_state"); 323 324 trace_dump_arg(stream, ptr, pipe); 325 trace_dump_arg(stream, ptr, state); 326 327 pipe->delete_blend_state(pipe, state);; 328 329 trace_dump_call_end(stream); 330} 331 332 333static INLINE void * 334trace_context_create_sampler_state(struct pipe_context *_pipe, 335 const struct pipe_sampler_state *state) 336{ 337 struct trace_context *tr_ctx = trace_context(_pipe); 338 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 339 struct trace_stream *stream = tr_scr->stream; 340 struct pipe_context *pipe = tr_ctx->pipe; 341 void * result; 342 343 trace_dump_call_begin(stream, "pipe_context", "create_sampler_state"); 344 345 trace_dump_arg(stream, ptr, pipe); 346 trace_dump_arg(stream, ptr, state); 347 348 result = pipe->create_sampler_state(pipe, state);; 349 350 trace_dump_ret(stream, sampler_state, result); 351 352 trace_dump_call_end(stream); 353 354 return result; 355} 356 357 358static INLINE void 359trace_context_bind_sampler_states(struct pipe_context *_pipe, 360 unsigned num_states, void **states) 361{ 362 struct trace_context *tr_ctx = trace_context(_pipe); 363 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 364 struct trace_stream *stream = tr_scr->stream; 365 struct pipe_context *pipe = tr_ctx->pipe; 366 367 trace_dump_call_begin(stream, "pipe_context", "bind_sampler_states"); 368 369 trace_dump_arg(stream, ptr, pipe); 370 trace_dump_arg(stream, uint, num_states); 371 trace_dump_arg_array(stream, ptr, states, num_states); 372 373 pipe->bind_sampler_states(pipe, num_states, states);; 374 375 trace_dump_call_end(stream); 376} 377 378 379static INLINE void 380trace_context_delete_sampler_state(struct pipe_context *_pipe, 381 void *state) 382{ 383 struct trace_context *tr_ctx = trace_context(_pipe); 384 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 385 struct trace_stream *stream = tr_scr->stream; 386 struct pipe_context *pipe = tr_ctx->pipe; 387 388 trace_dump_call_begin(stream, "pipe_context", "delete_sampler_state"); 389 390 trace_dump_arg(stream, ptr, pipe); 391 trace_dump_arg(stream, ptr, state); 392 393 pipe->delete_sampler_state(pipe, state);; 394 395 trace_dump_call_end(stream); 396} 397 398 399static INLINE void * 400trace_context_create_rasterizer_state(struct pipe_context *_pipe, 401 const struct pipe_rasterizer_state *state) 402{ 403 struct trace_context *tr_ctx = trace_context(_pipe); 404 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 405 struct trace_stream *stream = tr_scr->stream; 406 struct pipe_context *pipe = tr_ctx->pipe; 407 void * result; 408 409 trace_dump_call_begin(stream, "pipe_context", "create_rasterizer_state"); 410 411 trace_dump_arg(stream, ptr, pipe); 412 trace_dump_arg(stream, rasterizer_state, state); 413 414 result = pipe->create_rasterizer_state(pipe, state);; 415 416 trace_dump_ret(stream, ptr, result); 417 418 trace_dump_call_end(stream); 419 420 return result; 421} 422 423 424static INLINE void 425trace_context_bind_rasterizer_state(struct pipe_context *_pipe, 426 void *state) 427{ 428 struct trace_context *tr_ctx = trace_context(_pipe); 429 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 430 struct trace_stream *stream = tr_scr->stream; 431 struct pipe_context *pipe = tr_ctx->pipe; 432 433 trace_dump_call_begin(stream, "pipe_context", "bind_rasterizer_state"); 434 435 trace_dump_arg(stream, ptr, pipe); 436 trace_dump_arg(stream, ptr, state); 437 438 pipe->bind_rasterizer_state(pipe, state);; 439 440 trace_dump_call_end(stream); 441} 442 443 444static INLINE void 445trace_context_delete_rasterizer_state(struct pipe_context *_pipe, 446 void *state) 447{ 448 struct trace_context *tr_ctx = trace_context(_pipe); 449 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 450 struct trace_stream *stream = tr_scr->stream; 451 struct pipe_context *pipe = tr_ctx->pipe; 452 453 trace_dump_call_begin(stream, "pipe_context", "delete_rasterizer_state"); 454 455 trace_dump_arg(stream, ptr, pipe); 456 trace_dump_arg(stream, ptr, state); 457 458 pipe->delete_rasterizer_state(pipe, state);; 459 460 trace_dump_call_end(stream); 461} 462 463 464static INLINE void * 465trace_context_create_depth_stencil_alpha_state(struct pipe_context *_pipe, 466 const struct pipe_depth_stencil_alpha_state *state) 467{ 468 struct trace_context *tr_ctx = trace_context(_pipe); 469 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 470 struct trace_stream *stream = tr_scr->stream; 471 struct pipe_context *pipe = tr_ctx->pipe; 472 void * result; 473 474 trace_dump_call_begin(stream, "pipe_context", "create_depth_stencil_alpha_state"); 475 476 result = pipe->create_depth_stencil_alpha_state(pipe, state);; 477 478 trace_dump_ret(stream, ptr, result); 479 trace_dump_arg(stream, depth_stencil_alpha_state, state); 480 481 trace_dump_call_end(stream); 482 483 return result; 484} 485 486 487static INLINE void 488trace_context_bind_depth_stencil_alpha_state(struct pipe_context *_pipe, 489 void *state) 490{ 491 struct trace_context *tr_ctx = trace_context(_pipe); 492 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 493 struct trace_stream *stream = tr_scr->stream; 494 struct pipe_context *pipe = tr_ctx->pipe; 495 496 trace_dump_call_begin(stream, "pipe_context", "bind_depth_stencil_alpha_state"); 497 498 trace_dump_arg(stream, ptr, pipe); 499 trace_dump_arg(stream, ptr, state); 500 501 pipe->bind_depth_stencil_alpha_state(pipe, state);; 502 503 trace_dump_call_end(stream); 504} 505 506 507static INLINE void 508trace_context_delete_depth_stencil_alpha_state(struct pipe_context *_pipe, 509 void *state) 510{ 511 struct trace_context *tr_ctx = trace_context(_pipe); 512 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 513 struct trace_stream *stream = tr_scr->stream; 514 struct pipe_context *pipe = tr_ctx->pipe; 515 516 trace_dump_call_begin(stream, "pipe_context", "delete_depth_stencil_alpha_state"); 517 518 trace_dump_arg(stream, ptr, pipe); 519 trace_dump_arg(stream, ptr, state); 520 521 pipe->delete_depth_stencil_alpha_state(pipe, state);; 522 523 trace_dump_call_end(stream); 524} 525 526 527static INLINE void * 528trace_context_create_fs_state(struct pipe_context *_pipe, 529 const struct pipe_shader_state *state) 530{ 531 struct trace_context *tr_ctx = trace_context(_pipe); 532 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 533 struct trace_stream *stream = tr_scr->stream; 534 struct pipe_context *pipe = tr_ctx->pipe; 535 void * result; 536 537 trace_dump_call_begin(stream, "pipe_context", "create_fs_state"); 538 539 trace_dump_arg(stream, ptr, pipe); 540 trace_dump_arg(stream, shader_state, state); 541 542 result = pipe->create_fs_state(pipe, state);; 543 544 trace_dump_ret(stream, ptr, result); 545 546 trace_dump_call_end(stream); 547 548 return result; 549} 550 551 552static INLINE void 553trace_context_bind_fs_state(struct pipe_context *_pipe, 554 void *state) 555{ 556 struct trace_context *tr_ctx = trace_context(_pipe); 557 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 558 struct trace_stream *stream = tr_scr->stream; 559 struct pipe_context *pipe = tr_ctx->pipe; 560 561 trace_dump_call_begin(stream, "pipe_context", "bind_fs_state"); 562 563 trace_dump_arg(stream, ptr, pipe); 564 trace_dump_arg(stream, ptr, state); 565 566 pipe->bind_fs_state(pipe, state);; 567 568 trace_dump_call_end(stream); 569} 570 571 572static INLINE void 573trace_context_delete_fs_state(struct pipe_context *_pipe, 574 void *state) 575{ 576 struct trace_context *tr_ctx = trace_context(_pipe); 577 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 578 struct trace_stream *stream = tr_scr->stream; 579 struct pipe_context *pipe = tr_ctx->pipe; 580 581 trace_dump_call_begin(stream, "pipe_context", "delete_fs_state"); 582 583 trace_dump_arg(stream, ptr, pipe); 584 trace_dump_arg(stream, ptr, state); 585 586 pipe->delete_fs_state(pipe, state);; 587 588 trace_dump_call_end(stream); 589} 590 591 592static INLINE void * 593trace_context_create_vs_state(struct pipe_context *_pipe, 594 const struct pipe_shader_state *state) 595{ 596 struct trace_context *tr_ctx = trace_context(_pipe); 597 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 598 struct trace_stream *stream = tr_scr->stream; 599 struct pipe_context *pipe = tr_ctx->pipe; 600 void * result; 601 602 trace_dump_call_begin(stream, "pipe_context", "create_vs_state"); 603 604 trace_dump_arg(stream, ptr, pipe); 605 trace_dump_arg(stream, shader_state, state); 606 607 result = pipe->create_vs_state(pipe, state);; 608 609 trace_dump_ret(stream, ptr, result); 610 611 trace_dump_call_end(stream); 612 613 return result; 614} 615 616 617static INLINE void 618trace_context_bind_vs_state(struct pipe_context *_pipe, 619 void *state) 620{ 621 struct trace_context *tr_ctx = trace_context(_pipe); 622 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 623 struct trace_stream *stream = tr_scr->stream; 624 struct pipe_context *pipe = tr_ctx->pipe; 625 626 trace_dump_call_begin(stream, "pipe_context", "bind_vs_state"); 627 628 trace_dump_arg(stream, ptr, pipe); 629 trace_dump_arg(stream, ptr, state); 630 631 pipe->bind_vs_state(pipe, state);; 632 633 trace_dump_call_end(stream); 634} 635 636 637static INLINE void 638trace_context_delete_vs_state(struct pipe_context *_pipe, 639 void *state) 640{ 641 struct trace_context *tr_ctx = trace_context(_pipe); 642 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 643 struct trace_stream *stream = tr_scr->stream; 644 struct pipe_context *pipe = tr_ctx->pipe; 645 646 trace_dump_call_begin(stream, "pipe_context", "delete_vs_state"); 647 648 trace_dump_arg(stream, ptr, pipe); 649 trace_dump_arg(stream, ptr, state); 650 651 pipe->delete_vs_state(pipe, state);; 652 653 trace_dump_call_end(stream); 654} 655 656 657static INLINE void 658trace_context_set_blend_color(struct pipe_context *_pipe, 659 const struct pipe_blend_color *state) 660{ 661 struct trace_context *tr_ctx = trace_context(_pipe); 662 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 663 struct trace_stream *stream = tr_scr->stream; 664 struct pipe_context *pipe = tr_ctx->pipe; 665 666 trace_dump_call_begin(stream, "pipe_context", "set_blend_color"); 667 668 trace_dump_arg(stream, ptr, pipe); 669 trace_dump_arg(stream, blend_color, state); 670 671 pipe->set_blend_color(pipe, state);; 672 673 trace_dump_call_end(stream); 674} 675 676 677static INLINE void 678trace_context_set_clip_state(struct pipe_context *_pipe, 679 const struct pipe_clip_state *state) 680{ 681 struct trace_context *tr_ctx = trace_context(_pipe); 682 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 683 struct trace_stream *stream = tr_scr->stream; 684 struct pipe_context *pipe = tr_ctx->pipe; 685 686 trace_dump_call_begin(stream, "pipe_context", "set_clip_state"); 687 688 trace_dump_arg(stream, ptr, pipe); 689 trace_dump_arg(stream, clip_state, state); 690 691 pipe->set_clip_state(pipe, state);; 692 693 trace_dump_call_end(stream); 694} 695 696 697static INLINE void 698trace_context_set_constant_buffer(struct pipe_context *_pipe, 699 uint shader, uint index, 700 const struct pipe_constant_buffer *buffer) 701{ 702 struct trace_context *tr_ctx = trace_context(_pipe); 703 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 704 struct trace_stream *stream = tr_scr->stream; 705 struct pipe_context *pipe = tr_ctx->pipe; 706 707 trace_dump_call_begin(stream, "pipe_context", "set_constant_buffer"); 708 709 trace_dump_arg(stream, ptr, pipe); 710 trace_dump_arg(stream, uint, shader); 711 trace_dump_arg(stream, uint, index); 712 trace_dump_arg(stream, constant_buffer, buffer); 713 714 pipe->set_constant_buffer(pipe, shader, index, buffer);; 715 716 trace_dump_call_end(stream); 717} 718 719 720static INLINE void 721trace_context_set_framebuffer_state(struct pipe_context *_pipe, 722 const struct pipe_framebuffer_state *state) 723{ 724 struct trace_context *tr_ctx = trace_context(_pipe); 725 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 726 struct trace_stream *stream = tr_scr->stream; 727 struct pipe_context *pipe = tr_ctx->pipe; 728 729 trace_dump_call_begin(stream, "pipe_context", "set_framebuffer_state"); 730 731 trace_dump_arg(stream, ptr, pipe); 732 trace_dump_arg(stream, framebuffer_state, state); 733 734 pipe->set_framebuffer_state(pipe, state);; 735 736 trace_dump_call_end(stream); 737} 738 739 740static INLINE void 741trace_context_set_polygon_stipple(struct pipe_context *_pipe, 742 const struct pipe_poly_stipple *state) 743{ 744 struct trace_context *tr_ctx = trace_context(_pipe); 745 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 746 struct trace_stream *stream = tr_scr->stream; 747 struct pipe_context *pipe = tr_ctx->pipe; 748 749 trace_dump_call_begin(stream, "pipe_context", "set_polygon_stipple"); 750 751 trace_dump_arg(stream, ptr, pipe); 752 trace_dump_arg(stream, poly_stipple, state); 753 754 pipe->set_polygon_stipple(pipe, state);; 755 756 trace_dump_call_end(stream); 757} 758 759 760static INLINE void 761trace_context_set_scissor_state(struct pipe_context *_pipe, 762 const struct pipe_scissor_state *state) 763{ 764 struct trace_context *tr_ctx = trace_context(_pipe); 765 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 766 struct trace_stream *stream = tr_scr->stream; 767 struct pipe_context *pipe = tr_ctx->pipe; 768 769 trace_dump_call_begin(stream, "pipe_context", "set_scissor_state"); 770 771 trace_dump_arg(stream, ptr, pipe); 772 trace_dump_arg(stream, scissor_state, state); 773 774 pipe->set_scissor_state(pipe, state);; 775 776 trace_dump_call_end(stream); 777} 778 779 780static INLINE void 781trace_context_set_viewport_state(struct pipe_context *_pipe, 782 const struct pipe_viewport_state *state) 783{ 784 struct trace_context *tr_ctx = trace_context(_pipe); 785 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 786 struct trace_stream *stream = tr_scr->stream; 787 struct pipe_context *pipe = tr_ctx->pipe; 788 789 trace_dump_call_begin(stream, "pipe_context", "set_viewport_state"); 790 791 trace_dump_arg(stream, ptr, pipe); 792 trace_dump_arg(stream, viewport_state, state); 793 794 pipe->set_viewport_state(pipe, state);; 795 796 trace_dump_call_end(stream); 797} 798 799 800static INLINE void 801trace_context_set_sampler_textures(struct pipe_context *_pipe, 802 unsigned num_textures, 803 struct pipe_texture **textures) 804{ 805 struct trace_context *tr_ctx = trace_context(_pipe); 806 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 807 struct trace_stream *stream = tr_scr->stream; 808 struct pipe_context *pipe = tr_ctx->pipe; 809 810 trace_dump_call_begin(stream, "pipe_context", "set_sampler_textures"); 811 812 trace_dump_arg(stream, ptr, pipe); 813 trace_dump_arg(stream, uint, num_textures); 814 trace_dump_arg_array(stream, ptr, textures, num_textures); 815 816 pipe->set_sampler_textures(pipe, num_textures, textures);; 817 818 trace_dump_call_end(stream); 819} 820 821 822static INLINE void 823trace_context_set_vertex_buffers(struct pipe_context *_pipe, 824 unsigned num_buffers, 825 const struct pipe_vertex_buffer *buffers) 826{ 827 struct trace_context *tr_ctx = trace_context(_pipe); 828 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 829 struct trace_stream *stream = tr_scr->stream; 830 struct pipe_context *pipe = tr_ctx->pipe; 831 832 trace_dump_call_begin(stream, "pipe_context", "set_vertex_buffers"); 833 834 trace_dump_arg(stream, ptr, pipe); 835 trace_dump_arg(stream, uint, num_buffers); 836 837 trace_dump_arg_begin(stream, "buffers"); 838 trace_dump_struct_array(stream, vertex_buffer, buffers, num_buffers); 839 trace_dump_arg_end(stream); 840 841 pipe->set_vertex_buffers(pipe, num_buffers, buffers);; 842 843 trace_dump_call_end(stream); 844} 845 846 847static INLINE void 848trace_context_set_vertex_elements(struct pipe_context *_pipe, 849 unsigned num_elements, 850 const struct pipe_vertex_element *elements) 851{ 852 struct trace_context *tr_ctx = trace_context(_pipe); 853 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 854 struct trace_stream *stream = tr_scr->stream; 855 struct pipe_context *pipe = tr_ctx->pipe; 856 857 trace_dump_call_begin(stream, "pipe_context", "set_vertex_elements"); 858 859 trace_dump_arg(stream, ptr, pipe); 860 trace_dump_arg(stream, uint, num_elements); 861 trace_dump_arg(stream, ptr, elements); 862 863 trace_dump_arg_begin(stream, "elements"); 864 trace_dump_struct_array(stream, vertex_element, elements, num_elements); 865 trace_dump_arg_end(stream); 866 867 pipe->set_vertex_elements(pipe, num_elements, elements);; 868 869 trace_dump_call_end(stream); 870} 871 872 873static INLINE void 874trace_context_surface_copy(struct pipe_context *_pipe, 875 boolean do_flip, 876 struct pipe_surface *dest, 877 unsigned destx, unsigned desty, 878 struct pipe_surface *src, 879 unsigned srcx, unsigned srcy, 880 unsigned width, unsigned height) 881{ 882 struct trace_context *tr_ctx = trace_context(_pipe); 883 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 884 struct trace_stream *stream = tr_scr->stream; 885 struct pipe_context *pipe = tr_ctx->pipe; 886 887 trace_dump_call_begin(stream, "pipe_context", "surface_copy"); 888 889 trace_dump_arg(stream, ptr, pipe); 890 trace_dump_arg(stream, bool, do_flip); 891 trace_dump_arg(stream, ptr, dest); 892 trace_dump_arg(stream, uint, destx); 893 trace_dump_arg(stream, uint, desty); 894 trace_dump_arg(stream, ptr, src); 895 trace_dump_arg(stream, uint, srcx); 896 trace_dump_arg(stream, uint, srcy); 897 trace_dump_arg(stream, uint, width); 898 trace_dump_arg(stream, uint, height); 899 900 pipe->surface_copy(pipe, do_flip, 901 dest, destx, desty, 902 src, srcx, srcy, width, height); 903 904 trace_dump_call_end(stream); 905} 906 907 908static INLINE void 909trace_context_surface_fill(struct pipe_context *_pipe, 910 struct pipe_surface *dst, 911 unsigned dstx, unsigned dsty, 912 unsigned width, unsigned height, 913 unsigned value) 914{ 915 struct trace_context *tr_ctx = trace_context(_pipe); 916 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 917 struct trace_stream *stream = tr_scr->stream; 918 struct pipe_context *pipe = tr_ctx->pipe; 919 920 trace_dump_call_begin(stream, "pipe_context", "surface_fill"); 921 922 trace_dump_arg(stream, ptr, pipe); 923 trace_dump_arg(stream, ptr, dst); 924 trace_dump_arg(stream, uint, dstx); 925 trace_dump_arg(stream, uint, dsty); 926 trace_dump_arg(stream, uint, width); 927 trace_dump_arg(stream, uint, height); 928 929 pipe->surface_fill(pipe, dst, dstx, dsty, width, height, value);; 930 931 trace_dump_call_end(stream); 932} 933 934 935static INLINE void 936trace_context_clear(struct pipe_context *_pipe, 937 struct pipe_surface *surface, 938 unsigned clearValue) 939{ 940 struct trace_context *tr_ctx = trace_context(_pipe); 941 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 942 struct trace_stream *stream = tr_scr->stream; 943 struct pipe_context *pipe = tr_ctx->pipe; 944 945 trace_dump_call_begin(stream, "pipe_context", "clear"); 946 947 trace_dump_arg(stream, ptr, pipe); 948 trace_dump_arg(stream, ptr, surface); 949 trace_dump_arg(stream, uint, clearValue); 950 951 pipe->clear(pipe, surface, clearValue);; 952 953 trace_dump_call_end(stream); 954} 955 956 957static INLINE void 958trace_context_flush(struct pipe_context *_pipe, 959 unsigned flags, 960 struct pipe_fence_handle **fence) 961{ 962 struct trace_context *tr_ctx = trace_context(_pipe); 963 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 964 struct trace_stream *stream = tr_scr->stream; 965 struct pipe_context *pipe = tr_ctx->pipe; 966 967 trace_dump_call_begin(stream, "pipe_context", "flush"); 968 969 trace_dump_arg(stream, ptr, pipe); 970 trace_dump_arg(stream, uint, flags); 971 trace_dump_arg(stream, ptr, fence); 972 973 pipe->flush(pipe, flags, fence);; 974 975 trace_dump_call_end(stream); 976} 977 978 979static INLINE void 980trace_context_destroy(struct pipe_context *_pipe) 981{ 982 struct trace_context *tr_ctx = trace_context(_pipe); 983 struct trace_screen *tr_scr = trace_screen(_pipe->screen); 984 struct trace_stream *stream = tr_scr->stream; 985 struct pipe_context *pipe = tr_ctx->pipe; 986 987 trace_dump_call_begin(stream, "pipe_context", "destroy"); 988 989 trace_dump_arg(stream, ptr, pipe); 990 991 pipe->destroy(pipe); 992 993 trace_dump_call_end(stream); 994 995 FREE(tr_ctx); 996} 997 998 999struct pipe_context * 1000trace_context_create(struct pipe_context *pipe) 1001{ 1002 struct trace_context *tr_ctx; 1003 1004 if(!debug_get_bool_option("GALLIUM_TRACE", FALSE)) 1005 return pipe; 1006 1007 tr_ctx = CALLOC_STRUCT(trace_context); 1008 if(!tr_ctx) 1009 return NULL; 1010 1011 tr_ctx->base.winsys = pipe->winsys; 1012 tr_ctx->base.screen = pipe->screen; 1013 tr_ctx->base.destroy = trace_context_destroy; 1014 tr_ctx->base.set_edgeflags = trace_context_set_edgeflags; 1015 tr_ctx->base.draw_arrays = trace_context_draw_arrays; 1016 tr_ctx->base.draw_elements = trace_context_draw_elements; 1017 tr_ctx->base.draw_range_elements = trace_context_draw_range_elements; 1018 tr_ctx->base.create_query = trace_context_create_query; 1019 tr_ctx->base.destroy_query = trace_context_destroy_query; 1020 tr_ctx->base.begin_query = trace_context_begin_query; 1021 tr_ctx->base.end_query = trace_context_end_query; 1022 tr_ctx->base.get_query_result = trace_context_get_query_result; 1023 tr_ctx->base.create_blend_state = trace_context_create_blend_state; 1024 tr_ctx->base.bind_blend_state = trace_context_bind_blend_state; 1025 tr_ctx->base.delete_blend_state = trace_context_delete_blend_state; 1026 tr_ctx->base.create_sampler_state = trace_context_create_sampler_state; 1027 tr_ctx->base.bind_sampler_states = trace_context_bind_sampler_states; 1028 tr_ctx->base.delete_sampler_state = trace_context_delete_sampler_state; 1029 tr_ctx->base.create_rasterizer_state = trace_context_create_rasterizer_state; 1030 tr_ctx->base.bind_rasterizer_state = trace_context_bind_rasterizer_state; 1031 tr_ctx->base.delete_rasterizer_state = trace_context_delete_rasterizer_state; 1032 tr_ctx->base.create_depth_stencil_alpha_state = trace_context_create_depth_stencil_alpha_state; 1033 tr_ctx->base.bind_depth_stencil_alpha_state = trace_context_bind_depth_stencil_alpha_state; 1034 tr_ctx->base.delete_depth_stencil_alpha_state = trace_context_delete_depth_stencil_alpha_state; 1035 tr_ctx->base.create_fs_state = trace_context_create_fs_state; 1036 tr_ctx->base.bind_fs_state = trace_context_bind_fs_state; 1037 tr_ctx->base.delete_fs_state = trace_context_delete_fs_state; 1038 tr_ctx->base.create_vs_state = trace_context_create_vs_state; 1039 tr_ctx->base.bind_vs_state = trace_context_bind_vs_state; 1040 tr_ctx->base.delete_vs_state = trace_context_delete_vs_state; 1041 tr_ctx->base.set_blend_color = trace_context_set_blend_color; 1042 tr_ctx->base.set_clip_state = trace_context_set_clip_state; 1043 tr_ctx->base.set_constant_buffer = trace_context_set_constant_buffer; 1044 tr_ctx->base.set_framebuffer_state = trace_context_set_framebuffer_state; 1045 tr_ctx->base.set_polygon_stipple = trace_context_set_polygon_stipple; 1046 tr_ctx->base.set_scissor_state = trace_context_set_scissor_state; 1047 tr_ctx->base.set_viewport_state = trace_context_set_viewport_state; 1048 tr_ctx->base.set_sampler_textures = trace_context_set_sampler_textures; 1049 tr_ctx->base.set_vertex_buffers = trace_context_set_vertex_buffers; 1050 tr_ctx->base.set_vertex_elements = trace_context_set_vertex_elements; 1051 tr_ctx->base.surface_copy = trace_context_surface_copy; 1052 tr_ctx->base.surface_fill = trace_context_surface_fill; 1053 tr_ctx->base.clear = trace_context_clear; 1054 tr_ctx->base.flush = trace_context_flush; 1055 1056 tr_ctx->pipe = pipe; 1057 1058 return &tr_ctx->base; 1059} 1060