i965g: add data type tags to aid dumping/decoding
[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 #include "pipe/p_error.h"
31
32 struct brw_winsys;
33 struct pipe_fence_handle;
34
35 /* Not sure why the winsys needs this:
36 */
37 #define BRW_BATCH_SIZE (32*1024)
38
39
40 /* Need a tiny bit of information inside the abstract buffer struct:
41 */
42 struct brw_winsys_buffer {
43 unsigned *offset;
44 unsigned size;
45 };
46
47
48 /* Should be possible to validate usages above against buffer creation
49 * types, below:
50 */
51 enum brw_buffer_type
52 {
53 BRW_BUFFER_TYPE_TEXTURE,
54 BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
55 BRW_BUFFER_TYPE_VERTEX,
56 BRW_BUFFER_TYPE_CURBE,
57 BRW_BUFFER_TYPE_QUERY,
58 BRW_BUFFER_TYPE_SHADER_CONSTANTS,
59 BRW_BUFFER_TYPE_SHADER_SCRATCH,
60 BRW_BUFFER_TYPE_BATCH,
61 BRW_BUFFER_TYPE_GENERAL_STATE,
62 BRW_BUFFER_TYPE_SURFACE_STATE,
63 BRW_BUFFER_TYPE_PIXEL, /* image uploads, pbo's, etc */
64 BRW_BUFFER_TYPE_GENERIC, /* unknown */
65 BRW_BUFFER_TYPE_MAX /* Count of possible values */
66 };
67
68
69 /* Describe the usage of a particular buffer in a relocation. The DRM
70 * winsys will translate these back to GEM read/write domain flags.
71 */
72 enum brw_buffer_usage {
73 BRW_USAGE_STATE, /* INSTRUCTION, 0 */
74 BRW_USAGE_QUERY_RESULT, /* INSTRUCTION, INSTRUCTION */
75 BRW_USAGE_RENDER_TARGET, /* RENDER, 0 */
76 BRW_USAGE_DEPTH_BUFFER, /* RENDER, RENDER */
77 BRW_USAGE_BLIT_SOURCE, /* RENDER, 0 */
78 BRW_USAGE_BLIT_DEST, /* RENDER, RENDER */
79 BRW_USAGE_SAMPLER, /* SAMPLER, 0 */
80 BRW_USAGE_VERTEX, /* VERTEX, 0 */
81 BRW_USAGE_SCRATCH, /* 0, 0 */
82 BRW_USAGE_MAX
83 };
84
85 enum brw_buffer_data_type {
86 BRW_DATA_GS_CC_VP,
87 BRW_DATA_GS_CC_UNIT,
88 BRW_DATA_GS_WM_PROG,
89 BRW_DATA_GS_SAMPLER_DEFAULT_COLOR,
90 BRW_DATA_GS_SAMPLER,
91 BRW_DATA_GS_WM_UNIT,
92 BRW_DATA_GS_SF_PROG,
93 BRW_DATA_GS_SF_VP,
94 BRW_DATA_GS_SF_UNIT,
95 BRW_DATA_GS_VS_UNIT,
96 BRW_DATA_GS_VS_PROG,
97 BRW_DATA_GS_GS_UNIT,
98 BRW_DATA_GS_GS_PROG,
99 BRW_DATA_GS_CLIP_VP,
100 BRW_DATA_GS_CLIP_UNIT,
101 BRW_DATA_GS_CLIP_PROG,
102 BRW_DATA_SS_SURFACE,
103 BRW_DATA_SS_SURF_BIND,
104 BRW_DATA_OTHER,
105 BRW_DATA_MAX
106 };
107
108 struct brw_winsys_screen {
109
110
111 /**
112 * Buffer functions.
113 */
114
115 /*@{*/
116 /**
117 * Create a buffer.
118 */
119 struct brw_winsys_buffer *(*bo_alloc)( struct brw_winsys_screen *sws,
120 enum brw_buffer_type type,
121 unsigned size,
122 unsigned alignment );
123
124 /* Reference and unreference buffers:
125 */
126 void (*bo_reference)( struct brw_winsys_buffer *buffer );
127 void (*bo_unreference)( struct brw_winsys_buffer *buffer );
128
129 /* delta -- added to b2->offset, and written into buffer
130 * offset -- location above value is written to within buffer
131 */
132 int (*bo_emit_reloc)( struct brw_winsys_buffer *buffer,
133 enum brw_buffer_usage usage,
134 unsigned delta,
135 unsigned offset,
136 struct brw_winsys_buffer *b2);
137
138 int (*bo_exec)( struct brw_winsys_buffer *buffer,
139 unsigned bytes_used );
140
141 int (*bo_subdata)(struct brw_winsys_buffer *buffer,
142 enum brw_buffer_data_type data_type,
143 size_t offset,
144 size_t size,
145 const void *data);
146
147 boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
148 boolean (*bo_references)(struct brw_winsys_buffer *a,
149 struct brw_winsys_buffer *b);
150
151 /* XXX: couldn't this be handled by returning true/false on
152 * bo_emit_reloc?
153 */
154 enum pipe_error (*check_aperture_space)( struct brw_winsys_screen *iws,
155 struct brw_winsys_buffer **buffers,
156 unsigned count );
157
158 /**
159 * Map a buffer.
160 */
161 void *(*bo_map)(struct brw_winsys_buffer *buffer,
162 enum brw_buffer_data_type data_type,
163 boolean write);
164
165 /**
166 * Unmap a buffer.
167 */
168 void (*bo_unmap)(struct brw_winsys_buffer *buffer);
169 /*@}*/
170
171 /**
172 * Destroy the winsys.
173 */
174 void (*destroy)(struct brw_winsys_screen *iws);
175 };
176
177
178 /**
179 * Create brw pipe_screen.
180 */
181 struct pipe_screen *brw_create_screen(struct brw_winsys_screen *iws, unsigned pci_id);
182
183 /**
184 * Create a brw pipe_context.
185 */
186 struct pipe_context *brw_create_context(struct pipe_screen *screen);
187
188 /**
189 * Get the brw_winsys buffer backing the texture.
190 *
191 * TODO UGLY
192 */
193 struct pipe_texture;
194 boolean brw_texture_get_winsys_buffer(struct pipe_texture *texture,
195 struct brw_winsys_buffer **buffer,
196 unsigned *stride);
197
198 /**
199 * Wrap a brw_winsys buffer with a texture blanket.
200 *
201 * TODO UGLY
202 */
203 struct pipe_texture *
204 brw_texture_blanket_winsys_buffer(struct pipe_screen *screen,
205 const struct pipe_texture *template,
206 const unsigned pitch,
207 struct brw_winsys_buffer *buffer);
208
209
210
211
212 #endif