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/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 if (info
->indirect
) {
123 struct pipe_draw_info
*_info
= NULL
;
125 _info
= MALLOC(sizeof(*_info
));
129 memcpy(_info
, info
, sizeof(*_info
));
130 _info
->indirect
= trace_resource_unwrap(tr_ctx
, _info
->indirect
);
131 _info
->indirect_params
= trace_resource_unwrap(tr_ctx
,
132 _info
->indirect_params
);
133 pipe
->draw_vbo(pipe
, _info
);
136 pipe
->draw_vbo(pipe
, info
);
139 trace_dump_call_end();
143 static inline struct pipe_query
*
144 trace_context_create_query(struct pipe_context
*_pipe
,
148 struct trace_context
*tr_ctx
= trace_context(_pipe
);
149 struct pipe_context
*pipe
= tr_ctx
->pipe
;
150 struct pipe_query
*query
;
152 trace_dump_call_begin("pipe_context", "create_query");
154 trace_dump_arg(ptr
, pipe
);
155 trace_dump_arg(query_type
, query_type
);
156 trace_dump_arg(int, index
);
158 query
= pipe
->create_query(pipe
, query_type
, index
);
160 trace_dump_ret(ptr
, query
);
162 trace_dump_call_end();
164 /* Wrap query object. */
166 struct trace_query
*tr_query
= CALLOC_STRUCT(trace_query
);
168 tr_query
->type
= query_type
;
169 tr_query
->query
= query
;
170 query
= (struct pipe_query
*)tr_query
;
172 pipe
->destroy_query(pipe
, query
);
182 trace_context_destroy_query(struct pipe_context
*_pipe
,
183 struct pipe_query
*_query
)
185 struct trace_context
*tr_ctx
= trace_context(_pipe
);
186 struct pipe_context
*pipe
= tr_ctx
->pipe
;
187 struct trace_query
*tr_query
= trace_query(_query
);
188 struct pipe_query
*query
= tr_query
->query
;
192 trace_dump_call_begin("pipe_context", "destroy_query");
194 trace_dump_arg(ptr
, pipe
);
195 trace_dump_arg(ptr
, query
);
197 pipe
->destroy_query(pipe
, query
);
199 trace_dump_call_end();
203 static inline boolean
204 trace_context_begin_query(struct pipe_context
*_pipe
,
205 struct pipe_query
*query
)
207 struct trace_context
*tr_ctx
= trace_context(_pipe
);
208 struct pipe_context
*pipe
= tr_ctx
->pipe
;
211 query
= trace_query_unwrap(query
);
213 trace_dump_call_begin("pipe_context", "begin_query");
215 trace_dump_arg(ptr
, pipe
);
216 trace_dump_arg(ptr
, query
);
218 ret
= pipe
->begin_query(pipe
, query
);
220 trace_dump_call_end();
226 trace_context_end_query(struct pipe_context
*_pipe
,
227 struct pipe_query
*query
)
229 struct trace_context
*tr_ctx
= trace_context(_pipe
);
230 struct pipe_context
*pipe
= tr_ctx
->pipe
;
232 query
= trace_query_unwrap(query
);
234 trace_dump_call_begin("pipe_context", "end_query");
236 trace_dump_arg(ptr
, pipe
);
237 trace_dump_arg(ptr
, query
);
239 pipe
->end_query(pipe
, query
);
241 trace_dump_call_end();
245 static inline boolean
246 trace_context_get_query_result(struct pipe_context
*_pipe
,
247 struct pipe_query
*_query
,
249 union pipe_query_result
*result
)
251 struct trace_context
*tr_ctx
= trace_context(_pipe
);
252 struct pipe_context
*pipe
= tr_ctx
->pipe
;
253 struct trace_query
*tr_query
= trace_query(_query
);
254 struct pipe_query
*query
= tr_query
->query
;
257 trace_dump_call_begin("pipe_context", "get_query_result");
259 trace_dump_arg(ptr
, pipe
);
260 trace_dump_arg(ptr
, query
);
262 ret
= pipe
->get_query_result(pipe
, query
, wait
, result
);
264 trace_dump_arg_begin("result");
266 trace_dump_query_result(tr_query
->type
, result
);
270 trace_dump_arg_end();
272 trace_dump_ret(bool, ret
);
274 trace_dump_call_end();
281 trace_context_create_blend_state(struct pipe_context
*_pipe
,
282 const struct pipe_blend_state
*state
)
284 struct trace_context
*tr_ctx
= trace_context(_pipe
);
285 struct pipe_context
*pipe
= tr_ctx
->pipe
;
288 trace_dump_call_begin("pipe_context", "create_blend_state");
290 trace_dump_arg(ptr
, pipe
);
291 trace_dump_arg(blend_state
, state
);
293 result
= pipe
->create_blend_state(pipe
, state
);
295 trace_dump_ret(ptr
, result
);
297 trace_dump_call_end();
304 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
307 struct trace_context
*tr_ctx
= trace_context(_pipe
);
308 struct pipe_context
*pipe
= tr_ctx
->pipe
;
310 trace_dump_call_begin("pipe_context", "bind_blend_state");
312 trace_dump_arg(ptr
, pipe
);
313 trace_dump_arg(ptr
, state
);
315 pipe
->bind_blend_state(pipe
, state
);
317 trace_dump_call_end();
322 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
325 struct trace_context
*tr_ctx
= trace_context(_pipe
);
326 struct pipe_context
*pipe
= tr_ctx
->pipe
;
328 trace_dump_call_begin("pipe_context", "delete_blend_state");
330 trace_dump_arg(ptr
, pipe
);
331 trace_dump_arg(ptr
, state
);
333 pipe
->delete_blend_state(pipe
, state
);
335 trace_dump_call_end();
340 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
341 const struct pipe_sampler_state
*state
)
343 struct trace_context
*tr_ctx
= trace_context(_pipe
);
344 struct pipe_context
*pipe
= tr_ctx
->pipe
;
347 trace_dump_call_begin("pipe_context", "create_sampler_state");
349 trace_dump_arg(ptr
, pipe
);
350 trace_dump_arg(sampler_state
, state
);
352 result
= pipe
->create_sampler_state(pipe
, state
);
354 trace_dump_ret(ptr
, result
);
356 trace_dump_call_end();
363 trace_context_bind_sampler_states(struct pipe_context
*_pipe
,
369 struct trace_context
*tr_ctx
= trace_context(_pipe
);
370 struct pipe_context
*pipe
= tr_ctx
->pipe
;
372 /* remove this when we have pipe->bind_sampler_states(..., start, ...) */
375 trace_dump_call_begin("pipe_context", "bind_sampler_states");
377 trace_dump_arg(ptr
, pipe
);
378 trace_dump_arg(uint
, shader
);
379 trace_dump_arg(uint
, start
);
380 trace_dump_arg(uint
, num_states
);
381 trace_dump_arg_array(ptr
, states
, num_states
);
383 pipe
->bind_sampler_states(pipe
, shader
, start
, num_states
, states
);
385 trace_dump_call_end();
390 trace_context_delete_sampler_state(struct pipe_context
*_pipe
,
393 struct trace_context
*tr_ctx
= trace_context(_pipe
);
394 struct pipe_context
*pipe
= tr_ctx
->pipe
;
396 trace_dump_call_begin("pipe_context", "delete_sampler_state");
398 trace_dump_arg(ptr
, pipe
);
399 trace_dump_arg(ptr
, state
);
401 pipe
->delete_sampler_state(pipe
, state
);
403 trace_dump_call_end();
408 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
409 const struct pipe_rasterizer_state
*state
)
411 struct trace_context
*tr_ctx
= trace_context(_pipe
);
412 struct pipe_context
*pipe
= tr_ctx
->pipe
;
415 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
417 trace_dump_arg(ptr
, pipe
);
418 trace_dump_arg(rasterizer_state
, state
);
420 result
= pipe
->create_rasterizer_state(pipe
, state
);
422 trace_dump_ret(ptr
, result
);
424 trace_dump_call_end();
431 trace_context_bind_rasterizer_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", "bind_rasterizer_state");
439 trace_dump_arg(ptr
, pipe
);
440 trace_dump_arg(ptr
, state
);
442 pipe
->bind_rasterizer_state(pipe
, state
);
444 trace_dump_call_end();
449 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
452 struct trace_context
*tr_ctx
= trace_context(_pipe
);
453 struct pipe_context
*pipe
= tr_ctx
->pipe
;
455 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
457 trace_dump_arg(ptr
, pipe
);
458 trace_dump_arg(ptr
, state
);
460 pipe
->delete_rasterizer_state(pipe
, state
);
462 trace_dump_call_end();
467 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
468 const struct pipe_depth_stencil_alpha_state
*state
)
470 struct trace_context
*tr_ctx
= trace_context(_pipe
);
471 struct pipe_context
*pipe
= tr_ctx
->pipe
;
474 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
476 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
478 trace_dump_arg(ptr
, pipe
);
479 trace_dump_arg(depth_stencil_alpha_state
, state
);
481 trace_dump_ret(ptr
, result
);
483 trace_dump_call_end();
490 trace_context_bind_depth_stencil_alpha_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", "bind_depth_stencil_alpha_state");
498 trace_dump_arg(ptr
, pipe
);
499 trace_dump_arg(ptr
, state
);
501 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
503 trace_dump_call_end();
508 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
511 struct trace_context
*tr_ctx
= trace_context(_pipe
);
512 struct pipe_context
*pipe
= tr_ctx
->pipe
;
514 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
516 trace_dump_arg(ptr
, pipe
);
517 trace_dump_arg(ptr
, state
);
519 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
521 trace_dump_call_end();
525 #define TRACE_SHADER_STATE(shader_type) \
526 static inline void * \
527 trace_context_create_##shader_type##_state(struct pipe_context *_pipe, \
528 const struct pipe_shader_state *state) \
530 struct trace_context *tr_ctx = trace_context(_pipe); \
531 struct pipe_context *pipe = tr_ctx->pipe; \
533 trace_dump_call_begin("pipe_context", "create_" #shader_type "_state"); \
534 trace_dump_arg(ptr, pipe); \
535 trace_dump_arg(shader_state, state); \
536 result = pipe->create_##shader_type##_state(pipe, state); \
537 trace_dump_ret(ptr, result); \
538 trace_dump_call_end(); \
543 trace_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
546 struct trace_context *tr_ctx = trace_context(_pipe); \
547 struct pipe_context *pipe = tr_ctx->pipe; \
548 trace_dump_call_begin("pipe_context", "bind_" #shader_type "_state"); \
549 trace_dump_arg(ptr, pipe); \
550 trace_dump_arg(ptr, state); \
551 pipe->bind_##shader_type##_state(pipe, state); \
552 trace_dump_call_end(); \
556 trace_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
559 struct trace_context *tr_ctx = trace_context(_pipe); \
560 struct pipe_context *pipe = tr_ctx->pipe; \
561 trace_dump_call_begin("pipe_context", "delete_" #shader_type "_state"); \
562 trace_dump_arg(ptr, pipe); \
563 trace_dump_arg(ptr, state); \
564 pipe->delete_##shader_type##_state(pipe, state); \
565 trace_dump_call_end(); \
568 TRACE_SHADER_STATE(fs
)
569 TRACE_SHADER_STATE(vs
)
570 TRACE_SHADER_STATE(gs
)
571 TRACE_SHADER_STATE(tcs
)
572 TRACE_SHADER_STATE(tes
)
574 #undef TRACE_SHADER_STATE
578 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
579 unsigned num_elements
,
580 const struct pipe_vertex_element
*elements
)
582 struct trace_context
*tr_ctx
= trace_context(_pipe
);
583 struct pipe_context
*pipe
= tr_ctx
->pipe
;
586 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
588 trace_dump_arg(ptr
, pipe
);
589 trace_dump_arg(uint
, num_elements
);
591 trace_dump_arg_begin("elements");
592 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
593 trace_dump_arg_end();
595 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
597 trace_dump_ret(ptr
, result
);
599 trace_dump_call_end();
606 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
609 struct trace_context
*tr_ctx
= trace_context(_pipe
);
610 struct pipe_context
*pipe
= tr_ctx
->pipe
;
612 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
614 trace_dump_arg(ptr
, pipe
);
615 trace_dump_arg(ptr
, state
);
617 pipe
->bind_vertex_elements_state(pipe
, state
);
619 trace_dump_call_end();
624 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
627 struct trace_context
*tr_ctx
= trace_context(_pipe
);
628 struct pipe_context
*pipe
= tr_ctx
->pipe
;
630 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
632 trace_dump_arg(ptr
, pipe
);
633 trace_dump_arg(ptr
, state
);
635 pipe
->delete_vertex_elements_state(pipe
, state
);
637 trace_dump_call_end();
642 trace_context_set_blend_color(struct pipe_context
*_pipe
,
643 const struct pipe_blend_color
*state
)
645 struct trace_context
*tr_ctx
= trace_context(_pipe
);
646 struct pipe_context
*pipe
= tr_ctx
->pipe
;
648 trace_dump_call_begin("pipe_context", "set_blend_color");
650 trace_dump_arg(ptr
, pipe
);
651 trace_dump_arg(blend_color
, state
);
653 pipe
->set_blend_color(pipe
, state
);
655 trace_dump_call_end();
660 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
661 const struct pipe_stencil_ref
*state
)
663 struct trace_context
*tr_ctx
= trace_context(_pipe
);
664 struct pipe_context
*pipe
= tr_ctx
->pipe
;
666 trace_dump_call_begin("pipe_context", "set_stencil_ref");
668 trace_dump_arg(ptr
, pipe
);
669 trace_dump_arg(stencil_ref
, state
);
671 pipe
->set_stencil_ref(pipe
, state
);
673 trace_dump_call_end();
678 trace_context_set_clip_state(struct pipe_context
*_pipe
,
679 const struct pipe_clip_state
*state
)
681 struct trace_context
*tr_ctx
= trace_context(_pipe
);
682 struct pipe_context
*pipe
= tr_ctx
->pipe
;
684 trace_dump_call_begin("pipe_context", "set_clip_state");
686 trace_dump_arg(ptr
, pipe
);
687 trace_dump_arg(clip_state
, state
);
689 pipe
->set_clip_state(pipe
, state
);
691 trace_dump_call_end();
695 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
696 unsigned sample_mask
)
698 struct trace_context
*tr_ctx
= trace_context(_pipe
);
699 struct pipe_context
*pipe
= tr_ctx
->pipe
;
701 trace_dump_call_begin("pipe_context", "set_sample_mask");
703 trace_dump_arg(ptr
, pipe
);
704 trace_dump_arg(uint
, sample_mask
);
706 pipe
->set_sample_mask(pipe
, sample_mask
);
708 trace_dump_call_end();
712 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
713 uint shader
, uint index
,
714 struct pipe_constant_buffer
*constant_buffer
)
716 struct trace_context
*tr_ctx
= trace_context(_pipe
);
717 struct pipe_context
*pipe
= tr_ctx
->pipe
;
718 struct pipe_constant_buffer cb
;
720 if (constant_buffer
) {
721 cb
= *constant_buffer
;
722 cb
.buffer
= trace_resource_unwrap(tr_ctx
, constant_buffer
->buffer
);
723 constant_buffer
= &cb
;
726 trace_dump_call_begin("pipe_context", "set_constant_buffer");
728 trace_dump_arg(ptr
, pipe
);
729 trace_dump_arg(uint
, shader
);
730 trace_dump_arg(uint
, index
);
731 trace_dump_arg(constant_buffer
, constant_buffer
);
733 pipe
->set_constant_buffer(pipe
, shader
, index
, constant_buffer
);
735 trace_dump_call_end();
740 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
741 const struct pipe_framebuffer_state
*state
)
743 struct trace_context
*tr_ctx
= trace_context(_pipe
);
744 struct pipe_context
*pipe
= tr_ctx
->pipe
;
745 struct pipe_framebuffer_state unwrapped_state
;
749 /* Unwrap the input state */
750 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
751 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
752 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
753 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
754 unwrapped_state
.cbufs
[i
] = NULL
;
755 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
756 state
= &unwrapped_state
;
758 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
760 trace_dump_arg(ptr
, pipe
);
761 trace_dump_arg(framebuffer_state
, state
);
763 pipe
->set_framebuffer_state(pipe
, state
);
765 trace_dump_call_end();
770 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
771 const struct pipe_poly_stipple
*state
)
773 struct trace_context
*tr_ctx
= trace_context(_pipe
);
774 struct pipe_context
*pipe
= tr_ctx
->pipe
;
776 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
778 trace_dump_arg(ptr
, pipe
);
779 trace_dump_arg(poly_stipple
, state
);
781 pipe
->set_polygon_stipple(pipe
, state
);
783 trace_dump_call_end();
788 trace_context_set_scissor_states(struct pipe_context
*_pipe
,
790 unsigned num_scissors
,
791 const struct pipe_scissor_state
*states
)
793 struct trace_context
*tr_ctx
= trace_context(_pipe
);
794 struct pipe_context
*pipe
= tr_ctx
->pipe
;
796 trace_dump_call_begin("pipe_context", "set_scissor_states");
798 trace_dump_arg(ptr
, pipe
);
799 trace_dump_arg(uint
, start_slot
);
800 trace_dump_arg(uint
, num_scissors
);
801 trace_dump_arg(scissor_state
, states
);
803 pipe
->set_scissor_states(pipe
, start_slot
, num_scissors
, states
);
805 trace_dump_call_end();
810 trace_context_set_viewport_states(struct pipe_context
*_pipe
,
812 unsigned num_viewports
,
813 const struct pipe_viewport_state
*states
)
815 struct trace_context
*tr_ctx
= trace_context(_pipe
);
816 struct pipe_context
*pipe
= tr_ctx
->pipe
;
818 trace_dump_call_begin("pipe_context", "set_viewport_states");
820 trace_dump_arg(ptr
, pipe
);
821 trace_dump_arg(uint
, start_slot
);
822 trace_dump_arg(uint
, num_viewports
);
823 trace_dump_arg(viewport_state
, states
);
825 pipe
->set_viewport_states(pipe
, start_slot
, num_viewports
, states
);
827 trace_dump_call_end();
831 static struct pipe_sampler_view
*
832 trace_context_create_sampler_view(struct pipe_context
*_pipe
,
833 struct pipe_resource
*_resource
,
834 const struct pipe_sampler_view
*templ
)
836 struct trace_context
*tr_ctx
= trace_context(_pipe
);
837 struct trace_resource
*tr_res
= trace_resource(_resource
);
838 struct pipe_context
*pipe
= tr_ctx
->pipe
;
839 struct pipe_resource
*resource
= tr_res
->resource
;
840 struct pipe_sampler_view
*result
;
841 struct trace_sampler_view
*tr_view
;
843 trace_dump_call_begin("pipe_context", "create_sampler_view");
845 trace_dump_arg(ptr
, pipe
);
846 trace_dump_arg(ptr
, resource
);
848 trace_dump_arg_begin("templ");
849 trace_dump_sampler_view_template(templ
, resource
->target
);
850 trace_dump_arg_end();
852 result
= pipe
->create_sampler_view(pipe
, resource
, templ
);
854 trace_dump_ret(ptr
, result
);
856 trace_dump_call_end();
859 * Wrap pipe_sampler_view
861 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
862 tr_view
->base
= *templ
;
863 tr_view
->base
.reference
.count
= 1;
864 tr_view
->base
.texture
= NULL
;
865 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
866 tr_view
->base
.context
= _pipe
;
867 tr_view
->sampler_view
= result
;
868 result
= &tr_view
->base
;
875 trace_context_sampler_view_destroy(struct pipe_context
*_pipe
,
876 struct pipe_sampler_view
*_view
)
878 struct trace_context
*tr_ctx
= trace_context(_pipe
);
879 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
880 struct pipe_context
*pipe
= tr_ctx
->pipe
;
881 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
883 assert(_view
->context
== _pipe
);
885 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
887 trace_dump_arg(ptr
, pipe
);
888 trace_dump_arg(ptr
, view
);
890 pipe_sampler_view_reference(&tr_view
->sampler_view
, NULL
);
892 trace_dump_call_end();
894 pipe_resource_reference(&_view
->texture
, NULL
);
898 /********************************************************************
903 static struct pipe_surface
*
904 trace_context_create_surface(struct pipe_context
*_pipe
,
905 struct pipe_resource
*_resource
,
906 const struct pipe_surface
*surf_tmpl
)
908 struct trace_context
*tr_ctx
= trace_context(_pipe
);
909 struct trace_resource
*tr_res
= trace_resource(_resource
);
910 struct pipe_context
*pipe
= tr_ctx
->pipe
;
911 struct pipe_resource
*resource
= tr_res
->resource
;
912 struct pipe_surface
*result
= NULL
;
914 trace_dump_call_begin("pipe_context", "create_surface");
916 trace_dump_arg(ptr
, pipe
);
917 trace_dump_arg(ptr
, resource
);
919 trace_dump_arg_begin("surf_tmpl");
920 trace_dump_surface_template(surf_tmpl
, resource
->target
);
921 trace_dump_arg_end();
924 result
= pipe
->create_surface(pipe
, resource
, surf_tmpl
);
926 trace_dump_ret(ptr
, result
);
928 trace_dump_call_end();
930 result
= trace_surf_create(tr_ctx
, tr_res
, result
);
937 trace_context_surface_destroy(struct pipe_context
*_pipe
,
938 struct pipe_surface
*_surface
)
940 struct trace_context
*tr_ctx
= trace_context(_pipe
);
941 struct pipe_context
*pipe
= tr_ctx
->pipe
;
942 struct trace_surface
*tr_surf
= trace_surface(_surface
);
943 struct pipe_surface
*surface
= tr_surf
->surface
;
945 trace_dump_call_begin("pipe_context", "surface_destroy");
947 trace_dump_arg(ptr
, pipe
);
948 trace_dump_arg(ptr
, surface
);
950 trace_dump_call_end();
952 trace_surf_destroy(tr_surf
);
957 trace_context_set_sampler_views(struct pipe_context
*_pipe
,
961 struct pipe_sampler_view
**views
)
963 struct trace_context
*tr_ctx
= trace_context(_pipe
);
964 struct trace_sampler_view
*tr_view
;
965 struct pipe_context
*pipe
= tr_ctx
->pipe
;
966 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SHADER_SAMPLER_VIEWS
];
969 /* remove this when we have pipe->set_sampler_views(..., start, ...) */
972 for(i
= 0; i
< num
; ++i
) {
973 tr_view
= trace_sampler_view(views
[i
]);
974 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
976 views
= unwrapped_views
;
978 trace_dump_call_begin("pipe_context", "set_sampler_views");
980 trace_dump_arg(ptr
, pipe
);
981 trace_dump_arg(uint
, shader
);
982 trace_dump_arg(uint
, start
);
983 trace_dump_arg(uint
, num
);
984 trace_dump_arg_array(ptr
, views
, num
);
986 pipe
->set_sampler_views(pipe
, shader
, start
, num
, views
);
988 trace_dump_call_end();
993 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
994 unsigned start_slot
, unsigned num_buffers
,
995 const struct pipe_vertex_buffer
*buffers
)
997 struct trace_context
*tr_ctx
= trace_context(_pipe
);
998 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1001 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
1003 trace_dump_arg(ptr
, pipe
);
1004 trace_dump_arg(uint
, start_slot
);
1005 trace_dump_arg(uint
, num_buffers
);
1007 trace_dump_arg_begin("buffers");
1008 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
1009 trace_dump_arg_end();
1012 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
1013 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
1014 for (i
= 0; i
< num_buffers
; i
++)
1015 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
1016 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, _buffers
);
1019 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, NULL
);
1022 trace_dump_call_end();
1027 trace_context_set_index_buffer(struct pipe_context
*_pipe
,
1028 const struct pipe_index_buffer
*ib
)
1030 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1031 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1033 trace_dump_call_begin("pipe_context", "set_index_buffer");
1035 trace_dump_arg(ptr
, pipe
);
1036 trace_dump_arg(index_buffer
, ib
);
1039 struct pipe_index_buffer _ib
;
1041 _ib
.buffer
= trace_resource_unwrap(tr_ctx
, ib
->buffer
);
1042 pipe
->set_index_buffer(pipe
, &_ib
);
1044 pipe
->set_index_buffer(pipe
, NULL
);
1047 trace_dump_call_end();
1051 static inline struct pipe_stream_output_target
*
1052 trace_context_create_stream_output_target(struct pipe_context
*_pipe
,
1053 struct pipe_resource
*res
,
1054 unsigned buffer_offset
,
1055 unsigned buffer_size
)
1057 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1058 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1059 struct pipe_stream_output_target
*result
;
1061 res
= trace_resource_unwrap(tr_ctx
, res
);
1063 trace_dump_call_begin("pipe_context", "create_stream_output_target");
1065 trace_dump_arg(ptr
, pipe
);
1066 trace_dump_arg(ptr
, res
);
1067 trace_dump_arg(uint
, buffer_offset
);
1068 trace_dump_arg(uint
, buffer_size
);
1070 result
= pipe
->create_stream_output_target(pipe
,
1071 res
, buffer_offset
, buffer_size
);
1073 trace_dump_ret(ptr
, result
);
1075 trace_dump_call_end();
1082 trace_context_stream_output_target_destroy(
1083 struct pipe_context
*_pipe
,
1084 struct pipe_stream_output_target
*target
)
1086 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1087 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1089 trace_dump_call_begin("pipe_context", "stream_output_target_destroy");
1091 trace_dump_arg(ptr
, pipe
);
1092 trace_dump_arg(ptr
, target
);
1094 pipe
->stream_output_target_destroy(pipe
, target
);
1096 trace_dump_call_end();
1101 trace_context_set_stream_output_targets(struct pipe_context
*_pipe
,
1102 unsigned num_targets
,
1103 struct pipe_stream_output_target
**tgs
,
1104 const unsigned *offsets
)
1106 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1107 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1109 trace_dump_call_begin("pipe_context", "set_stream_output_targets");
1111 trace_dump_arg(ptr
, pipe
);
1112 trace_dump_arg(uint
, num_targets
);
1113 trace_dump_arg_array(ptr
, tgs
, num_targets
);
1114 trace_dump_arg_array(uint
, offsets
, num_targets
);
1116 pipe
->set_stream_output_targets(pipe
, num_targets
, tgs
, offsets
);
1118 trace_dump_call_end();
1123 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1124 struct pipe_resource
*dst
,
1126 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1127 struct pipe_resource
*src
,
1129 const struct pipe_box
*src_box
)
1131 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1132 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1134 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1135 src
= trace_resource_unwrap(tr_ctx
, src
);
1137 trace_dump_call_begin("pipe_context", "resource_copy_region");
1139 trace_dump_arg(ptr
, pipe
);
1140 trace_dump_arg(ptr
, dst
);
1141 trace_dump_arg(uint
, dst_level
);
1142 trace_dump_arg(uint
, dstx
);
1143 trace_dump_arg(uint
, dsty
);
1144 trace_dump_arg(uint
, dstz
);
1145 trace_dump_arg(ptr
, src
);
1146 trace_dump_arg(uint
, src_level
);
1147 trace_dump_arg(box
, src_box
);
1149 pipe
->resource_copy_region(pipe
,
1150 dst
, dst_level
, dstx
, dsty
, dstz
,
1151 src
, src_level
, src_box
);
1153 trace_dump_call_end();
1158 trace_context_blit(struct pipe_context
*_pipe
,
1159 const struct pipe_blit_info
*_info
)
1161 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1162 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1163 struct pipe_blit_info info
= *_info
;
1165 info
.dst
.resource
= trace_resource_unwrap(tr_ctx
, info
.dst
.resource
);
1166 info
.src
.resource
= trace_resource_unwrap(tr_ctx
, info
.src
.resource
);
1168 trace_dump_call_begin("pipe_context", "blit");
1170 trace_dump_arg(ptr
, pipe
);
1171 trace_dump_arg(blit_info
, _info
);
1173 pipe
->blit(pipe
, &info
);
1175 trace_dump_call_end();
1180 trace_context_flush_resource(struct pipe_context
*_pipe
,
1181 struct pipe_resource
*resource
)
1183 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1184 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1186 resource
= trace_resource_unwrap(tr_ctx
, resource
);
1188 trace_dump_call_begin("pipe_context", "flush_resource");
1190 trace_dump_arg(ptr
, pipe
);
1191 trace_dump_arg(ptr
, resource
);
1193 pipe
->flush_resource(pipe
, resource
);
1195 trace_dump_call_end();
1200 trace_context_clear(struct pipe_context
*_pipe
,
1202 const union pipe_color_union
*color
,
1206 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1207 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1209 trace_dump_call_begin("pipe_context", "clear");
1211 trace_dump_arg(ptr
, pipe
);
1212 trace_dump_arg(uint
, buffers
);
1213 trace_dump_arg_begin("color");
1215 trace_dump_array(float, color
->f
, 4);
1218 trace_dump_arg_end();
1219 trace_dump_arg(float, depth
);
1220 trace_dump_arg(uint
, stencil
);
1222 pipe
->clear(pipe
, buffers
, color
, depth
, stencil
);
1224 trace_dump_call_end();
1229 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1230 struct pipe_surface
*dst
,
1231 const union pipe_color_union
*color
,
1232 unsigned dstx
, unsigned dsty
,
1233 unsigned width
, unsigned height
)
1235 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1236 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1238 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1240 trace_dump_call_begin("pipe_context", "clear_render_target");
1242 trace_dump_arg(ptr
, pipe
);
1243 trace_dump_arg(ptr
, dst
);
1244 trace_dump_arg_array(float, color
->f
, 4);
1245 trace_dump_arg(uint
, dstx
);
1246 trace_dump_arg(uint
, dsty
);
1247 trace_dump_arg(uint
, width
);
1248 trace_dump_arg(uint
, height
);
1250 pipe
->clear_render_target(pipe
, dst
, color
, dstx
, dsty
, width
, height
);
1252 trace_dump_call_end();
1256 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1257 struct pipe_surface
*dst
,
1258 unsigned clear_flags
,
1261 unsigned dstx
, unsigned dsty
,
1262 unsigned width
, unsigned height
)
1264 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1265 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1267 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1269 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1271 trace_dump_arg(ptr
, pipe
);
1272 trace_dump_arg(ptr
, dst
);
1273 trace_dump_arg(uint
, clear_flags
);
1274 trace_dump_arg(float, depth
);
1275 trace_dump_arg(uint
, stencil
);
1276 trace_dump_arg(uint
, dstx
);
1277 trace_dump_arg(uint
, dsty
);
1278 trace_dump_arg(uint
, width
);
1279 trace_dump_arg(uint
, height
);
1281 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1282 dstx
, dsty
, width
, height
);
1284 trace_dump_call_end();
1288 trace_context_flush(struct pipe_context
*_pipe
,
1289 struct pipe_fence_handle
**fence
,
1292 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1293 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1295 trace_dump_call_begin("pipe_context", "flush");
1297 trace_dump_arg(ptr
, pipe
);
1298 trace_dump_arg(uint
, flags
);
1300 pipe
->flush(pipe
, fence
, flags
);
1303 trace_dump_ret(ptr
, *fence
);
1305 trace_dump_call_end();
1309 static inline boolean
1310 trace_context_generate_mipmap(struct pipe_context
*_pipe
,
1311 struct pipe_resource
*res
,
1312 enum pipe_format format
,
1313 unsigned base_level
,
1314 unsigned last_level
,
1315 unsigned first_layer
,
1316 unsigned last_layer
)
1318 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1319 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1322 res
= trace_resource_unwrap(tr_ctx
, res
);
1324 trace_dump_call_begin("pipe_context", "generate_mipmap");
1326 trace_dump_arg(ptr
, pipe
);
1327 trace_dump_arg(ptr
, res
);
1329 trace_dump_arg(format
, format
);
1330 trace_dump_arg(uint
, base_level
);
1331 trace_dump_arg(uint
, last_level
);
1332 trace_dump_arg(uint
, first_layer
);
1333 trace_dump_arg(uint
, last_layer
);
1335 ret
= pipe
->generate_mipmap(pipe
, res
, format
, base_level
, last_level
,
1336 first_layer
, last_layer
);
1338 trace_dump_ret(bool, ret
);
1339 trace_dump_call_end();
1346 trace_context_destroy(struct pipe_context
*_pipe
)
1348 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1349 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1351 trace_dump_call_begin("pipe_context", "destroy");
1352 trace_dump_arg(ptr
, pipe
);
1353 trace_dump_call_end();
1355 pipe
->destroy(pipe
);
1361 /********************************************************************
1367 trace_context_transfer_map(struct pipe_context
*_context
,
1368 struct pipe_resource
*_resource
,
1371 const struct pipe_box
*box
,
1372 struct pipe_transfer
**transfer
)
1374 struct trace_context
*tr_context
= trace_context(_context
);
1375 struct trace_resource
*tr_res
= trace_resource(_resource
);
1376 struct pipe_context
*context
= tr_context
->pipe
;
1377 struct pipe_resource
*texture
= tr_res
->resource
;
1378 struct pipe_transfer
*result
= NULL
;
1381 assert(texture
->screen
== context
->screen
);
1384 * Map and transfers can't be serialized so we convert all write transfers
1385 * to transfer_inline_write and ignore read transfers.
1388 map
= context
->transfer_map(context
, texture
, level
, usage
, box
, &result
);
1392 *transfer
= trace_transfer_create(tr_context
, tr_res
, result
);
1395 if(usage
& PIPE_TRANSFER_WRITE
) {
1396 trace_transfer(*transfer
)->map
= map
;
1400 return *transfer
? map
: NULL
;
1404 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1405 struct pipe_transfer
*_transfer
,
1406 const struct pipe_box
*box
)
1408 struct trace_context
*tr_context
= trace_context(_context
);
1409 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1410 struct pipe_context
*context
= tr_context
->pipe
;
1411 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1413 context
->transfer_flush_region(context
,
1419 trace_context_transfer_unmap(struct pipe_context
*_context
,
1420 struct pipe_transfer
*_transfer
)
1422 struct trace_context
*tr_ctx
= trace_context(_context
);
1423 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1424 struct pipe_context
*context
= tr_ctx
->pipe
;
1425 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1429 * Fake a transfer_inline_write
1432 struct pipe_resource
*resource
= transfer
->resource
;
1433 unsigned level
= transfer
->level
;
1434 unsigned usage
= transfer
->usage
;
1435 const struct pipe_box
*box
= &transfer
->box
;
1436 unsigned stride
= transfer
->stride
;
1437 unsigned layer_stride
= transfer
->layer_stride
;
1439 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1441 trace_dump_arg(ptr
, context
);
1442 trace_dump_arg(ptr
, resource
);
1443 trace_dump_arg(uint
, level
);
1444 trace_dump_arg(uint
, usage
);
1445 trace_dump_arg(box
, box
);
1447 trace_dump_arg_begin("data");
1448 trace_dump_box_bytes(tr_trans
->map
,
1453 trace_dump_arg_end();
1455 trace_dump_arg(uint
, stride
);
1456 trace_dump_arg(uint
, layer_stride
);
1458 trace_dump_call_end();
1460 tr_trans
->map
= NULL
;
1463 context
->transfer_unmap(context
, transfer
);
1464 trace_transfer_destroy(tr_ctx
, tr_trans
);
1469 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1470 struct pipe_resource
*_resource
,
1473 const struct pipe_box
*box
,
1476 unsigned layer_stride
)
1478 struct trace_context
*tr_context
= trace_context(_context
);
1479 struct trace_resource
*tr_res
= trace_resource(_resource
);
1480 struct pipe_context
*context
= tr_context
->pipe
;
1481 struct pipe_resource
*resource
= tr_res
->resource
;
1483 assert(resource
->screen
== context
->screen
);
1485 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1487 trace_dump_arg(ptr
, context
);
1488 trace_dump_arg(ptr
, resource
);
1489 trace_dump_arg(uint
, level
);
1490 trace_dump_arg(uint
, usage
);
1491 trace_dump_arg(box
, box
);
1493 trace_dump_arg_begin("data");
1494 trace_dump_box_bytes(data
,
1499 trace_dump_arg_end();
1501 trace_dump_arg(uint
, stride
);
1502 trace_dump_arg(uint
, layer_stride
);
1504 trace_dump_call_end();
1506 context
->transfer_inline_write(context
, resource
,
1507 level
, usage
, box
, data
, stride
, layer_stride
);
1511 static void trace_context_render_condition(struct pipe_context
*_context
,
1512 struct pipe_query
*query
,
1516 struct trace_context
*tr_context
= trace_context(_context
);
1517 struct pipe_context
*context
= tr_context
->pipe
;
1519 query
= trace_query_unwrap(query
);
1521 trace_dump_call_begin("pipe_context", "render_condition");
1523 trace_dump_arg(ptr
, context
);
1524 trace_dump_arg(ptr
, query
);
1525 trace_dump_arg(bool, condition
);
1526 trace_dump_arg(uint
, mode
);
1528 trace_dump_call_end();
1530 context
->render_condition(context
, query
, condition
, mode
);
1534 static void trace_context_texture_barrier(struct pipe_context
*_context
)
1536 struct trace_context
*tr_context
= trace_context(_context
);
1537 struct pipe_context
*context
= tr_context
->pipe
;
1539 trace_dump_call_begin("pipe_context", "texture_barrier");
1541 trace_dump_arg(ptr
, context
);
1543 trace_dump_call_end();
1545 context
->texture_barrier(context
);
1549 static void trace_context_memory_barrier(struct pipe_context
*_context
,
1552 struct trace_context
*tr_context
= trace_context(_context
);
1553 struct pipe_context
*context
= tr_context
->pipe
;
1555 trace_dump_call_begin("pipe_context", "memory_barrier");
1556 trace_dump_arg(ptr
, context
);
1557 trace_dump_arg(uint
, flags
);
1558 trace_dump_call_end();
1560 context
->memory_barrier(context
, flags
);
1564 static void trace_context_set_tess_state(struct pipe_context
*_context
,
1565 const float default_outer_level
[4],
1566 const float default_inner_level
[2])
1568 struct trace_context
*tr_context
= trace_context(_context
);
1569 struct pipe_context
*context
= tr_context
->pipe
;
1571 trace_dump_call_begin("pipe_context", "set_tess_state");
1572 trace_dump_arg(ptr
, context
);
1573 trace_dump_arg_array(float, default_outer_level
, 4);
1574 trace_dump_arg_array(float, default_inner_level
, 2);
1575 trace_dump_call_end();
1577 context
->set_tess_state(context
, default_outer_level
, default_inner_level
);
1581 static void trace_context_set_shader_buffers(struct pipe_context
*_context
,
1583 unsigned start
, unsigned nr
,
1584 struct pipe_shader_buffer
*buffers
)
1586 struct trace_context
*tr_context
= trace_context(_context
);
1587 struct pipe_context
*context
= tr_context
->pipe
;
1588 struct pipe_shader_buffer
*_buffers
= NULL
;
1590 trace_dump_call_begin("pipe_context", "set_shader_buffers");
1591 trace_dump_arg(ptr
, context
);
1592 trace_dump_arg(uint
, shader
);
1593 trace_dump_arg(uint
, start
);
1594 trace_dump_arg_begin("buffers");
1595 trace_dump_struct_array(shader_buffer
, buffers
, nr
);
1596 trace_dump_arg_end();
1597 trace_dump_call_end();
1602 _buffers
= MALLOC(nr
* sizeof(struct pipe_shader_buffer
));
1606 for (i
= 0; i
< nr
; i
++) {
1607 _buffers
[i
] = buffers
[i
];
1608 _buffers
[i
].buffer
= trace_resource_unwrap(
1609 tr_context
, _buffers
[i
].buffer
);
1613 context
->set_shader_buffers(context
, shader
, start
, nr
, _buffers
);
1620 static const struct debug_named_value rbug_blocker_flags
[] = {
1621 {"before", 1, NULL
},
1623 DEBUG_NAMED_VALUE_END
1626 struct pipe_context
*
1627 trace_context_create(struct trace_screen
*tr_scr
,
1628 struct pipe_context
*pipe
)
1630 struct trace_context
*tr_ctx
;
1635 if(!trace_enabled())
1638 tr_ctx
= CALLOC_STRUCT(trace_context
);
1642 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1643 tr_ctx
->base
.screen
= &tr_scr
->base
;
1645 tr_ctx
->base
.destroy
= trace_context_destroy
;
1647 #define TR_CTX_INIT(_member) \
1648 tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
1650 TR_CTX_INIT(draw_vbo
);
1651 TR_CTX_INIT(render_condition
);
1652 TR_CTX_INIT(create_query
);
1653 TR_CTX_INIT(destroy_query
);
1654 TR_CTX_INIT(begin_query
);
1655 TR_CTX_INIT(end_query
);
1656 TR_CTX_INIT(get_query_result
);
1657 TR_CTX_INIT(create_blend_state
);
1658 TR_CTX_INIT(bind_blend_state
);
1659 TR_CTX_INIT(delete_blend_state
);
1660 TR_CTX_INIT(create_sampler_state
);
1661 TR_CTX_INIT(bind_sampler_states
);
1662 TR_CTX_INIT(delete_sampler_state
);
1663 TR_CTX_INIT(create_rasterizer_state
);
1664 TR_CTX_INIT(bind_rasterizer_state
);
1665 TR_CTX_INIT(delete_rasterizer_state
);
1666 TR_CTX_INIT(create_depth_stencil_alpha_state
);
1667 TR_CTX_INIT(bind_depth_stencil_alpha_state
);
1668 TR_CTX_INIT(delete_depth_stencil_alpha_state
);
1669 TR_CTX_INIT(create_fs_state
);
1670 TR_CTX_INIT(bind_fs_state
);
1671 TR_CTX_INIT(delete_fs_state
);
1672 TR_CTX_INIT(create_vs_state
);
1673 TR_CTX_INIT(bind_vs_state
);
1674 TR_CTX_INIT(delete_vs_state
);
1675 TR_CTX_INIT(create_gs_state
);
1676 TR_CTX_INIT(bind_gs_state
);
1677 TR_CTX_INIT(delete_gs_state
);
1678 TR_CTX_INIT(create_tcs_state
);
1679 TR_CTX_INIT(bind_tcs_state
);
1680 TR_CTX_INIT(delete_tcs_state
);
1681 TR_CTX_INIT(create_tes_state
);
1682 TR_CTX_INIT(bind_tes_state
);
1683 TR_CTX_INIT(delete_tes_state
);
1684 TR_CTX_INIT(create_vertex_elements_state
);
1685 TR_CTX_INIT(bind_vertex_elements_state
);
1686 TR_CTX_INIT(delete_vertex_elements_state
);
1687 TR_CTX_INIT(set_blend_color
);
1688 TR_CTX_INIT(set_stencil_ref
);
1689 TR_CTX_INIT(set_clip_state
);
1690 TR_CTX_INIT(set_sample_mask
);
1691 TR_CTX_INIT(set_constant_buffer
);
1692 TR_CTX_INIT(set_framebuffer_state
);
1693 TR_CTX_INIT(set_polygon_stipple
);
1694 TR_CTX_INIT(set_scissor_states
);
1695 TR_CTX_INIT(set_viewport_states
);
1696 TR_CTX_INIT(set_sampler_views
);
1697 TR_CTX_INIT(create_sampler_view
);
1698 TR_CTX_INIT(sampler_view_destroy
);
1699 TR_CTX_INIT(create_surface
);
1700 TR_CTX_INIT(surface_destroy
);
1701 TR_CTX_INIT(set_vertex_buffers
);
1702 TR_CTX_INIT(set_index_buffer
);
1703 TR_CTX_INIT(create_stream_output_target
);
1704 TR_CTX_INIT(stream_output_target_destroy
);
1705 TR_CTX_INIT(set_stream_output_targets
);
1706 TR_CTX_INIT(resource_copy_region
);
1708 TR_CTX_INIT(flush_resource
);
1710 TR_CTX_INIT(clear_render_target
);
1711 TR_CTX_INIT(clear_depth_stencil
);
1713 TR_CTX_INIT(generate_mipmap
);
1714 TR_CTX_INIT(texture_barrier
);
1715 TR_CTX_INIT(memory_barrier
);
1716 TR_CTX_INIT(set_tess_state
);
1717 TR_CTX_INIT(set_shader_buffers
);
1719 TR_CTX_INIT(transfer_map
);
1720 TR_CTX_INIT(transfer_unmap
);
1721 TR_CTX_INIT(transfer_flush_region
);
1722 TR_CTX_INIT(transfer_inline_write
);
1726 tr_ctx
->pipe
= pipe
;
1728 return &tr_ctx
->base
;
1736 * Sanity checker: check that the given context really is a
1737 * trace context (and not the wrapped driver's context).
1740 trace_context_check(const struct pipe_context
*pipe
)
1742 struct trace_context
*tr_ctx
= (struct trace_context
*) pipe
;
1743 assert(tr_ctx
->base
.destroy
== trace_context_destroy
);