2 * Copyright (C) 2009 Advanced Micro Devices, Inc.
6 * Permission is hereby granted, free of charge, to any person obtaining
7 * a copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sublicense, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial
16 * portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 #include "radeon_common.h"
29 #include "r600_context.h"
31 #include "r600_blit.h"
32 #include "r600_blit_shaders.h"
33 #include "r600_cmdbuf.h"
35 /* common formats supported as both textures and render targets */
36 unsigned r600_check_blit(gl_format mesa_format
)
38 switch (mesa_format
) {
39 case MESA_FORMAT_RGBA8888
:
40 case MESA_FORMAT_SIGNED_RGBA8888
:
41 case MESA_FORMAT_RGBA8888_REV
:
42 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
43 case MESA_FORMAT_ARGB8888
:
44 case MESA_FORMAT_XRGB8888
:
45 case MESA_FORMAT_ARGB8888_REV
:
46 case MESA_FORMAT_XRGB8888_REV
:
47 case MESA_FORMAT_RGB565
:
48 case MESA_FORMAT_RGB565_REV
:
49 case MESA_FORMAT_ARGB4444
:
50 case MESA_FORMAT_ARGB4444_REV
:
51 case MESA_FORMAT_ARGB1555
:
52 case MESA_FORMAT_ARGB1555_REV
:
53 case MESA_FORMAT_AL88
:
54 case MESA_FORMAT_AL88_REV
:
55 case MESA_FORMAT_RGB332
:
60 case MESA_FORMAT_RGBA_FLOAT32
:
61 case MESA_FORMAT_RGBA_FLOAT16
:
62 case MESA_FORMAT_ALPHA_FLOAT32
:
63 case MESA_FORMAT_ALPHA_FLOAT16
:
64 case MESA_FORMAT_LUMINANCE_FLOAT32
:
65 case MESA_FORMAT_LUMINANCE_FLOAT16
:
66 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
67 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
68 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
69 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
70 case MESA_FORMAT_X8_Z24
:
71 case MESA_FORMAT_S8_Z24
:
72 case MESA_FORMAT_Z24_S8
:
75 case MESA_FORMAT_SARGB8
:
76 case MESA_FORMAT_SLA8
:
84 /* not sure blit to depth works or not yet */
85 if (_mesa_get_format_bits(mesa_format
, GL_DEPTH_BITS
) > 0)
92 set_render_target(context_t
*context
, struct radeon_bo
*bo
, gl_format mesa_format
,
93 int nPitchInPixel
, int w
, int h
, intptr_t dst_offset
)
95 uint32_t cb_color0_base
, cb_color0_size
= 0, cb_color0_info
= 0, cb_color0_view
= 0;
97 uint32_t comp_swap
, format
;
98 BATCH_LOCALS(&context
->radeon
);
100 cb_color0_base
= dst_offset
/ 256;
102 SETfield(cb_color0_size
, (nPitchInPixel
/ 8) - 1,
103 PITCH_TILE_MAX_shift
, PITCH_TILE_MAX_mask
);
104 SETfield(cb_color0_size
, ((nPitchInPixel
* h
) / 64) - 1,
105 SLICE_TILE_MAX_shift
, SLICE_TILE_MAX_mask
);
107 SETfield(cb_color0_info
, ENDIAN_NONE
, ENDIAN_shift
, ENDIAN_mask
);
108 SETfield(cb_color0_info
, ARRAY_LINEAR_GENERAL
,
109 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
111 SETbit(cb_color0_info
, BLEND_BYPASS_bit
);
113 switch(mesa_format
) {
114 case MESA_FORMAT_RGBA8888
:
115 format
= COLOR_8_8_8_8
;
116 comp_swap
= SWAP_STD_REV
;
117 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
118 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
120 case MESA_FORMAT_SIGNED_RGBA8888
:
121 format
= COLOR_8_8_8_8
;
122 comp_swap
= SWAP_STD_REV
;
123 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
124 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
126 case MESA_FORMAT_RGBA8888_REV
:
127 format
= COLOR_8_8_8_8
;
128 comp_swap
= SWAP_STD
;
129 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
130 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
132 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
133 format
= COLOR_8_8_8_8
;
134 comp_swap
= SWAP_STD
;
135 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
136 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
138 case MESA_FORMAT_ARGB8888
:
139 case MESA_FORMAT_XRGB8888
:
140 format
= COLOR_8_8_8_8
;
141 comp_swap
= SWAP_ALT
;
142 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
143 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
145 case MESA_FORMAT_ARGB8888_REV
:
146 case MESA_FORMAT_XRGB8888_REV
:
147 format
= COLOR_8_8_8_8
;
148 comp_swap
= SWAP_ALT_REV
;
149 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
150 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
152 case MESA_FORMAT_RGB565
:
153 format
= COLOR_5_6_5
;
154 comp_swap
= SWAP_STD_REV
;
155 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
156 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
158 case MESA_FORMAT_RGB565_REV
:
159 format
= COLOR_5_6_5
;
160 comp_swap
= SWAP_STD
;
161 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
162 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
164 case MESA_FORMAT_ARGB4444
:
165 format
= COLOR_4_4_4_4
;
166 comp_swap
= SWAP_ALT
;
167 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
168 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
170 case MESA_FORMAT_ARGB4444_REV
:
171 format
= COLOR_4_4_4_4
;
172 comp_swap
= SWAP_ALT_REV
;
173 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
174 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
176 case MESA_FORMAT_ARGB1555
:
177 format
= COLOR_1_5_5_5
;
178 comp_swap
= SWAP_ALT
;
179 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
180 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
182 case MESA_FORMAT_ARGB1555_REV
:
183 format
= COLOR_1_5_5_5
;
184 comp_swap
= SWAP_ALT_REV
;
185 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
186 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
188 case MESA_FORMAT_AL88
:
190 comp_swap
= SWAP_STD
;
191 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
192 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
194 case MESA_FORMAT_AL88_REV
:
196 comp_swap
= SWAP_STD_REV
;
197 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
198 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
200 case MESA_FORMAT_RGB332
:
201 format
= COLOR_3_3_2
;
202 comp_swap
= SWAP_STD_REV
;
203 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
204 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
208 comp_swap
= SWAP_ALT_REV
;
209 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
210 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
213 case MESA_FORMAT_CI8
:
215 comp_swap
= SWAP_STD
;
216 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
217 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
221 comp_swap
= SWAP_ALT
;
222 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
223 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
225 case MESA_FORMAT_RGBA_FLOAT32
:
226 format
= COLOR_32_32_32_32_FLOAT
;
227 comp_swap
= SWAP_STD_REV
;
228 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
229 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
230 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
232 case MESA_FORMAT_RGBA_FLOAT16
:
233 format
= COLOR_16_16_16_16_FLOAT
;
234 comp_swap
= SWAP_STD_REV
;
235 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
236 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
238 case MESA_FORMAT_ALPHA_FLOAT32
:
239 format
= COLOR_32_FLOAT
;
240 comp_swap
= SWAP_ALT_REV
;
241 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
242 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
243 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
245 case MESA_FORMAT_ALPHA_FLOAT16
:
246 format
= COLOR_16_FLOAT
;
247 comp_swap
= SWAP_ALT_REV
;
248 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
249 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
251 case MESA_FORMAT_LUMINANCE_FLOAT32
:
252 format
= COLOR_32_FLOAT
;
253 comp_swap
= SWAP_ALT
;
254 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
255 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
256 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
258 case MESA_FORMAT_LUMINANCE_FLOAT16
:
259 format
= COLOR_16_FLOAT
;
260 comp_swap
= SWAP_ALT
;
261 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
262 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
264 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
265 format
= COLOR_32_32_FLOAT
;
266 comp_swap
= SWAP_ALT_REV
;
267 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
268 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
269 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
271 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
272 format
= COLOR_16_16_FLOAT
;
273 comp_swap
= SWAP_ALT_REV
;
274 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
275 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
277 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
278 format
= COLOR_32_FLOAT
;
279 comp_swap
= SWAP_STD
;
280 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
281 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
282 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
284 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
285 format
= COLOR_16_FLOAT
;
286 comp_swap
= SWAP_STD
;
287 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
288 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
290 case MESA_FORMAT_X8_Z24
:
291 case MESA_FORMAT_S8_Z24
:
293 comp_swap
= SWAP_STD
;
294 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
295 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
296 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
297 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
299 case MESA_FORMAT_Z24_S8
:
301 comp_swap
= SWAP_STD
;
302 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
303 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
304 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
305 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
307 case MESA_FORMAT_Z16
:
309 comp_swap
= SWAP_STD
;
310 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
311 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
312 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
313 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
315 case MESA_FORMAT_Z32
:
317 comp_swap
= SWAP_STD
;
318 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
319 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
320 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
321 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
323 case MESA_FORMAT_SARGB8
:
324 format
= COLOR_8_8_8_8
;
325 comp_swap
= SWAP_ALT
;
326 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
327 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
329 case MESA_FORMAT_SLA8
:
331 comp_swap
= SWAP_ALT_REV
;
332 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
333 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
335 case MESA_FORMAT_SL8
:
337 comp_swap
= SWAP_ALT_REV
;
338 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
339 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
342 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
343 assert("Invalid format for US output\n");
347 /* must be 0 on r7xx */
348 if (context
->radeon
.radeonScreen
->chip_family
>= CHIP_FAMILY_RV770
)
349 CLEARbit(cb_color0_info
, BLEND_FLOAT32_bit
);
351 SETfield(cb_color0_info
, format
, CB_COLOR0_INFO__FORMAT_shift
,
352 CB_COLOR0_INFO__FORMAT_mask
);
353 SETfield(cb_color0_info
, comp_swap
, COMP_SWAP_shift
, COMP_SWAP_mask
);
355 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
356 R600_OUT_BATCH_REGSEQ(CB_COLOR0_BASE
+ (4 * id
), 1);
357 R600_OUT_BATCH(cb_color0_base
);
358 R600_OUT_BATCH_RELOC(0,
361 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
364 if ((context
->radeon
.radeonScreen
->chip_family
> CHIP_FAMILY_R600
) &&
365 (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
)) {
366 BEGIN_BATCH_NO_AUTOSTATE(2);
367 R600_OUT_BATCH(CP_PACKET3(R600_IT_SURFACE_BASE_UPDATE
, 0));
368 R600_OUT_BATCH((2 << id
));
372 /* Set CMASK & TILE buffer to the offset of color buffer as
373 * we don't use those this shouldn't cause any issue and we
374 * then have a valid cmd stream
376 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
377 R600_OUT_BATCH_REGSEQ(CB_COLOR0_TILE
+ (4 * id
), 1);
378 R600_OUT_BATCH(cb_color0_base
);
379 R600_OUT_BATCH_RELOC(0,
382 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
384 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
385 R600_OUT_BATCH_REGSEQ(CB_COLOR0_FRAG
+ (4 * id
), 1);
386 R600_OUT_BATCH(cb_color0_base
);
387 R600_OUT_BATCH_RELOC(0,
390 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
393 BEGIN_BATCH_NO_AUTOSTATE(9);
394 R600_OUT_BATCH_REGVAL(CB_COLOR0_SIZE
+ (4 * id
), cb_color0_size
);
395 R600_OUT_BATCH_REGVAL(CB_COLOR0_VIEW
+ (4 * id
), cb_color0_view
);
396 R600_OUT_BATCH_REGVAL(CB_COLOR0_MASK
+ (4 * id
), 0);
399 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
400 R600_OUT_BATCH_REGVAL(CB_COLOR0_INFO
+ (4 * id
), cb_color0_info
);
401 R600_OUT_BATCH_RELOC(0,
404 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
411 static inline void load_shaders(GLcontext
* ctx
)
414 radeonContextPtr radeonctx
= RADEON_CONTEXT(ctx
);
415 context_t
*context
= R700_CONTEXT(ctx
);
419 if (context
->blit_bo_loaded
== 1)
423 context
->blit_bo
= radeon_bo_open(radeonctx
->radeonScreen
->bom
, 0,
424 size
, 256, RADEON_GEM_DOMAIN_GTT
, 0);
425 radeon_bo_map(context
->blit_bo
, 1);
426 shader
= context
->blit_bo
->ptr
;
428 for(i
=0; i
<sizeof(r6xx_vs
)/4; i
++) {
429 shader
[128+i
] = r6xx_vs
[i
];
431 for(i
=0; i
<sizeof(r6xx_ps
)/4; i
++) {
432 shader
[256+i
] = r6xx_ps
[i
];
435 radeon_bo_unmap(context
->blit_bo
);
436 context
->blit_bo_loaded
= 1;
441 set_shaders(context_t
*context
)
443 struct radeon_bo
* pbo
= context
->blit_bo
;
444 BATCH_LOCALS(&context
->radeon
);
446 uint32_t sq_pgm_start_fs
= (512 >> 8);
447 uint32_t sq_pgm_resources_fs
= 0;
448 uint32_t sq_pgm_cf_offset_fs
= 0;
450 uint32_t sq_pgm_start_vs
= (512 >> 8);
451 uint32_t sq_pgm_resources_vs
= (1 << NUM_GPRS_shift
);
452 uint32_t sq_pgm_cf_offset_vs
= 0;
454 uint32_t sq_pgm_start_ps
= (1024 >> 8);
455 uint32_t sq_pgm_resources_ps
= (1 << NUM_GPRS_shift
);
456 uint32_t sq_pgm_cf_offset_ps
= 0;
457 uint32_t sq_pgm_exports_ps
= (1 << 1);
459 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
462 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
463 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_FS
, 1);
464 R600_OUT_BATCH(sq_pgm_start_fs
);
465 R600_OUT_BATCH_RELOC(sq_pgm_start_fs
,
468 RADEON_GEM_DOMAIN_GTT
, 0, 0);
471 BEGIN_BATCH_NO_AUTOSTATE(6);
472 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_FS
, sq_pgm_resources_fs
);
473 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_FS
, sq_pgm_cf_offset_fs
);
477 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
478 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_VS
, 1);
479 R600_OUT_BATCH(sq_pgm_start_vs
);
480 R600_OUT_BATCH_RELOC(sq_pgm_start_vs
,
483 RADEON_GEM_DOMAIN_GTT
, 0, 0);
486 BEGIN_BATCH_NO_AUTOSTATE(6);
487 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_VS
, sq_pgm_resources_vs
);
488 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_VS
, sq_pgm_cf_offset_vs
);
492 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
493 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_PS
, 1);
494 R600_OUT_BATCH(sq_pgm_start_ps
);
495 R600_OUT_BATCH_RELOC(sq_pgm_start_ps
,
498 RADEON_GEM_DOMAIN_GTT
, 0, 0);
501 BEGIN_BATCH_NO_AUTOSTATE(9);
502 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_PS
, sq_pgm_resources_ps
);
503 R600_OUT_BATCH_REGVAL(SQ_PGM_EXPORTS_PS
, sq_pgm_exports_ps
);
504 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_PS
, sq_pgm_cf_offset_ps
);
507 BEGIN_BATCH_NO_AUTOSTATE(18);
508 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_CONFIG
, 0); //EXPORT_COUNT is - 1
509 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_ID_0
, 0);
510 R600_OUT_BATCH_REGVAL(SPI_PS_INPUT_CNTL_0
, SEL_CENTROID_bit
);
511 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_0
, (1 << NUM_INTERP_shift
));
512 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_1
, 0);
513 R600_OUT_BATCH_REGVAL(SPI_INTERP_CONTROL_0
, 0);
521 set_vtx_resource(context_t
*context
)
523 struct radeon_bo
*bo
= context
->blit_bo
;
524 BATCH_LOCALS(&context
->radeon
);
526 BEGIN_BATCH_NO_AUTOSTATE(6);
527 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
528 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
531 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
532 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
537 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
538 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
539 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
540 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
541 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
542 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, TC_ACTION_ENA_bit
);
544 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
546 BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
548 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
549 R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET
* FETCH_RESOURCE_STRIDE
);
551 R600_OUT_BATCH(48 - 1);
552 R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
);
553 R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift
);
556 R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER
<< SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
);
557 R600_OUT_BATCH_RELOC(SQ_VTX_CONSTANT_WORD0_0
,
559 SQ_VTX_CONSTANT_WORD0_0
,
560 RADEON_GEM_DOMAIN_GTT
, 0, 0);
567 set_tex_resource(context_t
* context
,
568 gl_format mesa_format
, struct radeon_bo
*bo
, int w
, int h
,
569 int TexelPitch
, intptr_t src_offset
)
571 uint32_t sq_tex_resource0
, sq_tex_resource1
, sq_tex_resource2
, sq_tex_resource4
, sq_tex_resource6
;
573 sq_tex_resource0
= sq_tex_resource1
= sq_tex_resource2
= sq_tex_resource4
= sq_tex_resource6
= 0;
574 BATCH_LOCALS(&context
->radeon
);
576 SETfield(sq_tex_resource0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
577 SETfield(sq_tex_resource0
, ARRAY_LINEAR_GENERAL
,
578 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
579 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
581 switch (mesa_format
) {
582 case MESA_FORMAT_RGBA8888
:
583 case MESA_FORMAT_SIGNED_RGBA8888
:
584 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
585 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
587 SETfield(sq_tex_resource4
, SQ_SEL_W
,
588 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
589 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
590 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
591 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
592 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
593 SETfield(sq_tex_resource4
, SQ_SEL_X
,
594 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
595 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
596 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
597 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
598 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
599 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
600 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
601 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
602 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
603 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
606 case MESA_FORMAT_RGBA8888_REV
:
607 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
608 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
609 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
611 SETfield(sq_tex_resource4
, SQ_SEL_X
,
612 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
613 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
614 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
615 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
616 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
617 SETfield(sq_tex_resource4
, SQ_SEL_W
,
618 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
619 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
620 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
621 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
622 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
623 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
624 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
625 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
626 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
627 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
630 case MESA_FORMAT_ARGB8888
:
631 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
632 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
634 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
635 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
636 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
637 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
638 SETfield(sq_tex_resource4
, SQ_SEL_X
,
639 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
640 SETfield(sq_tex_resource4
, SQ_SEL_W
,
641 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
643 case MESA_FORMAT_XRGB8888
:
644 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
645 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_1
,
654 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
656 case MESA_FORMAT_ARGB8888_REV
:
657 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
658 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
660 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
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_Z
,
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_W
,
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_X
,
667 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
669 case MESA_FORMAT_XRGB8888_REV
:
670 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
671 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
673 SETfield(sq_tex_resource4
, SQ_SEL_1
,
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_RGB565
:
683 SETfield(sq_tex_resource1
, FMT_5_6_5
,
684 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
686 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
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_Y
,
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_X
,
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_1
,
693 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
695 case MESA_FORMAT_RGB565_REV
:
696 SETfield(sq_tex_resource1
, FMT_5_6_5
,
697 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
699 SETfield(sq_tex_resource4
, SQ_SEL_X
,
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_Z
,
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_ARGB4444
:
709 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
710 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
712 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
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_X
,
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_W
,
719 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
721 case MESA_FORMAT_ARGB4444_REV
:
722 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
723 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
725 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
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_Z
,
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_W
,
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_X
,
732 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
734 case MESA_FORMAT_ARGB1555
:
735 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
736 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
738 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
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_Y
,
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_X
,
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_W
,
745 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
747 case MESA_FORMAT_ARGB1555_REV
:
748 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
749 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
751 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
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_Z
,
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_W
,
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_X
,
758 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
760 case MESA_FORMAT_AL88
:
761 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
762 SETfield(sq_tex_resource1
, FMT_8_8
,
763 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
765 SETfield(sq_tex_resource4
, SQ_SEL_X
,
766 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
767 SETfield(sq_tex_resource4
, SQ_SEL_X
,
768 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
769 SETfield(sq_tex_resource4
, SQ_SEL_X
,
770 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
771 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
772 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
774 case MESA_FORMAT_RGB332
:
775 SETfield(sq_tex_resource1
, FMT_3_3_2
,
776 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
778 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
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_Y
,
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_1
,
785 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
787 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
788 SETfield(sq_tex_resource1
, FMT_8
,
789 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
791 SETfield(sq_tex_resource4
, SQ_SEL_0
,
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_0
,
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_0
,
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_X
,
798 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
800 case MESA_FORMAT_L8
: /* X, X, X, ONE */
801 SETfield(sq_tex_resource1
, FMT_8
,
802 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
804 SETfield(sq_tex_resource4
, SQ_SEL_X
,
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_X
,
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_X
,
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_1
,
811 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
813 case MESA_FORMAT_I8
: /* X, X, X, X */
814 case MESA_FORMAT_CI8
:
815 SETfield(sq_tex_resource1
, FMT_8
,
816 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
818 SETfield(sq_tex_resource4
, SQ_SEL_X
,
819 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
820 SETfield(sq_tex_resource4
, SQ_SEL_X
,
821 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
822 SETfield(sq_tex_resource4
, SQ_SEL_X
,
823 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
824 SETfield(sq_tex_resource4
, SQ_SEL_X
,
825 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
827 case MESA_FORMAT_RGBA_FLOAT32
:
828 SETfield(sq_tex_resource1
, FMT_32_32_32_32_FLOAT
,
829 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_Y
,
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_Z
,
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_W
,
838 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
840 case MESA_FORMAT_RGBA_FLOAT16
:
841 SETfield(sq_tex_resource1
, FMT_16_16_16_16_FLOAT
,
842 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
854 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
855 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
857 SETfield(sq_tex_resource4
, SQ_SEL_0
,
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_0
,
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_0
,
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_X
,
864 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
866 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
867 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
868 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
880 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
881 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
883 SETfield(sq_tex_resource4
, SQ_SEL_X
,
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_X
,
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_X
,
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_1
,
890 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
892 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
893 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
894 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_ALPHA_FLOAT32
:
906 SETfield(sq_tex_resource1
, FMT_32_32_FLOAT
,
907 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_Y
,
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_FLOAT16
:
919 SETfield(sq_tex_resource1
, FMT_16_16_FLOAT
,
920 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_INTENSITY_FLOAT32
: /* X, X, X, X */
932 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
933 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_X
,
942 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
944 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
945 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
946 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_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_Z16
:
958 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
959 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
960 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
961 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
962 SETfield(sq_tex_resource1
, FMT_16
,
963 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
964 SETfield(sq_tex_resource4
, SQ_SEL_X
,
965 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
966 SETfield(sq_tex_resource4
, SQ_SEL_X
,
967 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
968 SETfield(sq_tex_resource4
, SQ_SEL_X
,
969 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
970 SETfield(sq_tex_resource4
, SQ_SEL_X
,
971 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
973 case MESA_FORMAT_X8_Z24
:
974 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
975 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
976 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
977 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
978 SETfield(sq_tex_resource1
, FMT_8_24
,
979 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
980 SETfield(sq_tex_resource4
, SQ_SEL_X
,
981 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
982 SETfield(sq_tex_resource4
, SQ_SEL_1
,
983 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
984 SETfield(sq_tex_resource4
, SQ_SEL_0
,
985 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
986 SETfield(sq_tex_resource4
, SQ_SEL_1
,
987 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
989 case MESA_FORMAT_S8_Z24
:
990 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
991 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
992 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
993 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
994 SETfield(sq_tex_resource1
, FMT_8_24
,
995 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
996 SETfield(sq_tex_resource4
, SQ_SEL_X
,
997 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
998 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
999 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1000 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1001 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1002 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1003 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1005 case MESA_FORMAT_Z24_S8
:
1006 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1007 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1008 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1009 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1010 SETfield(sq_tex_resource1
, FMT_24_8
,
1011 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1012 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1013 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1014 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1015 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1016 SETfield(sq_tex_resource4
, SQ_SEL_0
,
1017 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1018 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1019 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1021 case MESA_FORMAT_Z32
:
1022 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1023 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1024 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1025 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1026 SETfield(sq_tex_resource1
, FMT_32
,
1027 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1028 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1029 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1030 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1031 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1032 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1033 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1034 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1035 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1037 case MESA_FORMAT_S8
:
1038 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
1039 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
1040 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
1041 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
1042 SETfield(sq_tex_resource1
, FMT_8
,
1043 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1044 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1045 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1046 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1047 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1048 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1049 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1050 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1051 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1053 case MESA_FORMAT_SARGB8
:
1054 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
1055 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1057 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
1058 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1059 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1060 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1061 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1062 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1063 SETfield(sq_tex_resource4
, SQ_SEL_W
,
1064 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1065 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1067 case MESA_FORMAT_SLA8
:
1068 SETfield(sq_tex_resource1
, FMT_8_8
,
1069 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1071 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1072 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1073 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1074 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1075 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1076 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1077 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1078 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1079 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1081 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
1082 SETfield(sq_tex_resource1
, FMT_8
,
1083 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1085 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1086 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1087 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1088 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1089 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1090 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1091 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1092 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1093 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1096 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
1097 assert("Invalid format for US output\n");
1101 SETfield(sq_tex_resource0
, (TexelPitch
/8)-1, PITCH_shift
, PITCH_mask
);
1102 SETfield(sq_tex_resource0
, w
- 1, TEX_WIDTH_shift
, TEX_WIDTH_mask
);
1103 SETfield(sq_tex_resource1
, h
- 1, TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
1105 sq_tex_resource2
= src_offset
/ 256;
1107 SETfield(sq_tex_resource6
, SQ_TEX_VTX_VALID_TEXTURE
,
1108 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
,
1109 SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
1111 r700SyncSurf(context
, bo
,
1112 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
1113 0, TC_ACTION_ENA_bit
);
1115 BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1116 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
1117 R600_OUT_BATCH(0 * 7);
1119 R600_OUT_BATCH(sq_tex_resource0
);
1120 R600_OUT_BATCH(sq_tex_resource1
);
1121 R600_OUT_BATCH(sq_tex_resource2
);
1122 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE3
1123 R600_OUT_BATCH(sq_tex_resource4
);
1124 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE5
1125 R600_OUT_BATCH(sq_tex_resource6
);
1126 R600_OUT_BATCH_RELOC(0,
1129 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1130 R600_OUT_BATCH_RELOC(0,
1133 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1139 set_tex_sampler(context_t
* context
)
1141 uint32_t sq_tex_sampler_word0
= 0, sq_tex_sampler_word1
= 0, sq_tex_sampler_word2
= 0;
1144 SETbit(sq_tex_sampler_word2
, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit
);
1146 BATCH_LOCALS(&context
->radeon
);
1148 BEGIN_BATCH_NO_AUTOSTATE(5);
1149 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
1150 R600_OUT_BATCH(i
* 3);
1151 R600_OUT_BATCH(sq_tex_sampler_word0
);
1152 R600_OUT_BATCH(sq_tex_sampler_word1
);
1153 R600_OUT_BATCH(sq_tex_sampler_word2
);
1159 set_scissors(context_t
*context
, int x1
, int y1
, int x2
, int y2
)
1161 BATCH_LOCALS(&context
->radeon
);
1163 BEGIN_BATCH_NO_AUTOSTATE(17);
1164 R600_OUT_BATCH_REGSEQ(PA_SC_SCREEN_SCISSOR_TL
, 2);
1165 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16));
1166 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1168 R600_OUT_BATCH_REGSEQ(PA_SC_WINDOW_OFFSET
, 3);
1169 R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1170 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
)); //PA_SC_WINDOW_SCISSOR_TL
1171 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1173 R600_OUT_BATCH_REGSEQ(PA_SC_GENERIC_SCISSOR_TL
, 2);
1174 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1175 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1177 /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1178 R600_OUT_BATCH_REGSEQ(PA_SC_VPORT_SCISSOR_0_TL
, 2 );
1179 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1180 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1188 set_vb_data(context_t
* context
, int src_x
, int src_y
, int dst_x
, int dst_y
,
1189 int w
, int h
, int src_h
, unsigned flip_y
)
1192 radeon_bo_map(context
->blit_bo
, 1);
1193 vb
= context
->blit_bo
->ptr
;
1195 vb
[0] = (float)(dst_x
);
1196 vb
[1] = (float)(dst_y
);
1197 vb
[2] = (float)(src_x
);
1198 vb
[3] = (flip_y
) ? (float)(src_h
- src_y
) : (float)src_y
;
1200 vb
[4] = (float)(dst_x
);
1201 vb
[5] = (float)(dst_y
+ h
);
1202 vb
[6] = (float)(src_x
);
1203 vb
[7] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1205 vb
[8] = (float)(dst_x
+ w
);
1206 vb
[9] = (float)(dst_y
+ h
);
1207 vb
[10] = (float)(src_x
+ w
);
1208 vb
[11] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1210 radeon_bo_unmap(context
->blit_bo
);
1215 draw_auto(context_t
*context
)
1217 BATCH_LOCALS(&context
->radeon
);
1218 uint32_t vgt_primitive_type
= 0, vgt_index_type
= 0, vgt_draw_initiator
= 0, vgt_num_indices
;
1220 SETfield(vgt_primitive_type
, DI_PT_RECTLIST
,
1221 VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift
,
1222 VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask
);
1223 SETfield(vgt_index_type
, DI_INDEX_SIZE_16_BIT
, INDEX_TYPE_shift
,
1225 SETfield(vgt_draw_initiator
, DI_MAJOR_MODE_0
, MAJOR_MODE_shift
,
1227 SETfield(vgt_draw_initiator
, DI_SRC_SEL_AUTO_INDEX
, SOURCE_SELECT_shift
,
1228 SOURCE_SELECT_mask
);
1230 vgt_num_indices
= 3;
1232 BEGIN_BATCH_NO_AUTOSTATE(10);
1234 R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE
, 1);
1235 R600_OUT_BATCH(vgt_primitive_type
);
1237 R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE
, 0));
1238 R600_OUT_BATCH(vgt_index_type
);
1240 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES
, 0));
1243 R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO
, 1));
1244 R600_OUT_BATCH(vgt_num_indices
);
1245 R600_OUT_BATCH(vgt_draw_initiator
);
1252 set_default_state(context_t
*context
)
1267 int num_ps_stack_entries
;
1268 int num_vs_stack_entries
;
1269 int num_gs_stack_entries
;
1270 int num_es_stack_entries
;
1271 uint32_t sq_config
, sq_gpr_resource_mgmt_1
, sq_gpr_resource_mgmt_2
;
1272 uint32_t sq_thread_resource_mgmt
, sq_stack_resource_mgmt_1
, sq_stack_resource_mgmt_2
;
1273 uint32_t ta_cntl_aux
, db_watermarks
, sq_dyn_gpr_cntl_ps_flush_req
, db_debug
;
1274 BATCH_LOCALS(&context
->radeon
);
1276 switch (context
->radeon
.radeonScreen
->chip_family
) {
1277 case CHIP_FAMILY_R600
:
1283 num_ps_threads
= 136;
1284 num_vs_threads
= 48;
1287 num_ps_stack_entries
= 128;
1288 num_vs_stack_entries
= 128;
1289 num_gs_stack_entries
= 0;
1290 num_es_stack_entries
= 0;
1292 case CHIP_FAMILY_RV630
:
1293 case CHIP_FAMILY_RV635
:
1299 num_ps_threads
= 144;
1300 num_vs_threads
= 40;
1303 num_ps_stack_entries
= 40;
1304 num_vs_stack_entries
= 40;
1305 num_gs_stack_entries
= 32;
1306 num_es_stack_entries
= 16;
1308 case CHIP_FAMILY_RV610
:
1309 case CHIP_FAMILY_RV620
:
1310 case CHIP_FAMILY_RS780
:
1311 case CHIP_FAMILY_RS880
:
1318 num_ps_threads
= 136;
1319 num_vs_threads
= 48;
1322 num_ps_stack_entries
= 40;
1323 num_vs_stack_entries
= 40;
1324 num_gs_stack_entries
= 32;
1325 num_es_stack_entries
= 16;
1327 case CHIP_FAMILY_RV670
:
1333 num_ps_threads
= 136;
1334 num_vs_threads
= 48;
1337 num_ps_stack_entries
= 40;
1338 num_vs_stack_entries
= 40;
1339 num_gs_stack_entries
= 32;
1340 num_es_stack_entries
= 16;
1342 case CHIP_FAMILY_RV770
:
1348 num_ps_threads
= 188;
1349 num_vs_threads
= 60;
1352 num_ps_stack_entries
= 256;
1353 num_vs_stack_entries
= 256;
1354 num_gs_stack_entries
= 0;
1355 num_es_stack_entries
= 0;
1357 case CHIP_FAMILY_RV730
:
1358 case CHIP_FAMILY_RV740
:
1364 num_ps_threads
= 188;
1365 num_vs_threads
= 60;
1368 num_ps_stack_entries
= 128;
1369 num_vs_stack_entries
= 128;
1370 num_gs_stack_entries
= 0;
1371 num_es_stack_entries
= 0;
1373 case CHIP_FAMILY_RV710
:
1379 num_ps_threads
= 144;
1380 num_vs_threads
= 48;
1383 num_ps_stack_entries
= 128;
1384 num_vs_stack_entries
= 128;
1385 num_gs_stack_entries
= 0;
1386 num_es_stack_entries
= 0;
1391 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
1392 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
1393 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
1394 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
1395 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
1396 CLEARbit(sq_config
, VC_ENABLE_bit
);
1398 SETbit(sq_config
, VC_ENABLE_bit
);
1399 SETbit(sq_config
, DX9_CONSTS_bit
);
1400 SETbit(sq_config
, ALU_INST_PREFER_VECTOR_bit
);
1401 SETfield(sq_config
, ps_prio
, PS_PRIO_shift
, PS_PRIO_mask
);
1402 SETfield(sq_config
, vs_prio
, VS_PRIO_shift
, VS_PRIO_mask
);
1403 SETfield(sq_config
, gs_prio
, GS_PRIO_shift
, GS_PRIO_mask
);
1404 SETfield(sq_config
, es_prio
, ES_PRIO_shift
, ES_PRIO_mask
);
1406 sq_gpr_resource_mgmt_1
= 0;
1407 SETfield(sq_gpr_resource_mgmt_1
, num_ps_gprs
, NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1408 SETfield(sq_gpr_resource_mgmt_1
, num_vs_gprs
, NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1409 SETfield(sq_gpr_resource_mgmt_1
, num_temp_gprs
,
1410 NUM_CLAUSE_TEMP_GPRS_shift
, NUM_CLAUSE_TEMP_GPRS_mask
);
1412 sq_gpr_resource_mgmt_2
= 0;
1413 SETfield(sq_gpr_resource_mgmt_2
, num_gs_gprs
, NUM_GS_GPRS_shift
, NUM_GS_GPRS_mask
);
1414 SETfield(sq_gpr_resource_mgmt_2
, num_es_gprs
, NUM_ES_GPRS_shift
, NUM_ES_GPRS_mask
);
1416 sq_thread_resource_mgmt
= 0;
1417 SETfield(sq_thread_resource_mgmt
, num_ps_threads
,
1418 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1419 SETfield(sq_thread_resource_mgmt
, num_vs_threads
,
1420 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1421 SETfield(sq_thread_resource_mgmt
, num_gs_threads
,
1422 NUM_GS_THREADS_shift
, NUM_GS_THREADS_mask
);
1423 SETfield(sq_thread_resource_mgmt
, num_es_threads
,
1424 NUM_ES_THREADS_shift
, NUM_ES_THREADS_mask
);
1426 sq_stack_resource_mgmt_1
= 0;
1427 SETfield(sq_stack_resource_mgmt_1
, num_ps_stack_entries
,
1428 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1429 SETfield(sq_stack_resource_mgmt_1
, num_vs_stack_entries
,
1430 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1432 sq_stack_resource_mgmt_2
= 0;
1433 SETfield(sq_stack_resource_mgmt_2
, num_gs_stack_entries
,
1434 NUM_GS_STACK_ENTRIES_shift
, NUM_GS_STACK_ENTRIES_mask
);
1435 SETfield(sq_stack_resource_mgmt_2
, num_es_stack_entries
,
1436 NUM_ES_STACK_ENTRIES_shift
, NUM_ES_STACK_ENTRIES_mask
);
1439 SETfield(ta_cntl_aux
, 28, TD_FIFO_CREDIT_shift
, TD_FIFO_CREDIT_mask
);
1441 SETfield(db_watermarks
, 4, DEPTH_FREE_shift
, DEPTH_FREE_mask
);
1442 SETfield(db_watermarks
, 16, DEPTH_FLUSH_shift
, DEPTH_FLUSH_mask
);
1443 SETfield(db_watermarks
, 0, FORCE_SUMMARIZE_shift
, FORCE_SUMMARIZE_mask
);
1444 SETfield(db_watermarks
, 4, DEPTH_PENDING_FREE_shift
, DEPTH_PENDING_FREE_mask
);
1445 sq_dyn_gpr_cntl_ps_flush_req
= 0;
1447 if (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
) {
1448 SETfield(ta_cntl_aux
, 3, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1449 db_debug
= 0x82000000;
1450 SETfield(db_watermarks
, 16, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1452 SETfield(ta_cntl_aux
, 2, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1453 SETfield(db_watermarks
, 4, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1454 SETbit(sq_dyn_gpr_cntl_ps_flush_req
, VS_PC_LIMIT_ENABLE_bit
);
1457 BEGIN_BATCH_NO_AUTOSTATE(120);
1458 R600_OUT_BATCH_REGSEQ(SQ_CONFIG
, 6);
1459 R600_OUT_BATCH(sq_config
);
1460 R600_OUT_BATCH(sq_gpr_resource_mgmt_1
);
1461 R600_OUT_BATCH(sq_gpr_resource_mgmt_2
);
1462 R600_OUT_BATCH(sq_thread_resource_mgmt
);
1463 R600_OUT_BATCH(sq_stack_resource_mgmt_1
);
1464 R600_OUT_BATCH(sq_stack_resource_mgmt_2
);
1466 R600_OUT_BATCH_REGVAL(TA_CNTL_AUX
, ta_cntl_aux
);
1467 R600_OUT_BATCH_REGVAL(VC_ENHANCE
, 0);
1468 R600_OUT_BATCH_REGVAL(R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
, sq_dyn_gpr_cntl_ps_flush_req
);
1469 R600_OUT_BATCH_REGVAL(DB_DEBUG
, db_debug
);
1470 R600_OUT_BATCH_REGVAL(DB_WATERMARKS
, db_watermarks
);
1472 R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE
, 9);
1483 R600_OUT_BATCH_REGVAL(CB_CLRCMP_CONTROL
,
1484 (CLRCMP_SEL_SRC
<< CLRCMP_FCN_SEL_shift
));
1485 R600_OUT_BATCH_REGVAL(SQ_VTX_BASE_VTX_LOC
, 0);
1486 R600_OUT_BATCH_REGVAL(SQ_VTX_START_INST_LOC
, 0);
1487 R600_OUT_BATCH_REGVAL(DB_DEPTH_CONTROL
, 0);
1488 R600_OUT_BATCH_REGVAL(CB_SHADER_MASK
, (OUTPUT0_ENABLE_mask
));
1489 R600_OUT_BATCH_REGVAL(CB_TARGET_MASK
, (TARGET0_ENABLE_mask
));
1490 R600_OUT_BATCH_REGVAL(R7xx_CB_SHADER_CONTROL
, (RT0_ENABLE_bit
));
1491 R600_OUT_BATCH_REGVAL(CB_COLOR_CONTROL
, (0xcc << ROP3_shift
));
1493 R600_OUT_BATCH_REGVAL(PA_CL_VTE_CNTL
, VTX_XY_FMT_bit
);
1494 R600_OUT_BATCH_REGVAL(PA_CL_VS_OUT_CNTL
, 0);
1495 R600_OUT_BATCH_REGVAL(PA_CL_CLIP_CNTL
, CLIP_DISABLE_bit
);
1496 R600_OUT_BATCH_REGVAL(PA_SU_SC_MODE_CNTL
, (FACE_bit
) |
1497 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_FRONT_PTYPE_shift
) |
1498 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_BACK_PTYPE_shift
));
1499 R600_OUT_BATCH_REGVAL(PA_SU_VTX_CNTL
, (PIX_CENTER_bit
) |
1500 (X_ROUND_TO_EVEN
<< PA_SU_VTX_CNTL__ROUND_MODE_shift
) |
1501 (X_1_256TH
<< QUANT_MODE_shift
));
1502 R600_OUT_BATCH_REGVAL(PA_SC_AA_CONFIG
, 0);
1504 R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX
, 4);
1505 R600_OUT_BATCH(0xffffff);
1510 R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL
, 13);
1525 R600_OUT_BATCH_REGVAL(VGT_PRIMITIVEID_EN
, 0);
1526 R600_OUT_BATCH_REGVAL(VGT_MULTI_PRIM_IB_RESET_EN
, 0);
1527 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_0
, 0);
1528 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_1
, 0);
1530 R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN
, 3);
1535 R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN
, 0);
1536 R600_OUT_BATCH_REGVAL(SX_ALPHA_TEST_CONTROL
, 0);
1542 static GLboolean
validate_buffers(context_t
*rmesa
,
1543 struct radeon_bo
*src_bo
,
1544 struct radeon_bo
*dst_bo
)
1548 radeon_cs_space_reset_bos(rmesa
->radeon
.cmdbuf
.cs
);
1550 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1551 src_bo
, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
1555 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1556 dst_bo
, 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
);
1560 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1562 RADEON_GEM_DOMAIN_GTT
, 0);
1569 unsigned r600_blit(GLcontext
*ctx
,
1570 struct radeon_bo
*src_bo
,
1571 intptr_t src_offset
,
1572 gl_format src_mesaformat
,
1575 unsigned src_height
,
1578 struct radeon_bo
*dst_bo
,
1579 intptr_t dst_offset
,
1580 gl_format dst_mesaformat
,
1583 unsigned dst_height
,
1590 context_t
*context
= R700_CONTEXT(ctx
);
1593 if (!r600_check_blit(dst_mesaformat
))
1596 if (src_bo
== dst_bo
) {
1600 if (src_offset
% 256 || dst_offset
% 256) {
1605 fprintf(stderr
, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1606 src_width
, src_height
, src_pitch
,
1607 _mesa_format_row_stride(src_mesaformat
, src_width
),
1608 _mesa_get_format_name(src_mesaformat
));
1609 fprintf(stderr
, "dst: width %d, height %d, pitch %d, format %s\n",
1610 dst_width
, dst_height
,
1611 _mesa_format_row_stride(dst_mesaformat
, dst_width
),
1612 _mesa_get_format_name(dst_mesaformat
));
1615 /* Flush is needed to make sure that source buffer has correct data */
1618 rcommonEnsureCmdBufSpace(&context
->radeon
, 311, __FUNCTION__
);
1621 load_shaders(context
->radeon
.glCtx
);
1623 if (!validate_buffers(context
, src_bo
, dst_bo
))
1626 /* set clear state */
1628 set_default_state(context
);
1632 set_shaders(context
);
1636 set_tex_resource(context
, src_mesaformat
, src_bo
,
1637 src_width
, src_height
, src_pitch
, src_offset
);
1640 set_tex_sampler(context
);
1644 set_render_target(context
, dst_bo
, dst_mesaformat
,
1645 dst_pitch
, dst_width
, dst_height
, dst_offset
);
1648 set_scissors(context
, dst_x
, dst_y
, dst_x
+ dst_width
, dst_y
+ dst_height
);
1650 set_vb_data(context
, src_x
, src_y
, dst_x
, dst_y
, w
, h
, src_height
, flip_y
);
1651 /* Vertex buffer setup */
1653 set_vtx_resource(context
);
1660 r700SyncSurf(context
, dst_bo
, 0,
1661 RADEON_GEM_DOMAIN_VRAM
|RADEON_GEM_DOMAIN_GTT
,
1662 CB_ACTION_ENA_bit
| (1 << (id
+ 6)));
1665 /* XXX drm should handle this in fence submit */
1666 r700WaitForIdleClean(context
);