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#ifndef TR_CONTEXT_H_
29#define TR_CONTEXT_H_
30
31
32#include "pipe/p_compiler.h"
33#include "util/u_debug.h"
34#include "util/hash_table.h"
35#include "pipe/p_context.h"
36#include "util/u_threaded_context.h"
37
38#include "tr_screen.h"
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44
45struct trace_screen;
46
47struct trace_context
48{
49   struct pipe_context base;
50
51   struct hash_table blend_states;
52   struct hash_table rasterizer_states;
53   struct hash_table depth_stencil_alpha_states;
54
55   struct pipe_context *pipe;
56   tc_replace_buffer_storage_func replace_buffer_storage;
57   tc_create_fence_func create_fence;
58
59   struct pipe_framebuffer_state unwrapped_state;
60   bool seen_fb_state;
61
62   bool threaded;
63};
64
65
66void
67trace_context_check(const struct pipe_context *pipe);
68struct pipe_context *
69trace_get_possibly_threaded_context(struct pipe_context *pipe);
70
71static inline struct trace_context *
72trace_context(struct pipe_context *pipe)
73{
74   assert(pipe);
75#ifdef DEBUG
76   trace_context_check(pipe);
77#endif
78   return (struct trace_context *)pipe;
79}
80
81
82struct pipe_context *
83trace_context_create(struct trace_screen *tr_scr,
84                     struct pipe_context *pipe);
85
86struct pipe_context *
87trace_context_create_threaded(struct pipe_screen *screen, struct pipe_context *pipe,
88                              tc_replace_buffer_storage_func *replace_buffer,
89                              struct threaded_context_options *options);
90#ifdef __cplusplus
91}
92#endif
93
94#endif /* TR_CONTEXT_H_ */
95