i965g: driver and winsys compile
[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 /* Not sure why the winsys needs this:
35 */
36 #define BRW_BATCH_SIZE (32*1024)
37
38
39 /* Need a tiny bit of information inside the abstract buffer struct:
40 */
41 struct brw_winsys_buffer {
42 unsigned *offset;
43 unsigned size;
44 };
45
46 enum brw_buffer_usage {
47 I915_GEM_DOMAIN_RENDER,
48 I915_GEM_DOMAIN_SAMPLER,
49 I915_GEM_DOMAIN_VERTEX,
50 I915_GEM_DOMAIN_INSTRUCTION,
51
52
53 /* XXX: migrate from domains to explicit usage cases, eg below:
54 */
55
56 /* use on textures */
57 BRW_USAGE_RENDER = 0x01,
58 BRW_USAGE_SAMPLER = 0x02,
59 BRW_USAGE_2D_TARGET = 0x04,
60 BRW_USAGE_2D_SOURCE = 0x08,
61 /* use on vertex */
62 BRW_USAGE_VERTEX = 0x10,
63 };
64
65 enum brw_buffer_type
66 {
67 BRW_BUFFER_TYPE_TEXTURE,
68 BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
69 BRW_BUFFER_TYPE_VERTEX,
70 BRW_BUFFER_TYPE_CURBE,
71 BRW_BUFFER_TYPE_QUERY,
72 BRW_BUFFER_TYPE_SHADER_CONSTANTS,
73 BRW_BUFFER_TYPE_WM_SCRATCH,
74 BRW_BUFFER_TYPE_BATCH,
75 BRW_BUFFER_TYPE_STATE_CACHE,
76
77 BRW_BUFFER_TYPE_MAX /* Count of possible values */
78 };
79
80 struct brw_winsys_screen {
81
82
83 /**
84 * Buffer functions.
85 */
86
87 /*@{*/
88 /**
89 * Create a buffer.
90 */
91 struct brw_winsys_buffer *(*bo_alloc)( struct brw_winsys_screen *sws,
92 enum brw_buffer_type type,
93 unsigned size,
94 unsigned alignment );
95
96 /* Reference and unreference buffers:
97 */
98 void (*bo_reference)( struct brw_winsys_buffer *buffer );
99 void (*bo_unreference)( struct brw_winsys_buffer *buffer );
100
101 /* XXX: parameter names!!
102 */
103 int (*bo_emit_reloc)( struct brw_winsys_buffer *buffer,
104 unsigned domain,
105 unsigned a,
106 unsigned b,
107 unsigned offset,
108 struct brw_winsys_buffer *b2);
109
110 int (*bo_exec)( struct brw_winsys_buffer *buffer,
111 unsigned bytes_used );
112
113 int (*bo_subdata)(struct brw_winsys_buffer *buffer,
114 size_t offset,
115 size_t size,
116 const void *data);
117
118 boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
119 boolean (*bo_references)(struct brw_winsys_buffer *a,
120 struct brw_winsys_buffer *b);
121
122 /* XXX: couldn't this be handled by returning true/false on
123 * bo_emit_reloc?
124 */
125 boolean (*check_aperture_space)( struct brw_winsys_screen *iws,
126 struct brw_winsys_buffer **buffers,
127 unsigned count );
128
129 /**
130 * Map a buffer.
131 */
132 void *(*bo_map)(struct brw_winsys_buffer *buffer,
133 boolean write);
134
135 /**
136 * Unmap a buffer.
137 */
138 void (*bo_unmap)(struct brw_winsys_buffer *buffer);
139 /*@}*/
140
141
142
143
144 /**
145 * Destroy the winsys.
146 */
147 void (*destroy)(struct brw_winsys_screen *iws);
148 };
149
150
151 /**
152 * Create brw pipe_screen.
153 */
154 struct pipe_screen *brw_create_screen(struct brw_winsys_screen *iws, unsigned pci_id);
155
156 /**
157 * Create a brw pipe_context.
158 */
159 struct pipe_context *brw_create_context(struct pipe_screen *screen);
160
161 /**
162 * Get the brw_winsys buffer backing the texture.
163 *
164 * TODO UGLY
165 */
166 struct pipe_texture;
167 boolean brw_texture_get_winsys_buffer(struct pipe_texture *texture,
168 struct brw_winsys_buffer **buffer,
169 unsigned *stride);
170
171 /**
172 * Wrap a brw_winsys buffer with a texture blanket.
173 *
174 * TODO UGLY
175 */
176 struct pipe_texture *
177 brw_texture_blanket_winsys_buffer(struct pipe_screen *screen,
178 const struct pipe_texture *template,
179 const unsigned pitch,
180 struct brw_winsys_buffer *buffer);
181
182
183
184
185 #endif