Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 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 |
||
27 | * Thomas Hellstrom |
||
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 | #if defined(__GNUC__) && __GNUC__ >= 4 |
||
42 | #define XA_EXPORT __attribute__ ((visibility("default"))) |
||
43 | #else |
||
44 | #define XA_EXPORT |
||
45 | #endif |
||
46 | |||
47 | #define XA_VB_SIZE (100 * 4 * 3 * 4) |
||
48 | #define XA_LAST_SURFACE_TYPE (xa_type_yuv_component + 1) |
||
49 | #define XA_MAX_SAMPLERS 3 |
||
50 | |||
51 | struct xa_fence { |
||
52 | struct pipe_fence_handle *pipe_fence; |
||
53 | struct xa_tracker *xa; |
||
54 | }; |
||
55 | |||
56 | struct xa_format_descriptor { |
||
57 | enum pipe_format format; |
||
58 | enum xa_formats xa_format; |
||
59 | }; |
||
60 | |||
61 | struct xa_surface { |
||
62 | struct pipe_resource template; |
||
63 | struct xa_tracker *xa; |
||
64 | struct pipe_resource *tex; |
||
65 | struct pipe_transfer *transfer; |
||
66 | unsigned int flags; |
||
67 | struct xa_format_descriptor fdesc; |
||
68 | struct pipe_context *mapping_pipe; |
||
69 | }; |
||
70 | |||
71 | struct xa_tracker { |
||
72 | enum xa_formats *supported_formats; |
||
73 | unsigned int format_map[XA_LAST_SURFACE_TYPE][2]; |
||
74 | int d_depth_bits_last; |
||
75 | int ds_depth_bits_last; |
||
76 | struct pipe_screen *screen; |
||
77 | struct xa_context *default_ctx; |
||
78 | }; |
||
79 | |||
80 | struct xa_context { |
||
81 | struct xa_tracker *xa; |
||
82 | struct pipe_context *pipe; |
||
83 | |||
84 | struct cso_context *cso; |
||
85 | struct xa_shaders *shaders; |
||
86 | |||
87 | struct pipe_resource *vs_const_buffer; |
||
88 | struct pipe_resource *fs_const_buffer; |
||
89 | |||
90 | float buffer[XA_VB_SIZE]; |
||
91 | unsigned int buffer_size; |
||
92 | struct pipe_vertex_element velems[3]; |
||
93 | |||
94 | /* number of attributes per vertex for the current |
||
95 | * draw operation */ |
||
96 | unsigned int attrs_per_vertex; |
||
97 | |||
98 | unsigned int fb_width; |
||
99 | unsigned int fb_height; |
||
100 | |||
101 | struct pipe_fence_handle *last_fence; |
||
102 | struct xa_surface *src; |
||
103 | struct xa_surface *dst; |
||
104 | struct pipe_surface *srf; |
||
105 | |||
106 | int simple_copy; |
||
107 | |||
108 | int has_solid_color; |
||
109 | float solid_color[4]; |
||
110 | |||
111 | unsigned int num_bound_samplers; |
||
112 | struct pipe_sampler_view *bound_sampler_views[XA_MAX_SAMPLERS]; |
||
113 | const struct xa_composite *comp; |
||
114 | }; |
||
115 | |||
116 | enum xa_vs_traits { |
||
117 | VS_COMPOSITE = 1 << 0, |
||
118 | VS_MASK = 1 << 1, |
||
119 | VS_SOLID_FILL = 1 << 2, |
||
120 | VS_LINGRAD_FILL = 1 << 3, |
||
121 | VS_RADGRAD_FILL = 1 << 4, |
||
122 | VS_YUV = 1 << 5, |
||
123 | |||
124 | VS_FILL = (VS_SOLID_FILL | VS_LINGRAD_FILL | VS_RADGRAD_FILL) |
||
125 | }; |
||
126 | |||
127 | enum xa_fs_traits { |
||
128 | FS_COMPOSITE = 1 << 0, |
||
129 | FS_MASK = 1 << 1, |
||
130 | FS_SOLID_FILL = 1 << 2, |
||
131 | FS_LINGRAD_FILL = 1 << 3, |
||
132 | FS_RADGRAD_FILL = 1 << 4, |
||
133 | FS_CA_FULL = 1 << 5, /* src.rgba * mask.rgba */ |
||
134 | FS_CA_SRCALPHA = 1 << 6, /* src.aaaa * mask.rgba */ |
||
135 | FS_YUV = 1 << 7, |
||
136 | FS_SRC_REPEAT_NONE = 1 << 8, |
||
137 | FS_MASK_REPEAT_NONE = 1 << 9, |
||
138 | FS_SRC_SWIZZLE_RGB = 1 << 10, |
||
139 | FS_MASK_SWIZZLE_RGB = 1 << 11, |
||
140 | FS_SRC_SET_ALPHA = 1 << 12, |
||
141 | FS_MASK_SET_ALPHA = 1 << 13, |
||
142 | FS_SRC_LUMINANCE = 1 << 14, |
||
143 | FS_MASK_LUMINANCE = 1 << 15, |
||
144 | FS_DST_LUMINANCE = 1 << 16, |
||
145 | |||
146 | FS_FILL = (FS_SOLID_FILL | FS_LINGRAD_FILL | FS_RADGRAD_FILL), |
||
147 | FS_COMPONENT_ALPHA = (FS_CA_FULL | FS_CA_SRCALPHA) |
||
148 | }; |
||
149 | |||
150 | struct xa_shader { |
||
151 | void *fs; |
||
152 | void *vs; |
||
153 | }; |
||
154 | |||
155 | struct xa_shaders; |
||
156 | |||
157 | /* |
||
158 | * Inline utilities |
||
159 | */ |
||
160 | |||
161 | static INLINE int |
||
162 | xa_min(int a, int b) |
||
163 | { |
||
164 | return ((a <= b) ? a : b); |
||
165 | } |
||
166 | |||
167 | static INLINE void |
||
168 | xa_pixel_to_float4(uint32_t pixel, float *color) |
||
169 | { |
||
170 | uint32_t r, g, b, a; |
||
171 | |||
172 | a = (pixel >> 24) & 0xff; |
||
173 | r = (pixel >> 16) & 0xff; |
||
174 | g = (pixel >> 8) & 0xff; |
||
175 | b = (pixel >> 0) & 0xff; |
||
176 | color[0] = ((float)r) / 255.; |
||
177 | color[1] = ((float)g) / 255.; |
||
178 | color[2] = ((float)b) / 255.; |
||
179 | color[3] = ((float)a) / 255.; |
||
180 | } |
||
181 | |||
182 | static INLINE void |
||
183 | xa_pixel_to_float4_a8(uint32_t pixel, float *color) |
||
184 | { |
||
185 | uint32_t a; |
||
186 | |||
187 | a = (pixel >> 24) & 0xff; |
||
188 | color[0] = ((float)a) / 255.; |
||
189 | color[1] = ((float)a) / 255.; |
||
190 | color[2] = ((float)a) / 255.; |
||
191 | color[3] = ((float)a) / 255.; |
||
192 | } |
||
193 | |||
194 | /* |
||
195 | * xa_tgsi.c |
||
196 | */ |
||
197 | |||
198 | extern struct xa_shaders *xa_shaders_create(struct xa_context *); |
||
199 | |||
200 | void xa_shaders_destroy(struct xa_shaders *shaders); |
||
201 | |||
202 | struct xa_shader xa_shaders_get(struct xa_shaders *shaders, |
||
203 | unsigned vs_traits, unsigned fs_traits); |
||
204 | |||
205 | /* |
||
206 | * xa_context.c |
||
207 | */ |
||
208 | extern int |
||
209 | xa_ctx_srf_create(struct xa_context *ctx, struct xa_surface *dst); |
||
210 | |||
211 | extern void |
||
212 | xa_ctx_srf_destroy(struct xa_context *ctx); |
||
213 | |||
214 | extern void |
||
215 | xa_ctx_sampler_views_destroy(struct xa_context *ctx); |
||
216 | |||
217 | /* |
||
218 | * xa_renderer.c |
||
219 | */ |
||
220 | void renderer_set_constants(struct xa_context *r, |
||
221 | int shader_type, const float *params, |
||
222 | int param_bytes); |
||
223 | |||
224 | void renderer_draw_yuv(struct xa_context *r, |
||
225 | float src_x, |
||
226 | float src_y, |
||
227 | float src_w, |
||
228 | float src_h, |
||
229 | int dst_x, |
||
230 | int dst_y, int dst_w, int dst_h, |
||
231 | struct xa_surface *srf[]); |
||
232 | |||
233 | void renderer_bind_destination(struct xa_context *r, |
||
234 | struct pipe_surface *surface, int width, |
||
235 | int height); |
||
236 | |||
237 | void renderer_init_state(struct xa_context *r); |
||
238 | void renderer_copy_prepare(struct xa_context *r, |
||
239 | struct pipe_surface *dst_surface, |
||
240 | struct pipe_resource *src_texture, |
||
241 | const enum xa_formats src_xa_format, |
||
242 | const enum xa_formats dst_xa_format); |
||
243 | |||
244 | void renderer_copy(struct xa_context *r, int dx, |
||
245 | int dy, |
||
246 | int sx, |
||
247 | int sy, |
||
248 | int width, int height, float src_width, float src_height); |
||
249 | |||
250 | void renderer_draw_flush(struct xa_context *r); |
||
251 | |||
252 | void renderer_begin_solid(struct xa_context *r); |
||
253 | void renderer_solid(struct xa_context *r, |
||
254 | int x0, int y0, int x1, int y1, float *color); |
||
255 | void |
||
256 | renderer_begin_textures(struct xa_context *r); |
||
257 | |||
258 | void |
||
259 | renderer_texture(struct xa_context *r, |
||
260 | int *pos, |
||
261 | int width, int height, |
||
262 | const float *src_matrix, |
||
263 | const float *mask_matrix); |
||
264 | |||
265 | #endif=>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><> |