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 static unsigned is_blit_supported(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_SRGBA8
:
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 pitch
, 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;
96 int nPitchInPixel
, id
= 0;
97 uint32_t comp_swap
, format
, bpp
= _mesa_get_format_bytes(mesa_format
);
98 BATCH_LOCALS(&context
->radeon
);
100 cb_color0_base
= dst_offset
/ 256;
102 nPitchInPixel
= pitch
/bpp
;
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
, ENDIAN_NONE
, ENDIAN_shift
, ENDIAN_mask
);
109 SETfield(cb_color0_info
, ARRAY_LINEAR_GENERAL
,
110 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
112 SETbit(cb_color0_info
, BLEND_BYPASS_bit
);
114 switch(mesa_format
) {
115 case MESA_FORMAT_RGBA8888
:
116 format
= COLOR_8_8_8_8
;
117 comp_swap
= SWAP_STD_REV
;
118 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
119 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
121 case MESA_FORMAT_SIGNED_RGBA8888
:
122 format
= COLOR_8_8_8_8
;
123 comp_swap
= SWAP_STD_REV
;
124 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
125 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
127 case MESA_FORMAT_RGBA8888_REV
:
128 format
= COLOR_8_8_8_8
;
129 comp_swap
= SWAP_STD
;
130 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
131 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
133 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
134 format
= COLOR_8_8_8_8
;
135 comp_swap
= SWAP_STD
;
136 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
137 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
139 case MESA_FORMAT_ARGB8888
:
140 case MESA_FORMAT_XRGB8888
:
141 format
= COLOR_8_8_8_8
;
142 comp_swap
= SWAP_ALT
;
143 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
144 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
146 case MESA_FORMAT_ARGB8888_REV
:
147 case MESA_FORMAT_XRGB8888_REV
:
148 format
= COLOR_8_8_8_8
;
149 comp_swap
= SWAP_ALT_REV
;
150 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
151 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
153 case MESA_FORMAT_RGB565
:
154 format
= COLOR_5_6_5
;
155 comp_swap
= SWAP_STD_REV
;
156 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
157 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
159 case MESA_FORMAT_RGB565_REV
:
160 format
= COLOR_5_6_5
;
161 comp_swap
= SWAP_STD
;
162 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
163 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
165 case MESA_FORMAT_ARGB4444
:
166 format
= COLOR_4_4_4_4
;
167 comp_swap
= SWAP_ALT
;
168 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
169 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
171 case MESA_FORMAT_ARGB4444_REV
:
172 format
= COLOR_4_4_4_4
;
173 comp_swap
= SWAP_ALT_REV
;
174 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
175 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
177 case MESA_FORMAT_ARGB1555
:
178 format
= COLOR_1_5_5_5
;
179 comp_swap
= SWAP_ALT
;
180 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
181 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
183 case MESA_FORMAT_ARGB1555_REV
:
184 format
= COLOR_1_5_5_5
;
185 comp_swap
= SWAP_ALT_REV
;
186 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
187 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
189 case MESA_FORMAT_AL88
:
191 comp_swap
= SWAP_STD
;
192 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
193 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
195 case MESA_FORMAT_AL88_REV
:
197 comp_swap
= SWAP_STD_REV
;
198 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
199 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
201 case MESA_FORMAT_RGB332
:
202 format
= COLOR_3_3_2
;
203 comp_swap
= SWAP_STD_REV
;
204 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
205 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
209 comp_swap
= SWAP_ALT_REV
;
210 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
211 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
214 case MESA_FORMAT_CI8
:
216 comp_swap
= SWAP_STD
;
217 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
218 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
222 comp_swap
= SWAP_ALT
;
223 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
224 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
226 case MESA_FORMAT_RGBA_FLOAT32
:
227 format
= COLOR_32_32_32_32_FLOAT
;
228 comp_swap
= SWAP_STD_REV
;
229 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
230 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
231 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
233 case MESA_FORMAT_RGBA_FLOAT16
:
234 format
= COLOR_16_16_16_16_FLOAT
;
235 comp_swap
= SWAP_STD_REV
;
236 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
237 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
239 case MESA_FORMAT_ALPHA_FLOAT32
:
240 format
= COLOR_32_FLOAT
;
241 comp_swap
= SWAP_ALT_REV
;
242 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
243 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
244 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
246 case MESA_FORMAT_ALPHA_FLOAT16
:
247 format
= COLOR_16_FLOAT
;
248 comp_swap
= SWAP_ALT_REV
;
249 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
250 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
252 case MESA_FORMAT_LUMINANCE_FLOAT32
:
253 format
= COLOR_32_FLOAT
;
254 comp_swap
= SWAP_ALT
;
255 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
256 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
257 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
259 case MESA_FORMAT_LUMINANCE_FLOAT16
:
260 format
= COLOR_16_FLOAT
;
261 comp_swap
= SWAP_ALT
;
262 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
263 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
265 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
266 format
= COLOR_32_32_FLOAT
;
267 comp_swap
= SWAP_ALT_REV
;
268 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
269 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
270 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
272 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
273 format
= COLOR_16_16_FLOAT
;
274 comp_swap
= SWAP_ALT_REV
;
275 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
276 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
278 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
279 format
= COLOR_32_FLOAT
;
280 comp_swap
= SWAP_STD
;
281 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
282 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
283 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
285 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
286 format
= COLOR_16_FLOAT
;
287 comp_swap
= SWAP_STD
;
288 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
289 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
291 case MESA_FORMAT_X8_Z24
:
292 case MESA_FORMAT_S8_Z24
:
294 comp_swap
= SWAP_STD
;
295 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
296 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
297 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
298 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
300 case MESA_FORMAT_Z24_S8
:
302 comp_swap
= SWAP_STD
;
303 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
304 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
305 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
306 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
308 case MESA_FORMAT_Z16
:
310 comp_swap
= SWAP_STD
;
311 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
312 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
313 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
314 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
316 case MESA_FORMAT_Z32
:
318 comp_swap
= SWAP_STD
;
319 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
320 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
321 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
322 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
324 case MESA_FORMAT_SRGBA8
:
325 format
= COLOR_8_8_8_8
;
326 comp_swap
= SWAP_STD_REV
;
327 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
328 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
330 case MESA_FORMAT_SLA8
:
332 comp_swap
= SWAP_ALT_REV
;
333 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
334 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
336 case MESA_FORMAT_SL8
:
338 comp_swap
= SWAP_ALT_REV
;
339 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
340 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
343 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
344 assert("Invalid format for US output\n");
348 SETfield(cb_color0_info
, format
, CB_COLOR0_INFO__FORMAT_shift
,
349 CB_COLOR0_INFO__FORMAT_mask
);
350 SETfield(cb_color0_info
, comp_swap
, COMP_SWAP_shift
, COMP_SWAP_mask
);
352 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
353 R600_OUT_BATCH_REGSEQ(CB_COLOR0_BASE
+ (4 * id
), 1);
354 R600_OUT_BATCH(cb_color0_base
);
355 R600_OUT_BATCH_RELOC(0,
358 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
361 if ((context
->radeon
.radeonScreen
->chip_family
> CHIP_FAMILY_R600
) &&
362 (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
)) {
363 BEGIN_BATCH_NO_AUTOSTATE(2);
364 R600_OUT_BATCH(CP_PACKET3(R600_IT_SURFACE_BASE_UPDATE
, 0));
365 R600_OUT_BATCH((2 << id
));
369 /* Set CMASK & TILE buffer to the offset of color buffer as
370 * we don't use those this shouldn't cause any issue and we
371 * then have a valid cmd stream
373 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
374 R600_OUT_BATCH_REGSEQ(CB_COLOR0_TILE
+ (4 * id
), 1);
375 R600_OUT_BATCH(cb_color0_base
);
376 R600_OUT_BATCH_RELOC(0,
379 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
381 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
382 R600_OUT_BATCH_REGSEQ(CB_COLOR0_FRAG
+ (4 * id
), 1);
383 R600_OUT_BATCH(cb_color0_base
);
384 R600_OUT_BATCH_RELOC(0,
387 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
390 BEGIN_BATCH_NO_AUTOSTATE(12);
391 R600_OUT_BATCH_REGVAL(CB_COLOR0_SIZE
+ (4 * id
), cb_color0_size
);
392 R600_OUT_BATCH_REGVAL(CB_COLOR0_VIEW
+ (4 * id
), cb_color0_view
);
393 R600_OUT_BATCH_REGVAL(CB_COLOR0_INFO
+ (4 * id
), cb_color0_info
);
394 R600_OUT_BATCH_REGVAL(CB_COLOR0_MASK
+ (4 * id
), 0);
401 static inline void load_shaders(GLcontext
* ctx
)
404 radeonContextPtr radeonctx
= RADEON_CONTEXT(ctx
);
405 context_t
*context
= R700_CONTEXT(ctx
);
409 if (context
->blit_bo_loaded
== 1)
413 context
->blit_bo
= radeon_bo_open(radeonctx
->radeonScreen
->bom
, 0,
414 size
, 256, RADEON_GEM_DOMAIN_GTT
, 0);
415 radeon_bo_map(context
->blit_bo
, 1);
416 shader
= context
->blit_bo
->ptr
;
418 for(i
=0; i
<sizeof(r6xx_vs
)/4; i
++) {
419 shader
[128+i
] = r6xx_vs
[i
];
421 for(i
=0; i
<sizeof(r6xx_ps
)/4; i
++) {
422 shader
[256+i
] = r6xx_ps
[i
];
425 radeon_bo_unmap(context
->blit_bo
);
426 context
->blit_bo_loaded
= 1;
431 set_shaders(context_t
*context
)
433 struct radeon_bo
* pbo
= context
->blit_bo
;
434 BATCH_LOCALS(&context
->radeon
);
436 uint32_t sq_pgm_start_fs
= (512 >> 8);
437 uint32_t sq_pgm_resources_fs
= 0;
438 uint32_t sq_pgm_cf_offset_fs
= 0;
440 uint32_t sq_pgm_start_vs
= (512 >> 8);
441 uint32_t sq_pgm_resources_vs
= (1 << NUM_GPRS_shift
);
442 uint32_t sq_pgm_cf_offset_vs
= 0;
444 uint32_t sq_pgm_start_ps
= (1024 >> 8);
445 uint32_t sq_pgm_resources_ps
= (1 << NUM_GPRS_shift
);
446 uint32_t sq_pgm_cf_offset_ps
= 0;
447 uint32_t sq_pgm_exports_ps
= (1 << 1);
449 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
452 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
453 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_FS
, 1);
454 R600_OUT_BATCH(sq_pgm_start_fs
);
455 R600_OUT_BATCH_RELOC(sq_pgm_start_fs
,
458 RADEON_GEM_DOMAIN_GTT
, 0, 0);
461 BEGIN_BATCH_NO_AUTOSTATE(6);
462 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_FS
, sq_pgm_resources_fs
);
463 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_FS
, sq_pgm_cf_offset_fs
);
467 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
468 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_VS
, 1);
469 R600_OUT_BATCH(sq_pgm_start_vs
);
470 R600_OUT_BATCH_RELOC(sq_pgm_start_vs
,
473 RADEON_GEM_DOMAIN_GTT
, 0, 0);
476 BEGIN_BATCH_NO_AUTOSTATE(6);
477 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_VS
, sq_pgm_resources_vs
);
478 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_VS
, sq_pgm_cf_offset_vs
);
482 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
483 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_PS
, 1);
484 R600_OUT_BATCH(sq_pgm_start_ps
);
485 R600_OUT_BATCH_RELOC(sq_pgm_start_ps
,
488 RADEON_GEM_DOMAIN_GTT
, 0, 0);
491 BEGIN_BATCH_NO_AUTOSTATE(9);
492 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_PS
, sq_pgm_resources_ps
);
493 R600_OUT_BATCH_REGVAL(SQ_PGM_EXPORTS_PS
, sq_pgm_exports_ps
);
494 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_PS
, sq_pgm_cf_offset_ps
);
497 BEGIN_BATCH_NO_AUTOSTATE(18);
498 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_CONFIG
, 0); //EXPORT_COUNT is - 1
499 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_ID_0
, 0);
500 R600_OUT_BATCH_REGVAL(SPI_PS_INPUT_CNTL_0
, SEL_CENTROID_bit
);
501 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_0
, (1 << NUM_INTERP_shift
));
502 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_1
, 0);
503 R600_OUT_BATCH_REGVAL(SPI_INTERP_CONTROL_0
, 0);
511 set_vtx_resource(context_t
*context
)
513 struct radeon_bo
*bo
= context
->blit_bo
;
514 BATCH_LOCALS(&context
->radeon
);
516 BEGIN_BATCH_NO_AUTOSTATE(6);
517 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
518 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
521 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
522 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
527 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
528 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
529 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
530 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
531 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
532 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, TC_ACTION_ENA_bit
);
534 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
536 BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
538 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
539 R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET
* FETCH_RESOURCE_STRIDE
);
541 R600_OUT_BATCH(48 - 1);
542 R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
);
543 R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift
);
546 R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER
<< SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
);
547 R600_OUT_BATCH_RELOC(SQ_VTX_CONSTANT_WORD0_0
,
549 SQ_VTX_CONSTANT_WORD0_0
,
550 RADEON_GEM_DOMAIN_GTT
, 0, 0);
557 set_tex_resource(context_t
* context
,
558 gl_format mesa_format
, struct radeon_bo
*bo
, int w
, int h
,
559 int pitch
, intptr_t src_offset
)
561 uint32_t sq_tex_resource0
, sq_tex_resource1
, sq_tex_resource2
, sq_tex_resource4
, sq_tex_resource6
;
562 int bpp
= _mesa_get_format_bytes(mesa_format
);
563 int TexelPitch
= pitch
/bpp
;
565 sq_tex_resource0
= sq_tex_resource1
= sq_tex_resource2
= sq_tex_resource4
= sq_tex_resource6
= 0;
566 BATCH_LOCALS(&context
->radeon
);
568 SETfield(sq_tex_resource0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
569 SETfield(sq_tex_resource0
, ARRAY_LINEAR_GENERAL
,
570 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
571 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
573 switch (mesa_format
) {
574 case MESA_FORMAT_RGBA8888
:
575 case MESA_FORMAT_SIGNED_RGBA8888
:
576 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
577 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
579 SETfield(sq_tex_resource4
, SQ_SEL_W
,
580 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
581 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
582 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
583 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
584 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
585 SETfield(sq_tex_resource4
, SQ_SEL_X
,
586 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
587 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
588 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
589 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
590 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
591 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
592 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
593 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
594 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
595 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
598 case MESA_FORMAT_RGBA8888_REV
:
599 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
600 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
601 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
603 SETfield(sq_tex_resource4
, SQ_SEL_X
,
604 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
605 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
606 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
607 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
608 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
609 SETfield(sq_tex_resource4
, SQ_SEL_W
,
610 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
611 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
612 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
613 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
614 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
615 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
616 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
617 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
618 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
619 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
622 case MESA_FORMAT_ARGB8888
:
623 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
624 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
626 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
627 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
628 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
629 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
630 SETfield(sq_tex_resource4
, SQ_SEL_X
,
631 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
632 SETfield(sq_tex_resource4
, SQ_SEL_W
,
633 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
635 case MESA_FORMAT_XRGB8888
:
636 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
637 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
639 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
640 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
641 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
642 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
643 SETfield(sq_tex_resource4
, SQ_SEL_X
,
644 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
645 SETfield(sq_tex_resource4
, SQ_SEL_1
,
646 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
648 case MESA_FORMAT_ARGB8888_REV
:
649 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
650 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
652 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
653 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
654 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
655 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
656 SETfield(sq_tex_resource4
, SQ_SEL_W
,
657 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
658 SETfield(sq_tex_resource4
, SQ_SEL_X
,
659 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
661 case MESA_FORMAT_XRGB8888_REV
:
662 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
663 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
665 SETfield(sq_tex_resource4
, SQ_SEL_1
,
666 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
667 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
668 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
669 SETfield(sq_tex_resource4
, SQ_SEL_W
,
670 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
671 SETfield(sq_tex_resource4
, SQ_SEL_X
,
672 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
674 case MESA_FORMAT_RGB565
:
675 SETfield(sq_tex_resource1
, FMT_5_6_5
,
676 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
678 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
679 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
680 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
681 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
682 SETfield(sq_tex_resource4
, SQ_SEL_X
,
683 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
684 SETfield(sq_tex_resource4
, SQ_SEL_1
,
685 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
687 case MESA_FORMAT_RGB565_REV
:
688 SETfield(sq_tex_resource1
, FMT_5_6_5
,
689 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
691 SETfield(sq_tex_resource4
, SQ_SEL_X
,
692 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
693 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
694 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
695 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
696 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
697 SETfield(sq_tex_resource4
, SQ_SEL_1
,
698 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
700 case MESA_FORMAT_ARGB4444
:
701 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
702 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
704 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
705 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
706 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
707 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
708 SETfield(sq_tex_resource4
, SQ_SEL_X
,
709 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
710 SETfield(sq_tex_resource4
, SQ_SEL_W
,
711 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
713 case MESA_FORMAT_ARGB4444_REV
:
714 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
715 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
717 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
718 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
719 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
720 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
721 SETfield(sq_tex_resource4
, SQ_SEL_W
,
722 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
723 SETfield(sq_tex_resource4
, SQ_SEL_X
,
724 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
726 case MESA_FORMAT_ARGB1555
:
727 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
728 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
730 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
731 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
732 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
733 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
734 SETfield(sq_tex_resource4
, SQ_SEL_X
,
735 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
736 SETfield(sq_tex_resource4
, SQ_SEL_W
,
737 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
739 case MESA_FORMAT_ARGB1555_REV
:
740 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
741 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
743 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
744 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
745 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
746 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
747 SETfield(sq_tex_resource4
, SQ_SEL_W
,
748 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
749 SETfield(sq_tex_resource4
, SQ_SEL_X
,
750 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
752 case MESA_FORMAT_AL88
:
753 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
754 SETfield(sq_tex_resource1
, FMT_8_8
,
755 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
757 SETfield(sq_tex_resource4
, SQ_SEL_X
,
758 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
759 SETfield(sq_tex_resource4
, SQ_SEL_X
,
760 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
761 SETfield(sq_tex_resource4
, SQ_SEL_X
,
762 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
763 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
764 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
766 case MESA_FORMAT_RGB332
:
767 SETfield(sq_tex_resource1
, FMT_3_3_2
,
768 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
770 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
771 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
772 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
773 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
774 SETfield(sq_tex_resource4
, SQ_SEL_X
,
775 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
776 SETfield(sq_tex_resource4
, SQ_SEL_1
,
777 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
779 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
780 SETfield(sq_tex_resource1
, FMT_8
,
781 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
783 SETfield(sq_tex_resource4
, SQ_SEL_0
,
784 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
785 SETfield(sq_tex_resource4
, SQ_SEL_0
,
786 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
787 SETfield(sq_tex_resource4
, SQ_SEL_0
,
788 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
789 SETfield(sq_tex_resource4
, SQ_SEL_X
,
790 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
792 case MESA_FORMAT_L8
: /* X, X, X, ONE */
793 SETfield(sq_tex_resource1
, FMT_8
,
794 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
796 SETfield(sq_tex_resource4
, SQ_SEL_X
,
797 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
798 SETfield(sq_tex_resource4
, SQ_SEL_X
,
799 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
800 SETfield(sq_tex_resource4
, SQ_SEL_X
,
801 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
802 SETfield(sq_tex_resource4
, SQ_SEL_1
,
803 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
805 case MESA_FORMAT_I8
: /* X, X, X, X */
806 case MESA_FORMAT_CI8
:
807 SETfield(sq_tex_resource1
, FMT_8
,
808 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
810 SETfield(sq_tex_resource4
, SQ_SEL_X
,
811 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
812 SETfield(sq_tex_resource4
, SQ_SEL_X
,
813 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
814 SETfield(sq_tex_resource4
, SQ_SEL_X
,
815 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
816 SETfield(sq_tex_resource4
, SQ_SEL_X
,
817 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
819 case MESA_FORMAT_RGBA_FLOAT32
:
820 SETfield(sq_tex_resource1
, FMT_32_32_32_32_FLOAT
,
821 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
823 SETfield(sq_tex_resource4
, SQ_SEL_X
,
824 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
825 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
826 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
827 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
828 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
829 SETfield(sq_tex_resource4
, SQ_SEL_W
,
830 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
832 case MESA_FORMAT_RGBA_FLOAT16
:
833 SETfield(sq_tex_resource1
, FMT_16_16_16_16_FLOAT
,
834 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
836 SETfield(sq_tex_resource4
, SQ_SEL_X
,
837 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
838 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
839 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
840 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
841 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
842 SETfield(sq_tex_resource4
, SQ_SEL_W
,
843 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
845 case MESA_FORMAT_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
846 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
847 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
849 SETfield(sq_tex_resource4
, SQ_SEL_0
,
850 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
851 SETfield(sq_tex_resource4
, SQ_SEL_0
,
852 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
853 SETfield(sq_tex_resource4
, SQ_SEL_0
,
854 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
855 SETfield(sq_tex_resource4
, SQ_SEL_X
,
856 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
858 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
859 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
860 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
862 SETfield(sq_tex_resource4
, SQ_SEL_0
,
863 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
864 SETfield(sq_tex_resource4
, SQ_SEL_0
,
865 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
866 SETfield(sq_tex_resource4
, SQ_SEL_0
,
867 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
868 SETfield(sq_tex_resource4
, SQ_SEL_X
,
869 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
871 case MESA_FORMAT_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
872 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
873 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
875 SETfield(sq_tex_resource4
, SQ_SEL_X
,
876 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
877 SETfield(sq_tex_resource4
, SQ_SEL_X
,
878 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
879 SETfield(sq_tex_resource4
, SQ_SEL_X
,
880 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
881 SETfield(sq_tex_resource4
, SQ_SEL_1
,
882 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
884 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
885 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
886 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
888 SETfield(sq_tex_resource4
, SQ_SEL_X
,
889 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
890 SETfield(sq_tex_resource4
, SQ_SEL_X
,
891 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
892 SETfield(sq_tex_resource4
, SQ_SEL_X
,
893 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
894 SETfield(sq_tex_resource4
, SQ_SEL_1
,
895 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
897 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
898 SETfield(sq_tex_resource1
, FMT_32_32_FLOAT
,
899 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
901 SETfield(sq_tex_resource4
, SQ_SEL_X
,
902 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
903 SETfield(sq_tex_resource4
, SQ_SEL_X
,
904 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
905 SETfield(sq_tex_resource4
, SQ_SEL_X
,
906 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
907 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
908 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
910 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
911 SETfield(sq_tex_resource1
, FMT_16_16_FLOAT
,
912 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
914 SETfield(sq_tex_resource4
, SQ_SEL_X
,
915 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
916 SETfield(sq_tex_resource4
, SQ_SEL_X
,
917 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
918 SETfield(sq_tex_resource4
, SQ_SEL_X
,
919 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
920 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
921 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
923 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
924 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
925 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
927 SETfield(sq_tex_resource4
, SQ_SEL_X
,
928 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
929 SETfield(sq_tex_resource4
, SQ_SEL_X
,
930 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
931 SETfield(sq_tex_resource4
, SQ_SEL_X
,
932 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
933 SETfield(sq_tex_resource4
, SQ_SEL_X
,
934 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
936 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
937 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
938 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
940 SETfield(sq_tex_resource4
, SQ_SEL_X
,
941 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
942 SETfield(sq_tex_resource4
, SQ_SEL_X
,
943 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
944 SETfield(sq_tex_resource4
, SQ_SEL_X
,
945 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
946 SETfield(sq_tex_resource4
, SQ_SEL_X
,
947 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
949 case MESA_FORMAT_Z16
:
950 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
951 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
952 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
953 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
954 SETfield(sq_tex_resource1
, FMT_16
,
955 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
956 SETfield(sq_tex_resource4
, SQ_SEL_X
,
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_X
,
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_X
,
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_X8_Z24
:
966 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
967 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
968 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
969 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
970 SETfield(sq_tex_resource1
, FMT_8_24
,
971 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
972 SETfield(sq_tex_resource4
, SQ_SEL_X
,
973 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
974 SETfield(sq_tex_resource4
, SQ_SEL_1
,
975 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
976 SETfield(sq_tex_resource4
, SQ_SEL_0
,
977 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
978 SETfield(sq_tex_resource4
, SQ_SEL_1
,
979 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
981 case MESA_FORMAT_S8_Z24
:
982 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
983 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
984 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
985 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
986 SETfield(sq_tex_resource1
, FMT_8_24
,
987 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
988 SETfield(sq_tex_resource4
, SQ_SEL_X
,
989 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
990 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
991 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
992 SETfield(sq_tex_resource4
, SQ_SEL_0
,
993 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
994 SETfield(sq_tex_resource4
, SQ_SEL_1
,
995 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
997 case MESA_FORMAT_Z24_S8
:
998 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
999 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1000 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1001 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1002 SETfield(sq_tex_resource1
, FMT_24_8
,
1003 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1004 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1005 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1006 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1007 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1008 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1009 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1010 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1011 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1013 case MESA_FORMAT_Z32
:
1014 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1015 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1016 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1017 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1018 SETfield(sq_tex_resource1
, FMT_32
,
1019 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1020 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1021 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1022 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1023 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1024 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1025 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1026 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1027 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1029 case MESA_FORMAT_S8
:
1030 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1031 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1032 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1033 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1034 SETfield(sq_tex_resource1
, FMT_8
,
1035 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1036 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1037 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1038 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1039 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1040 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1041 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1042 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1043 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1045 case MESA_FORMAT_SRGBA8
:
1046 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
1047 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1049 SETfield(sq_tex_resource4
, SQ_SEL_W
,
1050 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1051 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
1052 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1053 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1054 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1055 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1056 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1057 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1059 case MESA_FORMAT_SLA8
:
1060 SETfield(sq_tex_resource1
, FMT_8_8
,
1061 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_Y
,
1070 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1071 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1073 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
1074 SETfield(sq_tex_resource1
, FMT_8
,
1075 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1077 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1078 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1079 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1080 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1081 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1082 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1083 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1084 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1085 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1088 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
1089 assert("Invalid format for US output\n");
1093 SETfield(sq_tex_resource0
, (TexelPitch
/8)-1, PITCH_shift
, PITCH_mask
);
1094 SETfield(sq_tex_resource0
, w
- 1, TEX_WIDTH_shift
, TEX_WIDTH_mask
);
1095 SETfield(sq_tex_resource1
, h
- 1, TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
1097 sq_tex_resource2
= src_offset
/ 256;
1099 SETfield(sq_tex_resource6
, SQ_TEX_VTX_VALID_TEXTURE
,
1100 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
,
1101 SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
1103 r700SyncSurf(context
, bo
,
1104 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
1105 0, TC_ACTION_ENA_bit
);
1107 BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1108 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
1109 R600_OUT_BATCH(0 * 7);
1111 R600_OUT_BATCH(sq_tex_resource0
);
1112 R600_OUT_BATCH(sq_tex_resource1
);
1113 R600_OUT_BATCH(sq_tex_resource2
);
1114 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE3
1115 R600_OUT_BATCH(sq_tex_resource4
);
1116 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE5
1117 R600_OUT_BATCH(sq_tex_resource6
);
1118 R600_OUT_BATCH_RELOC(0,
1121 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1122 R600_OUT_BATCH_RELOC(0,
1125 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1131 set_tex_sampler(context_t
* context
)
1133 uint32_t sq_tex_sampler_word0
= 0, sq_tex_sampler_word1
= 0, sq_tex_sampler_word2
= 0;
1136 SETbit(sq_tex_sampler_word2
, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit
);
1138 BATCH_LOCALS(&context
->radeon
);
1140 BEGIN_BATCH_NO_AUTOSTATE(5);
1141 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
1142 R600_OUT_BATCH(i
* 3);
1143 R600_OUT_BATCH(sq_tex_sampler_word0
);
1144 R600_OUT_BATCH(sq_tex_sampler_word1
);
1145 R600_OUT_BATCH(sq_tex_sampler_word2
);
1151 set_scissors(context_t
*context
, int x1
, int y1
, int x2
, int y2
)
1153 BATCH_LOCALS(&context
->radeon
);
1155 BEGIN_BATCH_NO_AUTOSTATE(17);
1156 R600_OUT_BATCH_REGSEQ(PA_SC_SCREEN_SCISSOR_TL
, 2);
1157 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16));
1158 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1160 R600_OUT_BATCH_REGSEQ(PA_SC_WINDOW_OFFSET
, 3);
1161 R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1162 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
)); //PA_SC_WINDOW_SCISSOR_TL
1163 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1165 R600_OUT_BATCH_REGSEQ(PA_SC_GENERIC_SCISSOR_TL
, 2);
1166 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1167 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1169 /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1170 R600_OUT_BATCH_REGSEQ(PA_SC_VPORT_SCISSOR_0_TL
, 2 );
1171 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1172 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1180 set_vb_data(context_t
* context
, int src_x
, int src_y
, int dst_x
, int dst_y
,
1181 int w
, int h
, int src_h
, unsigned flip_y
)
1184 radeon_bo_map(context
->blit_bo
, 1);
1185 vb
= context
->blit_bo
->ptr
;
1187 vb
[0] = (float)(dst_x
);
1188 vb
[1] = (float)(dst_y
);
1189 vb
[2] = (float)(src_x
);
1190 vb
[3] = (flip_y
) ? (float)(src_h
- src_y
) : (float)src_y
;
1192 vb
[4] = (float)(dst_x
);
1193 vb
[5] = (float)(dst_y
+ h
);
1194 vb
[6] = (float)(src_x
);
1195 vb
[7] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1197 vb
[8] = (float)(dst_x
+ w
);
1198 vb
[9] = (float)(dst_y
+ h
);
1199 vb
[10] = (float)(src_x
+ w
);
1200 vb
[11] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1202 radeon_bo_unmap(context
->blit_bo
);
1207 draw_auto(context_t
*context
)
1209 BATCH_LOCALS(&context
->radeon
);
1210 uint32_t vgt_primitive_type
= 0, vgt_index_type
= 0, vgt_draw_initiator
= 0, vgt_num_indices
;
1212 SETfield(vgt_primitive_type
, DI_PT_RECTLIST
,
1213 VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift
,
1214 VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask
);
1215 SETfield(vgt_index_type
, DI_INDEX_SIZE_16_BIT
, INDEX_TYPE_shift
,
1217 SETfield(vgt_draw_initiator
, DI_MAJOR_MODE_0
, MAJOR_MODE_shift
,
1219 SETfield(vgt_draw_initiator
, DI_SRC_SEL_AUTO_INDEX
, SOURCE_SELECT_shift
,
1220 SOURCE_SELECT_mask
);
1222 vgt_num_indices
= 3;
1224 BEGIN_BATCH_NO_AUTOSTATE(10);
1226 R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE
, 1);
1227 R600_OUT_BATCH(vgt_primitive_type
);
1229 R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE
, 0));
1230 R600_OUT_BATCH(vgt_index_type
);
1232 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES
, 0));
1235 R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO
, 1));
1236 R600_OUT_BATCH(vgt_num_indices
);
1237 R600_OUT_BATCH(vgt_draw_initiator
);
1244 set_default_state(context_t
*context
)
1259 int num_ps_stack_entries
;
1260 int num_vs_stack_entries
;
1261 int num_gs_stack_entries
;
1262 int num_es_stack_entries
;
1263 uint32_t sq_config
, sq_gpr_resource_mgmt_1
, sq_gpr_resource_mgmt_2
;
1264 uint32_t sq_thread_resource_mgmt
, sq_stack_resource_mgmt_1
, sq_stack_resource_mgmt_2
;
1265 uint32_t ta_cntl_aux
, db_watermarks
, sq_dyn_gpr_cntl_ps_flush_req
, db_debug
;
1266 BATCH_LOCALS(&context
->radeon
);
1268 switch (context
->radeon
.radeonScreen
->chip_family
) {
1269 case CHIP_FAMILY_R600
:
1275 num_ps_threads
= 136;
1276 num_vs_threads
= 48;
1279 num_ps_stack_entries
= 128;
1280 num_vs_stack_entries
= 128;
1281 num_gs_stack_entries
= 0;
1282 num_es_stack_entries
= 0;
1284 case CHIP_FAMILY_RV630
:
1285 case CHIP_FAMILY_RV635
:
1291 num_ps_threads
= 144;
1292 num_vs_threads
= 40;
1295 num_ps_stack_entries
= 40;
1296 num_vs_stack_entries
= 40;
1297 num_gs_stack_entries
= 32;
1298 num_es_stack_entries
= 16;
1300 case CHIP_FAMILY_RV610
:
1301 case CHIP_FAMILY_RV620
:
1302 case CHIP_FAMILY_RS780
:
1303 case CHIP_FAMILY_RS880
:
1310 num_ps_threads
= 136;
1311 num_vs_threads
= 48;
1314 num_ps_stack_entries
= 40;
1315 num_vs_stack_entries
= 40;
1316 num_gs_stack_entries
= 32;
1317 num_es_stack_entries
= 16;
1319 case CHIP_FAMILY_RV670
:
1325 num_ps_threads
= 136;
1326 num_vs_threads
= 48;
1329 num_ps_stack_entries
= 40;
1330 num_vs_stack_entries
= 40;
1331 num_gs_stack_entries
= 32;
1332 num_es_stack_entries
= 16;
1334 case CHIP_FAMILY_RV770
:
1340 num_ps_threads
= 188;
1341 num_vs_threads
= 60;
1344 num_ps_stack_entries
= 256;
1345 num_vs_stack_entries
= 256;
1346 num_gs_stack_entries
= 0;
1347 num_es_stack_entries
= 0;
1349 case CHIP_FAMILY_RV730
:
1350 case CHIP_FAMILY_RV740
:
1356 num_ps_threads
= 188;
1357 num_vs_threads
= 60;
1360 num_ps_stack_entries
= 128;
1361 num_vs_stack_entries
= 128;
1362 num_gs_stack_entries
= 0;
1363 num_es_stack_entries
= 0;
1365 case CHIP_FAMILY_RV710
:
1371 num_ps_threads
= 144;
1372 num_vs_threads
= 48;
1375 num_ps_stack_entries
= 128;
1376 num_vs_stack_entries
= 128;
1377 num_gs_stack_entries
= 0;
1378 num_es_stack_entries
= 0;
1383 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
1384 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
1385 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
1386 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
1387 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
1388 CLEARbit(sq_config
, VC_ENABLE_bit
);
1390 SETbit(sq_config
, VC_ENABLE_bit
);
1391 SETbit(sq_config
, DX9_CONSTS_bit
);
1392 SETbit(sq_config
, ALU_INST_PREFER_VECTOR_bit
);
1393 SETfield(sq_config
, ps_prio
, PS_PRIO_shift
, PS_PRIO_mask
);
1394 SETfield(sq_config
, vs_prio
, VS_PRIO_shift
, VS_PRIO_mask
);
1395 SETfield(sq_config
, gs_prio
, GS_PRIO_shift
, GS_PRIO_mask
);
1396 SETfield(sq_config
, es_prio
, ES_PRIO_shift
, ES_PRIO_mask
);
1398 sq_gpr_resource_mgmt_1
= 0;
1399 SETfield(sq_gpr_resource_mgmt_1
, num_ps_gprs
, NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1400 SETfield(sq_gpr_resource_mgmt_1
, num_vs_gprs
, NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1401 SETfield(sq_gpr_resource_mgmt_1
, num_temp_gprs
,
1402 NUM_CLAUSE_TEMP_GPRS_shift
, NUM_CLAUSE_TEMP_GPRS_mask
);
1404 sq_gpr_resource_mgmt_2
= 0;
1405 SETfield(sq_gpr_resource_mgmt_2
, num_gs_gprs
, NUM_GS_GPRS_shift
, NUM_GS_GPRS_mask
);
1406 SETfield(sq_gpr_resource_mgmt_2
, num_es_gprs
, NUM_ES_GPRS_shift
, NUM_ES_GPRS_mask
);
1408 sq_thread_resource_mgmt
= 0;
1409 SETfield(sq_thread_resource_mgmt
, num_ps_threads
,
1410 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1411 SETfield(sq_thread_resource_mgmt
, num_vs_threads
,
1412 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1413 SETfield(sq_thread_resource_mgmt
, num_gs_threads
,
1414 NUM_GS_THREADS_shift
, NUM_GS_THREADS_mask
);
1415 SETfield(sq_thread_resource_mgmt
, num_es_threads
,
1416 NUM_ES_THREADS_shift
, NUM_ES_THREADS_mask
);
1418 sq_stack_resource_mgmt_1
= 0;
1419 SETfield(sq_stack_resource_mgmt_1
, num_ps_stack_entries
,
1420 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1421 SETfield(sq_stack_resource_mgmt_1
, num_vs_stack_entries
,
1422 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1424 sq_stack_resource_mgmt_2
= 0;
1425 SETfield(sq_stack_resource_mgmt_2
, num_gs_stack_entries
,
1426 NUM_GS_STACK_ENTRIES_shift
, NUM_GS_STACK_ENTRIES_mask
);
1427 SETfield(sq_stack_resource_mgmt_2
, num_es_stack_entries
,
1428 NUM_ES_STACK_ENTRIES_shift
, NUM_ES_STACK_ENTRIES_mask
);
1431 SETfield(ta_cntl_aux
, 28, TD_FIFO_CREDIT_shift
, TD_FIFO_CREDIT_mask
);
1433 SETfield(db_watermarks
, 4, DEPTH_FREE_shift
, DEPTH_FREE_mask
);
1434 SETfield(db_watermarks
, 16, DEPTH_FLUSH_shift
, DEPTH_FLUSH_mask
);
1435 SETfield(db_watermarks
, 0, FORCE_SUMMARIZE_shift
, FORCE_SUMMARIZE_mask
);
1436 SETfield(db_watermarks
, 4, DEPTH_PENDING_FREE_shift
, DEPTH_PENDING_FREE_mask
);
1437 sq_dyn_gpr_cntl_ps_flush_req
= 0;
1439 if (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
) {
1440 SETfield(ta_cntl_aux
, 3, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1441 db_debug
= 0x82000000;
1442 SETfield(db_watermarks
, 16, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1444 SETfield(ta_cntl_aux
, 2, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1445 SETfield(db_watermarks
, 4, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1446 SETbit(sq_dyn_gpr_cntl_ps_flush_req
, VS_PC_LIMIT_ENABLE_bit
);
1449 BEGIN_BATCH_NO_AUTOSTATE(117);
1450 R600_OUT_BATCH_REGSEQ(SQ_CONFIG
, 6);
1451 R600_OUT_BATCH(sq_config
);
1452 R600_OUT_BATCH(sq_gpr_resource_mgmt_1
);
1453 R600_OUT_BATCH(sq_gpr_resource_mgmt_2
);
1454 R600_OUT_BATCH(sq_thread_resource_mgmt
);
1455 R600_OUT_BATCH(sq_stack_resource_mgmt_1
);
1456 R600_OUT_BATCH(sq_stack_resource_mgmt_2
);
1458 R600_OUT_BATCH_REGVAL(TA_CNTL_AUX
, ta_cntl_aux
);
1459 R600_OUT_BATCH_REGVAL(VC_ENHANCE
, 0);
1460 R600_OUT_BATCH_REGVAL(R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
, sq_dyn_gpr_cntl_ps_flush_req
);
1461 R600_OUT_BATCH_REGVAL(DB_DEBUG
, db_debug
);
1462 R600_OUT_BATCH_REGVAL(DB_WATERMARKS
, db_watermarks
);
1464 R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE
, 9);
1475 R600_OUT_BATCH_REGVAL(CB_CLRCMP_CONTROL
,
1476 (CLRCMP_SEL_SRC
<< CLRCMP_FCN_SEL_shift
));
1477 R600_OUT_BATCH_REGVAL(SQ_VTX_BASE_VTX_LOC
, 0);
1478 R600_OUT_BATCH_REGVAL(SQ_VTX_START_INST_LOC
, 0);
1479 R600_OUT_BATCH_REGVAL(DB_DEPTH_INFO
, 0);
1480 R600_OUT_BATCH_REGVAL(DB_DEPTH_CONTROL
, 0);
1481 R600_OUT_BATCH_REGVAL(CB_SHADER_MASK
, (OUTPUT0_ENABLE_mask
));
1482 R600_OUT_BATCH_REGVAL(CB_TARGET_MASK
, (TARGET0_ENABLE_mask
));
1483 R600_OUT_BATCH_REGVAL(R7xx_CB_SHADER_CONTROL
, (RT0_ENABLE_bit
));
1484 R600_OUT_BATCH_REGVAL(CB_COLOR_CONTROL
, (0xcc << ROP3_shift
));
1486 R600_OUT_BATCH_REGVAL(PA_CL_VTE_CNTL
, VTX_XY_FMT_bit
);
1487 R600_OUT_BATCH_REGVAL(PA_CL_VS_OUT_CNTL
, 0);
1488 R600_OUT_BATCH_REGVAL(PA_CL_CLIP_CNTL
, CLIP_DISABLE_bit
);
1489 R600_OUT_BATCH_REGVAL(PA_SU_SC_MODE_CNTL
, (FACE_bit
) |
1490 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_FRONT_PTYPE_shift
) |
1491 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_BACK_PTYPE_shift
));
1492 R600_OUT_BATCH_REGVAL(PA_SU_VTX_CNTL
, (PIX_CENTER_bit
) |
1493 (X_ROUND_TO_EVEN
<< PA_SU_VTX_CNTL__ROUND_MODE_shift
) |
1494 (X_1_256TH
<< QUANT_MODE_shift
));
1496 R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX
, 4);
1497 R600_OUT_BATCH(2048);
1502 R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL
, 13);
1517 R600_OUT_BATCH_REGVAL(VGT_PRIMITIVEID_EN
, 0);
1518 R600_OUT_BATCH_REGVAL(VGT_MULTI_PRIM_IB_RESET_EN
, 0);
1519 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_0
, 0);
1520 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_1
, 0);
1522 R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN
, 3);
1527 R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN
, 0);
1533 static GLboolean
validate_buffers(context_t
*rmesa
,
1534 struct radeon_bo
*src_bo
,
1535 struct radeon_bo
*dst_bo
)
1538 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1539 src_bo
, RADEON_GEM_DOMAIN_VRAM
, 0);
1541 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1542 dst_bo
, 0, RADEON_GEM_DOMAIN_VRAM
);
1544 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1545 rmesa
->blit_bo
, RADEON_GEM_DOMAIN_GTT
, 0);
1547 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1549 RADEON_GEM_DOMAIN_GTT
, 0);
1553 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1554 first_elem(&rmesa
->radeon
.dma
.reserved
)->bo
,
1555 RADEON_GEM_DOMAIN_GTT
, 0);
1562 GLboolean
r600_blit(GLcontext
*ctx
,
1563 struct radeon_bo
*src_bo
,
1564 intptr_t src_offset
,
1565 gl_format src_mesaformat
,
1568 unsigned src_height
,
1571 struct radeon_bo
*dst_bo
,
1572 intptr_t dst_offset
,
1573 gl_format dst_mesaformat
,
1576 unsigned dst_height
,
1583 context_t
*context
= R700_CONTEXT(ctx
);
1586 if (!is_blit_supported(dst_mesaformat
))
1589 if (src_bo
== dst_bo
) {
1594 fprintf(stderr
, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1595 src_width
, src_height
, src_pitch
,
1596 _mesa_format_row_stride(src_mesaformat
, src_width
),
1597 _mesa_get_format_name(src_mesaformat
));
1598 fprintf(stderr
, "dst: width %d, height %d, pitch %d, format %s\n",
1599 dst_width
, dst_height
,
1600 _mesa_format_row_stride(dst_mesaformat
, dst_width
),
1601 _mesa_get_format_name(dst_mesaformat
));
1604 /* Flush is needed to make sure that source buffer has correct data */
1605 radeonFlush(context
->radeon
.glCtx
);
1607 rcommonEnsureCmdBufSpace(&context
->radeon
, 304, __FUNCTION__
);
1610 load_shaders(context
->radeon
.glCtx
);
1612 if (!validate_buffers(context
, src_bo
, dst_bo
))
1615 /* set clear state */
1617 set_default_state(context
);
1621 set_shaders(context
);
1625 set_tex_resource(context
, src_mesaformat
, src_bo
,
1626 src_width
, src_height
, src_pitch
, src_offset
);
1629 set_tex_sampler(context
);
1633 set_render_target(context
, dst_bo
, dst_mesaformat
,
1634 dst_pitch
, dst_width
, dst_height
, dst_offset
);
1637 set_scissors(context
, dst_x
, dst_y
, dst_x
+ dst_width
, dst_y
+ dst_height
);
1639 set_vb_data(context
, src_x
, src_y
, dst_x
, dst_y
, w
, h
, src_height
, flip_y
);
1640 /* Vertex buffer setup */
1642 set_vtx_resource(context
);
1649 r700SyncSurf(context
, dst_bo
, 0,
1650 RADEON_GEM_DOMAIN_VRAM
|RADEON_GEM_DOMAIN_GTT
,
1651 CB_ACTION_ENA_bit
| (1 << (id
+ 6)));
1654 r700WaitForIdleClean(context
);
1656 radeonFlush(context
->radeon
.glCtx
);