~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/gallium/state_trackers/xa/xa_priv.h

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
#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