1 /**************************************************************************
3 * Copyright 2008 VMware, Inc.
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 VMWARE 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_inlines.h"
29 #include "util/u_memory.h"
30 #include "util/u_simple_list.h"
32 #include "pipe/p_format.h"
33 #include "pipe/p_screen.h"
36 #include "tr_dump_defines.h"
37 #include "tr_dump_state.h"
38 #include "tr_public.h"
39 #include "tr_screen.h"
40 #include "tr_texture.h"
41 #include "tr_context.h"
48 struct pipe_query
*query
;
52 static INLINE
struct trace_query
*
53 trace_query(struct pipe_query
*query
) {
54 return (struct trace_query
*)query
;
58 static INLINE
struct pipe_query
*
59 trace_query_unwrap(struct pipe_query
*query
)
62 return trace_query(query
)->query
;
69 static INLINE
struct pipe_resource
*
70 trace_resource_unwrap(struct trace_context
*tr_ctx
,
71 struct pipe_resource
*resource
)
73 struct trace_resource
*tr_res
;
78 tr_res
= trace_resource(resource
);
80 assert(tr_res
->resource
);
81 return tr_res
->resource
;
85 static INLINE
struct pipe_surface
*
86 trace_surface_unwrap(struct trace_context
*tr_ctx
,
87 struct pipe_surface
*surface
)
89 struct trace_screen
*tr_scr
= trace_screen(tr_ctx
->base
.screen
);
90 struct trace_surface
*tr_surf
;
95 assert(surface
->texture
);
99 tr_surf
= trace_surface(surface
);
101 assert(tr_surf
->surface
);
102 assert(tr_surf
->surface
->texture
->screen
== tr_scr
->screen
);
104 return tr_surf
->surface
;
109 trace_context_draw_vbo(struct pipe_context
*_pipe
,
110 const struct pipe_draw_info
*info
)
112 struct trace_context
*tr_ctx
= trace_context(_pipe
);
113 struct pipe_context
*pipe
= tr_ctx
->pipe
;
115 trace_dump_call_begin("pipe_context", "draw_vbo");
117 trace_dump_arg(ptr
, pipe
);
118 trace_dump_arg(draw_info
, info
);
120 trace_dump_trace_flush();
122 pipe
->draw_vbo(pipe
, info
);
124 trace_dump_call_end();
128 static INLINE
struct pipe_query
*
129 trace_context_create_query(struct pipe_context
*_pipe
,
132 struct trace_context
*tr_ctx
= trace_context(_pipe
);
133 struct pipe_context
*pipe
= tr_ctx
->pipe
;
134 struct pipe_query
*query
;
136 trace_dump_call_begin("pipe_context", "create_query");
138 trace_dump_arg(ptr
, pipe
);
139 trace_dump_arg(query_type
, query_type
);
141 query
= pipe
->create_query(pipe
, query_type
);
143 trace_dump_ret(ptr
, query
);
145 trace_dump_call_end();
147 /* Wrap query object. */
149 struct trace_query
*tr_query
= CALLOC_STRUCT(trace_query
);
151 tr_query
->type
= query_type
;
152 tr_query
->query
= query
;
153 query
= (struct pipe_query
*)tr_query
;
155 pipe
->destroy_query(pipe
, query
);
165 trace_context_destroy_query(struct pipe_context
*_pipe
,
166 struct pipe_query
*_query
)
168 struct trace_context
*tr_ctx
= trace_context(_pipe
);
169 struct pipe_context
*pipe
= tr_ctx
->pipe
;
170 struct trace_query
*tr_query
= trace_query(_query
);
171 struct pipe_query
*query
= tr_query
->query
;
175 trace_dump_call_begin("pipe_context", "destroy_query");
177 trace_dump_arg(ptr
, pipe
);
178 trace_dump_arg(ptr
, query
);
180 pipe
->destroy_query(pipe
, query
);
182 trace_dump_call_end();
187 trace_context_begin_query(struct pipe_context
*_pipe
,
188 struct pipe_query
*query
)
190 struct trace_context
*tr_ctx
= trace_context(_pipe
);
191 struct pipe_context
*pipe
= tr_ctx
->pipe
;
193 query
= trace_query_unwrap(query
);
195 trace_dump_call_begin("pipe_context", "begin_query");
197 trace_dump_arg(ptr
, pipe
);
198 trace_dump_arg(ptr
, query
);
200 pipe
->begin_query(pipe
, query
);
202 trace_dump_call_end();
207 trace_context_end_query(struct pipe_context
*_pipe
,
208 struct pipe_query
*query
)
210 struct trace_context
*tr_ctx
= trace_context(_pipe
);
211 struct pipe_context
*pipe
= tr_ctx
->pipe
;
213 query
= trace_query_unwrap(query
);
215 trace_dump_call_begin("pipe_context", "end_query");
217 trace_dump_arg(ptr
, pipe
);
218 trace_dump_arg(ptr
, query
);
220 pipe
->end_query(pipe
, query
);
222 trace_dump_call_end();
226 static INLINE boolean
227 trace_context_get_query_result(struct pipe_context
*_pipe
,
228 struct pipe_query
*_query
,
230 union pipe_query_result
*result
)
232 struct trace_context
*tr_ctx
= trace_context(_pipe
);
233 struct pipe_context
*pipe
= tr_ctx
->pipe
;
234 struct trace_query
*tr_query
= trace_query(_query
);
235 struct pipe_query
*query
= tr_query
->query
;
238 trace_dump_call_begin("pipe_context", "get_query_result");
240 trace_dump_arg(ptr
, pipe
);
241 trace_dump_arg(ptr
, query
);
243 ret
= pipe
->get_query_result(pipe
, query
, wait
, result
);
245 trace_dump_arg_begin("result");
247 trace_dump_query_result(tr_query
->type
, result
);
251 trace_dump_arg_end();
253 trace_dump_ret(bool, ret
);
255 trace_dump_call_end();
262 trace_context_create_blend_state(struct pipe_context
*_pipe
,
263 const struct pipe_blend_state
*state
)
265 struct trace_context
*tr_ctx
= trace_context(_pipe
);
266 struct pipe_context
*pipe
= tr_ctx
->pipe
;
269 trace_dump_call_begin("pipe_context", "create_blend_state");
271 trace_dump_arg(ptr
, pipe
);
272 trace_dump_arg(blend_state
, state
);
274 result
= pipe
->create_blend_state(pipe
, state
);
276 trace_dump_ret(ptr
, result
);
278 trace_dump_call_end();
285 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
288 struct trace_context
*tr_ctx
= trace_context(_pipe
);
289 struct pipe_context
*pipe
= tr_ctx
->pipe
;
291 trace_dump_call_begin("pipe_context", "bind_blend_state");
293 trace_dump_arg(ptr
, pipe
);
294 trace_dump_arg(ptr
, state
);
296 pipe
->bind_blend_state(pipe
, state
);
298 trace_dump_call_end();
303 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
306 struct trace_context
*tr_ctx
= trace_context(_pipe
);
307 struct pipe_context
*pipe
= tr_ctx
->pipe
;
309 trace_dump_call_begin("pipe_context", "delete_blend_state");
311 trace_dump_arg(ptr
, pipe
);
312 trace_dump_arg(ptr
, state
);
314 pipe
->delete_blend_state(pipe
, state
);
316 trace_dump_call_end();
321 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
322 const struct pipe_sampler_state
*state
)
324 struct trace_context
*tr_ctx
= trace_context(_pipe
);
325 struct pipe_context
*pipe
= tr_ctx
->pipe
;
328 trace_dump_call_begin("pipe_context", "create_sampler_state");
330 trace_dump_arg(ptr
, pipe
);
331 trace_dump_arg(sampler_state
, state
);
333 result
= pipe
->create_sampler_state(pipe
, state
);
335 trace_dump_ret(ptr
, result
);
337 trace_dump_call_end();
344 trace_context_bind_sampler_states(struct pipe_context
*_pipe
,
350 struct trace_context
*tr_ctx
= trace_context(_pipe
);
351 struct pipe_context
*pipe
= tr_ctx
->pipe
;
353 /* remove this when we have pipe->bind_sampler_states(..., start, ...) */
356 trace_dump_call_begin("pipe_context", "bind_sampler_states");
358 trace_dump_arg(ptr
, pipe
);
359 trace_dump_arg(uint
, shader
);
360 trace_dump_arg(uint
, start
);
361 trace_dump_arg(uint
, num_states
);
362 trace_dump_arg_array(ptr
, states
, num_states
);
364 pipe
->bind_sampler_states(pipe
, shader
, start
, num_states
, states
);
366 trace_dump_call_end();
371 trace_context_delete_sampler_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_sampler_state");
379 trace_dump_arg(ptr
, pipe
);
380 trace_dump_arg(ptr
, state
);
382 pipe
->delete_sampler_state(pipe
, state
);
384 trace_dump_call_end();
389 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
390 const struct pipe_rasterizer_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_rasterizer_state");
398 trace_dump_arg(ptr
, pipe
);
399 trace_dump_arg(rasterizer_state
, state
);
401 result
= pipe
->create_rasterizer_state(pipe
, state
);
403 trace_dump_ret(ptr
, result
);
405 trace_dump_call_end();
412 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
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_rasterizer_state");
420 trace_dump_arg(ptr
, pipe
);
421 trace_dump_arg(ptr
, state
);
423 pipe
->bind_rasterizer_state(pipe
, state
);
425 trace_dump_call_end();
430 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
433 struct trace_context
*tr_ctx
= trace_context(_pipe
);
434 struct pipe_context
*pipe
= tr_ctx
->pipe
;
436 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
438 trace_dump_arg(ptr
, pipe
);
439 trace_dump_arg(ptr
, state
);
441 pipe
->delete_rasterizer_state(pipe
, state
);
443 trace_dump_call_end();
448 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
449 const struct pipe_depth_stencil_alpha_state
*state
)
451 struct trace_context
*tr_ctx
= trace_context(_pipe
);
452 struct pipe_context
*pipe
= tr_ctx
->pipe
;
455 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
457 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
459 trace_dump_arg(ptr
, pipe
);
460 trace_dump_arg(depth_stencil_alpha_state
, state
);
462 trace_dump_ret(ptr
, result
);
464 trace_dump_call_end();
471 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
474 struct trace_context
*tr_ctx
= trace_context(_pipe
);
475 struct pipe_context
*pipe
= tr_ctx
->pipe
;
477 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
479 trace_dump_arg(ptr
, pipe
);
480 trace_dump_arg(ptr
, state
);
482 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
484 trace_dump_call_end();
489 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
492 struct trace_context
*tr_ctx
= trace_context(_pipe
);
493 struct pipe_context
*pipe
= tr_ctx
->pipe
;
495 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
497 trace_dump_arg(ptr
, pipe
);
498 trace_dump_arg(ptr
, state
);
500 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
502 trace_dump_call_end();
506 #define TRACE_SHADER_STATE(shader_type) \
507 static INLINE void * \
508 trace_context_create_##shader_type##_state(struct pipe_context *_pipe, \
509 const struct pipe_shader_state *state) \
511 struct trace_context *tr_ctx = trace_context(_pipe); \
512 struct pipe_context *pipe = tr_ctx->pipe; \
514 trace_dump_call_begin("pipe_context", "create_" #shader_type "_state"); \
515 trace_dump_arg(ptr, pipe); \
516 trace_dump_arg(shader_state, state); \
517 result = pipe->create_##shader_type##_state(pipe, state); \
518 trace_dump_ret(ptr, result); \
519 trace_dump_call_end(); \
524 trace_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
527 struct trace_context *tr_ctx = trace_context(_pipe); \
528 struct pipe_context *pipe = tr_ctx->pipe; \
529 trace_dump_call_begin("pipe_context", "bind_" #shader_type "_state"); \
530 trace_dump_arg(ptr, pipe); \
531 trace_dump_arg(ptr, state); \
532 pipe->bind_##shader_type##_state(pipe, state); \
533 trace_dump_call_end(); \
537 trace_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
540 struct trace_context *tr_ctx = trace_context(_pipe); \
541 struct pipe_context *pipe = tr_ctx->pipe; \
542 trace_dump_call_begin("pipe_context", "delete_" #shader_type "_state"); \
543 trace_dump_arg(ptr, pipe); \
544 trace_dump_arg(ptr, state); \
545 pipe->delete_##shader_type##_state(pipe, state); \
546 trace_dump_call_end(); \
549 TRACE_SHADER_STATE(fs
)
550 TRACE_SHADER_STATE(vs
)
551 TRACE_SHADER_STATE(gs
)
553 #undef TRACE_SHADER_STATE
557 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
558 unsigned num_elements
,
559 const struct pipe_vertex_element
*elements
)
561 struct trace_context
*tr_ctx
= trace_context(_pipe
);
562 struct pipe_context
*pipe
= tr_ctx
->pipe
;
565 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
567 trace_dump_arg(ptr
, pipe
);
568 trace_dump_arg(uint
, num_elements
);
570 trace_dump_arg_begin("elements");
571 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
572 trace_dump_arg_end();
574 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
576 trace_dump_ret(ptr
, result
);
578 trace_dump_call_end();
585 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
588 struct trace_context
*tr_ctx
= trace_context(_pipe
);
589 struct pipe_context
*pipe
= tr_ctx
->pipe
;
591 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
593 trace_dump_arg(ptr
, pipe
);
594 trace_dump_arg(ptr
, state
);
596 pipe
->bind_vertex_elements_state(pipe
, state
);
598 trace_dump_call_end();
603 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
606 struct trace_context
*tr_ctx
= trace_context(_pipe
);
607 struct pipe_context
*pipe
= tr_ctx
->pipe
;
609 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
611 trace_dump_arg(ptr
, pipe
);
612 trace_dump_arg(ptr
, state
);
614 pipe
->delete_vertex_elements_state(pipe
, state
);
616 trace_dump_call_end();
621 trace_context_set_blend_color(struct pipe_context
*_pipe
,
622 const struct pipe_blend_color
*state
)
624 struct trace_context
*tr_ctx
= trace_context(_pipe
);
625 struct pipe_context
*pipe
= tr_ctx
->pipe
;
627 trace_dump_call_begin("pipe_context", "set_blend_color");
629 trace_dump_arg(ptr
, pipe
);
630 trace_dump_arg(blend_color
, state
);
632 pipe
->set_blend_color(pipe
, state
);
634 trace_dump_call_end();
639 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
640 const struct pipe_stencil_ref
*state
)
642 struct trace_context
*tr_ctx
= trace_context(_pipe
);
643 struct pipe_context
*pipe
= tr_ctx
->pipe
;
645 trace_dump_call_begin("pipe_context", "set_stencil_ref");
647 trace_dump_arg(ptr
, pipe
);
648 trace_dump_arg(stencil_ref
, state
);
650 pipe
->set_stencil_ref(pipe
, state
);
652 trace_dump_call_end();
657 trace_context_set_clip_state(struct pipe_context
*_pipe
,
658 const struct pipe_clip_state
*state
)
660 struct trace_context
*tr_ctx
= trace_context(_pipe
);
661 struct pipe_context
*pipe
= tr_ctx
->pipe
;
663 trace_dump_call_begin("pipe_context", "set_clip_state");
665 trace_dump_arg(ptr
, pipe
);
666 trace_dump_arg(clip_state
, state
);
668 pipe
->set_clip_state(pipe
, state
);
670 trace_dump_call_end();
674 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
675 unsigned sample_mask
)
677 struct trace_context
*tr_ctx
= trace_context(_pipe
);
678 struct pipe_context
*pipe
= tr_ctx
->pipe
;
680 trace_dump_call_begin("pipe_context", "set_sample_mask");
682 trace_dump_arg(ptr
, pipe
);
683 trace_dump_arg(uint
, sample_mask
);
685 pipe
->set_sample_mask(pipe
, sample_mask
);
687 trace_dump_call_end();
691 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
692 uint shader
, uint index
,
693 struct pipe_constant_buffer
*constant_buffer
)
695 struct trace_context
*tr_ctx
= trace_context(_pipe
);
696 struct pipe_context
*pipe
= tr_ctx
->pipe
;
697 struct pipe_constant_buffer cb
;
699 if (constant_buffer
) {
700 cb
= *constant_buffer
;
701 cb
.buffer
= trace_resource_unwrap(tr_ctx
, constant_buffer
->buffer
);
702 constant_buffer
= &cb
;
705 trace_dump_call_begin("pipe_context", "set_constant_buffer");
707 trace_dump_arg(ptr
, pipe
);
708 trace_dump_arg(uint
, shader
);
709 trace_dump_arg(uint
, index
);
710 trace_dump_arg(constant_buffer
, constant_buffer
);
712 pipe
->set_constant_buffer(pipe
, shader
, index
, constant_buffer
);
714 trace_dump_call_end();
719 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
720 const struct pipe_framebuffer_state
*state
)
722 struct trace_context
*tr_ctx
= trace_context(_pipe
);
723 struct pipe_context
*pipe
= tr_ctx
->pipe
;
724 struct pipe_framebuffer_state unwrapped_state
;
728 /* Unwrap the input state */
729 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
730 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
731 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
732 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
733 unwrapped_state
.cbufs
[i
] = NULL
;
734 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
735 state
= &unwrapped_state
;
737 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
739 trace_dump_arg(ptr
, pipe
);
740 trace_dump_arg(framebuffer_state
, state
);
742 pipe
->set_framebuffer_state(pipe
, state
);
744 trace_dump_call_end();
749 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
750 const struct pipe_poly_stipple
*state
)
752 struct trace_context
*tr_ctx
= trace_context(_pipe
);
753 struct pipe_context
*pipe
= tr_ctx
->pipe
;
755 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
757 trace_dump_arg(ptr
, pipe
);
758 trace_dump_arg(poly_stipple
, state
);
760 pipe
->set_polygon_stipple(pipe
, state
);
762 trace_dump_call_end();
767 trace_context_set_scissor_states(struct pipe_context
*_pipe
,
769 unsigned num_scissors
,
770 const struct pipe_scissor_state
*states
)
772 struct trace_context
*tr_ctx
= trace_context(_pipe
);
773 struct pipe_context
*pipe
= tr_ctx
->pipe
;
775 trace_dump_call_begin("pipe_context", "set_scissor_states");
777 trace_dump_arg(ptr
, pipe
);
778 trace_dump_arg(uint
, start_slot
);
779 trace_dump_arg(uint
, num_scissors
);
780 trace_dump_arg(scissor_state
, states
);
782 pipe
->set_scissor_states(pipe
, start_slot
, num_scissors
, states
);
784 trace_dump_call_end();
789 trace_context_set_viewport_states(struct pipe_context
*_pipe
,
791 unsigned num_viewports
,
792 const struct pipe_viewport_state
*states
)
794 struct trace_context
*tr_ctx
= trace_context(_pipe
);
795 struct pipe_context
*pipe
= tr_ctx
->pipe
;
797 trace_dump_call_begin("pipe_context", "set_viewport_states");
799 trace_dump_arg(ptr
, pipe
);
800 trace_dump_arg(uint
, start_slot
);
801 trace_dump_arg(uint
, num_viewports
);
802 trace_dump_arg(viewport_state
, states
);
804 pipe
->set_viewport_states(pipe
, start_slot
, num_viewports
, states
);
806 trace_dump_call_end();
810 static struct pipe_sampler_view
*
811 trace_context_create_sampler_view(struct pipe_context
*_pipe
,
812 struct pipe_resource
*_resource
,
813 const struct pipe_sampler_view
*templ
)
815 struct trace_context
*tr_ctx
= trace_context(_pipe
);
816 struct trace_resource
*tr_res
= trace_resource(_resource
);
817 struct pipe_context
*pipe
= tr_ctx
->pipe
;
818 struct pipe_resource
*resource
= tr_res
->resource
;
819 struct pipe_sampler_view
*result
;
820 struct trace_sampler_view
*tr_view
;
822 trace_dump_call_begin("pipe_context", "create_sampler_view");
824 trace_dump_arg(ptr
, pipe
);
825 trace_dump_arg(ptr
, resource
);
827 trace_dump_arg_begin("templ");
828 trace_dump_sampler_view_template(templ
, resource
->target
);
829 trace_dump_arg_end();
831 result
= pipe
->create_sampler_view(pipe
, resource
, templ
);
833 trace_dump_ret(ptr
, result
);
835 trace_dump_call_end();
838 * Wrap pipe_sampler_view
840 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
841 tr_view
->base
= *templ
;
842 tr_view
->base
.reference
.count
= 1;
843 tr_view
->base
.texture
= NULL
;
844 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
845 tr_view
->base
.context
= _pipe
;
846 tr_view
->sampler_view
= result
;
847 result
= &tr_view
->base
;
854 trace_context_sampler_view_destroy(struct pipe_context
*_pipe
,
855 struct pipe_sampler_view
*_view
)
857 struct trace_context
*tr_ctx
= trace_context(_pipe
);
858 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
859 struct pipe_context
*pipe
= tr_ctx
->pipe
;
860 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
862 assert(_view
->context
== _pipe
);
864 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
866 trace_dump_arg(ptr
, pipe
);
867 trace_dump_arg(ptr
, view
);
869 pipe_sampler_view_reference(&tr_view
->sampler_view
, NULL
);
871 trace_dump_call_end();
873 pipe_resource_reference(&_view
->texture
, NULL
);
877 /********************************************************************
882 static struct pipe_surface
*
883 trace_context_create_surface(struct pipe_context
*_pipe
,
884 struct pipe_resource
*_resource
,
885 const struct pipe_surface
*surf_tmpl
)
887 struct trace_context
*tr_ctx
= trace_context(_pipe
);
888 struct trace_resource
*tr_res
= trace_resource(_resource
);
889 struct pipe_context
*pipe
= tr_ctx
->pipe
;
890 struct pipe_resource
*resource
= tr_res
->resource
;
891 struct pipe_surface
*result
= NULL
;
893 trace_dump_call_begin("pipe_context", "create_surface");
895 trace_dump_arg(ptr
, pipe
);
896 trace_dump_arg(ptr
, resource
);
898 trace_dump_arg_begin("surf_tmpl");
899 trace_dump_surface_template(surf_tmpl
, resource
->target
);
900 trace_dump_arg_end();
903 result
= pipe
->create_surface(pipe
, resource
, surf_tmpl
);
905 trace_dump_ret(ptr
, result
);
907 trace_dump_call_end();
909 result
= trace_surf_create(tr_ctx
, tr_res
, result
);
916 trace_context_surface_destroy(struct pipe_context
*_pipe
,
917 struct pipe_surface
*_surface
)
919 struct trace_context
*tr_ctx
= trace_context(_pipe
);
920 struct pipe_context
*pipe
= tr_ctx
->pipe
;
921 struct trace_surface
*tr_surf
= trace_surface(_surface
);
922 struct pipe_surface
*surface
= tr_surf
->surface
;
924 trace_dump_call_begin("pipe_context", "surface_destroy");
926 trace_dump_arg(ptr
, pipe
);
927 trace_dump_arg(ptr
, surface
);
929 trace_dump_call_end();
931 trace_surf_destroy(tr_surf
);
936 trace_context_set_sampler_views(struct pipe_context
*_pipe
,
940 struct pipe_sampler_view
**views
)
942 struct trace_context
*tr_ctx
= trace_context(_pipe
);
943 struct trace_sampler_view
*tr_view
;
944 struct pipe_context
*pipe
= tr_ctx
->pipe
;
945 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SHADER_SAMPLER_VIEWS
];
948 /* remove this when we have pipe->set_sampler_views(..., start, ...) */
951 for(i
= 0; i
< num
; ++i
) {
952 tr_view
= trace_sampler_view(views
[i
]);
953 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
955 views
= unwrapped_views
;
957 trace_dump_call_begin("pipe_context", "set_sampler_views");
959 trace_dump_arg(ptr
, pipe
);
960 trace_dump_arg(uint
, shader
);
961 trace_dump_arg(uint
, start
);
962 trace_dump_arg(uint
, num
);
963 trace_dump_arg_array(ptr
, views
, num
);
965 pipe
->set_sampler_views(pipe
, shader
, start
, num
, views
);
967 trace_dump_call_end();
972 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
973 unsigned start_slot
, unsigned num_buffers
,
974 const struct pipe_vertex_buffer
*buffers
)
976 struct trace_context
*tr_ctx
= trace_context(_pipe
);
977 struct pipe_context
*pipe
= tr_ctx
->pipe
;
980 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
982 trace_dump_arg(ptr
, pipe
);
983 trace_dump_arg(uint
, start_slot
);
984 trace_dump_arg(uint
, num_buffers
);
986 trace_dump_arg_begin("buffers");
987 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
988 trace_dump_arg_end();
991 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
992 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
993 for (i
= 0; i
< num_buffers
; i
++)
994 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
995 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, _buffers
);
998 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, NULL
);
1001 trace_dump_call_end();
1006 trace_context_set_index_buffer(struct pipe_context
*_pipe
,
1007 const struct pipe_index_buffer
*ib
)
1009 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1010 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1012 trace_dump_call_begin("pipe_context", "set_index_buffer");
1014 trace_dump_arg(ptr
, pipe
);
1015 trace_dump_arg(index_buffer
, ib
);
1018 struct pipe_index_buffer _ib
;
1020 _ib
.buffer
= trace_resource_unwrap(tr_ctx
, ib
->buffer
);
1021 pipe
->set_index_buffer(pipe
, &_ib
);
1023 pipe
->set_index_buffer(pipe
, NULL
);
1026 trace_dump_call_end();
1030 static INLINE
struct pipe_stream_output_target
*
1031 trace_context_create_stream_output_target(struct pipe_context
*_pipe
,
1032 struct pipe_resource
*res
,
1033 unsigned buffer_offset
,
1034 unsigned buffer_size
)
1036 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1037 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1038 struct pipe_stream_output_target
*result
;
1040 res
= trace_resource_unwrap(tr_ctx
, res
);
1042 trace_dump_call_begin("pipe_context", "create_stream_output_target");
1044 trace_dump_arg(ptr
, pipe
);
1045 trace_dump_arg(ptr
, res
);
1046 trace_dump_arg(uint
, buffer_offset
);
1047 trace_dump_arg(uint
, buffer_size
);
1049 result
= pipe
->create_stream_output_target(pipe
,
1050 res
, buffer_offset
, buffer_size
);
1052 trace_dump_ret(ptr
, result
);
1054 trace_dump_call_end();
1061 trace_context_stream_output_target_destroy(
1062 struct pipe_context
*_pipe
,
1063 struct pipe_stream_output_target
*target
)
1065 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1066 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1068 trace_dump_call_begin("pipe_context", "stream_output_target_destroy");
1070 trace_dump_arg(ptr
, pipe
);
1071 trace_dump_arg(ptr
, target
);
1073 pipe
->stream_output_target_destroy(pipe
, target
);
1075 trace_dump_call_end();
1080 trace_context_set_stream_output_targets(struct pipe_context
*_pipe
,
1081 unsigned num_targets
,
1082 struct pipe_stream_output_target
**tgs
,
1083 unsigned append_bitmask
)
1085 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1086 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1088 trace_dump_call_begin("pipe_context", "set_stream_output_targets");
1090 trace_dump_arg(ptr
, pipe
);
1091 trace_dump_arg(uint
, num_targets
);
1092 trace_dump_arg_array(ptr
, tgs
, num_targets
);
1093 trace_dump_arg(uint
, append_bitmask
);
1095 pipe
->set_stream_output_targets(pipe
, num_targets
, tgs
, append_bitmask
);
1097 trace_dump_call_end();
1102 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1103 struct pipe_resource
*dst
,
1105 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1106 struct pipe_resource
*src
,
1108 const struct pipe_box
*src_box
)
1110 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1111 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1113 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1114 src
= trace_resource_unwrap(tr_ctx
, src
);
1116 trace_dump_call_begin("pipe_context", "resource_copy_region");
1118 trace_dump_arg(ptr
, pipe
);
1119 trace_dump_arg(ptr
, dst
);
1120 trace_dump_arg(uint
, dst_level
);
1121 trace_dump_arg(uint
, dstx
);
1122 trace_dump_arg(uint
, dsty
);
1123 trace_dump_arg(uint
, dstz
);
1124 trace_dump_arg(ptr
, src
);
1125 trace_dump_arg(uint
, src_level
);
1126 trace_dump_arg(box
, src_box
);
1128 pipe
->resource_copy_region(pipe
,
1129 dst
, dst_level
, dstx
, dsty
, dstz
,
1130 src
, src_level
, src_box
);
1132 trace_dump_call_end();
1137 trace_context_blit(struct pipe_context
*_pipe
,
1138 const struct pipe_blit_info
*_info
)
1140 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1141 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1142 struct pipe_blit_info info
= *_info
;
1144 info
.dst
.resource
= trace_resource_unwrap(tr_ctx
, info
.dst
.resource
);
1145 info
.src
.resource
= trace_resource_unwrap(tr_ctx
, info
.src
.resource
);
1147 trace_dump_call_begin("pipe_context", "blit");
1149 trace_dump_arg(ptr
, pipe
);
1150 trace_dump_arg(blit_info
, _info
);
1152 pipe
->blit(pipe
, &info
);
1154 trace_dump_call_end();
1159 trace_context_flush_resource(struct pipe_context
*_pipe
,
1160 struct pipe_resource
*resource
)
1162 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1163 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1165 resource
= trace_resource_unwrap(tr_ctx
, resource
);
1167 trace_dump_call_begin("pipe_context", "flush_resource");
1169 trace_dump_arg(ptr
, pipe
);
1170 trace_dump_arg(ptr
, resource
);
1172 pipe
->flush_resource(pipe
, resource
);
1174 trace_dump_call_end();
1179 trace_context_clear(struct pipe_context
*_pipe
,
1181 const union pipe_color_union
*color
,
1185 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1186 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1188 trace_dump_call_begin("pipe_context", "clear");
1190 trace_dump_arg(ptr
, pipe
);
1191 trace_dump_arg(uint
, buffers
);
1192 trace_dump_arg_begin("color");
1194 trace_dump_array(float, color
->f
, 4);
1197 trace_dump_arg_end();
1198 trace_dump_arg(float, depth
);
1199 trace_dump_arg(uint
, stencil
);
1201 pipe
->clear(pipe
, buffers
, color
, depth
, stencil
);
1203 trace_dump_call_end();
1208 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1209 struct pipe_surface
*dst
,
1210 const union pipe_color_union
*color
,
1211 unsigned dstx
, unsigned dsty
,
1212 unsigned width
, unsigned height
)
1214 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1215 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1217 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1219 trace_dump_call_begin("pipe_context", "clear_render_target");
1221 trace_dump_arg(ptr
, pipe
);
1222 trace_dump_arg(ptr
, dst
);
1223 trace_dump_arg_array(float, color
->f
, 4);
1224 trace_dump_arg(uint
, dstx
);
1225 trace_dump_arg(uint
, dsty
);
1226 trace_dump_arg(uint
, width
);
1227 trace_dump_arg(uint
, height
);
1229 pipe
->clear_render_target(pipe
, dst
, color
, dstx
, dsty
, width
, height
);
1231 trace_dump_call_end();
1235 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1236 struct pipe_surface
*dst
,
1237 unsigned clear_flags
,
1240 unsigned dstx
, unsigned dsty
,
1241 unsigned width
, unsigned height
)
1243 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1244 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1246 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1248 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1250 trace_dump_arg(ptr
, pipe
);
1251 trace_dump_arg(ptr
, dst
);
1252 trace_dump_arg(uint
, clear_flags
);
1253 trace_dump_arg(float, depth
);
1254 trace_dump_arg(uint
, stencil
);
1255 trace_dump_arg(uint
, dstx
);
1256 trace_dump_arg(uint
, dsty
);
1257 trace_dump_arg(uint
, width
);
1258 trace_dump_arg(uint
, height
);
1260 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1261 dstx
, dsty
, width
, height
);
1263 trace_dump_call_end();
1267 trace_context_flush(struct pipe_context
*_pipe
,
1268 struct pipe_fence_handle
**fence
,
1271 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1272 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1274 trace_dump_call_begin("pipe_context", "flush");
1276 trace_dump_arg(ptr
, pipe
);
1277 trace_dump_arg(uint
, flags
);
1279 pipe
->flush(pipe
, fence
, flags
);
1282 trace_dump_ret(ptr
, *fence
);
1284 trace_dump_call_end();
1289 trace_context_destroy(struct pipe_context
*_pipe
)
1291 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1292 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1294 trace_dump_call_begin("pipe_context", "destroy");
1295 trace_dump_arg(ptr
, pipe
);
1296 trace_dump_call_end();
1298 pipe
->destroy(pipe
);
1304 /********************************************************************
1310 trace_context_transfer_map(struct pipe_context
*_context
,
1311 struct pipe_resource
*_resource
,
1314 const struct pipe_box
*box
,
1315 struct pipe_transfer
**transfer
)
1317 struct trace_context
*tr_context
= trace_context(_context
);
1318 struct trace_resource
*tr_res
= trace_resource(_resource
);
1319 struct pipe_context
*context
= tr_context
->pipe
;
1320 struct pipe_resource
*texture
= tr_res
->resource
;
1321 struct pipe_transfer
*result
= NULL
;
1324 assert(texture
->screen
== context
->screen
);
1327 * Map and transfers can't be serialized so we convert all write transfers
1328 * to transfer_inline_write and ignore read transfers.
1331 map
= context
->transfer_map(context
, texture
, level
, usage
, box
, &result
);
1335 *transfer
= trace_transfer_create(tr_context
, tr_res
, result
);
1338 if(usage
& PIPE_TRANSFER_WRITE
) {
1339 trace_transfer(*transfer
)->map
= map
;
1343 return *transfer
? map
: NULL
;
1347 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1348 struct pipe_transfer
*_transfer
,
1349 const struct pipe_box
*box
)
1351 struct trace_context
*tr_context
= trace_context(_context
);
1352 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1353 struct pipe_context
*context
= tr_context
->pipe
;
1354 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1356 context
->transfer_flush_region(context
,
1362 trace_context_transfer_unmap(struct pipe_context
*_context
,
1363 struct pipe_transfer
*_transfer
)
1365 struct trace_context
*tr_ctx
= trace_context(_context
);
1366 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1367 struct pipe_context
*context
= tr_ctx
->pipe
;
1368 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1372 * Fake a transfer_inline_write
1375 struct pipe_resource
*resource
= transfer
->resource
;
1376 unsigned level
= transfer
->level
;
1377 unsigned usage
= transfer
->usage
;
1378 const struct pipe_box
*box
= &transfer
->box
;
1379 unsigned stride
= transfer
->stride
;
1380 unsigned layer_stride
= transfer
->layer_stride
;
1382 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1384 trace_dump_arg(ptr
, context
);
1385 trace_dump_arg(ptr
, resource
);
1386 trace_dump_arg(uint
, level
);
1387 trace_dump_arg(uint
, usage
);
1388 trace_dump_arg(box
, box
);
1390 trace_dump_arg_begin("data");
1391 trace_dump_box_bytes(tr_trans
->map
,
1396 trace_dump_arg_end();
1398 trace_dump_arg(uint
, stride
);
1399 trace_dump_arg(uint
, layer_stride
);
1401 trace_dump_call_end();
1403 tr_trans
->map
= NULL
;
1406 context
->transfer_unmap(context
, transfer
);
1407 trace_transfer_destroy(tr_ctx
, tr_trans
);
1412 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1413 struct pipe_resource
*_resource
,
1416 const struct pipe_box
*box
,
1419 unsigned layer_stride
)
1421 struct trace_context
*tr_context
= trace_context(_context
);
1422 struct trace_resource
*tr_res
= trace_resource(_resource
);
1423 struct pipe_context
*context
= tr_context
->pipe
;
1424 struct pipe_resource
*resource
= tr_res
->resource
;
1426 assert(resource
->screen
== context
->screen
);
1428 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1430 trace_dump_arg(ptr
, context
);
1431 trace_dump_arg(ptr
, resource
);
1432 trace_dump_arg(uint
, level
);
1433 trace_dump_arg(uint
, usage
);
1434 trace_dump_arg(box
, box
);
1436 trace_dump_arg_begin("data");
1437 trace_dump_box_bytes(data
,
1442 trace_dump_arg_end();
1444 trace_dump_arg(uint
, stride
);
1445 trace_dump_arg(uint
, layer_stride
);
1447 trace_dump_call_end();
1449 context
->transfer_inline_write(context
, resource
,
1450 level
, usage
, box
, data
, stride
, layer_stride
);
1454 static void trace_context_render_condition(struct pipe_context
*_context
,
1455 struct pipe_query
*query
,
1459 struct trace_context
*tr_context
= trace_context(_context
);
1460 struct pipe_context
*context
= tr_context
->pipe
;
1462 query
= trace_query_unwrap(query
);
1464 trace_dump_call_begin("pipe_context", "render_condition");
1466 trace_dump_arg(ptr
, context
);
1467 trace_dump_arg(ptr
, query
);
1468 trace_dump_arg(bool, condition
);
1469 trace_dump_arg(uint
, mode
);
1471 trace_dump_call_end();
1473 context
->render_condition(context
, query
, condition
, mode
);
1477 static void trace_context_texture_barrier(struct pipe_context
*_context
)
1479 struct trace_context
*tr_context
= trace_context(_context
);
1480 struct pipe_context
*context
= tr_context
->pipe
;
1482 trace_dump_call_begin("pipe_context", "texture_barrier");
1484 trace_dump_arg(ptr
, context
);
1486 trace_dump_call_end();
1488 context
->texture_barrier(context
);
1492 static const struct debug_named_value rbug_blocker_flags
[] = {
1493 {"before", 1, NULL
},
1495 DEBUG_NAMED_VALUE_END
1498 struct pipe_context
*
1499 trace_context_create(struct trace_screen
*tr_scr
,
1500 struct pipe_context
*pipe
)
1502 struct trace_context
*tr_ctx
;
1507 if(!trace_enabled())
1510 tr_ctx
= CALLOC_STRUCT(trace_context
);
1514 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1515 tr_ctx
->base
.screen
= &tr_scr
->base
;
1517 tr_ctx
->base
.destroy
= trace_context_destroy
;
1519 #define TR_CTX_INIT(_member) \
1520 tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
1522 TR_CTX_INIT(draw_vbo
);
1523 TR_CTX_INIT(render_condition
);
1524 TR_CTX_INIT(create_query
);
1525 TR_CTX_INIT(destroy_query
);
1526 TR_CTX_INIT(begin_query
);
1527 TR_CTX_INIT(end_query
);
1528 TR_CTX_INIT(get_query_result
);
1529 TR_CTX_INIT(create_blend_state
);
1530 TR_CTX_INIT(bind_blend_state
);
1531 TR_CTX_INIT(delete_blend_state
);
1532 TR_CTX_INIT(create_sampler_state
);
1533 TR_CTX_INIT(bind_sampler_states
);
1534 TR_CTX_INIT(delete_sampler_state
);
1535 TR_CTX_INIT(create_rasterizer_state
);
1536 TR_CTX_INIT(bind_rasterizer_state
);
1537 TR_CTX_INIT(delete_rasterizer_state
);
1538 TR_CTX_INIT(create_depth_stencil_alpha_state
);
1539 TR_CTX_INIT(bind_depth_stencil_alpha_state
);
1540 TR_CTX_INIT(delete_depth_stencil_alpha_state
);
1541 TR_CTX_INIT(create_fs_state
);
1542 TR_CTX_INIT(bind_fs_state
);
1543 TR_CTX_INIT(delete_fs_state
);
1544 TR_CTX_INIT(create_vs_state
);
1545 TR_CTX_INIT(bind_vs_state
);
1546 TR_CTX_INIT(delete_vs_state
);
1547 TR_CTX_INIT(create_gs_state
);
1548 TR_CTX_INIT(bind_gs_state
);
1549 TR_CTX_INIT(delete_gs_state
);
1550 TR_CTX_INIT(create_vertex_elements_state
);
1551 TR_CTX_INIT(bind_vertex_elements_state
);
1552 TR_CTX_INIT(delete_vertex_elements_state
);
1553 TR_CTX_INIT(set_blend_color
);
1554 TR_CTX_INIT(set_stencil_ref
);
1555 TR_CTX_INIT(set_clip_state
);
1556 TR_CTX_INIT(set_sample_mask
);
1557 TR_CTX_INIT(set_constant_buffer
);
1558 TR_CTX_INIT(set_framebuffer_state
);
1559 TR_CTX_INIT(set_polygon_stipple
);
1560 TR_CTX_INIT(set_scissor_states
);
1561 TR_CTX_INIT(set_viewport_states
);
1562 TR_CTX_INIT(set_sampler_views
);
1563 TR_CTX_INIT(create_sampler_view
);
1564 TR_CTX_INIT(sampler_view_destroy
);
1565 TR_CTX_INIT(create_surface
);
1566 TR_CTX_INIT(surface_destroy
);
1567 TR_CTX_INIT(set_vertex_buffers
);
1568 TR_CTX_INIT(set_index_buffer
);
1569 TR_CTX_INIT(create_stream_output_target
);
1570 TR_CTX_INIT(stream_output_target_destroy
);
1571 TR_CTX_INIT(set_stream_output_targets
);
1572 TR_CTX_INIT(resource_copy_region
);
1574 TR_CTX_INIT(flush_resource
);
1576 TR_CTX_INIT(clear_render_target
);
1577 TR_CTX_INIT(clear_depth_stencil
);
1579 TR_CTX_INIT(texture_barrier
);
1581 TR_CTX_INIT(transfer_map
);
1582 TR_CTX_INIT(transfer_unmap
);
1583 TR_CTX_INIT(transfer_flush_region
);
1584 TR_CTX_INIT(transfer_inline_write
);
1588 tr_ctx
->pipe
= pipe
;
1590 return &tr_ctx
->base
;
1598 * Sanity checker: check that the given context really is a
1599 * trace context (and not the wrapped driver's context).
1602 trace_context_check(const struct pipe_context
*pipe
)
1604 struct trace_context
*tr_ctx
= (struct trace_context
*) pipe
;
1605 assert(tr_ctx
->base
.destroy
== trace_context_destroy
);