i965g: the whole drivers/i965 directory is compiling
[mesa.git] / src / gallium / drivers / i965 / brw_winsys.h
1 /**************************************************************************
2 *
3 * Copyright © 2009 Jakob Bornecrantz
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
14 * Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *
24 **************************************************************************/
25
26 #ifndef BRW_WINSYS_H
27 #define BRW_WINSYS_H
28
29 #include "pipe/p_compiler.h"
30
31 struct brw_winsys;
32 struct pipe_fence_handle;
33
34 /* This currently just wraps dri_bo:
35 */
36 struct brw_winsys_buffer {
37 struct brw_winsys_screen *sws;
38 void *bo;
39 unsigned offset;
40 unsigned size;
41 };
42
43 enum brw_buffer_usage {
44 I915_GEM_DOMAIN_RENDER,
45 I915_GEM_DOMAIN_SAMPLER,
46 I915_GEM_DOMAIN_VERTEX,
47 I915_GEM_DOMAIN_INSTRUCTION,
48
49
50 /* XXX: migrate from domains to explicit usage cases, eg below:
51 */
52
53 /* use on textures */
54 BRW_USAGE_RENDER = 0x01,
55 BRW_USAGE_SAMPLER = 0x02,
56 BRW_USAGE_2D_TARGET = 0x04,
57 BRW_USAGE_2D_SOURCE = 0x08,
58 /* use on vertex */
59 BRW_USAGE_VERTEX = 0x10,
60 };
61
62 enum brw_buffer_type
63 {
64 BRW_BUFFER_TYPE_TEXTURE,
65 BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
66 BRW_BUFFER_TYPE_VERTEX,
67 BRW_BUFFER_TYPE_CURBE,
68 BRW_BUFFER_TYPE_QUERY,
69 BRW_BUFFER_TYPE_SHADER_CONSTANTS,
70 BRW_BUFFER_TYPE_WM_SCRATCH,
71 BRW_BUFFER_TYPE_BATCH,
72 BRW_BUFFER_TYPE_STATE_CACHE,
73 };
74
75 struct brw_winsys_screen {
76
77
78 /**
79 * Buffer functions.
80 */
81
82 /*@{*/
83 /**
84 * Create a buffer.
85 */
86 struct brw_winsys_buffer *(*bo_alloc)( struct brw_winsys_screen *sws,
87 enum brw_buffer_type type,
88 unsigned size,
89 unsigned alignment );
90
91 /* Reference and unreference buffers:
92 */
93 void (*bo_reference)( struct brw_winsys_buffer *buffer );
94 void (*bo_unreference)( struct brw_winsys_buffer *buffer );
95
96 /* XXX: parameter names!!
97 */
98 int (*bo_emit_reloc)( struct brw_winsys_buffer *buffer,
99 unsigned domain,
100 unsigned a,
101 unsigned b,
102 unsigned offset,
103 struct brw_winsys_buffer *b2);
104
105 int (*bo_exec)( struct brw_winsys_buffer *buffer,
106 unsigned bytes_used,
107 void *foo,
108 int a,
109 int b );
110
111 void (*bo_subdata)(struct brw_winsys_buffer *buffer,
112 size_t offset,
113 size_t size,
114 const void *data);
115
116 boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
117 boolean (*bo_references)(struct brw_winsys_buffer *a,
118 struct brw_winsys_buffer *b);
119
120 /* XXX: couldn't this be handled by returning true/false on
121 * bo_emit_reloc?
122 */
123 boolean (*check_aperture_space)( struct brw_winsys_screen *iws,
124 struct brw_winsys_buffer **buffers,
125 unsigned count );
126
127 /**
128 * Map a buffer.
129 */
130 void *(*bo_map)(struct brw_winsys_buffer *buffer,
131 boolean write);
132
133 /**
134 * Unmap a buffer.
135 */
136 void (*bo_unmap)(struct brw_winsys_buffer *buffer);
137 /*@}*/
138
139
140
141
142 /**
143 * Destroy the winsys.
144 */
145 void (*destroy)(struct brw_winsys *iws);
146 };
147
148
149 /**
150 * Create brw pipe_screen.
151 */
152 struct pipe_screen *brw_create_screen(struct brw_winsys *iws, unsigned pci_id);
153
154 /**
155 * Create a brw pipe_context.
156 */
157 struct pipe_context *brw_create_context(struct pipe_screen *screen);
158
159 /**
160 * Get the brw_winsys buffer backing the texture.
161 *
162 * TODO UGLY
163 */
164 struct pipe_texture;
165 boolean brw_get_texture_buffer_brw(struct pipe_texture *texture,
166 struct brw_winsys_buffer **buffer,
167 unsigned *stride);
168
169 /**
170 * Wrap a brw_winsys buffer with a texture blanket.
171 *
172 * TODO UGLY
173 */
174 struct pipe_texture * brw_texture_blanket_ws(struct pipe_screen *screen,
175 const struct pipe_texture *tmplt,
176 const unsigned *stride,
177 struct brw_winsys_buffer *buffer);
178
179
180
181
182 #endif