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 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
,
133 struct trace_context
*tr_ctx
= trace_context(_pipe
);
134 struct pipe_context
*pipe
= tr_ctx
->pipe
;
135 struct pipe_query
*query
;
137 trace_dump_call_begin("pipe_context", "create_query");
139 trace_dump_arg(ptr
, pipe
);
140 trace_dump_arg(query_type
, query_type
);
141 trace_dump_arg(int, index
);
143 query
= pipe
->create_query(pipe
, query_type
, index
);
145 trace_dump_ret(ptr
, query
);
147 trace_dump_call_end();
149 /* Wrap query object. */
151 struct trace_query
*tr_query
= CALLOC_STRUCT(trace_query
);
153 tr_query
->type
= query_type
;
154 tr_query
->query
= query
;
155 query
= (struct pipe_query
*)tr_query
;
157 pipe
->destroy_query(pipe
, query
);
167 trace_context_destroy_query(struct pipe_context
*_pipe
,
168 struct pipe_query
*_query
)
170 struct trace_context
*tr_ctx
= trace_context(_pipe
);
171 struct pipe_context
*pipe
= tr_ctx
->pipe
;
172 struct trace_query
*tr_query
= trace_query(_query
);
173 struct pipe_query
*query
= tr_query
->query
;
177 trace_dump_call_begin("pipe_context", "destroy_query");
179 trace_dump_arg(ptr
, pipe
);
180 trace_dump_arg(ptr
, query
);
182 pipe
->destroy_query(pipe
, query
);
184 trace_dump_call_end();
188 static inline boolean
189 trace_context_begin_query(struct pipe_context
*_pipe
,
190 struct pipe_query
*query
)
192 struct trace_context
*tr_ctx
= trace_context(_pipe
);
193 struct pipe_context
*pipe
= tr_ctx
->pipe
;
196 query
= trace_query_unwrap(query
);
198 trace_dump_call_begin("pipe_context", "begin_query");
200 trace_dump_arg(ptr
, pipe
);
201 trace_dump_arg(ptr
, query
);
203 ret
= pipe
->begin_query(pipe
, query
);
205 trace_dump_call_end();
211 trace_context_end_query(struct pipe_context
*_pipe
,
212 struct pipe_query
*query
)
214 struct trace_context
*tr_ctx
= trace_context(_pipe
);
215 struct pipe_context
*pipe
= tr_ctx
->pipe
;
217 query
= trace_query_unwrap(query
);
219 trace_dump_call_begin("pipe_context", "end_query");
221 trace_dump_arg(ptr
, pipe
);
222 trace_dump_arg(ptr
, query
);
224 pipe
->end_query(pipe
, query
);
226 trace_dump_call_end();
230 static inline boolean
231 trace_context_get_query_result(struct pipe_context
*_pipe
,
232 struct pipe_query
*_query
,
234 union pipe_query_result
*result
)
236 struct trace_context
*tr_ctx
= trace_context(_pipe
);
237 struct pipe_context
*pipe
= tr_ctx
->pipe
;
238 struct trace_query
*tr_query
= trace_query(_query
);
239 struct pipe_query
*query
= tr_query
->query
;
242 trace_dump_call_begin("pipe_context", "get_query_result");
244 trace_dump_arg(ptr
, pipe
);
245 trace_dump_arg(ptr
, query
);
247 ret
= pipe
->get_query_result(pipe
, query
, wait
, result
);
249 trace_dump_arg_begin("result");
251 trace_dump_query_result(tr_query
->type
, result
);
255 trace_dump_arg_end();
257 trace_dump_ret(bool, ret
);
259 trace_dump_call_end();
266 trace_context_create_blend_state(struct pipe_context
*_pipe
,
267 const struct pipe_blend_state
*state
)
269 struct trace_context
*tr_ctx
= trace_context(_pipe
);
270 struct pipe_context
*pipe
= tr_ctx
->pipe
;
273 trace_dump_call_begin("pipe_context", "create_blend_state");
275 trace_dump_arg(ptr
, pipe
);
276 trace_dump_arg(blend_state
, state
);
278 result
= pipe
->create_blend_state(pipe
, state
);
280 trace_dump_ret(ptr
, result
);
282 trace_dump_call_end();
289 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
292 struct trace_context
*tr_ctx
= trace_context(_pipe
);
293 struct pipe_context
*pipe
= tr_ctx
->pipe
;
295 trace_dump_call_begin("pipe_context", "bind_blend_state");
297 trace_dump_arg(ptr
, pipe
);
298 trace_dump_arg(ptr
, state
);
300 pipe
->bind_blend_state(pipe
, state
);
302 trace_dump_call_end();
307 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
310 struct trace_context
*tr_ctx
= trace_context(_pipe
);
311 struct pipe_context
*pipe
= tr_ctx
->pipe
;
313 trace_dump_call_begin("pipe_context", "delete_blend_state");
315 trace_dump_arg(ptr
, pipe
);
316 trace_dump_arg(ptr
, state
);
318 pipe
->delete_blend_state(pipe
, state
);
320 trace_dump_call_end();
325 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
326 const struct pipe_sampler_state
*state
)
328 struct trace_context
*tr_ctx
= trace_context(_pipe
);
329 struct pipe_context
*pipe
= tr_ctx
->pipe
;
332 trace_dump_call_begin("pipe_context", "create_sampler_state");
334 trace_dump_arg(ptr
, pipe
);
335 trace_dump_arg(sampler_state
, state
);
337 result
= pipe
->create_sampler_state(pipe
, state
);
339 trace_dump_ret(ptr
, result
);
341 trace_dump_call_end();
348 trace_context_bind_sampler_states(struct pipe_context
*_pipe
,
354 struct trace_context
*tr_ctx
= trace_context(_pipe
);
355 struct pipe_context
*pipe
= tr_ctx
->pipe
;
357 /* remove this when we have pipe->bind_sampler_states(..., start, ...) */
360 trace_dump_call_begin("pipe_context", "bind_sampler_states");
362 trace_dump_arg(ptr
, pipe
);
363 trace_dump_arg(uint
, shader
);
364 trace_dump_arg(uint
, start
);
365 trace_dump_arg(uint
, num_states
);
366 trace_dump_arg_array(ptr
, states
, num_states
);
368 pipe
->bind_sampler_states(pipe
, shader
, start
, num_states
, states
);
370 trace_dump_call_end();
375 trace_context_delete_sampler_state(struct pipe_context
*_pipe
,
378 struct trace_context
*tr_ctx
= trace_context(_pipe
);
379 struct pipe_context
*pipe
= tr_ctx
->pipe
;
381 trace_dump_call_begin("pipe_context", "delete_sampler_state");
383 trace_dump_arg(ptr
, pipe
);
384 trace_dump_arg(ptr
, state
);
386 pipe
->delete_sampler_state(pipe
, state
);
388 trace_dump_call_end();
393 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
394 const struct pipe_rasterizer_state
*state
)
396 struct trace_context
*tr_ctx
= trace_context(_pipe
);
397 struct pipe_context
*pipe
= tr_ctx
->pipe
;
400 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
402 trace_dump_arg(ptr
, pipe
);
403 trace_dump_arg(rasterizer_state
, state
);
405 result
= pipe
->create_rasterizer_state(pipe
, state
);
407 trace_dump_ret(ptr
, result
);
409 trace_dump_call_end();
416 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
419 struct trace_context
*tr_ctx
= trace_context(_pipe
);
420 struct pipe_context
*pipe
= tr_ctx
->pipe
;
422 trace_dump_call_begin("pipe_context", "bind_rasterizer_state");
424 trace_dump_arg(ptr
, pipe
);
425 trace_dump_arg(ptr
, state
);
427 pipe
->bind_rasterizer_state(pipe
, state
);
429 trace_dump_call_end();
434 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
437 struct trace_context
*tr_ctx
= trace_context(_pipe
);
438 struct pipe_context
*pipe
= tr_ctx
->pipe
;
440 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
442 trace_dump_arg(ptr
, pipe
);
443 trace_dump_arg(ptr
, state
);
445 pipe
->delete_rasterizer_state(pipe
, state
);
447 trace_dump_call_end();
452 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
453 const struct pipe_depth_stencil_alpha_state
*state
)
455 struct trace_context
*tr_ctx
= trace_context(_pipe
);
456 struct pipe_context
*pipe
= tr_ctx
->pipe
;
459 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
461 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
463 trace_dump_arg(ptr
, pipe
);
464 trace_dump_arg(depth_stencil_alpha_state
, state
);
466 trace_dump_ret(ptr
, result
);
468 trace_dump_call_end();
475 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
478 struct trace_context
*tr_ctx
= trace_context(_pipe
);
479 struct pipe_context
*pipe
= tr_ctx
->pipe
;
481 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
483 trace_dump_arg(ptr
, pipe
);
484 trace_dump_arg(ptr
, state
);
486 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
488 trace_dump_call_end();
493 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
496 struct trace_context
*tr_ctx
= trace_context(_pipe
);
497 struct pipe_context
*pipe
= tr_ctx
->pipe
;
499 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
501 trace_dump_arg(ptr
, pipe
);
502 trace_dump_arg(ptr
, state
);
504 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
506 trace_dump_call_end();
510 #define TRACE_SHADER_STATE(shader_type) \
511 static inline void * \
512 trace_context_create_##shader_type##_state(struct pipe_context *_pipe, \
513 const struct pipe_shader_state *state) \
515 struct trace_context *tr_ctx = trace_context(_pipe); \
516 struct pipe_context *pipe = tr_ctx->pipe; \
518 trace_dump_call_begin("pipe_context", "create_" #shader_type "_state"); \
519 trace_dump_arg(ptr, pipe); \
520 trace_dump_arg(shader_state, state); \
521 result = pipe->create_##shader_type##_state(pipe, state); \
522 trace_dump_ret(ptr, result); \
523 trace_dump_call_end(); \
528 trace_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
531 struct trace_context *tr_ctx = trace_context(_pipe); \
532 struct pipe_context *pipe = tr_ctx->pipe; \
533 trace_dump_call_begin("pipe_context", "bind_" #shader_type "_state"); \
534 trace_dump_arg(ptr, pipe); \
535 trace_dump_arg(ptr, state); \
536 pipe->bind_##shader_type##_state(pipe, state); \
537 trace_dump_call_end(); \
541 trace_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
544 struct trace_context *tr_ctx = trace_context(_pipe); \
545 struct pipe_context *pipe = tr_ctx->pipe; \
546 trace_dump_call_begin("pipe_context", "delete_" #shader_type "_state"); \
547 trace_dump_arg(ptr, pipe); \
548 trace_dump_arg(ptr, state); \
549 pipe->delete_##shader_type##_state(pipe, state); \
550 trace_dump_call_end(); \
553 TRACE_SHADER_STATE(fs
)
554 TRACE_SHADER_STATE(vs
)
555 TRACE_SHADER_STATE(gs
)
556 TRACE_SHADER_STATE(tcs
)
557 TRACE_SHADER_STATE(tes
)
559 #undef TRACE_SHADER_STATE
563 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
564 unsigned num_elements
,
565 const struct pipe_vertex_element
*elements
)
567 struct trace_context
*tr_ctx
= trace_context(_pipe
);
568 struct pipe_context
*pipe
= tr_ctx
->pipe
;
571 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
573 trace_dump_arg(ptr
, pipe
);
574 trace_dump_arg(uint
, num_elements
);
576 trace_dump_arg_begin("elements");
577 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
578 trace_dump_arg_end();
580 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
582 trace_dump_ret(ptr
, result
);
584 trace_dump_call_end();
591 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
594 struct trace_context
*tr_ctx
= trace_context(_pipe
);
595 struct pipe_context
*pipe
= tr_ctx
->pipe
;
597 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
599 trace_dump_arg(ptr
, pipe
);
600 trace_dump_arg(ptr
, state
);
602 pipe
->bind_vertex_elements_state(pipe
, state
);
604 trace_dump_call_end();
609 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
612 struct trace_context
*tr_ctx
= trace_context(_pipe
);
613 struct pipe_context
*pipe
= tr_ctx
->pipe
;
615 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
617 trace_dump_arg(ptr
, pipe
);
618 trace_dump_arg(ptr
, state
);
620 pipe
->delete_vertex_elements_state(pipe
, state
);
622 trace_dump_call_end();
627 trace_context_set_blend_color(struct pipe_context
*_pipe
,
628 const struct pipe_blend_color
*state
)
630 struct trace_context
*tr_ctx
= trace_context(_pipe
);
631 struct pipe_context
*pipe
= tr_ctx
->pipe
;
633 trace_dump_call_begin("pipe_context", "set_blend_color");
635 trace_dump_arg(ptr
, pipe
);
636 trace_dump_arg(blend_color
, state
);
638 pipe
->set_blend_color(pipe
, state
);
640 trace_dump_call_end();
645 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
646 const struct pipe_stencil_ref
*state
)
648 struct trace_context
*tr_ctx
= trace_context(_pipe
);
649 struct pipe_context
*pipe
= tr_ctx
->pipe
;
651 trace_dump_call_begin("pipe_context", "set_stencil_ref");
653 trace_dump_arg(ptr
, pipe
);
654 trace_dump_arg(stencil_ref
, state
);
656 pipe
->set_stencil_ref(pipe
, state
);
658 trace_dump_call_end();
663 trace_context_set_clip_state(struct pipe_context
*_pipe
,
664 const struct pipe_clip_state
*state
)
666 struct trace_context
*tr_ctx
= trace_context(_pipe
);
667 struct pipe_context
*pipe
= tr_ctx
->pipe
;
669 trace_dump_call_begin("pipe_context", "set_clip_state");
671 trace_dump_arg(ptr
, pipe
);
672 trace_dump_arg(clip_state
, state
);
674 pipe
->set_clip_state(pipe
, state
);
676 trace_dump_call_end();
680 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
681 unsigned sample_mask
)
683 struct trace_context
*tr_ctx
= trace_context(_pipe
);
684 struct pipe_context
*pipe
= tr_ctx
->pipe
;
686 trace_dump_call_begin("pipe_context", "set_sample_mask");
688 trace_dump_arg(ptr
, pipe
);
689 trace_dump_arg(uint
, sample_mask
);
691 pipe
->set_sample_mask(pipe
, sample_mask
);
693 trace_dump_call_end();
697 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
698 uint shader
, uint index
,
699 struct pipe_constant_buffer
*constant_buffer
)
701 struct trace_context
*tr_ctx
= trace_context(_pipe
);
702 struct pipe_context
*pipe
= tr_ctx
->pipe
;
703 struct pipe_constant_buffer cb
;
705 if (constant_buffer
) {
706 cb
= *constant_buffer
;
707 cb
.buffer
= trace_resource_unwrap(tr_ctx
, constant_buffer
->buffer
);
708 constant_buffer
= &cb
;
711 trace_dump_call_begin("pipe_context", "set_constant_buffer");
713 trace_dump_arg(ptr
, pipe
);
714 trace_dump_arg(uint
, shader
);
715 trace_dump_arg(uint
, index
);
716 trace_dump_arg(constant_buffer
, constant_buffer
);
718 pipe
->set_constant_buffer(pipe
, shader
, index
, constant_buffer
);
720 trace_dump_call_end();
725 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
726 const struct pipe_framebuffer_state
*state
)
728 struct trace_context
*tr_ctx
= trace_context(_pipe
);
729 struct pipe_context
*pipe
= tr_ctx
->pipe
;
730 struct pipe_framebuffer_state unwrapped_state
;
734 /* Unwrap the input state */
735 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
736 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
737 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
738 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
739 unwrapped_state
.cbufs
[i
] = NULL
;
740 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
741 state
= &unwrapped_state
;
743 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
745 trace_dump_arg(ptr
, pipe
);
746 trace_dump_arg(framebuffer_state
, state
);
748 pipe
->set_framebuffer_state(pipe
, state
);
750 trace_dump_call_end();
755 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
756 const struct pipe_poly_stipple
*state
)
758 struct trace_context
*tr_ctx
= trace_context(_pipe
);
759 struct pipe_context
*pipe
= tr_ctx
->pipe
;
761 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
763 trace_dump_arg(ptr
, pipe
);
764 trace_dump_arg(poly_stipple
, state
);
766 pipe
->set_polygon_stipple(pipe
, state
);
768 trace_dump_call_end();
773 trace_context_set_scissor_states(struct pipe_context
*_pipe
,
775 unsigned num_scissors
,
776 const struct pipe_scissor_state
*states
)
778 struct trace_context
*tr_ctx
= trace_context(_pipe
);
779 struct pipe_context
*pipe
= tr_ctx
->pipe
;
781 trace_dump_call_begin("pipe_context", "set_scissor_states");
783 trace_dump_arg(ptr
, pipe
);
784 trace_dump_arg(uint
, start_slot
);
785 trace_dump_arg(uint
, num_scissors
);
786 trace_dump_arg(scissor_state
, states
);
788 pipe
->set_scissor_states(pipe
, start_slot
, num_scissors
, states
);
790 trace_dump_call_end();
795 trace_context_set_viewport_states(struct pipe_context
*_pipe
,
797 unsigned num_viewports
,
798 const struct pipe_viewport_state
*states
)
800 struct trace_context
*tr_ctx
= trace_context(_pipe
);
801 struct pipe_context
*pipe
= tr_ctx
->pipe
;
803 trace_dump_call_begin("pipe_context", "set_viewport_states");
805 trace_dump_arg(ptr
, pipe
);
806 trace_dump_arg(uint
, start_slot
);
807 trace_dump_arg(uint
, num_viewports
);
808 trace_dump_arg(viewport_state
, states
);
810 pipe
->set_viewport_states(pipe
, start_slot
, num_viewports
, states
);
812 trace_dump_call_end();
816 static struct pipe_sampler_view
*
817 trace_context_create_sampler_view(struct pipe_context
*_pipe
,
818 struct pipe_resource
*_resource
,
819 const struct pipe_sampler_view
*templ
)
821 struct trace_context
*tr_ctx
= trace_context(_pipe
);
822 struct trace_resource
*tr_res
= trace_resource(_resource
);
823 struct pipe_context
*pipe
= tr_ctx
->pipe
;
824 struct pipe_resource
*resource
= tr_res
->resource
;
825 struct pipe_sampler_view
*result
;
826 struct trace_sampler_view
*tr_view
;
828 trace_dump_call_begin("pipe_context", "create_sampler_view");
830 trace_dump_arg(ptr
, pipe
);
831 trace_dump_arg(ptr
, resource
);
833 trace_dump_arg_begin("templ");
834 trace_dump_sampler_view_template(templ
, resource
->target
);
835 trace_dump_arg_end();
837 result
= pipe
->create_sampler_view(pipe
, resource
, templ
);
839 trace_dump_ret(ptr
, result
);
841 trace_dump_call_end();
844 * Wrap pipe_sampler_view
846 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
847 tr_view
->base
= *templ
;
848 tr_view
->base
.reference
.count
= 1;
849 tr_view
->base
.texture
= NULL
;
850 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
851 tr_view
->base
.context
= _pipe
;
852 tr_view
->sampler_view
= result
;
853 result
= &tr_view
->base
;
860 trace_context_sampler_view_destroy(struct pipe_context
*_pipe
,
861 struct pipe_sampler_view
*_view
)
863 struct trace_context
*tr_ctx
= trace_context(_pipe
);
864 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
865 struct pipe_context
*pipe
= tr_ctx
->pipe
;
866 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
868 assert(_view
->context
== _pipe
);
870 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
872 trace_dump_arg(ptr
, pipe
);
873 trace_dump_arg(ptr
, view
);
875 pipe_sampler_view_reference(&tr_view
->sampler_view
, NULL
);
877 trace_dump_call_end();
879 pipe_resource_reference(&_view
->texture
, NULL
);
883 /********************************************************************
888 static struct pipe_surface
*
889 trace_context_create_surface(struct pipe_context
*_pipe
,
890 struct pipe_resource
*_resource
,
891 const struct pipe_surface
*surf_tmpl
)
893 struct trace_context
*tr_ctx
= trace_context(_pipe
);
894 struct trace_resource
*tr_res
= trace_resource(_resource
);
895 struct pipe_context
*pipe
= tr_ctx
->pipe
;
896 struct pipe_resource
*resource
= tr_res
->resource
;
897 struct pipe_surface
*result
= NULL
;
899 trace_dump_call_begin("pipe_context", "create_surface");
901 trace_dump_arg(ptr
, pipe
);
902 trace_dump_arg(ptr
, resource
);
904 trace_dump_arg_begin("surf_tmpl");
905 trace_dump_surface_template(surf_tmpl
, resource
->target
);
906 trace_dump_arg_end();
909 result
= pipe
->create_surface(pipe
, resource
, surf_tmpl
);
911 trace_dump_ret(ptr
, result
);
913 trace_dump_call_end();
915 result
= trace_surf_create(tr_ctx
, tr_res
, result
);
922 trace_context_surface_destroy(struct pipe_context
*_pipe
,
923 struct pipe_surface
*_surface
)
925 struct trace_context
*tr_ctx
= trace_context(_pipe
);
926 struct pipe_context
*pipe
= tr_ctx
->pipe
;
927 struct trace_surface
*tr_surf
= trace_surface(_surface
);
928 struct pipe_surface
*surface
= tr_surf
->surface
;
930 trace_dump_call_begin("pipe_context", "surface_destroy");
932 trace_dump_arg(ptr
, pipe
);
933 trace_dump_arg(ptr
, surface
);
935 trace_dump_call_end();
937 trace_surf_destroy(tr_surf
);
942 trace_context_set_sampler_views(struct pipe_context
*_pipe
,
946 struct pipe_sampler_view
**views
)
948 struct trace_context
*tr_ctx
= trace_context(_pipe
);
949 struct trace_sampler_view
*tr_view
;
950 struct pipe_context
*pipe
= tr_ctx
->pipe
;
951 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SHADER_SAMPLER_VIEWS
];
954 /* remove this when we have pipe->set_sampler_views(..., start, ...) */
957 for(i
= 0; i
< num
; ++i
) {
958 tr_view
= trace_sampler_view(views
[i
]);
959 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
961 views
= unwrapped_views
;
963 trace_dump_call_begin("pipe_context", "set_sampler_views");
965 trace_dump_arg(ptr
, pipe
);
966 trace_dump_arg(uint
, shader
);
967 trace_dump_arg(uint
, start
);
968 trace_dump_arg(uint
, num
);
969 trace_dump_arg_array(ptr
, views
, num
);
971 pipe
->set_sampler_views(pipe
, shader
, start
, num
, views
);
973 trace_dump_call_end();
978 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
979 unsigned start_slot
, unsigned num_buffers
,
980 const struct pipe_vertex_buffer
*buffers
)
982 struct trace_context
*tr_ctx
= trace_context(_pipe
);
983 struct pipe_context
*pipe
= tr_ctx
->pipe
;
986 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
988 trace_dump_arg(ptr
, pipe
);
989 trace_dump_arg(uint
, start_slot
);
990 trace_dump_arg(uint
, num_buffers
);
992 trace_dump_arg_begin("buffers");
993 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
994 trace_dump_arg_end();
997 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
998 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
999 for (i
= 0; i
< num_buffers
; i
++)
1000 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
1001 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, _buffers
);
1004 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, NULL
);
1007 trace_dump_call_end();
1012 trace_context_set_index_buffer(struct pipe_context
*_pipe
,
1013 const struct pipe_index_buffer
*ib
)
1015 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1016 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1018 trace_dump_call_begin("pipe_context", "set_index_buffer");
1020 trace_dump_arg(ptr
, pipe
);
1021 trace_dump_arg(index_buffer
, ib
);
1024 struct pipe_index_buffer _ib
;
1026 _ib
.buffer
= trace_resource_unwrap(tr_ctx
, ib
->buffer
);
1027 pipe
->set_index_buffer(pipe
, &_ib
);
1029 pipe
->set_index_buffer(pipe
, NULL
);
1032 trace_dump_call_end();
1036 static inline struct pipe_stream_output_target
*
1037 trace_context_create_stream_output_target(struct pipe_context
*_pipe
,
1038 struct pipe_resource
*res
,
1039 unsigned buffer_offset
,
1040 unsigned buffer_size
)
1042 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1043 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1044 struct pipe_stream_output_target
*result
;
1046 res
= trace_resource_unwrap(tr_ctx
, res
);
1048 trace_dump_call_begin("pipe_context", "create_stream_output_target");
1050 trace_dump_arg(ptr
, pipe
);
1051 trace_dump_arg(ptr
, res
);
1052 trace_dump_arg(uint
, buffer_offset
);
1053 trace_dump_arg(uint
, buffer_size
);
1055 result
= pipe
->create_stream_output_target(pipe
,
1056 res
, buffer_offset
, buffer_size
);
1058 trace_dump_ret(ptr
, result
);
1060 trace_dump_call_end();
1067 trace_context_stream_output_target_destroy(
1068 struct pipe_context
*_pipe
,
1069 struct pipe_stream_output_target
*target
)
1071 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1072 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1074 trace_dump_call_begin("pipe_context", "stream_output_target_destroy");
1076 trace_dump_arg(ptr
, pipe
);
1077 trace_dump_arg(ptr
, target
);
1079 pipe
->stream_output_target_destroy(pipe
, target
);
1081 trace_dump_call_end();
1086 trace_context_set_stream_output_targets(struct pipe_context
*_pipe
,
1087 unsigned num_targets
,
1088 struct pipe_stream_output_target
**tgs
,
1089 const unsigned *offsets
)
1091 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1092 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1094 trace_dump_call_begin("pipe_context", "set_stream_output_targets");
1096 trace_dump_arg(ptr
, pipe
);
1097 trace_dump_arg(uint
, num_targets
);
1098 trace_dump_arg_array(ptr
, tgs
, num_targets
);
1099 trace_dump_arg_array(uint
, offsets
, num_targets
);
1101 pipe
->set_stream_output_targets(pipe
, num_targets
, tgs
, offsets
);
1103 trace_dump_call_end();
1108 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1109 struct pipe_resource
*dst
,
1111 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1112 struct pipe_resource
*src
,
1114 const struct pipe_box
*src_box
)
1116 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1117 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1119 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1120 src
= trace_resource_unwrap(tr_ctx
, src
);
1122 trace_dump_call_begin("pipe_context", "resource_copy_region");
1124 trace_dump_arg(ptr
, pipe
);
1125 trace_dump_arg(ptr
, dst
);
1126 trace_dump_arg(uint
, dst_level
);
1127 trace_dump_arg(uint
, dstx
);
1128 trace_dump_arg(uint
, dsty
);
1129 trace_dump_arg(uint
, dstz
);
1130 trace_dump_arg(ptr
, src
);
1131 trace_dump_arg(uint
, src_level
);
1132 trace_dump_arg(box
, src_box
);
1134 pipe
->resource_copy_region(pipe
,
1135 dst
, dst_level
, dstx
, dsty
, dstz
,
1136 src
, src_level
, src_box
);
1138 trace_dump_call_end();
1143 trace_context_blit(struct pipe_context
*_pipe
,
1144 const struct pipe_blit_info
*_info
)
1146 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1147 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1148 struct pipe_blit_info info
= *_info
;
1150 info
.dst
.resource
= trace_resource_unwrap(tr_ctx
, info
.dst
.resource
);
1151 info
.src
.resource
= trace_resource_unwrap(tr_ctx
, info
.src
.resource
);
1153 trace_dump_call_begin("pipe_context", "blit");
1155 trace_dump_arg(ptr
, pipe
);
1156 trace_dump_arg(blit_info
, _info
);
1158 pipe
->blit(pipe
, &info
);
1160 trace_dump_call_end();
1165 trace_context_flush_resource(struct pipe_context
*_pipe
,
1166 struct pipe_resource
*resource
)
1168 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1169 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1171 resource
= trace_resource_unwrap(tr_ctx
, resource
);
1173 trace_dump_call_begin("pipe_context", "flush_resource");
1175 trace_dump_arg(ptr
, pipe
);
1176 trace_dump_arg(ptr
, resource
);
1178 pipe
->flush_resource(pipe
, resource
);
1180 trace_dump_call_end();
1185 trace_context_clear(struct pipe_context
*_pipe
,
1187 const union pipe_color_union
*color
,
1191 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1192 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1194 trace_dump_call_begin("pipe_context", "clear");
1196 trace_dump_arg(ptr
, pipe
);
1197 trace_dump_arg(uint
, buffers
);
1198 trace_dump_arg_begin("color");
1200 trace_dump_array(float, color
->f
, 4);
1203 trace_dump_arg_end();
1204 trace_dump_arg(float, depth
);
1205 trace_dump_arg(uint
, stencil
);
1207 pipe
->clear(pipe
, buffers
, color
, depth
, stencil
);
1209 trace_dump_call_end();
1214 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1215 struct pipe_surface
*dst
,
1216 const union pipe_color_union
*color
,
1217 unsigned dstx
, unsigned dsty
,
1218 unsigned width
, unsigned height
)
1220 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1221 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1223 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1225 trace_dump_call_begin("pipe_context", "clear_render_target");
1227 trace_dump_arg(ptr
, pipe
);
1228 trace_dump_arg(ptr
, dst
);
1229 trace_dump_arg_array(float, color
->f
, 4);
1230 trace_dump_arg(uint
, dstx
);
1231 trace_dump_arg(uint
, dsty
);
1232 trace_dump_arg(uint
, width
);
1233 trace_dump_arg(uint
, height
);
1235 pipe
->clear_render_target(pipe
, dst
, color
, dstx
, dsty
, width
, height
);
1237 trace_dump_call_end();
1241 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1242 struct pipe_surface
*dst
,
1243 unsigned clear_flags
,
1246 unsigned dstx
, unsigned dsty
,
1247 unsigned width
, unsigned height
)
1249 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1250 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1252 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1254 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1256 trace_dump_arg(ptr
, pipe
);
1257 trace_dump_arg(ptr
, dst
);
1258 trace_dump_arg(uint
, clear_flags
);
1259 trace_dump_arg(float, depth
);
1260 trace_dump_arg(uint
, stencil
);
1261 trace_dump_arg(uint
, dstx
);
1262 trace_dump_arg(uint
, dsty
);
1263 trace_dump_arg(uint
, width
);
1264 trace_dump_arg(uint
, height
);
1266 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1267 dstx
, dsty
, width
, height
);
1269 trace_dump_call_end();
1273 trace_context_flush(struct pipe_context
*_pipe
,
1274 struct pipe_fence_handle
**fence
,
1277 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1278 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1280 trace_dump_call_begin("pipe_context", "flush");
1282 trace_dump_arg(ptr
, pipe
);
1283 trace_dump_arg(uint
, flags
);
1285 pipe
->flush(pipe
, fence
, flags
);
1288 trace_dump_ret(ptr
, *fence
);
1290 trace_dump_call_end();
1295 trace_context_destroy(struct pipe_context
*_pipe
)
1297 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1298 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1300 trace_dump_call_begin("pipe_context", "destroy");
1301 trace_dump_arg(ptr
, pipe
);
1302 trace_dump_call_end();
1304 pipe
->destroy(pipe
);
1310 /********************************************************************
1316 trace_context_transfer_map(struct pipe_context
*_context
,
1317 struct pipe_resource
*_resource
,
1320 const struct pipe_box
*box
,
1321 struct pipe_transfer
**transfer
)
1323 struct trace_context
*tr_context
= trace_context(_context
);
1324 struct trace_resource
*tr_res
= trace_resource(_resource
);
1325 struct pipe_context
*context
= tr_context
->pipe
;
1326 struct pipe_resource
*texture
= tr_res
->resource
;
1327 struct pipe_transfer
*result
= NULL
;
1330 assert(texture
->screen
== context
->screen
);
1333 * Map and transfers can't be serialized so we convert all write transfers
1334 * to transfer_inline_write and ignore read transfers.
1337 map
= context
->transfer_map(context
, texture
, level
, usage
, box
, &result
);
1341 *transfer
= trace_transfer_create(tr_context
, tr_res
, result
);
1344 if(usage
& PIPE_TRANSFER_WRITE
) {
1345 trace_transfer(*transfer
)->map
= map
;
1349 return *transfer
? map
: NULL
;
1353 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1354 struct pipe_transfer
*_transfer
,
1355 const struct pipe_box
*box
)
1357 struct trace_context
*tr_context
= trace_context(_context
);
1358 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1359 struct pipe_context
*context
= tr_context
->pipe
;
1360 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1362 context
->transfer_flush_region(context
,
1368 trace_context_transfer_unmap(struct pipe_context
*_context
,
1369 struct pipe_transfer
*_transfer
)
1371 struct trace_context
*tr_ctx
= trace_context(_context
);
1372 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1373 struct pipe_context
*context
= tr_ctx
->pipe
;
1374 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1378 * Fake a transfer_inline_write
1381 struct pipe_resource
*resource
= transfer
->resource
;
1382 unsigned level
= transfer
->level
;
1383 unsigned usage
= transfer
->usage
;
1384 const struct pipe_box
*box
= &transfer
->box
;
1385 unsigned stride
= transfer
->stride
;
1386 unsigned layer_stride
= transfer
->layer_stride
;
1388 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1390 trace_dump_arg(ptr
, context
);
1391 trace_dump_arg(ptr
, resource
);
1392 trace_dump_arg(uint
, level
);
1393 trace_dump_arg(uint
, usage
);
1394 trace_dump_arg(box
, box
);
1396 trace_dump_arg_begin("data");
1397 trace_dump_box_bytes(tr_trans
->map
,
1402 trace_dump_arg_end();
1404 trace_dump_arg(uint
, stride
);
1405 trace_dump_arg(uint
, layer_stride
);
1407 trace_dump_call_end();
1409 tr_trans
->map
= NULL
;
1412 context
->transfer_unmap(context
, transfer
);
1413 trace_transfer_destroy(tr_ctx
, tr_trans
);
1418 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1419 struct pipe_resource
*_resource
,
1422 const struct pipe_box
*box
,
1425 unsigned layer_stride
)
1427 struct trace_context
*tr_context
= trace_context(_context
);
1428 struct trace_resource
*tr_res
= trace_resource(_resource
);
1429 struct pipe_context
*context
= tr_context
->pipe
;
1430 struct pipe_resource
*resource
= tr_res
->resource
;
1432 assert(resource
->screen
== context
->screen
);
1434 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1436 trace_dump_arg(ptr
, context
);
1437 trace_dump_arg(ptr
, resource
);
1438 trace_dump_arg(uint
, level
);
1439 trace_dump_arg(uint
, usage
);
1440 trace_dump_arg(box
, box
);
1442 trace_dump_arg_begin("data");
1443 trace_dump_box_bytes(data
,
1448 trace_dump_arg_end();
1450 trace_dump_arg(uint
, stride
);
1451 trace_dump_arg(uint
, layer_stride
);
1453 trace_dump_call_end();
1455 context
->transfer_inline_write(context
, resource
,
1456 level
, usage
, box
, data
, stride
, layer_stride
);
1460 static void trace_context_render_condition(struct pipe_context
*_context
,
1461 struct pipe_query
*query
,
1465 struct trace_context
*tr_context
= trace_context(_context
);
1466 struct pipe_context
*context
= tr_context
->pipe
;
1468 query
= trace_query_unwrap(query
);
1470 trace_dump_call_begin("pipe_context", "render_condition");
1472 trace_dump_arg(ptr
, context
);
1473 trace_dump_arg(ptr
, query
);
1474 trace_dump_arg(bool, condition
);
1475 trace_dump_arg(uint
, mode
);
1477 trace_dump_call_end();
1479 context
->render_condition(context
, query
, condition
, mode
);
1483 static void trace_context_texture_barrier(struct pipe_context
*_context
)
1485 struct trace_context
*tr_context
= trace_context(_context
);
1486 struct pipe_context
*context
= tr_context
->pipe
;
1488 trace_dump_call_begin("pipe_context", "texture_barrier");
1490 trace_dump_arg(ptr
, context
);
1492 trace_dump_call_end();
1494 context
->texture_barrier(context
);
1498 static void trace_context_memory_barrier(struct pipe_context
*_context
,
1501 struct trace_context
*tr_context
= trace_context(_context
);
1502 struct pipe_context
*context
= tr_context
->pipe
;
1504 trace_dump_call_begin("pipe_context", "memory_barrier");
1505 trace_dump_arg(ptr
, context
);
1506 trace_dump_arg(uint
, flags
);
1507 trace_dump_call_end();
1509 context
->memory_barrier(context
, flags
);
1513 static void trace_context_set_tess_state(struct pipe_context
*_context
,
1514 const float default_outer_level
[4],
1515 const float default_inner_level
[2])
1517 struct trace_context
*tr_context
= trace_context(_context
);
1518 struct pipe_context
*context
= tr_context
->pipe
;
1520 trace_dump_call_begin("pipe_context", "set_tess_state");
1521 trace_dump_arg(ptr
, context
);
1522 trace_dump_arg_array(float, default_outer_level
, 4);
1523 trace_dump_arg_array(float, default_inner_level
, 2);
1524 trace_dump_call_end();
1526 context
->set_tess_state(context
, default_outer_level
, default_inner_level
);
1530 static const struct debug_named_value rbug_blocker_flags
[] = {
1531 {"before", 1, NULL
},
1533 DEBUG_NAMED_VALUE_END
1536 struct pipe_context
*
1537 trace_context_create(struct trace_screen
*tr_scr
,
1538 struct pipe_context
*pipe
)
1540 struct trace_context
*tr_ctx
;
1545 if(!trace_enabled())
1548 tr_ctx
= CALLOC_STRUCT(trace_context
);
1552 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1553 tr_ctx
->base
.screen
= &tr_scr
->base
;
1555 tr_ctx
->base
.destroy
= trace_context_destroy
;
1557 #define TR_CTX_INIT(_member) \
1558 tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
1560 TR_CTX_INIT(draw_vbo
);
1561 TR_CTX_INIT(render_condition
);
1562 TR_CTX_INIT(create_query
);
1563 TR_CTX_INIT(destroy_query
);
1564 TR_CTX_INIT(begin_query
);
1565 TR_CTX_INIT(end_query
);
1566 TR_CTX_INIT(get_query_result
);
1567 TR_CTX_INIT(create_blend_state
);
1568 TR_CTX_INIT(bind_blend_state
);
1569 TR_CTX_INIT(delete_blend_state
);
1570 TR_CTX_INIT(create_sampler_state
);
1571 TR_CTX_INIT(bind_sampler_states
);
1572 TR_CTX_INIT(delete_sampler_state
);
1573 TR_CTX_INIT(create_rasterizer_state
);
1574 TR_CTX_INIT(bind_rasterizer_state
);
1575 TR_CTX_INIT(delete_rasterizer_state
);
1576 TR_CTX_INIT(create_depth_stencil_alpha_state
);
1577 TR_CTX_INIT(bind_depth_stencil_alpha_state
);
1578 TR_CTX_INIT(delete_depth_stencil_alpha_state
);
1579 TR_CTX_INIT(create_fs_state
);
1580 TR_CTX_INIT(bind_fs_state
);
1581 TR_CTX_INIT(delete_fs_state
);
1582 TR_CTX_INIT(create_vs_state
);
1583 TR_CTX_INIT(bind_vs_state
);
1584 TR_CTX_INIT(delete_vs_state
);
1585 TR_CTX_INIT(create_gs_state
);
1586 TR_CTX_INIT(bind_gs_state
);
1587 TR_CTX_INIT(delete_gs_state
);
1588 TR_CTX_INIT(create_tcs_state
);
1589 TR_CTX_INIT(bind_tcs_state
);
1590 TR_CTX_INIT(delete_tcs_state
);
1591 TR_CTX_INIT(create_tes_state
);
1592 TR_CTX_INIT(bind_tes_state
);
1593 TR_CTX_INIT(delete_tes_state
);
1594 TR_CTX_INIT(create_vertex_elements_state
);
1595 TR_CTX_INIT(bind_vertex_elements_state
);
1596 TR_CTX_INIT(delete_vertex_elements_state
);
1597 TR_CTX_INIT(set_blend_color
);
1598 TR_CTX_INIT(set_stencil_ref
);
1599 TR_CTX_INIT(set_clip_state
);
1600 TR_CTX_INIT(set_sample_mask
);
1601 TR_CTX_INIT(set_constant_buffer
);
1602 TR_CTX_INIT(set_framebuffer_state
);
1603 TR_CTX_INIT(set_polygon_stipple
);
1604 TR_CTX_INIT(set_scissor_states
);
1605 TR_CTX_INIT(set_viewport_states
);
1606 TR_CTX_INIT(set_sampler_views
);
1607 TR_CTX_INIT(create_sampler_view
);
1608 TR_CTX_INIT(sampler_view_destroy
);
1609 TR_CTX_INIT(create_surface
);
1610 TR_CTX_INIT(surface_destroy
);
1611 TR_CTX_INIT(set_vertex_buffers
);
1612 TR_CTX_INIT(set_index_buffer
);
1613 TR_CTX_INIT(create_stream_output_target
);
1614 TR_CTX_INIT(stream_output_target_destroy
);
1615 TR_CTX_INIT(set_stream_output_targets
);
1616 TR_CTX_INIT(resource_copy_region
);
1618 TR_CTX_INIT(flush_resource
);
1620 TR_CTX_INIT(clear_render_target
);
1621 TR_CTX_INIT(clear_depth_stencil
);
1623 TR_CTX_INIT(texture_barrier
);
1624 TR_CTX_INIT(memory_barrier
);
1625 TR_CTX_INIT(set_tess_state
);
1627 TR_CTX_INIT(transfer_map
);
1628 TR_CTX_INIT(transfer_unmap
);
1629 TR_CTX_INIT(transfer_flush_region
);
1630 TR_CTX_INIT(transfer_inline_write
);
1634 tr_ctx
->pipe
= pipe
;
1636 return &tr_ctx
->base
;
1644 * Sanity checker: check that the given context really is a
1645 * trace context (and not the wrapped driver's context).
1648 trace_context_check(const struct pipe_context
*pipe
)
1650 struct trace_context
*tr_ctx
= (struct trace_context
*) pipe
;
1651 assert(tr_ctx
->base
.destroy
== trace_context_destroy
);