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();
319 trace_screen_surface_map(struct pipe_screen
*_screen
,
320 struct pipe_surface
*surface
,
323 struct trace_screen
*tr_scr
= trace_screen(_screen
);
324 struct pipe_screen
*screen
= tr_scr
->screen
;
325 struct trace_texture
*tr_tex
;
326 struct trace_surface
*tr_surf
;
329 tr_tex
= trace_texture(tr_scr
, surface
->texture
);
330 tr_surf
= trace_surface(tr_tex
, surface
);
331 surface
= tr_surf
->surface
;
333 map
= screen
->surface_map(screen
, surface
, flags
);
335 if(flags
& PIPE_BUFFER_USAGE_CPU_WRITE
) {
336 assert(!tr_surf
->map
);
346 trace_screen_surface_unmap(struct pipe_screen
*_screen
,
347 struct pipe_surface
*surface
)
349 struct trace_screen
*tr_scr
= trace_screen(_screen
);
350 struct pipe_screen
*screen
= tr_scr
->screen
;
351 struct trace_texture
*tr_tex
;
352 struct trace_surface
*tr_surf
;
354 tr_tex
= trace_texture(tr_scr
, surface
->texture
);
355 tr_surf
= trace_surface(tr_tex
, surface
);
356 surface
= tr_surf
->surface
;
359 size_t size
= surface
->nblocksy
* surface
->stride
;
361 trace_dump_call_begin("pipe_winsys", "surface_write");
363 trace_dump_arg(ptr
, screen
);
365 trace_dump_arg(ptr
, surface
);
367 trace_dump_arg_begin("data");
368 trace_dump_bytes(tr_surf
->map
, size
);
369 trace_dump_arg_end();
371 trace_dump_arg_begin("stride");
372 trace_dump_uint(surface
->stride
);
373 trace_dump_arg_end();
375 trace_dump_arg_begin("size");
376 trace_dump_uint(size
);
377 trace_dump_arg_end();
379 trace_dump_call_end();
384 screen
->surface_unmap(screen
, surface
);
389 trace_screen_destroy(struct pipe_screen
*_screen
)
391 struct trace_screen
*tr_scr
= trace_screen(_screen
);
392 struct pipe_screen
*screen
= tr_scr
->screen
;
394 trace_dump_call_begin("pipe_screen", "destroy");
396 trace_dump_arg(ptr
, screen
);
398 screen
->destroy(screen
);
400 trace_dump_call_end();
402 trace_dump_trace_end();
409 trace_screen_create(struct pipe_screen
*screen
)
411 struct trace_screen
*tr_scr
;
412 struct pipe_winsys
*winsys
;
417 if(!trace_dump_trace_begin())
420 tr_scr
= CALLOC_STRUCT(trace_screen
);
424 winsys
= trace_winsys_create(screen
->winsys
);
428 tr_scr
->base
.winsys
= winsys
;
429 tr_scr
->base
.destroy
= trace_screen_destroy
;
430 tr_scr
->base
.get_name
= trace_screen_get_name
;
431 tr_scr
->base
.get_vendor
= trace_screen_get_vendor
;
432 tr_scr
->base
.get_param
= trace_screen_get_param
;
433 tr_scr
->base
.get_paramf
= trace_screen_get_paramf
;
434 tr_scr
->base
.is_format_supported
= trace_screen_is_format_supported
;
435 tr_scr
->base
.texture_create
= trace_screen_texture_create
;
436 tr_scr
->base
.texture_blanket
= trace_screen_texture_blanket
;
437 tr_scr
->base
.texture_release
= trace_screen_texture_release
;
438 tr_scr
->base
.get_tex_surface
= trace_screen_get_tex_surface
;
439 tr_scr
->base
.tex_surface_release
= trace_screen_tex_surface_release
;
440 tr_scr
->base
.surface_map
= trace_screen_surface_map
;
441 tr_scr
->base
.surface_unmap
= trace_screen_surface_unmap
;
443 tr_scr
->screen
= screen
;
445 trace_dump_call_begin("", "pipe_screen_create");
446 trace_dump_arg_begin("winsys");
447 trace_dump_ptr(screen
->winsys
);
448 trace_dump_arg_end();
449 trace_dump_ret(ptr
, screen
);
450 trace_dump_call_end();
452 return &tr_scr
->base
;
457 trace_dump_trace_end();
463 struct trace_screen
*
464 trace_screen(struct pipe_screen
*screen
)
467 assert(screen
->destroy
== trace_screen_destroy
);
468 return (struct trace_screen
*)screen
;