1 /**************************************************************************
3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
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:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
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.
26 **************************************************************************/
28 #include "util/u_memory.h"
29 #include "util/u_simple_list.h"
31 #include "pipe/p_screen.h"
34 #include "tr_dump_state.h"
36 #include "tr_buffer.h"
37 #include "tr_screen.h"
38 #include "tr_texture.h"
41 static INLINE
struct pipe_buffer
*
42 trace_buffer_unwrap(struct trace_context
*tr_ctx
,
43 struct pipe_buffer
*buffer
)
45 struct trace_screen
*tr_scr
= trace_screen(tr_ctx
->base
.screen
);
46 struct trace_buffer
*tr_buf
;
51 tr_buf
= trace_buffer(buffer
);
53 assert(tr_buf
->buffer
);
54 assert(tr_buf
->buffer
->screen
== tr_scr
->screen
);
55 return tr_buf
->buffer
;
59 static INLINE
struct pipe_texture
*
60 trace_texture_unwrap(struct trace_context
*tr_ctx
,
61 struct pipe_texture
*texture
)
63 struct trace_texture
*tr_tex
;
68 tr_tex
= trace_texture(texture
);
70 assert(tr_tex
->texture
);
71 return tr_tex
->texture
;
75 static INLINE
struct pipe_surface
*
76 trace_surface_unwrap(struct trace_context
*tr_ctx
,
77 struct pipe_surface
*surface
)
79 struct trace_screen
*tr_scr
= trace_screen(tr_ctx
->base
.screen
);
80 struct trace_surface
*tr_surf
;
85 assert(surface
->texture
);
89 tr_surf
= trace_surface(surface
);
91 assert(tr_surf
->surface
);
92 assert(tr_surf
->surface
->texture
->screen
== tr_scr
->screen
);
93 return tr_surf
->surface
;
98 trace_context_set_edgeflags(struct pipe_context
*_pipe
,
99 const unsigned *bitfield
)
101 struct trace_context
*tr_ctx
= trace_context(_pipe
);
102 struct pipe_context
*pipe
= tr_ctx
->pipe
;
104 trace_dump_call_begin("pipe_context", "set_edgeflags");
106 trace_dump_arg(ptr
, pipe
);
107 /* FIXME: we don't know how big this array is */
108 trace_dump_arg(ptr
, bitfield
);
110 pipe
->set_edgeflags(pipe
, bitfield
);;
112 trace_dump_call_end();
116 static INLINE boolean
117 trace_context_draw_arrays(struct pipe_context
*_pipe
,
118 unsigned mode
, unsigned start
, unsigned count
)
120 struct trace_context
*tr_ctx
= trace_context(_pipe
);
121 struct pipe_context
*pipe
= tr_ctx
->pipe
;
124 if (tr_ctx
->curr
.fs
->disabled
|| tr_ctx
->curr
.vs
->disabled
)
127 trace_dump_call_begin("pipe_context", "draw_arrays");
129 trace_dump_arg(ptr
, pipe
);
130 trace_dump_arg(uint
, mode
);
131 trace_dump_arg(uint
, start
);
132 trace_dump_arg(uint
, count
);
134 result
= pipe
->draw_arrays(pipe
, mode
, start
, count
);;
136 trace_dump_ret(bool, result
);
138 trace_dump_call_end();
144 static INLINE boolean
145 trace_context_draw_elements(struct pipe_context
*_pipe
,
146 struct pipe_buffer
*_indexBuffer
,
148 unsigned mode
, unsigned start
, unsigned count
)
150 struct trace_context
*tr_ctx
= trace_context(_pipe
);
151 struct trace_buffer
*tr_buf
= trace_buffer(_indexBuffer
);
152 struct pipe_context
*pipe
= tr_ctx
->pipe
;
153 struct pipe_buffer
*indexBuffer
= tr_buf
->buffer
;
156 if (tr_ctx
->curr
.fs
->disabled
|| tr_ctx
->curr
.vs
->disabled
)
159 trace_screen_user_buffer_update(_pipe
->screen
, indexBuffer
);
161 trace_dump_call_begin("pipe_context", "draw_elements");
163 trace_dump_arg(ptr
, pipe
);
164 trace_dump_arg(ptr
, indexBuffer
);
165 trace_dump_arg(uint
, indexSize
);
166 trace_dump_arg(uint
, mode
);
167 trace_dump_arg(uint
, start
);
168 trace_dump_arg(uint
, count
);
170 result
= pipe
->draw_elements(pipe
, indexBuffer
, indexSize
, mode
, start
, count
);;
172 trace_dump_ret(bool, result
);
174 trace_dump_call_end();
180 static INLINE boolean
181 trace_context_draw_range_elements(struct pipe_context
*_pipe
,
182 struct pipe_buffer
*_indexBuffer
,
190 struct trace_context
*tr_ctx
= trace_context(_pipe
);
191 struct trace_buffer
*tr_buf
= trace_buffer(_indexBuffer
);
192 struct pipe_context
*pipe
= tr_ctx
->pipe
;
193 struct pipe_buffer
*indexBuffer
= tr_buf
->buffer
;
196 if (tr_ctx
->curr
.fs
->disabled
|| tr_ctx
->curr
.vs
->disabled
)
199 trace_screen_user_buffer_update(_pipe
->screen
, indexBuffer
);
201 trace_dump_call_begin("pipe_context", "draw_range_elements");
203 trace_dump_arg(ptr
, pipe
);
204 trace_dump_arg(ptr
, indexBuffer
);
205 trace_dump_arg(uint
, indexSize
);
206 trace_dump_arg(uint
, minIndex
);
207 trace_dump_arg(uint
, maxIndex
);
208 trace_dump_arg(uint
, mode
);
209 trace_dump_arg(uint
, start
);
210 trace_dump_arg(uint
, count
);
212 result
= pipe
->draw_range_elements(pipe
,
214 indexSize
, minIndex
, maxIndex
,
217 trace_dump_ret(bool, result
);
219 trace_dump_call_end();
225 static INLINE
struct pipe_query
*
226 trace_context_create_query(struct pipe_context
*_pipe
,
229 struct trace_context
*tr_ctx
= trace_context(_pipe
);
230 struct pipe_context
*pipe
= tr_ctx
->pipe
;
231 struct pipe_query
*result
;
233 trace_dump_call_begin("pipe_context", "create_query");
235 trace_dump_arg(ptr
, pipe
);
236 trace_dump_arg(uint
, query_type
);
238 result
= pipe
->create_query(pipe
, query_type
);;
240 trace_dump_ret(ptr
, result
);
242 trace_dump_call_end();
249 trace_context_destroy_query(struct pipe_context
*_pipe
,
250 struct pipe_query
*query
)
252 struct trace_context
*tr_ctx
= trace_context(_pipe
);
253 struct pipe_context
*pipe
= tr_ctx
->pipe
;
255 trace_dump_call_begin("pipe_context", "destroy_query");
257 trace_dump_arg(ptr
, pipe
);
258 trace_dump_arg(ptr
, query
);
260 pipe
->destroy_query(pipe
, query
);;
262 trace_dump_call_end();
267 trace_context_begin_query(struct pipe_context
*_pipe
,
268 struct pipe_query
*query
)
270 struct trace_context
*tr_ctx
= trace_context(_pipe
);
271 struct pipe_context
*pipe
= tr_ctx
->pipe
;
273 trace_dump_call_begin("pipe_context", "begin_query");
275 trace_dump_arg(ptr
, pipe
);
276 trace_dump_arg(ptr
, query
);
278 pipe
->begin_query(pipe
, query
);;
280 trace_dump_call_end();
285 trace_context_end_query(struct pipe_context
*_pipe
,
286 struct pipe_query
*query
)
288 struct trace_context
*tr_ctx
= trace_context(_pipe
);
289 struct pipe_context
*pipe
= tr_ctx
->pipe
;
291 trace_dump_call_begin("pipe_context", "end_query");
293 trace_dump_arg(ptr
, pipe
);
294 trace_dump_arg(ptr
, query
);
296 pipe
->end_query(pipe
, query
);
298 trace_dump_call_end();
302 static INLINE boolean
303 trace_context_get_query_result(struct pipe_context
*_pipe
,
304 struct pipe_query
*query
,
308 struct trace_context
*tr_ctx
= trace_context(_pipe
);
309 struct pipe_context
*pipe
= tr_ctx
->pipe
;
313 trace_dump_call_begin("pipe_context", "get_query_result");
315 trace_dump_arg(ptr
, pipe
);
317 _result
= pipe
->get_query_result(pipe
, query
, wait
, presult
);;
320 trace_dump_arg(uint
, result
);
321 trace_dump_ret(bool, _result
);
323 trace_dump_call_end();
330 trace_context_create_blend_state(struct pipe_context
*_pipe
,
331 const struct pipe_blend_state
*state
)
333 struct trace_context
*tr_ctx
= trace_context(_pipe
);
334 struct pipe_context
*pipe
= tr_ctx
->pipe
;
337 trace_dump_call_begin("pipe_context", "create_blend_state");
339 trace_dump_arg(ptr
, pipe
);
340 trace_dump_arg(blend_state
, state
);
342 result
= pipe
->create_blend_state(pipe
, state
);;
344 trace_dump_ret(ptr
, result
);
346 trace_dump_call_end();
353 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
356 struct trace_context
*tr_ctx
= trace_context(_pipe
);
357 struct pipe_context
*pipe
= tr_ctx
->pipe
;
359 trace_dump_call_begin("pipe_context", "bind_blend_state");
361 trace_dump_arg(ptr
, pipe
);
362 trace_dump_arg(ptr
, state
);
364 pipe
->bind_blend_state(pipe
, state
);;
366 trace_dump_call_end();
371 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
374 struct trace_context
*tr_ctx
= trace_context(_pipe
);
375 struct pipe_context
*pipe
= tr_ctx
->pipe
;
377 trace_dump_call_begin("pipe_context", "delete_blend_state");
379 trace_dump_arg(ptr
, pipe
);
380 trace_dump_arg(ptr
, state
);
382 pipe
->delete_blend_state(pipe
, state
);;
384 trace_dump_call_end();
389 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
390 const struct pipe_sampler_state
*state
)
392 struct trace_context
*tr_ctx
= trace_context(_pipe
);
393 struct pipe_context
*pipe
= tr_ctx
->pipe
;
396 trace_dump_call_begin("pipe_context", "create_sampler_state");
398 trace_dump_arg(ptr
, pipe
);
399 trace_dump_arg(sampler_state
, state
);
401 result
= pipe
->create_sampler_state(pipe
, state
);;
403 trace_dump_ret(ptr
, result
);
405 trace_dump_call_end();
412 trace_context_bind_sampler_states(struct pipe_context
*_pipe
,
413 unsigned num_states
, void **states
)
415 struct trace_context
*tr_ctx
= trace_context(_pipe
);
416 struct pipe_context
*pipe
= tr_ctx
->pipe
;
418 trace_dump_call_begin("pipe_context", "bind_sampler_states");
420 trace_dump_arg(ptr
, pipe
);
421 trace_dump_arg(uint
, num_states
);
422 trace_dump_arg_array(ptr
, states
, num_states
);
424 pipe
->bind_sampler_states(pipe
, num_states
, states
);;
426 trace_dump_call_end();
431 trace_context_delete_sampler_state(struct pipe_context
*_pipe
,
434 struct trace_context
*tr_ctx
= trace_context(_pipe
);
435 struct pipe_context
*pipe
= tr_ctx
->pipe
;
437 trace_dump_call_begin("pipe_context", "delete_sampler_state");
439 trace_dump_arg(ptr
, pipe
);
440 trace_dump_arg(ptr
, state
);
442 pipe
->delete_sampler_state(pipe
, state
);;
444 trace_dump_call_end();
449 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
450 const struct pipe_rasterizer_state
*state
)
452 struct trace_context
*tr_ctx
= trace_context(_pipe
);
453 struct pipe_context
*pipe
= tr_ctx
->pipe
;
456 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
458 trace_dump_arg(ptr
, pipe
);
459 trace_dump_arg(rasterizer_state
, state
);
461 result
= pipe
->create_rasterizer_state(pipe
, state
);;
463 trace_dump_ret(ptr
, result
);
465 trace_dump_call_end();
472 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
475 struct trace_context
*tr_ctx
= trace_context(_pipe
);
476 struct pipe_context
*pipe
= tr_ctx
->pipe
;
478 trace_dump_call_begin("pipe_context", "bind_rasterizer_state");
480 trace_dump_arg(ptr
, pipe
);
481 trace_dump_arg(ptr
, state
);
483 pipe
->bind_rasterizer_state(pipe
, state
);;
485 trace_dump_call_end();
490 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
493 struct trace_context
*tr_ctx
= trace_context(_pipe
);
494 struct pipe_context
*pipe
= tr_ctx
->pipe
;
496 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
498 trace_dump_arg(ptr
, pipe
);
499 trace_dump_arg(ptr
, state
);
501 pipe
->delete_rasterizer_state(pipe
, state
);;
503 trace_dump_call_end();
508 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
509 const struct pipe_depth_stencil_alpha_state
*state
)
511 struct trace_context
*tr_ctx
= trace_context(_pipe
);
512 struct pipe_context
*pipe
= tr_ctx
->pipe
;
515 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
517 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);;
519 trace_dump_arg(ptr
, pipe
);
520 trace_dump_arg(depth_stencil_alpha_state
, state
);
522 trace_dump_ret(ptr
, result
);
524 trace_dump_call_end();
531 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
534 struct trace_context
*tr_ctx
= trace_context(_pipe
);
535 struct pipe_context
*pipe
= tr_ctx
->pipe
;
537 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
539 trace_dump_arg(ptr
, pipe
);
540 trace_dump_arg(ptr
, state
);
542 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);;
544 trace_dump_call_end();
549 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
552 struct trace_context
*tr_ctx
= trace_context(_pipe
);
553 struct pipe_context
*pipe
= tr_ctx
->pipe
;
555 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
557 trace_dump_arg(ptr
, pipe
);
558 trace_dump_arg(ptr
, state
);
560 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);;
562 trace_dump_call_end();
567 trace_context_create_fs_state(struct pipe_context
*_pipe
,
568 const struct pipe_shader_state
*state
)
570 struct trace_context
*tr_ctx
= trace_context(_pipe
);
571 struct pipe_context
*pipe
= tr_ctx
->pipe
;
574 trace_dump_call_begin("pipe_context", "create_fs_state");
576 trace_dump_arg(ptr
, pipe
);
577 trace_dump_arg(shader_state
, state
);
579 result
= pipe
->create_fs_state(pipe
, state
);;
581 trace_dump_ret(ptr
, result
);
583 trace_dump_call_end();
585 result
= trace_shader_create(tr_ctx
, state
, result
);
592 trace_context_bind_fs_state(struct pipe_context
*_pipe
,
595 struct trace_context
*tr_ctx
= trace_context(_pipe
);
596 struct trace_shader
*tr_shdr
= trace_shader(_state
);
597 struct pipe_context
*pipe
= tr_ctx
->pipe
;
598 void *state
= tr_shdr
? tr_shdr
->state
: NULL
;
600 trace_dump_call_begin("pipe_context", "bind_fs_state");
602 trace_dump_arg(ptr
, pipe
);
603 trace_dump_arg(ptr
, state
);
605 tr_ctx
->curr
.fs
= tr_shdr
;
607 if (tr_shdr
&& tr_shdr
->replaced
)
608 state
= tr_shdr
->replaced
;
610 pipe
->bind_fs_state(pipe
, state
);
612 trace_dump_call_end();
617 trace_context_delete_fs_state(struct pipe_context
*_pipe
,
620 struct trace_context
*tr_ctx
= trace_context(_pipe
);
621 struct trace_shader
*tr_shdr
= trace_shader(_state
);
622 struct pipe_context
*pipe
= tr_ctx
->pipe
;
623 void *state
= tr_shdr
->state
;
625 trace_dump_call_begin("pipe_context", "delete_fs_state");
627 trace_dump_arg(ptr
, pipe
);
628 trace_dump_arg(ptr
, state
);
630 pipe
->delete_fs_state(pipe
, state
);
632 trace_dump_call_end();
634 trace_shader_destroy(tr_ctx
, tr_shdr
);
639 trace_context_create_vs_state(struct pipe_context
*_pipe
,
640 const struct pipe_shader_state
*state
)
642 struct trace_context
*tr_ctx
= trace_context(_pipe
);
643 struct pipe_context
*pipe
= tr_ctx
->pipe
;
646 trace_dump_call_begin("pipe_context", "create_vs_state");
648 trace_dump_arg(ptr
, pipe
);
649 trace_dump_arg(shader_state
, state
);
651 result
= pipe
->create_vs_state(pipe
, state
);
653 trace_dump_ret(ptr
, result
);
655 trace_dump_call_end();
657 result
= trace_shader_create(tr_ctx
, state
, result
);
664 trace_context_bind_vs_state(struct pipe_context
*_pipe
,
667 struct trace_context
*tr_ctx
= trace_context(_pipe
);
668 struct trace_shader
*tr_shdr
= trace_shader(_state
);
669 struct pipe_context
*pipe
= tr_ctx
->pipe
;
670 void *state
= tr_shdr
? tr_shdr
->state
: NULL
;
672 trace_dump_call_begin("pipe_context", "bind_vs_state");
674 trace_dump_arg(ptr
, pipe
);
675 trace_dump_arg(ptr
, state
);
677 tr_ctx
->curr
.vs
= tr_shdr
;
679 if (tr_shdr
&& tr_shdr
->replaced
)
680 state
= tr_shdr
->replaced
;
682 pipe
->bind_vs_state(pipe
, state
);;
684 trace_dump_call_end();
689 trace_context_delete_vs_state(struct pipe_context
*_pipe
,
692 struct trace_context
*tr_ctx
= trace_context(_pipe
);
693 struct trace_shader
*tr_shdr
= trace_shader(_state
);
694 struct pipe_context
*pipe
= tr_ctx
->pipe
;
695 void *state
= tr_shdr
->state
;
697 trace_dump_call_begin("pipe_context", "delete_vs_state");
699 trace_dump_arg(ptr
, pipe
);
700 trace_dump_arg(ptr
, state
);
702 pipe
->delete_vs_state(pipe
, state
);;
704 trace_dump_call_end();
706 trace_shader_destroy(tr_ctx
, tr_shdr
);
711 trace_context_set_blend_color(struct pipe_context
*_pipe
,
712 const struct pipe_blend_color
*state
)
714 struct trace_context
*tr_ctx
= trace_context(_pipe
);
715 struct pipe_context
*pipe
= tr_ctx
->pipe
;
717 trace_dump_call_begin("pipe_context", "set_blend_color");
719 trace_dump_arg(ptr
, pipe
);
720 trace_dump_arg(blend_color
, state
);
722 pipe
->set_blend_color(pipe
, state
);;
724 trace_dump_call_end();
729 trace_context_set_clip_state(struct pipe_context
*_pipe
,
730 const struct pipe_clip_state
*state
)
732 struct trace_context
*tr_ctx
= trace_context(_pipe
);
733 struct pipe_context
*pipe
= tr_ctx
->pipe
;
735 trace_dump_call_begin("pipe_context", "set_clip_state");
737 trace_dump_arg(ptr
, pipe
);
738 trace_dump_arg(clip_state
, state
);
740 pipe
->set_clip_state(pipe
, state
);;
742 trace_dump_call_end();
747 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
748 uint shader
, uint index
,
749 const struct pipe_constant_buffer
*buffer
)
751 struct trace_context
*tr_ctx
= trace_context(_pipe
);
752 struct pipe_context
*pipe
= tr_ctx
->pipe
;
755 trace_screen_user_buffer_update(_pipe
->screen
, buffer
->buffer
);
757 trace_dump_call_begin("pipe_context", "set_constant_buffer");
759 trace_dump_arg(ptr
, pipe
);
760 trace_dump_arg(uint
, shader
);
761 trace_dump_arg(uint
, index
);
762 trace_dump_arg(constant_buffer
, buffer
);
765 struct pipe_constant_buffer _buffer
;
766 _buffer
.buffer
= trace_buffer_unwrap(tr_ctx
, buffer
->buffer
);
767 pipe
->set_constant_buffer(pipe
, shader
, index
, &_buffer
);
769 pipe
->set_constant_buffer(pipe
, shader
, index
, buffer
);
772 trace_dump_call_end();
777 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
778 const struct pipe_framebuffer_state
*state
)
780 struct trace_context
*tr_ctx
= trace_context(_pipe
);
781 struct pipe_context
*pipe
= tr_ctx
->pipe
;
782 struct pipe_framebuffer_state unwrapped_state
;
785 /* Unwrap the input state */
786 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
787 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
788 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
789 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
790 unwrapped_state
.cbufs
[i
] = NULL
;
791 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
792 state
= &unwrapped_state
;
794 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
796 trace_dump_arg(ptr
, pipe
);
797 trace_dump_arg(framebuffer_state
, state
);
799 pipe
->set_framebuffer_state(pipe
, state
);;
801 trace_dump_call_end();
806 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
807 const struct pipe_poly_stipple
*state
)
809 struct trace_context
*tr_ctx
= trace_context(_pipe
);
810 struct pipe_context
*pipe
= tr_ctx
->pipe
;
812 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
814 trace_dump_arg(ptr
, pipe
);
815 trace_dump_arg(poly_stipple
, state
);
817 pipe
->set_polygon_stipple(pipe
, state
);;
819 trace_dump_call_end();
824 trace_context_set_scissor_state(struct pipe_context
*_pipe
,
825 const struct pipe_scissor_state
*state
)
827 struct trace_context
*tr_ctx
= trace_context(_pipe
);
828 struct pipe_context
*pipe
= tr_ctx
->pipe
;
830 trace_dump_call_begin("pipe_context", "set_scissor_state");
832 trace_dump_arg(ptr
, pipe
);
833 trace_dump_arg(scissor_state
, state
);
835 pipe
->set_scissor_state(pipe
, state
);;
837 trace_dump_call_end();
842 trace_context_set_viewport_state(struct pipe_context
*_pipe
,
843 const struct pipe_viewport_state
*state
)
845 struct trace_context
*tr_ctx
= trace_context(_pipe
);
846 struct pipe_context
*pipe
= tr_ctx
->pipe
;
848 trace_dump_call_begin("pipe_context", "set_viewport_state");
850 trace_dump_arg(ptr
, pipe
);
851 trace_dump_arg(viewport_state
, state
);
853 pipe
->set_viewport_state(pipe
, state
);;
855 trace_dump_call_end();
860 trace_context_set_sampler_textures(struct pipe_context
*_pipe
,
861 unsigned num_textures
,
862 struct pipe_texture
**textures
)
864 struct trace_context
*tr_ctx
= trace_context(_pipe
);
865 struct pipe_context
*pipe
= tr_ctx
->pipe
;
866 struct pipe_texture
*unwrapped_textures
[PIPE_MAX_SAMPLERS
];
869 for(i
= 0; i
< num_textures
; ++i
)
870 unwrapped_textures
[i
] = trace_texture_unwrap(tr_ctx
, textures
[i
]);
871 textures
= unwrapped_textures
;
873 trace_dump_call_begin("pipe_context", "set_sampler_textures");
875 trace_dump_arg(ptr
, pipe
);
876 trace_dump_arg(uint
, num_textures
);
877 trace_dump_arg_array(ptr
, textures
, num_textures
);
879 pipe
->set_sampler_textures(pipe
, num_textures
, textures
);;
881 trace_dump_call_end();
886 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
887 unsigned num_buffers
,
888 const struct pipe_vertex_buffer
*buffers
)
890 struct trace_context
*tr_ctx
= trace_context(_pipe
);
891 struct pipe_context
*pipe
= tr_ctx
->pipe
;
894 for(i
= 0; i
< num_buffers
; ++i
)
895 trace_screen_user_buffer_update(_pipe
->screen
, buffers
[i
].buffer
);
897 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
899 trace_dump_arg(ptr
, pipe
);
900 trace_dump_arg(uint
, num_buffers
);
902 trace_dump_arg_begin("buffers");
903 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
904 trace_dump_arg_end();
907 struct pipe_vertex_buffer
*_buffers
= malloc(num_buffers
* sizeof(*_buffers
));
908 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
909 for (i
= 0; i
< num_buffers
; i
++)
910 _buffers
[i
].buffer
= trace_buffer_unwrap(tr_ctx
, buffers
[i
].buffer
);
911 pipe
->set_vertex_buffers(pipe
, num_buffers
, _buffers
);
914 pipe
->set_vertex_buffers(pipe
, num_buffers
, NULL
);
917 trace_dump_call_end();
922 trace_context_set_vertex_elements(struct pipe_context
*_pipe
,
923 unsigned num_elements
,
924 const struct pipe_vertex_element
*elements
)
926 struct trace_context
*tr_ctx
= trace_context(_pipe
);
927 struct pipe_context
*pipe
= tr_ctx
->pipe
;
929 trace_dump_call_begin("pipe_context", "set_vertex_elements");
931 trace_dump_arg(ptr
, pipe
);
932 trace_dump_arg(uint
, num_elements
);
934 trace_dump_arg_begin("elements");
935 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
936 trace_dump_arg_end();
938 pipe
->set_vertex_elements(pipe
, num_elements
, elements
);;
940 trace_dump_call_end();
945 trace_context_surface_copy(struct pipe_context
*_pipe
,
946 struct pipe_surface
*dest
,
947 unsigned destx
, unsigned desty
,
948 struct pipe_surface
*src
,
949 unsigned srcx
, unsigned srcy
,
950 unsigned width
, unsigned height
)
952 struct trace_context
*tr_ctx
= trace_context(_pipe
);
953 struct pipe_context
*pipe
= tr_ctx
->pipe
;
955 dest
= trace_surface_unwrap(tr_ctx
, dest
);
956 src
= trace_surface_unwrap(tr_ctx
, src
);
958 trace_dump_call_begin("pipe_context", "surface_copy");
960 trace_dump_arg(ptr
, pipe
);
961 trace_dump_arg(ptr
, dest
);
962 trace_dump_arg(uint
, destx
);
963 trace_dump_arg(uint
, desty
);
964 trace_dump_arg(ptr
, src
);
965 trace_dump_arg(uint
, srcx
);
966 trace_dump_arg(uint
, srcy
);
967 trace_dump_arg(uint
, width
);
968 trace_dump_arg(uint
, height
);
970 pipe
->surface_copy(pipe
,
972 src
, srcx
, srcy
, width
, height
);
974 trace_dump_call_end();
979 trace_context_surface_fill(struct pipe_context
*_pipe
,
980 struct pipe_surface
*dst
,
981 unsigned dstx
, unsigned dsty
,
982 unsigned width
, unsigned height
,
985 struct trace_context
*tr_ctx
= trace_context(_pipe
);
986 struct pipe_context
*pipe
= tr_ctx
->pipe
;
988 dst
= trace_surface_unwrap(tr_ctx
, dst
);
990 trace_dump_call_begin("pipe_context", "surface_fill");
992 trace_dump_arg(ptr
, pipe
);
993 trace_dump_arg(ptr
, dst
);
994 trace_dump_arg(uint
, dstx
);
995 trace_dump_arg(uint
, dsty
);
996 trace_dump_arg(uint
, width
);
997 trace_dump_arg(uint
, height
);
999 pipe
->surface_fill(pipe
, dst
, dstx
, dsty
, width
, height
, value
);;
1001 trace_dump_call_end();
1006 trace_context_clear(struct pipe_context
*_pipe
,
1012 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1013 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1015 trace_dump_call_begin("pipe_context", "clear");
1017 trace_dump_arg(ptr
, pipe
);
1018 trace_dump_arg(uint
, buffers
);
1019 trace_dump_arg_array(float, rgba
, 4);
1020 trace_dump_arg(float, depth
);
1021 trace_dump_arg(uint
, stencil
);
1023 pipe
->clear(pipe
, buffers
, rgba
, depth
, stencil
);
1025 trace_dump_call_end();
1030 trace_context_flush(struct pipe_context
*_pipe
,
1032 struct pipe_fence_handle
**fence
)
1034 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1035 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1037 trace_dump_call_begin("pipe_context", "flush");
1039 trace_dump_arg(ptr
, pipe
);
1040 trace_dump_arg(uint
, flags
);
1042 pipe
->flush(pipe
, flags
, fence
);;
1045 trace_dump_ret(ptr
, *fence
);
1047 trace_dump_call_end();
1052 trace_context_destroy(struct pipe_context
*_pipe
)
1054 struct trace_screen
*tr_scr
= trace_screen(_pipe
->screen
);
1055 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1056 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1058 trace_dump_call_begin("pipe_context", "destroy");
1059 trace_dump_arg(ptr
, pipe
);
1060 trace_dump_call_end();
1062 trace_screen_remove_from_list(tr_scr
, contexts
, tr_ctx
);
1064 pipe
->destroy(pipe
);
1070 trace_is_texture_referenced( struct pipe_context
*_pipe
,
1071 struct pipe_texture
*_texture
,
1072 unsigned face
, unsigned level
)
1074 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1075 struct trace_texture
*tr_tex
= trace_texture(_texture
);
1076 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1077 struct pipe_texture
*texture
= tr_tex
->texture
;
1078 unsigned int referenced
;
1080 trace_dump_call_begin("pipe_context", "is_texture_referenced");
1081 trace_dump_arg(ptr
, pipe
);
1082 trace_dump_arg(ptr
, texture
);
1083 trace_dump_arg(uint
, face
);
1084 trace_dump_arg(uint
, level
);
1086 referenced
= pipe
->is_texture_referenced(pipe
, texture
, face
, level
);
1088 trace_dump_ret(uint
, referenced
);
1089 trace_dump_call_end();
1095 trace_is_buffer_referenced( struct pipe_context
*_pipe
,
1096 struct pipe_buffer
*_buf
)
1098 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1099 struct trace_buffer
*tr_buf
= trace_buffer(_buf
);
1100 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1101 struct pipe_buffer
*buf
= tr_buf
->buffer
;
1102 unsigned int referenced
;
1104 trace_dump_call_begin("pipe_context", "is_buffer_referenced");
1105 trace_dump_arg(ptr
, pipe
);
1106 trace_dump_arg(ptr
, buf
);
1108 referenced
= pipe
->is_buffer_referenced(pipe
, buf
);
1110 trace_dump_ret(uint
, referenced
);
1111 trace_dump_call_end();
1116 struct pipe_context
*
1117 trace_context_create(struct pipe_screen
*_screen
,
1118 struct pipe_context
*pipe
)
1120 struct trace_screen
*tr_scr
;
1121 struct trace_context
*tr_ctx
;
1122 struct pipe_screen
*screen
;
1127 if(!trace_dump_trace_enabled())
1130 tr_scr
= trace_screen(_screen
);
1131 screen
= tr_scr
->screen
;
1133 tr_ctx
= CALLOC_STRUCT(trace_context
);
1137 pipe_mutex_init(tr_ctx
->list_mutex
);
1138 make_empty_list(&tr_ctx
->shaders
);
1140 tr_ctx
->base
.winsys
= _screen
->winsys
;
1141 tr_ctx
->base
.screen
= _screen
;
1142 tr_ctx
->base
.destroy
= trace_context_destroy
;
1143 tr_ctx
->base
.set_edgeflags
= trace_context_set_edgeflags
;
1144 tr_ctx
->base
.draw_arrays
= trace_context_draw_arrays
;
1145 tr_ctx
->base
.draw_elements
= trace_context_draw_elements
;
1146 tr_ctx
->base
.draw_range_elements
= trace_context_draw_range_elements
;
1147 tr_ctx
->base
.create_query
= trace_context_create_query
;
1148 tr_ctx
->base
.destroy_query
= trace_context_destroy_query
;
1149 tr_ctx
->base
.begin_query
= trace_context_begin_query
;
1150 tr_ctx
->base
.end_query
= trace_context_end_query
;
1151 tr_ctx
->base
.get_query_result
= trace_context_get_query_result
;
1152 tr_ctx
->base
.create_blend_state
= trace_context_create_blend_state
;
1153 tr_ctx
->base
.bind_blend_state
= trace_context_bind_blend_state
;
1154 tr_ctx
->base
.delete_blend_state
= trace_context_delete_blend_state
;
1155 tr_ctx
->base
.create_sampler_state
= trace_context_create_sampler_state
;
1156 tr_ctx
->base
.bind_sampler_states
= trace_context_bind_sampler_states
;
1157 tr_ctx
->base
.delete_sampler_state
= trace_context_delete_sampler_state
;
1158 tr_ctx
->base
.create_rasterizer_state
= trace_context_create_rasterizer_state
;
1159 tr_ctx
->base
.bind_rasterizer_state
= trace_context_bind_rasterizer_state
;
1160 tr_ctx
->base
.delete_rasterizer_state
= trace_context_delete_rasterizer_state
;
1161 tr_ctx
->base
.create_depth_stencil_alpha_state
= trace_context_create_depth_stencil_alpha_state
;
1162 tr_ctx
->base
.bind_depth_stencil_alpha_state
= trace_context_bind_depth_stencil_alpha_state
;
1163 tr_ctx
->base
.delete_depth_stencil_alpha_state
= trace_context_delete_depth_stencil_alpha_state
;
1164 tr_ctx
->base
.create_fs_state
= trace_context_create_fs_state
;
1165 tr_ctx
->base
.bind_fs_state
= trace_context_bind_fs_state
;
1166 tr_ctx
->base
.delete_fs_state
= trace_context_delete_fs_state
;
1167 tr_ctx
->base
.create_vs_state
= trace_context_create_vs_state
;
1168 tr_ctx
->base
.bind_vs_state
= trace_context_bind_vs_state
;
1169 tr_ctx
->base
.delete_vs_state
= trace_context_delete_vs_state
;
1170 tr_ctx
->base
.set_blend_color
= trace_context_set_blend_color
;
1171 tr_ctx
->base
.set_clip_state
= trace_context_set_clip_state
;
1172 tr_ctx
->base
.set_constant_buffer
= trace_context_set_constant_buffer
;
1173 tr_ctx
->base
.set_framebuffer_state
= trace_context_set_framebuffer_state
;
1174 tr_ctx
->base
.set_polygon_stipple
= trace_context_set_polygon_stipple
;
1175 tr_ctx
->base
.set_scissor_state
= trace_context_set_scissor_state
;
1176 tr_ctx
->base
.set_viewport_state
= trace_context_set_viewport_state
;
1177 tr_ctx
->base
.set_sampler_textures
= trace_context_set_sampler_textures
;
1178 tr_ctx
->base
.set_vertex_buffers
= trace_context_set_vertex_buffers
;
1179 tr_ctx
->base
.set_vertex_elements
= trace_context_set_vertex_elements
;
1180 tr_ctx
->base
.surface_copy
= trace_context_surface_copy
;
1181 tr_ctx
->base
.surface_fill
= trace_context_surface_fill
;
1182 tr_ctx
->base
.clear
= trace_context_clear
;
1183 tr_ctx
->base
.flush
= trace_context_flush
;
1184 tr_ctx
->base
.is_texture_referenced
= trace_is_texture_referenced
;
1185 tr_ctx
->base
.is_buffer_referenced
= trace_is_buffer_referenced
;
1187 tr_ctx
->pipe
= pipe
;
1189 trace_dump_call_begin("", "pipe_context_create");
1190 trace_dump_arg(ptr
, screen
);
1191 trace_dump_ret(ptr
, pipe
);
1192 trace_dump_call_end();
1194 trace_screen_add_to_list(tr_scr
, contexts
, tr_ctx
);
1196 return &tr_ctx
->base
;