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_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_state.h"
37 #include "tr_public.h"
38 #include "tr_screen.h"
39 #include "tr_texture.h"
40 #include "tr_context.h"
46 static INLINE
struct pipe_resource
*
47 trace_resource_unwrap(struct trace_context
*tr_ctx
,
48 struct pipe_resource
*resource
)
50 struct trace_resource
*tr_tex
;
55 tr_tex
= trace_resource(resource
);
57 assert(tr_tex
->resource
);
58 return tr_tex
->resource
;
62 static INLINE
struct pipe_surface
*
63 trace_surface_unwrap(struct trace_context
*tr_ctx
,
64 struct pipe_surface
*surface
)
66 struct trace_screen
*tr_scr
= trace_screen(tr_ctx
->base
.screen
);
67 struct trace_surface
*tr_surf
;
72 assert(surface
->texture
);
76 tr_surf
= trace_surface(surface
);
78 assert(tr_surf
->surface
);
79 assert(tr_surf
->surface
->texture
->screen
== tr_scr
->screen
);
81 return tr_surf
->surface
;
86 trace_context_draw_arrays(struct pipe_context
*_pipe
,
87 unsigned mode
, unsigned start
, unsigned count
)
89 struct trace_context
*tr_ctx
= trace_context(_pipe
);
90 struct pipe_context
*pipe
= tr_ctx
->pipe
;
92 trace_dump_call_begin("pipe_context", "draw_arrays");
94 trace_dump_arg(ptr
, pipe
);
95 trace_dump_arg(uint
, mode
);
96 trace_dump_arg(uint
, start
);
97 trace_dump_arg(uint
, count
);
99 pipe
->draw_arrays(pipe
, mode
, start
, count
);
101 trace_dump_call_end();
106 trace_context_draw_elements(struct pipe_context
*_pipe
,
107 struct pipe_resource
*_indexBuffer
,
108 unsigned indexSize
, int indexBias
,
109 unsigned mode
, unsigned start
, unsigned count
)
111 struct trace_context
*tr_ctx
= trace_context(_pipe
);
112 struct trace_resource
*tr_buf
= trace_resource(_indexBuffer
);
113 struct pipe_context
*pipe
= tr_ctx
->pipe
;
114 struct pipe_resource
*indexBuffer
= tr_buf
->resource
;
116 trace_dump_call_begin("pipe_context", "draw_elements");
118 trace_dump_arg(ptr
, pipe
);
119 trace_dump_arg(ptr
, indexBuffer
);
120 trace_dump_arg(uint
, indexSize
);
121 trace_dump_arg(int, indexBias
);
122 trace_dump_arg(uint
, mode
);
123 trace_dump_arg(uint
, start
);
124 trace_dump_arg(uint
, count
);
126 pipe
->draw_elements(pipe
, indexBuffer
, indexSize
, indexBias
,
129 trace_dump_call_end();
134 trace_context_draw_range_elements(struct pipe_context
*_pipe
,
135 struct pipe_resource
*_indexBuffer
,
144 struct trace_context
*tr_ctx
= trace_context(_pipe
);
145 struct trace_resource
*tr_buf
= trace_resource(_indexBuffer
);
146 struct pipe_context
*pipe
= tr_ctx
->pipe
;
147 struct pipe_resource
*indexBuffer
= tr_buf
->resource
;
149 trace_dump_call_begin("pipe_context", "draw_range_elements");
151 trace_dump_arg(ptr
, pipe
);
152 trace_dump_arg(ptr
, indexBuffer
);
153 trace_dump_arg(uint
, indexSize
);
154 trace_dump_arg(int, indexBias
);
155 trace_dump_arg(uint
, minIndex
);
156 trace_dump_arg(uint
, maxIndex
);
157 trace_dump_arg(uint
, mode
);
158 trace_dump_arg(uint
, start
);
159 trace_dump_arg(uint
, count
);
161 pipe
->draw_range_elements(pipe
,
162 indexBuffer
, indexSize
, indexBias
,
166 trace_dump_call_end();
170 static INLINE
struct pipe_query
*
171 trace_context_create_query(struct pipe_context
*_pipe
,
174 struct trace_context
*tr_ctx
= trace_context(_pipe
);
175 struct pipe_context
*pipe
= tr_ctx
->pipe
;
176 struct pipe_query
*result
;
178 trace_dump_call_begin("pipe_context", "create_query");
180 trace_dump_arg(ptr
, pipe
);
181 trace_dump_arg(uint
, query_type
);
183 result
= pipe
->create_query(pipe
, query_type
);
185 trace_dump_ret(ptr
, result
);
187 trace_dump_call_end();
194 trace_context_destroy_query(struct pipe_context
*_pipe
,
195 struct pipe_query
*query
)
197 struct trace_context
*tr_ctx
= trace_context(_pipe
);
198 struct pipe_context
*pipe
= tr_ctx
->pipe
;
200 trace_dump_call_begin("pipe_context", "destroy_query");
202 trace_dump_arg(ptr
, pipe
);
203 trace_dump_arg(ptr
, query
);
205 pipe
->destroy_query(pipe
, query
);
207 trace_dump_call_end();
212 trace_context_begin_query(struct pipe_context
*_pipe
,
213 struct pipe_query
*query
)
215 struct trace_context
*tr_ctx
= trace_context(_pipe
);
216 struct pipe_context
*pipe
= tr_ctx
->pipe
;
218 trace_dump_call_begin("pipe_context", "begin_query");
220 trace_dump_arg(ptr
, pipe
);
221 trace_dump_arg(ptr
, query
);
223 pipe
->begin_query(pipe
, query
);
225 trace_dump_call_end();
230 trace_context_end_query(struct pipe_context
*_pipe
,
231 struct pipe_query
*query
)
233 struct trace_context
*tr_ctx
= trace_context(_pipe
);
234 struct pipe_context
*pipe
= tr_ctx
->pipe
;
236 trace_dump_call_begin("pipe_context", "end_query");
238 trace_dump_arg(ptr
, pipe
);
239 trace_dump_arg(ptr
, query
);
241 pipe
->end_query(pipe
, query
);
243 trace_dump_call_end();
247 static INLINE boolean
248 trace_context_get_query_result(struct pipe_context
*_pipe
,
249 struct pipe_query
*query
,
253 struct trace_context
*tr_ctx
= trace_context(_pipe
);
254 struct pipe_context
*pipe
= tr_ctx
->pipe
;
258 trace_dump_call_begin("pipe_context", "get_query_result");
260 trace_dump_arg(ptr
, pipe
);
262 _result
= pipe
->get_query_result(pipe
, query
, wait
, presult
);
263 result
= *((uint64_t*)presult
);
265 trace_dump_arg(uint
, result
);
266 trace_dump_ret(bool, _result
);
268 trace_dump_call_end();
275 trace_context_create_blend_state(struct pipe_context
*_pipe
,
276 const struct pipe_blend_state
*state
)
278 struct trace_context
*tr_ctx
= trace_context(_pipe
);
279 struct pipe_context
*pipe
= tr_ctx
->pipe
;
282 trace_dump_call_begin("pipe_context", "create_blend_state");
284 trace_dump_arg(ptr
, pipe
);
285 trace_dump_arg(blend_state
, state
);
287 result
= pipe
->create_blend_state(pipe
, state
);
289 trace_dump_ret(ptr
, result
);
291 trace_dump_call_end();
298 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
301 struct trace_context
*tr_ctx
= trace_context(_pipe
);
302 struct pipe_context
*pipe
= tr_ctx
->pipe
;
304 trace_dump_call_begin("pipe_context", "bind_blend_state");
306 trace_dump_arg(ptr
, pipe
);
307 trace_dump_arg(ptr
, state
);
309 pipe
->bind_blend_state(pipe
, state
);
311 trace_dump_call_end();
316 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
319 struct trace_context
*tr_ctx
= trace_context(_pipe
);
320 struct pipe_context
*pipe
= tr_ctx
->pipe
;
322 trace_dump_call_begin("pipe_context", "delete_blend_state");
324 trace_dump_arg(ptr
, pipe
);
325 trace_dump_arg(ptr
, state
);
327 pipe
->delete_blend_state(pipe
, state
);
329 trace_dump_call_end();
334 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
335 const struct pipe_sampler_state
*state
)
337 struct trace_context
*tr_ctx
= trace_context(_pipe
);
338 struct pipe_context
*pipe
= tr_ctx
->pipe
;
341 trace_dump_call_begin("pipe_context", "create_sampler_state");
343 trace_dump_arg(ptr
, pipe
);
344 trace_dump_arg(sampler_state
, state
);
346 result
= pipe
->create_sampler_state(pipe
, state
);
348 trace_dump_ret(ptr
, result
);
350 trace_dump_call_end();
357 trace_context_bind_fragment_sampler_states(struct pipe_context
*_pipe
,
361 struct trace_context
*tr_ctx
= trace_context(_pipe
);
362 struct pipe_context
*pipe
= tr_ctx
->pipe
;
364 trace_dump_call_begin("pipe_context", "bind_fragment_sampler_states");
366 trace_dump_arg(ptr
, pipe
);
367 trace_dump_arg(uint
, num_states
);
368 trace_dump_arg_array(ptr
, states
, num_states
);
370 pipe
->bind_fragment_sampler_states(pipe
, num_states
, states
);
372 trace_dump_call_end();
377 trace_context_bind_vertex_sampler_states(struct pipe_context
*_pipe
,
381 struct trace_context
*tr_ctx
= trace_context(_pipe
);
382 struct pipe_context
*pipe
= tr_ctx
->pipe
;
384 trace_dump_call_begin("pipe_context", "bind_vertex_sampler_states");
386 trace_dump_arg(ptr
, pipe
);
387 trace_dump_arg(uint
, num_states
);
388 trace_dump_arg_array(ptr
, states
, num_states
);
390 pipe
->bind_vertex_sampler_states(pipe
, num_states
, states
);
392 trace_dump_call_end();
397 trace_context_delete_sampler_state(struct pipe_context
*_pipe
,
400 struct trace_context
*tr_ctx
= trace_context(_pipe
);
401 struct pipe_context
*pipe
= tr_ctx
->pipe
;
403 trace_dump_call_begin("pipe_context", "delete_sampler_state");
405 trace_dump_arg(ptr
, pipe
);
406 trace_dump_arg(ptr
, state
);
408 pipe
->delete_sampler_state(pipe
, state
);
410 trace_dump_call_end();
415 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
416 const struct pipe_rasterizer_state
*state
)
418 struct trace_context
*tr_ctx
= trace_context(_pipe
);
419 struct pipe_context
*pipe
= tr_ctx
->pipe
;
422 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
424 trace_dump_arg(ptr
, pipe
);
425 trace_dump_arg(rasterizer_state
, state
);
427 result
= pipe
->create_rasterizer_state(pipe
, state
);
429 trace_dump_ret(ptr
, result
);
431 trace_dump_call_end();
438 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
441 struct trace_context
*tr_ctx
= trace_context(_pipe
);
442 struct pipe_context
*pipe
= tr_ctx
->pipe
;
444 trace_dump_call_begin("pipe_context", "bind_rasterizer_state");
446 trace_dump_arg(ptr
, pipe
);
447 trace_dump_arg(ptr
, state
);
449 pipe
->bind_rasterizer_state(pipe
, state
);
451 trace_dump_call_end();
456 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
459 struct trace_context
*tr_ctx
= trace_context(_pipe
);
460 struct pipe_context
*pipe
= tr_ctx
->pipe
;
462 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
464 trace_dump_arg(ptr
, pipe
);
465 trace_dump_arg(ptr
, state
);
467 pipe
->delete_rasterizer_state(pipe
, state
);
469 trace_dump_call_end();
474 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
475 const struct pipe_depth_stencil_alpha_state
*state
)
477 struct trace_context
*tr_ctx
= trace_context(_pipe
);
478 struct pipe_context
*pipe
= tr_ctx
->pipe
;
481 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
483 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
485 trace_dump_arg(ptr
, pipe
);
486 trace_dump_arg(depth_stencil_alpha_state
, state
);
488 trace_dump_ret(ptr
, result
);
490 trace_dump_call_end();
497 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
500 struct trace_context
*tr_ctx
= trace_context(_pipe
);
501 struct pipe_context
*pipe
= tr_ctx
->pipe
;
503 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
505 trace_dump_arg(ptr
, pipe
);
506 trace_dump_arg(ptr
, state
);
508 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
510 trace_dump_call_end();
515 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
518 struct trace_context
*tr_ctx
= trace_context(_pipe
);
519 struct pipe_context
*pipe
= tr_ctx
->pipe
;
521 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
523 trace_dump_arg(ptr
, pipe
);
524 trace_dump_arg(ptr
, state
);
526 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
528 trace_dump_call_end();
533 trace_context_create_fs_state(struct pipe_context
*_pipe
,
534 const struct pipe_shader_state
*state
)
536 struct trace_context
*tr_ctx
= trace_context(_pipe
);
537 struct pipe_context
*pipe
= tr_ctx
->pipe
;
540 trace_dump_call_begin("pipe_context", "create_fs_state");
542 trace_dump_arg(ptr
, pipe
);
543 trace_dump_arg(shader_state
, state
);
545 result
= pipe
->create_fs_state(pipe
, state
);
547 trace_dump_ret(ptr
, result
);
549 trace_dump_call_end();
556 trace_context_bind_fs_state(struct pipe_context
*_pipe
,
559 struct trace_context
*tr_ctx
= trace_context(_pipe
);
560 struct pipe_context
*pipe
= tr_ctx
->pipe
;
562 trace_dump_call_begin("pipe_context", "bind_fs_state");
564 trace_dump_arg(ptr
, pipe
);
565 trace_dump_arg(ptr
, state
);
567 pipe
->bind_fs_state(pipe
, state
);
569 trace_dump_call_end();
574 trace_context_delete_fs_state(struct pipe_context
*_pipe
,
577 struct trace_context
*tr_ctx
= trace_context(_pipe
);
578 struct pipe_context
*pipe
= tr_ctx
->pipe
;
580 trace_dump_call_begin("pipe_context", "delete_fs_state");
582 trace_dump_arg(ptr
, pipe
);
583 trace_dump_arg(ptr
, state
);
585 pipe
->delete_fs_state(pipe
, state
);
587 trace_dump_call_end();
592 trace_context_create_vs_state(struct pipe_context
*_pipe
,
593 const struct pipe_shader_state
*state
)
595 struct trace_context
*tr_ctx
= trace_context(_pipe
);
596 struct pipe_context
*pipe
= tr_ctx
->pipe
;
599 trace_dump_call_begin("pipe_context", "create_vs_state");
601 trace_dump_arg(ptr
, pipe
);
602 trace_dump_arg(shader_state
, state
);
604 result
= pipe
->create_vs_state(pipe
, state
);
606 trace_dump_ret(ptr
, result
);
608 trace_dump_call_end();
615 trace_context_bind_vs_state(struct pipe_context
*_pipe
,
618 struct trace_context
*tr_ctx
= trace_context(_pipe
);
619 struct pipe_context
*pipe
= tr_ctx
->pipe
;
621 trace_dump_call_begin("pipe_context", "bind_vs_state");
623 trace_dump_arg(ptr
, pipe
);
624 trace_dump_arg(ptr
, state
);
626 pipe
->bind_vs_state(pipe
, state
);
628 trace_dump_call_end();
633 trace_context_delete_vs_state(struct pipe_context
*_pipe
,
636 struct trace_context
*tr_ctx
= trace_context(_pipe
);
637 struct pipe_context
*pipe
= tr_ctx
->pipe
;
639 trace_dump_call_begin("pipe_context", "delete_vs_state");
641 trace_dump_arg(ptr
, pipe
);
642 trace_dump_arg(ptr
, state
);
644 pipe
->delete_vs_state(pipe
, state
);
646 trace_dump_call_end();
651 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
652 unsigned num_elements
,
653 const struct pipe_vertex_element
*elements
)
655 struct trace_context
*tr_ctx
= trace_context(_pipe
);
656 struct pipe_context
*pipe
= tr_ctx
->pipe
;
659 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
661 trace_dump_arg(ptr
, pipe
);
662 trace_dump_arg(uint
, num_elements
);
664 trace_dump_arg_begin("elements");
665 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
666 trace_dump_arg_end();
668 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
670 trace_dump_ret(ptr
, result
);
672 trace_dump_call_end();
679 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
682 struct trace_context
*tr_ctx
= trace_context(_pipe
);
683 struct pipe_context
*pipe
= tr_ctx
->pipe
;
685 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
687 trace_dump_arg(ptr
, pipe
);
688 trace_dump_arg(ptr
, state
);
690 pipe
->bind_vertex_elements_state(pipe
, state
);
692 trace_dump_call_end();
697 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
700 struct trace_context
*tr_ctx
= trace_context(_pipe
);
701 struct pipe_context
*pipe
= tr_ctx
->pipe
;
703 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
705 trace_dump_arg(ptr
, pipe
);
706 trace_dump_arg(ptr
, state
);
708 pipe
->delete_vertex_elements_state(pipe
, state
);
710 trace_dump_call_end();
715 trace_context_set_blend_color(struct pipe_context
*_pipe
,
716 const struct pipe_blend_color
*state
)
718 struct trace_context
*tr_ctx
= trace_context(_pipe
);
719 struct pipe_context
*pipe
= tr_ctx
->pipe
;
721 trace_dump_call_begin("pipe_context", "set_blend_color");
723 trace_dump_arg(ptr
, pipe
);
724 trace_dump_arg(blend_color
, state
);
726 pipe
->set_blend_color(pipe
, state
);
728 trace_dump_call_end();
733 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
734 const struct pipe_stencil_ref
*state
)
736 struct trace_context
*tr_ctx
= trace_context(_pipe
);
737 struct pipe_context
*pipe
= tr_ctx
->pipe
;
739 trace_dump_call_begin("pipe_context", "set_stencil_ref");
741 trace_dump_arg(ptr
, pipe
);
742 trace_dump_arg(stencil_ref
, state
);
744 pipe
->set_stencil_ref(pipe
, state
);
746 trace_dump_call_end();
751 trace_context_set_clip_state(struct pipe_context
*_pipe
,
752 const struct pipe_clip_state
*state
)
754 struct trace_context
*tr_ctx
= trace_context(_pipe
);
755 struct pipe_context
*pipe
= tr_ctx
->pipe
;
757 trace_dump_call_begin("pipe_context", "set_clip_state");
759 trace_dump_arg(ptr
, pipe
);
760 trace_dump_arg(clip_state
, state
);
762 pipe
->set_clip_state(pipe
, state
);
764 trace_dump_call_end();
768 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
769 unsigned sample_mask
)
771 struct trace_context
*tr_ctx
= trace_context(_pipe
);
772 struct pipe_context
*pipe
= tr_ctx
->pipe
;
774 trace_dump_call_begin("pipe_context", "set_sample_mask");
776 trace_dump_arg(ptr
, pipe
);
777 trace_dump_arg(uint
, sample_mask
);
779 pipe
->set_sample_mask(pipe
, sample_mask
);
781 trace_dump_call_end();
785 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
786 uint shader
, uint index
,
787 struct pipe_resource
*buffer
)
789 struct trace_context
*tr_ctx
= trace_context(_pipe
);
790 struct pipe_context
*pipe
= tr_ctx
->pipe
;
793 buffer
= trace_resource_unwrap(tr_ctx
, buffer
);
796 trace_dump_call_begin("pipe_context", "set_constant_buffer");
798 trace_dump_arg(ptr
, pipe
);
799 trace_dump_arg(uint
, shader
);
800 trace_dump_arg(uint
, index
);
801 trace_dump_arg(ptr
, buffer
);
803 pipe
->set_constant_buffer(pipe
, shader
, index
, buffer
);
805 trace_dump_call_end();
810 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
811 const struct pipe_framebuffer_state
*state
)
813 struct trace_context
*tr_ctx
= trace_context(_pipe
);
814 struct pipe_context
*pipe
= tr_ctx
->pipe
;
815 struct pipe_framebuffer_state unwrapped_state
;
819 /* Unwrap the input state */
820 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
821 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
822 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
823 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
824 unwrapped_state
.cbufs
[i
] = NULL
;
825 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
826 state
= &unwrapped_state
;
828 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
830 trace_dump_arg(ptr
, pipe
);
831 trace_dump_arg(framebuffer_state
, state
);
833 pipe
->set_framebuffer_state(pipe
, state
);
835 trace_dump_call_end();
840 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
841 const struct pipe_poly_stipple
*state
)
843 struct trace_context
*tr_ctx
= trace_context(_pipe
);
844 struct pipe_context
*pipe
= tr_ctx
->pipe
;
846 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
848 trace_dump_arg(ptr
, pipe
);
849 trace_dump_arg(poly_stipple
, state
);
851 pipe
->set_polygon_stipple(pipe
, state
);
853 trace_dump_call_end();
858 trace_context_set_scissor_state(struct pipe_context
*_pipe
,
859 const struct pipe_scissor_state
*state
)
861 struct trace_context
*tr_ctx
= trace_context(_pipe
);
862 struct pipe_context
*pipe
= tr_ctx
->pipe
;
864 trace_dump_call_begin("pipe_context", "set_scissor_state");
866 trace_dump_arg(ptr
, pipe
);
867 trace_dump_arg(scissor_state
, state
);
869 pipe
->set_scissor_state(pipe
, state
);
871 trace_dump_call_end();
876 trace_context_set_viewport_state(struct pipe_context
*_pipe
,
877 const struct pipe_viewport_state
*state
)
879 struct trace_context
*tr_ctx
= trace_context(_pipe
);
880 struct pipe_context
*pipe
= tr_ctx
->pipe
;
882 trace_dump_call_begin("pipe_context", "set_viewport_state");
884 trace_dump_arg(ptr
, pipe
);
885 trace_dump_arg(viewport_state
, state
);
887 pipe
->set_viewport_state(pipe
, state
);
889 trace_dump_call_end();
893 static struct pipe_sampler_view
*
894 trace_create_sampler_view(struct pipe_context
*_pipe
,
895 struct pipe_resource
*_resource
,
896 const struct pipe_sampler_view
*templ
)
898 struct trace_context
*tr_ctx
= trace_context(_pipe
);
899 struct trace_resource
*tr_tex
= trace_resource(_resource
);
900 struct pipe_context
*pipe
= tr_ctx
->pipe
;
901 struct pipe_resource
*texture
= tr_tex
->resource
;
902 struct pipe_sampler_view
*result
;
903 struct trace_sampler_view
*tr_view
;
905 trace_dump_call_begin("pipe_context", "create_sampler_view");
907 trace_dump_arg(ptr
, pipe
);
908 trace_dump_arg(ptr
, texture
);
909 trace_dump_arg(sampler_view_template
, templ
);
911 result
= pipe
->create_sampler_view(pipe
, texture
, templ
);
913 trace_dump_ret(ptr
, result
);
915 trace_dump_call_end();
918 * Wrap pipe_sampler_view
920 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
921 tr_view
->base
= *templ
;
922 tr_view
->base
.reference
.count
= 1;
923 tr_view
->base
.texture
= NULL
;
924 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
925 tr_view
->base
.context
= _pipe
;
926 tr_view
->sampler_view
= result
;
927 result
= &tr_view
->base
;
934 trace_sampler_view_destroy(struct pipe_context
*_pipe
,
935 struct pipe_sampler_view
*_view
)
937 struct trace_context
*tr_ctx
= trace_context(_pipe
);
938 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
939 struct pipe_context
*pipe
= tr_ctx
->pipe
;
940 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
942 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
944 trace_dump_arg(ptr
, pipe
);
945 trace_dump_arg(ptr
, view
);
947 pipe
->sampler_view_destroy(pipe
, view
);
949 trace_dump_call_end();
951 pipe_resource_reference(&_view
->texture
, NULL
);
957 trace_context_set_fragment_sampler_views(struct pipe_context
*_pipe
,
959 struct pipe_sampler_view
**views
)
961 struct trace_context
*tr_ctx
= trace_context(_pipe
);
962 struct trace_sampler_view
*tr_view
;
963 struct pipe_context
*pipe
= tr_ctx
->pipe
;
964 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SAMPLERS
];
967 for(i
= 0; i
< num
; ++i
) {
968 tr_view
= trace_sampler_view(views
[i
]);
969 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
971 views
= unwrapped_views
;
973 trace_dump_call_begin("pipe_context", "set_fragment_sampler_views");
975 trace_dump_arg(ptr
, pipe
);
976 trace_dump_arg(uint
, num
);
977 trace_dump_arg_array(ptr
, views
, num
);
979 pipe
->set_fragment_sampler_views(pipe
, num
, views
);
981 trace_dump_call_end();
986 trace_context_set_vertex_sampler_views(struct pipe_context
*_pipe
,
988 struct pipe_sampler_view
**views
)
990 struct trace_context
*tr_ctx
= trace_context(_pipe
);
991 struct trace_sampler_view
*tr_view
;
992 struct pipe_context
*pipe
= tr_ctx
->pipe
;
993 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_VERTEX_SAMPLERS
];
996 for(i
= 0; i
< num
; ++i
) {
997 tr_view
= trace_sampler_view(views
[i
]);
998 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
1000 views
= unwrapped_views
;
1002 trace_dump_call_begin("pipe_context", "set_vertex_sampler_views");
1004 trace_dump_arg(ptr
, pipe
);
1005 trace_dump_arg(uint
, num
);
1006 trace_dump_arg_array(ptr
, views
, num
);
1008 pipe
->set_vertex_sampler_views(pipe
, num
, views
);
1010 trace_dump_call_end();
1015 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
1016 unsigned num_buffers
,
1017 const struct pipe_vertex_buffer
*buffers
)
1019 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1020 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1023 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
1025 trace_dump_arg(ptr
, pipe
);
1026 trace_dump_arg(uint
, num_buffers
);
1028 trace_dump_arg_begin("buffers");
1029 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
1030 trace_dump_arg_end();
1033 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
1034 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
1035 for (i
= 0; i
< num_buffers
; i
++)
1036 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
1037 pipe
->set_vertex_buffers(pipe
, num_buffers
, _buffers
);
1040 pipe
->set_vertex_buffers(pipe
, num_buffers
, NULL
);
1043 trace_dump_call_end();
1048 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1049 struct pipe_resource
*dst
,
1050 struct pipe_subresource subdst
,
1051 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1052 struct pipe_resource
*src
,
1053 struct pipe_subresource subsrc
,
1054 unsigned srcx
, unsigned srcy
, unsigned srcz
,
1055 unsigned width
, unsigned height
)
1057 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1058 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1060 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1061 src
= trace_resource_unwrap(tr_ctx
, src
);
1063 trace_dump_call_begin("pipe_context", "resource_copy_region");
1065 trace_dump_arg(ptr
, pipe
);
1066 trace_dump_arg(ptr
, dst
);
1067 trace_dump_arg_struct(subresource
, subdst
);
1068 trace_dump_arg(uint
, dstx
);
1069 trace_dump_arg(uint
, dsty
);
1070 trace_dump_arg(uint
, dstz
);
1071 trace_dump_arg(ptr
, src
);
1072 trace_dump_arg_struct(subresource
, subsrc
);
1073 trace_dump_arg(uint
, srcx
);
1074 trace_dump_arg(uint
, srcy
);
1075 trace_dump_arg(uint
, srcz
);
1076 trace_dump_arg(uint
, width
);
1077 trace_dump_arg(uint
, height
);
1079 pipe
->resource_copy_region(pipe
,
1080 dst
, subdst
, dstx
, dsty
, dstz
,
1081 src
, subsrc
, srcx
, srcy
, srcz
, width
, height
);
1083 trace_dump_call_end();
1088 trace_context_clear(struct pipe_context
*_pipe
,
1094 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1095 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1097 trace_dump_call_begin("pipe_context", "clear");
1099 trace_dump_arg(ptr
, pipe
);
1100 trace_dump_arg(uint
, buffers
);
1101 trace_dump_arg_array(float, rgba
, 4);
1102 trace_dump_arg(float, depth
);
1103 trace_dump_arg(uint
, stencil
);
1105 pipe
->clear(pipe
, buffers
, rgba
, depth
, stencil
);
1107 trace_dump_call_end();
1112 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1113 struct pipe_surface
*dst
,
1115 unsigned dstx
, unsigned dsty
,
1116 unsigned width
, unsigned height
)
1118 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1119 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1121 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1123 trace_dump_call_begin("pipe_context", "clear_render_target");
1125 trace_dump_arg(ptr
, pipe
);
1126 trace_dump_arg(ptr
, dst
);
1127 trace_dump_arg_array(float, rgba
, 4);
1128 trace_dump_arg(uint
, dstx
);
1129 trace_dump_arg(uint
, dsty
);
1130 trace_dump_arg(uint
, width
);
1131 trace_dump_arg(uint
, height
);
1133 pipe
->clear_render_target(pipe
, dst
, rgba
, dstx
, dsty
, width
, height
);
1135 trace_dump_call_end();
1139 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1140 struct pipe_surface
*dst
,
1141 unsigned clear_flags
,
1144 unsigned dstx
, unsigned dsty
,
1145 unsigned width
, unsigned height
)
1147 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1148 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1150 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1152 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1154 trace_dump_arg(ptr
, pipe
);
1155 trace_dump_arg(ptr
, dst
);
1156 trace_dump_arg(uint
, clear_flags
);
1157 trace_dump_arg(float, depth
);
1158 trace_dump_arg(uint
, stencil
);
1159 trace_dump_arg(uint
, dstx
);
1160 trace_dump_arg(uint
, dsty
);
1161 trace_dump_arg(uint
, width
);
1162 trace_dump_arg(uint
, height
);
1164 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1165 dstx
, dsty
, width
, height
);
1167 trace_dump_call_end();
1171 trace_context_flush(struct pipe_context
*_pipe
,
1173 struct pipe_fence_handle
**fence
)
1175 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1176 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1178 trace_dump_call_begin("pipe_context", "flush");
1180 trace_dump_arg(ptr
, pipe
);
1181 trace_dump_arg(uint
, flags
);
1183 pipe
->flush(pipe
, flags
, fence
);
1186 trace_dump_ret(ptr
, *fence
);
1188 trace_dump_call_end();
1193 trace_context_destroy(struct pipe_context
*_pipe
)
1195 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1196 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1198 trace_dump_call_begin("pipe_context", "destroy");
1199 trace_dump_arg(ptr
, pipe
);
1200 trace_dump_call_end();
1202 pipe
->destroy(pipe
);
1208 trace_is_resource_referenced( struct pipe_context
*_pipe
,
1209 struct pipe_resource
*_resource
,
1210 unsigned face
, unsigned level
)
1212 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1213 struct trace_resource
*tr_tex
= trace_resource(_resource
);
1214 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1215 struct pipe_resource
*texture
= tr_tex
->resource
;
1216 unsigned int referenced
;
1218 trace_dump_call_begin("pipe_context", "is_resource_referenced");
1219 trace_dump_arg(ptr
, pipe
);
1220 trace_dump_arg(ptr
, texture
);
1221 trace_dump_arg(uint
, face
);
1222 trace_dump_arg(uint
, level
);
1224 referenced
= pipe
->is_resource_referenced(pipe
, texture
, face
, level
);
1226 trace_dump_ret(uint
, referenced
);
1227 trace_dump_call_end();
1233 /********************************************************************
1238 static struct pipe_transfer
*
1239 trace_context_get_transfer(struct pipe_context
*_context
,
1240 struct pipe_resource
*_resource
,
1241 struct pipe_subresource sr
,
1243 const struct pipe_box
*box
)
1245 struct trace_context
*tr_context
= trace_context(_context
);
1246 struct trace_resource
*tr_tex
= trace_resource(_resource
);
1247 struct pipe_context
*context
= tr_context
->pipe
;
1248 struct pipe_resource
*texture
= tr_tex
->resource
;
1249 struct pipe_transfer
*result
= NULL
;
1251 assert(texture
->screen
== context
->screen
);
1254 * Map and transfers can't be serialized so we convert all write transfers
1255 * to transfer_inline_write and ignore read transfers.
1258 result
= context
->get_transfer(context
, texture
, sr
, usage
, box
);
1261 result
= trace_transfer_create(tr_context
, tr_tex
, result
);
1268 trace_context_transfer_destroy(struct pipe_context
*_context
,
1269 struct pipe_transfer
*_transfer
)
1271 struct trace_context
*tr_context
= trace_context(_context
);
1272 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1274 trace_transfer_destroy(tr_context
, tr_trans
);
1279 trace_context_transfer_map(struct pipe_context
*_context
,
1280 struct pipe_transfer
*_transfer
)
1282 struct trace_context
*tr_context
= trace_context(_context
);
1283 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1284 struct pipe_context
*context
= tr_context
->pipe
;
1285 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1288 map
= context
->transfer_map(context
, transfer
);
1290 if(transfer
->usage
& PIPE_TRANSFER_WRITE
) {
1291 assert(!tr_trans
->map
);
1292 tr_trans
->map
= map
;
1301 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1302 struct pipe_transfer
*_transfer
,
1303 const struct pipe_box
*box
)
1305 struct trace_context
*tr_context
= trace_context(_context
);
1306 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1307 struct pipe_context
*context
= tr_context
->pipe
;
1308 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1310 context
->transfer_flush_region(context
,
1316 trace_context_transfer_unmap(struct pipe_context
*_context
,
1317 struct pipe_transfer
*_transfer
)
1319 struct trace_context
*tr_ctx
= trace_context(_context
);
1320 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1321 struct pipe_context
*context
= tr_ctx
->pipe
;
1322 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1326 * Fake a transfer_inline_write
1329 struct pipe_resource
*resource
= transfer
->resource
;
1330 struct pipe_subresource sr
= transfer
->sr
;
1331 unsigned usage
= transfer
->usage
;
1332 const struct pipe_box
*box
= &transfer
->box
;
1333 unsigned stride
= transfer
->stride
;
1334 unsigned slice_stride
= transfer
->slice_stride
;
1336 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1338 trace_dump_arg(ptr
, context
);
1339 trace_dump_arg(ptr
, resource
);
1340 trace_dump_arg_struct(subresource
, sr
);
1341 trace_dump_arg(uint
, usage
);
1342 trace_dump_arg(box
, box
);
1344 trace_dump_arg_begin("data");
1345 trace_dump_box_bytes(tr_trans
->map
,
1350 trace_dump_arg_end();
1352 trace_dump_arg(uint
, stride
);
1353 trace_dump_arg(uint
, slice_stride
);
1355 trace_dump_call_end();
1357 tr_trans
->map
= NULL
;
1360 context
->transfer_unmap(context
, transfer
);
1365 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1366 struct pipe_resource
*_resource
,
1367 struct pipe_subresource sr
,
1369 const struct pipe_box
*box
,
1372 unsigned slice_stride
)
1374 struct trace_context
*tr_context
= trace_context(_context
);
1375 struct trace_resource
*tr_tex
= trace_resource(_resource
);
1376 struct pipe_context
*context
= tr_context
->pipe
;
1377 struct pipe_resource
*resource
= tr_tex
->resource
;
1379 assert(resource
->screen
== context
->screen
);
1381 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1383 trace_dump_arg(ptr
, context
);
1384 trace_dump_arg(ptr
, resource
);
1385 trace_dump_arg_struct(subresource
, sr
);
1386 trace_dump_arg(uint
, usage
);
1387 trace_dump_arg(box
, box
);
1389 trace_dump_arg_begin("data");
1390 trace_dump_box_bytes(data
,
1395 trace_dump_arg_end();
1397 trace_dump_arg(uint
, stride
);
1398 trace_dump_arg(uint
, slice_stride
);
1400 trace_dump_call_end();
1402 context
->transfer_inline_write(context
, resource
,
1403 sr
, usage
, box
, data
, stride
, slice_stride
);
1409 static const struct debug_named_value rbug_blocker_flags
[] = {
1410 {"before", 1, NULL
},
1412 DEBUG_NAMED_VALUE_END
1415 struct pipe_context
*
1416 trace_context_create(struct trace_screen
*tr_scr
,
1417 struct pipe_context
*pipe
)
1419 struct trace_context
*tr_ctx
;
1424 if(!trace_enabled())
1427 tr_ctx
= CALLOC_STRUCT(trace_context
);
1431 tr_ctx
->base
.winsys
= NULL
;
1432 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1433 tr_ctx
->base
.screen
= &tr_scr
->base
;
1435 tr_ctx
->base
.destroy
= trace_context_destroy
;
1436 tr_ctx
->base
.draw_arrays
= trace_context_draw_arrays
;
1437 tr_ctx
->base
.draw_elements
= trace_context_draw_elements
;
1438 tr_ctx
->base
.draw_range_elements
= trace_context_draw_range_elements
;
1439 tr_ctx
->base
.create_query
= trace_context_create_query
;
1440 tr_ctx
->base
.destroy_query
= trace_context_destroy_query
;
1441 tr_ctx
->base
.begin_query
= trace_context_begin_query
;
1442 tr_ctx
->base
.end_query
= trace_context_end_query
;
1443 tr_ctx
->base
.get_query_result
= trace_context_get_query_result
;
1444 tr_ctx
->base
.create_blend_state
= trace_context_create_blend_state
;
1445 tr_ctx
->base
.bind_blend_state
= trace_context_bind_blend_state
;
1446 tr_ctx
->base
.delete_blend_state
= trace_context_delete_blend_state
;
1447 tr_ctx
->base
.create_sampler_state
= trace_context_create_sampler_state
;
1448 tr_ctx
->base
.bind_fragment_sampler_states
= trace_context_bind_fragment_sampler_states
;
1449 tr_ctx
->base
.bind_vertex_sampler_states
= trace_context_bind_vertex_sampler_states
;
1450 tr_ctx
->base
.delete_sampler_state
= trace_context_delete_sampler_state
;
1451 tr_ctx
->base
.create_rasterizer_state
= trace_context_create_rasterizer_state
;
1452 tr_ctx
->base
.bind_rasterizer_state
= trace_context_bind_rasterizer_state
;
1453 tr_ctx
->base
.delete_rasterizer_state
= trace_context_delete_rasterizer_state
;
1454 tr_ctx
->base
.create_depth_stencil_alpha_state
= trace_context_create_depth_stencil_alpha_state
;
1455 tr_ctx
->base
.bind_depth_stencil_alpha_state
= trace_context_bind_depth_stencil_alpha_state
;
1456 tr_ctx
->base
.delete_depth_stencil_alpha_state
= trace_context_delete_depth_stencil_alpha_state
;
1457 tr_ctx
->base
.create_fs_state
= trace_context_create_fs_state
;
1458 tr_ctx
->base
.bind_fs_state
= trace_context_bind_fs_state
;
1459 tr_ctx
->base
.delete_fs_state
= trace_context_delete_fs_state
;
1460 tr_ctx
->base
.create_vs_state
= trace_context_create_vs_state
;
1461 tr_ctx
->base
.bind_vs_state
= trace_context_bind_vs_state
;
1462 tr_ctx
->base
.delete_vs_state
= trace_context_delete_vs_state
;
1463 tr_ctx
->base
.create_vertex_elements_state
= trace_context_create_vertex_elements_state
;
1464 tr_ctx
->base
.bind_vertex_elements_state
= trace_context_bind_vertex_elements_state
;
1465 tr_ctx
->base
.delete_vertex_elements_state
= trace_context_delete_vertex_elements_state
;
1466 tr_ctx
->base
.set_blend_color
= trace_context_set_blend_color
;
1467 tr_ctx
->base
.set_stencil_ref
= trace_context_set_stencil_ref
;
1468 tr_ctx
->base
.set_clip_state
= trace_context_set_clip_state
;
1469 tr_ctx
->base
.set_sample_mask
= trace_context_set_sample_mask
;
1470 tr_ctx
->base
.set_constant_buffer
= trace_context_set_constant_buffer
;
1471 tr_ctx
->base
.set_framebuffer_state
= trace_context_set_framebuffer_state
;
1472 tr_ctx
->base
.set_polygon_stipple
= trace_context_set_polygon_stipple
;
1473 tr_ctx
->base
.set_scissor_state
= trace_context_set_scissor_state
;
1474 tr_ctx
->base
.set_viewport_state
= trace_context_set_viewport_state
;
1475 tr_ctx
->base
.set_fragment_sampler_views
= trace_context_set_fragment_sampler_views
;
1476 tr_ctx
->base
.set_vertex_sampler_views
= trace_context_set_vertex_sampler_views
;
1477 tr_ctx
->base
.create_sampler_view
= trace_create_sampler_view
;
1478 tr_ctx
->base
.sampler_view_destroy
= trace_sampler_view_destroy
;
1479 tr_ctx
->base
.set_vertex_buffers
= trace_context_set_vertex_buffers
;
1480 tr_ctx
->base
.resource_copy_region
= trace_context_resource_copy_region
;
1481 tr_ctx
->base
.clear
= trace_context_clear
;
1482 tr_ctx
->base
.clear_render_target
= trace_context_clear_render_target
;
1483 tr_ctx
->base
.clear_depth_stencil
= trace_context_clear_depth_stencil
;
1484 tr_ctx
->base
.flush
= trace_context_flush
;
1485 tr_ctx
->base
.is_resource_referenced
= trace_is_resource_referenced
;
1487 tr_ctx
->base
.get_transfer
= trace_context_get_transfer
;
1488 tr_ctx
->base
.transfer_destroy
= trace_context_transfer_destroy
;
1489 tr_ctx
->base
.transfer_map
= trace_context_transfer_map
;
1490 tr_ctx
->base
.transfer_unmap
= trace_context_transfer_unmap
;
1491 tr_ctx
->base
.transfer_flush_region
= trace_context_transfer_flush_region
;
1492 tr_ctx
->base
.transfer_inline_write
= trace_context_transfer_inline_write
;
1494 tr_ctx
->pipe
= pipe
;
1496 return &tr_ctx
->base
;