~ubuntu-branches/ubuntu/natty/mesa/natty-proposed

« back to all changes in this revision

Viewing changes to src/gallium/drivers/r300/r300_context.h

  • Committer: Bazaar Package Importer
  • Author(s): Robert Hooker, Robert Hooker, Christopher James Halse Rogers
  • Date: 2010-09-14 08:55:40 UTC
  • mfrom: (1.2.28 upstream)
  • Revision ID: james.westby@ubuntu.com-20100914085540-m4fpl0hdjlfd4jgz
Tags: 7.9~git20100909-0ubuntu1
[ Robert Hooker ]
* New upstream git snapshot up to commit 94118fe2d4b1e5 (LP: #631413)
* New features include ATI HD5xxx series support in r600, and a vastly
  improved glsl compiler.
* Remove pre-generated .pc's, use the ones generated at build time
  instead.
* Remove all references to mesa-utils now that its no longer shipped
  with the mesa source.
* Disable the experimental ARB_fragment_shader option by default on
  i915, it exposes incomplete functionality that breaks KDE compositing
  among other things. It can be enabled via driconf still. (LP: #628930).

[ Christopher James Halse Rogers ]
* debian/patches/04_osmesa_version.diff:
  - Refresh for new upstream
* Bugs fixed in this release:
  - Fixes severe rendering corruption in Unity on radeon (LP: #628727,
    LP: #596292, LP: #599741, LP: #630315, LP: #613694, LP: #599741).
  - Also fixes rendering in gnome-shell (LP: #578619).
  - Flickering in OpenGL apps on radeon (LP: #626943, LP: #610541).
  - Provides preliminary support for new intel chips (LP: #601052).
* debian/rules:
  - Update configure flags to match upstream reshuffling.
  - Explicitly remove gallium DRI drivers that we don't want to ship.
* Update debian/gbp.conf for this Maverick-specific packaging
* libegl1-mesa-dri-x11,kms: There are no longer separate kms or x11 drivers
  for EGL, libegl1-mesa-drivers now contains a single driver that provides
  both backends.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
#include "pipe/p_context.h"
31
31
#include "util/u_inlines.h"
32
 
 
 
32
#include "util/u_transfer.h"
 
33
 
 
34
#include "translate/translate_cache.h"
 
35
 
 
36
#include "r300_defines.h"
33
37
#include "r300_screen.h"
34
38
 
 
39
struct u_upload_mgr;
35
40
struct r300_context;
36
 
 
37
41
struct r300_fragment_shader;
38
42
struct r300_vertex_shader;
 
43
struct r300_stencilref_context;
39
44
 
40
45
struct r300_atom {
41
46
    /* List pointers. */
42
47
    struct r300_atom *prev, *next;
43
48
    /* Name, for debugging. */
44
49
    const char* name;
 
50
    /* Stat counter. */
 
51
    uint64_t counter;
45
52
    /* Opaque state. */
46
53
    void* state;
47
54
    /* Emit the state to the context. */
50
57
    unsigned size;
51
58
    /* Whether this atom should be emitted. */
52
59
    boolean dirty;
53
 
    /* Another dirty flag that is never automatically cleared. */
54
 
    boolean always_dirty;
 
60
    /* Whether this atom may be emitted with state == NULL. */
 
61
    boolean allow_null_state;
 
62
};
 
63
 
 
64
struct r300_aa_state {
 
65
    struct r300_surface *dest;
 
66
 
 
67
    uint32_t aa_config;
 
68
    uint32_t aaresolve_ctl;
55
69
};
56
70
 
57
71
struct r300_blend_state {
58
 
    uint32_t blend_control;       /* R300_RB3D_CBLEND: 0x4e04 */
59
 
    uint32_t alpha_blend_control; /* R300_RB3D_ABLEND: 0x4e08 */
60
 
    uint32_t color_channel_mask;  /* R300_RB3D_COLOR_CHANNEL_MASK: 0x4e0c */
61
 
    uint32_t rop;                 /* R300_RB3D_ROPCNTL: 0x4e18 */
62
 
    uint32_t dither;              /* R300_RB3D_DITHER_CTL: 0x4e50 */
 
72
    uint32_t cb[8];
 
73
    uint32_t cb_no_readwrite[8];
63
74
};
64
75
 
65
76
struct r300_blend_color_state {
66
 
    /* RV515 and earlier */
67
 
    uint32_t blend_color;            /* R300_RB3D_BLEND_COLOR: 0x4e10 */
68
 
    /* R520 and newer */
69
 
    uint32_t blend_color_red_alpha;  /* R500_RB3D_CONSTANT_COLOR_AR: 0x4ef8 */
70
 
    uint32_t blend_color_green_blue; /* R500_RB3D_CONSTANT_COLOR_GB: 0x4efc */
 
77
    uint32_t cb[3];
 
78
};
 
79
 
 
80
struct r300_clip_state {
 
81
    struct pipe_clip_state clip;
 
82
 
 
83
    uint32_t cb[29];
71
84
};
72
85
 
73
86
struct r300_dsa_state {
 
87
    struct pipe_depth_stencil_alpha_state dsa;
 
88
 
 
89
    /* This is actually a command buffer with named dwords. */
 
90
    uint32_t cb_begin;
74
91
    uint32_t alpha_function;    /* R300_FG_ALPHA_FUNC: 0x4bd4 */
75
 
    uint32_t alpha_reference;   /* R500_FG_ALPHA_VALUE: 0x4be0 */
 
92
    uint32_t cb_reg_seq;
76
93
    uint32_t z_buffer_control;  /* R300_ZB_CNTL: 0x4f00 */
77
94
    uint32_t z_stencil_control; /* R300_ZB_ZSTENCILCNTL: 0x4f04 */
78
95
    uint32_t stencil_ref_mask;  /* R300_ZB_STENCILREFMASK: 0x4f08 */
 
96
    uint32_t cb_reg;
79
97
    uint32_t stencil_ref_bf;    /* R500_ZB_STENCILREFMASK_BF: 0x4fd4 */
 
98
 
 
99
    /* The second command buffer disables zbuffer reads and writes. */
 
100
    uint32_t cb_no_readwrite[8];
 
101
 
 
102
    /* Whether a two-sided stencil is enabled. */
 
103
    boolean two_sided;
 
104
    /* Whether a fallback should be used for a two-sided stencil ref value. */
 
105
    boolean two_sided_stencil_ref;
 
106
};
 
107
 
 
108
struct r300_hyperz_state {
 
109
    int current_func; /* -1 after a clear before first op */
 
110
    int flush;
 
111
    /* This is actually a command buffer with named dwords. */
 
112
    uint32_t cb_flush_begin;
 
113
    uint32_t zb_zcache_ctlstat;     /* R300_ZB_CACHE_CNTL */
 
114
    uint32_t cb_begin;
 
115
    uint32_t zb_bw_cntl;            /* R300_ZB_BW_CNTL */
 
116
    uint32_t cb_reg1;
 
117
    uint32_t zb_depthclearvalue;    /* R300_ZB_DEPTHCLEARVALUE */
 
118
    uint32_t cb_reg2;
 
119
    uint32_t sc_hyperz;             /* R300_SC_HYPERZ */
 
120
    uint32_t cb_reg3;
 
121
    uint32_t gb_z_peq_config;       /* R300_GB_Z_PEQ_CONFIG: 0x4028 */
 
122
};
 
123
 
 
124
struct r300_gpu_flush {
 
125
    uint32_t cb_flush_clean[6];
80
126
};
81
127
 
82
128
struct r300_rs_state {
83
 
    /* Draw-specific rasterizer state */
 
129
    /* Original rasterizer state. */
84
130
    struct pipe_rasterizer_state rs;
85
 
 
86
 
    uint32_t vap_control_status;    /* R300_VAP_CNTL_STATUS: 0x2140 */
87
 
    uint32_t antialiasing_config;   /* R300_GB_AA_CONFIG: 0x4020 */
88
 
    uint32_t point_size;            /* R300_GA_POINT_SIZE: 0x421c */
89
 
    uint32_t line_control;          /* R300_GA_LINE_CNTL: 0x4234 */
90
 
    float depth_scale;            /* R300_SU_POLY_OFFSET_FRONT_SCALE: 0x42a4 */
91
 
                                  /* R300_SU_POLY_OFFSET_BACK_SCALE: 0x42ac */
92
 
    float depth_offset;           /* R300_SU_POLY_OFFSET_FRONT_OFFSET: 0x42a8 */
93
 
                                  /* R300_SU_POLY_OFFSET_BACK_OFFSET: 0x42b0 */
94
 
    uint32_t polygon_offset_enable; /* R300_SU_POLY_OFFSET_ENABLE: 0x42b4 */
95
 
    uint32_t cull_mode;             /* R300_SU_CULL_MODE: 0x42b8 */
96
 
    uint32_t line_stipple_config;   /* R300_GA_LINE_STIPPLE_CONFIG: 0x4328 */
97
 
    uint32_t line_stipple_value;    /* R300_GA_LINE_STIPPLE_VALUE: 0x4260 */
 
131
    /* Draw-specific rasterizer state. */
 
132
    struct pipe_rasterizer_state rs_draw;
 
133
 
 
134
    /* Command buffers. */
 
135
    uint32_t cb_main[25];
 
136
    uint32_t cb_poly_offset_zb16[5];
 
137
    uint32_t cb_poly_offset_zb24[5];
 
138
 
 
139
    /* The index to cb_main where the cull_mode register value resides. */
 
140
    unsigned cull_mode_index;
 
141
 
 
142
    /* Whether polygon offset is enabled. */
 
143
    boolean polygon_offset_enable;
 
144
 
 
145
    /* This is emitted in the draw function. */
98
146
    uint32_t color_control;         /* R300_GA_COLOR_CONTROL: 0x4278 */
99
 
    uint32_t polygon_mode;          /* R300_GA_POLY_MODE: 0x4288 */
100
147
};
101
148
 
102
149
struct r300_rs_block {
 
150
    uint32_t vap_vtx_state_cntl;  /* R300_VAP_VTX_STATE_CNTL: 0x2180 */
 
151
    uint32_t vap_vsm_vtx_assm;    /* R300_VAP_VSM_VTX_ASSM: 0x2184 */
 
152
    uint32_t vap_out_vtx_fmt[2];  /* R300_VAP_OUTPUT_VTX_FMT_[0-1]: 0x2090 */
 
153
 
103
154
    uint32_t ip[8]; /* R300_RS_IP_[0-7], R500_RS_IP_[0-7] */
104
155
    uint32_t count; /* R300_RS_COUNT */
105
156
    uint32_t inst_count; /* R300_RS_INST_COUNT */
122
173
    uint32_t format0; /* R300_TX_FORMAT0: 0x4480 */
123
174
    uint32_t format1; /* R300_TX_FORMAT1: 0x44c0 */
124
175
    uint32_t format2; /* R300_TX_FORMAT2: 0x4500 */
 
176
    uint32_t tile_config; /* R300_TX_OFFSET (subset thereof) */
 
177
};
 
178
 
 
179
struct r300_sampler_view {
 
180
    struct pipe_sampler_view base;
 
181
 
 
182
    /* Swizzles in the UTIL_FORMAT_SWIZZLE_* representation,
 
183
     * derived from base. */
 
184
    unsigned char swizzle[4];
 
185
 
 
186
    /* Copy of r300_texture::texture_format_state with format-specific bits
 
187
     * added. */
 
188
    struct r300_texture_format_state format;
 
189
 
 
190
    /* The texture cache region for this texture. */
 
191
    uint32_t texcache_region;
125
192
};
126
193
 
127
194
struct r300_texture_fb_state {
128
 
    /* Colorbuffer. */
129
 
    uint32_t colorpitch[PIPE_MAX_TEXTURE_LEVELS]; /* R300_RB3D_COLORPITCH[0-3]*/
130
 
    uint32_t us_out_fmt; /* R300_US_OUT_FMT[0-3] */
 
195
    uint32_t pitch[R300_MAX_TEXTURE_LEVELS]; /* COLORPITCH or DEPTHPITCH. */
 
196
    uint32_t format; /* US_OUT_FMT or R300_ZB_FORMAT */
 
197
};
131
198
 
132
 
    /* Zbuffer. */
133
 
    uint32_t depthpitch[PIPE_MAX_TEXTURE_LEVELS]; /* R300_RB3D_DEPTHPITCH */
134
 
    uint32_t zb_format; /* R300_ZB_FORMAT */
 
199
struct r300_texture_sampler_state {
 
200
    struct r300_texture_format_state format;
 
201
    uint32_t filter0;      /* R300_TX_FILTER0: 0x4400 */
 
202
    uint32_t filter1;      /* R300_TX_FILTER1: 0x4440 */
 
203
    uint32_t border_color;  /* R300_TX_BORDER_COLOR: 0x45c0 */
135
204
};
136
205
 
137
206
struct r300_textures_state {
138
207
    /* Textures. */
139
 
    struct r300_texture *textures[8];
140
 
    int texture_count;
 
208
    struct r300_sampler_view *sampler_views[16];
 
209
    int sampler_view_count;
141
210
    /* Sampler states. */
142
 
    struct r300_sampler_state *sampler_states[8];
143
 
    int sampler_count;
 
211
    struct r300_sampler_state *sampler_states[16];
 
212
    int sampler_state_count;
144
213
 
145
 
    /* These is the merge of the texture and sampler states. */
 
214
    /* This is the merge of the texture and sampler states. */
146
215
    unsigned count;
147
216
    uint32_t tx_enable;         /* R300_TX_ENABLE: 0x4101 */
148
 
    struct r300_texture_sampler_state {
149
 
        uint32_t format[3];     /* R300_TX_FORMAT[0-2] */
150
 
        uint32_t filter[2];     /* R300_TX_FILTER[0-1] */
151
 
        uint32_t border_color;  /* R300_TX_BORDER_COLOR: 0x45c0 */
152
 
        uint32_t tile_config;   /* R300_TX_OFFSET (subset thereof) */
153
 
    } regs[8];
 
217
    struct r300_texture_sampler_state regs[16];
154
218
};
155
219
 
156
220
struct r300_vertex_stream_state {
162
226
    unsigned count;
163
227
};
164
228
 
165
 
struct r300_vap_output_state {
166
 
    uint32_t vap_vtx_state_cntl;  /* R300_VAP_VTX_STATE_CNTL: 0x2180 */
167
 
    uint32_t vap_vsm_vtx_assm;    /* R300_VAP_VSM_VTX_ASSM: 0x2184 */
168
 
    uint32_t vap_out_vtx_fmt[2];  /* R300_VAP_OUTPUT_VTX_FMT_[0-1]: 0x2090 */
 
229
struct r300_invariant_state {
 
230
    uint32_t cb[20];
 
231
};
 
232
 
 
233
struct r300_vap_invariant_state {
 
234
    uint32_t cb[9];
169
235
};
170
236
 
171
237
struct r300_viewport_state {
182
248
    uint32_t z_buffer_top;      /* R300_ZB_ZTOP: 0x4f14 */
183
249
};
184
250
 
185
 
#define R300_NEW_FRAGMENT_SHADER 0x00000020
186
 
#define R300_NEW_FRAGMENT_SHADER_CONSTANTS    0x00000040
187
 
#define R300_NEW_VERTEX_SHADER_CONSTANTS    0x10000000
188
 
#define R300_NEW_QUERY           0x40000000
189
 
#define R300_NEW_KITCHEN_SINK    0x7fffffff
190
 
 
191
251
/* The next several objects are not pure Radeon state; they inherit from
192
252
 * various Gallium classes. */
193
253
 
194
254
struct r300_constant_buffer {
195
255
    /* Buffer of constants */
196
 
    float constants[256][4];
197
 
    /* Total number of constants */
198
 
    unsigned count;
 
256
    uint32_t *ptr;
 
257
    /* Remapping table. */
 
258
    unsigned *remap_table;
199
259
};
200
260
 
201
261
/* Query object.
208
268
struct r300_query {
209
269
    /* The kind of query. Currently only OQ is supported. */
210
270
    unsigned type;
211
 
    /* Whether this query is currently active. Only active queries will
212
 
     * get emitted into the command stream, and only active queries get
213
 
     * tallied. */
214
 
    boolean active;
215
 
    /* The current count of this query. Required to be at least 32 bits. */
216
 
    unsigned int count;
217
 
    /* The offset of this query into the query buffer, in bytes. */
218
 
    unsigned offset;
 
271
    /* The number of pipes where query results are stored. */
 
272
    unsigned num_pipes;
 
273
    /* How many results have been written, in dwords. It's incremented
 
274
     * after end_query and flush. */
 
275
    unsigned num_results;
219
276
    /* if we've flushed the query */
220
277
    boolean flushed;
221
278
    /* if begin has been emitted */
222
279
    boolean begin_emitted;
 
280
 
 
281
    /* The buffer where query results are stored. */
 
282
    struct r300_winsys_buffer *buffer;
 
283
    /* The size of the buffer. */
 
284
    unsigned buffer_size;
 
285
    /* The domain of the buffer. */
 
286
    enum r300_buffer_domain domain;
 
287
 
223
288
    /* Linked list members. */
224
289
    struct r300_query* prev;
225
290
    struct r300_query* next;
226
291
};
227
292
 
228
 
enum r300_buffer_tiling {
229
 
    R300_BUFFER_LINEAR = 0,
230
 
    R300_BUFFER_TILED,
231
 
    R300_BUFFER_SQUARETILED
232
 
};
233
 
 
234
 
struct r300_texture {
235
 
    /* Parent class */
236
 
    struct pipe_texture tex;
 
293
/* Fence object.
 
294
 *
 
295
 * This is a fake fence. Instead of syncing with the fence, we sync
 
296
 * with the context, which is inefficient but compliant.
 
297
 *
 
298
 * This is not a subclass of pipe_fence_handle because pipe_fence_handle is
 
299
 * never actually fully defined. So, rather than have it as a member, and do
 
300
 * subclass-style casting, we treat pipe_fence_handle as an opaque, and just
 
301
 * trust that our state tracker does not ever mess up fence objects.
 
302
 */
 
303
struct r300_fence {
 
304
    struct pipe_reference reference;
 
305
    struct r300_context *ctx;
 
306
    boolean signalled;
 
307
};
 
308
 
 
309
struct r300_surface {
 
310
    struct pipe_surface base;
 
311
 
 
312
    /* Winsys buffer backing the texture. */
 
313
    struct r300_winsys_buffer *buffer;
 
314
 
 
315
    enum r300_buffer_domain domain;
 
316
 
 
317
    uint32_t offset;    /* COLOROFFSET or DEPTHOFFSET. */
 
318
    uint32_t pitch;     /* COLORPITCH or DEPTHPITCH. */
 
319
    uint32_t format;    /* US_OUT_FMT or ZB_FORMAT. */
 
320
 
 
321
    /* Parameters dedicated to the CBZB clear. */
 
322
    uint32_t cbzb_width;            /* Aligned width. */
 
323
    uint32_t cbzb_height;           /* Half of the height. */
 
324
    uint32_t cbzb_midpoint_offset;  /* DEPTHOFFSET. */
 
325
    uint32_t cbzb_pitch;            /* DEPTHPITCH. */
 
326
    uint32_t cbzb_format;           /* ZB_FORMAT. */
 
327
 
 
328
    /* Whether the CBZB clear is allowed on the surface. */
 
329
    boolean cbzb_allowed;
 
330
 
 
331
};
 
332
 
 
333
struct r300_texture_desc {
 
334
    /* Parent class. */
 
335
    struct u_resource b;
 
336
 
 
337
    /* Buffer tiling.
 
338
     * Macrotiling is specified per-level because small mipmaps cannot
 
339
     * be macrotiled. */
 
340
    enum r300_buffer_tiling microtile;
 
341
    enum r300_buffer_tiling macrotile[R300_MAX_TEXTURE_LEVELS];
237
342
 
238
343
    /* Offsets into the buffer. */
239
 
    unsigned offset[PIPE_MAX_TEXTURE_LEVELS];
240
 
 
241
 
    /* A pitch for each mip-level */
242
 
    unsigned pitch[PIPE_MAX_TEXTURE_LEVELS];
243
 
 
244
 
    /* Size of one zslice or face based on the texture target */
245
 
    unsigned layer_size[PIPE_MAX_TEXTURE_LEVELS];
246
 
 
247
 
    /* Whether the mipmap level is macrotiled. */
248
 
    enum r300_buffer_tiling mip_macrotile[PIPE_MAX_TEXTURE_LEVELS];
 
344
    unsigned offset_in_bytes[R300_MAX_TEXTURE_LEVELS];
 
345
 
 
346
    /* Strides for each mip-level. */
 
347
    unsigned stride_in_pixels[R300_MAX_TEXTURE_LEVELS];
 
348
    unsigned stride_in_bytes[R300_MAX_TEXTURE_LEVELS];
 
349
 
 
350
    /* Size of one zslice or face or 2D image based on the texture target. */
 
351
    unsigned layer_size_in_bytes[R300_MAX_TEXTURE_LEVELS];
 
352
 
 
353
    /* Total size of this texture, in bytes,
 
354
     * derived from the texture properties. */
 
355
    unsigned size_in_bytes;
 
356
 
 
357
    /* Total size of the buffer backing this texture, in bytes.
 
358
     * It must be >= size. */
 
359
    unsigned buffer_size_in_bytes;
249
360
 
250
361
    /**
251
362
     * If non-zero, override the natural texture layout with
255
366
     *
256
367
     * \sa r300_texture_get_stride
257
368
     */
258
 
    unsigned stride_override;
259
 
 
260
 
    /* Total size of this texture, in bytes. */
261
 
    unsigned size;
 
369
    unsigned stride_in_bytes_override;
262
370
 
263
371
    /* Whether this texture has non-power-of-two dimensions.
264
 
     * It can be either a regular texture or a rectangle one.
265
 
     */
 
372
     * It can be either a regular texture or a rectangle one. */
266
373
    boolean is_npot;
267
374
 
 
375
    /* This flag says that hardware must use the stride for addressing
 
376
     * instead of the width. */
 
377
    boolean uses_stride_addressing;
 
378
 
 
379
    /* Whether CBZB fast color clear is allowed on the miplevel. */
 
380
    boolean cbzb_allowed[R300_MAX_TEXTURE_LEVELS];
 
381
};
 
382
 
 
383
struct r300_texture {
 
384
    struct r300_texture_desc desc;
 
385
 
 
386
    enum r300_buffer_domain domain;
 
387
 
268
388
    /* Pipe buffer backing this texture. */
269
 
    struct pipe_buffer* buffer;
 
389
    struct r300_winsys_buffer *buffer;
270
390
 
271
391
    /* Registers carrying texture format data. */
272
 
    struct r300_texture_format_state state;
 
392
    /* Only format-independent bits should be filled in. */
 
393
    struct r300_texture_format_state tx_format;
 
394
    /* All bits should be filled in. */
273
395
    struct r300_texture_fb_state fb_state;
274
396
 
275
 
    /* Buffer tiling */
276
 
    enum r300_buffer_tiling microtile, macrotile;
277
 
};
278
 
 
279
 
extern struct pipe_viewport_state r300_viewport_identity;
 
397
    /* hyper-z memory allocs */
 
398
    struct mem_block *hiz_mem[R300_MAX_TEXTURE_LEVELS];
 
399
    struct mem_block *zmask_mem[R300_MAX_TEXTURE_LEVELS];
 
400
    boolean zmask_in_use[R300_MAX_TEXTURE_LEVELS];
 
401
    boolean hiz_in_use[R300_MAX_TEXTURE_LEVELS];
 
402
 
 
403
    /* This is the level tiling flags were last time set for.
 
404
     * It's used to prevent redundant tiling-flags changes from happening.*/
 
405
    unsigned surface_level;
 
406
};
 
407
 
 
408
struct r300_vertex_element_state {
 
409
    unsigned count;
 
410
    struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS];
 
411
 
 
412
    /* If (velem[i].src_format != hw_format[i]), the vertex buffer
 
413
     * referenced by this vertex element cannot be used for rendering and
 
414
     * its vertex data must be translated to hw_format[i]. */
 
415
    enum pipe_format hw_format[PIPE_MAX_ATTRIBS];
 
416
    unsigned hw_format_size[PIPE_MAX_ATTRIBS];
 
417
 
 
418
    /* The size of the vertex, in dwords. */
 
419
    unsigned vertex_size_dwords;
 
420
 
 
421
    /* This might mean two things:
 
422
     * - src_format != hw_format, as discussed above.
 
423
     * - src_offset % 4 != 0. */
 
424
    boolean incompatible_layout;
 
425
 
 
426
    struct r300_vertex_stream_state vertex_stream;
 
427
};
 
428
 
 
429
struct r300_translate_context {
 
430
    /* Translate cache for incompatible vertex offset/stride/format fallback. */
 
431
    struct translate_cache *translate_cache;
 
432
 
 
433
    /* The vertex buffer slot containing the translated buffer. */
 
434
    unsigned vb_slot;
 
435
 
 
436
    /* Saved and new vertex element state. */
 
437
    void *saved_velems, *new_velems;
 
438
};
280
439
 
281
440
struct r300_context {
282
441
    /* Parent class */
283
442
    struct pipe_context context;
284
443
 
285
444
    /* The interface to the windowing system, etc. */
286
 
    struct radeon_winsys* winsys;
 
445
    struct r300_winsys_screen *rws;
 
446
    /* The command stream. */
 
447
    struct r300_winsys_cs *cs;
 
448
    /* Screen. */
 
449
    struct r300_screen *screen;
287
450
    /* Draw module. Used mostly for SW TCL. */
288
451
    struct draw_context* draw;
 
452
    size_t draw_vbo_size;
289
453
    /* Accelerated blit support. */
290
454
    struct blitter_context* blitter;
 
455
    /* Stencil two-sided reference value fallback. */
 
456
    struct r300_stencilref_context *stencilref_fallback;
 
457
    /* For translating vertex buffers having incompatible vertex layout. */
 
458
    struct r300_translate_context tran;
291
459
 
292
460
    /* Vertex buffer for rendering. */
293
 
    struct pipe_buffer* vbo;
 
461
    struct pipe_resource* vbo;
 
462
    /* The KIL opcode needs the first texture unit to be enabled
 
463
     * on r3xx-r4xx. In order to calm down the CS checker, we bind this
 
464
     * dummy texture there. */
 
465
    struct r300_sampler_view *texkill_sampler;
294
466
    /* Offset into the VBO. */
295
467
    size_t vbo_offset;
296
468
 
297
 
    /* Occlusion query buffer. */
298
 
    struct pipe_buffer* oqbo;
 
469
    /* The currently active query. */
 
470
    struct r300_query *query_current;
 
471
    /* The saved query for blitter operations. */
 
472
    struct r300_query *blitter_saved_query;
299
473
    /* Query list. */
300
 
    struct r300_query *query_current;
301
474
    struct r300_query query_list;
302
475
 
303
476
    /* Various CSO state objects. */
304
477
    /* Beginning of atom list. */
305
478
    struct r300_atom atom_list;
 
479
    /* Anti-aliasing (MSAA) state. */
 
480
    struct r300_atom aa_state;
306
481
    /* Blend state. */
307
482
    struct r300_atom blend_state;
308
483
    /* Blend color state. */
309
484
    struct r300_atom blend_color_state;
310
485
    /* User clip planes. */
311
486
    struct r300_atom clip_state;
312
 
    /* Shader constants. */
313
 
    struct r300_constant_buffer shader_constants[PIPE_SHADER_TYPES];
314
487
    /* Depth, stencil, and alpha state. */
315
488
    struct r300_atom dsa_state;
316
489
    /* Fragment shader. */
317
 
    struct r300_fragment_shader* fs;
 
490
    struct r300_atom fs;
 
491
    /* Fragment shader RC_CONSTANT_STATE variables. */
 
492
    struct r300_atom fs_rc_constant_state;
 
493
    /* Fragment shader constant buffer. */
 
494
    struct r300_atom fs_constants;
318
495
    /* Framebuffer state. */
319
496
    struct r300_atom fb_state;
 
497
    /* Framebuffer state (pipelined regs). */
 
498
    struct r300_atom fb_state_pipelined;
 
499
    /* HyperZ state (various SC/ZB bits). */
 
500
    struct r300_atom hyperz_state;
 
501
    /* Occlusion query. */
 
502
    struct r300_atom query_start;
320
503
    /* Rasterizer state. */
321
504
    struct r300_atom rs_state;
322
 
    /* RS block state. */
 
505
    /* RS block state + VAP (vertex shader) output mapping state. */
323
506
    struct r300_atom rs_block_state;
324
507
    /* Scissor state. */
325
508
    struct r300_atom scissor_state;
327
510
    struct r300_atom textures_state;
328
511
    /* Vertex stream formatting state. */
329
512
    struct r300_atom vertex_stream_state;
330
 
    /* VAP (vertex shader) output mapping state. */
331
 
    struct r300_atom vap_output_state;
332
513
    /* Vertex shader. */
333
514
    struct r300_atom vs_state;
 
515
    /* Vertex shader constant buffer. */
 
516
    struct r300_atom vs_constants;
334
517
    /* Viewport state. */
335
518
    struct r300_atom viewport_state;
336
519
    /* ZTOP state. */
337
520
    struct r300_atom ztop_state;
338
521
    /* PVS flush. */
339
522
    struct r300_atom pvs_flush;
 
523
    /* VAP invariant state. */
 
524
    struct r300_atom vap_invariant_state;
340
525
    /* Texture cache invalidate. */
341
526
    struct r300_atom texture_cache_inval;
 
527
    /* GPU flush. */
 
528
    struct r300_atom gpu_flush;
 
529
    /* HiZ clear */
 
530
    struct r300_atom hiz_clear;
 
531
    /* zmask clear */
 
532
    struct r300_atom zmask_clear;
342
533
 
343
534
    /* Invariant state. This must be emitted to get the engine started. */
344
535
    struct r300_atom invariant_state;
348
539
    int vertex_buffer_count;
349
540
    int vertex_buffer_max_index;
350
541
    /* Vertex elements for Gallium. */
351
 
    struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];
352
 
    int vertex_element_count;
 
542
    struct r300_vertex_element_state *velems;
 
543
    bool any_user_vbs;
 
544
 
 
545
    struct pipe_index_buffer index_buffer;
353
546
 
354
547
    /* Vertex info for Draw. */
355
548
    struct vertex_info vertex_info;
356
549
 
357
550
    struct pipe_stencil_ref stencil_ref;
358
 
 
359
 
    struct pipe_clip_state clip;
360
 
 
361
551
    struct pipe_viewport_state viewport;
362
552
 
363
 
    /* Bitmask of dirty state objects. */
364
 
    uint32_t dirty_state;
 
553
    /* Stream locations for SWTCL. */
 
554
    int stream_loc_notcl[16];
 
555
 
365
556
    /* Flag indicating whether or not the HW is dirty. */
366
557
    uint32_t dirty_hw;
367
558
    /* Whether polygon offset is enabled. */
368
559
    boolean polygon_offset_enabled;
369
560
    /* Z buffer bit depth. */
370
561
    uint32_t zbuffer_bpp;
 
562
    /* Whether rendering is conditional and should be skipped. */
 
563
    boolean skip_rendering;
 
564
    /* Point sprites texcoord index,  1 bit per texcoord */
 
565
    int sprite_coord_enable;
 
566
    /* Whether two-sided color selection is enabled (AKA light_twoside). */
 
567
    boolean two_sided_color;
 
568
    /* Incompatible vertex buffer layout? (misaligned stride or buffer_offset) */
 
569
    boolean incompatible_vb_layout;
 
570
#define R300_Z_COMPRESS_44 1
 
571
#define RV350_Z_COMPRESS_88 2
 
572
    int z_compression;
 
573
    boolean cbzb_clear;
 
574
    boolean z_decomp_rd;
 
575
 
 
576
    /* two mem block managers for hiz/zmask ram space */
 
577
    struct mem_block *hiz_mm;
 
578
    struct mem_block *zmask_mm;
 
579
 
 
580
    /* upload managers */
 
581
    struct u_upload_mgr *upload_vb;
 
582
    struct u_upload_mgr *upload_ib;
 
583
 
 
584
    struct util_mempool pool_transfers;
 
585
 
 
586
    /* Stat counter. */
 
587
    uint64_t flush_counter;
371
588
};
372
589
 
373
 
/* Convenience cast wrapper. */
 
590
/* Convenience cast wrappers. */
 
591
static INLINE struct r300_query* r300_query(struct pipe_query* q)
 
592
{
 
593
    return (struct r300_query*)q;
 
594
}
 
595
 
 
596
static INLINE struct r300_surface* r300_surface(struct pipe_surface* surf)
 
597
{
 
598
    return (struct r300_surface*)surf;
 
599
}
 
600
 
 
601
static INLINE struct r300_texture* r300_texture(struct pipe_resource* tex)
 
602
{
 
603
    return (struct r300_texture*)tex;
 
604
}
 
605
 
374
606
static INLINE struct r300_context* r300_context(struct pipe_context* context)
375
607
{
376
608
    return (struct r300_context*)context;
377
609
}
378
610
 
 
611
static INLINE struct r300_fragment_shader *r300_fs(struct r300_context *r300)
 
612
{
 
613
    return (struct r300_fragment_shader*)r300->fs.state;
 
614
}
379
615
 
380
616
struct pipe_context* r300_create_context(struct pipe_screen* screen,
381
617
                                         void *priv);
382
618
 
 
619
void r300_finish(struct r300_context *r300);
 
620
void r300_flush_cb(void *data);
 
621
 
383
622
/* Context initialization. */
384
623
struct draw_stage* r300_draw_stage(struct r300_context* r300);
 
624
void r300_init_blit_functions(struct r300_context *r300);
 
625
void r300_init_flush_functions(struct r300_context* r300);
 
626
void r300_init_query_functions(struct r300_context* r300);
 
627
void r300_init_render_functions(struct r300_context *r300);
385
628
void r300_init_state_functions(struct r300_context* r300);
386
 
void r300_init_surface_functions(struct r300_context* r300);
 
629
void r300_init_resource_functions(struct r300_context* r300);
 
630
 
 
631
/* r300_blit.c */
 
632
void r300_flush_depth_stencil(struct pipe_context *pipe,
 
633
                              struct pipe_resource *dst,
 
634
                              struct pipe_subresource subdst,
 
635
                              unsigned zslice);
 
636
 
 
637
/* r300_query.c */
 
638
void r300_resume_query(struct r300_context *r300,
 
639
                       struct r300_query *query);
 
640
void r300_stop_query(struct r300_context *r300);
 
641
 
 
642
/* r300_render_translate.c */
 
643
void r300_begin_vertex_translate(struct r300_context *r300);
 
644
void r300_end_vertex_translate(struct r300_context *r300);
 
645
void r300_translate_index_buffer(struct r300_context *r300,
 
646
                                 struct pipe_resource **index_buffer,
 
647
                                 unsigned *index_size, unsigned index_offset,
 
648
                                 unsigned *start, unsigned count);
 
649
 
 
650
/* r300_render_stencilref.c */
 
651
void r300_plug_in_stencil_ref_fallback(struct r300_context *r300);
 
652
 
 
653
/* r300_render.c */
 
654
void r300_draw_flush_vbuf(struct r300_context *r300);
 
655
boolean r500_index_bias_supported(struct r300_context *r300);
 
656
void r500_emit_index_bias(struct r300_context *r300, int index_bias);
 
657
 
 
658
/* r300_state.c */
 
659
enum r300_fb_state_change {
 
660
    R300_CHANGED_FB_STATE = 0,
 
661
    R300_CHANGED_CBZB_FLAG,
 
662
    R300_CHANGED_ZCLEAR_FLAG
 
663
};
 
664
 
 
665
void r300_mark_fb_state_dirty(struct r300_context *r300,
 
666
                              enum r300_fb_state_change change);
 
667
void r300_mark_fs_code_dirty(struct r300_context *r300);
 
668
 
 
669
/* r300_debug.c */
 
670
void r500_dump_rs_block(struct r300_rs_block *rs);
 
671
 
387
672
 
388
673
static INLINE boolean CTX_DBG_ON(struct r300_context * ctx, unsigned flags)
389
674
{
390
 
    return SCREEN_DBG_ON(r300_screen(ctx->context.screen), flags);
 
675
    return SCREEN_DBG_ON(ctx->screen, flags);
391
676
}
392
677
 
393
678
static INLINE void CTX_DBG(struct r300_context * ctx, unsigned flags,
396
681
    if (CTX_DBG_ON(ctx, flags)) {
397
682
        va_list va;
398
683
        va_start(va, fmt);
399
 
        debug_vprintf(fmt, va);
 
684
        vfprintf(stderr, fmt, va);
400
685
        va_end(va);
401
686
    }
402
687
}
405
690
#define DBG     CTX_DBG
406
691
 
407
692
#endif /* R300_CONTEXT_H */
408