gallium: remove redundant pipe_context::fence_signalled
[mesa.git] / src / gallium / drivers / trace / tr_screen.c
1 /**************************************************************************
2 *
3 * Copyright 2008 VMware, Inc.
4 * All Rights Reserved.
5 *
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:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
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 VMWARE 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.
25 *
26 **************************************************************************/
27
28 #include "util/u_format.h"
29 #include "util/u_memory.h"
30 #include "util/simple_list.h"
31
32 #include "tr_dump.h"
33 #include "tr_dump_defines.h"
34 #include "tr_dump_state.h"
35 #include "tr_texture.h"
36 #include "tr_context.h"
37 #include "tr_screen.h"
38 #include "tr_public.h"
39
40
41 static boolean trace = FALSE;
42
43 static const char *
44 trace_screen_get_name(struct pipe_screen *_screen)
45 {
46 struct trace_screen *tr_scr = trace_screen(_screen);
47 struct pipe_screen *screen = tr_scr->screen;
48 const char *result;
49
50 trace_dump_call_begin("pipe_screen", "get_name");
51
52 trace_dump_arg(ptr, screen);
53
54 result = screen->get_name(screen);
55
56 trace_dump_ret(string, result);
57
58 trace_dump_call_end();
59
60 return result;
61 }
62
63
64 static const char *
65 trace_screen_get_vendor(struct pipe_screen *_screen)
66 {
67 struct trace_screen *tr_scr = trace_screen(_screen);
68 struct pipe_screen *screen = tr_scr->screen;
69 const char *result;
70
71 trace_dump_call_begin("pipe_screen", "get_vendor");
72
73 trace_dump_arg(ptr, screen);
74
75 result = screen->get_vendor(screen);
76
77 trace_dump_ret(string, result);
78
79 trace_dump_call_end();
80
81 return result;
82 }
83
84
85 static const char *
86 trace_screen_get_device_vendor(struct pipe_screen *_screen)
87 {
88 struct trace_screen *tr_scr = trace_screen(_screen);
89 struct pipe_screen *screen = tr_scr->screen;
90 const char *result;
91
92 trace_dump_call_begin("pipe_screen", "get_device_vendor");
93
94 trace_dump_arg(ptr, screen);
95
96 result = screen->get_device_vendor(screen);
97
98 trace_dump_ret(string, result);
99
100 trace_dump_call_end();
101
102 return result;
103 }
104
105
106 static int
107 trace_screen_get_param(struct pipe_screen *_screen,
108 enum pipe_cap param)
109 {
110 struct trace_screen *tr_scr = trace_screen(_screen);
111 struct pipe_screen *screen = tr_scr->screen;
112 int result;
113
114 trace_dump_call_begin("pipe_screen", "get_param");
115
116 trace_dump_arg(ptr, screen);
117 trace_dump_arg(int, param);
118
119 result = screen->get_param(screen, param);
120
121 trace_dump_ret(int, result);
122
123 trace_dump_call_end();
124
125 return result;
126 }
127
128
129 static int
130 trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader,
131 enum pipe_shader_cap param)
132 {
133 struct trace_screen *tr_scr = trace_screen(_screen);
134 struct pipe_screen *screen = tr_scr->screen;
135 int result;
136
137 trace_dump_call_begin("pipe_screen", "get_shader_param");
138
139 trace_dump_arg(ptr, screen);
140 trace_dump_arg(uint, shader);
141 trace_dump_arg(int, param);
142
143 result = screen->get_shader_param(screen, shader, param);
144
145 trace_dump_ret(int, result);
146
147 trace_dump_call_end();
148
149 return result;
150 }
151
152
153 static float
154 trace_screen_get_paramf(struct pipe_screen *_screen,
155 enum pipe_capf param)
156 {
157 struct trace_screen *tr_scr = trace_screen(_screen);
158 struct pipe_screen *screen = tr_scr->screen;
159 float result;
160
161 trace_dump_call_begin("pipe_screen", "get_paramf");
162
163 trace_dump_arg(ptr, screen);
164 trace_dump_arg(int, param);
165
166 result = screen->get_paramf(screen, param);
167
168 trace_dump_ret(float, result);
169
170 trace_dump_call_end();
171
172 return result;
173 }
174
175
176 static boolean
177 trace_screen_is_format_supported(struct pipe_screen *_screen,
178 enum pipe_format format,
179 enum pipe_texture_target target,
180 unsigned sample_count,
181 unsigned tex_usage)
182 {
183 struct trace_screen *tr_scr = trace_screen(_screen);
184 struct pipe_screen *screen = tr_scr->screen;
185 boolean result;
186
187 trace_dump_call_begin("pipe_screen", "is_format_supported");
188
189 trace_dump_arg(ptr, screen);
190 trace_dump_arg(format, format);
191 trace_dump_arg(int, target);
192 trace_dump_arg(uint, sample_count);
193 trace_dump_arg(uint, tex_usage);
194
195 result = screen->is_format_supported(screen, format, target, sample_count,
196 tex_usage);
197
198 trace_dump_ret(bool, result);
199
200 trace_dump_call_end();
201
202 return result;
203 }
204
205
206 static struct pipe_context *
207 trace_screen_context_create(struct pipe_screen *_screen, void *priv)
208 {
209 struct trace_screen *tr_scr = trace_screen(_screen);
210 struct pipe_screen *screen = tr_scr->screen;
211 struct pipe_context *result;
212
213 trace_dump_call_begin("pipe_screen", "context_create");
214
215 trace_dump_arg(ptr, screen);
216
217 result = screen->context_create(screen, priv);
218
219 trace_dump_ret(ptr, result);
220
221 trace_dump_call_end();
222
223 result = trace_context_create(tr_scr, result);
224
225 return result;
226 }
227
228
229 static void
230 trace_screen_flush_frontbuffer(struct pipe_screen *_screen,
231 struct pipe_resource *_resource,
232 unsigned level, unsigned layer,
233 void *context_private,
234 struct pipe_box *sub_box)
235 {
236 struct trace_screen *tr_scr = trace_screen(_screen);
237 struct trace_resource *tr_res = trace_resource(_resource);
238 struct pipe_screen *screen = tr_scr->screen;
239 struct pipe_resource *resource = tr_res->resource;
240
241 trace_dump_call_begin("pipe_screen", "flush_frontbuffer");
242
243 trace_dump_arg(ptr, screen);
244 trace_dump_arg(ptr, resource);
245 trace_dump_arg(uint, level);
246 trace_dump_arg(uint, layer);
247 /* XXX: hide, as there is nothing we can do with this
248 trace_dump_arg(ptr, context_private);
249 */
250
251 screen->flush_frontbuffer(screen, resource, level, layer, context_private, sub_box);
252
253 trace_dump_call_end();
254 }
255
256
257 /********************************************************************
258 * texture
259 */
260
261
262 static struct pipe_resource *
263 trace_screen_resource_create(struct pipe_screen *_screen,
264 const struct pipe_resource *templat)
265 {
266 struct trace_screen *tr_scr = trace_screen(_screen);
267 struct pipe_screen *screen = tr_scr->screen;
268 struct pipe_resource *result;
269
270 trace_dump_call_begin("pipe_screen", "resource_create");
271
272 trace_dump_arg(ptr, screen);
273 trace_dump_arg(resource_template, templat);
274
275 result = screen->resource_create(screen, templat);
276
277 trace_dump_ret(ptr, result);
278
279 trace_dump_call_end();
280
281 result = trace_resource_create(tr_scr, result);
282
283 return result;
284 }
285
286 static struct pipe_resource *
287 trace_screen_resource_from_handle(struct pipe_screen *_screen,
288 const struct pipe_resource *templ,
289 struct winsys_handle *handle)
290 {
291 struct trace_screen *tr_screen = trace_screen(_screen);
292 struct pipe_screen *screen = tr_screen->screen;
293 struct pipe_resource *result;
294
295 /* TODO trace call */
296
297 result = screen->resource_from_handle(screen, templ, handle);
298
299 result = trace_resource_create(trace_screen(_screen), result);
300
301 return result;
302 }
303
304 static boolean
305 trace_screen_resource_get_handle(struct pipe_screen *_screen,
306 struct pipe_resource *_resource,
307 struct winsys_handle *handle)
308 {
309 struct trace_screen *tr_screen = trace_screen(_screen);
310 struct trace_resource *tr_resource = trace_resource(_resource);
311 struct pipe_screen *screen = tr_screen->screen;
312 struct pipe_resource *resource = tr_resource->resource;
313
314 /* TODO trace call */
315
316 return screen->resource_get_handle(screen, resource, handle);
317 }
318
319
320
321 static void
322 trace_screen_resource_destroy(struct pipe_screen *_screen,
323 struct pipe_resource *_resource)
324 {
325 struct trace_screen *tr_scr = trace_screen(_screen);
326 struct trace_resource *tr_res = trace_resource(_resource);
327 struct pipe_screen *screen = tr_scr->screen;
328 struct pipe_resource *resource = tr_res->resource;
329
330 assert(resource->screen == screen);
331
332 trace_dump_call_begin("pipe_screen", "resource_destroy");
333
334 trace_dump_arg(ptr, screen);
335 trace_dump_arg(ptr, resource);
336
337 trace_dump_call_end();
338
339 trace_resource_destroy(tr_scr, tr_res);
340 }
341
342
343 /********************************************************************
344 * fence
345 */
346
347
348 static void
349 trace_screen_fence_reference(struct pipe_screen *_screen,
350 struct pipe_fence_handle **pdst,
351 struct pipe_fence_handle *src)
352 {
353 struct trace_screen *tr_scr = trace_screen(_screen);
354 struct pipe_screen *screen = tr_scr->screen;
355 struct pipe_fence_handle *dst;
356
357 assert(pdst);
358 dst = *pdst;
359
360 trace_dump_call_begin("pipe_screen", "fence_reference");
361
362 trace_dump_arg(ptr, screen);
363 trace_dump_arg(ptr, dst);
364 trace_dump_arg(ptr, src);
365
366 screen->fence_reference(screen, pdst, src);
367
368 trace_dump_call_end();
369 }
370
371
372 static boolean
373 trace_screen_fence_finish(struct pipe_screen *_screen,
374 struct pipe_fence_handle *fence,
375 uint64_t timeout)
376 {
377 struct trace_screen *tr_scr = trace_screen(_screen);
378 struct pipe_screen *screen = tr_scr->screen;
379 int result;
380
381 trace_dump_call_begin("pipe_screen", "fence_finish");
382
383 trace_dump_arg(ptr, screen);
384 trace_dump_arg(ptr, fence);
385 trace_dump_arg(uint, timeout);
386
387 result = screen->fence_finish(screen, fence, timeout);
388
389 trace_dump_ret(bool, result);
390
391 trace_dump_call_end();
392
393 return result;
394 }
395
396
397 /********************************************************************
398 * screen
399 */
400
401 static uint64_t
402 trace_screen_get_timestamp(struct pipe_screen *_screen)
403 {
404 struct trace_screen *tr_scr = trace_screen(_screen);
405 struct pipe_screen *screen = tr_scr->screen;
406 uint64_t result;
407
408 trace_dump_call_begin("pipe_screen", "get_timestamp");
409 trace_dump_arg(ptr, screen);
410
411 result = screen->get_timestamp(screen);
412
413 trace_dump_ret(uint, result);
414 trace_dump_call_end();
415
416 return result;
417 }
418
419 static void
420 trace_screen_destroy(struct pipe_screen *_screen)
421 {
422 struct trace_screen *tr_scr = trace_screen(_screen);
423 struct pipe_screen *screen = tr_scr->screen;
424
425 trace_dump_call_begin("pipe_screen", "destroy");
426 trace_dump_arg(ptr, screen);
427 trace_dump_call_end();
428
429 screen->destroy(screen);
430
431 FREE(tr_scr);
432 }
433
434 boolean
435 trace_enabled(void)
436 {
437 static boolean firstrun = TRUE;
438
439 if (!firstrun)
440 return trace;
441 firstrun = FALSE;
442
443 if(trace_dump_trace_begin()) {
444 trace_dumping_start();
445 trace = TRUE;
446 }
447
448 return trace;
449 }
450
451 struct pipe_screen *
452 trace_screen_create(struct pipe_screen *screen)
453 {
454 struct trace_screen *tr_scr;
455
456 if(!screen)
457 goto error1;
458
459 if (!trace_enabled())
460 goto error1;
461
462 trace_dump_call_begin("", "pipe_screen_create");
463
464 tr_scr = CALLOC_STRUCT(trace_screen);
465 if(!tr_scr)
466 goto error2;
467
468 tr_scr->base.destroy = trace_screen_destroy;
469 tr_scr->base.get_name = trace_screen_get_name;
470 tr_scr->base.get_vendor = trace_screen_get_vendor;
471 tr_scr->base.get_device_vendor = trace_screen_get_device_vendor;
472 tr_scr->base.get_param = trace_screen_get_param;
473 tr_scr->base.get_shader_param = trace_screen_get_shader_param;
474 tr_scr->base.get_paramf = trace_screen_get_paramf;
475 tr_scr->base.is_format_supported = trace_screen_is_format_supported;
476 assert(screen->context_create);
477 tr_scr->base.context_create = trace_screen_context_create;
478 tr_scr->base.resource_create = trace_screen_resource_create;
479 tr_scr->base.resource_from_handle = trace_screen_resource_from_handle;
480 tr_scr->base.resource_get_handle = trace_screen_resource_get_handle;
481 tr_scr->base.resource_destroy = trace_screen_resource_destroy;
482 tr_scr->base.fence_reference = trace_screen_fence_reference;
483 tr_scr->base.fence_finish = trace_screen_fence_finish;
484 tr_scr->base.flush_frontbuffer = trace_screen_flush_frontbuffer;
485 tr_scr->base.get_timestamp = trace_screen_get_timestamp;
486
487 tr_scr->screen = screen;
488
489 trace_dump_ret(ptr, screen);
490 trace_dump_call_end();
491
492 return &tr_scr->base;
493
494 error2:
495 trace_dump_ret(ptr, screen);
496 trace_dump_call_end();
497 error1:
498 return screen;
499 }
500
501
502 struct trace_screen *
503 trace_screen(struct pipe_screen *screen)
504 {
505 assert(screen);
506 assert(screen->destroy == trace_screen_destroy);
507 return (struct trace_screen *)screen;
508 }