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_destroy(struct pipe_texture
*texture
)
212 struct pipe_screen
*screen
= texture
->screen
;
214 trace_dump_call_begin("pipe_screen", "texture_destroy");
216 trace_dump_arg(ptr
, screen
);
217 trace_dump_arg(ptr
, texture
);
219 trace_texture_destroy(trace_screen(screen
), texture
);
221 trace_dump_call_end();
225 static struct pipe_surface
*
226 trace_screen_get_tex_surface(struct pipe_screen
*_screen
,
227 struct pipe_texture
*texture
,
228 unsigned face
, unsigned level
,
232 struct trace_screen
*tr_scr
= trace_screen(_screen
);
233 struct pipe_screen
*screen
= tr_scr
->screen
;
234 struct trace_texture
*tr_tex
;
235 struct pipe_surface
*result
;
238 tr_tex
= trace_texture(tr_scr
, texture
);
239 texture
= tr_tex
->texture
;
240 assert(texture
->screen
== screen
);
242 trace_dump_call_begin("pipe_screen", "get_tex_surface");
244 trace_dump_arg(ptr
, screen
);
245 trace_dump_arg(ptr
, texture
);
246 trace_dump_arg(uint
, face
);
247 trace_dump_arg(uint
, level
);
248 trace_dump_arg(uint
, zslice
);
249 trace_dump_arg(uint
, usage
);
251 result
= screen
->get_tex_surface(screen
, texture
, face
, level
, zslice
, usage
);
253 trace_dump_ret(ptr
, result
);
255 trace_dump_call_end();
257 result
= trace_surface_create(tr_tex
, result
);
264 trace_screen_tex_surface_destroy(struct pipe_surface
*surface
)
266 struct pipe_screen
*screen
= surface
->texture
->screen
;
268 trace_dump_call_begin("pipe_screen", "tex_surface_destroy");
270 trace_dump_arg(ptr
, screen
);
271 trace_dump_arg(ptr
, surface
);
273 trace_surface_destroy(trace_texture(trace_screen(screen
), surface
->texture
),
276 trace_dump_call_end();
280 static struct pipe_transfer
*
281 trace_screen_get_tex_transfer(struct pipe_screen
*_screen
,
282 struct pipe_texture
*texture
,
283 unsigned face
, unsigned level
,
285 enum pipe_transfer_usage usage
,
286 unsigned x
, unsigned y
, unsigned w
, unsigned h
)
288 struct trace_screen
*tr_scr
= trace_screen(_screen
);
289 struct pipe_screen
*screen
= tr_scr
->screen
;
290 struct trace_texture
*tr_tex
;
291 struct pipe_transfer
*result
;
294 tr_tex
= trace_texture(tr_scr
, texture
);
295 texture
= tr_tex
->texture
;
296 assert(texture
->screen
== screen
);
298 trace_dump_call_begin("pipe_screen", "get_tex_transfer");
300 trace_dump_arg(ptr
, screen
);
301 trace_dump_arg(ptr
, texture
);
302 trace_dump_arg(uint
, face
);
303 trace_dump_arg(uint
, level
);
304 trace_dump_arg(uint
, zslice
);
305 trace_dump_arg(uint
, usage
);
307 result
= screen
->get_tex_transfer(screen
, texture
, face
, level
, zslice
, usage
,
310 trace_dump_ret(ptr
, result
);
312 trace_dump_call_end();
314 result
= trace_transfer_create(tr_tex
, result
);
321 trace_screen_tex_transfer_destroy(struct pipe_transfer
*transfer
)
323 struct pipe_texture
*texture
= transfer
->texture
;
324 struct pipe_screen
*screen
= texture
->screen
;
326 trace_dump_call_begin("pipe_screen", "tex_transfer_destroy");
328 trace_dump_arg(ptr
, screen
);
329 trace_dump_arg(ptr
, transfer
);
331 trace_transfer_destroy(trace_texture(trace_screen(screen
), texture
),
334 trace_dump_call_end();
339 trace_screen_transfer_map(struct pipe_screen
*_screen
,
340 struct pipe_transfer
*transfer
)
342 struct trace_screen
*tr_scr
= trace_screen(_screen
);
343 struct pipe_screen
*screen
= tr_scr
->screen
;
344 struct trace_texture
*tr_tex
;
345 struct trace_transfer
*tr_trans
;
348 tr_tex
= trace_texture(tr_scr
, transfer
->texture
);
349 tr_trans
= trace_transfer(tr_tex
, transfer
);
350 transfer
= tr_trans
->transfer
;
352 map
= screen
->transfer_map(screen
, transfer
);
354 if(transfer
->usage
!= PIPE_TRANSFER_READ
) {
355 assert(!tr_trans
->map
);
365 trace_screen_transfer_unmap(struct pipe_screen
*_screen
,
366 struct pipe_transfer
*transfer
)
368 struct trace_screen
*tr_scr
= trace_screen(_screen
);
369 struct pipe_screen
*screen
= tr_scr
->screen
;
370 struct trace_texture
*tr_tex
;
371 struct trace_transfer
*tr_trans
;
373 tr_tex
= trace_texture(tr_scr
, transfer
->texture
);
374 tr_trans
= trace_transfer(tr_tex
, transfer
);
375 transfer
= tr_trans
->transfer
;
378 size_t size
= transfer
->nblocksy
* transfer
->stride
;
380 trace_dump_call_begin("pipe_winsys", "transfer_write");
382 trace_dump_arg(ptr
, screen
);
384 trace_dump_arg(ptr
, transfer
);
386 trace_dump_arg_begin("data");
387 trace_dump_bytes(tr_trans
->map
, size
);
388 trace_dump_arg_end();
390 trace_dump_arg_begin("stride");
391 trace_dump_uint(transfer
->stride
);
392 trace_dump_arg_end();
394 trace_dump_arg_begin("size");
395 trace_dump_uint(size
);
396 trace_dump_arg_end();
398 trace_dump_call_end();
400 tr_trans
->map
= NULL
;
403 screen
->transfer_unmap(screen
, transfer
);
408 trace_screen_destroy(struct pipe_screen
*_screen
)
410 struct trace_screen
*tr_scr
= trace_screen(_screen
);
411 struct pipe_screen
*screen
= tr_scr
->screen
;
413 trace_dump_call_begin("pipe_screen", "destroy");
415 trace_dump_arg(ptr
, screen
);
417 screen
->destroy(screen
);
419 trace_dump_call_end();
421 trace_dump_trace_end();
428 trace_screen_create(struct pipe_screen
*screen
)
430 struct trace_screen
*tr_scr
;
431 struct pipe_winsys
*winsys
;
436 if(!trace_dump_trace_begin())
439 tr_scr
= CALLOC_STRUCT(trace_screen
);
443 winsys
= trace_winsys_create(screen
->winsys
);
447 tr_scr
->base
.winsys
= winsys
;
448 tr_scr
->base
.destroy
= trace_screen_destroy
;
449 tr_scr
->base
.get_name
= trace_screen_get_name
;
450 tr_scr
->base
.get_vendor
= trace_screen_get_vendor
;
451 tr_scr
->base
.get_param
= trace_screen_get_param
;
452 tr_scr
->base
.get_paramf
= trace_screen_get_paramf
;
453 tr_scr
->base
.is_format_supported
= trace_screen_is_format_supported
;
454 tr_scr
->base
.texture_create
= trace_screen_texture_create
;
455 tr_scr
->base
.texture_blanket
= trace_screen_texture_blanket
;
456 tr_scr
->base
.texture_destroy
= trace_screen_texture_destroy
;
457 tr_scr
->base
.get_tex_surface
= trace_screen_get_tex_surface
;
458 tr_scr
->base
.tex_surface_destroy
= trace_screen_tex_surface_destroy
;
459 tr_scr
->base
.get_tex_transfer
= trace_screen_get_tex_transfer
;
460 tr_scr
->base
.tex_transfer_destroy
= trace_screen_tex_transfer_destroy
;
461 tr_scr
->base
.transfer_map
= trace_screen_transfer_map
;
462 tr_scr
->base
.transfer_unmap
= trace_screen_transfer_unmap
;
464 tr_scr
->screen
= screen
;
466 trace_dump_call_begin("", "pipe_screen_create");
467 trace_dump_arg_begin("winsys");
468 trace_dump_ptr(screen
->winsys
);
469 trace_dump_arg_end();
470 trace_dump_ret(ptr
, screen
);
471 trace_dump_call_end();
473 return &tr_scr
->base
;
478 trace_dump_trace_end();
484 struct trace_screen
*
485 trace_screen(struct pipe_screen
*screen
)
488 assert(screen
->destroy
== trace_screen_destroy
);
489 return (struct trace_screen
*)screen
;