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_delete_sampler_state(struct pipe_context
*_pipe
,
365 struct trace_context
*tr_ctx
= trace_context(_pipe
);
366 struct pipe_context
*pipe
= tr_ctx
->pipe
;
368 trace_dump_call_begin("pipe_context", "delete_sampler_state");
370 trace_dump_arg(ptr
, pipe
);
371 trace_dump_arg(ptr
, state
);
373 pipe
->delete_sampler_state(pipe
, state
);
375 trace_dump_call_end();
380 trace_context_create_rasterizer_state(struct pipe_context
*_pipe
,
381 const struct pipe_rasterizer_state
*state
)
383 struct trace_context
*tr_ctx
= trace_context(_pipe
);
384 struct pipe_context
*pipe
= tr_ctx
->pipe
;
387 trace_dump_call_begin("pipe_context", "create_rasterizer_state");
389 trace_dump_arg(ptr
, pipe
);
390 trace_dump_arg(rasterizer_state
, state
);
392 result
= pipe
->create_rasterizer_state(pipe
, state
);
394 trace_dump_ret(ptr
, result
);
396 trace_dump_call_end();
403 trace_context_bind_rasterizer_state(struct pipe_context
*_pipe
,
406 struct trace_context
*tr_ctx
= trace_context(_pipe
);
407 struct pipe_context
*pipe
= tr_ctx
->pipe
;
409 trace_dump_call_begin("pipe_context", "bind_rasterizer_state");
411 trace_dump_arg(ptr
, pipe
);
412 trace_dump_arg(ptr
, state
);
414 pipe
->bind_rasterizer_state(pipe
, state
);
416 trace_dump_call_end();
421 trace_context_delete_rasterizer_state(struct pipe_context
*_pipe
,
424 struct trace_context
*tr_ctx
= trace_context(_pipe
);
425 struct pipe_context
*pipe
= tr_ctx
->pipe
;
427 trace_dump_call_begin("pipe_context", "delete_rasterizer_state");
429 trace_dump_arg(ptr
, pipe
);
430 trace_dump_arg(ptr
, state
);
432 pipe
->delete_rasterizer_state(pipe
, state
);
434 trace_dump_call_end();
439 trace_context_create_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
440 const struct pipe_depth_stencil_alpha_state
*state
)
442 struct trace_context
*tr_ctx
= trace_context(_pipe
);
443 struct pipe_context
*pipe
= tr_ctx
->pipe
;
446 trace_dump_call_begin("pipe_context", "create_depth_stencil_alpha_state");
448 result
= pipe
->create_depth_stencil_alpha_state(pipe
, state
);
450 trace_dump_arg(ptr
, pipe
);
451 trace_dump_arg(depth_stencil_alpha_state
, state
);
453 trace_dump_ret(ptr
, result
);
455 trace_dump_call_end();
462 trace_context_bind_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
465 struct trace_context
*tr_ctx
= trace_context(_pipe
);
466 struct pipe_context
*pipe
= tr_ctx
->pipe
;
468 trace_dump_call_begin("pipe_context", "bind_depth_stencil_alpha_state");
470 trace_dump_arg(ptr
, pipe
);
471 trace_dump_arg(ptr
, state
);
473 pipe
->bind_depth_stencil_alpha_state(pipe
, state
);
475 trace_dump_call_end();
480 trace_context_delete_depth_stencil_alpha_state(struct pipe_context
*_pipe
,
483 struct trace_context
*tr_ctx
= trace_context(_pipe
);
484 struct pipe_context
*pipe
= tr_ctx
->pipe
;
486 trace_dump_call_begin("pipe_context", "delete_depth_stencil_alpha_state");
488 trace_dump_arg(ptr
, pipe
);
489 trace_dump_arg(ptr
, state
);
491 pipe
->delete_depth_stencil_alpha_state(pipe
, state
);
493 trace_dump_call_end();
498 trace_context_create_fs_state(struct pipe_context
*_pipe
,
499 const struct pipe_shader_state
*state
)
501 struct trace_context
*tr_ctx
= trace_context(_pipe
);
502 struct pipe_context
*pipe
= tr_ctx
->pipe
;
505 trace_dump_call_begin("pipe_context", "create_fs_state");
507 trace_dump_arg(ptr
, pipe
);
508 trace_dump_arg(shader_state
, state
);
510 result
= pipe
->create_fs_state(pipe
, state
);
512 trace_dump_ret(ptr
, result
);
514 trace_dump_call_end();
521 trace_context_bind_fs_state(struct pipe_context
*_pipe
,
524 struct trace_context
*tr_ctx
= trace_context(_pipe
);
525 struct pipe_context
*pipe
= tr_ctx
->pipe
;
527 trace_dump_call_begin("pipe_context", "bind_fs_state");
529 trace_dump_arg(ptr
, pipe
);
530 trace_dump_arg(ptr
, state
);
532 pipe
->bind_fs_state(pipe
, state
);
534 trace_dump_call_end();
539 trace_context_delete_fs_state(struct pipe_context
*_pipe
,
542 struct trace_context
*tr_ctx
= trace_context(_pipe
);
543 struct pipe_context
*pipe
= tr_ctx
->pipe
;
545 trace_dump_call_begin("pipe_context", "delete_fs_state");
547 trace_dump_arg(ptr
, pipe
);
548 trace_dump_arg(ptr
, state
);
550 pipe
->delete_fs_state(pipe
, state
);
552 trace_dump_call_end();
557 trace_context_create_vs_state(struct pipe_context
*_pipe
,
558 const struct pipe_shader_state
*state
)
560 struct trace_context
*tr_ctx
= trace_context(_pipe
);
561 struct pipe_context
*pipe
= tr_ctx
->pipe
;
564 trace_dump_call_begin("pipe_context", "create_vs_state");
566 trace_dump_arg(ptr
, pipe
);
567 trace_dump_arg(shader_state
, state
);
569 result
= pipe
->create_vs_state(pipe
, state
);
571 trace_dump_ret(ptr
, result
);
573 trace_dump_call_end();
580 trace_context_bind_vs_state(struct pipe_context
*_pipe
,
583 struct trace_context
*tr_ctx
= trace_context(_pipe
);
584 struct pipe_context
*pipe
= tr_ctx
->pipe
;
586 trace_dump_call_begin("pipe_context", "bind_vs_state");
588 trace_dump_arg(ptr
, pipe
);
589 trace_dump_arg(ptr
, state
);
591 pipe
->bind_vs_state(pipe
, state
);
593 trace_dump_call_end();
598 trace_context_delete_vs_state(struct pipe_context
*_pipe
,
601 struct trace_context
*tr_ctx
= trace_context(_pipe
);
602 struct pipe_context
*pipe
= tr_ctx
->pipe
;
604 trace_dump_call_begin("pipe_context", "delete_vs_state");
606 trace_dump_arg(ptr
, pipe
);
607 trace_dump_arg(ptr
, state
);
609 pipe
->delete_vs_state(pipe
, state
);
611 trace_dump_call_end();
616 trace_context_create_vertex_elements_state(struct pipe_context
*_pipe
,
617 unsigned num_elements
,
618 const struct pipe_vertex_element
*elements
)
620 struct trace_context
*tr_ctx
= trace_context(_pipe
);
621 struct pipe_context
*pipe
= tr_ctx
->pipe
;
624 trace_dump_call_begin("pipe_context", "create_vertex_elements_state");
626 trace_dump_arg(ptr
, pipe
);
627 trace_dump_arg(uint
, num_elements
);
629 trace_dump_arg_begin("elements");
630 trace_dump_struct_array(vertex_element
, elements
, num_elements
);
631 trace_dump_arg_end();
633 result
= pipe
->create_vertex_elements_state(pipe
, num_elements
, elements
);
635 trace_dump_ret(ptr
, result
);
637 trace_dump_call_end();
644 trace_context_bind_vertex_elements_state(struct pipe_context
*_pipe
,
647 struct trace_context
*tr_ctx
= trace_context(_pipe
);
648 struct pipe_context
*pipe
= tr_ctx
->pipe
;
650 trace_dump_call_begin("pipe_context", "bind_vertex_elements_state");
652 trace_dump_arg(ptr
, pipe
);
653 trace_dump_arg(ptr
, state
);
655 pipe
->bind_vertex_elements_state(pipe
, state
);
657 trace_dump_call_end();
662 trace_context_delete_vertex_elements_state(struct pipe_context
*_pipe
,
665 struct trace_context
*tr_ctx
= trace_context(_pipe
);
666 struct pipe_context
*pipe
= tr_ctx
->pipe
;
668 trace_dump_call_begin("pipe_context", "delete_vertex_elements_state");
670 trace_dump_arg(ptr
, pipe
);
671 trace_dump_arg(ptr
, state
);
673 pipe
->delete_vertex_elements_state(pipe
, state
);
675 trace_dump_call_end();
680 trace_context_set_blend_color(struct pipe_context
*_pipe
,
681 const struct pipe_blend_color
*state
)
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_blend_color");
688 trace_dump_arg(ptr
, pipe
);
689 trace_dump_arg(blend_color
, state
);
691 pipe
->set_blend_color(pipe
, state
);
693 trace_dump_call_end();
698 trace_context_set_stencil_ref(struct pipe_context
*_pipe
,
699 const struct pipe_stencil_ref
*state
)
701 struct trace_context
*tr_ctx
= trace_context(_pipe
);
702 struct pipe_context
*pipe
= tr_ctx
->pipe
;
704 trace_dump_call_begin("pipe_context", "set_stencil_ref");
706 trace_dump_arg(ptr
, pipe
);
707 trace_dump_arg(stencil_ref
, state
);
709 pipe
->set_stencil_ref(pipe
, state
);
711 trace_dump_call_end();
716 trace_context_set_clip_state(struct pipe_context
*_pipe
,
717 const struct pipe_clip_state
*state
)
719 struct trace_context
*tr_ctx
= trace_context(_pipe
);
720 struct pipe_context
*pipe
= tr_ctx
->pipe
;
722 trace_dump_call_begin("pipe_context", "set_clip_state");
724 trace_dump_arg(ptr
, pipe
);
725 trace_dump_arg(clip_state
, state
);
727 pipe
->set_clip_state(pipe
, state
);
729 trace_dump_call_end();
733 trace_context_set_sample_mask(struct pipe_context
*_pipe
,
734 unsigned sample_mask
)
736 struct trace_context
*tr_ctx
= trace_context(_pipe
);
737 struct pipe_context
*pipe
= tr_ctx
->pipe
;
739 trace_dump_call_begin("pipe_context", "set_sample_mask");
741 trace_dump_arg(ptr
, pipe
);
742 trace_dump_arg(uint
, sample_mask
);
744 pipe
->set_sample_mask(pipe
, sample_mask
);
746 trace_dump_call_end();
750 trace_context_set_constant_buffer(struct pipe_context
*_pipe
,
751 uint shader
, uint index
,
752 struct pipe_constant_buffer
*constant_buffer
)
754 struct trace_context
*tr_ctx
= trace_context(_pipe
);
755 struct pipe_context
*pipe
= tr_ctx
->pipe
;
756 struct pipe_constant_buffer cb
;
758 if (constant_buffer
) {
759 cb
= *constant_buffer
;
760 cb
.buffer
= trace_resource_unwrap(tr_ctx
, constant_buffer
->buffer
);
763 trace_dump_call_begin("pipe_context", "set_constant_buffer");
765 trace_dump_arg(ptr
, pipe
);
766 trace_dump_arg(uint
, shader
);
767 trace_dump_arg(uint
, index
);
768 trace_dump_arg(constant_buffer
, constant_buffer
);
770 pipe
->set_constant_buffer(pipe
, shader
, index
,
771 constant_buffer
? &cb
: NULL
);
773 trace_dump_call_end();
778 trace_context_set_framebuffer_state(struct pipe_context
*_pipe
,
779 const struct pipe_framebuffer_state
*state
)
781 struct trace_context
*tr_ctx
= trace_context(_pipe
);
782 struct pipe_context
*pipe
= tr_ctx
->pipe
;
783 struct pipe_framebuffer_state unwrapped_state
;
787 /* Unwrap the input state */
788 memcpy(&unwrapped_state
, state
, sizeof(unwrapped_state
));
789 for(i
= 0; i
< state
->nr_cbufs
; ++i
)
790 unwrapped_state
.cbufs
[i
] = trace_surface_unwrap(tr_ctx
, state
->cbufs
[i
]);
791 for(i
= state
->nr_cbufs
; i
< PIPE_MAX_COLOR_BUFS
; ++i
)
792 unwrapped_state
.cbufs
[i
] = NULL
;
793 unwrapped_state
.zsbuf
= trace_surface_unwrap(tr_ctx
, state
->zsbuf
);
794 state
= &unwrapped_state
;
796 trace_dump_call_begin("pipe_context", "set_framebuffer_state");
798 trace_dump_arg(ptr
, pipe
);
799 trace_dump_arg(framebuffer_state
, state
);
801 pipe
->set_framebuffer_state(pipe
, state
);
803 trace_dump_call_end();
808 trace_context_set_polygon_stipple(struct pipe_context
*_pipe
,
809 const struct pipe_poly_stipple
*state
)
811 struct trace_context
*tr_ctx
= trace_context(_pipe
);
812 struct pipe_context
*pipe
= tr_ctx
->pipe
;
814 trace_dump_call_begin("pipe_context", "set_polygon_stipple");
816 trace_dump_arg(ptr
, pipe
);
817 trace_dump_arg(poly_stipple
, state
);
819 pipe
->set_polygon_stipple(pipe
, state
);
821 trace_dump_call_end();
826 trace_context_set_scissor_state(struct pipe_context
*_pipe
,
827 const struct pipe_scissor_state
*state
)
829 struct trace_context
*tr_ctx
= trace_context(_pipe
);
830 struct pipe_context
*pipe
= tr_ctx
->pipe
;
832 trace_dump_call_begin("pipe_context", "set_scissor_state");
834 trace_dump_arg(ptr
, pipe
);
835 trace_dump_arg(scissor_state
, state
);
837 pipe
->set_scissor_state(pipe
, state
);
839 trace_dump_call_end();
844 trace_context_set_viewport_state(struct pipe_context
*_pipe
,
845 const struct pipe_viewport_state
*state
)
847 struct trace_context
*tr_ctx
= trace_context(_pipe
);
848 struct pipe_context
*pipe
= tr_ctx
->pipe
;
850 trace_dump_call_begin("pipe_context", "set_viewport_state");
852 trace_dump_arg(ptr
, pipe
);
853 trace_dump_arg(viewport_state
, state
);
855 pipe
->set_viewport_state(pipe
, state
);
857 trace_dump_call_end();
861 static struct pipe_sampler_view
*
862 trace_context_create_sampler_view(struct pipe_context
*_pipe
,
863 struct pipe_resource
*_resource
,
864 const struct pipe_sampler_view
*templ
)
866 struct trace_context
*tr_ctx
= trace_context(_pipe
);
867 struct trace_resource
*tr_res
= trace_resource(_resource
);
868 struct pipe_context
*pipe
= tr_ctx
->pipe
;
869 struct pipe_resource
*resource
= tr_res
->resource
;
870 struct pipe_sampler_view
*result
;
871 struct trace_sampler_view
*tr_view
;
873 trace_dump_call_begin("pipe_context", "create_sampler_view");
875 trace_dump_arg(ptr
, pipe
);
876 trace_dump_arg(ptr
, resource
);
878 trace_dump_arg_begin("templ");
879 trace_dump_sampler_view_template(templ
, resource
->target
);
880 trace_dump_arg_end();
882 result
= pipe
->create_sampler_view(pipe
, resource
, templ
);
884 trace_dump_ret(ptr
, result
);
886 trace_dump_call_end();
889 * Wrap pipe_sampler_view
891 tr_view
= CALLOC_STRUCT(trace_sampler_view
);
892 tr_view
->base
= *templ
;
893 tr_view
->base
.reference
.count
= 1;
894 tr_view
->base
.texture
= NULL
;
895 pipe_resource_reference(&tr_view
->base
.texture
, _resource
);
896 tr_view
->base
.context
= _pipe
;
897 tr_view
->sampler_view
= result
;
898 result
= &tr_view
->base
;
905 trace_context_sampler_view_destroy(struct pipe_context
*_pipe
,
906 struct pipe_sampler_view
*_view
)
908 struct trace_context
*tr_ctx
= trace_context(_pipe
);
909 struct trace_sampler_view
*tr_view
= trace_sampler_view(_view
);
910 struct pipe_context
*pipe
= tr_ctx
->pipe
;
911 struct pipe_sampler_view
*view
= tr_view
->sampler_view
;
913 trace_dump_call_begin("pipe_context", "sampler_view_destroy");
915 trace_dump_arg(ptr
, pipe
);
916 trace_dump_arg(ptr
, view
);
918 pipe_sampler_view_reference(&tr_view
->sampler_view
, NULL
);
920 trace_dump_call_end();
922 pipe_resource_reference(&_view
->texture
, NULL
);
926 /********************************************************************
931 static struct pipe_surface
*
932 trace_context_create_surface(struct pipe_context
*_pipe
,
933 struct pipe_resource
*_resource
,
934 const struct pipe_surface
*surf_tmpl
)
936 struct trace_context
*tr_ctx
= trace_context(_pipe
);
937 struct trace_resource
*tr_res
= trace_resource(_resource
);
938 struct pipe_context
*pipe
= tr_ctx
->pipe
;
939 struct pipe_resource
*resource
= tr_res
->resource
;
940 struct pipe_surface
*result
= NULL
;
942 trace_dump_call_begin("pipe_context", "create_surface");
944 trace_dump_arg(ptr
, pipe
);
945 trace_dump_arg(ptr
, resource
);
947 trace_dump_arg_begin("surf_tmpl");
948 trace_dump_surface_template(surf_tmpl
, resource
->target
);
949 trace_dump_arg_end();
952 result
= pipe
->create_surface(pipe
, resource
, surf_tmpl
);
954 trace_dump_ret(ptr
, result
);
956 trace_dump_call_end();
958 result
= trace_surf_create(tr_res
, result
);
965 trace_context_surface_destroy(struct pipe_context
*_pipe
,
966 struct pipe_surface
*_surface
)
968 struct trace_context
*tr_ctx
= trace_context(_pipe
);
969 struct pipe_context
*pipe
= tr_ctx
->pipe
;
970 struct trace_surface
*tr_surf
= trace_surface(_surface
);
971 struct pipe_surface
*surface
= tr_surf
->surface
;
973 trace_dump_call_begin("pipe_context", "surface_destroy");
975 trace_dump_arg(ptr
, pipe
);
976 trace_dump_arg(ptr
, surface
);
978 trace_dump_call_end();
980 trace_surf_destroy(tr_surf
);
985 trace_context_set_sampler_views(struct pipe_context
*_pipe
,
989 struct pipe_sampler_view
**views
)
991 struct trace_context
*tr_ctx
= trace_context(_pipe
);
992 struct trace_sampler_view
*tr_view
;
993 struct pipe_context
*pipe
= tr_ctx
->pipe
;
994 struct pipe_sampler_view
*unwrapped_views
[PIPE_MAX_SAMPLERS
];
997 /* remove this when we have pipe->set_sampler_views(..., start, ...) */
1000 for(i
= 0; i
< num
; ++i
) {
1001 tr_view
= trace_sampler_view(views
[i
]);
1002 unwrapped_views
[i
] = tr_view
? tr_view
->sampler_view
: NULL
;
1004 views
= unwrapped_views
;
1007 case PIPE_SHADER_VERTEX
:
1008 trace_dump_call_begin("pipe_context", "set_vertex_sampler_views");
1010 case PIPE_SHADER_GEOMETRY
:
1011 trace_dump_call_begin("pipe_context", "set_geometry_sampler_views");
1013 case PIPE_SHADER_FRAGMENT
:
1014 trace_dump_call_begin("pipe_context", "set_fragment_sampler_views");
1017 debug_error("Unexpected shader in trace_context_set_sampler_views()");
1020 trace_dump_arg(ptr
, pipe
);
1021 /*trace_dump_arg(uint, shader);*/
1022 trace_dump_arg(uint
, num
);
1023 trace_dump_arg_array(ptr
, views
, num
);
1026 case PIPE_SHADER_VERTEX
:
1027 pipe
->set_vertex_sampler_views(pipe
, num
, views
);
1029 case PIPE_SHADER_GEOMETRY
:
1030 pipe
->set_geometry_sampler_views(pipe
, num
, views
);
1032 case PIPE_SHADER_FRAGMENT
:
1033 pipe
->set_fragment_sampler_views(pipe
, num
, views
);
1036 debug_error("Unexpected shader in trace_context_set_sampler_views()");
1039 trace_dump_call_end();
1044 trace_context_set_fragment_sampler_views(struct pipe_context
*_pipe
,
1046 struct pipe_sampler_view
**views
)
1048 trace_context_set_sampler_views(_pipe
, PIPE_SHADER_FRAGMENT
, 0, num
, views
);
1053 trace_context_set_vertex_sampler_views(struct pipe_context
*_pipe
,
1055 struct pipe_sampler_view
**views
)
1057 trace_context_set_sampler_views(_pipe
, PIPE_SHADER_VERTEX
, 0, num
, views
);
1062 trace_context_set_vertex_buffers(struct pipe_context
*_pipe
,
1063 unsigned start_slot
, unsigned num_buffers
,
1064 const struct pipe_vertex_buffer
*buffers
)
1066 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1067 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1070 trace_dump_call_begin("pipe_context", "set_vertex_buffers");
1072 trace_dump_arg(ptr
, pipe
);
1073 trace_dump_arg(uint
, start_slot
);
1074 trace_dump_arg(uint
, num_buffers
);
1076 trace_dump_arg_begin("buffers");
1077 trace_dump_struct_array(vertex_buffer
, buffers
, num_buffers
);
1078 trace_dump_arg_end();
1081 struct pipe_vertex_buffer
*_buffers
= MALLOC(num_buffers
* sizeof(*_buffers
));
1082 memcpy(_buffers
, buffers
, num_buffers
* sizeof(*_buffers
));
1083 for (i
= 0; i
< num_buffers
; i
++)
1084 _buffers
[i
].buffer
= trace_resource_unwrap(tr_ctx
, buffers
[i
].buffer
);
1085 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, _buffers
);
1088 pipe
->set_vertex_buffers(pipe
, start_slot
, num_buffers
, NULL
);
1091 trace_dump_call_end();
1096 trace_context_set_index_buffer(struct pipe_context
*_pipe
,
1097 const struct pipe_index_buffer
*ib
)
1099 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1100 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1102 trace_dump_call_begin("pipe_context", "set_index_buffer");
1104 trace_dump_arg(ptr
, pipe
);
1105 trace_dump_arg(index_buffer
, ib
);
1108 struct pipe_index_buffer _ib
;
1110 _ib
.buffer
= trace_resource_unwrap(tr_ctx
, ib
->buffer
);
1111 pipe
->set_index_buffer(pipe
, &_ib
);
1113 pipe
->set_index_buffer(pipe
, NULL
);
1116 trace_dump_call_end();
1120 static INLINE
struct pipe_stream_output_target
*
1121 trace_context_create_stream_output_target(struct pipe_context
*_pipe
,
1122 struct pipe_resource
*res
,
1123 unsigned buffer_offset
,
1124 unsigned buffer_size
)
1126 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1127 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1128 struct pipe_stream_output_target
*result
;
1130 res
= trace_resource_unwrap(tr_ctx
, res
);
1132 trace_dump_call_begin("pipe_context", "create_stream_output_target");
1134 trace_dump_arg(ptr
, pipe
);
1135 trace_dump_arg(ptr
, res
);
1136 trace_dump_arg(uint
, buffer_offset
);
1137 trace_dump_arg(uint
, buffer_size
);
1139 result
= pipe
->create_stream_output_target(pipe
,
1140 res
, buffer_offset
, buffer_size
);
1142 trace_dump_call_end();
1149 trace_context_stream_output_target_destroy(
1150 struct pipe_context
*_pipe
,
1151 struct pipe_stream_output_target
*target
)
1153 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1154 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1156 trace_dump_call_begin("pipe_context", "stream_output_target_destroy");
1158 trace_dump_arg(ptr
, pipe
);
1159 trace_dump_arg(ptr
, target
);
1161 pipe
->stream_output_target_destroy(pipe
, target
);
1163 trace_dump_call_end();
1168 trace_context_set_stream_output_targets(struct pipe_context
*_pipe
,
1169 unsigned num_targets
,
1170 struct pipe_stream_output_target
**tgs
,
1171 unsigned append_bitmask
)
1173 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1174 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1176 trace_dump_call_begin("pipe_context", "set_stream_output_targets");
1178 trace_dump_arg(ptr
, pipe
);
1179 trace_dump_arg(uint
, num_targets
);
1180 trace_dump_arg_array(ptr
, tgs
, num_targets
);
1181 trace_dump_arg(uint
, append_bitmask
);
1183 pipe
->set_stream_output_targets(pipe
, num_targets
, tgs
, append_bitmask
);
1185 trace_dump_call_end();
1190 trace_context_resource_copy_region(struct pipe_context
*_pipe
,
1191 struct pipe_resource
*dst
,
1193 unsigned dstx
, unsigned dsty
, unsigned dstz
,
1194 struct pipe_resource
*src
,
1196 const struct pipe_box
*src_box
)
1198 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1199 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1201 dst
= trace_resource_unwrap(tr_ctx
, dst
);
1202 src
= trace_resource_unwrap(tr_ctx
, src
);
1204 trace_dump_call_begin("pipe_context", "resource_copy_region");
1206 trace_dump_arg(ptr
, pipe
);
1207 trace_dump_arg(ptr
, dst
);
1208 trace_dump_arg(uint
, dst_level
);
1209 trace_dump_arg(uint
, dstx
);
1210 trace_dump_arg(uint
, dsty
);
1211 trace_dump_arg(uint
, dstz
);
1212 trace_dump_arg(ptr
, src
);
1213 trace_dump_arg(uint
, src_level
);
1214 trace_dump_arg(box
, src_box
);
1216 pipe
->resource_copy_region(pipe
,
1217 dst
, dst_level
, dstx
, dsty
, dstz
,
1218 src
, src_level
, src_box
);
1220 trace_dump_call_end();
1225 trace_context_blit(struct pipe_context
*_pipe
,
1226 const struct pipe_blit_info
*_info
)
1228 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1229 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1230 struct pipe_blit_info info
= *_info
;
1232 info
.dst
.resource
= trace_resource_unwrap(tr_ctx
, info
.dst
.resource
);
1233 info
.src
.resource
= trace_resource_unwrap(tr_ctx
, info
.src
.resource
);
1235 trace_dump_call_begin("pipe_context", "blit");
1237 trace_dump_arg(ptr
, pipe
);
1238 trace_dump_arg(blit_info
, _info
);
1240 pipe
->blit(pipe
, &info
);
1242 trace_dump_call_end();
1247 trace_context_clear(struct pipe_context
*_pipe
,
1249 const union pipe_color_union
*color
,
1253 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1254 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1256 trace_dump_call_begin("pipe_context", "clear");
1258 trace_dump_arg(ptr
, pipe
);
1259 trace_dump_arg(uint
, buffers
);
1260 trace_dump_arg_begin("color");
1262 trace_dump_array(float, color
->f
, 4);
1265 trace_dump_arg_end();
1266 trace_dump_arg(float, depth
);
1267 trace_dump_arg(uint
, stencil
);
1269 pipe
->clear(pipe
, buffers
, color
, depth
, stencil
);
1271 trace_dump_call_end();
1276 trace_context_clear_render_target(struct pipe_context
*_pipe
,
1277 struct pipe_surface
*dst
,
1278 const union pipe_color_union
*color
,
1279 unsigned dstx
, unsigned dsty
,
1280 unsigned width
, unsigned height
)
1282 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1283 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1285 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1287 trace_dump_call_begin("pipe_context", "clear_render_target");
1289 trace_dump_arg(ptr
, pipe
);
1290 trace_dump_arg(ptr
, dst
);
1291 trace_dump_arg_array(float, color
->f
, 4);
1292 trace_dump_arg(uint
, dstx
);
1293 trace_dump_arg(uint
, dsty
);
1294 trace_dump_arg(uint
, width
);
1295 trace_dump_arg(uint
, height
);
1297 pipe
->clear_render_target(pipe
, dst
, color
, dstx
, dsty
, width
, height
);
1299 trace_dump_call_end();
1303 trace_context_clear_depth_stencil(struct pipe_context
*_pipe
,
1304 struct pipe_surface
*dst
,
1305 unsigned clear_flags
,
1308 unsigned dstx
, unsigned dsty
,
1309 unsigned width
, unsigned height
)
1311 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1312 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1314 dst
= trace_surface_unwrap(tr_ctx
, dst
);
1316 trace_dump_call_begin("pipe_context", "clear_depth_stencil");
1318 trace_dump_arg(ptr
, pipe
);
1319 trace_dump_arg(ptr
, dst
);
1320 trace_dump_arg(uint
, clear_flags
);
1321 trace_dump_arg(float, depth
);
1322 trace_dump_arg(uint
, stencil
);
1323 trace_dump_arg(uint
, dstx
);
1324 trace_dump_arg(uint
, dsty
);
1325 trace_dump_arg(uint
, width
);
1326 trace_dump_arg(uint
, height
);
1328 pipe
->clear_depth_stencil(pipe
, dst
, clear_flags
, depth
, stencil
,
1329 dstx
, dsty
, width
, height
);
1331 trace_dump_call_end();
1335 trace_context_flush(struct pipe_context
*_pipe
,
1336 struct pipe_fence_handle
**fence
)
1338 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1339 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1341 trace_dump_call_begin("pipe_context", "flush");
1343 trace_dump_arg(ptr
, pipe
);
1345 pipe
->flush(pipe
, fence
);
1348 trace_dump_ret(ptr
, *fence
);
1350 trace_dump_call_end();
1355 trace_context_destroy(struct pipe_context
*_pipe
)
1357 struct trace_context
*tr_ctx
= trace_context(_pipe
);
1358 struct pipe_context
*pipe
= tr_ctx
->pipe
;
1360 trace_dump_call_begin("pipe_context", "destroy");
1361 trace_dump_arg(ptr
, pipe
);
1362 trace_dump_call_end();
1364 pipe
->destroy(pipe
);
1370 /********************************************************************
1376 trace_context_transfer_map(struct pipe_context
*_context
,
1377 struct pipe_resource
*_resource
,
1380 const struct pipe_box
*box
,
1381 struct pipe_transfer
**transfer
)
1383 struct trace_context
*tr_context
= trace_context(_context
);
1384 struct trace_resource
*tr_res
= trace_resource(_resource
);
1385 struct pipe_context
*context
= tr_context
->pipe
;
1386 struct pipe_resource
*texture
= tr_res
->resource
;
1387 struct pipe_transfer
*result
= NULL
;
1390 assert(texture
->screen
== context
->screen
);
1393 * Map and transfers can't be serialized so we convert all write transfers
1394 * to transfer_inline_write and ignore read transfers.
1397 map
= context
->transfer_map(context
, texture
, level
, usage
, box
, &result
);
1401 *transfer
= trace_transfer_create(tr_context
, tr_res
, result
);
1404 if(usage
& PIPE_TRANSFER_WRITE
) {
1405 trace_transfer(*transfer
)->map
= map
;
1409 return *transfer
? map
: NULL
;
1413 trace_context_transfer_flush_region( struct pipe_context
*_context
,
1414 struct pipe_transfer
*_transfer
,
1415 const struct pipe_box
*box
)
1417 struct trace_context
*tr_context
= trace_context(_context
);
1418 struct trace_transfer
*tr_transfer
= trace_transfer(_transfer
);
1419 struct pipe_context
*context
= tr_context
->pipe
;
1420 struct pipe_transfer
*transfer
= tr_transfer
->transfer
;
1422 context
->transfer_flush_region(context
,
1428 trace_context_transfer_unmap(struct pipe_context
*_context
,
1429 struct pipe_transfer
*_transfer
)
1431 struct trace_context
*tr_ctx
= trace_context(_context
);
1432 struct trace_transfer
*tr_trans
= trace_transfer(_transfer
);
1433 struct pipe_context
*context
= tr_ctx
->pipe
;
1434 struct pipe_transfer
*transfer
= tr_trans
->transfer
;
1438 * Fake a transfer_inline_write
1441 struct pipe_resource
*resource
= transfer
->resource
;
1442 unsigned level
= transfer
->level
;
1443 unsigned usage
= transfer
->usage
;
1444 const struct pipe_box
*box
= &transfer
->box
;
1445 unsigned stride
= transfer
->stride
;
1446 unsigned layer_stride
= transfer
->layer_stride
;
1448 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1450 trace_dump_arg(ptr
, context
);
1451 trace_dump_arg(ptr
, resource
);
1452 trace_dump_arg(uint
, level
);
1453 trace_dump_arg(uint
, usage
);
1454 trace_dump_arg(box
, box
);
1456 trace_dump_arg_begin("data");
1457 trace_dump_box_bytes(tr_trans
->map
,
1462 trace_dump_arg_end();
1464 trace_dump_arg(uint
, stride
);
1465 trace_dump_arg(uint
, layer_stride
);
1467 trace_dump_call_end();
1469 tr_trans
->map
= NULL
;
1472 context
->transfer_unmap(context
, transfer
);
1473 trace_transfer_destroy(tr_ctx
, tr_trans
);
1478 trace_context_transfer_inline_write(struct pipe_context
*_context
,
1479 struct pipe_resource
*_resource
,
1482 const struct pipe_box
*box
,
1485 unsigned layer_stride
)
1487 struct trace_context
*tr_context
= trace_context(_context
);
1488 struct trace_resource
*tr_res
= trace_resource(_resource
);
1489 struct pipe_context
*context
= tr_context
->pipe
;
1490 struct pipe_resource
*resource
= tr_res
->resource
;
1492 assert(resource
->screen
== context
->screen
);
1494 trace_dump_call_begin("pipe_context", "transfer_inline_write");
1496 trace_dump_arg(ptr
, context
);
1497 trace_dump_arg(ptr
, resource
);
1498 trace_dump_arg(uint
, level
);
1499 trace_dump_arg(uint
, usage
);
1500 trace_dump_arg(box
, box
);
1502 trace_dump_arg_begin("data");
1503 trace_dump_box_bytes(data
,
1508 trace_dump_arg_end();
1510 trace_dump_arg(uint
, stride
);
1511 trace_dump_arg(uint
, layer_stride
);
1513 trace_dump_call_end();
1515 context
->transfer_inline_write(context
, resource
,
1516 level
, usage
, box
, data
, stride
, layer_stride
);
1520 static void trace_context_render_condition(struct pipe_context
*_context
,
1521 struct pipe_query
*query
,
1524 struct trace_context
*tr_context
= trace_context(_context
);
1525 struct pipe_context
*context
= tr_context
->pipe
;
1527 trace_dump_call_begin("pipe_context", "render_condition");
1529 trace_dump_arg(ptr
, context
);
1530 trace_dump_arg(ptr
, query
);
1531 trace_dump_arg(uint
, mode
);
1533 trace_dump_call_end();
1535 context
->render_condition(context
, query
, mode
);
1539 static void trace_context_texture_barrier(struct pipe_context
*_context
)
1541 struct trace_context
*tr_context
= trace_context(_context
);
1542 struct pipe_context
*context
= tr_context
->pipe
;
1544 trace_dump_call_begin("pipe_context", "texture_barrier");
1546 trace_dump_arg(ptr
, context
);
1548 trace_dump_call_end();
1550 context
->texture_barrier(context
);
1554 static const struct debug_named_value rbug_blocker_flags
[] = {
1555 {"before", 1, NULL
},
1557 DEBUG_NAMED_VALUE_END
1560 struct pipe_context
*
1561 trace_context_create(struct trace_screen
*tr_scr
,
1562 struct pipe_context
*pipe
)
1564 struct trace_context
*tr_ctx
;
1569 if(!trace_enabled())
1572 tr_ctx
= CALLOC_STRUCT(trace_context
);
1576 tr_ctx
->base
.priv
= pipe
->priv
; /* expose wrapped priv data */
1577 tr_ctx
->base
.screen
= &tr_scr
->base
;
1579 tr_ctx
->base
.destroy
= trace_context_destroy
;
1581 #define TR_CTX_INIT(_member) \
1582 tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
1584 TR_CTX_INIT(draw_vbo
);
1585 TR_CTX_INIT(create_query
);
1586 TR_CTX_INIT(destroy_query
);
1587 TR_CTX_INIT(begin_query
);
1588 TR_CTX_INIT(end_query
);
1589 TR_CTX_INIT(get_query_result
);
1590 TR_CTX_INIT(create_blend_state
);
1591 TR_CTX_INIT(bind_blend_state
);
1592 TR_CTX_INIT(delete_blend_state
);
1593 TR_CTX_INIT(create_sampler_state
);
1594 TR_CTX_INIT(bind_fragment_sampler_states
);
1595 TR_CTX_INIT(bind_vertex_sampler_states
);
1596 TR_CTX_INIT(delete_sampler_state
);
1597 TR_CTX_INIT(create_rasterizer_state
);
1598 TR_CTX_INIT(bind_rasterizer_state
);
1599 TR_CTX_INIT(delete_rasterizer_state
);
1600 TR_CTX_INIT(create_depth_stencil_alpha_state
);
1601 TR_CTX_INIT(bind_depth_stencil_alpha_state
);
1602 TR_CTX_INIT(delete_depth_stencil_alpha_state
);
1603 TR_CTX_INIT(create_fs_state
);
1604 TR_CTX_INIT(bind_fs_state
);
1605 TR_CTX_INIT(delete_fs_state
);
1606 TR_CTX_INIT(create_vs_state
);
1607 TR_CTX_INIT(bind_vs_state
);
1608 TR_CTX_INIT(delete_vs_state
);
1609 TR_CTX_INIT(create_vertex_elements_state
);
1610 TR_CTX_INIT(bind_vertex_elements_state
);
1611 TR_CTX_INIT(delete_vertex_elements_state
);
1612 TR_CTX_INIT(set_blend_color
);
1613 TR_CTX_INIT(set_stencil_ref
);
1614 TR_CTX_INIT(set_clip_state
);
1615 TR_CTX_INIT(set_sample_mask
);
1616 TR_CTX_INIT(set_constant_buffer
);
1617 TR_CTX_INIT(set_framebuffer_state
);
1618 TR_CTX_INIT(set_polygon_stipple
);
1619 TR_CTX_INIT(set_scissor_state
);
1620 TR_CTX_INIT(set_viewport_state
);
1621 TR_CTX_INIT(set_fragment_sampler_views
);
1622 TR_CTX_INIT(set_vertex_sampler_views
);
1623 TR_CTX_INIT(create_sampler_view
);
1624 TR_CTX_INIT(sampler_view_destroy
);
1625 TR_CTX_INIT(create_surface
);
1626 TR_CTX_INIT(surface_destroy
);
1627 TR_CTX_INIT(set_vertex_buffers
);
1628 TR_CTX_INIT(set_index_buffer
);
1629 TR_CTX_INIT(create_stream_output_target
);
1630 TR_CTX_INIT(stream_output_target_destroy
);
1631 TR_CTX_INIT(set_stream_output_targets
);
1632 TR_CTX_INIT(resource_copy_region
);
1635 TR_CTX_INIT(clear_render_target
);
1636 TR_CTX_INIT(clear_depth_stencil
);
1638 TR_CTX_INIT(render_condition
);
1639 TR_CTX_INIT(texture_barrier
);
1641 TR_CTX_INIT(transfer_map
);
1642 TR_CTX_INIT(transfer_unmap
);
1643 TR_CTX_INIT(transfer_flush_region
);
1644 TR_CTX_INIT(transfer_inline_write
);
1648 tr_ctx
->pipe
= pipe
;
1650 return &tr_ctx
->base
;