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