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_memory.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
);
228 if (!--(*ptexture
)->refcount
) {
229 trace_dump_call_begin("pipe_screen", "texture_destroy");
231 trace_dump_arg(ptr
, screen
);
232 trace_dump_arg(ptr
, texture
);
234 trace_texture_destroy(tr_scr
, *ptexture
);
236 trace_dump_call_end();
244 static struct pipe_surface
*
245 trace_screen_get_tex_surface(struct pipe_screen
*_screen
,
246 struct pipe_texture
*texture
,
247 unsigned face
, unsigned level
,
251 struct trace_screen
*tr_scr
= trace_screen(_screen
);
252 struct pipe_screen
*screen
= tr_scr
->screen
;
253 struct trace_texture
*tr_tex
;
254 struct pipe_surface
*result
;
257 tr_tex
= trace_texture(tr_scr
, texture
);
258 texture
= tr_tex
->texture
;
259 assert(texture
->screen
== screen
);
261 trace_dump_call_begin("pipe_screen", "get_tex_surface");
263 trace_dump_arg(ptr
, screen
);
264 trace_dump_arg(ptr
, texture
);
265 trace_dump_arg(uint
, face
);
266 trace_dump_arg(uint
, level
);
267 trace_dump_arg(uint
, zslice
);
268 trace_dump_arg(uint
, usage
);
270 result
= screen
->get_tex_surface(screen
, texture
, face
, level
, zslice
, usage
);
272 trace_dump_ret(ptr
, result
);
274 trace_dump_call_end();
276 result
= trace_surface_create(tr_tex
, result
);
283 trace_screen_tex_surface_release(struct pipe_screen
*_screen
,
284 struct pipe_surface
**psurface
)
286 struct trace_screen
*tr_scr
= trace_screen(_screen
);
287 struct pipe_screen
*screen
= tr_scr
->screen
;
288 struct trace_texture
*tr_tex
;
289 struct trace_surface
*tr_surf
;
290 struct pipe_surface
*surface
;
294 tr_tex
= trace_texture(tr_scr
, (*psurface
)->texture
);
295 tr_surf
= trace_surface(tr_tex
, *psurface
);
296 surface
= tr_surf
->surface
;
302 if (!--(*psurface
)->refcount
) {
303 trace_dump_call_begin("pipe_screen", "tex_surface_destroy");
305 trace_dump_arg(ptr
, screen
);
306 trace_dump_arg(ptr
, surface
);
308 trace_surface_destroy(tr_tex
, *psurface
);
310 trace_dump_call_end();
318 static struct pipe_transfer
*
319 trace_screen_get_tex_transfer(struct pipe_screen
*_screen
,
320 struct pipe_texture
*texture
,
321 unsigned face
, unsigned level
,
323 enum pipe_transfer_usage usage
,
324 unsigned x
, unsigned y
, unsigned w
, unsigned h
)
326 struct trace_screen
*tr_scr
= trace_screen(_screen
);
327 struct pipe_screen
*screen
= tr_scr
->screen
;
328 struct trace_texture
*tr_tex
;
329 struct pipe_transfer
*result
;
332 tr_tex
= trace_texture(tr_scr
, texture
);
333 texture
= tr_tex
->texture
;
334 assert(texture
->screen
== screen
);
336 trace_dump_call_begin("pipe_screen", "get_tex_transfer");
338 trace_dump_arg(ptr
, screen
);
339 trace_dump_arg(ptr
, texture
);
340 trace_dump_arg(uint
, face
);
341 trace_dump_arg(uint
, level
);
342 trace_dump_arg(uint
, zslice
);
343 trace_dump_arg(uint
, usage
);
345 result
= screen
->get_tex_transfer(screen
, texture
, face
, level
, zslice
, usage
,
348 trace_dump_ret(ptr
, result
);
350 trace_dump_call_end();
352 result
= trace_transfer_create(tr_tex
, result
);
359 trace_screen_tex_transfer_release(struct pipe_screen
*_screen
,
360 struct pipe_transfer
**ptransfer
)
362 struct trace_screen
*tr_scr
= trace_screen(_screen
);
363 struct pipe_screen
*screen
= tr_scr
->screen
;
364 struct trace_texture
*tr_tex
;
365 struct trace_transfer
*tr_trans
;
366 struct pipe_transfer
*transfer
;
370 tr_tex
= trace_texture(tr_scr
, (*ptransfer
)->texture
);
371 tr_trans
= trace_transfer(tr_tex
, *ptransfer
);
372 transfer
= tr_trans
->transfer
;
378 if (!--(*ptransfer
)->refcount
) {
379 trace_dump_call_begin("pipe_screen", "tex_transfer_destroy");
381 trace_dump_arg(ptr
, screen
);
382 trace_dump_arg(ptr
, transfer
);
384 trace_transfer_destroy(tr_tex
, *ptransfer
);
386 trace_dump_call_end();
395 trace_screen_transfer_map(struct pipe_screen
*_screen
,
396 struct pipe_transfer
*transfer
)
398 struct trace_screen
*tr_scr
= trace_screen(_screen
);
399 struct pipe_screen
*screen
= tr_scr
->screen
;
400 struct trace_texture
*tr_tex
;
401 struct trace_transfer
*tr_trans
;
404 tr_tex
= trace_texture(tr_scr
, transfer
->texture
);
405 tr_trans
= trace_transfer(tr_tex
, transfer
);
406 transfer
= tr_trans
->transfer
;
408 map
= screen
->transfer_map(screen
, transfer
);
410 if(transfer
->usage
!= PIPE_TRANSFER_READ
) {
411 assert(!tr_trans
->map
);
421 trace_screen_transfer_unmap(struct pipe_screen
*_screen
,
422 struct pipe_transfer
*transfer
)
424 struct trace_screen
*tr_scr
= trace_screen(_screen
);
425 struct pipe_screen
*screen
= tr_scr
->screen
;
426 struct trace_texture
*tr_tex
;
427 struct trace_transfer
*tr_trans
;
429 tr_tex
= trace_texture(tr_scr
, transfer
->texture
);
430 tr_trans
= trace_transfer(tr_tex
, transfer
);
431 transfer
= tr_trans
->transfer
;
434 size_t size
= transfer
->nblocksy
* transfer
->stride
;
436 trace_dump_call_begin("pipe_winsys", "transfer_write");
438 trace_dump_arg(ptr
, screen
);
440 trace_dump_arg(ptr
, transfer
);
442 trace_dump_arg_begin("data");
443 trace_dump_bytes(tr_trans
->map
, size
);
444 trace_dump_arg_end();
446 trace_dump_arg_begin("stride");
447 trace_dump_uint(transfer
->stride
);
448 trace_dump_arg_end();
450 trace_dump_arg_begin("size");
451 trace_dump_uint(size
);
452 trace_dump_arg_end();
454 trace_dump_call_end();
456 tr_trans
->map
= NULL
;
459 screen
->transfer_unmap(screen
, transfer
);
464 trace_screen_destroy(struct pipe_screen
*_screen
)
466 struct trace_screen
*tr_scr
= trace_screen(_screen
);
467 struct pipe_screen
*screen
= tr_scr
->screen
;
469 trace_dump_call_begin("pipe_screen", "destroy");
471 trace_dump_arg(ptr
, screen
);
473 screen
->destroy(screen
);
475 trace_dump_call_end();
477 trace_dump_trace_end();
484 trace_screen_create(struct pipe_screen
*screen
)
486 struct trace_screen
*tr_scr
;
487 struct pipe_winsys
*winsys
;
492 if(!trace_dump_trace_begin())
495 tr_scr
= CALLOC_STRUCT(trace_screen
);
499 winsys
= trace_winsys_create(screen
->winsys
);
503 tr_scr
->base
.winsys
= winsys
;
504 tr_scr
->base
.destroy
= trace_screen_destroy
;
505 tr_scr
->base
.get_name
= trace_screen_get_name
;
506 tr_scr
->base
.get_vendor
= trace_screen_get_vendor
;
507 tr_scr
->base
.get_param
= trace_screen_get_param
;
508 tr_scr
->base
.get_paramf
= trace_screen_get_paramf
;
509 tr_scr
->base
.is_format_supported
= trace_screen_is_format_supported
;
510 tr_scr
->base
.texture_create
= trace_screen_texture_create
;
511 tr_scr
->base
.texture_blanket
= trace_screen_texture_blanket
;
512 tr_scr
->base
.texture_release
= trace_screen_texture_release
;
513 tr_scr
->base
.get_tex_surface
= trace_screen_get_tex_surface
;
514 tr_scr
->base
.tex_surface_release
= trace_screen_tex_surface_release
;
515 tr_scr
->base
.get_tex_transfer
= trace_screen_get_tex_transfer
;
516 tr_scr
->base
.tex_transfer_release
= trace_screen_tex_transfer_release
;
517 tr_scr
->base
.transfer_map
= trace_screen_transfer_map
;
518 tr_scr
->base
.transfer_unmap
= trace_screen_transfer_unmap
;
520 tr_scr
->screen
= screen
;
522 trace_dump_call_begin("", "pipe_screen_create");
523 trace_dump_arg_begin("winsys");
524 trace_dump_ptr(screen
->winsys
);
525 trace_dump_arg_end();
526 trace_dump_ret(ptr
, screen
);
527 trace_dump_call_end();
529 return &tr_scr
->base
;
534 trace_dump_trace_end();
540 struct trace_screen
*
541 trace_screen(struct pipe_screen
*screen
)
544 assert(screen
->destroy
== trace_screen_destroy
);
545 return (struct trace_screen
*)screen
;