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

« back to all changes in this revision

Viewing changes to src/mesa/drivers/dri/r600/r600_blit.c

  • 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 (C) 2009 Advanced Micro Devices, Inc.
3
 
 *
4
 
 * All Rights Reserved.
5
 
 *
6
 
 * Permission is hereby granted, free of charge, to any person obtaining
7
 
 * a copy of this software and associated documentation files (the
8
 
 * "Software"), to deal in the Software without restriction, including
9
 
 * without limitation the rights to use, copy, modify, merge, publish,
10
 
 * distribute, sublicense, and/or sell copies of the Software, and to
11
 
 * permit persons to whom the Software is furnished to do so, subject to
12
 
 * the following conditions:
13
 
 *
14
 
 * The above copyright notice and this permission notice (including the
15
 
 * next paragraph) shall be included in all copies or substantial
16
 
 * portions of the Software.
17
 
 *
18
 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
 
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
 
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21
 
 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22
 
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
 
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
 
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
 
 *
26
 
 */
27
 
 
28
 
#include "radeon_common.h"
29
 
#include "r600_context.h"
30
 
 
31
 
#include "r600_blit.h"
32
 
#include "r600_blit_shaders.h"
33
 
#include "r600_cmdbuf.h"
34
 
 
35
 
/* common formats supported as both textures and render targets */
36
 
unsigned r600_check_blit(gl_format mesa_format)
37
 
{
38
 
    switch (mesa_format) {
39
 
    case MESA_FORMAT_RGBA8888:
40
 
    case MESA_FORMAT_SIGNED_RGBA8888:
41
 
    case MESA_FORMAT_RGBA8888_REV:
42
 
    case MESA_FORMAT_SIGNED_RGBA8888_REV:
43
 
    case MESA_FORMAT_ARGB8888:
44
 
    case MESA_FORMAT_XRGB8888:
45
 
    case MESA_FORMAT_ARGB8888_REV:
46
 
    case MESA_FORMAT_XRGB8888_REV:
47
 
    case MESA_FORMAT_RGB565:
48
 
    case MESA_FORMAT_RGB565_REV:
49
 
    case MESA_FORMAT_ARGB4444:
50
 
    case MESA_FORMAT_ARGB4444_REV:
51
 
    case MESA_FORMAT_ARGB1555:
52
 
    case MESA_FORMAT_ARGB1555_REV:
53
 
    case MESA_FORMAT_AL88:
54
 
    case MESA_FORMAT_AL88_REV:
55
 
    case MESA_FORMAT_RGB332:
56
 
    case MESA_FORMAT_A8:
57
 
    case MESA_FORMAT_I8:
58
 
    case MESA_FORMAT_CI8:
59
 
    case MESA_FORMAT_L8:
60
 
    case MESA_FORMAT_RGBA_FLOAT32:
61
 
    case MESA_FORMAT_RGBA_FLOAT16:
62
 
    case MESA_FORMAT_ALPHA_FLOAT32:
63
 
    case MESA_FORMAT_ALPHA_FLOAT16:
64
 
    case MESA_FORMAT_LUMINANCE_FLOAT32:
65
 
    case MESA_FORMAT_LUMINANCE_FLOAT16:
66
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
67
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
68
 
    case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
69
 
    case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
70
 
    case MESA_FORMAT_X8_Z24:
71
 
    case MESA_FORMAT_S8_Z24:
72
 
    case MESA_FORMAT_Z24_S8:
73
 
    case MESA_FORMAT_Z16:
74
 
    case MESA_FORMAT_Z32:
75
 
    case MESA_FORMAT_SARGB8:
76
 
    case MESA_FORMAT_SLA8:
77
 
    case MESA_FORMAT_SL8:
78
 
            break;
79
 
    default:
80
 
            return 0;
81
 
    }
82
 
 
83
 
    /* ??? */
84
 
    /* not sure blit to depth works or not yet */
85
 
    if (_mesa_get_format_bits(mesa_format, GL_DEPTH_BITS) > 0)
86
 
            return 0;
87
 
 
88
 
    return 1;
89
 
}
90
 
 
91
 
static inline void
92
 
set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_format,
93
 
                  int nPitchInPixel, int w, int h, intptr_t dst_offset)
94
 
{
95
 
    uint32_t cb_color0_base, cb_color0_size = 0, cb_color0_info = 0, cb_color0_view = 0;
96
 
    int id = 0;
97
 
    uint32_t endian, comp_swap, format;
98
 
    BATCH_LOCALS(&context->radeon);
99
 
 
100
 
    cb_color0_base = dst_offset / 256;
101
 
        endian = ENDIAN_NONE;
102
 
 
103
 
    SETfield(cb_color0_size, (nPitchInPixel / 8) - 1,
104
 
             PITCH_TILE_MAX_shift, PITCH_TILE_MAX_mask);
105
 
    SETfield(cb_color0_size, ((nPitchInPixel * h) / 64) - 1,
106
 
             SLICE_TILE_MAX_shift, SLICE_TILE_MAX_mask);
107
 
 
108
 
    SETfield(cb_color0_info, ARRAY_LINEAR_GENERAL,
109
 
             CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
110
 
 
111
 
    SETbit(cb_color0_info, BLEND_BYPASS_bit);
112
 
 
113
 
    switch(mesa_format) {
114
 
    case MESA_FORMAT_RGBA8888:
115
 
#ifdef MESA_BIG_ENDIAN
116
 
                        endian = ENDIAN_8IN32;
117
 
#endif
118
 
            format = COLOR_8_8_8_8;
119
 
            comp_swap = SWAP_STD_REV;
120
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
121
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
122
 
            break;
123
 
    case MESA_FORMAT_SIGNED_RGBA8888:
124
 
#ifdef MESA_BIG_ENDIAN
125
 
                        endian = ENDIAN_8IN32;
126
 
#endif
127
 
            format = COLOR_8_8_8_8;
128
 
            comp_swap = SWAP_STD_REV;
129
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
130
 
            SETfield(cb_color0_info, NUMBER_SNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
131
 
            break;
132
 
    case MESA_FORMAT_RGBA8888_REV:
133
 
#ifdef MESA_BIG_ENDIAN
134
 
                        endian = ENDIAN_8IN32;
135
 
#endif
136
 
            format = COLOR_8_8_8_8;
137
 
            comp_swap = SWAP_STD;
138
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
139
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
140
 
            break;
141
 
    case MESA_FORMAT_SIGNED_RGBA8888_REV:
142
 
#ifdef MESA_BIG_ENDIAN
143
 
                        endian = ENDIAN_8IN32;
144
 
#endif
145
 
            format = COLOR_8_8_8_8;
146
 
            comp_swap = SWAP_STD;
147
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
148
 
            SETfield(cb_color0_info, NUMBER_SNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
149
 
            break;
150
 
    case MESA_FORMAT_ARGB8888:
151
 
    case MESA_FORMAT_XRGB8888:
152
 
#ifdef MESA_BIG_ENDIAN
153
 
                        endian = ENDIAN_8IN32;
154
 
#endif
155
 
            format = COLOR_8_8_8_8;
156
 
            comp_swap = SWAP_ALT;
157
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
158
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
159
 
            break;
160
 
    case MESA_FORMAT_ARGB8888_REV:
161
 
    case MESA_FORMAT_XRGB8888_REV:
162
 
#ifdef MESA_BIG_ENDIAN
163
 
                        endian = ENDIAN_8IN32;
164
 
#endif
165
 
            format = COLOR_8_8_8_8;
166
 
            comp_swap = SWAP_ALT_REV;
167
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
168
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
169
 
            break;
170
 
    case MESA_FORMAT_RGB565:
171
 
#ifdef MESA_BIG_ENDIAN
172
 
                        endian = ENDIAN_8IN16;
173
 
#endif
174
 
                    comp_swap = SWAP_STD_REV;   
175
 
            format = COLOR_5_6_5;
176
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
177
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
178
 
            break;
179
 
    case MESA_FORMAT_RGB565_REV:
180
 
#ifdef MESA_BIG_ENDIAN
181
 
                        endian = ENDIAN_8IN16;
182
 
#endif
183
 
            comp_swap = SWAP_STD;
184
 
            format = COLOR_5_6_5;
185
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
186
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
187
 
            break;
188
 
    case MESA_FORMAT_ARGB4444:
189
 
#ifdef MESA_BIG_ENDIAN
190
 
                        endian = ENDIAN_8IN16;
191
 
#endif
192
 
            format = COLOR_4_4_4_4;
193
 
            comp_swap = SWAP_ALT;
194
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
195
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
196
 
            break;
197
 
    case MESA_FORMAT_ARGB4444_REV:
198
 
#ifdef MESA_BIG_ENDIAN
199
 
                        endian = ENDIAN_8IN16;
200
 
#endif
201
 
            format = COLOR_4_4_4_4;
202
 
            comp_swap = SWAP_ALT_REV;
203
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
204
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
205
 
            break;
206
 
    case MESA_FORMAT_ARGB1555:
207
 
#ifdef MESA_BIG_ENDIAN
208
 
                        endian = ENDIAN_8IN16;
209
 
#endif
210
 
            format = COLOR_1_5_5_5;
211
 
            comp_swap = SWAP_ALT;
212
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
213
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
214
 
            break;
215
 
    case MESA_FORMAT_ARGB1555_REV:
216
 
#ifdef MESA_BIG_ENDIAN
217
 
                        endian = ENDIAN_8IN16;
218
 
#endif
219
 
            format = COLOR_1_5_5_5;
220
 
            comp_swap = SWAP_ALT_REV;
221
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
222
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
223
 
            break;
224
 
    case MESA_FORMAT_AL88:
225
 
#ifdef MESA_BIG_ENDIAN
226
 
                        endian = ENDIAN_8IN16;
227
 
#endif
228
 
            format = COLOR_8_8;
229
 
            comp_swap = SWAP_STD;
230
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
231
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
232
 
            break;
233
 
    case MESA_FORMAT_AL88_REV:
234
 
#ifdef MESA_BIG_ENDIAN
235
 
                        endian = ENDIAN_8IN16;
236
 
#endif
237
 
            format = COLOR_8_8;
238
 
            comp_swap = SWAP_STD_REV;
239
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
240
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
241
 
            break;
242
 
    case MESA_FORMAT_RGB332:
243
 
            format = COLOR_3_3_2;
244
 
            comp_swap = SWAP_STD_REV;
245
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
246
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
247
 
            break;
248
 
    case MESA_FORMAT_A8:
249
 
            format = COLOR_8;
250
 
            comp_swap = SWAP_ALT_REV;
251
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
252
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
253
 
            break;
254
 
    case MESA_FORMAT_I8:
255
 
    case MESA_FORMAT_CI8:
256
 
            format = COLOR_8;
257
 
            comp_swap = SWAP_STD;
258
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
259
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
260
 
            break;
261
 
    case MESA_FORMAT_L8:
262
 
            format = COLOR_8;
263
 
            comp_swap = SWAP_ALT;
264
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
265
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
266
 
            break;
267
 
    case MESA_FORMAT_RGBA_FLOAT32:
268
 
#ifdef MESA_BIG_ENDIAN
269
 
                        endian = ENDIAN_8IN32;
270
 
#endif
271
 
            format = COLOR_32_32_32_32_FLOAT;
272
 
            comp_swap = SWAP_STD;
273
 
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
274
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
275
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
276
 
            break;
277
 
    case MESA_FORMAT_RGBA_FLOAT16:
278
 
#ifdef MESA_BIG_ENDIAN
279
 
                        endian = ENDIAN_8IN16;
280
 
#endif
281
 
            format = COLOR_16_16_16_16_FLOAT;
282
 
            comp_swap = SWAP_STD;
283
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
284
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
285
 
            break;
286
 
    case MESA_FORMAT_ALPHA_FLOAT32:
287
 
#ifdef MESA_BIG_ENDIAN
288
 
                        endian = ENDIAN_8IN32;
289
 
#endif
290
 
            format = COLOR_32_FLOAT;
291
 
            comp_swap = SWAP_ALT_REV;
292
 
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
293
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
294
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
295
 
            break;
296
 
    case MESA_FORMAT_ALPHA_FLOAT16:
297
 
#ifdef MESA_BIG_ENDIAN
298
 
                        endian = ENDIAN_8IN16;
299
 
#endif
300
 
            format = COLOR_16_FLOAT;
301
 
            comp_swap = SWAP_ALT_REV;
302
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
303
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
304
 
            break;
305
 
    case MESA_FORMAT_LUMINANCE_FLOAT32:
306
 
#ifdef MESA_BIG_ENDIAN
307
 
                        endian = ENDIAN_8IN32;
308
 
#endif
309
 
            format = COLOR_32_FLOAT;
310
 
            comp_swap = SWAP_ALT;
311
 
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
312
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
313
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
314
 
            break;
315
 
    case MESA_FORMAT_LUMINANCE_FLOAT16:
316
 
#ifdef MESA_BIG_ENDIAN
317
 
                        endian = ENDIAN_8IN16;
318
 
#endif
319
 
            format = COLOR_16_FLOAT;
320
 
            comp_swap = SWAP_ALT;
321
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
322
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
323
 
            break;
324
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
325
 
#ifdef MESA_BIG_ENDIAN
326
 
                        endian = ENDIAN_8IN32;
327
 
#endif
328
 
            format = COLOR_32_32_FLOAT;
329
 
            comp_swap = SWAP_ALT_REV;
330
 
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
331
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
332
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
333
 
            break;
334
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
335
 
#ifdef MESA_BIG_ENDIAN
336
 
                        endian = ENDIAN_8IN16;
337
 
#endif
338
 
            format = COLOR_16_16_FLOAT;
339
 
            comp_swap = SWAP_ALT_REV;
340
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
341
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
342
 
            break;
343
 
    case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
344
 
#ifdef MESA_BIG_ENDIAN
345
 
                        endian = ENDIAN_8IN32;
346
 
#endif
347
 
            format = COLOR_32_FLOAT;
348
 
            comp_swap = SWAP_STD;
349
 
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
350
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
351
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
352
 
            break;
353
 
    case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
354
 
#ifdef MESA_BIG_ENDIAN
355
 
                        endian = ENDIAN_8IN16;
356
 
#endif
357
 
            format = COLOR_16_FLOAT;
358
 
            comp_swap = SWAP_STD;
359
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
360
 
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
361
 
            break;
362
 
    case MESA_FORMAT_X8_Z24:
363
 
    case MESA_FORMAT_S8_Z24:
364
 
#ifdef MESA_BIG_ENDIAN
365
 
                        endian = ENDIAN_8IN32;
366
 
#endif
367
 
            format = COLOR_8_24;
368
 
            comp_swap = SWAP_STD;
369
 
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
370
 
                     CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
371
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
372
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
373
 
            break;
374
 
    case MESA_FORMAT_Z24_S8:
375
 
#ifdef MESA_BIG_ENDIAN
376
 
                        endian = ENDIAN_8IN32;
377
 
#endif
378
 
            format = COLOR_24_8;
379
 
            comp_swap = SWAP_STD;
380
 
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
381
 
                     CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
382
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
383
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
384
 
            break;
385
 
    case MESA_FORMAT_Z16:
386
 
#ifdef MESA_BIG_ENDIAN
387
 
                        endian = ENDIAN_8IN16;
388
 
#endif
389
 
            format = COLOR_16;
390
 
            comp_swap = SWAP_STD;
391
 
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
392
 
                     CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
393
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
394
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
395
 
            break;
396
 
    case MESA_FORMAT_Z32:
397
 
#ifdef MESA_BIG_ENDIAN
398
 
                        endian = ENDIAN_8IN32;
399
 
#endif
400
 
            format = COLOR_32;
401
 
            comp_swap = SWAP_STD;
402
 
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
403
 
                     CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
404
 
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
405
 
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
406
 
            break;
407
 
    case MESA_FORMAT_SARGB8:
408
 
#ifdef MESA_BIG_ENDIAN
409
 
                        endian = ENDIAN_8IN32;
410
 
#endif
411
 
            format = COLOR_8_8_8_8;
412
 
            comp_swap = SWAP_ALT;
413
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
414
 
            SETfield(cb_color0_info, NUMBER_SRGB, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
415
 
            break;
416
 
    case MESA_FORMAT_SLA8:
417
 
#ifdef MESA_BIG_ENDIAN
418
 
                        endian = ENDIAN_8IN16;
419
 
#endif
420
 
            format = COLOR_8_8;
421
 
            comp_swap = SWAP_ALT_REV;
422
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
423
 
            SETfield(cb_color0_info, NUMBER_SRGB, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
424
 
            break;
425
 
    case MESA_FORMAT_SL8:
426
 
            format = COLOR_8;
427
 
            comp_swap = SWAP_ALT_REV;
428
 
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
429
 
            SETfield(cb_color0_info, NUMBER_SRGB, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
430
 
            break;
431
 
    default:
432
 
            fprintf(stderr,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format));
433
 
            assert("Invalid format for US output\n");
434
 
            return;
435
 
    }
436
 
 
437
 
    /* must be 0 on r7xx */
438
 
    if (context->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV770)
439
 
            CLEARbit(cb_color0_info, BLEND_FLOAT32_bit);
440
 
 
441
 
    SETfield(cb_color0_info, endian, ENDIAN_shift, ENDIAN_mask);
442
 
    SETfield(cb_color0_info, format, CB_COLOR0_INFO__FORMAT_shift,
443
 
             CB_COLOR0_INFO__FORMAT_mask);
444
 
    SETfield(cb_color0_info, comp_swap, COMP_SWAP_shift, COMP_SWAP_mask);
445
 
 
446
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
447
 
    R600_OUT_BATCH_REGSEQ(CB_COLOR0_BASE + (4 * id), 1);
448
 
    R600_OUT_BATCH(cb_color0_base);
449
 
    R600_OUT_BATCH_RELOC(0,
450
 
                         bo,
451
 
                         0,
452
 
                         0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
453
 
    END_BATCH();
454
 
 
455
 
    if ((context->radeon.radeonScreen->chip_family > CHIP_FAMILY_R600) &&
456
 
        (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770)) {
457
 
            BEGIN_BATCH_NO_AUTOSTATE(2);
458
 
            R600_OUT_BATCH(CP_PACKET3(R600_IT_SURFACE_BASE_UPDATE, 0));
459
 
            R600_OUT_BATCH((2 << id));
460
 
            END_BATCH();
461
 
    }
462
 
 
463
 
    /* Set CMASK & TILE buffer to the offset of color buffer as
464
 
     * we don't use those this shouldn't cause any issue and we
465
 
     * then have a valid cmd stream
466
 
     */
467
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
468
 
    R600_OUT_BATCH_REGSEQ(CB_COLOR0_TILE + (4 * id), 1);
469
 
    R600_OUT_BATCH(cb_color0_base);
470
 
    R600_OUT_BATCH_RELOC(0,
471
 
                         bo,
472
 
                         0,
473
 
                         0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
474
 
    END_BATCH();
475
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
476
 
    R600_OUT_BATCH_REGSEQ(CB_COLOR0_FRAG + (4 * id), 1);
477
 
    R600_OUT_BATCH(cb_color0_base);
478
 
    R600_OUT_BATCH_RELOC(0,
479
 
                         bo,
480
 
                         0,
481
 
                         0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
482
 
    END_BATCH();
483
 
 
484
 
    BEGIN_BATCH_NO_AUTOSTATE(9);
485
 
    R600_OUT_BATCH_REGVAL(CB_COLOR0_SIZE + (4 * id), cb_color0_size);
486
 
    R600_OUT_BATCH_REGVAL(CB_COLOR0_VIEW + (4 * id), cb_color0_view);
487
 
    R600_OUT_BATCH_REGVAL(CB_COLOR0_MASK + (4 * id), 0);
488
 
    END_BATCH();
489
 
 
490
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
491
 
    R600_OUT_BATCH_REGVAL(CB_COLOR0_INFO + (4 * id), cb_color0_info);
492
 
    R600_OUT_BATCH_RELOC(0,
493
 
                         bo,
494
 
                         0,
495
 
                         0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
496
 
    END_BATCH();
497
 
 
498
 
    COMMIT_BATCH();
499
 
 
500
 
}
501
 
 
502
 
static inline void load_shaders(struct gl_context * ctx)
503
 
{
504
 
 
505
 
    radeonContextPtr radeonctx = RADEON_CONTEXT(ctx);
506
 
    context_t *context = R700_CONTEXT(ctx);
507
 
    int i, size;
508
 
    uint32_t *shader;
509
 
 
510
 
    if (context->blit_bo_loaded == 1)
511
 
        return;
512
 
 
513
 
    size = 4096;
514
 
    context->blit_bo = radeon_bo_open(radeonctx->radeonScreen->bom, 0,
515
 
                                      size, 256, RADEON_GEM_DOMAIN_GTT, 0);
516
 
    radeon_bo_map(context->blit_bo, 1);
517
 
    shader = context->blit_bo->ptr;
518
 
 
519
 
    for(i=0; i<sizeof(r6xx_vs)/4; i++) {
520
 
        shader[128+i] = CPU_TO_LE32(r6xx_vs[i]);
521
 
    }
522
 
    for(i=0; i<sizeof(r6xx_ps)/4; i++) {
523
 
        shader[256+i] = CPU_TO_LE32(r6xx_ps[i]);
524
 
    }
525
 
 
526
 
    radeon_bo_unmap(context->blit_bo);
527
 
    context->blit_bo_loaded = 1;
528
 
 
529
 
}
530
 
 
531
 
static inline void
532
 
set_shaders(context_t *context)
533
 
{
534
 
    struct radeon_bo * pbo = context->blit_bo;
535
 
    BATCH_LOCALS(&context->radeon);
536
 
 
537
 
    uint32_t sq_pgm_start_fs = (512 >> 8);
538
 
    uint32_t sq_pgm_resources_fs = 0;
539
 
    uint32_t sq_pgm_cf_offset_fs = 0;
540
 
 
541
 
    uint32_t sq_pgm_start_vs = (512 >> 8);
542
 
    uint32_t sq_pgm_resources_vs = (1 << NUM_GPRS_shift);
543
 
    uint32_t sq_pgm_cf_offset_vs = 0;
544
 
 
545
 
    uint32_t sq_pgm_start_ps = (1024 >> 8);
546
 
    uint32_t sq_pgm_resources_ps = (1 << NUM_GPRS_shift);
547
 
    uint32_t sq_pgm_cf_offset_ps = 0;
548
 
    uint32_t sq_pgm_exports_ps = (1 << 1);
549
 
 
550
 
    r700SyncSurf(context, pbo, RADEON_GEM_DOMAIN_GTT, 0, SH_ACTION_ENA_bit);
551
 
 
552
 
    /* FS */
553
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
554
 
    R600_OUT_BATCH_REGSEQ(SQ_PGM_START_FS, 1);
555
 
    R600_OUT_BATCH(sq_pgm_start_fs);
556
 
    R600_OUT_BATCH_RELOC(sq_pgm_start_fs,
557
 
                         pbo,
558
 
                         sq_pgm_start_fs,
559
 
                         RADEON_GEM_DOMAIN_GTT, 0, 0);
560
 
    END_BATCH();
561
 
 
562
 
    BEGIN_BATCH_NO_AUTOSTATE(6);
563
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_FS, sq_pgm_resources_fs);
564
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_FS, sq_pgm_cf_offset_fs);
565
 
    END_BATCH();
566
 
 
567
 
    /* VS */
568
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
569
 
    R600_OUT_BATCH_REGSEQ(SQ_PGM_START_VS, 1);
570
 
    R600_OUT_BATCH(sq_pgm_start_vs);
571
 
    R600_OUT_BATCH_RELOC(sq_pgm_start_vs,
572
 
                         pbo,
573
 
                         sq_pgm_start_vs,
574
 
                         RADEON_GEM_DOMAIN_GTT, 0, 0);
575
 
    END_BATCH();
576
 
 
577
 
    BEGIN_BATCH_NO_AUTOSTATE(6);
578
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_VS, sq_pgm_resources_vs);
579
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_VS, sq_pgm_cf_offset_vs);
580
 
    END_BATCH();
581
 
 
582
 
    /* PS */
583
 
    BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
584
 
    R600_OUT_BATCH_REGSEQ(SQ_PGM_START_PS, 1);
585
 
    R600_OUT_BATCH(sq_pgm_start_ps);
586
 
    R600_OUT_BATCH_RELOC(sq_pgm_start_ps,
587
 
                         pbo,
588
 
                         sq_pgm_start_ps,
589
 
                         RADEON_GEM_DOMAIN_GTT, 0, 0);
590
 
    END_BATCH();
591
 
 
592
 
    BEGIN_BATCH_NO_AUTOSTATE(9);
593
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_PS, sq_pgm_resources_ps);
594
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_EXPORTS_PS, sq_pgm_exports_ps);
595
 
    R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_PS, sq_pgm_cf_offset_ps);
596
 
    END_BATCH();
597
 
 
598
 
    BEGIN_BATCH_NO_AUTOSTATE(18);
599
 
    R600_OUT_BATCH_REGVAL(SPI_VS_OUT_CONFIG, 0); //EXPORT_COUNT is - 1
600
 
    R600_OUT_BATCH_REGVAL(SPI_VS_OUT_ID_0, 0);
601
 
    R600_OUT_BATCH_REGVAL(SPI_PS_INPUT_CNTL_0, SEL_CENTROID_bit);
602
 
    R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_0, (1 << NUM_INTERP_shift));
603
 
    R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_1, 0);
604
 
    R600_OUT_BATCH_REGVAL(SPI_INTERP_CONTROL_0, 0);
605
 
    END_BATCH();
606
 
 
607
 
    COMMIT_BATCH();
608
 
 
609
 
}
610
 
 
611
 
static inline void
612
 
set_vtx_resource(context_t *context)
613
 
{
614
 
    struct radeon_bo *bo = context->blit_bo;
615
 
        uint32_t sq_vtx_constant_word2 = 0;
616
 
 
617
 
    BATCH_LOCALS(&context->radeon);
618
 
 
619
 
    BEGIN_BATCH_NO_AUTOSTATE(6);
620
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
621
 
    R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
622
 
    R600_OUT_BATCH(0);
623
 
 
624
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
625
 
    R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC - ASIC_CTL_CONST_BASE_INDEX);
626
 
    R600_OUT_BATCH(0);
627
 
    END_BATCH();
628
 
    COMMIT_BATCH();
629
 
 
630
 
    if ((context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV610) ||
631
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV620) ||
632
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RS780) ||
633
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RS880) ||
634
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV710))
635
 
            r700SyncSurf(context, bo, RADEON_GEM_DOMAIN_GTT, 0, TC_ACTION_ENA_bit);
636
 
    else
637
 
            r700SyncSurf(context, bo, RADEON_GEM_DOMAIN_GTT, 0, VC_ACTION_ENA_bit);
638
 
 
639
 
        sq_vtx_constant_word2 = 0
640
 
#ifdef MESA_BIG_ENDIAN
641
 
                | (SQ_ENDIAN_8IN32 << SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift)
642
 
#endif
643
 
                | (16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
644
 
 
645
 
    BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
646
 
 
647
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
648
 
    R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET * FETCH_RESOURCE_STRIDE);
649
 
    R600_OUT_BATCH(0);
650
 
    R600_OUT_BATCH(48 - 1);
651
 
    R600_OUT_BATCH(sq_vtx_constant_word2);
652
 
    R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift);
653
 
    R600_OUT_BATCH(0);
654
 
    R600_OUT_BATCH(0);
655
 
    R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER << SQ_TEX_RESOURCE_WORD6_0__TYPE_shift);
656
 
    R600_OUT_BATCH_RELOC(0,
657
 
                         bo,
658
 
                         0,
659
 
                         RADEON_GEM_DOMAIN_GTT, 0, 0);
660
 
    END_BATCH();
661
 
    COMMIT_BATCH();
662
 
 
663
 
}
664
 
 
665
 
static inline void
666
 
set_tex_resource(context_t * context,
667
 
                 gl_format mesa_format, struct radeon_bo *bo, int w, int h,
668
 
                 int TexelPitch, intptr_t src_offset)
669
 
{
670
 
    uint32_t sq_tex_resource0, sq_tex_resource1, sq_tex_resource2, sq_tex_resource4, sq_tex_resource6;
671
 
 
672
 
    sq_tex_resource0 = sq_tex_resource1 = sq_tex_resource2 = sq_tex_resource4 = sq_tex_resource6 = 0;
673
 
    BATCH_LOCALS(&context->radeon);
674
 
 
675
 
    SETfield(sq_tex_resource0, SQ_TEX_DIM_2D, DIM_shift, DIM_mask);
676
 
    SETfield(sq_tex_resource0, ARRAY_LINEAR_GENERAL,
677
 
                 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
678
 
                 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
679
 
 
680
 
    switch (mesa_format) {
681
 
    case MESA_FORMAT_RGBA8888:
682
 
    case MESA_FORMAT_SIGNED_RGBA8888:
683
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
684
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
685
 
 
686
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
687
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
688
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
689
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
690
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
691
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
692
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
693
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
694
 
            if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888) {
695
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
696
 
                             FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
697
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
698
 
                             FORMAT_COMP_Y_shift, FORMAT_COMP_Y_mask);
699
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
700
 
                             FORMAT_COMP_Z_shift, FORMAT_COMP_Z_mask);
701
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
702
 
                             FORMAT_COMP_W_shift, FORMAT_COMP_W_mask);
703
 
            }
704
 
            break;
705
 
    case MESA_FORMAT_RGBA8888_REV:
706
 
    case MESA_FORMAT_SIGNED_RGBA8888_REV:
707
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
708
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
709
 
 
710
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
711
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
712
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
713
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
714
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
715
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
716
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
717
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
718
 
            if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888_REV) {
719
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
720
 
                             FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
721
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
722
 
                             FORMAT_COMP_Y_shift, FORMAT_COMP_Y_mask);
723
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
724
 
                             FORMAT_COMP_Z_shift, FORMAT_COMP_Z_mask);
725
 
                    SETfield(sq_tex_resource4, SQ_FORMAT_COMP_SIGNED,
726
 
                             FORMAT_COMP_W_shift, FORMAT_COMP_W_mask);
727
 
            }
728
 
            break;
729
 
    case MESA_FORMAT_ARGB8888:
730
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
731
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
732
 
 
733
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
734
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
735
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
736
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
737
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
738
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
739
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
740
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
741
 
            break;
742
 
    case MESA_FORMAT_XRGB8888:
743
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
744
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
745
 
 
746
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
747
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
748
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
749
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
750
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
751
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
752
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
753
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
754
 
            break;
755
 
    case MESA_FORMAT_ARGB8888_REV:
756
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
757
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
758
 
 
759
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
760
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
761
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
762
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
763
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
764
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
765
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
766
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
767
 
            break;
768
 
    case MESA_FORMAT_XRGB8888_REV:
769
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
770
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
771
 
 
772
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
773
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
774
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
775
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
776
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
777
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
778
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
779
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
780
 
            break;
781
 
    case MESA_FORMAT_RGB565:
782
 
            SETfield(sq_tex_resource1, FMT_5_6_5,
783
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
784
 
 
785
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
786
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
787
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
788
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
789
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
790
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
791
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
792
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
793
 
            break;
794
 
    case MESA_FORMAT_RGB565_REV:
795
 
            SETfield(sq_tex_resource1, FMT_5_6_5,
796
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
797
 
 
798
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
799
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
800
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
801
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
802
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
803
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
804
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
805
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
806
 
            break;
807
 
    case MESA_FORMAT_ARGB4444:
808
 
            SETfield(sq_tex_resource1, FMT_4_4_4_4,
809
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
810
 
 
811
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
812
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
813
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
814
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
815
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
816
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
817
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
818
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
819
 
            break;
820
 
    case MESA_FORMAT_ARGB4444_REV:
821
 
            SETfield(sq_tex_resource1, FMT_4_4_4_4,
822
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
823
 
 
824
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
825
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
826
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
827
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
828
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
829
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
830
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
831
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
832
 
            break;
833
 
    case MESA_FORMAT_ARGB1555:
834
 
            SETfield(sq_tex_resource1, FMT_1_5_5_5,
835
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
836
 
 
837
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
838
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
839
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
840
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
841
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
842
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
843
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
844
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
845
 
            break;
846
 
    case MESA_FORMAT_ARGB1555_REV:
847
 
            SETfield(sq_tex_resource1, FMT_1_5_5_5,
848
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
849
 
 
850
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
851
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
852
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
853
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
854
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
855
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
856
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
857
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
858
 
            break;
859
 
    case MESA_FORMAT_AL88:
860
 
    case MESA_FORMAT_AL88_REV: /* TODO : Check this. */
861
 
            SETfield(sq_tex_resource1, FMT_8_8,
862
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
863
 
 
864
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
865
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
866
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
867
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
868
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
869
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
870
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
871
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
872
 
            break;
873
 
    case MESA_FORMAT_RGB332:
874
 
            SETfield(sq_tex_resource1, FMT_3_3_2,
875
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
876
 
 
877
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
878
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
879
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
880
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
881
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
882
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
883
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
884
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
885
 
            break;
886
 
    case MESA_FORMAT_A8: /* ZERO, ZERO, ZERO, X */
887
 
            SETfield(sq_tex_resource1, FMT_8,
888
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
889
 
 
890
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
891
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
892
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
893
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
894
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
895
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
896
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
897
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
898
 
            break;
899
 
    case MESA_FORMAT_L8: /* X, X, X, ONE */
900
 
            SETfield(sq_tex_resource1, FMT_8,
901
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
902
 
 
903
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
904
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
905
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
906
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
907
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
908
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
909
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
910
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
911
 
            break;
912
 
    case MESA_FORMAT_I8: /* X, X, X, X */
913
 
    case MESA_FORMAT_CI8:
914
 
            SETfield(sq_tex_resource1, FMT_8,
915
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
916
 
 
917
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
918
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
919
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
920
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
921
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
922
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
923
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
924
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
925
 
            break;
926
 
    case MESA_FORMAT_RGBA_FLOAT32:
927
 
            SETfield(sq_tex_resource1, FMT_32_32_32_32_FLOAT,
928
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
929
 
 
930
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
931
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
932
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
933
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
934
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
935
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
936
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
937
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
938
 
            break;
939
 
    case MESA_FORMAT_RGBA_FLOAT16:
940
 
            SETfield(sq_tex_resource1, FMT_16_16_16_16_FLOAT,
941
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
942
 
 
943
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
944
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
945
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
946
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
947
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
948
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
949
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
950
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
951
 
            break;
952
 
    case MESA_FORMAT_ALPHA_FLOAT32: /* ZERO, ZERO, ZERO, X */
953
 
            SETfield(sq_tex_resource1, FMT_32_FLOAT,
954
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
955
 
 
956
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
957
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
958
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
959
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
960
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
961
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
962
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
963
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
964
 
            break;
965
 
    case MESA_FORMAT_ALPHA_FLOAT16: /* ZERO, ZERO, ZERO, X */
966
 
            SETfield(sq_tex_resource1, FMT_16_FLOAT,
967
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
968
 
 
969
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
970
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
971
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
972
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
973
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
974
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
975
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
976
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
977
 
            break;
978
 
    case MESA_FORMAT_LUMINANCE_FLOAT32: /* X, X, X, ONE */
979
 
            SETfield(sq_tex_resource1, FMT_32_FLOAT,
980
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
981
 
 
982
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
983
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
984
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
985
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
986
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
987
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
988
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
989
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
990
 
            break;
991
 
    case MESA_FORMAT_LUMINANCE_FLOAT16: /* X, X, X, ONE */
992
 
            SETfield(sq_tex_resource1, FMT_16_FLOAT,
993
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
994
 
 
995
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
996
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
997
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
998
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
999
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1000
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1001
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1002
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1003
 
            break;
1004
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
1005
 
            SETfield(sq_tex_resource1, FMT_32_32_FLOAT,
1006
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1007
 
 
1008
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1009
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1010
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1011
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1012
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1013
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1014
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1015
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1016
 
            break;
1017
 
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
1018
 
            SETfield(sq_tex_resource1, FMT_16_16_FLOAT,
1019
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1020
 
 
1021
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1022
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1023
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1024
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1025
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1026
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1027
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1028
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1029
 
            break;
1030
 
    case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
1031
 
            SETfield(sq_tex_resource1, FMT_32_FLOAT,
1032
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1033
 
 
1034
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1035
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1036
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1037
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1038
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1039
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1040
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1041
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1042
 
            break;
1043
 
    case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
1044
 
            SETfield(sq_tex_resource1, FMT_16_FLOAT,
1045
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1046
 
 
1047
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1048
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1049
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1050
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1051
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1052
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1053
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1054
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1055
 
            break;
1056
 
    case MESA_FORMAT_Z16:
1057
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1058
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1059
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1060
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1061
 
            SETfield(sq_tex_resource1, FMT_16,
1062
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1063
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1064
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1065
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1066
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1067
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1068
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1069
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1070
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1071
 
            break;
1072
 
    case MESA_FORMAT_X8_Z24:
1073
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1074
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1075
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1076
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1077
 
            SETfield(sq_tex_resource1, FMT_8_24,
1078
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1079
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1080
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1081
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1082
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1083
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
1084
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1085
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1086
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1087
 
            break;
1088
 
    case MESA_FORMAT_S8_Z24:
1089
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1090
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1091
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1092
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1093
 
            SETfield(sq_tex_resource1, FMT_8_24,
1094
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1095
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1096
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1097
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1098
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1099
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
1100
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1101
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1102
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1103
 
            break;
1104
 
    case MESA_FORMAT_Z24_S8:
1105
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1106
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1107
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1108
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1109
 
            SETfield(sq_tex_resource1, FMT_24_8,
1110
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1111
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1112
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1113
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1114
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1115
 
            SETfield(sq_tex_resource4, SQ_SEL_0,
1116
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1117
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1118
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1119
 
            break;
1120
 
    case MESA_FORMAT_Z32:
1121
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1122
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1123
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1124
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1125
 
            SETfield(sq_tex_resource1, FMT_32,
1126
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1127
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1128
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1129
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1130
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1131
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1132
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1133
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1134
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1135
 
            break;
1136
 
    case MESA_FORMAT_S8:
1137
 
            SETbit(sq_tex_resource0, TILE_TYPE_bit);
1138
 
            SETfield(sq_tex_resource0, ARRAY_1D_TILED_THIN1,
1139
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift,
1140
 
                     SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask);
1141
 
            SETfield(sq_tex_resource1, FMT_8,
1142
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1143
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1144
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1145
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1146
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1147
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1148
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1149
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1150
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1151
 
            break;
1152
 
    case MESA_FORMAT_SARGB8:
1153
 
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
1154
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1155
 
 
1156
 
            SETfield(sq_tex_resource4, SQ_SEL_Z,
1157
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1158
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1159
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1160
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1161
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1162
 
            SETfield(sq_tex_resource4, SQ_SEL_W,
1163
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1164
 
            SETbit(sq_tex_resource4, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit);
1165
 
            break;
1166
 
    case MESA_FORMAT_SLA8:
1167
 
            SETfield(sq_tex_resource1, FMT_8_8,
1168
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1169
 
 
1170
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1171
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1172
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1173
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1174
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1175
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1176
 
            SETfield(sq_tex_resource4, SQ_SEL_Y,
1177
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1178
 
            SETbit(sq_tex_resource4, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit);
1179
 
            break;
1180
 
    case MESA_FORMAT_SL8: /* X, X, X, ONE */
1181
 
            SETfield(sq_tex_resource1, FMT_8,
1182
 
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
1183
 
 
1184
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1185
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
1186
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1187
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
1188
 
            SETfield(sq_tex_resource4, SQ_SEL_X,
1189
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
1190
 
            SETfield(sq_tex_resource4, SQ_SEL_1,
1191
 
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
1192
 
            SETbit(sq_tex_resource4, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit);
1193
 
            break;
1194
 
    default:
1195
 
            fprintf(stderr,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format));
1196
 
            assert("Invalid format for US output\n");
1197
 
            return;
1198
 
    };
1199
 
 
1200
 
    SETfield(sq_tex_resource0, (TexelPitch/8)-1, PITCH_shift, PITCH_mask);
1201
 
    SETfield(sq_tex_resource0, w - 1, TEX_WIDTH_shift, TEX_WIDTH_mask);
1202
 
    SETfield(sq_tex_resource1, h - 1, TEX_HEIGHT_shift, TEX_HEIGHT_mask);
1203
 
 
1204
 
    sq_tex_resource2 = src_offset / 256;
1205
 
 
1206
 
    SETfield(sq_tex_resource6, SQ_TEX_VTX_VALID_TEXTURE,
1207
 
             SQ_TEX_RESOURCE_WORD6_0__TYPE_shift,
1208
 
             SQ_TEX_RESOURCE_WORD6_0__TYPE_mask);
1209
 
 
1210
 
    r700SyncSurf(context, bo,
1211
 
                 RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM,
1212
 
                 0, TC_ACTION_ENA_bit);
1213
 
 
1214
 
    BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1215
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
1216
 
    R600_OUT_BATCH(0 * 7);
1217
 
 
1218
 
    R600_OUT_BATCH(sq_tex_resource0);
1219
 
    R600_OUT_BATCH(sq_tex_resource1);
1220
 
    R600_OUT_BATCH(sq_tex_resource2);
1221
 
    R600_OUT_BATCH(0); //SQ_TEX_RESOURCE3
1222
 
    R600_OUT_BATCH(sq_tex_resource4);
1223
 
    R600_OUT_BATCH(0); //SQ_TEX_RESOURCE5
1224
 
    R600_OUT_BATCH(sq_tex_resource6);
1225
 
    R600_OUT_BATCH_RELOC(0,
1226
 
                     bo,
1227
 
                     0,
1228
 
                     RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
1229
 
    R600_OUT_BATCH_RELOC(0,
1230
 
                     bo,
1231
 
                     0,
1232
 
                     RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
1233
 
    END_BATCH();
1234
 
    COMMIT_BATCH();
1235
 
}
1236
 
 
1237
 
static inline void
1238
 
set_tex_sampler(context_t * context)
1239
 
{
1240
 
    uint32_t sq_tex_sampler_word0 = 0, sq_tex_sampler_word1 = 0, sq_tex_sampler_word2 = 0;
1241
 
    int i = 0;
1242
 
 
1243
 
    SETbit(sq_tex_sampler_word2, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit);
1244
 
 
1245
 
    BATCH_LOCALS(&context->radeon);
1246
 
 
1247
 
    BEGIN_BATCH_NO_AUTOSTATE(5);
1248
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER, 3));
1249
 
    R600_OUT_BATCH(i * 3);
1250
 
    R600_OUT_BATCH(sq_tex_sampler_word0);
1251
 
    R600_OUT_BATCH(sq_tex_sampler_word1);
1252
 
    R600_OUT_BATCH(sq_tex_sampler_word2);
1253
 
    END_BATCH();
1254
 
 
1255
 
}
1256
 
 
1257
 
static inline void
1258
 
set_scissors(context_t *context, int x1, int y1, int x2, int y2)
1259
 
{
1260
 
    BATCH_LOCALS(&context->radeon);
1261
 
 
1262
 
    BEGIN_BATCH_NO_AUTOSTATE(17);
1263
 
    R600_OUT_BATCH_REGSEQ(PA_SC_SCREEN_SCISSOR_TL, 2);
1264
 
    R600_OUT_BATCH((x1 << 0) | (y1 << 16));
1265
 
    R600_OUT_BATCH((x2 << 0) | (y2 << 16));
1266
 
 
1267
 
    R600_OUT_BATCH_REGSEQ(PA_SC_WINDOW_OFFSET, 3);
1268
 
    R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1269
 
    R600_OUT_BATCH((x1 << 0) | (y1 << 16) | (WINDOW_OFFSET_DISABLE_bit)); //PA_SC_WINDOW_SCISSOR_TL
1270
 
    R600_OUT_BATCH((x2 << 0) | (y2 << 16));
1271
 
 
1272
 
    R600_OUT_BATCH_REGSEQ(PA_SC_GENERIC_SCISSOR_TL, 2);
1273
 
    R600_OUT_BATCH((x1 << 0) | (y1 << 16) | (WINDOW_OFFSET_DISABLE_bit));
1274
 
    R600_OUT_BATCH((x2 << 0) | (y2 << 16));
1275
 
 
1276
 
    /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1277
 
    R600_OUT_BATCH_REGSEQ(PA_SC_VPORT_SCISSOR_0_TL, 2 );
1278
 
    R600_OUT_BATCH((x1 << 0) | (y1 << 16) | (WINDOW_OFFSET_DISABLE_bit));
1279
 
    R600_OUT_BATCH((x2 << 0) | (y2 << 16));
1280
 
    END_BATCH();
1281
 
 
1282
 
    COMMIT_BATCH();
1283
 
 
1284
 
}
1285
 
 
1286
 
static inline void
1287
 
set_vb_data(context_t * context, int src_x, int src_y, int dst_x, int dst_y,
1288
 
            int w, int h, int src_h, unsigned flip_y)
1289
 
{
1290
 
    float *vb;
1291
 
    radeon_bo_map(context->blit_bo, 1);
1292
 
    vb = context->blit_bo->ptr;
1293
 
 
1294
 
    vb[0] = (float)(dst_x);
1295
 
    vb[1] = (float)(dst_y);
1296
 
    vb[2] = (float)(src_x);
1297
 
    vb[3] = (flip_y) ? (float)(src_h - src_y) : (float)src_y;
1298
 
 
1299
 
    vb[4] = (float)(dst_x);
1300
 
    vb[5] = (float)(dst_y + h);
1301
 
    vb[6] = (float)(src_x);
1302
 
    vb[7] = (flip_y) ? (float)(src_h - (src_y + h)) : (float)(src_y + h);
1303
 
 
1304
 
    vb[8] = (float)(dst_x + w);
1305
 
    vb[9] = (float)(dst_y + h);
1306
 
    vb[10] = (float)(src_x + w);
1307
 
    vb[11] = (flip_y) ? (float)(src_h - (src_y + h)) : (float)(src_y + h);
1308
 
 
1309
 
    radeon_bo_unmap(context->blit_bo);
1310
 
 
1311
 
}
1312
 
 
1313
 
static inline void
1314
 
draw_auto(context_t *context)
1315
 
{
1316
 
    BATCH_LOCALS(&context->radeon);
1317
 
    uint32_t vgt_primitive_type = 0, vgt_index_type = 0, vgt_draw_initiator = 0, vgt_num_indices;
1318
 
 
1319
 
    SETfield(vgt_primitive_type, DI_PT_RECTLIST,
1320
 
             VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift,
1321
 
             VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask);
1322
 
    SETfield(vgt_index_type, DI_INDEX_SIZE_16_BIT, INDEX_TYPE_shift,
1323
 
             INDEX_TYPE_mask);
1324
 
    SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift,
1325
 
             MAJOR_MODE_mask);
1326
 
    SETfield(vgt_draw_initiator, DI_SRC_SEL_AUTO_INDEX, SOURCE_SELECT_shift,
1327
 
             SOURCE_SELECT_mask);
1328
 
 
1329
 
    vgt_num_indices = 3;
1330
 
 
1331
 
    BEGIN_BATCH_NO_AUTOSTATE(10);
1332
 
    // prim
1333
 
    R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE, 1);
1334
 
    R600_OUT_BATCH(vgt_primitive_type);
1335
 
    // index type
1336
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE, 0));
1337
 
    R600_OUT_BATCH(vgt_index_type);
1338
 
    // num instances
1339
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES, 0));
1340
 
    R600_OUT_BATCH(1);
1341
 
    //
1342
 
    R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO, 1));
1343
 
    R600_OUT_BATCH(vgt_num_indices);
1344
 
    R600_OUT_BATCH(vgt_draw_initiator);
1345
 
 
1346
 
    END_BATCH();
1347
 
    COMMIT_BATCH();
1348
 
}
1349
 
 
1350
 
static inline void
1351
 
set_default_state(context_t *context)
1352
 
{
1353
 
    int ps_prio = 0;
1354
 
    int vs_prio = 1;
1355
 
    int gs_prio = 2;
1356
 
    int es_prio = 3;
1357
 
    int num_ps_gprs;
1358
 
    int num_vs_gprs;
1359
 
    int num_gs_gprs;
1360
 
    int num_es_gprs;
1361
 
    int num_temp_gprs;
1362
 
    int num_ps_threads;
1363
 
    int num_vs_threads;
1364
 
    int num_gs_threads;
1365
 
    int num_es_threads;
1366
 
    int num_ps_stack_entries;
1367
 
    int num_vs_stack_entries;
1368
 
    int num_gs_stack_entries;
1369
 
    int num_es_stack_entries;
1370
 
    uint32_t sq_config, sq_gpr_resource_mgmt_1, sq_gpr_resource_mgmt_2;
1371
 
    uint32_t sq_thread_resource_mgmt, sq_stack_resource_mgmt_1, sq_stack_resource_mgmt_2;
1372
 
    uint32_t ta_cntl_aux, db_watermarks, sq_dyn_gpr_cntl_ps_flush_req, db_debug;
1373
 
    BATCH_LOCALS(&context->radeon);
1374
 
 
1375
 
    switch (context->radeon.radeonScreen->chip_family) {
1376
 
    case CHIP_FAMILY_R600:
1377
 
            num_ps_gprs = 192;
1378
 
            num_vs_gprs = 56;
1379
 
            num_temp_gprs = 4;
1380
 
            num_gs_gprs = 0;
1381
 
            num_es_gprs = 0;
1382
 
            num_ps_threads = 136;
1383
 
            num_vs_threads = 48;
1384
 
            num_gs_threads = 4;
1385
 
            num_es_threads = 4;
1386
 
            num_ps_stack_entries = 128;
1387
 
            num_vs_stack_entries = 128;
1388
 
            num_gs_stack_entries = 0;
1389
 
            num_es_stack_entries = 0;
1390
 
            break;
1391
 
    case CHIP_FAMILY_RV630:
1392
 
    case CHIP_FAMILY_RV635:
1393
 
            num_ps_gprs = 84;
1394
 
            num_vs_gprs = 36;
1395
 
            num_temp_gprs = 4;
1396
 
            num_gs_gprs = 0;
1397
 
            num_es_gprs = 0;
1398
 
            num_ps_threads = 144;
1399
 
            num_vs_threads = 40;
1400
 
            num_gs_threads = 4;
1401
 
            num_es_threads = 4;
1402
 
            num_ps_stack_entries = 40;
1403
 
            num_vs_stack_entries = 40;
1404
 
            num_gs_stack_entries = 32;
1405
 
            num_es_stack_entries = 16;
1406
 
            break;
1407
 
    case CHIP_FAMILY_RV610:
1408
 
    case CHIP_FAMILY_RV620:
1409
 
    case CHIP_FAMILY_RS780:
1410
 
    case CHIP_FAMILY_RS880:
1411
 
    default:
1412
 
            num_ps_gprs = 84;
1413
 
            num_vs_gprs = 36;
1414
 
            num_temp_gprs = 4;
1415
 
            num_gs_gprs = 0;
1416
 
            num_es_gprs = 0;
1417
 
            num_ps_threads = 136;
1418
 
            num_vs_threads = 48;
1419
 
            num_gs_threads = 4;
1420
 
            num_es_threads = 4;
1421
 
            num_ps_stack_entries = 40;
1422
 
            num_vs_stack_entries = 40;
1423
 
            num_gs_stack_entries = 32;
1424
 
            num_es_stack_entries = 16;
1425
 
            break;
1426
 
    case CHIP_FAMILY_RV670:
1427
 
            num_ps_gprs = 144;
1428
 
            num_vs_gprs = 40;
1429
 
            num_temp_gprs = 4;
1430
 
            num_gs_gprs = 0;
1431
 
            num_es_gprs = 0;
1432
 
            num_ps_threads = 136;
1433
 
            num_vs_threads = 48;
1434
 
            num_gs_threads = 4;
1435
 
            num_es_threads = 4;
1436
 
            num_ps_stack_entries = 40;
1437
 
            num_vs_stack_entries = 40;
1438
 
            num_gs_stack_entries = 32;
1439
 
            num_es_stack_entries = 16;
1440
 
            break;
1441
 
    case CHIP_FAMILY_RV770:
1442
 
            num_ps_gprs = 192;
1443
 
            num_vs_gprs = 56;
1444
 
            num_temp_gprs = 4;
1445
 
            num_gs_gprs = 0;
1446
 
            num_es_gprs = 0;
1447
 
            num_ps_threads = 188;
1448
 
            num_vs_threads = 60;
1449
 
            num_gs_threads = 0;
1450
 
            num_es_threads = 0;
1451
 
            num_ps_stack_entries = 256;
1452
 
            num_vs_stack_entries = 256;
1453
 
            num_gs_stack_entries = 0;
1454
 
            num_es_stack_entries = 0;
1455
 
            break;
1456
 
    case CHIP_FAMILY_RV730:
1457
 
    case CHIP_FAMILY_RV740:
1458
 
            num_ps_gprs = 84;
1459
 
            num_vs_gprs = 36;
1460
 
            num_temp_gprs = 4;
1461
 
            num_gs_gprs = 0;
1462
 
            num_es_gprs = 0;
1463
 
            num_ps_threads = 188;
1464
 
            num_vs_threads = 60;
1465
 
            num_gs_threads = 0;
1466
 
            num_es_threads = 0;
1467
 
            num_ps_stack_entries = 128;
1468
 
            num_vs_stack_entries = 128;
1469
 
            num_gs_stack_entries = 0;
1470
 
            num_es_stack_entries = 0;
1471
 
            break;
1472
 
    case CHIP_FAMILY_RV710:
1473
 
            num_ps_gprs = 192;
1474
 
            num_vs_gprs = 56;
1475
 
            num_temp_gprs = 4;
1476
 
            num_gs_gprs = 0;
1477
 
            num_es_gprs = 0;
1478
 
            num_ps_threads = 144;
1479
 
            num_vs_threads = 48;
1480
 
            num_gs_threads = 0;
1481
 
            num_es_threads = 0;
1482
 
            num_ps_stack_entries = 128;
1483
 
            num_vs_stack_entries = 128;
1484
 
            num_gs_stack_entries = 0;
1485
 
            num_es_stack_entries = 0;
1486
 
            break;
1487
 
    }
1488
 
 
1489
 
    sq_config = 0;
1490
 
    if ((context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV610) ||
1491
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV620) ||
1492
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RS780) ||
1493
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RS880) ||
1494
 
        (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV710))
1495
 
            CLEARbit(sq_config, VC_ENABLE_bit);
1496
 
    else
1497
 
            SETbit(sq_config, VC_ENABLE_bit);
1498
 
    SETbit(sq_config, DX9_CONSTS_bit);
1499
 
    SETbit(sq_config, ALU_INST_PREFER_VECTOR_bit);
1500
 
    SETfield(sq_config, ps_prio, PS_PRIO_shift, PS_PRIO_mask);
1501
 
    SETfield(sq_config, vs_prio, VS_PRIO_shift, VS_PRIO_mask);
1502
 
    SETfield(sq_config, gs_prio, GS_PRIO_shift, GS_PRIO_mask);
1503
 
    SETfield(sq_config, es_prio, ES_PRIO_shift, ES_PRIO_mask);
1504
 
 
1505
 
    sq_gpr_resource_mgmt_1 = 0;
1506
 
    SETfield(sq_gpr_resource_mgmt_1, num_ps_gprs, NUM_PS_GPRS_shift, NUM_PS_GPRS_mask);
1507
 
    SETfield(sq_gpr_resource_mgmt_1, num_vs_gprs, NUM_VS_GPRS_shift, NUM_VS_GPRS_mask);
1508
 
    SETfield(sq_gpr_resource_mgmt_1, num_temp_gprs,
1509
 
             NUM_CLAUSE_TEMP_GPRS_shift, NUM_CLAUSE_TEMP_GPRS_mask);
1510
 
 
1511
 
    sq_gpr_resource_mgmt_2 = 0;
1512
 
    SETfield(sq_gpr_resource_mgmt_2, num_gs_gprs, NUM_GS_GPRS_shift, NUM_GS_GPRS_mask);
1513
 
    SETfield(sq_gpr_resource_mgmt_2, num_es_gprs, NUM_ES_GPRS_shift, NUM_ES_GPRS_mask);
1514
 
 
1515
 
    sq_thread_resource_mgmt = 0;
1516
 
    SETfield(sq_thread_resource_mgmt, num_ps_threads,
1517
 
             NUM_PS_THREADS_shift, NUM_PS_THREADS_mask);
1518
 
    SETfield(sq_thread_resource_mgmt, num_vs_threads,
1519
 
             NUM_VS_THREADS_shift, NUM_VS_THREADS_mask);
1520
 
    SETfield(sq_thread_resource_mgmt, num_gs_threads,
1521
 
             NUM_GS_THREADS_shift, NUM_GS_THREADS_mask);
1522
 
    SETfield(sq_thread_resource_mgmt, num_es_threads,
1523
 
             NUM_ES_THREADS_shift, NUM_ES_THREADS_mask);
1524
 
 
1525
 
    sq_stack_resource_mgmt_1 = 0;
1526
 
    SETfield(sq_stack_resource_mgmt_1, num_ps_stack_entries,
1527
 
             NUM_PS_STACK_ENTRIES_shift, NUM_PS_STACK_ENTRIES_mask);
1528
 
    SETfield(sq_stack_resource_mgmt_1, num_vs_stack_entries,
1529
 
             NUM_VS_STACK_ENTRIES_shift, NUM_VS_STACK_ENTRIES_mask);
1530
 
 
1531
 
    sq_stack_resource_mgmt_2 = 0;
1532
 
    SETfield(sq_stack_resource_mgmt_2, num_gs_stack_entries,
1533
 
             NUM_GS_STACK_ENTRIES_shift, NUM_GS_STACK_ENTRIES_mask);
1534
 
    SETfield(sq_stack_resource_mgmt_2, num_es_stack_entries,
1535
 
             NUM_ES_STACK_ENTRIES_shift, NUM_ES_STACK_ENTRIES_mask);
1536
 
 
1537
 
    ta_cntl_aux = 0;
1538
 
    SETfield(ta_cntl_aux, 28, TD_FIFO_CREDIT_shift, TD_FIFO_CREDIT_mask);
1539
 
    db_watermarks = 0;
1540
 
    SETfield(db_watermarks, 4, DEPTH_FREE_shift, DEPTH_FREE_mask);
1541
 
    SETfield(db_watermarks, 16, DEPTH_FLUSH_shift, DEPTH_FLUSH_mask);
1542
 
    SETfield(db_watermarks, 0, FORCE_SUMMARIZE_shift, FORCE_SUMMARIZE_mask);
1543
 
    SETfield(db_watermarks, 4, DEPTH_PENDING_FREE_shift, DEPTH_PENDING_FREE_mask);
1544
 
    sq_dyn_gpr_cntl_ps_flush_req = 0;
1545
 
    db_debug = 0;
1546
 
    if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770) {
1547
 
            SETfield(ta_cntl_aux, 3, GRADIENT_CREDIT_shift, GRADIENT_CREDIT_mask);
1548
 
            db_debug = 0x82000000;
1549
 
            SETfield(db_watermarks, 16, DEPTH_CACHELINE_FREE_shift, DEPTH_CACHELINE_FREE_mask);
1550
 
    } else {
1551
 
            SETfield(ta_cntl_aux, 2, GRADIENT_CREDIT_shift, GRADIENT_CREDIT_mask);
1552
 
            SETfield(db_watermarks, 4, DEPTH_CACHELINE_FREE_shift, DEPTH_CACHELINE_FREE_mask);
1553
 
            SETbit(sq_dyn_gpr_cntl_ps_flush_req, VS_PC_LIMIT_ENABLE_bit);
1554
 
    }
1555
 
 
1556
 
    BEGIN_BATCH_NO_AUTOSTATE(120);
1557
 
    R600_OUT_BATCH_REGSEQ(SQ_CONFIG, 6);
1558
 
    R600_OUT_BATCH(sq_config);
1559
 
    R600_OUT_BATCH(sq_gpr_resource_mgmt_1);
1560
 
    R600_OUT_BATCH(sq_gpr_resource_mgmt_2);
1561
 
    R600_OUT_BATCH(sq_thread_resource_mgmt);
1562
 
    R600_OUT_BATCH(sq_stack_resource_mgmt_1);
1563
 
    R600_OUT_BATCH(sq_stack_resource_mgmt_2);
1564
 
 
1565
 
    R600_OUT_BATCH_REGVAL(TA_CNTL_AUX, ta_cntl_aux);
1566
 
    R600_OUT_BATCH_REGVAL(VC_ENHANCE, 0);
1567
 
    R600_OUT_BATCH_REGVAL(R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, sq_dyn_gpr_cntl_ps_flush_req);
1568
 
    R600_OUT_BATCH_REGVAL(DB_DEBUG, db_debug);
1569
 
    R600_OUT_BATCH_REGVAL(DB_WATERMARKS, db_watermarks);
1570
 
 
1571
 
    R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE, 9);
1572
 
    R600_OUT_BATCH(0);
1573
 
    R600_OUT_BATCH(0);
1574
 
    R600_OUT_BATCH(0);
1575
 
    R600_OUT_BATCH(0);
1576
 
    R600_OUT_BATCH(0);
1577
 
    R600_OUT_BATCH(0);
1578
 
    R600_OUT_BATCH(0);
1579
 
    R600_OUT_BATCH(0);
1580
 
    R600_OUT_BATCH(0);
1581
 
 
1582
 
    R600_OUT_BATCH_REGVAL(CB_CLRCMP_CONTROL,
1583
 
                         (CLRCMP_SEL_SRC << CLRCMP_FCN_SEL_shift));
1584
 
    R600_OUT_BATCH_REGVAL(SQ_VTX_BASE_VTX_LOC, 0);
1585
 
    R600_OUT_BATCH_REGVAL(SQ_VTX_START_INST_LOC, 0);
1586
 
    R600_OUT_BATCH_REGVAL(DB_DEPTH_CONTROL, 0);
1587
 
    R600_OUT_BATCH_REGVAL(CB_SHADER_MASK, (OUTPUT0_ENABLE_mask));
1588
 
    R600_OUT_BATCH_REGVAL(CB_TARGET_MASK, (TARGET0_ENABLE_mask));
1589
 
    R600_OUT_BATCH_REGVAL(R7xx_CB_SHADER_CONTROL, (RT0_ENABLE_bit));
1590
 
    R600_OUT_BATCH_REGVAL(CB_COLOR_CONTROL, (0xcc << ROP3_shift));
1591
 
 
1592
 
    R600_OUT_BATCH_REGVAL(PA_CL_VTE_CNTL, VTX_XY_FMT_bit);
1593
 
    R600_OUT_BATCH_REGVAL(PA_CL_VS_OUT_CNTL, 0);
1594
 
    R600_OUT_BATCH_REGVAL(PA_CL_CLIP_CNTL, CLIP_DISABLE_bit);
1595
 
    R600_OUT_BATCH_REGVAL(PA_SU_SC_MODE_CNTL, (FACE_bit) |
1596
 
        (POLYMODE_PTYPE__TRIANGLES << POLYMODE_FRONT_PTYPE_shift) |
1597
 
        (POLYMODE_PTYPE__TRIANGLES << POLYMODE_BACK_PTYPE_shift));
1598
 
    R600_OUT_BATCH_REGVAL(PA_SU_VTX_CNTL, (PIX_CENTER_bit) |
1599
 
        (X_ROUND_TO_EVEN << PA_SU_VTX_CNTL__ROUND_MODE_shift) |
1600
 
        (X_1_256TH << QUANT_MODE_shift));
1601
 
    R600_OUT_BATCH_REGVAL(PA_SC_AA_CONFIG, 0);
1602
 
 
1603
 
    R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX, 4);
1604
 
    R600_OUT_BATCH(0xffffff);
1605
 
    R600_OUT_BATCH(0);
1606
 
    R600_OUT_BATCH(0);
1607
 
    R600_OUT_BATCH(0);
1608
 
 
1609
 
    R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL, 13);
1610
 
    R600_OUT_BATCH(0);
1611
 
    R600_OUT_BATCH(0);
1612
 
    R600_OUT_BATCH(0);
1613
 
    R600_OUT_BATCH(0);
1614
 
    R600_OUT_BATCH(0);
1615
 
    R600_OUT_BATCH(0);
1616
 
    R600_OUT_BATCH(0);
1617
 
    R600_OUT_BATCH(0);
1618
 
    R600_OUT_BATCH(0);
1619
 
    R600_OUT_BATCH(0);
1620
 
    R600_OUT_BATCH(0);
1621
 
    R600_OUT_BATCH(0);
1622
 
    R600_OUT_BATCH(0);
1623
 
 
1624
 
    R600_OUT_BATCH_REGVAL(VGT_PRIMITIVEID_EN, 0);
1625
 
    R600_OUT_BATCH_REGVAL(VGT_MULTI_PRIM_IB_RESET_EN, 0);
1626
 
    R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_0, 0);
1627
 
    R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_1, 0);
1628
 
 
1629
 
    R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN, 3);
1630
 
    R600_OUT_BATCH(0);
1631
 
    R600_OUT_BATCH(0);
1632
 
    R600_OUT_BATCH(0);
1633
 
 
1634
 
    R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN, 0);
1635
 
    R600_OUT_BATCH_REGVAL(SX_ALPHA_TEST_CONTROL, 0);
1636
 
 
1637
 
    END_BATCH();
1638
 
    COMMIT_BATCH();
1639
 
}
1640
 
 
1641
 
static GLboolean validate_buffers(context_t *rmesa,
1642
 
                                  struct radeon_bo *src_bo,
1643
 
                                  struct radeon_bo *dst_bo)
1644
 
{
1645
 
    int ret;
1646
 
 
1647
 
    radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
1648
 
 
1649
 
    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1650
 
                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
1651
 
    if (ret)
1652
 
        return GL_FALSE;
1653
 
 
1654
 
    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1655
 
                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
1656
 
    if (ret)
1657
 
        return GL_FALSE;
1658
 
 
1659
 
    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1660
 
                                        rmesa->blit_bo,
1661
 
                                        RADEON_GEM_DOMAIN_GTT, 0);
1662
 
    if (ret)
1663
 
        return GL_FALSE;
1664
 
 
1665
 
    return GL_TRUE;
1666
 
}
1667
 
 
1668
 
unsigned r600_blit(struct gl_context *ctx,
1669
 
                   struct radeon_bo *src_bo,
1670
 
                   intptr_t src_offset,
1671
 
                   gl_format src_mesaformat,
1672
 
                   unsigned src_pitch,
1673
 
                   unsigned src_width,
1674
 
                   unsigned src_height,
1675
 
                   unsigned src_x,
1676
 
                   unsigned src_y,
1677
 
                   struct radeon_bo *dst_bo,
1678
 
                   intptr_t dst_offset,
1679
 
                   gl_format dst_mesaformat,
1680
 
                   unsigned dst_pitch,
1681
 
                   unsigned dst_width,
1682
 
                   unsigned dst_height,
1683
 
                   unsigned dst_x,
1684
 
                   unsigned dst_y,
1685
 
                   unsigned w,
1686
 
                   unsigned h,
1687
 
                   unsigned flip_y)
1688
 
{
1689
 
    context_t *context = R700_CONTEXT(ctx);
1690
 
    int id = 0;
1691
 
 
1692
 
    if (!r600_check_blit(dst_mesaformat))
1693
 
        return GL_FALSE;
1694
 
 
1695
 
    if (src_bo == dst_bo) {
1696
 
        return GL_FALSE;
1697
 
    }
1698
 
 
1699
 
    if (src_offset % 256 || dst_offset % 256) {
1700
 
        return GL_FALSE;
1701
 
    }
1702
 
 
1703
 
    if (0) {
1704
 
        fprintf(stderr, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1705
 
                src_width, src_height, src_pitch,
1706
 
                _mesa_format_row_stride(src_mesaformat, src_width),
1707
 
                _mesa_get_format_name(src_mesaformat));
1708
 
        fprintf(stderr, "dst: width %d, height %d, pitch %d, format %s\n",
1709
 
                dst_width, dst_height,
1710
 
                _mesa_format_row_stride(dst_mesaformat, dst_width),
1711
 
                _mesa_get_format_name(dst_mesaformat));
1712
 
    }
1713
 
 
1714
 
    /* Flush is needed to make sure that source buffer has correct data */
1715
 
    radeonFlush(ctx);
1716
 
 
1717
 
    rcommonEnsureCmdBufSpace(&context->radeon, 311, __FUNCTION__);
1718
 
 
1719
 
    /* load shaders */
1720
 
    load_shaders(context->radeon.glCtx);
1721
 
 
1722
 
    if (!validate_buffers(context, src_bo, dst_bo))
1723
 
        return GL_FALSE;
1724
 
 
1725
 
    /* set clear state */
1726
 
    /* 120 */
1727
 
    set_default_state(context);
1728
 
 
1729
 
    /* shaders */
1730
 
    /* 72 */
1731
 
    set_shaders(context);
1732
 
 
1733
 
    /* src */
1734
 
    /* 20 */
1735
 
    set_tex_resource(context, src_mesaformat, src_bo,
1736
 
                     src_width, src_height, src_pitch, src_offset);
1737
 
 
1738
 
    /* 5 */
1739
 
    set_tex_sampler(context);
1740
 
 
1741
 
    /* dst */
1742
 
    /* 31 */
1743
 
    set_render_target(context, dst_bo, dst_mesaformat,
1744
 
                      dst_pitch, dst_width, dst_height, dst_offset);
1745
 
    /* scissors */
1746
 
    /* 17 */
1747
 
    set_scissors(context, dst_x, dst_y, dst_x + dst_width, dst_y + dst_height);
1748
 
 
1749
 
    set_vb_data(context, src_x, src_y, dst_x, dst_y, w, h, src_height, flip_y);
1750
 
    /* Vertex buffer setup */
1751
 
    /* 24 */
1752
 
    set_vtx_resource(context);
1753
 
 
1754
 
    /* draw */
1755
 
    /* 10 */
1756
 
    draw_auto(context);
1757
 
 
1758
 
    /* 7 */
1759
 
    r700SyncSurf(context, dst_bo, 0,
1760
 
                 RADEON_GEM_DOMAIN_VRAM|RADEON_GEM_DOMAIN_GTT,
1761
 
                 CB_ACTION_ENA_bit | (1 << (id + 6)));
1762
 
 
1763
 
    /* 5 */
1764
 
    /* XXX drm should handle this in fence submit */
1765
 
    r700WaitForIdleClean(context);
1766
 
 
1767
 
    radeonFlush(ctx);
1768
 
 
1769
 
    return GL_TRUE;
1770
 
}