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"
36 set_render_target(context_t
*context
, struct radeon_bo
*bo
, gl_format mesa_format
,
37 int pitch
, int w
, int h
, intptr_t dst_offset
)
39 uint32_t cb_color0_base
, cb_color0_size
= 0, cb_color0_info
= 0, cb_color0_view
= 0;
40 int nPitchInPixel
, id
= 0;
41 uint32_t comp_swap
, format
, bpp
= _mesa_get_format_bytes(mesa_format
);
42 BATCH_LOCALS(&context
->radeon
);
44 cb_color0_base
= dst_offset
/ 256;
46 nPitchInPixel
= pitch
/bpp
;
47 SETfield(cb_color0_size
, (nPitchInPixel
/ 8) - 1,
48 PITCH_TILE_MAX_shift
, PITCH_TILE_MAX_mask
);
49 SETfield(cb_color0_size
, ((nPitchInPixel
* h
) / 64) - 1,
50 SLICE_TILE_MAX_shift
, SLICE_TILE_MAX_mask
);
52 SETfield(cb_color0_info
, ENDIAN_NONE
, ENDIAN_shift
, ENDIAN_mask
);
53 SETfield(cb_color0_info
, ARRAY_LINEAR_GENERAL
,
54 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
56 SETbit(cb_color0_info
, BLEND_BYPASS_bit
);
59 case MESA_FORMAT_RGBA8888
:
60 format
= COLOR_8_8_8_8
;
61 comp_swap
= SWAP_STD_REV
;
62 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
63 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
65 case MESA_FORMAT_SIGNED_RGBA8888
:
66 format
= COLOR_8_8_8_8
;
67 comp_swap
= SWAP_STD_REV
;
68 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
69 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
71 case MESA_FORMAT_RGBA8888_REV
:
72 format
= COLOR_8_8_8_8
;
74 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
75 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
77 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
78 format
= COLOR_8_8_8_8
;
80 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
81 SETfield(cb_color0_info
, NUMBER_SNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
83 case MESA_FORMAT_ARGB8888
:
84 case MESA_FORMAT_XRGB8888
:
85 format
= COLOR_8_8_8_8
;
87 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
88 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
90 case MESA_FORMAT_ARGB8888_REV
:
91 case MESA_FORMAT_XRGB8888_REV
:
92 format
= COLOR_8_8_8_8
;
93 comp_swap
= SWAP_ALT_REV
;
94 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
95 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
97 case MESA_FORMAT_RGB565
:
99 comp_swap
= SWAP_STD_REV
;
100 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
101 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
103 case MESA_FORMAT_RGB565_REV
:
104 format
= COLOR_5_6_5
;
105 comp_swap
= SWAP_STD
;
106 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
107 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
109 case MESA_FORMAT_ARGB4444
:
110 format
= COLOR_4_4_4_4
;
111 comp_swap
= SWAP_ALT
;
112 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
113 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
115 case MESA_FORMAT_ARGB4444_REV
:
116 format
= COLOR_4_4_4_4
;
117 comp_swap
= SWAP_ALT_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_ARGB1555
:
122 format
= COLOR_1_5_5_5
;
123 comp_swap
= SWAP_ALT
;
124 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
125 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
127 case MESA_FORMAT_ARGB1555_REV
:
128 format
= COLOR_1_5_5_5
;
129 comp_swap
= SWAP_ALT_REV
;
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_AL88
:
135 comp_swap
= SWAP_STD
;
136 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
137 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
139 case MESA_FORMAT_AL88_REV
:
141 comp_swap
= SWAP_STD_REV
;
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_RGB332
:
146 format
= COLOR_3_3_2
;
147 comp_swap
= SWAP_STD_REV
;
148 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
149 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
153 comp_swap
= SWAP_ALT_REV
;
154 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
155 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
158 case MESA_FORMAT_CI8
:
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
);
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_RGBA_FLOAT32
:
171 format
= COLOR_32_32_32_32_FLOAT
;
172 comp_swap
= SWAP_STD_REV
;
173 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
174 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
175 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
177 case MESA_FORMAT_RGBA_FLOAT16
:
178 format
= COLOR_16_16_16_16_FLOAT
;
179 comp_swap
= SWAP_STD_REV
;
180 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
181 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
183 case MESA_FORMAT_ALPHA_FLOAT32
:
184 format
= COLOR_32_FLOAT
;
185 comp_swap
= SWAP_ALT_REV
;
186 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
187 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
188 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
190 case MESA_FORMAT_ALPHA_FLOAT16
:
191 format
= COLOR_16_FLOAT
;
192 comp_swap
= SWAP_ALT_REV
;
193 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
194 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
196 case MESA_FORMAT_LUMINANCE_FLOAT32
:
197 format
= COLOR_32_FLOAT
;
198 comp_swap
= SWAP_ALT
;
199 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
200 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
201 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
203 case MESA_FORMAT_LUMINANCE_FLOAT16
:
204 format
= COLOR_16_FLOAT
;
205 comp_swap
= SWAP_ALT
;
206 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
207 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
209 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
210 format
= COLOR_32_32_FLOAT
;
211 comp_swap
= SWAP_ALT_REV
;
212 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
213 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
214 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
216 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
217 format
= COLOR_16_16_FLOAT
;
218 comp_swap
= SWAP_ALT_REV
;
219 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
220 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
222 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
223 format
= COLOR_32_FLOAT
;
224 comp_swap
= SWAP_STD
;
225 SETbit(cb_color0_info
, BLEND_FLOAT32_bit
);
226 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
227 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
229 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
230 format
= COLOR_16_FLOAT
;
231 comp_swap
= SWAP_STD
;
232 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
233 SETfield(cb_color0_info
, NUMBER_FLOAT
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
235 case MESA_FORMAT_X8_Z24
:
236 case MESA_FORMAT_S8_Z24
:
238 comp_swap
= SWAP_STD
;
239 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
240 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
241 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
242 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
244 case MESA_FORMAT_Z24_S8
:
246 comp_swap
= SWAP_STD
;
247 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
248 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
249 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
250 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
252 case MESA_FORMAT_Z16
:
254 comp_swap
= SWAP_STD
;
255 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
256 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
257 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
258 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
260 case MESA_FORMAT_Z32
:
262 comp_swap
= SWAP_STD
;
263 SETfield(cb_color0_info
, ARRAY_1D_TILED_THIN1
,
264 CB_COLOR0_INFO__ARRAY_MODE_shift
, CB_COLOR0_INFO__ARRAY_MODE_mask
);
265 CLEARbit(cb_color0_info
, SOURCE_FORMAT_bit
);
266 SETfield(cb_color0_info
, NUMBER_UNORM
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
268 case MESA_FORMAT_SRGBA8
:
269 format
= COLOR_8_8_8_8
;
270 comp_swap
= SWAP_STD_REV
;
271 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
272 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
274 case MESA_FORMAT_SLA8
:
276 comp_swap
= SWAP_ALT_REV
;
277 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
278 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
280 case MESA_FORMAT_SL8
:
282 comp_swap
= SWAP_ALT_REV
;
283 SETbit(cb_color0_info
, SOURCE_FORMAT_bit
);
284 SETfield(cb_color0_info
, NUMBER_SRGB
, NUMBER_TYPE_shift
, NUMBER_TYPE_mask
);
287 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
288 assert("Invalid format for US output\n");
292 SETfield(cb_color0_info
, format
, CB_COLOR0_INFO__FORMAT_shift
,
293 CB_COLOR0_INFO__FORMAT_mask
);
294 SETfield(cb_color0_info
, comp_swap
, COMP_SWAP_shift
, COMP_SWAP_mask
);
296 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
297 R600_OUT_BATCH_REGSEQ(CB_COLOR0_BASE
+ (4 * id
), 1);
298 R600_OUT_BATCH(cb_color0_base
);
299 R600_OUT_BATCH_RELOC(0,
302 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
305 if ((context
->radeon
.radeonScreen
->chip_family
> CHIP_FAMILY_R600
) &&
306 (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
)) {
307 BEGIN_BATCH_NO_AUTOSTATE(2);
308 R600_OUT_BATCH(CP_PACKET3(R600_IT_SURFACE_BASE_UPDATE
, 0));
309 R600_OUT_BATCH((2 << id
));
313 BEGIN_BATCH_NO_AUTOSTATE(18);
314 R600_OUT_BATCH_REGVAL(CB_COLOR0_SIZE
+ (4 * id
), cb_color0_size
);
315 R600_OUT_BATCH_REGVAL(CB_COLOR0_VIEW
+ (4 * id
), cb_color0_view
);
316 R600_OUT_BATCH_REGVAL(CB_COLOR0_INFO
+ (4 * id
), cb_color0_info
);
317 R600_OUT_BATCH_REGVAL(CB_COLOR0_TILE
+ (4 * id
), 0);
318 R600_OUT_BATCH_REGVAL(CB_COLOR0_FRAG
+ (4 * id
), 0);
319 R600_OUT_BATCH_REGVAL(CB_COLOR0_MASK
+ (4 * id
), 0);
326 static inline void load_shaders(GLcontext
* ctx
)
329 radeonContextPtr radeonctx
= RADEON_CONTEXT(ctx
);
330 context_t
*context
= R700_CONTEXT(ctx
);
334 if (context
->blit_bo_loaded
== 1)
338 context
->blit_bo
= radeon_bo_open(radeonctx
->radeonScreen
->bom
, 0,
339 size
, 256, RADEON_GEM_DOMAIN_GTT
, 0);
340 radeon_bo_map(context
->blit_bo
, 1);
341 shader
= context
->blit_bo
->ptr
;
343 for(i
=0; i
<sizeof(r6xx_vs
)/4; i
++) {
344 shader
[128+i
] = r6xx_vs
[i
];
346 for(i
=0; i
<sizeof(r6xx_ps
)/4; i
++) {
347 shader
[256+i
] = r6xx_ps
[i
];
350 radeon_bo_unmap(context
->blit_bo
);
351 context
->blit_bo_loaded
= 1;
356 set_shaders(context_t
*context
)
358 struct radeon_bo
* pbo
= context
->blit_bo
;
359 BATCH_LOCALS(&context
->radeon
);
361 uint32_t sq_pgm_start_fs
= (512 >> 8);
362 uint32_t sq_pgm_resources_fs
= 0;
363 uint32_t sq_pgm_cf_offset_fs
= 0;
365 uint32_t sq_pgm_start_vs
= (512 >> 8);
366 uint32_t sq_pgm_resources_vs
= (1 << NUM_GPRS_shift
);
367 uint32_t sq_pgm_cf_offset_vs
= 0;
369 uint32_t sq_pgm_start_ps
= (1024 >> 8);
370 uint32_t sq_pgm_resources_ps
= (1 << NUM_GPRS_shift
);
371 uint32_t sq_pgm_cf_offset_ps
= 0;
372 uint32_t sq_pgm_exports_ps
= (1 << 1);
374 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
377 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
378 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_FS
, 1);
379 R600_OUT_BATCH(sq_pgm_start_fs
);
380 R600_OUT_BATCH_RELOC(sq_pgm_start_fs
,
383 RADEON_GEM_DOMAIN_GTT
, 0, 0);
386 BEGIN_BATCH_NO_AUTOSTATE(6);
387 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_FS
, sq_pgm_resources_fs
);
388 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_FS
, sq_pgm_cf_offset_fs
);
392 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
393 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_VS
, 1);
394 R600_OUT_BATCH(sq_pgm_start_vs
);
395 R600_OUT_BATCH_RELOC(sq_pgm_start_vs
,
398 RADEON_GEM_DOMAIN_GTT
, 0, 0);
401 BEGIN_BATCH_NO_AUTOSTATE(6);
402 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_VS
, sq_pgm_resources_vs
);
403 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_VS
, sq_pgm_cf_offset_vs
);
407 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
408 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_PS
, 1);
409 R600_OUT_BATCH(sq_pgm_start_ps
);
410 R600_OUT_BATCH_RELOC(sq_pgm_start_ps
,
413 RADEON_GEM_DOMAIN_GTT
, 0, 0);
416 BEGIN_BATCH_NO_AUTOSTATE(9);
417 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_PS
, sq_pgm_resources_ps
);
418 R600_OUT_BATCH_REGVAL(SQ_PGM_EXPORTS_PS
, sq_pgm_exports_ps
);
419 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_PS
, sq_pgm_cf_offset_ps
);
422 BEGIN_BATCH_NO_AUTOSTATE(18);
423 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_CONFIG
, 0); //EXPORT_COUNT is - 1
424 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_ID_0
, 0);
425 R600_OUT_BATCH_REGVAL(SPI_PS_INPUT_CNTL_0
, SEL_CENTROID_bit
);
426 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_0
, (1 << NUM_INTERP_shift
));
427 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_1
, 0);
428 R600_OUT_BATCH_REGVAL(SPI_INTERP_CONTROL_0
, 0);
436 set_vtx_resource(context_t
*context
)
438 struct radeon_bo
*bo
= context
->blit_bo
;
439 BATCH_LOCALS(&context
->radeon
);
441 BEGIN_BATCH_NO_AUTOSTATE(6);
442 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
443 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
446 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
447 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
452 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
453 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
454 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
455 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
456 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
457 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, TC_ACTION_ENA_bit
);
459 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
461 BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
463 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
464 R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET
* FETCH_RESOURCE_STRIDE
);
466 R600_OUT_BATCH(48 - 1);
467 R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
);
468 R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift
);
471 R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER
<< SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
);
472 R600_OUT_BATCH_RELOC(SQ_VTX_CONSTANT_WORD0_0
,
474 SQ_VTX_CONSTANT_WORD0_0
,
475 RADEON_GEM_DOMAIN_GTT
, 0, 0);
482 set_tex_resource(context_t
* context
,
483 gl_format mesa_format
, struct radeon_bo
*bo
, int w
, int h
,
484 int pitch
, intptr_t src_offset
)
486 uint32_t sq_tex_resource0
, sq_tex_resource1
, sq_tex_resource2
, sq_tex_resource4
, sq_tex_resource6
;
487 int bpp
= _mesa_get_format_bytes(mesa_format
);
488 int TexelPitch
= pitch
/bpp
;
490 sq_tex_resource0
= sq_tex_resource1
= sq_tex_resource2
= sq_tex_resource4
= sq_tex_resource6
= 0;
491 BATCH_LOCALS(&context
->radeon
);
493 SETfield(sq_tex_resource0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
494 SETfield(sq_tex_resource0
, ARRAY_LINEAR_GENERAL
,
495 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
496 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
498 switch (mesa_format
) {
499 case MESA_FORMAT_RGBA8888
:
500 case MESA_FORMAT_SIGNED_RGBA8888
:
501 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
502 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
504 SETfield(sq_tex_resource4
, SQ_SEL_W
,
505 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
506 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
507 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
508 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
509 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
510 SETfield(sq_tex_resource4
, SQ_SEL_X
,
511 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
512 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
513 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
514 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
515 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
516 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
517 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
518 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
519 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
520 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
523 case MESA_FORMAT_RGBA8888_REV
:
524 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
525 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
526 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
528 SETfield(sq_tex_resource4
, SQ_SEL_X
,
529 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
530 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
531 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
532 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
533 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
534 SETfield(sq_tex_resource4
, SQ_SEL_W
,
535 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
536 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
537 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
538 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
539 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
540 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
541 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
542 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
543 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
544 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
547 case MESA_FORMAT_ARGB8888
:
548 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
549 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
551 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
552 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
553 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
554 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
555 SETfield(sq_tex_resource4
, SQ_SEL_X
,
556 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
557 SETfield(sq_tex_resource4
, SQ_SEL_W
,
558 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
560 case MESA_FORMAT_XRGB8888
:
561 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
562 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
564 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
565 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
566 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
567 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
568 SETfield(sq_tex_resource4
, SQ_SEL_X
,
569 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
570 SETfield(sq_tex_resource4
, SQ_SEL_1
,
571 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
573 case MESA_FORMAT_ARGB8888_REV
:
574 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
575 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
577 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
578 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
579 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
580 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
581 SETfield(sq_tex_resource4
, SQ_SEL_W
,
582 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
583 SETfield(sq_tex_resource4
, SQ_SEL_X
,
584 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
586 case MESA_FORMAT_XRGB8888_REV
:
587 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
588 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
590 SETfield(sq_tex_resource4
, SQ_SEL_1
,
591 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
592 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
593 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
594 SETfield(sq_tex_resource4
, SQ_SEL_W
,
595 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
596 SETfield(sq_tex_resource4
, SQ_SEL_X
,
597 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
599 case MESA_FORMAT_RGB565
:
600 SETfield(sq_tex_resource1
, FMT_5_6_5
,
601 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
603 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
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_X
,
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_1
,
610 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
612 case MESA_FORMAT_RGB565_REV
:
613 SETfield(sq_tex_resource1
, FMT_5_6_5
,
614 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
616 SETfield(sq_tex_resource4
, SQ_SEL_X
,
617 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
618 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
619 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
620 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
621 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
622 SETfield(sq_tex_resource4
, SQ_SEL_1
,
623 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
625 case MESA_FORMAT_ARGB4444
:
626 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
627 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
629 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
630 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
631 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
632 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
633 SETfield(sq_tex_resource4
, SQ_SEL_X
,
634 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
635 SETfield(sq_tex_resource4
, SQ_SEL_W
,
636 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
638 case MESA_FORMAT_ARGB4444_REV
:
639 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
640 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
642 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
643 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
644 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
645 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
646 SETfield(sq_tex_resource4
, SQ_SEL_W
,
647 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
648 SETfield(sq_tex_resource4
, SQ_SEL_X
,
649 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
651 case MESA_FORMAT_ARGB1555
:
652 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
653 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
655 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
656 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
657 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
658 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
659 SETfield(sq_tex_resource4
, SQ_SEL_X
,
660 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
661 SETfield(sq_tex_resource4
, SQ_SEL_W
,
662 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
664 case MESA_FORMAT_ARGB1555_REV
:
665 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
666 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
668 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
669 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
670 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
671 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
672 SETfield(sq_tex_resource4
, SQ_SEL_W
,
673 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
674 SETfield(sq_tex_resource4
, SQ_SEL_X
,
675 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
677 case MESA_FORMAT_AL88
:
678 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
679 SETfield(sq_tex_resource1
, FMT_8_8
,
680 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
682 SETfield(sq_tex_resource4
, SQ_SEL_X
,
683 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
684 SETfield(sq_tex_resource4
, SQ_SEL_X
,
685 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
686 SETfield(sq_tex_resource4
, SQ_SEL_X
,
687 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
688 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
689 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
691 case MESA_FORMAT_RGB332
:
692 SETfield(sq_tex_resource1
, FMT_3_3_2
,
693 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
695 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
696 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
697 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
698 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
699 SETfield(sq_tex_resource4
, SQ_SEL_X
,
700 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
701 SETfield(sq_tex_resource4
, SQ_SEL_1
,
702 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
704 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
705 SETfield(sq_tex_resource1
, FMT_8
,
706 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
708 SETfield(sq_tex_resource4
, SQ_SEL_0
,
709 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
710 SETfield(sq_tex_resource4
, SQ_SEL_0
,
711 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
712 SETfield(sq_tex_resource4
, SQ_SEL_0
,
713 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
714 SETfield(sq_tex_resource4
, SQ_SEL_X
,
715 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
717 case MESA_FORMAT_L8
: /* X, X, X, ONE */
718 SETfield(sq_tex_resource1
, FMT_8
,
719 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
721 SETfield(sq_tex_resource4
, SQ_SEL_X
,
722 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
723 SETfield(sq_tex_resource4
, SQ_SEL_X
,
724 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
725 SETfield(sq_tex_resource4
, SQ_SEL_X
,
726 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
727 SETfield(sq_tex_resource4
, SQ_SEL_1
,
728 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
730 case MESA_FORMAT_I8
: /* X, X, X, X */
731 case MESA_FORMAT_CI8
:
732 SETfield(sq_tex_resource1
, FMT_8
,
733 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
735 SETfield(sq_tex_resource4
, SQ_SEL_X
,
736 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
737 SETfield(sq_tex_resource4
, SQ_SEL_X
,
738 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
739 SETfield(sq_tex_resource4
, SQ_SEL_X
,
740 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
741 SETfield(sq_tex_resource4
, SQ_SEL_X
,
742 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
744 case MESA_FORMAT_RGBA_FLOAT32
:
745 SETfield(sq_tex_resource1
, FMT_32_32_32_32_FLOAT
,
746 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
748 SETfield(sq_tex_resource4
, SQ_SEL_X
,
749 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
750 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
751 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
752 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
753 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
754 SETfield(sq_tex_resource4
, SQ_SEL_W
,
755 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
757 case MESA_FORMAT_RGBA_FLOAT16
:
758 SETfield(sq_tex_resource1
, FMT_16_16_16_16_FLOAT
,
759 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
761 SETfield(sq_tex_resource4
, SQ_SEL_X
,
762 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
763 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
764 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
765 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
766 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
767 SETfield(sq_tex_resource4
, SQ_SEL_W
,
768 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
770 case MESA_FORMAT_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
771 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
772 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
774 SETfield(sq_tex_resource4
, SQ_SEL_0
,
775 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
776 SETfield(sq_tex_resource4
, SQ_SEL_0
,
777 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
778 SETfield(sq_tex_resource4
, SQ_SEL_0
,
779 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
780 SETfield(sq_tex_resource4
, SQ_SEL_X
,
781 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
783 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
784 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
785 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
787 SETfield(sq_tex_resource4
, SQ_SEL_0
,
788 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
789 SETfield(sq_tex_resource4
, SQ_SEL_0
,
790 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
791 SETfield(sq_tex_resource4
, SQ_SEL_0
,
792 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
793 SETfield(sq_tex_resource4
, SQ_SEL_X
,
794 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
796 case MESA_FORMAT_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
797 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
798 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
800 SETfield(sq_tex_resource4
, SQ_SEL_X
,
801 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
802 SETfield(sq_tex_resource4
, SQ_SEL_X
,
803 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
804 SETfield(sq_tex_resource4
, SQ_SEL_X
,
805 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
806 SETfield(sq_tex_resource4
, SQ_SEL_1
,
807 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
809 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
810 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
811 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
813 SETfield(sq_tex_resource4
, SQ_SEL_X
,
814 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
815 SETfield(sq_tex_resource4
, SQ_SEL_X
,
816 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
817 SETfield(sq_tex_resource4
, SQ_SEL_X
,
818 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
819 SETfield(sq_tex_resource4
, SQ_SEL_1
,
820 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
822 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
823 SETfield(sq_tex_resource1
, FMT_32_32_FLOAT
,
824 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
826 SETfield(sq_tex_resource4
, SQ_SEL_X
,
827 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
828 SETfield(sq_tex_resource4
, SQ_SEL_X
,
829 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
830 SETfield(sq_tex_resource4
, SQ_SEL_X
,
831 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
832 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
833 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
835 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
836 SETfield(sq_tex_resource1
, FMT_16_16_FLOAT
,
837 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
839 SETfield(sq_tex_resource4
, SQ_SEL_X
,
840 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
841 SETfield(sq_tex_resource4
, SQ_SEL_X
,
842 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
843 SETfield(sq_tex_resource4
, SQ_SEL_X
,
844 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
845 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
846 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
848 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
849 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
850 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
852 SETfield(sq_tex_resource4
, SQ_SEL_X
,
853 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
854 SETfield(sq_tex_resource4
, SQ_SEL_X
,
855 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
856 SETfield(sq_tex_resource4
, SQ_SEL_X
,
857 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
858 SETfield(sq_tex_resource4
, SQ_SEL_X
,
859 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
861 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
862 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
863 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
865 SETfield(sq_tex_resource4
, SQ_SEL_X
,
866 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
867 SETfield(sq_tex_resource4
, SQ_SEL_X
,
868 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
869 SETfield(sq_tex_resource4
, SQ_SEL_X
,
870 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
871 SETfield(sq_tex_resource4
, SQ_SEL_X
,
872 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
874 case MESA_FORMAT_Z16
:
875 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
876 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
877 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
878 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
879 SETfield(sq_tex_resource1
, FMT_16
,
880 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
881 SETfield(sq_tex_resource4
, SQ_SEL_X
,
882 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
883 SETfield(sq_tex_resource4
, SQ_SEL_X
,
884 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
885 SETfield(sq_tex_resource4
, SQ_SEL_X
,
886 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
887 SETfield(sq_tex_resource4
, SQ_SEL_X
,
888 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
890 case MESA_FORMAT_X8_Z24
:
891 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
892 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
893 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
894 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
895 SETfield(sq_tex_resource1
, FMT_8_24
,
896 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
897 SETfield(sq_tex_resource4
, SQ_SEL_X
,
898 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
899 SETfield(sq_tex_resource4
, SQ_SEL_1
,
900 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
901 SETfield(sq_tex_resource4
, SQ_SEL_0
,
902 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
903 SETfield(sq_tex_resource4
, SQ_SEL_1
,
904 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
906 case MESA_FORMAT_S8_Z24
:
907 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
908 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
909 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
910 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
911 SETfield(sq_tex_resource1
, FMT_8_24
,
912 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
913 SETfield(sq_tex_resource4
, SQ_SEL_X
,
914 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
915 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
916 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
917 SETfield(sq_tex_resource4
, SQ_SEL_0
,
918 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
919 SETfield(sq_tex_resource4
, SQ_SEL_1
,
920 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
922 case MESA_FORMAT_Z24_S8
:
923 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
924 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
925 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
926 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
927 SETfield(sq_tex_resource1
, FMT_24_8
,
928 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
929 SETfield(sq_tex_resource4
, SQ_SEL_X
,
930 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
931 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
932 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
933 SETfield(sq_tex_resource4
, SQ_SEL_0
,
934 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
935 SETfield(sq_tex_resource4
, SQ_SEL_1
,
936 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
938 case MESA_FORMAT_Z32
:
939 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
940 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
941 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
942 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
943 SETfield(sq_tex_resource1
, FMT_32
,
944 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
945 SETfield(sq_tex_resource4
, SQ_SEL_X
,
946 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
947 SETfield(sq_tex_resource4
, SQ_SEL_X
,
948 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
949 SETfield(sq_tex_resource4
, SQ_SEL_X
,
950 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
951 SETfield(sq_tex_resource4
, SQ_SEL_X
,
952 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
955 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
956 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
957 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
958 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
959 SETfield(sq_tex_resource1
, FMT_8
,
960 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
961 SETfield(sq_tex_resource4
, SQ_SEL_X
,
962 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
963 SETfield(sq_tex_resource4
, SQ_SEL_X
,
964 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
965 SETfield(sq_tex_resource4
, SQ_SEL_X
,
966 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
967 SETfield(sq_tex_resource4
, SQ_SEL_X
,
968 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
970 case MESA_FORMAT_SRGBA8
:
971 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
972 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
974 SETfield(sq_tex_resource4
, SQ_SEL_W
,
975 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
976 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
977 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
978 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
979 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
980 SETfield(sq_tex_resource4
, SQ_SEL_X
,
981 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
982 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
984 case MESA_FORMAT_SLA8
:
985 SETfield(sq_tex_resource1
, FMT_8_8
,
986 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_X
,
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_X
,
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_Y
,
995 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
996 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
998 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
999 SETfield(sq_tex_resource1
, FMT_8
,
1000 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1002 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1003 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1004 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1005 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1006 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1007 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1008 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1009 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1010 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1013 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
1014 assert("Invalid format for US output\n");
1018 SETfield(sq_tex_resource0
, (TexelPitch
/8)-1, PITCH_shift
, PITCH_mask
);
1019 SETfield(sq_tex_resource0
, w
- 1, TEX_WIDTH_shift
, TEX_WIDTH_mask
);
1020 SETfield(sq_tex_resource1
, h
- 1, TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
1022 sq_tex_resource2
= src_offset
/ 256;
1024 SETfield(sq_tex_resource6
, SQ_TEX_VTX_VALID_TEXTURE
,
1025 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
,
1026 SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
1028 r700SyncSurf(context
, bo
,
1029 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
1030 0, TC_ACTION_ENA_bit
);
1032 BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1033 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
1034 R600_OUT_BATCH(0 * 7);
1036 R600_OUT_BATCH(sq_tex_resource0
);
1037 R600_OUT_BATCH(sq_tex_resource1
);
1038 R600_OUT_BATCH(sq_tex_resource2
);
1039 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE3
1040 R600_OUT_BATCH(sq_tex_resource4
);
1041 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE5
1042 R600_OUT_BATCH(sq_tex_resource6
);
1043 R600_OUT_BATCH_RELOC(0,
1046 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1047 R600_OUT_BATCH_RELOC(0,
1050 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1056 set_tex_sampler(context_t
* context
)
1058 uint32_t sq_tex_sampler_word0
= 0, sq_tex_sampler_word1
= 0, sq_tex_sampler_word2
= 0;
1061 SETbit(sq_tex_sampler_word2
, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit
);
1063 BATCH_LOCALS(&context
->radeon
);
1065 BEGIN_BATCH_NO_AUTOSTATE(5);
1066 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
1067 R600_OUT_BATCH(i
* 3);
1068 R600_OUT_BATCH(sq_tex_sampler_word0
);
1069 R600_OUT_BATCH(sq_tex_sampler_word1
);
1070 R600_OUT_BATCH(sq_tex_sampler_word2
);
1076 set_scissors(context_t
*context
, int x1
, int y1
, int x2
, int y2
)
1078 BATCH_LOCALS(&context
->radeon
);
1080 BEGIN_BATCH_NO_AUTOSTATE(17);
1081 R600_OUT_BATCH_REGSEQ(PA_SC_SCREEN_SCISSOR_TL
, 2);
1082 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16));
1083 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1085 R600_OUT_BATCH_REGSEQ(PA_SC_WINDOW_OFFSET
, 3);
1086 R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1087 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
)); //PA_SC_WINDOW_SCISSOR_TL
1088 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1090 R600_OUT_BATCH_REGSEQ(PA_SC_GENERIC_SCISSOR_TL
, 2);
1091 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1092 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1095 /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1096 R600_OUT_BATCH_REGSEQ(PA_SC_VPORT_SCISSOR_0_TL
, 2 );
1097 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1098 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1106 set_vb_data(context_t
* context
, int src_x
, int src_y
, int dst_x
, int dst_y
,
1107 int w
, int h
, int src_h
, unsigned flip_y
)
1110 radeon_bo_map(context
->blit_bo
, 1);
1111 vb
= context
->blit_bo
->ptr
;
1113 vb
[0] = (float)(dst_x
);
1114 vb
[1] = (float)(dst_y
);
1115 vb
[2] = (float)(src_x
);
1116 vb
[3] = (flip_y
) ? (float)(src_h
- src_y
) : (float)src_y
;
1118 vb
[4] = (float)(dst_x
);
1119 vb
[5] = (float)(dst_y
+ h
);
1120 vb
[6] = (float)(src_x
);
1121 vb
[7] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1123 vb
[8] = (float)(dst_x
+ w
);
1124 vb
[9] = (float)(dst_y
+ h
);
1125 vb
[10] = (float)(src_x
+ w
);
1126 vb
[11] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1128 radeon_bo_unmap(context
->blit_bo
);
1133 draw_auto(context_t
*context
)
1135 BATCH_LOCALS(&context
->radeon
);
1136 uint32_t vgt_primitive_type
= 0, vgt_index_type
= 0, vgt_draw_initiator
= 0, vgt_num_indices
;
1138 SETfield(vgt_primitive_type
, DI_PT_RECTLIST
,
1139 VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift
,
1140 VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask
);
1141 SETfield(vgt_index_type
, DI_INDEX_SIZE_16_BIT
, INDEX_TYPE_shift
,
1143 SETfield(vgt_draw_initiator
, DI_MAJOR_MODE_0
, MAJOR_MODE_shift
,
1145 SETfield(vgt_draw_initiator
, DI_SRC_SEL_AUTO_INDEX
, SOURCE_SELECT_shift
,
1146 SOURCE_SELECT_mask
);
1148 vgt_num_indices
= 3;
1150 BEGIN_BATCH_NO_AUTOSTATE(10);
1152 R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE
, 1);
1153 R600_OUT_BATCH(vgt_primitive_type
);
1155 R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE
, 0));
1156 R600_OUT_BATCH(vgt_index_type
);
1158 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES
, 0));
1161 R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO
, 1));
1162 R600_OUT_BATCH(vgt_num_indices
);
1163 R600_OUT_BATCH(vgt_draw_initiator
);
1170 set_default_state(context_t
*context
)
1185 int num_ps_stack_entries
;
1186 int num_vs_stack_entries
;
1187 int num_gs_stack_entries
;
1188 int num_es_stack_entries
;
1189 uint32_t sq_config
, sq_gpr_resource_mgmt_1
, sq_gpr_resource_mgmt_2
;
1190 uint32_t sq_thread_resource_mgmt
, sq_stack_resource_mgmt_1
, sq_stack_resource_mgmt_2
;
1191 uint32_t ta_cntl_aux
, db_watermarks
, sq_dyn_gpr_cntl_ps_flush_req
, db_debug
;
1192 BATCH_LOCALS(&context
->radeon
);
1194 switch (context
->radeon
.radeonScreen
->chip_family
) {
1195 case CHIP_FAMILY_R600
:
1201 num_ps_threads
= 136;
1202 num_vs_threads
= 48;
1205 num_ps_stack_entries
= 128;
1206 num_vs_stack_entries
= 128;
1207 num_gs_stack_entries
= 0;
1208 num_es_stack_entries
= 0;
1210 case CHIP_FAMILY_RV630
:
1211 case CHIP_FAMILY_RV635
:
1217 num_ps_threads
= 144;
1218 num_vs_threads
= 40;
1221 num_ps_stack_entries
= 40;
1222 num_vs_stack_entries
= 40;
1223 num_gs_stack_entries
= 32;
1224 num_es_stack_entries
= 16;
1226 case CHIP_FAMILY_RV610
:
1227 case CHIP_FAMILY_RV620
:
1228 case CHIP_FAMILY_RS780
:
1229 case CHIP_FAMILY_RS880
:
1236 num_ps_threads
= 136;
1237 num_vs_threads
= 48;
1240 num_ps_stack_entries
= 40;
1241 num_vs_stack_entries
= 40;
1242 num_gs_stack_entries
= 32;
1243 num_es_stack_entries
= 16;
1245 case CHIP_FAMILY_RV670
:
1251 num_ps_threads
= 136;
1252 num_vs_threads
= 48;
1255 num_ps_stack_entries
= 40;
1256 num_vs_stack_entries
= 40;
1257 num_gs_stack_entries
= 32;
1258 num_es_stack_entries
= 16;
1260 case CHIP_FAMILY_RV770
:
1266 num_ps_threads
= 188;
1267 num_vs_threads
= 60;
1270 num_ps_stack_entries
= 256;
1271 num_vs_stack_entries
= 256;
1272 num_gs_stack_entries
= 0;
1273 num_es_stack_entries
= 0;
1275 case CHIP_FAMILY_RV730
:
1276 case CHIP_FAMILY_RV740
:
1282 num_ps_threads
= 188;
1283 num_vs_threads
= 60;
1286 num_ps_stack_entries
= 128;
1287 num_vs_stack_entries
= 128;
1288 num_gs_stack_entries
= 0;
1289 num_es_stack_entries
= 0;
1291 case CHIP_FAMILY_RV710
:
1297 num_ps_threads
= 144;
1298 num_vs_threads
= 48;
1301 num_ps_stack_entries
= 128;
1302 num_vs_stack_entries
= 128;
1303 num_gs_stack_entries
= 0;
1304 num_es_stack_entries
= 0;
1309 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
1310 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
1311 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
1312 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
1313 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
1314 CLEARbit(sq_config
, VC_ENABLE_bit
);
1316 SETbit(sq_config
, VC_ENABLE_bit
);
1317 SETbit(sq_config
, DX9_CONSTS_bit
);
1318 SETbit(sq_config
, ALU_INST_PREFER_VECTOR_bit
);
1319 SETfield(sq_config
, ps_prio
, PS_PRIO_shift
, PS_PRIO_mask
);
1320 SETfield(sq_config
, vs_prio
, VS_PRIO_shift
, VS_PRIO_mask
);
1321 SETfield(sq_config
, gs_prio
, GS_PRIO_shift
, GS_PRIO_mask
);
1322 SETfield(sq_config
, es_prio
, ES_PRIO_shift
, ES_PRIO_mask
);
1324 sq_gpr_resource_mgmt_1
= 0;
1325 SETfield(sq_gpr_resource_mgmt_1
, num_ps_gprs
, NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1326 SETfield(sq_gpr_resource_mgmt_1
, num_vs_gprs
, NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1327 SETfield(sq_gpr_resource_mgmt_1
, num_temp_gprs
,
1328 NUM_CLAUSE_TEMP_GPRS_shift
, NUM_CLAUSE_TEMP_GPRS_mask
);
1330 sq_gpr_resource_mgmt_2
= 0;
1331 SETfield(sq_gpr_resource_mgmt_2
, num_gs_gprs
, NUM_GS_GPRS_shift
, NUM_GS_GPRS_mask
);
1332 SETfield(sq_gpr_resource_mgmt_2
, num_es_gprs
, NUM_ES_GPRS_shift
, NUM_ES_GPRS_mask
);
1334 sq_thread_resource_mgmt
= 0;
1335 SETfield(sq_thread_resource_mgmt
, num_ps_threads
,
1336 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1337 SETfield(sq_thread_resource_mgmt
, num_vs_threads
,
1338 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1339 SETfield(sq_thread_resource_mgmt
, num_gs_threads
,
1340 NUM_GS_THREADS_shift
, NUM_GS_THREADS_mask
);
1341 SETfield(sq_thread_resource_mgmt
, num_es_threads
,
1342 NUM_ES_THREADS_shift
, NUM_ES_THREADS_mask
);
1344 sq_stack_resource_mgmt_1
= 0;
1345 SETfield(sq_stack_resource_mgmt_1
, num_ps_stack_entries
,
1346 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1347 SETfield(sq_stack_resource_mgmt_1
, num_vs_stack_entries
,
1348 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1350 sq_stack_resource_mgmt_2
= 0;
1351 SETfield(sq_stack_resource_mgmt_2
, num_gs_stack_entries
,
1352 NUM_GS_STACK_ENTRIES_shift
, NUM_GS_STACK_ENTRIES_mask
);
1353 SETfield(sq_stack_resource_mgmt_2
, num_es_stack_entries
,
1354 NUM_ES_STACK_ENTRIES_shift
, NUM_ES_STACK_ENTRIES_mask
);
1357 SETfield(ta_cntl_aux
, 28, TD_FIFO_CREDIT_shift
, TD_FIFO_CREDIT_mask
);
1359 SETfield(db_watermarks
, 4, DEPTH_FREE_shift
, DEPTH_FREE_mask
);
1360 SETfield(db_watermarks
, 16, DEPTH_FLUSH_shift
, DEPTH_FLUSH_mask
);
1361 SETfield(db_watermarks
, 0, FORCE_SUMMARIZE_shift
, FORCE_SUMMARIZE_mask
);
1362 SETfield(db_watermarks
, 4, DEPTH_PENDING_FREE_shift
, DEPTH_PENDING_FREE_mask
);
1363 sq_dyn_gpr_cntl_ps_flush_req
= 0;
1365 if (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
) {
1366 SETfield(ta_cntl_aux
, 3, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1367 db_debug
= 0x82000000;
1368 SETfield(db_watermarks
, 16, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1370 SETfield(ta_cntl_aux
, 2, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1371 SETfield(db_watermarks
, 4, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1372 SETbit(sq_dyn_gpr_cntl_ps_flush_req
, VS_PC_LIMIT_ENABLE_bit
);
1375 BEGIN_BATCH_NO_AUTOSTATE(117);
1376 R600_OUT_BATCH_REGSEQ(SQ_CONFIG
, 6);
1377 R600_OUT_BATCH(sq_config
);
1378 R600_OUT_BATCH(sq_gpr_resource_mgmt_1
);
1379 R600_OUT_BATCH(sq_gpr_resource_mgmt_2
);
1380 R600_OUT_BATCH(sq_thread_resource_mgmt
);
1381 R600_OUT_BATCH(sq_stack_resource_mgmt_1
);
1382 R600_OUT_BATCH(sq_stack_resource_mgmt_2
);
1384 R600_OUT_BATCH_REGVAL(TA_CNTL_AUX
, ta_cntl_aux
);
1385 R600_OUT_BATCH_REGVAL(VC_ENHANCE
, 0);
1386 R600_OUT_BATCH_REGVAL(R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
, sq_dyn_gpr_cntl_ps_flush_req
);
1387 R600_OUT_BATCH_REGVAL(DB_DEBUG
, db_debug
);
1388 R600_OUT_BATCH_REGVAL(DB_WATERMARKS
, db_watermarks
);
1390 R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE
, 9);
1401 R600_OUT_BATCH_REGVAL(CB_CLRCMP_CONTROL
,
1402 (CLRCMP_SEL_SRC
<< CLRCMP_FCN_SEL_shift
));
1403 R600_OUT_BATCH_REGVAL(SQ_VTX_BASE_VTX_LOC
, 0);
1404 R600_OUT_BATCH_REGVAL(SQ_VTX_START_INST_LOC
, 0);
1405 R600_OUT_BATCH_REGVAL(DB_DEPTH_INFO
, 0);
1406 R600_OUT_BATCH_REGVAL(DB_DEPTH_CONTROL
, 0);
1407 R600_OUT_BATCH_REGVAL(CB_SHADER_MASK
, (OUTPUT0_ENABLE_mask
));
1408 R600_OUT_BATCH_REGVAL(CB_TARGET_MASK
, (TARGET0_ENABLE_mask
));
1409 R600_OUT_BATCH_REGVAL(R7xx_CB_SHADER_CONTROL
, (RT0_ENABLE_bit
));
1410 R600_OUT_BATCH_REGVAL(CB_COLOR_CONTROL
, (0xcc << ROP3_shift
));
1412 R600_OUT_BATCH_REGVAL(PA_CL_VTE_CNTL
, VTX_XY_FMT_bit
);
1413 R600_OUT_BATCH_REGVAL(PA_CL_VS_OUT_CNTL
, 0);
1414 R600_OUT_BATCH_REGVAL(PA_CL_CLIP_CNTL
, CLIP_DISABLE_bit
);
1415 R600_OUT_BATCH_REGVAL(PA_SU_SC_MODE_CNTL
, (FACE_bit
) |
1416 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_FRONT_PTYPE_shift
) |
1417 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_BACK_PTYPE_shift
));
1418 R600_OUT_BATCH_REGVAL(PA_SU_VTX_CNTL
, (PIX_CENTER_bit
) |
1419 (X_ROUND_TO_EVEN
<< PA_SU_VTX_CNTL__ROUND_MODE_shift
) |
1420 (X_1_256TH
<< QUANT_MODE_shift
));
1422 R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX
, 4);
1423 R600_OUT_BATCH(2048);
1428 R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL
, 13);
1443 R600_OUT_BATCH_REGVAL(VGT_PRIMITIVEID_EN
, 0);
1444 R600_OUT_BATCH_REGVAL(VGT_MULTI_PRIM_IB_RESET_EN
, 0);
1445 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_0
, 0);
1446 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_1
, 0);
1448 R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN
, 3);
1453 R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN
, 0);
1459 static GLboolean
validate_buffers(context_t
*rmesa
,
1460 struct radeon_bo
*src_bo
,
1461 struct radeon_bo
*dst_bo
)
1464 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1465 src_bo
, RADEON_GEM_DOMAIN_VRAM
, 0);
1467 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1468 dst_bo
, 0, RADEON_GEM_DOMAIN_VRAM
);
1470 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1471 rmesa
->blit_bo
, RADEON_GEM_DOMAIN_GTT
, 0);
1473 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1475 RADEON_GEM_DOMAIN_GTT
, 0);
1479 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1480 first_elem(&rmesa
->radeon
.dma
.reserved
)->bo
,
1481 RADEON_GEM_DOMAIN_GTT
, 0);
1488 GLboolean
r600_blit(context_t
*context
,
1489 struct radeon_bo
*src_bo
,
1490 intptr_t src_offset
,
1491 gl_format src_mesaformat
,
1494 unsigned src_height
,
1497 struct radeon_bo
*dst_bo
,
1498 intptr_t dst_offset
,
1499 gl_format dst_mesaformat
,
1502 unsigned dst_height
,
1511 /* not sure blit to depth works or not yet */
1512 if (_mesa_get_format_bits(src_mesaformat
, GL_DEPTH_BITS
) > 0)
1515 if (src_bo
== dst_bo
) {
1520 fprintf(stderr
, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1521 src_width
, src_height
, src_pitch
,
1522 _mesa_format_row_stride(src_mesaformat
, src_width
),
1523 _mesa_get_format_name(src_mesaformat
));
1524 fprintf(stderr
, "dst: width %d, height %d, pitch %d, format %s\n",
1525 dst_width
, dst_height
,
1526 _mesa_format_row_stride(dst_mesaformat
, dst_width
),
1527 _mesa_get_format_name(dst_mesaformat
));
1530 /* Flush is needed to make sure that source buffer has correct data */
1531 radeonFlush(context
->radeon
.glCtx
);
1533 rcommonEnsureCmdBufSpace(&context
->radeon
, 302, __FUNCTION__
);
1536 load_shaders(context
->radeon
.glCtx
);
1538 if (!validate_buffers(context
, src_bo
, dst_bo
))
1541 /* set clear state */
1543 set_default_state(context
);
1547 set_shaders(context
);
1551 set_tex_resource(context
, src_mesaformat
, src_bo
,
1552 src_width
, src_height
, src_pitch
, src_offset
);
1555 set_tex_sampler(context
);
1559 set_render_target(context
, dst_bo
, dst_mesaformat
,
1560 dst_pitch
, dst_width
, dst_height
, dst_offset
);
1563 set_scissors(context
, dst_x
, dst_y
, dst_x
+ dst_width
, dst_y
+ dst_height
);
1565 set_vb_data(context
, src_x
, src_y
, dst_x
, dst_y
, w
, h
, src_height
, flip_y
);
1566 /* Vertex buffer setup */
1568 set_vtx_resource(context
);
1575 r700SyncSurf(context
, dst_bo
, 0,
1576 RADEON_GEM_DOMAIN_VRAM
|RADEON_GEM_DOMAIN_GTT
,
1577 CB_ACTION_ENA_bit
| (1 << (id
+ 6)));
1580 r700WaitForIdleClean(context
);
1582 radeonFlush(context
->radeon
.glCtx
);