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"
32 #include "tr_winsys.h"
33 #include "tr_texture.h"
34 #include "tr_screen.h"
38 trace_screen_get_name(struct pipe_screen
*_screen
)
40 struct trace_screen
*tr_scr
= trace_screen(_screen
);
41 struct pipe_screen
*screen
= tr_scr
->screen
;
44 trace_dump_call_begin("pipe_screen", "get_name");
46 trace_dump_arg(ptr
, screen
);
48 result
= screen
->get_name(screen
);
50 trace_dump_ret(string
, result
);
52 trace_dump_call_end();
59 trace_screen_get_vendor(struct pipe_screen
*_screen
)
61 struct trace_screen
*tr_scr
= trace_screen(_screen
);
62 struct pipe_screen
*screen
= tr_scr
->screen
;
65 trace_dump_call_begin("pipe_screen", "get_vendor");
67 trace_dump_arg(ptr
, screen
);
69 result
= screen
->get_vendor(screen
);
71 trace_dump_ret(string
, result
);
73 trace_dump_call_end();
80 trace_screen_get_param(struct pipe_screen
*_screen
,
83 struct trace_screen
*tr_scr
= trace_screen(_screen
);
84 struct pipe_screen
*screen
= tr_scr
->screen
;
87 trace_dump_call_begin("pipe_screen", "get_param");
89 trace_dump_arg(ptr
, screen
);
90 trace_dump_arg(int, param
);
92 result
= screen
->get_param(screen
, param
);
94 trace_dump_ret(int, result
);
96 trace_dump_call_end();
103 trace_screen_get_paramf(struct pipe_screen
*_screen
,
106 struct trace_screen
*tr_scr
= trace_screen(_screen
);
107 struct pipe_screen
*screen
= tr_scr
->screen
;
110 trace_dump_call_begin("pipe_screen", "get_paramf");
112 trace_dump_arg(ptr
, screen
);
113 trace_dump_arg(int, param
);
115 result
= screen
->get_paramf(screen
, param
);
117 trace_dump_ret(float, result
);
119 trace_dump_call_end();
126 trace_screen_is_format_supported(struct pipe_screen
*_screen
,
127 enum pipe_format format
,
128 enum pipe_texture_target target
,
132 struct trace_screen
*tr_scr
= trace_screen(_screen
);
133 struct pipe_screen
*screen
= tr_scr
->screen
;
136 trace_dump_call_begin("pipe_screen", "is_format_supported");
138 trace_dump_arg(ptr
, screen
);
139 trace_dump_arg(format
, format
);
140 trace_dump_arg(int, target
);
141 trace_dump_arg(uint
, tex_usage
);
142 trace_dump_arg(uint
, geom_flags
);
144 result
= screen
->is_format_supported(screen
, format
, target
, tex_usage
, geom_flags
);
146 trace_dump_ret(bool, result
);
148 trace_dump_call_end();
154 static struct pipe_texture
*
155 trace_screen_texture_create(struct pipe_screen
*_screen
,
156 const struct pipe_texture
*templat
)
158 struct trace_screen
*tr_scr
= trace_screen(_screen
);
159 struct pipe_screen
*screen
= tr_scr
->screen
;
160 struct pipe_texture
*result
;
162 trace_dump_call_begin("pipe_screen", "texture_create");
164 trace_dump_arg(ptr
, screen
);
165 trace_dump_arg(template, templat
);
167 result
= screen
->texture_create(screen
, templat
);
169 trace_dump_ret(ptr
, result
);
171 trace_dump_call_end();
173 result
= trace_texture_create(tr_scr
, result
);
179 static struct pipe_texture
*
180 trace_screen_texture_blanket(struct pipe_screen
*_screen
,
181 const struct pipe_texture
*templat
,
182 const unsigned *ppitch
,
183 struct pipe_buffer
*buffer
)
185 struct trace_screen
*tr_scr
= trace_screen(_screen
);
186 struct pipe_screen
*screen
= tr_scr
->screen
;
187 unsigned pitch
= *ppitch
;
188 struct pipe_texture
*result
;
190 trace_dump_call_begin("pipe_screen", "texture_blanket");
192 trace_dump_arg(ptr
, screen
);
193 trace_dump_arg(template, templat
);
194 trace_dump_arg(uint
, pitch
);
195 trace_dump_arg(ptr
, buffer
);
197 result
= screen
->texture_blanket(screen
, templat
, ppitch
, buffer
);
199 trace_dump_ret(ptr
, result
);
201 trace_dump_call_end();
203 result
= trace_texture_create(tr_scr
, result
);
210 trace_screen_texture_release(struct pipe_screen
*_screen
,
211 struct pipe_texture
**ptexture
)
213 struct trace_screen
*tr_scr
= trace_screen(_screen
);
214 struct pipe_screen
*screen
= tr_scr
->screen
;
215 struct trace_texture
*tr_tex
;
216 struct pipe_texture
*texture
;
220 tr_tex
= trace_texture(tr_scr
, *ptexture
);
221 texture
= tr_tex
->texture
;
222 assert(texture
->screen
== screen
);
227 trace_dump_call_begin("pipe_screen", "texture_release");
229 trace_dump_arg(ptr
, screen
);
230 trace_dump_arg(ptr
, texture
);
233 if (!--(*ptexture
)->refcount
)
234 trace_texture_destroy(tr_scr
, *ptexture
);
239 trace_dump_call_end();
243 static struct pipe_surface
*
244 trace_screen_get_tex_surface(struct pipe_screen
*_screen
,
245 struct pipe_texture
*texture
,
246 unsigned face
, unsigned level
,
250 struct trace_screen
*tr_scr
= trace_screen(_screen
);
251 struct pipe_screen
*screen
= tr_scr
->screen
;
252 struct trace_texture
*tr_tex
;
253 struct pipe_surface
*result
;
256 tr_tex
= trace_texture(tr_scr
, texture
);
257 texture
= tr_tex
->texture
;
258 assert(texture
->screen
== screen
);
260 trace_dump_call_begin("pipe_screen", "get_tex_surface");
262 trace_dump_arg(ptr
, screen
);
263 trace_dump_arg(ptr
, texture
);
264 trace_dump_arg(uint
, face
);
265 trace_dump_arg(uint
, level
);
266 trace_dump_arg(uint
, zslice
);
267 trace_dump_arg(uint
, usage
);
269 result
= screen
->get_tex_surface(screen
, texture
, face
, level
, zslice
, usage
);
271 trace_dump_ret(ptr
, result
);
273 trace_dump_call_end();
275 result
= trace_surface_create(tr_tex
, result
);
282 trace_screen_tex_surface_release(struct pipe_screen
*_screen
,
283 struct pipe_surface
**psurface
)
285 struct trace_screen
*tr_scr
= trace_screen(_screen
);
286 struct pipe_screen
*screen
= tr_scr
->screen
;
287 struct trace_texture
*tr_tex
;
288 struct trace_surface
*tr_surf
;
289 struct pipe_surface
*surface
;
293 tr_tex
= trace_texture(tr_scr
, (*psurface
)->texture
);
294 tr_surf
= trace_surface(tr_tex
, *psurface
);
295 surface
= tr_surf
->surface
;
300 trace_dump_call_begin("pipe_screen", "tex_surface_release");
302 trace_dump_arg(ptr
, screen
);
303 trace_dump_arg(ptr
, surface
);
306 if (!--(*psurface
)->refcount
)
307 trace_surface_destroy(tr_tex
, *psurface
);
312 trace_dump_call_end();
317 trace_screen_surface_map(struct pipe_screen
*_screen
,
318 struct pipe_surface
*surface
,
321 struct trace_screen
*tr_scr
= trace_screen(_screen
);
322 struct pipe_screen
*screen
= tr_scr
->screen
;
323 struct trace_texture
*tr_tex
;
324 struct trace_surface
*tr_surf
;
327 tr_tex
= trace_texture(tr_scr
, surface
->texture
);
328 tr_surf
= trace_surface(tr_tex
, surface
);
329 surface
= tr_surf
->surface
;
331 map
= screen
->surface_map(screen
, surface
, flags
);
333 if(flags
& PIPE_BUFFER_USAGE_CPU_WRITE
) {
334 assert(!tr_surf
->map
);
344 trace_screen_surface_unmap(struct pipe_screen
*_screen
,
345 struct pipe_surface
*surface
)
347 struct trace_screen
*tr_scr
= trace_screen(_screen
);
348 struct pipe_screen
*screen
= tr_scr
->screen
;
349 struct trace_texture
*tr_tex
;
350 struct trace_surface
*tr_surf
;
352 tr_tex
= trace_texture(tr_scr
, surface
->texture
);
353 tr_surf
= trace_surface(tr_tex
, surface
);
354 surface
= tr_surf
->surface
;
357 size_t size
= surface
->nblocksy
* surface
->stride
;
359 trace_dump_call_begin("pipe_winsys", "surface_write");
361 trace_dump_arg(ptr
, screen
);
363 trace_dump_arg(ptr
, surface
);
365 trace_dump_arg_begin("data");
366 trace_dump_bytes(tr_surf
->map
, size
);
367 trace_dump_arg_end();
369 trace_dump_arg_begin("stride");
370 trace_dump_uint(surface
->stride
);
371 trace_dump_arg_end();
373 trace_dump_arg_begin("size");
374 trace_dump_uint(size
);
375 trace_dump_arg_end();
377 trace_dump_call_end();
382 screen
->surface_unmap(screen
, surface
);
387 trace_screen_destroy(struct pipe_screen
*_screen
)
389 struct trace_screen
*tr_scr
= trace_screen(_screen
);
390 struct pipe_screen
*screen
= tr_scr
->screen
;
392 trace_dump_call_begin("pipe_screen", "destroy");
394 trace_dump_arg(ptr
, screen
);
396 screen
->destroy(screen
);
398 trace_dump_call_end();
400 trace_dump_trace_end();
407 trace_screen_create(struct pipe_screen
*screen
)
409 struct trace_screen
*tr_scr
;
410 struct pipe_winsys
*winsys
;
415 if(!trace_dump_trace_begin())
418 tr_scr
= CALLOC_STRUCT(trace_screen
);
422 winsys
= trace_winsys_create(screen
->winsys
);
426 tr_scr
->base
.winsys
= winsys
;
427 tr_scr
->base
.destroy
= trace_screen_destroy
;
428 tr_scr
->base
.get_name
= trace_screen_get_name
;
429 tr_scr
->base
.get_vendor
= trace_screen_get_vendor
;
430 tr_scr
->base
.get_param
= trace_screen_get_param
;
431 tr_scr
->base
.get_paramf
= trace_screen_get_paramf
;
432 tr_scr
->base
.is_format_supported
= trace_screen_is_format_supported
;
433 tr_scr
->base
.texture_create
= trace_screen_texture_create
;
434 tr_scr
->base
.texture_blanket
= trace_screen_texture_blanket
;
435 tr_scr
->base
.texture_release
= trace_screen_texture_release
;
436 tr_scr
->base
.get_tex_surface
= trace_screen_get_tex_surface
;
437 tr_scr
->base
.tex_surface_release
= trace_screen_tex_surface_release
;
438 tr_scr
->base
.surface_map
= trace_screen_surface_map
;
439 tr_scr
->base
.surface_unmap
= trace_screen_surface_unmap
;
441 tr_scr
->screen
= screen
;
443 trace_dump_call_begin("", "pipe_screen_create");
444 trace_dump_arg_begin("winsys");
445 trace_dump_ptr(screen
->winsys
);
446 trace_dump_arg_end();
447 trace_dump_ret(ptr
, screen
);
448 trace_dump_call_end();
450 return &tr_scr
->base
;
455 trace_dump_trace_end();
461 struct trace_screen
*
462 trace_screen(struct pipe_screen
*screen
)
465 assert(screen
->destroy
== trace_screen_destroy
);
466 return (struct trace_screen
*)screen
;