2 * Copyright (C) 2010 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 "evergreen_off.h"
32 #include "evergreen_diff.h"
34 #include "evergreen_blit.h"
35 #include "evergreen_blit_shaders.h"
36 #include "r600_cmdbuf.h"
38 /* common formats supported as both textures and render targets */
39 unsigned evergreen_check_blit(gl_format mesa_format
)
41 switch (mesa_format
) {
42 case MESA_FORMAT_RGBA8888
:
43 case MESA_FORMAT_SIGNED_RGBA8888
:
44 case MESA_FORMAT_RGBA8888_REV
:
45 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
46 case MESA_FORMAT_ARGB8888
:
47 case MESA_FORMAT_XRGB8888
:
48 case MESA_FORMAT_ARGB8888_REV
:
49 case MESA_FORMAT_XRGB8888_REV
:
50 case MESA_FORMAT_RGB565
:
51 case MESA_FORMAT_RGB565_REV
:
52 case MESA_FORMAT_ARGB4444
:
53 case MESA_FORMAT_ARGB4444_REV
:
54 case MESA_FORMAT_ARGB1555
:
55 case MESA_FORMAT_ARGB1555_REV
:
56 case MESA_FORMAT_AL88
:
57 case MESA_FORMAT_AL88_REV
:
58 case MESA_FORMAT_RGB332
:
63 case MESA_FORMAT_RGBA_FLOAT32
:
64 case MESA_FORMAT_RGBA_FLOAT16
:
65 case MESA_FORMAT_ALPHA_FLOAT32
:
66 case MESA_FORMAT_ALPHA_FLOAT16
:
67 case MESA_FORMAT_LUMINANCE_FLOAT32
:
68 case MESA_FORMAT_LUMINANCE_FLOAT16
:
69 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
70 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
71 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
72 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
73 case MESA_FORMAT_X8_Z24
:
74 case MESA_FORMAT_S8_Z24
:
75 case MESA_FORMAT_Z24_S8
:
78 case MESA_FORMAT_SARGB8
:
79 case MESA_FORMAT_SLA8
:
87 /* not sure blit to depth works or not yet */
88 if (_mesa_get_format_bits(mesa_format
, GL_DEPTH_BITS
) > 0)
95 eg_set_render_target(context_t
*context
, struct radeon_bo
*bo
, gl_format mesa_format
,
96 int nPitchInPixel
, int w
, int h
, intptr_t dst_offset
)
98 uint32_t cb_color0_base
, cb_color0_info
= 0;
99 uint32_t cb_color0_pitch
= 0, cb_color0_slice
= 0, cb_color0_attrib
= 0;
101 uint32_t comp_swap
, format
, source_format
, number_type
;
102 BATCH_LOCALS(&context
->radeon
);
104 cb_color0_base
= dst_offset
/ 256;
107 SETfield(cb_color0_pitch
, (nPitchInPixel
/ 8) - 1,
108 EG_CB_COLOR0_PITCH__TILE_MAX_shift
,
109 EG_CB_COLOR0_PITCH__TILE_MAX_mask
);
112 SETfield(cb_color0_slice
,
113 ((nPitchInPixel
* h
) / 64) - 1,
114 EG_CB_COLOR0_SLICE__TILE_MAX_shift
,
115 EG_CB_COLOR0_SLICE__TILE_MAX_mask
);
117 /* CB_COLOR0_ATTRIB */ /* TODO : for z clear, this should be set to 0 */
118 SETbit(cb_color0_attrib
,
119 EG_CB_COLOR0_ATTRIB__NON_DISP_TILING_ORDER_bit
);
121 SETfield(cb_color0_info
,
123 EG_CB_COLOR0_INFO__ENDIAN_shift
,
124 EG_CB_COLOR0_INFO__ENDIAN_mask
);
125 SETfield(cb_color0_info
,
126 ARRAY_LINEAR_GENERAL
,
127 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
128 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
130 SETbit(cb_color0_info
, EG_CB_COLOR0_INFO__BLEND_BYPASS_bit
);
132 switch(mesa_format
) {
133 case MESA_FORMAT_RGBA8888
:
134 format
= COLOR_8_8_8_8
;
135 comp_swap
= SWAP_STD_REV
;
136 number_type
= NUMBER_UNORM
;
139 case MESA_FORMAT_SIGNED_RGBA8888
:
140 format
= COLOR_8_8_8_8
;
141 comp_swap
= SWAP_STD_REV
;
142 number_type
= NUMBER_SNORM
;
145 case MESA_FORMAT_RGBA8888_REV
:
146 format
= COLOR_8_8_8_8
;
147 comp_swap
= SWAP_STD
;
148 number_type
= NUMBER_UNORM
;
151 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
152 format
= COLOR_8_8_8_8
;
153 comp_swap
= SWAP_STD
;
154 number_type
= NUMBER_SNORM
;
157 case MESA_FORMAT_ARGB8888
:
158 case MESA_FORMAT_XRGB8888
:
159 format
= COLOR_8_8_8_8
;
160 comp_swap
= SWAP_ALT
;
161 number_type
= NUMBER_UNORM
;
164 case MESA_FORMAT_ARGB8888_REV
:
165 case MESA_FORMAT_XRGB8888_REV
:
166 format
= COLOR_8_8_8_8
;
167 comp_swap
= SWAP_ALT_REV
;
168 number_type
= NUMBER_UNORM
;
171 case MESA_FORMAT_RGB565
:
172 format
= COLOR_5_6_5
;
173 comp_swap
= SWAP_STD_REV
;
174 number_type
= NUMBER_UNORM
;
177 case MESA_FORMAT_RGB565_REV
:
178 format
= COLOR_5_6_5
;
179 comp_swap
= SWAP_STD
;
180 number_type
= NUMBER_UNORM
;
183 case MESA_FORMAT_ARGB4444
:
184 format
= COLOR_4_4_4_4
;
185 comp_swap
= SWAP_ALT
;
186 number_type
= NUMBER_UNORM
;
189 case MESA_FORMAT_ARGB4444_REV
:
190 format
= COLOR_4_4_4_4
;
191 comp_swap
= SWAP_ALT_REV
;
192 number_type
= NUMBER_UNORM
;
195 case MESA_FORMAT_ARGB1555
:
196 format
= COLOR_1_5_5_5
;
197 comp_swap
= SWAP_ALT
;
198 number_type
= NUMBER_UNORM
;
201 case MESA_FORMAT_ARGB1555_REV
:
202 format
= COLOR_1_5_5_5
;
203 comp_swap
= SWAP_ALT_REV
;
204 number_type
= NUMBER_UNORM
;
207 case MESA_FORMAT_AL88
:
209 comp_swap
= SWAP_STD
;
210 number_type
= NUMBER_UNORM
;
213 case MESA_FORMAT_AL88_REV
:
215 comp_swap
= SWAP_STD_REV
;
216 number_type
= NUMBER_UNORM
;
219 case MESA_FORMAT_RGB332
:
220 format
= COLOR_3_3_2
;
221 comp_swap
= SWAP_STD_REV
;
222 number_type
= NUMBER_UNORM
;
227 comp_swap
= SWAP_ALT_REV
;
228 number_type
= NUMBER_UNORM
;
232 case MESA_FORMAT_CI8
:
234 comp_swap
= SWAP_STD
;
235 number_type
= NUMBER_UNORM
;
240 comp_swap
= SWAP_ALT
;
241 number_type
= NUMBER_UNORM
;
244 case MESA_FORMAT_RGBA_FLOAT32
:
245 format
= COLOR_32_32_32_32_FLOAT
;
246 comp_swap
= SWAP_STD
;
247 number_type
= NUMBER_FLOAT
;
250 case MESA_FORMAT_RGBA_FLOAT16
:
251 format
= COLOR_16_16_16_16_FLOAT
;
252 comp_swap
= SWAP_STD
;
253 number_type
= NUMBER_FLOAT
;
256 case MESA_FORMAT_ALPHA_FLOAT32
:
257 format
= COLOR_32_FLOAT
;
258 comp_swap
= SWAP_ALT_REV
;
259 number_type
= NUMBER_FLOAT
;
262 case MESA_FORMAT_ALPHA_FLOAT16
:
263 format
= COLOR_16_FLOAT
;
264 comp_swap
= SWAP_ALT_REV
;
265 number_type
= NUMBER_FLOAT
;
268 case MESA_FORMAT_LUMINANCE_FLOAT32
:
269 format
= COLOR_32_FLOAT
;
270 comp_swap
= SWAP_ALT
;
271 number_type
= NUMBER_FLOAT
;
274 case MESA_FORMAT_LUMINANCE_FLOAT16
:
275 format
= COLOR_16_FLOAT
;
276 comp_swap
= SWAP_ALT
;
277 number_type
= NUMBER_FLOAT
;
280 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
281 format
= COLOR_32_32_FLOAT
;
282 comp_swap
= SWAP_ALT_REV
;
283 number_type
= NUMBER_FLOAT
;
286 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
287 format
= COLOR_16_16_FLOAT
;
288 comp_swap
= SWAP_ALT_REV
;
289 number_type
= NUMBER_FLOAT
;
292 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
293 format
= COLOR_32_FLOAT
;
294 comp_swap
= SWAP_STD
;
295 number_type
= NUMBER_FLOAT
;
298 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
299 format
= COLOR_16_FLOAT
;
300 comp_swap
= SWAP_STD
;
301 number_type
= NUMBER_UNORM
;
304 case MESA_FORMAT_X8_Z24
:
305 case MESA_FORMAT_S8_Z24
:
307 comp_swap
= SWAP_STD
;
308 number_type
= NUMBER_UNORM
;
309 SETfield(cb_color0_info
,
310 ARRAY_1D_TILED_THIN1
,
311 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
312 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
315 case MESA_FORMAT_Z24_S8
:
317 comp_swap
= SWAP_STD
;
318 number_type
= NUMBER_UNORM
;
319 SETfield(cb_color0_info
,
320 ARRAY_1D_TILED_THIN1
,
321 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
322 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
325 case MESA_FORMAT_Z16
:
327 comp_swap
= SWAP_STD
;
328 number_type
= NUMBER_UNORM
;
329 SETfield(cb_color0_info
,
330 ARRAY_1D_TILED_THIN1
,
331 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
332 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
335 case MESA_FORMAT_Z32
:
337 comp_swap
= SWAP_STD
;
338 number_type
= NUMBER_UNORM
;
339 SETfield(cb_color0_info
,
340 ARRAY_1D_TILED_THIN1
,
341 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
342 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
345 case MESA_FORMAT_SARGB8
:
346 format
= COLOR_8_8_8_8
;
347 comp_swap
= SWAP_ALT
;
348 number_type
= NUMBER_SRGB
;
351 case MESA_FORMAT_SLA8
:
353 comp_swap
= SWAP_ALT_REV
;
354 number_type
= NUMBER_SRGB
;
357 case MESA_FORMAT_SL8
:
359 comp_swap
= SWAP_ALT_REV
;
360 number_type
= NUMBER_SRGB
;
364 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
365 assert("Invalid format for US output\n");
369 SETfield(cb_color0_info
,
371 EG_CB_COLOR0_INFO__FORMAT_shift
,
372 EG_CB_COLOR0_INFO__FORMAT_mask
);
373 SETfield(cb_color0_info
,
375 EG_CB_COLOR0_INFO__COMP_SWAP_shift
,
376 EG_CB_COLOR0_INFO__COMP_SWAP_mask
);
377 SETfield(cb_color0_info
,
379 EG_CB_COLOR0_INFO__NUMBER_TYPE_shift
,
380 EG_CB_COLOR0_INFO__NUMBER_TYPE_mask
);
381 SETfield(cb_color0_info
,
383 EG_CB_COLOR0_INFO__SOURCE_FORMAT_shift
,
384 EG_CB_COLOR0_INFO__SOURCE_FORMAT_mask
);
386 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
387 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_BASE
+ (4 * id
), 1);
388 R600_OUT_BATCH(cb_color0_base
);
389 R600_OUT_BATCH_RELOC(cb_color0_base
,
392 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
395 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
396 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_COLOR0_INFO
, cb_color0_info
);
397 R600_OUT_BATCH_RELOC(cb_color0_info
,
400 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
403 BEGIN_BATCH_NO_AUTOSTATE(5);
404 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_PITCH
, 3);
405 R600_OUT_BATCH(cb_color0_pitch
);
406 R600_OUT_BATCH(cb_color0_slice
);
410 BEGIN_BATCH_NO_AUTOSTATE(4);
411 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_ATTRIB
, 2);
412 R600_OUT_BATCH(cb_color0_attrib
);
415 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_CMASK.u32All);
416 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_CMASK_SLICE.u32All);
417 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_FMASK.u32All);
418 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_FMASK_SLICE.u32All);
426 static inline void eg_load_shaders(struct gl_context
* ctx
)
429 radeonContextPtr radeonctx
= RADEON_CONTEXT(ctx
);
430 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
434 if (context
->blit_bo_loaded
== 1)
438 context
->blit_bo
= radeon_bo_open(radeonctx
->radeonScreen
->bom
, 0,
439 size
, 256, RADEON_GEM_DOMAIN_GTT
, 0);
440 radeon_bo_map(context
->blit_bo
, 1);
441 shader
= context
->blit_bo
->ptr
;
443 for(i
=0; i
<sizeof(evergreen_vs
)/4; i
++) {
444 shader
[128+i
] = evergreen_vs
[i
];
446 for(i
=0; i
<sizeof(evergreen_ps
)/4; i
++) {
447 shader
[256+i
] = evergreen_ps
[i
];
450 radeon_bo_unmap(context
->blit_bo
);
451 context
->blit_bo_loaded
= 1;
456 eg_set_shaders(context_t
*context
)
458 struct radeon_bo
* pbo
= context
->blit_bo
;
459 uint32_t sq_pgm_start_fs
= (512 >> 8);
460 uint32_t sq_pgm_resources_fs
= 0;
462 uint32_t sq_pgm_start_vs
= (512 >> 8);
463 uint32_t sq_pgm_resources_vs
= (2 << NUM_GPRS_shift
);
465 uint32_t sq_pgm_start_ps
= (1024 >> 8);
466 uint32_t sq_pgm_resources_ps
= (1 << NUM_GPRS_shift
);
467 uint32_t sq_pgm_exports_ps
= (1 << 1);
468 BATCH_LOCALS(&context
->radeon
);
470 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
473 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
474 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_START_FS
, 1);
475 R600_OUT_BATCH(sq_pgm_start_fs
);
476 R600_OUT_BATCH_RELOC(sq_pgm_start_fs
,
479 RADEON_GEM_DOMAIN_GTT
, 0, 0);
482 BEGIN_BATCH_NO_AUTOSTATE(3);
483 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_PGM_RESOURCES_FS
, sq_pgm_resources_fs
);
487 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
488 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_START_VS
, 1);
489 R600_OUT_BATCH(sq_pgm_start_vs
);
490 R600_OUT_BATCH_RELOC(sq_pgm_start_vs
,
493 RADEON_GEM_DOMAIN_GTT
, 0, 0);
496 BEGIN_BATCH_NO_AUTOSTATE(4);
497 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_VS
, 2);
498 R600_OUT_BATCH(sq_pgm_resources_vs
);
503 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
504 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_START_PS
, 1);
505 R600_OUT_BATCH(sq_pgm_start_ps
);
506 R600_OUT_BATCH_RELOC(sq_pgm_start_ps
,
509 RADEON_GEM_DOMAIN_GTT
, 0, 0);
512 BEGIN_BATCH_NO_AUTOSTATE(5);
513 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_PS
, 3);
514 R600_OUT_BATCH(sq_pgm_resources_ps
);
516 R600_OUT_BATCH(sq_pgm_exports_ps
);
524 eg_set_vtx_resource(context_t
*context
)
526 struct radeon_bo
*bo
= context
->blit_bo
;
527 uint32_t sq_vtx_constant_word3
= 0;
528 BATCH_LOCALS(&context
->radeon
);
530 BEGIN_BATCH_NO_AUTOSTATE(6);
531 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
532 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
535 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
536 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
540 if (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_CEDAR
)
541 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, TC_ACTION_ENA_bit
);
543 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
545 SETfield(sq_vtx_constant_word3
, SQ_SEL_X
,
546 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_X_shift
,
547 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_X_mask
);
548 SETfield(sq_vtx_constant_word3
, SQ_SEL_Y
,
549 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Y_shift
,
550 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Y_mask
);
551 SETfield(sq_vtx_constant_word3
, SQ_SEL_Z
,
552 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Z_shift
,
553 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Z_mask
);
554 SETfield(sq_vtx_constant_word3
, SQ_SEL_W
,
555 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_shift
,
556 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_mask
);
558 BEGIN_BATCH_NO_AUTOSTATE(10 + 2);
560 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 8));
561 R600_OUT_BATCH(EG_SQ_FETCH_RESOURCE_VS_OFFSET
* EG_FETCH_RESOURCE_STRIDE
);
563 R600_OUT_BATCH(48 - 1);
564 R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
);
565 R600_OUT_BATCH(sq_vtx_constant_word3
);
569 R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER
<< SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
);
570 R600_OUT_BATCH_RELOC(0,
573 RADEON_GEM_DOMAIN_GTT
, 0, 0);
580 eg_set_tex_resource(context_t
* context
,
581 gl_format mesa_format
, struct radeon_bo
*bo
, int w
, int h
,
582 int TexelPitch
, intptr_t src_offset
)
584 uint32_t sq_tex_resource0
, sq_tex_resource1
, sq_tex_resource2
, sq_tex_resource4
, sq_tex_resource7
;
586 sq_tex_resource0
= sq_tex_resource1
= sq_tex_resource2
= sq_tex_resource4
= sq_tex_resource7
= 0;
587 BATCH_LOCALS(&context
->radeon
);
589 SETfield(sq_tex_resource0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
590 SETfield(sq_tex_resource0
, ARRAY_LINEAR_GENERAL
,
591 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
592 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
594 switch (mesa_format
) {
595 case MESA_FORMAT_RGBA8888
:
596 case MESA_FORMAT_SIGNED_RGBA8888
:
597 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
598 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
599 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
600 SETfield(sq_tex_resource4
, SQ_SEL_W
,
601 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
602 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
603 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
604 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
605 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
606 SETfield(sq_tex_resource4
, SQ_SEL_X
,
607 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
608 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
609 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
610 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
611 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
612 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
613 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
614 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
615 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
616 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
619 case MESA_FORMAT_RGBA8888_REV
:
620 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
621 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
622 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
623 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
624 SETfield(sq_tex_resource4
, SQ_SEL_X
,
625 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
626 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
627 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
628 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
629 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
630 SETfield(sq_tex_resource4
, SQ_SEL_W
,
631 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
632 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
633 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
634 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
635 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
636 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
637 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
638 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
639 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
640 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
643 case MESA_FORMAT_ARGB8888
:
644 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
645 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
646 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
647 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
648 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
649 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
650 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
651 SETfield(sq_tex_resource4
, SQ_SEL_X
,
652 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
653 SETfield(sq_tex_resource4
, SQ_SEL_W
,
654 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
656 case MESA_FORMAT_XRGB8888
:
657 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
658 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
659 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
660 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
661 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
662 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
663 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
664 SETfield(sq_tex_resource4
, SQ_SEL_X
,
665 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
666 SETfield(sq_tex_resource4
, SQ_SEL_1
,
667 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
669 case MESA_FORMAT_ARGB8888_REV
:
670 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
671 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
672 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
673 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
674 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
675 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
676 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
677 SETfield(sq_tex_resource4
, SQ_SEL_W
,
678 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
679 SETfield(sq_tex_resource4
, SQ_SEL_X
,
680 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
682 case MESA_FORMAT_XRGB8888_REV
:
683 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
684 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
685 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
686 SETfield(sq_tex_resource4
, SQ_SEL_1
,
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_W
,
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
);
695 case MESA_FORMAT_RGB565
:
696 SETfield(sq_tex_resource7
, FMT_5_6_5
,
697 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
698 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
699 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
700 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
701 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
702 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
703 SETfield(sq_tex_resource4
, SQ_SEL_X
,
704 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
705 SETfield(sq_tex_resource4
, SQ_SEL_1
,
706 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
708 case MESA_FORMAT_RGB565_REV
:
709 SETfield(sq_tex_resource7
, FMT_5_6_5
,
710 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
711 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
712 SETfield(sq_tex_resource4
, SQ_SEL_X
,
713 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
714 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
715 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
716 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
717 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
718 SETfield(sq_tex_resource4
, SQ_SEL_1
,
719 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
721 case MESA_FORMAT_ARGB4444
:
722 SETfield(sq_tex_resource7
, FMT_4_4_4_4
,
723 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
724 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
725 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
726 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
727 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
728 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
729 SETfield(sq_tex_resource4
, SQ_SEL_X
,
730 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
731 SETfield(sq_tex_resource4
, SQ_SEL_W
,
732 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
734 case MESA_FORMAT_ARGB4444_REV
:
735 SETfield(sq_tex_resource7
, FMT_4_4_4_4
,
736 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
737 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
738 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
739 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
740 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
741 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
742 SETfield(sq_tex_resource4
, SQ_SEL_W
,
743 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
744 SETfield(sq_tex_resource4
, SQ_SEL_X
,
745 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
747 case MESA_FORMAT_ARGB1555
:
748 SETfield(sq_tex_resource7
, FMT_1_5_5_5
,
749 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
750 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
751 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
752 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
753 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
754 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
755 SETfield(sq_tex_resource4
, SQ_SEL_X
,
756 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
757 SETfield(sq_tex_resource4
, SQ_SEL_W
,
758 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
760 case MESA_FORMAT_ARGB1555_REV
:
761 SETfield(sq_tex_resource7
, FMT_1_5_5_5
,
762 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
763 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
764 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
765 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
766 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
767 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
768 SETfield(sq_tex_resource4
, SQ_SEL_W
,
769 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
770 SETfield(sq_tex_resource4
, SQ_SEL_X
,
771 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
773 case MESA_FORMAT_AL88
:
774 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
775 SETfield(sq_tex_resource7
, FMT_8_8
,
776 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
777 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
778 SETfield(sq_tex_resource4
, SQ_SEL_X
,
779 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
780 SETfield(sq_tex_resource4
, SQ_SEL_X
,
781 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
782 SETfield(sq_tex_resource4
, SQ_SEL_X
,
783 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
784 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
785 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
787 case MESA_FORMAT_RGB332
:
788 SETfield(sq_tex_resource7
, FMT_3_3_2
,
789 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
790 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
791 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
792 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
793 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
794 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
795 SETfield(sq_tex_resource4
, SQ_SEL_X
,
796 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
797 SETfield(sq_tex_resource4
, SQ_SEL_1
,
798 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
800 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
801 SETfield(sq_tex_resource7
, FMT_8
,
802 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
803 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
804 SETfield(sq_tex_resource4
, SQ_SEL_0
,
805 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
806 SETfield(sq_tex_resource4
, SQ_SEL_0
,
807 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
808 SETfield(sq_tex_resource4
, SQ_SEL_0
,
809 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
810 SETfield(sq_tex_resource4
, SQ_SEL_X
,
811 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
813 case MESA_FORMAT_L8
: /* X, X, X, ONE */
814 SETfield(sq_tex_resource7
, FMT_8
,
815 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
816 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
817 SETfield(sq_tex_resource4
, SQ_SEL_X
,
818 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
819 SETfield(sq_tex_resource4
, SQ_SEL_X
,
820 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
821 SETfield(sq_tex_resource4
, SQ_SEL_X
,
822 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
823 SETfield(sq_tex_resource4
, SQ_SEL_1
,
824 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
826 case MESA_FORMAT_I8
: /* X, X, X, X */
827 case MESA_FORMAT_CI8
:
828 SETfield(sq_tex_resource7
, FMT_8
,
829 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
830 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
831 SETfield(sq_tex_resource4
, SQ_SEL_X
,
832 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
833 SETfield(sq_tex_resource4
, SQ_SEL_X
,
834 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
835 SETfield(sq_tex_resource4
, SQ_SEL_X
,
836 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
837 SETfield(sq_tex_resource4
, SQ_SEL_X
,
838 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
840 case MESA_FORMAT_RGBA_FLOAT32
:
841 SETfield(sq_tex_resource7
, FMT_32_32_32_32_FLOAT
,
842 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
843 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
844 SETfield(sq_tex_resource4
, SQ_SEL_X
,
845 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
846 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
847 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
848 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
849 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
850 SETfield(sq_tex_resource4
, SQ_SEL_W
,
851 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
853 case MESA_FORMAT_RGBA_FLOAT16
:
854 SETfield(sq_tex_resource7
, FMT_16_16_16_16_FLOAT
,
855 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
856 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
857 SETfield(sq_tex_resource4
, SQ_SEL_X
,
858 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
859 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
860 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
861 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
862 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
863 SETfield(sq_tex_resource4
, SQ_SEL_W
,
864 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
866 case MESA_FORMAT_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
867 SETfield(sq_tex_resource7
, FMT_32_FLOAT
,
868 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
869 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
870 SETfield(sq_tex_resource4
, SQ_SEL_0
,
871 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
872 SETfield(sq_tex_resource4
, SQ_SEL_0
,
873 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
874 SETfield(sq_tex_resource4
, SQ_SEL_0
,
875 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
876 SETfield(sq_tex_resource4
, SQ_SEL_X
,
877 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
879 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
880 SETfield(sq_tex_resource7
, FMT_16_FLOAT
,
881 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
882 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
883 SETfield(sq_tex_resource4
, SQ_SEL_0
,
884 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
885 SETfield(sq_tex_resource4
, SQ_SEL_0
,
886 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
887 SETfield(sq_tex_resource4
, SQ_SEL_0
,
888 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
889 SETfield(sq_tex_resource4
, SQ_SEL_X
,
890 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
892 case MESA_FORMAT_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
893 SETfield(sq_tex_resource7
, FMT_32_FLOAT
,
894 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
895 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
896 SETfield(sq_tex_resource4
, SQ_SEL_X
,
897 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
898 SETfield(sq_tex_resource4
, SQ_SEL_X
,
899 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
900 SETfield(sq_tex_resource4
, SQ_SEL_X
,
901 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
902 SETfield(sq_tex_resource4
, SQ_SEL_1
,
903 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
905 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
906 SETfield(sq_tex_resource7
, FMT_16_FLOAT
,
907 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
908 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
909 SETfield(sq_tex_resource4
, SQ_SEL_X
,
910 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
911 SETfield(sq_tex_resource4
, SQ_SEL_X
,
912 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
913 SETfield(sq_tex_resource4
, SQ_SEL_X
,
914 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
915 SETfield(sq_tex_resource4
, SQ_SEL_1
,
916 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
918 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
919 SETfield(sq_tex_resource7
, FMT_32_32_FLOAT
,
920 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
921 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
922 SETfield(sq_tex_resource4
, SQ_SEL_X
,
923 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
924 SETfield(sq_tex_resource4
, SQ_SEL_X
,
925 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
926 SETfield(sq_tex_resource4
, SQ_SEL_X
,
927 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
928 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
929 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
931 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
932 SETfield(sq_tex_resource7
, FMT_16_16_FLOAT
,
933 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
934 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
935 SETfield(sq_tex_resource4
, SQ_SEL_X
,
936 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
937 SETfield(sq_tex_resource4
, SQ_SEL_X
,
938 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
939 SETfield(sq_tex_resource4
, SQ_SEL_X
,
940 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
941 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
942 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
944 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
945 SETfield(sq_tex_resource7
, FMT_32_FLOAT
,
946 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
947 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
948 SETfield(sq_tex_resource4
, SQ_SEL_X
,
949 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
950 SETfield(sq_tex_resource4
, SQ_SEL_X
,
951 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
952 SETfield(sq_tex_resource4
, SQ_SEL_X
,
953 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
954 SETfield(sq_tex_resource4
, SQ_SEL_X
,
955 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
957 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
958 SETfield(sq_tex_resource7
, FMT_16_FLOAT
,
959 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
960 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
961 SETfield(sq_tex_resource4
, SQ_SEL_X
,
962 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
963 SETfield(sq_tex_resource4
, SQ_SEL_X
,
964 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
965 SETfield(sq_tex_resource4
, SQ_SEL_X
,
966 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
967 SETfield(sq_tex_resource4
, SQ_SEL_X
,
968 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
970 case MESA_FORMAT_Z16
:
972 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
973 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
974 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
975 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
976 SETfield(sq_tex_resource7
, FMT_16
,
977 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
978 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
979 SETfield(sq_tex_resource4
, SQ_SEL_X
,
980 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
981 SETfield(sq_tex_resource4
, SQ_SEL_X
,
982 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
983 SETfield(sq_tex_resource4
, SQ_SEL_X
,
984 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
985 SETfield(sq_tex_resource4
, SQ_SEL_X
,
986 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
988 case MESA_FORMAT_X8_Z24
:
990 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
991 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
992 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
993 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
994 SETfield(sq_tex_resource7
, FMT_8_24
,
995 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
996 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
997 SETfield(sq_tex_resource4
, SQ_SEL_X
,
998 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
999 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1000 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1001 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1002 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1003 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1004 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1006 case MESA_FORMAT_S8_Z24
:
1008 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
1009 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
1010 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
1011 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
1012 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1013 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1014 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1015 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1016 SETfield(sq_tex_resource7
, FMT_8_24
,
1017 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1018 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1019 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1020 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1021 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1022 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1023 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1024 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1025 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1026 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1028 case MESA_FORMAT_Z24_S8
:
1030 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
1031 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
1032 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
1033 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
1034 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1035 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1036 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1037 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1038 SETfield(sq_tex_resource7
, FMT_24_8
,
1039 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1040 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1041 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1042 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1043 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1044 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1045 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1046 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1047 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1048 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1050 case MESA_FORMAT_Z32
:
1052 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
1053 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
1054 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
1055 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
1056 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1057 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1058 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1059 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1060 SETfield(sq_tex_resource7
, FMT_32
,
1061 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1062 EG_SQ_TEX_RESOURCE_WORD7_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_S8
:
1074 CLEARbit(sq_tex_resource0
, EG_SQ_TEX_RESOURCE_WORD0_0__NDTO_bit
);
1075 SETfield(sq_tex_resource1
, ARRAY_1D_TILED_THIN1
,
1076 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_shift
,
1077 EG_SQ_TEX_RESOURCE_WORD1_0__ARRAY_MODE_mask
);
1078 SETfield(sq_tex_resource7
, FMT_8
,
1079 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1080 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1081 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1082 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1083 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1084 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1085 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1086 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1087 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1088 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1090 case MESA_FORMAT_SARGB8
:
1091 SETfield(sq_tex_resource7
, FMT_8_8_8_8
,
1092 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1093 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1094 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
1095 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1096 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1097 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1098 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1099 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1100 SETfield(sq_tex_resource4
, SQ_SEL_W
,
1101 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1102 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1104 case MESA_FORMAT_SLA8
:
1105 SETfield(sq_tex_resource7
, FMT_8_8
,
1106 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1107 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1108 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1109 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1110 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1111 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1112 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1113 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1114 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1115 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1116 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1118 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
1119 SETfield(sq_tex_resource7
, FMT_8
,
1120 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift
,
1121 EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask
);
1122 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1123 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1124 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1125 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1126 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1127 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1128 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1129 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1130 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1133 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
1134 assert("Invalid format for US output\n");
1138 SETfield(sq_tex_resource0
, (TexelPitch
/8)-1,
1139 EG_SQ_TEX_RESOURCE_WORD0_0__PITCH_shift
,
1140 EG_SQ_TEX_RESOURCE_WORD0_0__PITCH_mask
);
1141 SETfield(sq_tex_resource0
, w
- 1,
1142 EG_SQ_TEX_RESOURCE_WORD0_0__TEX_WIDTH_shift
,
1143 EG_SQ_TEX_RESOURCE_WORD0_0__TEX_WIDTH_mask
);
1144 SETfield(sq_tex_resource1
, h
- 1,
1145 EG_SQ_TEX_RESOURCE_WORD1_0__TEX_HEIGHT_shift
,
1146 EG_SQ_TEX_RESOURCE_WORD1_0__TEX_HEIGHT_mask
);
1148 sq_tex_resource2
= src_offset
/ 256;
1150 SETfield(sq_tex_resource7
, SQ_TEX_VTX_VALID_TEXTURE
,
1151 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
,
1152 SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
1154 r700SyncSurf(context
, bo
,
1155 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
1156 0, TC_ACTION_ENA_bit
);
1158 BEGIN_BATCH_NO_AUTOSTATE(10 + 4);
1159 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 8));
1160 R600_OUT_BATCH(0 * 7);
1161 R600_OUT_BATCH(sq_tex_resource0
);
1162 R600_OUT_BATCH(sq_tex_resource1
);
1163 R600_OUT_BATCH(sq_tex_resource2
);
1165 R600_OUT_BATCH(sq_tex_resource4
);
1168 R600_OUT_BATCH(sq_tex_resource7
);
1169 R600_OUT_BATCH_RELOC(0,
1172 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1173 R600_OUT_BATCH_RELOC(0,
1176 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1182 eg_set_tex_sampler(context_t
* context
)
1184 uint32_t sq_tex_sampler_word0
= 0, sq_tex_sampler_word1
= 0, sq_tex_sampler_word2
= 0;
1187 SETbit(sq_tex_sampler_word2
, EG_SQ_TEX_SAMPLER_WORD2_0__TYPE_bit
);
1189 BATCH_LOCALS(&context
->radeon
);
1191 BEGIN_BATCH_NO_AUTOSTATE(5);
1192 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
1193 R600_OUT_BATCH(i
* 3);
1194 R600_OUT_BATCH(sq_tex_sampler_word0
);
1195 R600_OUT_BATCH(sq_tex_sampler_word1
);
1196 R600_OUT_BATCH(sq_tex_sampler_word2
);
1202 eg_set_scissors(context_t
*context
, int x1
, int y1
, int x2
, int y2
)
1204 BATCH_LOCALS(&context
->radeon
);
1206 BEGIN_BATCH_NO_AUTOSTATE(17);
1207 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_SCREEN_SCISSOR_TL
, 2);
1208 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16));
1209 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1211 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_WINDOW_OFFSET
, 3);
1212 R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1213 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
)); //PA_SC_WINDOW_SCISSOR_TL
1214 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1216 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_GENERIC_SCISSOR_TL
, 2);
1217 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1218 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1220 /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1221 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_VPORT_SCISSOR_0_TL
, 2);
1222 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1223 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1231 eg_set_vb_data(context_t
* context
, int src_x
, int src_y
, int dst_x
, int dst_y
,
1232 int w
, int h
, int src_h
, unsigned flip_y
)
1235 radeon_bo_map(context
->blit_bo
, 1);
1236 vb
= context
->blit_bo
->ptr
;
1238 vb
[0] = (float)(dst_x
);
1239 vb
[1] = (float)(dst_y
);
1240 vb
[2] = (float)(src_x
);
1241 vb
[3] = (flip_y
) ? (float)(src_h
- src_y
) : (float)src_y
;
1243 vb
[4] = (float)(dst_x
);
1244 vb
[5] = (float)(dst_y
+ h
);
1245 vb
[6] = (float)(src_x
);
1246 vb
[7] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1248 vb
[8] = (float)(dst_x
+ w
);
1249 vb
[9] = (float)(dst_y
+ h
);
1250 vb
[10] = (float)(src_x
+ w
);
1251 vb
[11] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1253 radeon_bo_unmap(context
->blit_bo
);
1258 eg_draw_auto(context_t
*context
)
1260 BATCH_LOCALS(&context
->radeon
);
1261 uint32_t vgt_primitive_type
= 0, vgt_index_type
= 0, vgt_draw_initiator
= 0, vgt_num_indices
;
1263 SETfield(vgt_primitive_type
, DI_PT_RECTLIST
,
1264 VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift
,
1265 VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask
);
1266 SETfield(vgt_index_type
, DI_INDEX_SIZE_16_BIT
, INDEX_TYPE_shift
,
1268 SETfield(vgt_draw_initiator
, DI_MAJOR_MODE_0
, MAJOR_MODE_shift
,
1270 SETfield(vgt_draw_initiator
, DI_SRC_SEL_AUTO_INDEX
, SOURCE_SELECT_shift
,
1271 SOURCE_SELECT_mask
);
1273 vgt_num_indices
= 3;
1275 BEGIN_BATCH_NO_AUTOSTATE(10);
1277 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_PRIMITIVE_TYPE
, 1);
1278 R600_OUT_BATCH(vgt_primitive_type
);
1280 R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE
, 0));
1281 R600_OUT_BATCH(vgt_index_type
);
1283 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES
, 0));
1286 R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO
, 1));
1287 R600_OUT_BATCH(vgt_num_indices
);
1288 R600_OUT_BATCH(vgt_draw_initiator
);
1295 eg_set_default_state(context_t
*context
)
1310 int num_ps_stack_entries
;
1311 int num_vs_stack_entries
;
1312 int num_gs_stack_entries
;
1313 int num_es_stack_entries
;
1314 int num_hs_stack_entries
;
1315 int num_ls_stack_entries
;
1316 uint32_t sq_config
= 0, sq_gpr_resource_mgmt_1
= 0, sq_gpr_resource_mgmt_2
= 0;
1317 uint32_t sq_gpr_resource_mgmt_3
= 0;
1318 uint32_t sq_thread_resource_mgmt
= 0, sq_thread_resource_mgmt_2
= 0;
1319 uint32_t sq_stack_resource_mgmt_1
= 0, sq_stack_resource_mgmt_2
= 0, sq_stack_resource_mgmt_3
= 0;
1320 BATCH_LOCALS(&context
->radeon
);
1322 switch (context
->radeon
.radeonScreen
->chip_family
) {
1323 case CHIP_FAMILY_CEDAR
:
1332 num_ps_threads
= 96;
1333 num_vs_threads
= 16;
1334 num_gs_threads
= 16;
1335 num_es_threads
= 16;
1336 num_hs_threads
= 16;
1337 num_ls_threads
= 16;
1338 num_ps_stack_entries
= 42;
1339 num_vs_stack_entries
= 42;
1340 num_gs_stack_entries
= 42;
1341 num_es_stack_entries
= 42;
1342 num_hs_stack_entries
= 42;
1343 num_ls_stack_entries
= 42;
1345 case CHIP_FAMILY_REDWOOD
:
1353 num_ps_threads
= 128;
1354 num_vs_threads
= 20;
1355 num_gs_threads
= 20;
1356 num_es_threads
= 20;
1357 num_hs_threads
= 20;
1358 num_ls_threads
= 20;
1359 num_ps_stack_entries
= 42;
1360 num_vs_stack_entries
= 42;
1361 num_gs_stack_entries
= 42;
1362 num_es_stack_entries
= 42;
1363 num_hs_stack_entries
= 42;
1364 num_ls_stack_entries
= 42;
1366 case CHIP_FAMILY_JUNIPER
:
1374 num_ps_threads
= 128;
1375 num_vs_threads
= 20;
1376 num_gs_threads
= 20;
1377 num_es_threads
= 20;
1378 num_hs_threads
= 20;
1379 num_ls_threads
= 20;
1380 num_ps_stack_entries
= 85;
1381 num_vs_stack_entries
= 85;
1382 num_gs_stack_entries
= 85;
1383 num_es_stack_entries
= 85;
1384 num_hs_stack_entries
= 85;
1385 num_ls_stack_entries
= 85;
1387 case CHIP_FAMILY_CYPRESS
:
1388 case CHIP_FAMILY_HEMLOCK
:
1396 num_ps_threads
= 128;
1397 num_vs_threads
= 20;
1398 num_gs_threads
= 20;
1399 num_es_threads
= 20;
1400 num_hs_threads
= 20;
1401 num_ls_threads
= 20;
1402 num_ps_stack_entries
= 85;
1403 num_vs_stack_entries
= 85;
1404 num_gs_stack_entries
= 85;
1405 num_es_stack_entries
= 85;
1406 num_hs_stack_entries
= 85;
1407 num_ls_stack_entries
= 85;
1411 if (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_CEDAR
)
1412 CLEARbit(sq_config
, EG_SQ_CONFIG__VC_ENABLE_bit
);
1414 SETbit(sq_config
, EG_SQ_CONFIG__VC_ENABLE_bit
);
1415 SETbit(sq_config
, EG_SQ_CONFIG__EXPORT_SRC_C_bit
);
1417 SETfield(sq_config
, 0,
1418 EG_SQ_CONFIG__PS_PRIO_shift
,
1419 EG_SQ_CONFIG__PS_PRIO_mask
);
1420 SETfield(sq_config
, 1,
1421 EG_SQ_CONFIG__VS_PRIO_shift
,
1422 EG_SQ_CONFIG__VS_PRIO_mask
);
1423 SETfield(sq_config
, 2,
1424 EG_SQ_CONFIG__GS_PRIO_shift
,
1425 EG_SQ_CONFIG__GS_PRIO_mask
);
1426 SETfield(sq_config
, 3,
1427 EG_SQ_CONFIG__ES_PRIO_shift
,
1428 EG_SQ_CONFIG__ES_PRIO_mask
);
1431 SETfield(sq_gpr_resource_mgmt_1
, num_ps_gprs
,
1432 NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1433 SETfield(sq_gpr_resource_mgmt_1
, num_vs_gprs
,
1434 NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1435 SETfield(sq_gpr_resource_mgmt_1
, num_temp_gprs
,
1436 NUM_CLAUSE_TEMP_GPRS_shift
, NUM_CLAUSE_TEMP_GPRS_mask
);
1437 SETfield(sq_gpr_resource_mgmt_2
, num_gs_gprs
,
1438 NUM_GS_GPRS_shift
, NUM_GS_GPRS_mask
);
1439 SETfield(sq_gpr_resource_mgmt_2
, num_es_gprs
,
1440 NUM_ES_GPRS_shift
, NUM_ES_GPRS_mask
);
1441 SETfield(sq_gpr_resource_mgmt_3
, num_hs_gprs
,
1442 NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1443 SETfield(sq_gpr_resource_mgmt_3
, num_ls_gprs
,
1444 NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1446 SETfield(sq_thread_resource_mgmt
, num_ps_threads
,
1447 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1448 SETfield(sq_thread_resource_mgmt
, num_vs_threads
,
1449 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1450 SETfield(sq_thread_resource_mgmt
, num_gs_threads
,
1451 NUM_GS_THREADS_shift
, NUM_GS_THREADS_mask
);
1452 SETfield(sq_thread_resource_mgmt
, num_es_threads
,
1453 NUM_ES_THREADS_shift
, NUM_ES_THREADS_mask
);
1454 SETfield(sq_thread_resource_mgmt_2
, num_hs_threads
,
1455 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1456 SETfield(sq_thread_resource_mgmt_2
, num_ls_threads
,
1457 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1459 SETfield(sq_stack_resource_mgmt_1
, num_ps_stack_entries
,
1460 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1461 SETfield(sq_stack_resource_mgmt_1
, num_vs_stack_entries
,
1462 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1463 SETfield(sq_stack_resource_mgmt_2
, num_gs_stack_entries
,
1464 NUM_GS_STACK_ENTRIES_shift
, NUM_GS_STACK_ENTRIES_mask
);
1465 SETfield(sq_stack_resource_mgmt_2
, num_es_stack_entries
,
1466 NUM_ES_STACK_ENTRIES_shift
, NUM_ES_STACK_ENTRIES_mask
);
1467 SETfield(sq_stack_resource_mgmt_3
, num_hs_stack_entries
,
1468 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1469 SETfield(sq_stack_resource_mgmt_3
, num_ls_stack_entries
,
1470 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1473 BEGIN_BATCH_NO_AUTOSTATE(196);
1475 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
, 0);
1477 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_CONFIG
, 4);
1478 R600_OUT_BATCH(sq_config
);
1479 R600_OUT_BATCH(sq_gpr_resource_mgmt_1
);
1480 R600_OUT_BATCH(sq_gpr_resource_mgmt_2
);
1481 R600_OUT_BATCH(sq_gpr_resource_mgmt_3
);
1483 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_THREAD_RESOURCE_MGMT
, 5);
1484 R600_OUT_BATCH(sq_thread_resource_mgmt
);
1485 R600_OUT_BATCH(sq_thread_resource_mgmt_2
);
1486 R600_OUT_BATCH(sq_stack_resource_mgmt_1
);
1487 R600_OUT_BATCH(sq_stack_resource_mgmt_2
);
1488 R600_OUT_BATCH(sq_stack_resource_mgmt_3
);
1490 R600_OUT_BATCH(CP_PACKET3(R600_IT_CONTEXT_CONTROL
, 1));
1491 R600_OUT_BATCH(0x80000000);
1492 R600_OUT_BATCH(0x80000000);
1494 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_LDS_ALLOC_PS
, 0);
1496 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_ESGS_RING_ITEMSIZE
, 6);
1504 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_GS_VERT_ITEMSIZE
, 4);
1510 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_DEPTH_CONTROL
, 0);
1512 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_RENDER_CONTROL
, 5);
1513 R600_OUT_BATCH(0x00000060);
1516 R600_OUT_BATCH(0x0000002a);
1519 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_STENCIL_CLEAR
, 2);
1523 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_ALPHA_TO_MASK
, 0x0000aa00);
1525 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_CLIPRECT_RULE
, 13);
1526 R600_OUT_BATCH(0x0000ffff);
1527 R600_OUT_BATCH(0x00000000);
1528 R600_OUT_BATCH(0x20002000);
1529 R600_OUT_BATCH(0x00000000);
1530 R600_OUT_BATCH(0x20002000);
1531 R600_OUT_BATCH(0x00000000);
1532 R600_OUT_BATCH(0x20002000);
1533 R600_OUT_BATCH(0x00000000);
1534 R600_OUT_BATCH(0x20002000);
1535 R600_OUT_BATCH(0xaaaaaaaa);
1537 R600_OUT_BATCH(0x0000000f);
1538 R600_OUT_BATCH(0x0000000f);
1540 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_VPORT_ZMIN_0
, 2);
1542 R600_OUT_BATCH(0x3f800000);
1544 EVERGREEN_OUT_BATCH_REGVAL(EG_SX_MISC
, 0);
1546 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_MODE_CNTL_0
, 2);
1550 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_LINE_CNTL
, 16);
1553 R600_OUT_BATCH(0x00000005);
1554 R600_OUT_BATCH(0x3f800000);
1555 R600_OUT_BATCH(0x3f800000);
1556 R600_OUT_BATCH(0x3f800000);
1557 R600_OUT_BATCH(0x3f800000);
1566 R600_OUT_BATCH(0xffffffff);
1568 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR_CONTROL
, 13);
1569 R600_OUT_BATCH(0x00cc0010);
1570 R600_OUT_BATCH(0x00000210);
1571 R600_OUT_BATCH(0x00010000);
1572 R600_OUT_BATCH(0x00000004);
1573 R600_OUT_BATCH(0x00000100);
1583 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SU_POLY_OFFSET_DB_FMT_CNTL
, 6);
1591 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_MAX_VTX_INDX
, 9);
1592 R600_OUT_BATCH(0x00ffffff);
1602 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_INSTANCE_STEP_RATE_0
, 2);
1606 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_REUSE_OFF
, 2);
1610 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SU_POINT_SIZE
, 17);
1613 R600_OUT_BATCH(0x00000008);
1629 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_PRIMITIVEID_EN
, 0);
1631 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_MULTI_PRIM_IB_RESET_EN
, 0);
1633 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_SHADER_STAGES_EN
, 0);
1635 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_STRMOUT_CONFIG
, 2);
1639 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_BLEND0_CONTROL
, 0);
1641 EVERGREEN_OUT_BATCH_REGVAL(EG_SPI_VS_OUT_CONFIG
, 0);
1643 EVERGREEN_OUT_BATCH_REGVAL(EG_SPI_VS_OUT_ID_0
, 0);
1645 EVERGREEN_OUT_BATCH_REGVAL(EG_SPI_PS_INPUT_CNTL_0
, 0);
1647 EVERGREEN_OUT_BATCH_REGSEQ(EG_SPI_PS_IN_CONTROL_0
, 11);
1648 R600_OUT_BATCH(0x20000001);
1653 R600_OUT_BATCH(0x00100000);
1664 static GLboolean
eg_validate_buffers(context_t
*rmesa
,
1665 struct radeon_bo
*src_bo
,
1666 struct radeon_bo
*dst_bo
)
1670 radeon_cs_space_reset_bos(rmesa
->radeon
.cmdbuf
.cs
);
1672 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1673 src_bo
, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
1677 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1678 dst_bo
, 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
);
1682 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1684 RADEON_GEM_DOMAIN_GTT
, 0);
1691 unsigned evergreen_blit(struct gl_context
*ctx
,
1692 struct radeon_bo
*src_bo
,
1693 intptr_t src_offset
,
1694 gl_format src_mesaformat
,
1697 unsigned src_height
,
1700 struct radeon_bo
*dst_bo
,
1701 intptr_t dst_offset
,
1702 gl_format dst_mesaformat
,
1705 unsigned dst_height
,
1712 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
1715 if (!evergreen_check_blit(dst_mesaformat
))
1718 if (src_bo
== dst_bo
) {
1722 if (src_offset
% 256 || dst_offset
% 256) {
1727 fprintf(stderr
, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1728 src_width
, src_height
, src_pitch
,
1729 _mesa_format_row_stride(src_mesaformat
, src_width
),
1730 _mesa_get_format_name(src_mesaformat
));
1731 fprintf(stderr
, "dst: width %d, height %d, pitch %d, format %s\n",
1732 dst_width
, dst_height
,
1733 _mesa_format_row_stride(dst_mesaformat
, dst_width
),
1734 _mesa_get_format_name(dst_mesaformat
));
1737 /* Flush is needed to make sure that source buffer has correct data */
1740 rcommonEnsureCmdBufSpace(&context
->radeon
, 327, __FUNCTION__
);
1743 eg_load_shaders(context
->radeon
.glCtx
);
1745 if (!eg_validate_buffers(context
, src_bo
, dst_bo
))
1748 /* set clear state */
1750 eg_set_default_state(context
);
1754 eg_set_shaders(context
);
1758 eg_set_tex_resource(context
, src_mesaformat
, src_bo
,
1759 src_width
, src_height
, src_pitch
, src_offset
);
1762 eg_set_tex_sampler(context
);
1766 eg_set_render_target(context
, dst_bo
, dst_mesaformat
,
1767 dst_pitch
, dst_width
, dst_height
, dst_offset
);
1770 eg_set_scissors(context
, dst_x
, dst_y
, dst_x
+ dst_width
, dst_y
+ dst_height
);
1772 eg_set_vb_data(context
, src_x
, src_y
, dst_x
, dst_y
, w
, h
, src_height
, flip_y
);
1773 /* Vertex buffer setup */
1775 eg_set_vtx_resource(context
);
1779 eg_draw_auto(context
);
1782 r700SyncSurf(context
, dst_bo
, 0,
1783 RADEON_GEM_DOMAIN_VRAM
|RADEON_GEM_DOMAIN_GTT
,
1784 CB_ACTION_ENA_bit
| (1 << (id
+ 6)));