i965g: more files 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 };
41
42 enum brw_buffer_usage {
43 I915_GEM_DOMAIN_RENDER,
44 I915_GEM_DOMAIN_SAMPLER,
45 I915_GEM_DOMAIN_VERTEX,
46 I915_GEM_DOMAIN_INSTRUCTION,
47
48
49 /* XXX: migrate from domains to explicit usage cases, eg below:
50 */
51
52 /* use on textures */
53 BRW_USAGE_RENDER = 0x01,
54 BRW_USAGE_SAMPLER = 0x02,
55 BRW_USAGE_2D_TARGET = 0x04,
56 BRW_USAGE_2D_SOURCE = 0x08,
57 /* use on vertex */
58 BRW_USAGE_VERTEX = 0x10,
59 };
60
61 enum brw_buffer_type
62 {
63 BRW_BUFFER_TYPE_TEXTURE,
64 BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
65 BRW_BUFFER_TYPE_VERTEX,
66 };
67
68
69 /* AKA winsys context:
70 */
71 struct brw_batchbuffer {
72
73 struct brw_winsys *iws;
74 struct brw_winsys_buffer *buf;
75
76 /**
77 * Values exported to speed up the writing the batchbuffer,
78 * instead of having to go trough a accesor function for
79 * each dword written.
80 */
81 /*{@*/
82 uint8_t *map;
83 uint8_t *ptr;
84 size_t size;
85
86 size_t relocs;
87 size_t max_relocs;
88 /*@}*/
89 };
90
91 struct brw_winsys_screen {
92
93 /**
94 * Batchbuffer functions.
95 */
96 /*@{*/
97 /**
98 * Create a new batchbuffer.
99 */
100 struct brw_batchbuffer *(*batchbuffer_create)(struct brw_winsys_screen *iws);
101
102 /**
103 * Emit a relocation to a buffer.
104 * Target position in batchbuffer is the same as ptr.
105 */
106 int (*batchbuffer_reloc)(struct brw_batchbuffer *batch,
107 unsigned offset,
108 struct brw_winsys_buffer *reloc,
109 unsigned pre_add,
110 enum brw_buffer_usage usage);
111
112 /**
113 * Flush a bufferbatch.
114 */
115 void (*batchbuffer_flush)(struct brw_batchbuffer *batch,
116 struct pipe_fence_handle **fence);
117
118 /**
119 * Destroy a batchbuffer.
120 */
121 void (*batchbuffer_destroy)(struct brw_batchbuffer *batch);
122 /*@}*/
123
124
125 /**
126 * Buffer functions.
127 */
128 /*@{*/
129 /**
130 * Create a buffer.
131 */
132 struct brw_winsys_buffer *(*buffer_create)(struct brw_winsys *iws,
133 unsigned size,
134 unsigned alignment,
135 enum brw_buffer_type type);
136
137
138 /* Reference and unreference buffers:
139 */
140 void (*bo_reference)( struct brw_winsys_buffer *buffer );
141 void (*bo_unreference)( struct brw_winsys_buffer *buffer );
142 void (*bo_emit_reloc)( struct brw_winsys_buffer *buffer,
143 unsigned domain,
144 unsigned a,
145 unsigned b,
146 unsigned offset,
147 struct brw_winsys_buffer *b2);
148
149 /**
150 * Map a buffer.
151 */
152 void *(*buffer_map)(struct brw_winsys *iws,
153 struct brw_winsys_buffer *buffer,
154 boolean write);
155
156 /**
157 * Unmap a buffer.
158 */
159 void (*buffer_unmap)(struct brw_winsys *iws,
160 struct brw_winsys_buffer *buffer);
161
162 /**
163 * Write to a buffer.
164 *
165 * Arguments follows pipe_buffer_write.
166 */
167 int (*buffer_write)(struct brw_winsys *iws,
168 struct brw_winsys_buffer *dst,
169 size_t offset,
170 size_t size,
171 const void *data);
172
173 void (*buffer_destroy)(struct brw_winsys *iws,
174 struct brw_winsys_buffer *buffer);
175 /*@}*/
176
177
178 /**
179 * Fence functions.
180 */
181 /*@{*/
182 /**
183 * Reference fence and set ptr to fence.
184 */
185 void (*fence_reference)(struct brw_winsys *iws,
186 struct pipe_fence_handle **ptr,
187 struct pipe_fence_handle *fence);
188
189 /**
190 * Check if a fence has finished.
191 */
192 int (*fence_signalled)(struct brw_winsys *iws,
193 struct pipe_fence_handle *fence);
194
195 /**
196 * Wait on a fence to finish.
197 */
198 int (*fence_finish)(struct brw_winsys *iws,
199 struct pipe_fence_handle *fence);
200 /*@}*/
201
202
203 /**
204 * Destroy the winsys.
205 */
206 void (*destroy)(struct brw_winsys *iws);
207 };
208
209
210 /**
211 * Create i915 pipe_screen.
212 */
213 struct pipe_screen *i915_create_screen(struct brw_winsys *iws, unsigned pci_id);
214
215 /**
216 * Create a i915 pipe_context.
217 */
218 struct pipe_context *i915_create_context(struct pipe_screen *screen);
219
220 /**
221 * Get the brw_winsys buffer backing the texture.
222 *
223 * TODO UGLY
224 */
225 struct pipe_texture;
226 boolean i915_get_texture_buffer_brw(struct pipe_texture *texture,
227 struct brw_winsys_buffer **buffer,
228 unsigned *stride);
229
230 /**
231 * Wrap a brw_winsys buffer with a texture blanket.
232 *
233 * TODO UGLY
234 */
235 struct pipe_texture * i915_texture_blanket_brw(struct pipe_screen *screen,
236 struct pipe_texture *tmplt,
237 unsigned pitch,
238 struct brw_winsys_buffer *buffer);
239
240
241
242
243 #endif