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 "pipe/p_util.h"
30 #include "tr_stream.h"
33 #include "tr_screen.h"
37 trace_screen_get_name(struct pipe_screen
*_screen
)
39 struct trace_screen
*tr_scr
= trace_screen(_screen
);
40 struct trace_stream
*stream
= tr_scr
->stream
;
41 struct pipe_screen
*screen
= tr_scr
->screen
;
44 trace_dump_call_begin(stream
, "pipe_screen", "get_name");
46 trace_dump_arg(stream
, ptr
, screen
);
48 result
= screen
->get_name(screen
);
50 trace_dump_ret(stream
, string
, result
);
52 trace_dump_call_end(stream
);
59 trace_screen_get_vendor(struct pipe_screen
*_screen
)
61 struct trace_screen
*tr_scr
= trace_screen(_screen
);
62 struct trace_stream
*stream
= tr_scr
->stream
;
63 struct pipe_screen
*screen
= tr_scr
->screen
;
66 trace_dump_call_begin(stream
, "pipe_screen", "get_vendor");
68 trace_dump_arg(stream
, ptr
, screen
);
70 result
= screen
->get_vendor(screen
);
72 trace_dump_ret(stream
, string
, result
);
74 trace_dump_call_end(stream
);
81 trace_screen_get_param(struct pipe_screen
*_screen
,
84 struct trace_screen
*tr_scr
= trace_screen(_screen
);
85 struct trace_stream
*stream
= tr_scr
->stream
;
86 struct pipe_screen
*screen
= tr_scr
->screen
;
89 trace_dump_call_begin(stream
, "pipe_screen", "get_param");
91 trace_dump_arg(stream
, ptr
, screen
);
92 trace_dump_arg(stream
, int, param
);
94 result
= screen
->get_param(screen
, param
);
96 trace_dump_ret(stream
, int, result
);
98 trace_dump_call_end(stream
);
105 trace_screen_get_paramf(struct pipe_screen
*_screen
,
108 struct trace_screen
*tr_scr
= trace_screen(_screen
);
109 struct trace_stream
*stream
= tr_scr
->stream
;
110 struct pipe_screen
*screen
= tr_scr
->screen
;
113 trace_dump_call_begin(stream
, "pipe_screen", "get_paramf");
115 trace_dump_arg(stream
, ptr
, screen
);
116 trace_dump_arg(stream
, int, param
);
118 result
= screen
->get_paramf(screen
, param
);
120 trace_dump_ret(stream
, float, result
);
122 trace_dump_call_end(stream
);
129 trace_screen_is_format_supported(struct pipe_screen
*_screen
,
130 enum pipe_format format
,
131 enum pipe_texture_target target
,
135 struct trace_screen
*tr_scr
= trace_screen(_screen
);
136 struct trace_stream
*stream
= tr_scr
->stream
;
137 struct pipe_screen
*screen
= tr_scr
->screen
;
140 trace_dump_call_begin(stream
, "pipe_screen", "is_format_supported");
142 trace_dump_arg(stream
, ptr
, screen
);
143 trace_dump_arg(stream
, format
, format
);
144 trace_dump_arg(stream
, int, target
);
145 trace_dump_arg(stream
, uint
, tex_usage
);
146 trace_dump_arg(stream
, uint
, geom_flags
);
148 result
= screen
->is_format_supported(screen
, format
, target
, tex_usage
, geom_flags
);
150 trace_dump_ret(stream
, bool, result
);
152 trace_dump_call_end(stream
);
158 static struct pipe_texture
*
159 trace_screen_texture_create(struct pipe_screen
*_screen
,
160 const struct pipe_texture
*templat
)
162 struct trace_screen
*tr_scr
= trace_screen(_screen
);
163 struct trace_stream
*stream
= tr_scr
->stream
;
164 struct pipe_screen
*screen
= tr_scr
->screen
;
165 struct pipe_texture
*result
;
167 trace_dump_call_begin(stream
, "pipe_screen", "texture_create");
169 trace_dump_arg(stream
, ptr
, screen
);
170 trace_dump_arg(stream
, template, templat
);
172 result
= screen
->texture_create(screen
, templat
);
174 trace_dump_ret(stream
, ptr
, result
);
176 trace_dump_call_end(stream
);
182 static struct pipe_texture
*
183 trace_screen_texture_blanket(struct pipe_screen
*_screen
,
184 const struct pipe_texture
*templat
,
185 const unsigned *ppitch
,
186 struct pipe_buffer
*buffer
)
188 struct trace_screen
*tr_scr
= trace_screen(_screen
);
189 struct trace_stream
*stream
= tr_scr
->stream
;
190 struct pipe_screen
*screen
= tr_scr
->screen
;
191 unsigned pitch
= *ppitch
;
192 struct pipe_texture
*result
;
194 trace_dump_call_begin(stream
, "pipe_screen", "texture_blanket");
196 trace_dump_arg(stream
, ptr
, screen
);
197 trace_dump_arg(stream
, template, templat
);
198 trace_dump_arg(stream
, uint
, pitch
);
199 trace_dump_arg(stream
, ptr
, buffer
);
201 result
= screen
->texture_blanket(screen
, templat
, ppitch
, buffer
);
203 trace_dump_ret(stream
, ptr
, result
);
205 trace_dump_call_end(stream
);
212 trace_screen_texture_release(struct pipe_screen
*_screen
,
213 struct pipe_texture
**ptexture
)
215 struct trace_screen
*tr_scr
= trace_screen(_screen
);
216 struct trace_stream
*stream
= tr_scr
->stream
;
217 struct pipe_screen
*screen
= tr_scr
->screen
;
218 struct pipe_texture
*texture
= *ptexture
;
220 trace_dump_call_begin(stream
, "pipe_screen", "texture_release");
222 trace_dump_arg(stream
, ptr
, screen
);
223 trace_dump_arg(stream
, ptr
, texture
);
225 screen
->texture_release(screen
, ptexture
);
227 trace_dump_call_end(stream
);
230 static struct pipe_surface
*
231 trace_screen_get_tex_surface(struct pipe_screen
*_screen
,
232 struct pipe_texture
*texture
,
233 unsigned face
, unsigned level
,
237 struct trace_screen
*tr_scr
= trace_screen(_screen
);
238 struct trace_stream
*stream
= tr_scr
->stream
;
239 struct pipe_screen
*screen
= tr_scr
->screen
;
240 struct pipe_surface
*result
;
242 trace_dump_call_begin(stream
, "pipe_screen", "get_tex_surface");
244 trace_dump_arg(stream
, ptr
, screen
);
245 trace_dump_arg(stream
, ptr
, texture
);
246 trace_dump_arg(stream
, uint
, face
);
247 trace_dump_arg(stream
, uint
, level
);
248 trace_dump_arg(stream
, uint
, zslice
);
249 trace_dump_arg(stream
, uint
, usage
);
251 result
= screen
->get_tex_surface(screen
, texture
, face
, level
, zslice
, usage
);
253 trace_dump_ret(stream
, ptr
, result
);
255 trace_dump_call_end(stream
);
262 trace_screen_tex_surface_release(struct pipe_screen
*_screen
,
263 struct pipe_surface
**psurface
)
265 struct trace_screen
*tr_scr
= trace_screen(_screen
);
266 struct trace_stream
*stream
= tr_scr
->stream
;
267 struct pipe_screen
*screen
= tr_scr
->screen
;
268 struct pipe_surface
*surface
= *psurface
;
270 trace_dump_call_begin(stream
, "pipe_screen", "tex_surface_release");
272 trace_dump_arg(stream
, ptr
, screen
);
273 trace_dump_arg(stream
, ptr
, surface
);
275 screen
->tex_surface_release(screen
, psurface
);
277 trace_dump_call_end(stream
);
282 trace_screen_surface_map(struct pipe_screen
*_screen
,
283 struct pipe_surface
*surface
,
286 struct trace_screen
*tr_scr
= trace_screen(_screen
);
287 struct trace_stream
*stream
= tr_scr
->stream
;
288 struct pipe_screen
*screen
= tr_scr
->screen
;
289 struct pipe_surface
*result
;
291 trace_dump_call_begin(stream
, "pipe_screen", "surface_map");
293 trace_dump_arg(stream
, ptr
, screen
);
294 trace_dump_arg(stream
, ptr
, surface
);
295 trace_dump_arg(stream
, uint
, flags
);
297 result
= screen
->surface_map(screen
, surface
, flags
);
299 trace_dump_ret(stream
, ptr
, result
);
301 trace_dump_call_end(stream
);
308 trace_screen_surface_unmap(struct pipe_screen
*_screen
,
309 struct pipe_surface
*surface
)
311 struct trace_screen
*tr_scr
= trace_screen(_screen
);
312 struct trace_stream
*stream
= tr_scr
->stream
;
313 struct pipe_screen
*screen
= tr_scr
->screen
;
315 trace_dump_call_begin(stream
, "pipe_screen", "surface_unmap");
317 trace_dump_arg(stream
, ptr
, screen
);
318 trace_dump_arg(stream
, ptr
, surface
);
320 screen
->surface_unmap(screen
, surface
);
322 trace_dump_call_end(stream
);
327 trace_screen_destroy(struct pipe_screen
*_screen
)
329 struct trace_screen
*tr_scr
= trace_screen(_screen
);
330 struct trace_stream
*stream
= tr_scr
->stream
;
331 struct pipe_screen
*screen
= tr_scr
->screen
;
333 trace_dump_call_begin(stream
, "pipe_screen", "destroy");
335 trace_dump_arg(stream
, ptr
, screen
);
337 screen
->destroy(screen
);
339 trace_dump_call_end(stream
);
341 trace_dump_trace_end(stream
);
343 trace_stream_close(tr_scr
->stream
);
350 trace_screen_create(struct pipe_screen
*screen
)
352 struct trace_screen
*tr_scr
;
354 if(!debug_get_bool_option("GALLIUM_TRACE", FALSE
))
357 tr_scr
= CALLOC_STRUCT(trace_screen
);
361 tr_scr
->base
.winsys
= screen
->winsys
;
362 tr_scr
->base
.destroy
= trace_screen_destroy
;
363 tr_scr
->base
.get_name
= trace_screen_get_name
;
364 tr_scr
->base
.get_vendor
= trace_screen_get_vendor
;
365 tr_scr
->base
.get_param
= trace_screen_get_param
;
366 tr_scr
->base
.get_paramf
= trace_screen_get_paramf
;
367 tr_scr
->base
.is_format_supported
= trace_screen_is_format_supported
;
368 tr_scr
->base
.texture_create
= trace_screen_texture_create
;
369 tr_scr
->base
.texture_blanket
= trace_screen_texture_blanket
;
370 tr_scr
->base
.texture_release
= trace_screen_texture_release
;
371 tr_scr
->base
.get_tex_surface
= trace_screen_get_tex_surface
;
372 tr_scr
->base
.tex_surface_release
= trace_screen_tex_surface_release
;
373 tr_scr
->base
.surface_map
= trace_screen_surface_map
;
374 tr_scr
->base
.surface_unmap
= trace_screen_surface_unmap
;
376 tr_scr
->screen
= screen
;
378 tr_scr
->stream
= trace_stream_create("gallium", "trace");
382 trace_dump_trace_begin(tr_scr
->stream
, 0);
384 return &tr_scr
->base
;