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_res
;
55 tr_res
= trace_resource(resource
);
57 assert(tr_res
->resource
);
58 return tr_res
->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_vbo(struct pipe_context
*_pipe
,
87 const struct pipe_draw_info
*info
)
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_vbo");
94 trace_dump_arg(ptr
, pipe
);
95 trace_dump_arg(draw_info
, info
);
97 trace_dump_trace_flush();
99 pipe
->draw_vbo(pipe
, info
);
101 trace_dump_call_end();
105 static INLINE
struct pipe_query
*
106 trace_context_create_query(struct pipe_context
*_pipe
,
109 struct trace_context
*tr_ctx
= trace_context(_pipe
);
110 struct pipe_context
*pipe
= tr_ctx
->pipe
;
111 struct pipe_query
*result
;
113 trace_dump_call_begin("pipe_context", "create_query");
115 trace_dump_arg(ptr
, pipe
);
116 trace_dump_arg(uint
, query_type
);
118 result
= pipe
->create_query(pipe
, query_type
);
120 trace_dump_ret(ptr
, result
);
122 trace_dump_call_end();
129 trace_context_destroy_query(struct pipe_context
*_pipe
,
130 struct pipe_query
*query
)
132 struct trace_context
*tr_ctx
= trace_context(_pipe
);
133 struct pipe_context
*pipe
= tr_ctx
->pipe
;
135 trace_dump_call_begin("pipe_context", "destroy_query");
137 trace_dump_arg(ptr
, pipe
);
138 trace_dump_arg(ptr
, query
);
140 pipe
->destroy_query(pipe
, query
);
142 trace_dump_call_end();
147 trace_context_begin_query(struct pipe_context
*_pipe
,
148 struct pipe_query
*query
)
150 struct trace_context
*tr_ctx
= trace_context(_pipe
);
151 struct pipe_context
*pipe
= tr_ctx
->pipe
;
153 trace_dump_call_begin("pipe_context", "begin_query");
155 trace_dump_arg(ptr
, pipe
);
156 trace_dump_arg(ptr
, query
);
158 pipe
->begin_query(pipe
, query
);
160 trace_dump_call_end();
165 trace_context_end_query(struct pipe_context
*_pipe
,
166 struct pipe_query
*query
)
168 struct trace_context
*tr_ctx
= trace_context(_pipe
);
169 struct pipe_context
*pipe
= tr_ctx
->pipe
;
171 trace_dump_call_begin("pipe_context", "end_query");
173 trace_dump_arg(ptr
, pipe
);
174 trace_dump_arg(ptr
, query
);
176 pipe
->end_query(pipe
, query
);
178 trace_dump_call_end();
182 static INLINE boolean
183 trace_context_get_query_result(struct pipe_context
*_pipe
,
184 struct pipe_query
*query
,
186 union pipe_query_result
*presult
)
188 struct trace_context
*tr_ctx
= trace_context(_pipe
);
189 struct pipe_context
*pipe
= tr_ctx
->pipe
;
193 trace_dump_call_begin("pipe_context", "get_query_result");
195 trace_dump_arg(ptr
, pipe
);
197 _result
= pipe
->get_query_result(pipe
, query
, wait
, presult
);
198 /* XXX this depends on the query type */
199 result
= *((uint64_t*)presult
);
201 trace_dump_arg(uint
, result
);
202 trace_dump_ret(bool, _result
);
204 trace_dump_call_end();
211 trace_context_create_blend_state(struct pipe_context
*_pipe
,
212 const struct pipe_blend_state
*state
)
214 struct trace_context
*tr_ctx
= trace_context(_pipe
);
215 struct pipe_context
*pipe
= tr_ctx
->pipe
;
218 trace_dump_call_begin("pipe_context", "create_blend_state");
220 trace_dump_arg(ptr
, pipe
);
221 trace_dump_arg(blend_state
, state
);
223 result
= pipe
->create_blend_state(pipe
, state
);
225 trace_dump_ret(ptr
, result
);
227 trace_dump_call_end();
234 trace_context_bind_blend_state(struct pipe_context
*_pipe
,
237 struct trace_context
*tr_ctx
= trace_context(_pipe
);
238 struct pipe_context
*pipe
= tr_ctx
->pipe
;
240 trace_dump_call_begin("pipe_context", "bind_blend_state");
242 trace_dump_arg(ptr
, pipe
);
243 trace_dump_arg(ptr
, state
);
245 pipe
->bind_blend_state(pipe
, state
);
247 trace_dump_call_end();
252 trace_context_delete_blend_state(struct pipe_context
*_pipe
,
255 struct trace_context
*tr_ctx
= trace_context(_pipe
);
256 struct pipe_context
*pipe
= tr_ctx
->pipe
;
258 trace_dump_call_begin("pipe_context", "delete_blend_state");
260 trace_dump_arg(ptr
, pipe
);
261 trace_dump_arg(ptr
, state
);
263 pipe
->delete_blend_state(pipe
, state
);
265 trace_dump_call_end();
270 trace_context_create_sampler_state(struct pipe_context
*_pipe
,
271 const struct pipe_sampler_state
*state
)
273 struct trace_context
*tr_ctx
= trace_context(_pipe
);
274 struct pipe_context
*pipe
= tr_ctx
->pipe
;
277 trace_dump_call_begin("pipe_context", "create_sampler_state");
279 trace_dump_arg(ptr
, pipe
);
280 trace_dump_arg(sampler_state
, state
);
282 result
= pipe
->create_sampler_state(pipe
, state
);
284 trace_dump_ret(ptr
, result
);
286 trace_dump_call_end();
293 trace_context_bind_sampler_states(struct pipe_context
*_pipe
,
299 struct trace_context
*tr_ctx
= trace_context(_pipe
);
300 struct pipe_context
*pipe
= tr_ctx
->pipe
;
302 /* remove this when we have pipe->bind_sampler_states(..., start, ...) */
306 case PIPE_SHADER_VERTEX
:
307 trace_dump_call_begin("pipe_context", "bind_vertex_sampler_states");
309 case PIPE_SHADER_GEOMETRY
:
310 trace_dump_call_begin("pipe_context", "bind_geometry_sampler_states");
312 case PIPE_SHADER_FRAGMENT
:
313 trace_dump_call_begin("pipe_context", "bind_fragment_sampler_states");
316 debug_error("Unexpected shader in trace_context_bind_sampler_states()");
319 trace_dump_arg(ptr
, pipe
);
320 trace_dump_arg(uint
, num_states
);
321 trace_dump_arg_array(ptr
, states
, num_states
);
324 case PIPE_SHADER_VERTEX
:
325 pipe
->bind_vertex_sampler_states(pipe
, num_states
, states
);
327 case PIPE_SHADER_GEOMETRY
:
328 pipe
->bind_geometry_sampler_states(pipe
, num_states
, states
);
330 case PIPE_SHADER_FRAGMENT
:
331 pipe
->bind_fragment_sampler_states(pipe
, num_states
, states
);
334 debug_error("Unexpected shader in trace_context_bind_sampler_states()");
337 trace_dump_call_end();
342 trace_context_bind_fragment_sampler_states(struct pipe_context
*_pipe
,
346 trace_context_bind_sampler_states(_pipe
, PIPE_SHADER_FRAGMENT
,
352 trace_context_bind_vertex_sampler_states(struct pipe_context
*_pipe
,
356 trace_context_bind_sampler_states(_pipe
, PIPE_SHADER_VERTEX
,
362 trace_context_bind_geometry_sampler_states(struct pipe_context
*_pipe
,
366 trace_context_bind_sampler_states(_pipe
, PIPE_SHADER_GEOMETRY
,
372 trace_context_delete_sampler_state(struct pipe_context
*_pipe
,
375 struct trace_context
*tr_ctx
= trace_context(_pipe
);
376 struct pipe_context
*pipe
= tr_ctx
->pipe
;
378 trace_dump_call_begin("pipe_context", "delete_sampler_state");
380 trace_dump_arg(ptr
, pipe
);
381 trace_dump_arg(ptr
, state
);
383 pipe
->delete_sampler_state(pipe
, state
);
385 trace_dump_call_end();
390 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
391 const struct pipe_rasterizer_state
*state
)
393 struct trace_context
*tr_ctx
= trace_context(_pipe
);
394 struct pipe_context
*pipe
= tr_ctx
->pipe
;
397 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
399 trace_dump_arg(ptr
, pipe
);
400 trace_dump_arg(rasterizer_state
, state
);
402 result
= pipe
->create_rasterizer_state(pipe
, state
);
404 trace_dump_ret(ptr
, result
);
406 trace_dump_call_end();
413 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
416 struct trace_context
*tr_ctx
= trace_context(_pipe
);
417 struct pipe_context
*pipe
= tr_ctx
->pipe
;
419 trace_dump_call_begin("pipe_context", "bind_rasterizer_state");
421 trace_dump_arg(ptr
, pipe
);
422 trace_dump_arg(ptr
, state
);
424 pipe
->bind_rasterizer_state(pipe
, state
);
426 trace_dump_call_end();
431 trace_context_delete_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", "delete_rasterizer_state");
439 trace_dump_arg(ptr
, pipe
);
440 trace_dump_arg(ptr
, state
);
442 pipe
->delete_rasterizer_state(pipe
, state
);
444 trace_dump_call_end();
449 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
450 const struct pipe_depth_stencil_alpha_state
*state
)
452 struct trace_context
*tr_ctx
= trace_context(_pipe
);
453 struct pipe_context
*pipe
= tr_ctx
->pipe
;
456 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
458 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
460 trace_dump_arg(ptr
, pipe
);
461 trace_dump_arg(depth_stencil_alpha_state
, state
);
463 trace_dump_ret(ptr
, result
);
465 trace_dump_call_end();
472 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
475 struct trace_context
*tr_ctx
= trace_context(_pipe
);
476 struct pipe_context
*pipe
= tr_ctx
->pipe
;
478 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
480 trace_dump_arg(ptr
, pipe
);
481 trace_dump_arg(ptr
, state
);
483 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
485 trace_dump_call_end();
490 trace_context_delete_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", "delete_depth_stencil_alpha_state");
498 trace_dump_arg(ptr
, pipe
);
499 trace_dump_arg(ptr
, state
);
501 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
503 trace_dump_call_end();
507 #define TRACE_SHADER_STATE(shader_type) \
508 static INLINE void * \
509 trace_context_create_##shader_type##_state(struct pipe_context *_pipe, \
510 const struct pipe_shader_state *state) \
512 struct trace_context *tr_ctx = trace_context(_pipe); \
513 struct pipe_context *pipe = tr_ctx->pipe; \
515 trace_dump_call_begin("pipe_context", "create_" #shader_type "_state"); \
516 trace_dump_arg(ptr, pipe); \
517 trace_dump_arg(shader_state, state); \
518 result = pipe->create_##shader_type##_state(pipe, state); \
519 trace_dump_ret(ptr, result); \
520 trace_dump_call_end(); \
525 trace_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
528 struct trace_context *tr_ctx = trace_context(_pipe); \
529 struct pipe_context *pipe = tr_ctx->pipe; \
530 trace_dump_call_begin("pipe_context", "bind_" #shader_type "_state"); \
531 trace_dump_arg(ptr, pipe); \
532 trace_dump_arg(ptr, state); \
533 pipe->bind_##shader_type##_state(pipe, state); \
534 trace_dump_call_end(); \
538 trace_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
541 struct trace_context *tr_ctx = trace_context(_pipe); \
542 struct pipe_context *pipe = tr_ctx->pipe; \
543 trace_dump_call_begin("pipe_context", "delete_" #shader_type "_state"); \
544 trace_dump_arg(ptr, pipe); \
545 trace_dump_arg(ptr, state); \
546 pipe->delete_##shader_type##_state(pipe, state); \
547 trace_dump_call_end(); \
550 TRACE_SHADER_STATE(fs
)
551 TRACE_SHADER_STATE(vs
)
552 TRACE_SHADER_STATE(gs
)
554 #undef TRACE_SHADER_STATE
558 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
559 unsigned num_elements
,
560 const struct pipe_vertex_element
*elements
)
562 struct trace_context
*tr_ctx
= trace_context(_pipe
);
563 struct pipe_context
*pipe
= tr_ctx
->pipe
;
566 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
568 trace_dump_arg(ptr
, pipe
);
569 trace_dump_arg(uint
, num_elements
);
571 trace_dump_arg_begin("elements");
572 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
573 trace_dump_arg_end();
575 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
577 trace_dump_ret(ptr
, result
);
579 trace_dump_call_end();
586 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
589 struct trace_context
*tr_ctx
= trace_context(_pipe
);
590 struct pipe_context
*pipe
= tr_ctx
->pipe
;
592 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
594 trace_dump_arg(ptr
, pipe
);
595 trace_dump_arg(ptr
, state
);
597 pipe
->bind_vertex_elements_state(pipe
, state
);
599 trace_dump_call_end();
604 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
607 struct trace_context
*tr_ctx
= trace_context(_pipe
);
608 struct pipe_context
*pipe
= tr_ctx
->pipe
;
610 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
612 trace_dump_arg(ptr
, pipe
);
613 trace_dump_arg(ptr
, state
);
615 pipe
->delete_vertex_elements_state(pipe
, state
);
617 trace_dump_call_end();
622 trace_context_set_blend_color(struct pipe_context
*_pipe
,
623 const struct pipe_blend_color
*state
)
625 struct trace_context
*tr_ctx
= trace_context(_pipe
);
626 struct pipe_context
*pipe
= tr_ctx
->pipe
;
628 trace_dump_call_begin("pipe_context", "set_blend_color");
630 trace_dump_arg(ptr
, pipe
);
631 trace_dump_arg(blend_color
, state
);
633 pipe
->set_blend_color(pipe
, state
);
635 trace_dump_call_end();
640 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
641 const struct pipe_stencil_ref
*state
)
643 struct trace_context
*tr_ctx
= trace_context(_pipe
);
644 struct pipe_context
*pipe
= tr_ctx
->pipe
;
646 trace_dump_call_begin("pipe_context", "set_stencil_ref");
648 trace_dump_arg(ptr
, pipe
);
649 trace_dump_arg(stencil_ref
, state
);
651 pipe
->set_stencil_ref(pipe
, state
);
653 trace_dump_call_end();
658 trace_context_set_clip_state(struct pipe_context
*_pipe
,
659 const struct pipe_clip_state
*state
)
661 struct trace_context
*tr_ctx
= trace_context(_pipe
);
662 struct pipe_context
*pipe
= tr_ctx
->pipe
;
664 trace_dump_call_begin("pipe_context", "set_clip_state");
666 trace_dump_arg(ptr
, pipe
);
667 trace_dump_arg(clip_state
, state
);
669 pipe
->set_clip_state(pipe
, state
);
671 trace_dump_call_end();
675 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
676 unsigned sample_mask
)
678 struct trace_context
*tr_ctx
= trace_context(_pipe
);
679 struct pipe_context
*pipe
= tr_ctx
->pipe
;
681 trace_dump_call_begin("pipe_context", "set_sample_mask");
683 trace_dump_arg(ptr
, pipe
);
684 trace_dump_arg(uint
, sample_mask
);
686 pipe
->set_sample_mask(pipe
, sample_mask
);
688 trace_dump_call_end();
692 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
693 uint shader
, uint index
,
694 struct pipe_constant_buffer
*constant_buffer
)
696 struct trace_context
*tr_ctx
= trace_context(_pipe
);
697 struct pipe_context
*pipe
= tr_ctx
->pipe
;
698 struct pipe_constant_buffer cb
;
700 if (constant_buffer
) {
701 cb
= *constant_buffer
;
702 cb
.buffer
= trace_resource_unwrap(tr_ctx
, constant_buffer
->buffer
);
703 constant_buffer
= &cb
;
706 trace_dump_call_begin("pipe_context", "set_constant_buffer");
708 trace_dump_arg(ptr
, pipe
);
709 trace_dump_arg(uint
, shader
);
710 trace_dump_arg(uint
, index
);
711 trace_dump_arg(constant_buffer
, constant_buffer
);
713 pipe
->set_constant_buffer(pipe
, shader
, index
, constant_buffer
);
715 trace_dump_call_end();
720 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
721 const struct pipe_framebuffer_state
*state
)
723 struct trace_context
*tr_ctx
= trace_context(_pipe
);
724 struct pipe_context
*pipe
= tr_ctx
->pipe
;
725 struct pipe_framebuffer_state unwrapped_state
;
729 /* Unwrap the input state */
730 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
731 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
732 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
733 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
734 unwrapped_state
.cbufs
[i
] = NULL
;
735 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
736 state
= &unwrapped_state
;
738 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
740 trace_dump_arg(ptr
, pipe
);
741 trace_dump_arg(framebuffer_state
, state
);
743 pipe
->set_framebuffer_state(pipe
, state
);
745 trace_dump_call_end();
750 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
751 const struct pipe_poly_stipple
*state
)
753 struct trace_context
*tr_ctx
= trace_context(_pipe
);
754 struct pipe_context
*pipe
= tr_ctx
->pipe
;
756 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
758 trace_dump_arg(ptr
, pipe
);
759 trace_dump_arg(poly_stipple
, state
);
761 pipe
->set_polygon_stipple(pipe
, state
);
763 trace_dump_call_end();
768 trace_context_set_scissor_states(struct pipe_context
*_pipe
,
770 unsigned num_scissors
,
771 const struct pipe_scissor_state
*states
)
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_scissor_states");
778 trace_dump_arg(ptr
, pipe
);
779 trace_dump_arg(uint
, start_slot
);
780 trace_dump_arg(uint
, num_scissors
);
781 trace_dump_arg(scissor_state
, states
);
783 pipe
->set_scissor_states(pipe
, start_slot
, num_scissors
, states
);
785 trace_dump_call_end();
790 trace_context_set_viewport_states(struct pipe_context
*_pipe
,
792 unsigned num_viewports
,
793 const struct pipe_viewport_state
*states
)
795 struct trace_context
*tr_ctx
= trace_context(_pipe
);
796 struct pipe_context
*pipe
= tr_ctx
->pipe
;
798 trace_dump_call_begin("pipe_context", "set_viewport_states");
800 trace_dump_arg(ptr
, pipe
);
801 trace_dump_arg(uint
, start_slot
);
802 trace_dump_arg(uint
, num_viewports
);
803 trace_dump_arg(viewport_state
, states
);
805 pipe
->set_viewport_states(pipe
, start_slot
, num_viewports
, states
);
807 trace_dump_call_end();
811 static struct pipe_sampler_view
*
812 trace_context_create_sampler_view(struct pipe_context
*_pipe
,
813 struct pipe_resource
*_resource
,
814 const struct pipe_sampler_view
*templ
)
816 struct trace_context
*tr_ctx
= trace_context(_pipe
);
817 struct trace_resource
*tr_res
= trace_resource(_resource
);
818 struct pipe_context
*pipe
= tr_ctx
->pipe
;
819 struct pipe_resource
*resource
= tr_res
->resource
;
820 struct pipe_sampler_view
*result
;
821 struct trace_sampler_view
*tr_view
;
823 trace_dump_call_begin("pipe_context", "create_sampler_view");
825 trace_dump_arg(ptr
, pipe
);
826 trace_dump_arg(ptr
, resource
);
828 trace_dump_arg_begin("templ");
829 trace_dump_sampler_view_template(templ
, resource
->target
);
830 trace_dump_arg_end();
832 result
= pipe
->create_sampler_view(pipe
, resource
, templ
);
834 trace_dump_ret(ptr
, result
);
836 trace_dump_call_end();
839 * Wrap pipe_sampler_view
841 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
842 tr_view
->base
= *templ
;
843 tr_view
->base
.reference
.count
= 1;
844 tr_view
->base
.texture
= NULL
;
845 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
846 tr_view
->base
.context
= _pipe
;
847 tr_view
->sampler_view
= result
;
848 result
= &tr_view
->base
;
855 trace_context_sampler_view_destroy(struct pipe_context
*_pipe
,
856 struct pipe_sampler_view
*_view
)
858 struct trace_context
*tr_ctx
= trace_context(_pipe
);
859 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
860 struct pipe_context
*pipe
= tr_ctx
->pipe
;
861 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
863 assert(_view
->context
== _pipe
);
865 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
867 trace_dump_arg(ptr
, pipe
);
868 trace_dump_arg(ptr
, view
);
870 pipe_sampler_view_reference(&tr_view
->sampler_view
, NULL
);
872 trace_dump_call_end();
874 pipe_resource_reference(&_view
->texture
, NULL
);
878 /********************************************************************
883 static struct pipe_surface
*
884 trace_context_create_surface(struct pipe_context
*_pipe
,
885 struct pipe_resource
*_resource
,
886 const struct pipe_surface
*surf_tmpl
)
888 struct trace_context
*tr_ctx
= trace_context(_pipe
);
889 struct trace_resource
*tr_res
= trace_resource(_resource
);
890 struct pipe_context
*pipe
= tr_ctx
->pipe
;
891 struct pipe_resource
*resource
= tr_res
->resource
;
892 struct pipe_surface
*result
= NULL
;
894 trace_dump_call_begin("pipe_context", "create_surface");
896 trace_dump_arg(ptr
, pipe
);
897 trace_dump_arg(ptr
, resource
);
899 trace_dump_arg_begin("surf_tmpl");
900 trace_dump_surface_template(surf_tmpl
, resource
->target
);
901 trace_dump_arg_end();
904 result
= pipe
->create_surface(pipe
, resource
, surf_tmpl
);
906 trace_dump_ret(ptr
, result
);
908 trace_dump_call_end();
910 result
= trace_surf_create(tr_ctx
, tr_res
, result
);
917 trace_context_surface_destroy(struct pipe_context
*_pipe
,
918 struct pipe_surface
*_surface
)
920 struct trace_context
*tr_ctx
= trace_context(_pipe
);
921 struct pipe_context
*pipe
= tr_ctx
->pipe
;
922 struct trace_surface
*tr_surf
= trace_surface(_surface
);
923 struct pipe_surface
*surface
= tr_surf
->surface
;
925 trace_dump_call_begin("pipe_context", "surface_destroy");
927 trace_dump_arg(ptr
, pipe
);
928 trace_dump_arg(ptr
, surface
);
930 trace_dump_call_end();
932 trace_surf_destroy(tr_surf
);
937 trace_context_set_sampler_views(struct pipe_context
*_pipe
,
941 struct pipe_sampler_view
**views
)
943 struct trace_context
*tr_ctx
= trace_context(_pipe
);
944 struct trace_sampler_view
*tr_view
;
945 struct pipe_context
*pipe
= tr_ctx
->pipe
;
946 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SAMPLERS
];
949 /* remove this when we have pipe->set_sampler_views(..., start, ...) */
952 for(i
= 0; i
< num
; ++i
) {
953 tr_view
= trace_sampler_view(views
[i
]);
954 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
956 views
= unwrapped_views
;
959 case PIPE_SHADER_VERTEX
:
960 trace_dump_call_begin("pipe_context", "set_vertex_sampler_views");
962 case PIPE_SHADER_GEOMETRY
:
963 trace_dump_call_begin("pipe_context", "set_geometry_sampler_views");
965 case PIPE_SHADER_FRAGMENT
:
966 trace_dump_call_begin("pipe_context", "set_fragment_sampler_views");
969 debug_error("Unexpected shader in trace_context_set_sampler_views()");
972 trace_dump_arg(ptr
, pipe
);
973 /*trace_dump_arg(uint, shader);*/
974 trace_dump_arg(uint
, num
);
975 trace_dump_arg_array(ptr
, views
, num
);
978 case PIPE_SHADER_VERTEX
:
979 pipe
->set_vertex_sampler_views(pipe
, num
, views
);
981 case PIPE_SHADER_GEOMETRY
:
982 pipe
->set_geometry_sampler_views(pipe
, num
, views
);
984 case PIPE_SHADER_FRAGMENT
:
985 pipe
->set_fragment_sampler_views(pipe
, num
, views
);
988 debug_error("Unexpected shader in trace_context_set_sampler_views()");
991 trace_dump_call_end();
996 trace_context_set_fragment_sampler_views(struct pipe_context
*_pipe
,
998 struct pipe_sampler_view
**views
)
1000 trace_context_set_sampler_views(_pipe
, PIPE_SHADER_FRAGMENT
, 0, num
, views
);
1005 trace_context_set_vertex_sampler_views(struct pipe_context
*_pipe
,
1007 struct pipe_sampler_view
**views
)
1009 trace_context_set_sampler_views(_pipe
, PIPE_SHADER_VERTEX
, 0, num
, views
);
1014 trace_context_set_geometry_sampler_views(struct pipe_context
*_pipe
,
1016 struct pipe_sampler_view
**views
)
1018 trace_context_set_sampler_views(_pipe
, PIPE_SHADER_GEOMETRY
, 0, num
, views
);
1023 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
1024 unsigned start_slot
, unsigned num_buffers
,
1025 const struct pipe_vertex_buffer
*buffers
)
1027 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1028 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1031 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
1033 trace_dump_arg(ptr
, pipe
);
1034 trace_dump_arg(uint
, start_slot
);
1035 trace_dump_arg(uint
, num_buffers
);
1037 trace_dump_arg_begin("buffers");
1038 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
1039 trace_dump_arg_end();
1042 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
1043 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
1044 for (i
= 0; i
< num_buffers
; i
++)
1045 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
1046 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, _buffers
);
1049 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, NULL
);
1052 trace_dump_call_end();
1057 trace_context_set_index_buffer(struct pipe_context
*_pipe
,
1058 const struct pipe_index_buffer
*ib
)
1060 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1061 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1063 trace_dump_call_begin("pipe_context", "set_index_buffer");
1065 trace_dump_arg(ptr
, pipe
);
1066 trace_dump_arg(index_buffer
, ib
);
1069 struct pipe_index_buffer _ib
;
1071 _ib
.buffer
= trace_resource_unwrap(tr_ctx
, ib
->buffer
);
1072 pipe
->set_index_buffer(pipe
, &_ib
);
1074 pipe
->set_index_buffer(pipe
, NULL
);
1077 trace_dump_call_end();
1081 static INLINE
struct pipe_stream_output_target
*
1082 trace_context_create_stream_output_target(struct pipe_context
*_pipe
,
1083 struct pipe_resource
*res
,
1084 unsigned buffer_offset
,
1085 unsigned buffer_size
)
1087 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1088 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1089 struct pipe_stream_output_target
*result
;
1091 res
= trace_resource_unwrap(tr_ctx
, res
);
1093 trace_dump_call_begin("pipe_context", "create_stream_output_target");
1095 trace_dump_arg(ptr
, pipe
);
1096 trace_dump_arg(ptr
, res
);
1097 trace_dump_arg(uint
, buffer_offset
);
1098 trace_dump_arg(uint
, buffer_size
);
1100 result
= pipe
->create_stream_output_target(pipe
,
1101 res
, buffer_offset
, buffer_size
);
1103 trace_dump_call_end();
1110 trace_context_stream_output_target_destroy(
1111 struct pipe_context
*_pipe
,
1112 struct pipe_stream_output_target
*target
)
1114 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1115 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1117 trace_dump_call_begin("pipe_context", "stream_output_target_destroy");
1119 trace_dump_arg(ptr
, pipe
);
1120 trace_dump_arg(ptr
, target
);
1122 pipe
->stream_output_target_destroy(pipe
, target
);
1124 trace_dump_call_end();
1129 trace_context_set_stream_output_targets(struct pipe_context
*_pipe
,
1130 unsigned num_targets
,
1131 struct pipe_stream_output_target
**tgs
,
1132 unsigned append_bitmask
)
1134 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1135 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1137 trace_dump_call_begin("pipe_context", "set_stream_output_targets");
1139 trace_dump_arg(ptr
, pipe
);
1140 trace_dump_arg(uint
, num_targets
);
1141 trace_dump_arg_array(ptr
, tgs
, num_targets
);
1142 trace_dump_arg(uint
, append_bitmask
);
1144 pipe
->set_stream_output_targets(pipe
, num_targets
, tgs
, append_bitmask
);
1146 trace_dump_call_end();
1151 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1152 struct pipe_resource
*dst
,
1154 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1155 struct pipe_resource
*src
,
1157 const struct pipe_box
*src_box
)
1159 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1160 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1162 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1163 src
= trace_resource_unwrap(tr_ctx
, src
);
1165 trace_dump_call_begin("pipe_context", "resource_copy_region");
1167 trace_dump_arg(ptr
, pipe
);
1168 trace_dump_arg(ptr
, dst
);
1169 trace_dump_arg(uint
, dst_level
);
1170 trace_dump_arg(uint
, dstx
);
1171 trace_dump_arg(uint
, dsty
);
1172 trace_dump_arg(uint
, dstz
);
1173 trace_dump_arg(ptr
, src
);
1174 trace_dump_arg(uint
, src_level
);
1175 trace_dump_arg(box
, src_box
);
1177 pipe
->resource_copy_region(pipe
,
1178 dst
, dst_level
, dstx
, dsty
, dstz
,
1179 src
, src_level
, src_box
);
1181 trace_dump_call_end();
1186 trace_context_blit(struct pipe_context
*_pipe
,
1187 const struct pipe_blit_info
*_info
)
1189 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1190 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1191 struct pipe_blit_info info
= *_info
;
1193 info
.dst
.resource
= trace_resource_unwrap(tr_ctx
, info
.dst
.resource
);
1194 info
.src
.resource
= trace_resource_unwrap(tr_ctx
, info
.src
.resource
);
1196 trace_dump_call_begin("pipe_context", "blit");
1198 trace_dump_arg(ptr
, pipe
);
1199 trace_dump_arg(blit_info
, _info
);
1201 pipe
->blit(pipe
, &info
);
1203 trace_dump_call_end();
1208 trace_context_clear(struct pipe_context
*_pipe
,
1210 const union pipe_color_union
*color
,
1214 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1215 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1217 trace_dump_call_begin("pipe_context", "clear");
1219 trace_dump_arg(ptr
, pipe
);
1220 trace_dump_arg(uint
, buffers
);
1221 trace_dump_arg_begin("color");
1223 trace_dump_array(float, color
->f
, 4);
1226 trace_dump_arg_end();
1227 trace_dump_arg(float, depth
);
1228 trace_dump_arg(uint
, stencil
);
1230 pipe
->clear(pipe
, buffers
, color
, depth
, stencil
);
1232 trace_dump_call_end();
1237 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1238 struct pipe_surface
*dst
,
1239 const union pipe_color_union
*color
,
1240 unsigned dstx
, unsigned dsty
,
1241 unsigned width
, unsigned height
)
1243 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1244 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1246 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1248 trace_dump_call_begin("pipe_context", "clear_render_target");
1250 trace_dump_arg(ptr
, pipe
);
1251 trace_dump_arg(ptr
, dst
);
1252 trace_dump_arg_array(float, color
->f
, 4);
1253 trace_dump_arg(uint
, dstx
);
1254 trace_dump_arg(uint
, dsty
);
1255 trace_dump_arg(uint
, width
);
1256 trace_dump_arg(uint
, height
);
1258 pipe
->clear_render_target(pipe
, dst
, color
, dstx
, dsty
, width
, height
);
1260 trace_dump_call_end();
1264 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1265 struct pipe_surface
*dst
,
1266 unsigned clear_flags
,
1269 unsigned dstx
, unsigned dsty
,
1270 unsigned width
, unsigned height
)
1272 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1273 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1275 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1277 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1279 trace_dump_arg(ptr
, pipe
);
1280 trace_dump_arg(ptr
, dst
);
1281 trace_dump_arg(uint
, clear_flags
);
1282 trace_dump_arg(float, depth
);
1283 trace_dump_arg(uint
, stencil
);
1284 trace_dump_arg(uint
, dstx
);
1285 trace_dump_arg(uint
, dsty
);
1286 trace_dump_arg(uint
, width
);
1287 trace_dump_arg(uint
, height
);
1289 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1290 dstx
, dsty
, width
, height
);
1292 trace_dump_call_end();
1296 trace_context_flush(struct pipe_context
*_pipe
,
1297 struct pipe_fence_handle
**fence
,
1300 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1301 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1303 trace_dump_call_begin("pipe_context", "flush");
1305 trace_dump_arg(ptr
, pipe
);
1306 trace_dump_arg(uint
, flags
);
1308 pipe
->flush(pipe
, fence
, flags
);
1311 trace_dump_ret(ptr
, *fence
);
1313 trace_dump_call_end();
1318 trace_context_destroy(struct pipe_context
*_pipe
)
1320 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1321 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1323 trace_dump_call_begin("pipe_context", "destroy");
1324 trace_dump_arg(ptr
, pipe
);
1325 trace_dump_call_end();
1327 pipe
->destroy(pipe
);
1333 /********************************************************************
1339 trace_context_transfer_map(struct pipe_context
*_context
,
1340 struct pipe_resource
*_resource
,
1343 const struct pipe_box
*box
,
1344 struct pipe_transfer
**transfer
)
1346 struct trace_context
*tr_context
= trace_context(_context
);
1347 struct trace_resource
*tr_res
= trace_resource(_resource
);
1348 struct pipe_context
*context
= tr_context
->pipe
;
1349 struct pipe_resource
*texture
= tr_res
->resource
;
1350 struct pipe_transfer
*result
= NULL
;
1353 assert(texture
->screen
== context
->screen
);
1356 * Map and transfers can't be serialized so we convert all write transfers
1357 * to transfer_inline_write and ignore read transfers.
1360 map
= context
->transfer_map(context
, texture
, level
, usage
, box
, &result
);
1364 *transfer
= trace_transfer_create(tr_context
, tr_res
, result
);
1367 if(usage
& PIPE_TRANSFER_WRITE
) {
1368 trace_transfer(*transfer
)->map
= map
;
1372 return *transfer
? map
: NULL
;
1376 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1377 struct pipe_transfer
*_transfer
,
1378 const struct pipe_box
*box
)
1380 struct trace_context
*tr_context
= trace_context(_context
);
1381 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1382 struct pipe_context
*context
= tr_context
->pipe
;
1383 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1385 context
->transfer_flush_region(context
,
1391 trace_context_transfer_unmap(struct pipe_context
*_context
,
1392 struct pipe_transfer
*_transfer
)
1394 struct trace_context
*tr_ctx
= trace_context(_context
);
1395 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1396 struct pipe_context
*context
= tr_ctx
->pipe
;
1397 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1401 * Fake a transfer_inline_write
1404 struct pipe_resource
*resource
= transfer
->resource
;
1405 unsigned level
= transfer
->level
;
1406 unsigned usage
= transfer
->usage
;
1407 const struct pipe_box
*box
= &transfer
->box
;
1408 unsigned stride
= transfer
->stride
;
1409 unsigned layer_stride
= transfer
->layer_stride
;
1411 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1413 trace_dump_arg(ptr
, context
);
1414 trace_dump_arg(ptr
, resource
);
1415 trace_dump_arg(uint
, level
);
1416 trace_dump_arg(uint
, usage
);
1417 trace_dump_arg(box
, box
);
1419 trace_dump_arg_begin("data");
1420 trace_dump_box_bytes(tr_trans
->map
,
1425 trace_dump_arg_end();
1427 trace_dump_arg(uint
, stride
);
1428 trace_dump_arg(uint
, layer_stride
);
1430 trace_dump_call_end();
1432 tr_trans
->map
= NULL
;
1435 context
->transfer_unmap(context
, transfer
);
1436 trace_transfer_destroy(tr_ctx
, tr_trans
);
1441 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1442 struct pipe_resource
*_resource
,
1445 const struct pipe_box
*box
,
1448 unsigned layer_stride
)
1450 struct trace_context
*tr_context
= trace_context(_context
);
1451 struct trace_resource
*tr_res
= trace_resource(_resource
);
1452 struct pipe_context
*context
= tr_context
->pipe
;
1453 struct pipe_resource
*resource
= tr_res
->resource
;
1455 assert(resource
->screen
== context
->screen
);
1457 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1459 trace_dump_arg(ptr
, context
);
1460 trace_dump_arg(ptr
, resource
);
1461 trace_dump_arg(uint
, level
);
1462 trace_dump_arg(uint
, usage
);
1463 trace_dump_arg(box
, box
);
1465 trace_dump_arg_begin("data");
1466 trace_dump_box_bytes(data
,
1471 trace_dump_arg_end();
1473 trace_dump_arg(uint
, stride
);
1474 trace_dump_arg(uint
, layer_stride
);
1476 trace_dump_call_end();
1478 context
->transfer_inline_write(context
, resource
,
1479 level
, usage
, box
, data
, stride
, layer_stride
);
1483 static void trace_context_render_condition(struct pipe_context
*_context
,
1484 struct pipe_query
*query
,
1487 struct trace_context
*tr_context
= trace_context(_context
);
1488 struct pipe_context
*context
= tr_context
->pipe
;
1490 trace_dump_call_begin("pipe_context", "render_condition");
1492 trace_dump_arg(ptr
, context
);
1493 trace_dump_arg(ptr
, query
);
1494 trace_dump_arg(uint
, mode
);
1496 trace_dump_call_end();
1498 context
->render_condition(context
, query
, mode
);
1502 static void trace_context_texture_barrier(struct pipe_context
*_context
)
1504 struct trace_context
*tr_context
= trace_context(_context
);
1505 struct pipe_context
*context
= tr_context
->pipe
;
1507 trace_dump_call_begin("pipe_context", "texture_barrier");
1509 trace_dump_arg(ptr
, context
);
1511 trace_dump_call_end();
1513 context
->texture_barrier(context
);
1517 static const struct debug_named_value rbug_blocker_flags
[] = {
1518 {"before", 1, NULL
},
1520 DEBUG_NAMED_VALUE_END
1523 struct pipe_context
*
1524 trace_context_create(struct trace_screen
*tr_scr
,
1525 struct pipe_context
*pipe
)
1527 struct trace_context
*tr_ctx
;
1532 if(!trace_enabled())
1535 tr_ctx
= CALLOC_STRUCT(trace_context
);
1539 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1540 tr_ctx
->base
.screen
= &tr_scr
->base
;
1542 tr_ctx
->base
.destroy
= trace_context_destroy
;
1544 #define TR_CTX_INIT(_member) \
1545 tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
1547 TR_CTX_INIT(draw_vbo
);
1548 TR_CTX_INIT(render_condition
);
1549 TR_CTX_INIT(create_query
);
1550 TR_CTX_INIT(destroy_query
);
1551 TR_CTX_INIT(begin_query
);
1552 TR_CTX_INIT(end_query
);
1553 TR_CTX_INIT(get_query_result
);
1554 TR_CTX_INIT(create_blend_state
);
1555 TR_CTX_INIT(bind_blend_state
);
1556 TR_CTX_INIT(delete_blend_state
);
1557 TR_CTX_INIT(create_sampler_state
);
1558 TR_CTX_INIT(bind_fragment_sampler_states
);
1559 TR_CTX_INIT(bind_vertex_sampler_states
);
1560 TR_CTX_INIT(bind_geometry_sampler_states
);
1561 TR_CTX_INIT(delete_sampler_state
);
1562 TR_CTX_INIT(create_rasterizer_state
);
1563 TR_CTX_INIT(bind_rasterizer_state
);
1564 TR_CTX_INIT(delete_rasterizer_state
);
1565 TR_CTX_INIT(create_depth_stencil_alpha_state
);
1566 TR_CTX_INIT(bind_depth_stencil_alpha_state
);
1567 TR_CTX_INIT(delete_depth_stencil_alpha_state
);
1568 TR_CTX_INIT(create_fs_state
);
1569 TR_CTX_INIT(bind_fs_state
);
1570 TR_CTX_INIT(delete_fs_state
);
1571 TR_CTX_INIT(create_vs_state
);
1572 TR_CTX_INIT(bind_vs_state
);
1573 TR_CTX_INIT(delete_vs_state
);
1574 TR_CTX_INIT(create_gs_state
);
1575 TR_CTX_INIT(bind_gs_state
);
1576 TR_CTX_INIT(delete_gs_state
);
1577 TR_CTX_INIT(create_vertex_elements_state
);
1578 TR_CTX_INIT(bind_vertex_elements_state
);
1579 TR_CTX_INIT(delete_vertex_elements_state
);
1580 TR_CTX_INIT(set_blend_color
);
1581 TR_CTX_INIT(set_stencil_ref
);
1582 TR_CTX_INIT(set_clip_state
);
1583 TR_CTX_INIT(set_sample_mask
);
1584 TR_CTX_INIT(set_constant_buffer
);
1585 TR_CTX_INIT(set_framebuffer_state
);
1586 TR_CTX_INIT(set_polygon_stipple
);
1587 TR_CTX_INIT(set_scissor_states
);
1588 TR_CTX_INIT(set_viewport_states
);
1589 TR_CTX_INIT(set_fragment_sampler_views
);
1590 TR_CTX_INIT(set_vertex_sampler_views
);
1591 TR_CTX_INIT(set_geometry_sampler_views
);
1592 TR_CTX_INIT(create_sampler_view
);
1593 TR_CTX_INIT(sampler_view_destroy
);
1594 TR_CTX_INIT(create_surface
);
1595 TR_CTX_INIT(surface_destroy
);
1596 TR_CTX_INIT(set_vertex_buffers
);
1597 TR_CTX_INIT(set_index_buffer
);
1598 TR_CTX_INIT(create_stream_output_target
);
1599 TR_CTX_INIT(stream_output_target_destroy
);
1600 TR_CTX_INIT(set_stream_output_targets
);
1601 TR_CTX_INIT(resource_copy_region
);
1604 TR_CTX_INIT(clear_render_target
);
1605 TR_CTX_INIT(clear_depth_stencil
);
1607 TR_CTX_INIT(texture_barrier
);
1609 TR_CTX_INIT(transfer_map
);
1610 TR_CTX_INIT(transfer_unmap
);
1611 TR_CTX_INIT(transfer_flush_region
);
1612 TR_CTX_INIT(transfer_inline_write
);
1616 tr_ctx
->pipe
= pipe
;
1618 return &tr_ctx
->base
;
1626 * Sanity checker: check that the given context really is a
1627 * trace context (and not the wrapped driver's context).
1630 trace_context_check(const struct pipe_context
*pipe
)
1632 struct trace_context
*tr_ctx
= (struct trace_context
*) pipe
;
1633 assert(tr_ctx
->base
.destroy
== trace_context_destroy
);