st/xa: remove unused xa_screen::d[s]_depth_bits_last
[mesa.git] / src / gallium / state_trackers / xa / xa_priv.h
1 /**********************************************************
2 * Copyright 2009-2011 VMware, Inc. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person
5 * obtaining a copy of this software and associated documentation
6 * files (the "Software"), to deal in the Software without
7 * restriction, including without limitation the rights to use, copy,
8 * modify, merge, publish, distribute, sublicense, and/or sell copies
9 * of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be
13 * included in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 *
24 *********************************************************
25 * Authors:
26 * Zack Rusin <zackr-at-vmware-dot-com>
27 * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
28 */
29
30 #ifndef _XA_PRIV_H_
31 #define _XA_PRIV_H_
32
33 #include "xa_tracker.h"
34 #include "xa_context.h"
35 #include "xa_composite.h"
36
37 #include "pipe/p_screen.h"
38 #include "pipe/p_context.h"
39 #include "pipe/p_state.h"
40
41 #include "util/u_math.h"
42
43 #if defined(__GNUC__)
44 #define XA_EXPORT __attribute__ ((visibility("default")))
45 #else
46 #define XA_EXPORT
47 #endif
48
49 #define XA_VB_SIZE (100 * 4 * 3 * 4)
50 #define XA_LAST_SURFACE_TYPE (xa_type_yuv_component + 1)
51 #define XA_MAX_SAMPLERS 3
52
53 struct xa_fence {
54 struct pipe_fence_handle *pipe_fence;
55 struct xa_tracker *xa;
56 };
57
58 struct xa_format_descriptor {
59 enum pipe_format format;
60 enum xa_formats xa_format;
61 };
62
63 struct xa_surface {
64 int refcount;
65 struct pipe_resource template;
66 struct xa_tracker *xa;
67 struct pipe_resource *tex;
68 struct pipe_transfer *transfer;
69 unsigned int flags;
70 struct xa_format_descriptor fdesc;
71 struct pipe_context *mapping_pipe;
72 };
73
74 struct xa_tracker {
75 enum xa_formats *supported_formats;
76 unsigned int format_map[XA_LAST_SURFACE_TYPE][2];
77 struct pipe_loader_device *dev;
78 struct pipe_screen *screen;
79 struct xa_context *default_ctx;
80 };
81
82 struct xa_context {
83 struct xa_tracker *xa;
84 struct pipe_context *pipe;
85
86 struct cso_context *cso;
87 struct xa_shaders *shaders;
88
89 struct pipe_resource *vs_const_buffer;
90 struct pipe_resource *fs_const_buffer;
91
92 float buffer[XA_VB_SIZE];
93 unsigned int buffer_size;
94 struct pipe_vertex_element velems[3];
95
96 /* number of attributes per vertex for the current
97 * draw operation */
98 unsigned int attrs_per_vertex;
99
100 unsigned int fb_width;
101 unsigned int fb_height;
102
103 struct pipe_fence_handle *last_fence;
104 struct xa_surface *src;
105 struct xa_surface *dst;
106 struct pipe_surface *srf;
107
108 /* destination scissor state.. we scissor out untouched parts
109 * of the dst for the benefit of tilers:
110 */
111 struct pipe_scissor_state scissor;
112 int scissor_valid;
113
114 int simple_copy;
115
116 int has_solid_color;
117 float solid_color[4];
118
119 unsigned int num_bound_samplers;
120 struct pipe_sampler_view *bound_sampler_views[XA_MAX_SAMPLERS];
121 const struct xa_composite *comp;
122 };
123
124 static inline void
125 xa_scissor_reset(struct xa_context *ctx)
126 {
127 ctx->scissor.maxx = 0;
128 ctx->scissor.maxy = 0;
129 ctx->scissor.minx = ~0;
130 ctx->scissor.miny = ~0;
131 ctx->scissor_valid = FALSE;
132 }
133
134 static inline void
135 xa_scissor_update(struct xa_context *ctx, unsigned minx, unsigned miny,
136 unsigned maxx, unsigned maxy)
137 {
138 ctx->scissor.maxx = MAX2(ctx->scissor.maxx, maxx);
139 ctx->scissor.maxy = MAX2(ctx->scissor.maxy, maxy);
140 ctx->scissor.minx = MIN2(ctx->scissor.minx, minx);
141 ctx->scissor.miny = MIN2(ctx->scissor.miny, miny);
142 ctx->scissor_valid = TRUE;
143 }
144
145 enum xa_vs_traits {
146 VS_COMPOSITE = 1 << 0,
147 VS_MASK = 1 << 1,
148 VS_SOLID_FILL = 1 << 2,
149 VS_LINGRAD_FILL = 1 << 3,
150 VS_RADGRAD_FILL = 1 << 4,
151 VS_YUV = 1 << 5,
152
153 VS_FILL = (VS_SOLID_FILL | VS_LINGRAD_FILL | VS_RADGRAD_FILL)
154 };
155
156 enum xa_fs_traits {
157 FS_COMPOSITE = 1 << 0,
158 FS_MASK = 1 << 1,
159 FS_SOLID_FILL = 1 << 2,
160 FS_LINGRAD_FILL = 1 << 3,
161 FS_RADGRAD_FILL = 1 << 4,
162 FS_CA_FULL = 1 << 5, /* src.rgba * mask.rgba */
163 FS_CA_SRCALPHA = 1 << 6, /* src.aaaa * mask.rgba */
164 FS_YUV = 1 << 7,
165 FS_SRC_REPEAT_NONE = 1 << 8,
166 FS_MASK_REPEAT_NONE = 1 << 9,
167 FS_SRC_SWIZZLE_RGB = 1 << 10,
168 FS_MASK_SWIZZLE_RGB = 1 << 11,
169 FS_SRC_SET_ALPHA = 1 << 12,
170 FS_MASK_SET_ALPHA = 1 << 13,
171 FS_SRC_LUMINANCE = 1 << 14,
172 FS_MASK_LUMINANCE = 1 << 15,
173 FS_DST_LUMINANCE = 1 << 16,
174
175 FS_FILL = (FS_SOLID_FILL | FS_LINGRAD_FILL | FS_RADGRAD_FILL),
176 FS_COMPONENT_ALPHA = (FS_CA_FULL | FS_CA_SRCALPHA)
177 };
178
179 struct xa_shader {
180 void *fs;
181 void *vs;
182 };
183
184 struct xa_shaders;
185
186 /*
187 * Inline utilities
188 */
189
190 static inline int
191 xa_min(int a, int b)
192 {
193 return ((a <= b) ? a : b);
194 }
195
196 static inline void
197 xa_pixel_to_float4(uint32_t pixel, float *color)
198 {
199 uint32_t r, g, b, a;
200
201 a = (pixel >> 24) & 0xff;
202 r = (pixel >> 16) & 0xff;
203 g = (pixel >> 8) & 0xff;
204 b = (pixel >> 0) & 0xff;
205 color[0] = ((float)r) / 255.;
206 color[1] = ((float)g) / 255.;
207 color[2] = ((float)b) / 255.;
208 color[3] = ((float)a) / 255.;
209 }
210
211 static inline void
212 xa_pixel_to_float4_a8(uint32_t pixel, float *color)
213 {
214 uint32_t a;
215
216 a = (pixel >> 24) & 0xff;
217 color[0] = ((float)a) / 255.;
218 color[1] = ((float)a) / 255.;
219 color[2] = ((float)a) / 255.;
220 color[3] = ((float)a) / 255.;
221 }
222
223 /*
224 * xa_tgsi.c
225 */
226
227 extern struct xa_shaders *xa_shaders_create(struct xa_context *);
228
229 void xa_shaders_destroy(struct xa_shaders *shaders);
230
231 struct xa_shader xa_shaders_get(struct xa_shaders *shaders,
232 unsigned vs_traits, unsigned fs_traits);
233
234 /*
235 * xa_context.c
236 */
237 extern void
238 xa_context_flush(struct xa_context *ctx);
239
240 extern int
241 xa_ctx_srf_create(struct xa_context *ctx, struct xa_surface *dst);
242
243 extern void
244 xa_ctx_srf_destroy(struct xa_context *ctx);
245
246 extern void
247 xa_ctx_sampler_views_destroy(struct xa_context *ctx);
248
249 /*
250 * xa_renderer.c
251 */
252 void renderer_set_constants(struct xa_context *r,
253 int shader_type, const float *params,
254 int param_bytes);
255
256 void renderer_draw_yuv(struct xa_context *r,
257 float src_x,
258 float src_y,
259 float src_w,
260 float src_h,
261 int dst_x,
262 int dst_y, int dst_w, int dst_h,
263 struct xa_surface *srf[]);
264
265 void renderer_bind_destination(struct xa_context *r,
266 struct pipe_surface *surface);
267
268 void renderer_init_state(struct xa_context *r);
269 void renderer_copy_prepare(struct xa_context *r,
270 struct pipe_surface *dst_surface,
271 struct pipe_resource *src_texture,
272 const enum xa_formats src_xa_format,
273 const enum xa_formats dst_xa_format);
274
275 void renderer_copy(struct xa_context *r, int dx,
276 int dy,
277 int sx,
278 int sy,
279 int width, int height, float src_width, float src_height);
280
281 void renderer_draw_flush(struct xa_context *r);
282
283 void renderer_begin_solid(struct xa_context *r);
284 void renderer_solid(struct xa_context *r,
285 int x0, int y0, int x1, int y1, float *color);
286 void
287 renderer_begin_textures(struct xa_context *r);
288
289 void
290 renderer_texture(struct xa_context *r,
291 int *pos,
292 int width, int height,
293 const float *src_matrix,
294 const float *mask_matrix);
295
296 #endif