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
);