2
* Copyright (C) 2009 Advanced Micro Devices, Inc.
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:
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.
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.
28
#include "radeon_common.h"
29
#include "r600_context.h"
31
#include "r600_blit.h"
32
#include "r600_blit_shaders.h"
33
#include "r600_cmdbuf.h"
35
/* common formats supported as both textures and render targets */
36
unsigned r600_check_blit(gl_format mesa_format)
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:
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:
75
case MESA_FORMAT_SARGB8:
76
case MESA_FORMAT_SLA8:
84
/* not sure blit to depth works or not yet */
85
if (_mesa_get_format_bits(mesa_format, GL_DEPTH_BITS) > 0)
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)
95
uint32_t cb_color0_base, cb_color0_size = 0, cb_color0_info = 0, cb_color0_view = 0;
97
uint32_t endian, comp_swap, format;
98
BATCH_LOCALS(&context->radeon);
100
cb_color0_base = dst_offset / 256;
101
endian = ENDIAN_NONE;
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);
108
SETfield(cb_color0_info, ARRAY_LINEAR_GENERAL,
109
CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
111
SETbit(cb_color0_info, BLEND_BYPASS_bit);
113
switch(mesa_format) {
114
case MESA_FORMAT_RGBA8888:
115
#ifdef MESA_BIG_ENDIAN
116
endian = ENDIAN_8IN32;
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);
123
case MESA_FORMAT_SIGNED_RGBA8888:
124
#ifdef MESA_BIG_ENDIAN
125
endian = ENDIAN_8IN32;
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);
132
case MESA_FORMAT_RGBA8888_REV:
133
#ifdef MESA_BIG_ENDIAN
134
endian = ENDIAN_8IN32;
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);
141
case MESA_FORMAT_SIGNED_RGBA8888_REV:
142
#ifdef MESA_BIG_ENDIAN
143
endian = ENDIAN_8IN32;
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);
150
case MESA_FORMAT_ARGB8888:
151
case MESA_FORMAT_XRGB8888:
152
#ifdef MESA_BIG_ENDIAN
153
endian = ENDIAN_8IN32;
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);
160
case MESA_FORMAT_ARGB8888_REV:
161
case MESA_FORMAT_XRGB8888_REV:
162
#ifdef MESA_BIG_ENDIAN
163
endian = ENDIAN_8IN32;
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);
170
case MESA_FORMAT_RGB565:
171
#ifdef MESA_BIG_ENDIAN
172
endian = ENDIAN_8IN16;
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);
179
case MESA_FORMAT_RGB565_REV:
180
#ifdef MESA_BIG_ENDIAN
181
endian = ENDIAN_8IN16;
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);
188
case MESA_FORMAT_ARGB4444:
189
#ifdef MESA_BIG_ENDIAN
190
endian = ENDIAN_8IN16;
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);
197
case MESA_FORMAT_ARGB4444_REV:
198
#ifdef MESA_BIG_ENDIAN
199
endian = ENDIAN_8IN16;
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);
206
case MESA_FORMAT_ARGB1555:
207
#ifdef MESA_BIG_ENDIAN
208
endian = ENDIAN_8IN16;
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);
215
case MESA_FORMAT_ARGB1555_REV:
216
#ifdef MESA_BIG_ENDIAN
217
endian = ENDIAN_8IN16;
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);
224
case MESA_FORMAT_AL88:
225
#ifdef MESA_BIG_ENDIAN
226
endian = ENDIAN_8IN16;
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);
233
case MESA_FORMAT_AL88_REV:
234
#ifdef MESA_BIG_ENDIAN
235
endian = ENDIAN_8IN16;
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);
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);
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);
255
case MESA_FORMAT_CI8:
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);
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);
267
case MESA_FORMAT_RGBA_FLOAT32:
268
#ifdef MESA_BIG_ENDIAN
269
endian = ENDIAN_8IN32;
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);
277
case MESA_FORMAT_RGBA_FLOAT16:
278
#ifdef MESA_BIG_ENDIAN
279
endian = ENDIAN_8IN16;
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);
286
case MESA_FORMAT_ALPHA_FLOAT32:
287
#ifdef MESA_BIG_ENDIAN
288
endian = ENDIAN_8IN32;
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);
296
case MESA_FORMAT_ALPHA_FLOAT16:
297
#ifdef MESA_BIG_ENDIAN
298
endian = ENDIAN_8IN16;
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);
305
case MESA_FORMAT_LUMINANCE_FLOAT32:
306
#ifdef MESA_BIG_ENDIAN
307
endian = ENDIAN_8IN32;
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);
315
case MESA_FORMAT_LUMINANCE_FLOAT16:
316
#ifdef MESA_BIG_ENDIAN
317
endian = ENDIAN_8IN16;
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);
324
case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
325
#ifdef MESA_BIG_ENDIAN
326
endian = ENDIAN_8IN32;
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);
334
case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
335
#ifdef MESA_BIG_ENDIAN
336
endian = ENDIAN_8IN16;
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);
343
case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
344
#ifdef MESA_BIG_ENDIAN
345
endian = ENDIAN_8IN32;
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);
353
case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
354
#ifdef MESA_BIG_ENDIAN
355
endian = ENDIAN_8IN16;
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);
362
case MESA_FORMAT_X8_Z24:
363
case MESA_FORMAT_S8_Z24:
364
#ifdef MESA_BIG_ENDIAN
365
endian = ENDIAN_8IN32;
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);
374
case MESA_FORMAT_Z24_S8:
375
#ifdef MESA_BIG_ENDIAN
376
endian = ENDIAN_8IN32;
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);
385
case MESA_FORMAT_Z16:
386
#ifdef MESA_BIG_ENDIAN
387
endian = ENDIAN_8IN16;
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);
396
case MESA_FORMAT_Z32:
397
#ifdef MESA_BIG_ENDIAN
398
endian = ENDIAN_8IN32;
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);
407
case MESA_FORMAT_SARGB8:
408
#ifdef MESA_BIG_ENDIAN
409
endian = ENDIAN_8IN32;
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);
416
case MESA_FORMAT_SLA8:
417
#ifdef MESA_BIG_ENDIAN
418
endian = ENDIAN_8IN16;
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);
425
case MESA_FORMAT_SL8:
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);
432
fprintf(stderr,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format));
433
assert("Invalid format for US output\n");
437
/* must be 0 on r7xx */
438
if (context->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV770)
439
CLEARbit(cb_color0_info, BLEND_FLOAT32_bit);
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);
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,
452
0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
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));
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
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,
473
0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
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,
481
0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
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);
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,
495
0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
502
static inline void load_shaders(struct gl_context * ctx)
505
radeonContextPtr radeonctx = RADEON_CONTEXT(ctx);
506
context_t *context = R700_CONTEXT(ctx);
510
if (context->blit_bo_loaded == 1)
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;
519
for(i=0; i<sizeof(r6xx_vs)/4; i++) {
520
shader[128+i] = CPU_TO_LE32(r6xx_vs[i]);
522
for(i=0; i<sizeof(r6xx_ps)/4; i++) {
523
shader[256+i] = CPU_TO_LE32(r6xx_ps[i]);
526
radeon_bo_unmap(context->blit_bo);
527
context->blit_bo_loaded = 1;
532
set_shaders(context_t *context)
534
struct radeon_bo * pbo = context->blit_bo;
535
BATCH_LOCALS(&context->radeon);
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;
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;
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);
550
r700SyncSurf(context, pbo, RADEON_GEM_DOMAIN_GTT, 0, SH_ACTION_ENA_bit);
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,
559
RADEON_GEM_DOMAIN_GTT, 0, 0);
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);
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,
574
RADEON_GEM_DOMAIN_GTT, 0, 0);
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);
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,
589
RADEON_GEM_DOMAIN_GTT, 0, 0);
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);
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);
612
set_vtx_resource(context_t *context)
614
struct radeon_bo *bo = context->blit_bo;
615
uint32_t sq_vtx_constant_word2 = 0;
617
BATCH_LOCALS(&context->radeon);
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);
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);
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);
637
r700SyncSurf(context, bo, RADEON_GEM_DOMAIN_GTT, 0, VC_ACTION_ENA_bit);
639
sq_vtx_constant_word2 = 0
640
#ifdef MESA_BIG_ENDIAN
641
| (SQ_ENDIAN_8IN32 << SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift)
643
| (16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
645
BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
647
R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
648
R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET * FETCH_RESOURCE_STRIDE);
650
R600_OUT_BATCH(48 - 1);
651
R600_OUT_BATCH(sq_vtx_constant_word2);
652
R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift);
655
R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER << SQ_TEX_RESOURCE_WORD6_0__TYPE_shift);
656
R600_OUT_BATCH_RELOC(0,
659
RADEON_GEM_DOMAIN_GTT, 0, 0);
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)
670
uint32_t sq_tex_resource0, sq_tex_resource1, sq_tex_resource2, sq_tex_resource4, sq_tex_resource6;
672
sq_tex_resource0 = sq_tex_resource1 = sq_tex_resource2 = sq_tex_resource4 = sq_tex_resource6 = 0;
673
BATCH_LOCALS(&context->radeon);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
1195
fprintf(stderr,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format));
1196
assert("Invalid format for US output\n");
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);
1204
sq_tex_resource2 = src_offset / 256;
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);
1210
r700SyncSurf(context, bo,
1211
RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM,
1212
0, TC_ACTION_ENA_bit);
1214
BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1215
R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
1216
R600_OUT_BATCH(0 * 7);
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,
1228
RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
1229
R600_OUT_BATCH_RELOC(0,
1232
RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
1238
set_tex_sampler(context_t * context)
1240
uint32_t sq_tex_sampler_word0 = 0, sq_tex_sampler_word1 = 0, sq_tex_sampler_word2 = 0;
1243
SETbit(sq_tex_sampler_word2, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit);
1245
BATCH_LOCALS(&context->radeon);
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);
1258
set_scissors(context_t *context, int x1, int y1, int x2, int y2)
1260
BATCH_LOCALS(&context->radeon);
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));
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));
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));
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));
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)
1291
radeon_bo_map(context->blit_bo, 1);
1292
vb = context->blit_bo->ptr;
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;
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);
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);
1309
radeon_bo_unmap(context->blit_bo);
1314
draw_auto(context_t *context)
1316
BATCH_LOCALS(&context->radeon);
1317
uint32_t vgt_primitive_type = 0, vgt_index_type = 0, vgt_draw_initiator = 0, vgt_num_indices;
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,
1324
SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift,
1326
SETfield(vgt_draw_initiator, DI_SRC_SEL_AUTO_INDEX, SOURCE_SELECT_shift,
1327
SOURCE_SELECT_mask);
1329
vgt_num_indices = 3;
1331
BEGIN_BATCH_NO_AUTOSTATE(10);
1333
R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE, 1);
1334
R600_OUT_BATCH(vgt_primitive_type);
1336
R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE, 0));
1337
R600_OUT_BATCH(vgt_index_type);
1339
R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES, 0));
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);
1351
set_default_state(context_t *context)
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);
1375
switch (context->radeon.radeonScreen->chip_family) {
1376
case CHIP_FAMILY_R600:
1382
num_ps_threads = 136;
1383
num_vs_threads = 48;
1386
num_ps_stack_entries = 128;
1387
num_vs_stack_entries = 128;
1388
num_gs_stack_entries = 0;
1389
num_es_stack_entries = 0;
1391
case CHIP_FAMILY_RV630:
1392
case CHIP_FAMILY_RV635:
1398
num_ps_threads = 144;
1399
num_vs_threads = 40;
1402
num_ps_stack_entries = 40;
1403
num_vs_stack_entries = 40;
1404
num_gs_stack_entries = 32;
1405
num_es_stack_entries = 16;
1407
case CHIP_FAMILY_RV610:
1408
case CHIP_FAMILY_RV620:
1409
case CHIP_FAMILY_RS780:
1410
case CHIP_FAMILY_RS880:
1417
num_ps_threads = 136;
1418
num_vs_threads = 48;
1421
num_ps_stack_entries = 40;
1422
num_vs_stack_entries = 40;
1423
num_gs_stack_entries = 32;
1424
num_es_stack_entries = 16;
1426
case CHIP_FAMILY_RV670:
1432
num_ps_threads = 136;
1433
num_vs_threads = 48;
1436
num_ps_stack_entries = 40;
1437
num_vs_stack_entries = 40;
1438
num_gs_stack_entries = 32;
1439
num_es_stack_entries = 16;
1441
case CHIP_FAMILY_RV770:
1447
num_ps_threads = 188;
1448
num_vs_threads = 60;
1451
num_ps_stack_entries = 256;
1452
num_vs_stack_entries = 256;
1453
num_gs_stack_entries = 0;
1454
num_es_stack_entries = 0;
1456
case CHIP_FAMILY_RV730:
1457
case CHIP_FAMILY_RV740:
1463
num_ps_threads = 188;
1464
num_vs_threads = 60;
1467
num_ps_stack_entries = 128;
1468
num_vs_stack_entries = 128;
1469
num_gs_stack_entries = 0;
1470
num_es_stack_entries = 0;
1472
case CHIP_FAMILY_RV710:
1478
num_ps_threads = 144;
1479
num_vs_threads = 48;
1482
num_ps_stack_entries = 128;
1483
num_vs_stack_entries = 128;
1484
num_gs_stack_entries = 0;
1485
num_es_stack_entries = 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);
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);
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);
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);
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);
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);
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);
1538
SETfield(ta_cntl_aux, 28, TD_FIFO_CREDIT_shift, TD_FIFO_CREDIT_mask);
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;
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);
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);
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);
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);
1571
R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE, 9);
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));
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);
1603
R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX, 4);
1604
R600_OUT_BATCH(0xffffff);
1609
R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL, 13);
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);
1629
R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN, 3);
1634
R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN, 0);
1635
R600_OUT_BATCH_REGVAL(SX_ALPHA_TEST_CONTROL, 0);
1641
static GLboolean validate_buffers(context_t *rmesa,
1642
struct radeon_bo *src_bo,
1643
struct radeon_bo *dst_bo)
1647
radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
1649
ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1650
src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
1654
ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1655
dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
1659
ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
1661
RADEON_GEM_DOMAIN_GTT, 0);
1668
unsigned r600_blit(struct gl_context *ctx,
1669
struct radeon_bo *src_bo,
1670
intptr_t src_offset,
1671
gl_format src_mesaformat,
1674
unsigned src_height,
1677
struct radeon_bo *dst_bo,
1678
intptr_t dst_offset,
1679
gl_format dst_mesaformat,
1682
unsigned dst_height,
1689
context_t *context = R700_CONTEXT(ctx);
1692
if (!r600_check_blit(dst_mesaformat))
1695
if (src_bo == dst_bo) {
1699
if (src_offset % 256 || dst_offset % 256) {
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));
1714
/* Flush is needed to make sure that source buffer has correct data */
1717
rcommonEnsureCmdBufSpace(&context->radeon, 311, __FUNCTION__);
1720
load_shaders(context->radeon.glCtx);
1722
if (!validate_buffers(context, src_bo, dst_bo))
1725
/* set clear state */
1727
set_default_state(context);
1731
set_shaders(context);
1735
set_tex_resource(context, src_mesaformat, src_bo,
1736
src_width, src_height, src_pitch, src_offset);
1739
set_tex_sampler(context);
1743
set_render_target(context, dst_bo, dst_mesaformat,
1744
dst_pitch, dst_width, dst_height, dst_offset);
1747
set_scissors(context, dst_x, dst_y, dst_x + dst_width, dst_y + dst_height);
1749
set_vb_data(context, src_x, src_y, dst_x, dst_y, w, h, src_height, flip_y);
1750
/* Vertex buffer setup */
1752
set_vtx_resource(context);
1759
r700SyncSurf(context, dst_bo, 0,
1760
RADEON_GEM_DOMAIN_VRAM|RADEON_GEM_DOMAIN_GTT,
1761
CB_ACTION_ENA_bit | (1 << (id + 6)));
1764
/* XXX drm should handle this in fence submit */
1765
r700WaitForIdleClean(context);