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 /* Set CMASK & TILE buffer to the offset of color buffer as
314 * we don't use those this shouldn't cause any issue and we
315 * then have a valid cmd stream
317 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
318 R600_OUT_BATCH_REGSEQ(CB_COLOR0_TILE
+ (4 * id
), 1);
319 R600_OUT_BATCH(cb_color0_base
);
320 R600_OUT_BATCH_RELOC(0,
323 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
325 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
326 R600_OUT_BATCH_REGSEQ(CB_COLOR0_FRAG
+ (4 * id
), 1);
327 R600_OUT_BATCH(cb_color0_base
);
328 R600_OUT_BATCH_RELOC(0,
331 0, RADEON_GEM_DOMAIN_VRAM
| RADEON_GEM_DOMAIN_GTT
, 0);
334 BEGIN_BATCH_NO_AUTOSTATE(12);
335 R600_OUT_BATCH_REGVAL(CB_COLOR0_SIZE
+ (4 * id
), cb_color0_size
);
336 R600_OUT_BATCH_REGVAL(CB_COLOR0_VIEW
+ (4 * id
), cb_color0_view
);
337 R600_OUT_BATCH_REGVAL(CB_COLOR0_INFO
+ (4 * id
), cb_color0_info
);
338 R600_OUT_BATCH_REGVAL(CB_COLOR0_MASK
+ (4 * id
), 0);
345 static inline void load_shaders(GLcontext
* ctx
)
348 radeonContextPtr radeonctx
= RADEON_CONTEXT(ctx
);
349 context_t
*context
= R700_CONTEXT(ctx
);
353 if (context
->blit_bo_loaded
== 1)
357 context
->blit_bo
= radeon_bo_open(radeonctx
->radeonScreen
->bom
, 0,
358 size
, 256, RADEON_GEM_DOMAIN_GTT
, 0);
359 radeon_bo_map(context
->blit_bo
, 1);
360 shader
= context
->blit_bo
->ptr
;
362 for(i
=0; i
<sizeof(r6xx_vs
)/4; i
++) {
363 shader
[128+i
] = r6xx_vs
[i
];
365 for(i
=0; i
<sizeof(r6xx_ps
)/4; i
++) {
366 shader
[256+i
] = r6xx_ps
[i
];
369 radeon_bo_unmap(context
->blit_bo
);
370 context
->blit_bo_loaded
= 1;
375 set_shaders(context_t
*context
)
377 struct radeon_bo
* pbo
= context
->blit_bo
;
378 BATCH_LOCALS(&context
->radeon
);
380 uint32_t sq_pgm_start_fs
= (512 >> 8);
381 uint32_t sq_pgm_resources_fs
= 0;
382 uint32_t sq_pgm_cf_offset_fs
= 0;
384 uint32_t sq_pgm_start_vs
= (512 >> 8);
385 uint32_t sq_pgm_resources_vs
= (1 << NUM_GPRS_shift
);
386 uint32_t sq_pgm_cf_offset_vs
= 0;
388 uint32_t sq_pgm_start_ps
= (1024 >> 8);
389 uint32_t sq_pgm_resources_ps
= (1 << NUM_GPRS_shift
);
390 uint32_t sq_pgm_cf_offset_ps
= 0;
391 uint32_t sq_pgm_exports_ps
= (1 << 1);
393 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
396 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
397 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_FS
, 1);
398 R600_OUT_BATCH(sq_pgm_start_fs
);
399 R600_OUT_BATCH_RELOC(sq_pgm_start_fs
,
402 RADEON_GEM_DOMAIN_GTT
, 0, 0);
405 BEGIN_BATCH_NO_AUTOSTATE(6);
406 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_FS
, sq_pgm_resources_fs
);
407 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_FS
, sq_pgm_cf_offset_fs
);
411 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
412 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_VS
, 1);
413 R600_OUT_BATCH(sq_pgm_start_vs
);
414 R600_OUT_BATCH_RELOC(sq_pgm_start_vs
,
417 RADEON_GEM_DOMAIN_GTT
, 0, 0);
420 BEGIN_BATCH_NO_AUTOSTATE(6);
421 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_VS
, sq_pgm_resources_vs
);
422 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_VS
, sq_pgm_cf_offset_vs
);
426 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
427 R600_OUT_BATCH_REGSEQ(SQ_PGM_START_PS
, 1);
428 R600_OUT_BATCH(sq_pgm_start_ps
);
429 R600_OUT_BATCH_RELOC(sq_pgm_start_ps
,
432 RADEON_GEM_DOMAIN_GTT
, 0, 0);
435 BEGIN_BATCH_NO_AUTOSTATE(9);
436 R600_OUT_BATCH_REGVAL(SQ_PGM_RESOURCES_PS
, sq_pgm_resources_ps
);
437 R600_OUT_BATCH_REGVAL(SQ_PGM_EXPORTS_PS
, sq_pgm_exports_ps
);
438 R600_OUT_BATCH_REGVAL(SQ_PGM_CF_OFFSET_PS
, sq_pgm_cf_offset_ps
);
441 BEGIN_BATCH_NO_AUTOSTATE(18);
442 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_CONFIG
, 0); //EXPORT_COUNT is - 1
443 R600_OUT_BATCH_REGVAL(SPI_VS_OUT_ID_0
, 0);
444 R600_OUT_BATCH_REGVAL(SPI_PS_INPUT_CNTL_0
, SEL_CENTROID_bit
);
445 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_0
, (1 << NUM_INTERP_shift
));
446 R600_OUT_BATCH_REGVAL(SPI_PS_IN_CONTROL_1
, 0);
447 R600_OUT_BATCH_REGVAL(SPI_INTERP_CONTROL_0
, 0);
455 set_vtx_resource(context_t
*context
)
457 struct radeon_bo
*bo
= context
->blit_bo
;
458 BATCH_LOCALS(&context
->radeon
);
460 BEGIN_BATCH_NO_AUTOSTATE(6);
461 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
462 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
465 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
466 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
471 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
472 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
473 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
474 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
475 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
476 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, TC_ACTION_ENA_bit
);
478 r700SyncSurf(context
, bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
480 BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
482 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
483 R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET
* FETCH_RESOURCE_STRIDE
);
485 R600_OUT_BATCH(48 - 1);
486 R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
);
487 R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift
);
490 R600_OUT_BATCH(SQ_TEX_VTX_VALID_BUFFER
<< SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
);
491 R600_OUT_BATCH_RELOC(SQ_VTX_CONSTANT_WORD0_0
,
493 SQ_VTX_CONSTANT_WORD0_0
,
494 RADEON_GEM_DOMAIN_GTT
, 0, 0);
501 set_tex_resource(context_t
* context
,
502 gl_format mesa_format
, struct radeon_bo
*bo
, int w
, int h
,
503 int pitch
, intptr_t src_offset
)
505 uint32_t sq_tex_resource0
, sq_tex_resource1
, sq_tex_resource2
, sq_tex_resource4
, sq_tex_resource6
;
506 int bpp
= _mesa_get_format_bytes(mesa_format
);
507 int TexelPitch
= pitch
/bpp
;
509 sq_tex_resource0
= sq_tex_resource1
= sq_tex_resource2
= sq_tex_resource4
= sq_tex_resource6
= 0;
510 BATCH_LOCALS(&context
->radeon
);
512 SETfield(sq_tex_resource0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
513 SETfield(sq_tex_resource0
, ARRAY_LINEAR_GENERAL
,
514 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
515 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
517 switch (mesa_format
) {
518 case MESA_FORMAT_RGBA8888
:
519 case MESA_FORMAT_SIGNED_RGBA8888
:
520 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
521 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
523 SETfield(sq_tex_resource4
, SQ_SEL_W
,
524 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
525 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
526 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
527 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
528 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
529 SETfield(sq_tex_resource4
, SQ_SEL_X
,
530 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
531 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
532 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
533 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
534 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
535 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
536 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
537 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
538 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
539 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
542 case MESA_FORMAT_RGBA8888_REV
:
543 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
544 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
545 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
547 SETfield(sq_tex_resource4
, SQ_SEL_X
,
548 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
549 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
550 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
551 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
552 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
553 SETfield(sq_tex_resource4
, SQ_SEL_W
,
554 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
555 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
556 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
557 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
558 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
559 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
560 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
561 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
562 SETfield(sq_tex_resource4
, SQ_FORMAT_COMP_SIGNED
,
563 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
566 case MESA_FORMAT_ARGB8888
:
567 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
568 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
570 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
571 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
572 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
573 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
574 SETfield(sq_tex_resource4
, SQ_SEL_X
,
575 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
576 SETfield(sq_tex_resource4
, SQ_SEL_W
,
577 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
579 case MESA_FORMAT_XRGB8888
:
580 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
581 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
583 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
584 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
585 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
586 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
587 SETfield(sq_tex_resource4
, SQ_SEL_X
,
588 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
589 SETfield(sq_tex_resource4
, SQ_SEL_1
,
590 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
592 case MESA_FORMAT_ARGB8888_REV
:
593 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
594 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
596 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
597 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
598 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
599 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
600 SETfield(sq_tex_resource4
, SQ_SEL_W
,
601 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
602 SETfield(sq_tex_resource4
, SQ_SEL_X
,
603 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
605 case MESA_FORMAT_XRGB8888_REV
:
606 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
607 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
609 SETfield(sq_tex_resource4
, SQ_SEL_1
,
610 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
611 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
612 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
613 SETfield(sq_tex_resource4
, SQ_SEL_W
,
614 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
615 SETfield(sq_tex_resource4
, SQ_SEL_X
,
616 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
618 case MESA_FORMAT_RGB565
:
619 SETfield(sq_tex_resource1
, FMT_5_6_5
,
620 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
622 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
623 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
624 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
625 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
626 SETfield(sq_tex_resource4
, SQ_SEL_X
,
627 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
628 SETfield(sq_tex_resource4
, SQ_SEL_1
,
629 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
631 case MESA_FORMAT_RGB565_REV
:
632 SETfield(sq_tex_resource1
, FMT_5_6_5
,
633 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
635 SETfield(sq_tex_resource4
, SQ_SEL_X
,
636 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
637 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
638 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
639 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
640 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
641 SETfield(sq_tex_resource4
, SQ_SEL_1
,
642 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
644 case MESA_FORMAT_ARGB4444
:
645 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
646 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
648 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
649 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
650 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
651 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
652 SETfield(sq_tex_resource4
, SQ_SEL_X
,
653 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
654 SETfield(sq_tex_resource4
, SQ_SEL_W
,
655 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
657 case MESA_FORMAT_ARGB4444_REV
:
658 SETfield(sq_tex_resource1
, FMT_4_4_4_4
,
659 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
661 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
662 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
663 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
664 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
665 SETfield(sq_tex_resource4
, SQ_SEL_W
,
666 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
667 SETfield(sq_tex_resource4
, SQ_SEL_X
,
668 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
670 case MESA_FORMAT_ARGB1555
:
671 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
672 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
674 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
675 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
676 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
677 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
678 SETfield(sq_tex_resource4
, SQ_SEL_X
,
679 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
680 SETfield(sq_tex_resource4
, SQ_SEL_W
,
681 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
683 case MESA_FORMAT_ARGB1555_REV
:
684 SETfield(sq_tex_resource1
, FMT_1_5_5_5
,
685 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
687 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
688 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
689 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
690 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
691 SETfield(sq_tex_resource4
, SQ_SEL_W
,
692 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
693 SETfield(sq_tex_resource4
, SQ_SEL_X
,
694 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
696 case MESA_FORMAT_AL88
:
697 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
698 SETfield(sq_tex_resource1
, FMT_8_8
,
699 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
701 SETfield(sq_tex_resource4
, SQ_SEL_X
,
702 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
703 SETfield(sq_tex_resource4
, SQ_SEL_X
,
704 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
705 SETfield(sq_tex_resource4
, SQ_SEL_X
,
706 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
707 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
708 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
710 case MESA_FORMAT_RGB332
:
711 SETfield(sq_tex_resource1
, FMT_3_3_2
,
712 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
714 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
715 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
716 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
717 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
718 SETfield(sq_tex_resource4
, SQ_SEL_X
,
719 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
720 SETfield(sq_tex_resource4
, SQ_SEL_1
,
721 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
723 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
724 SETfield(sq_tex_resource1
, FMT_8
,
725 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
727 SETfield(sq_tex_resource4
, SQ_SEL_0
,
728 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
729 SETfield(sq_tex_resource4
, SQ_SEL_0
,
730 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
731 SETfield(sq_tex_resource4
, SQ_SEL_0
,
732 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
733 SETfield(sq_tex_resource4
, SQ_SEL_X
,
734 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
736 case MESA_FORMAT_L8
: /* X, X, X, ONE */
737 SETfield(sq_tex_resource1
, FMT_8
,
738 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
740 SETfield(sq_tex_resource4
, SQ_SEL_X
,
741 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
742 SETfield(sq_tex_resource4
, SQ_SEL_X
,
743 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
744 SETfield(sq_tex_resource4
, SQ_SEL_X
,
745 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
746 SETfield(sq_tex_resource4
, SQ_SEL_1
,
747 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
749 case MESA_FORMAT_I8
: /* X, X, X, X */
750 case MESA_FORMAT_CI8
:
751 SETfield(sq_tex_resource1
, FMT_8
,
752 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
754 SETfield(sq_tex_resource4
, SQ_SEL_X
,
755 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
756 SETfield(sq_tex_resource4
, SQ_SEL_X
,
757 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
758 SETfield(sq_tex_resource4
, SQ_SEL_X
,
759 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
760 SETfield(sq_tex_resource4
, SQ_SEL_X
,
761 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
763 case MESA_FORMAT_RGBA_FLOAT32
:
764 SETfield(sq_tex_resource1
, FMT_32_32_32_32_FLOAT
,
765 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
767 SETfield(sq_tex_resource4
, SQ_SEL_X
,
768 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
769 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
770 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
771 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
772 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
773 SETfield(sq_tex_resource4
, SQ_SEL_W
,
774 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
776 case MESA_FORMAT_RGBA_FLOAT16
:
777 SETfield(sq_tex_resource1
, FMT_16_16_16_16_FLOAT
,
778 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
780 SETfield(sq_tex_resource4
, SQ_SEL_X
,
781 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
782 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
783 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
784 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
785 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
786 SETfield(sq_tex_resource4
, SQ_SEL_W
,
787 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
789 case MESA_FORMAT_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
790 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
791 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
793 SETfield(sq_tex_resource4
, SQ_SEL_0
,
794 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
795 SETfield(sq_tex_resource4
, SQ_SEL_0
,
796 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
797 SETfield(sq_tex_resource4
, SQ_SEL_0
,
798 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
799 SETfield(sq_tex_resource4
, SQ_SEL_X
,
800 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
802 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
803 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
804 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
806 SETfield(sq_tex_resource4
, SQ_SEL_0
,
807 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
808 SETfield(sq_tex_resource4
, SQ_SEL_0
,
809 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
810 SETfield(sq_tex_resource4
, SQ_SEL_0
,
811 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
812 SETfield(sq_tex_resource4
, SQ_SEL_X
,
813 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
815 case MESA_FORMAT_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
816 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
817 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
819 SETfield(sq_tex_resource4
, SQ_SEL_X
,
820 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
821 SETfield(sq_tex_resource4
, SQ_SEL_X
,
822 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
823 SETfield(sq_tex_resource4
, SQ_SEL_X
,
824 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
825 SETfield(sq_tex_resource4
, SQ_SEL_1
,
826 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
828 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
829 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
830 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
832 SETfield(sq_tex_resource4
, SQ_SEL_X
,
833 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
834 SETfield(sq_tex_resource4
, SQ_SEL_X
,
835 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
836 SETfield(sq_tex_resource4
, SQ_SEL_X
,
837 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
838 SETfield(sq_tex_resource4
, SQ_SEL_1
,
839 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
841 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
842 SETfield(sq_tex_resource1
, FMT_32_32_FLOAT
,
843 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
845 SETfield(sq_tex_resource4
, SQ_SEL_X
,
846 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
847 SETfield(sq_tex_resource4
, SQ_SEL_X
,
848 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
849 SETfield(sq_tex_resource4
, SQ_SEL_X
,
850 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
851 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
852 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
854 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
855 SETfield(sq_tex_resource1
, FMT_16_16_FLOAT
,
856 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
858 SETfield(sq_tex_resource4
, SQ_SEL_X
,
859 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
860 SETfield(sq_tex_resource4
, SQ_SEL_X
,
861 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
862 SETfield(sq_tex_resource4
, SQ_SEL_X
,
863 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
864 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
865 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
867 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
868 SETfield(sq_tex_resource1
, FMT_32_FLOAT
,
869 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
871 SETfield(sq_tex_resource4
, SQ_SEL_X
,
872 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
873 SETfield(sq_tex_resource4
, SQ_SEL_X
,
874 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
875 SETfield(sq_tex_resource4
, SQ_SEL_X
,
876 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
877 SETfield(sq_tex_resource4
, SQ_SEL_X
,
878 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
880 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
881 SETfield(sq_tex_resource1
, FMT_16_FLOAT
,
882 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
884 SETfield(sq_tex_resource4
, SQ_SEL_X
,
885 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
886 SETfield(sq_tex_resource4
, SQ_SEL_X
,
887 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
888 SETfield(sq_tex_resource4
, SQ_SEL_X
,
889 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
890 SETfield(sq_tex_resource4
, SQ_SEL_X
,
891 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
893 case MESA_FORMAT_Z16
:
894 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
895 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
896 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
897 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
898 SETfield(sq_tex_resource1
, FMT_16
,
899 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
900 SETfield(sq_tex_resource4
, SQ_SEL_X
,
901 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
902 SETfield(sq_tex_resource4
, SQ_SEL_X
,
903 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
904 SETfield(sq_tex_resource4
, SQ_SEL_X
,
905 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
906 SETfield(sq_tex_resource4
, SQ_SEL_X
,
907 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
909 case MESA_FORMAT_X8_Z24
:
910 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
911 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
912 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
913 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
914 SETfield(sq_tex_resource1
, FMT_8_24
,
915 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
916 SETfield(sq_tex_resource4
, SQ_SEL_X
,
917 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
918 SETfield(sq_tex_resource4
, SQ_SEL_1
,
919 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
920 SETfield(sq_tex_resource4
, SQ_SEL_0
,
921 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
922 SETfield(sq_tex_resource4
, SQ_SEL_1
,
923 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
925 case MESA_FORMAT_S8_Z24
:
926 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
927 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
928 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
929 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
930 SETfield(sq_tex_resource1
, FMT_8_24
,
931 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
932 SETfield(sq_tex_resource4
, SQ_SEL_X
,
933 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
934 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
935 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
936 SETfield(sq_tex_resource4
, SQ_SEL_0
,
937 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
938 SETfield(sq_tex_resource4
, SQ_SEL_1
,
939 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
941 case MESA_FORMAT_Z24_S8
:
942 SETbit(sq_tex_resource0
, TILE_TYPE_bit
);
943 SETfield(sq_tex_resource0
, ARRAY_1D_TILED_THIN1
,
944 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
945 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
946 SETfield(sq_tex_resource1
, FMT_24_8
,
947 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_Y
,
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_0
,
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_1
,
955 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
957 case MESA_FORMAT_Z32
:
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_32
,
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
);
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
,
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_X
,
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_X
,
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_X
,
987 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
989 case MESA_FORMAT_SRGBA8
:
990 SETfield(sq_tex_resource1
, FMT_8_8_8_8
,
991 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
993 SETfield(sq_tex_resource4
, SQ_SEL_W
,
994 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
995 SETfield(sq_tex_resource4
, SQ_SEL_Z
,
996 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
997 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
998 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
999 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1000 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1001 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1003 case MESA_FORMAT_SLA8
:
1004 SETfield(sq_tex_resource1
, FMT_8_8
,
1005 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1007 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1008 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1009 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1010 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1011 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1012 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1013 SETfield(sq_tex_resource4
, SQ_SEL_Y
,
1014 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1015 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1017 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
1018 SETfield(sq_tex_resource1
, FMT_8
,
1019 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1021 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1022 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1023 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1024 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1025 SETfield(sq_tex_resource4
, SQ_SEL_X
,
1026 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1027 SETfield(sq_tex_resource4
, SQ_SEL_1
,
1028 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1029 SETbit(sq_tex_resource4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
1032 fprintf(stderr
,"Invalid format for copy %s\n",_mesa_get_format_name(mesa_format
));
1033 assert("Invalid format for US output\n");
1037 SETfield(sq_tex_resource0
, (TexelPitch
/8)-1, PITCH_shift
, PITCH_mask
);
1038 SETfield(sq_tex_resource0
, w
- 1, TEX_WIDTH_shift
, TEX_WIDTH_mask
);
1039 SETfield(sq_tex_resource1
, h
- 1, TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
1041 sq_tex_resource2
= src_offset
/ 256;
1043 SETfield(sq_tex_resource6
, SQ_TEX_VTX_VALID_TEXTURE
,
1044 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
,
1045 SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
1047 r700SyncSurf(context
, bo
,
1048 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
1049 0, TC_ACTION_ENA_bit
);
1051 BEGIN_BATCH_NO_AUTOSTATE(9 + 4);
1052 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 7));
1053 R600_OUT_BATCH(0 * 7);
1055 R600_OUT_BATCH(sq_tex_resource0
);
1056 R600_OUT_BATCH(sq_tex_resource1
);
1057 R600_OUT_BATCH(sq_tex_resource2
);
1058 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE3
1059 R600_OUT_BATCH(sq_tex_resource4
);
1060 R600_OUT_BATCH(0); //SQ_TEX_RESOURCE5
1061 R600_OUT_BATCH(sq_tex_resource6
);
1062 R600_OUT_BATCH_RELOC(0,
1065 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1066 R600_OUT_BATCH_RELOC(0,
1069 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
1075 set_tex_sampler(context_t
* context
)
1077 uint32_t sq_tex_sampler_word0
= 0, sq_tex_sampler_word1
= 0, sq_tex_sampler_word2
= 0;
1080 SETbit(sq_tex_sampler_word2
, SQ_TEX_SAMPLER_WORD2_0__TYPE_bit
);
1082 BATCH_LOCALS(&context
->radeon
);
1084 BEGIN_BATCH_NO_AUTOSTATE(5);
1085 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
1086 R600_OUT_BATCH(i
* 3);
1087 R600_OUT_BATCH(sq_tex_sampler_word0
);
1088 R600_OUT_BATCH(sq_tex_sampler_word1
);
1089 R600_OUT_BATCH(sq_tex_sampler_word2
);
1095 set_scissors(context_t
*context
, int x1
, int y1
, int x2
, int y2
)
1097 BATCH_LOCALS(&context
->radeon
);
1099 BEGIN_BATCH_NO_AUTOSTATE(17);
1100 R600_OUT_BATCH_REGSEQ(PA_SC_SCREEN_SCISSOR_TL
, 2);
1101 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16));
1102 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1104 R600_OUT_BATCH_REGSEQ(PA_SC_WINDOW_OFFSET
, 3);
1105 R600_OUT_BATCH(0); //PA_SC_WINDOW_OFFSET
1106 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
)); //PA_SC_WINDOW_SCISSOR_TL
1107 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1109 R600_OUT_BATCH_REGSEQ(PA_SC_GENERIC_SCISSOR_TL
, 2);
1110 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1111 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1113 /* XXX 16 of these PA_SC_VPORT_SCISSOR_0_TL_num ... */
1114 R600_OUT_BATCH_REGSEQ(PA_SC_VPORT_SCISSOR_0_TL
, 2 );
1115 R600_OUT_BATCH((x1
<< 0) | (y1
<< 16) | (WINDOW_OFFSET_DISABLE_bit
));
1116 R600_OUT_BATCH((x2
<< 0) | (y2
<< 16));
1124 set_vb_data(context_t
* context
, int src_x
, int src_y
, int dst_x
, int dst_y
,
1125 int w
, int h
, int src_h
, unsigned flip_y
)
1128 radeon_bo_map(context
->blit_bo
, 1);
1129 vb
= context
->blit_bo
->ptr
;
1131 vb
[0] = (float)(dst_x
);
1132 vb
[1] = (float)(dst_y
);
1133 vb
[2] = (float)(src_x
);
1134 vb
[3] = (flip_y
) ? (float)(src_h
- src_y
) : (float)src_y
;
1136 vb
[4] = (float)(dst_x
);
1137 vb
[5] = (float)(dst_y
+ h
);
1138 vb
[6] = (float)(src_x
);
1139 vb
[7] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1141 vb
[8] = (float)(dst_x
+ w
);
1142 vb
[9] = (float)(dst_y
+ h
);
1143 vb
[10] = (float)(src_x
+ w
);
1144 vb
[11] = (flip_y
) ? (float)(src_h
- (src_y
+ h
)) : (float)(src_y
+ h
);
1146 radeon_bo_unmap(context
->blit_bo
);
1151 draw_auto(context_t
*context
)
1153 BATCH_LOCALS(&context
->radeon
);
1154 uint32_t vgt_primitive_type
= 0, vgt_index_type
= 0, vgt_draw_initiator
= 0, vgt_num_indices
;
1156 SETfield(vgt_primitive_type
, DI_PT_RECTLIST
,
1157 VGT_PRIMITIVE_TYPE__PRIM_TYPE_shift
,
1158 VGT_PRIMITIVE_TYPE__PRIM_TYPE_mask
);
1159 SETfield(vgt_index_type
, DI_INDEX_SIZE_16_BIT
, INDEX_TYPE_shift
,
1161 SETfield(vgt_draw_initiator
, DI_MAJOR_MODE_0
, MAJOR_MODE_shift
,
1163 SETfield(vgt_draw_initiator
, DI_SRC_SEL_AUTO_INDEX
, SOURCE_SELECT_shift
,
1164 SOURCE_SELECT_mask
);
1166 vgt_num_indices
= 3;
1168 BEGIN_BATCH_NO_AUTOSTATE(10);
1170 R600_OUT_BATCH_REGSEQ(VGT_PRIMITIVE_TYPE
, 1);
1171 R600_OUT_BATCH(vgt_primitive_type
);
1173 R600_OUT_BATCH(CP_PACKET3(R600_IT_INDEX_TYPE
, 0));
1174 R600_OUT_BATCH(vgt_index_type
);
1176 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES
, 0));
1179 R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO
, 1));
1180 R600_OUT_BATCH(vgt_num_indices
);
1181 R600_OUT_BATCH(vgt_draw_initiator
);
1188 set_default_state(context_t
*context
)
1203 int num_ps_stack_entries
;
1204 int num_vs_stack_entries
;
1205 int num_gs_stack_entries
;
1206 int num_es_stack_entries
;
1207 uint32_t sq_config
, sq_gpr_resource_mgmt_1
, sq_gpr_resource_mgmt_2
;
1208 uint32_t sq_thread_resource_mgmt
, sq_stack_resource_mgmt_1
, sq_stack_resource_mgmt_2
;
1209 uint32_t ta_cntl_aux
, db_watermarks
, sq_dyn_gpr_cntl_ps_flush_req
, db_debug
;
1210 BATCH_LOCALS(&context
->radeon
);
1212 switch (context
->radeon
.radeonScreen
->chip_family
) {
1213 case CHIP_FAMILY_R600
:
1219 num_ps_threads
= 136;
1220 num_vs_threads
= 48;
1223 num_ps_stack_entries
= 128;
1224 num_vs_stack_entries
= 128;
1225 num_gs_stack_entries
= 0;
1226 num_es_stack_entries
= 0;
1228 case CHIP_FAMILY_RV630
:
1229 case CHIP_FAMILY_RV635
:
1235 num_ps_threads
= 144;
1236 num_vs_threads
= 40;
1239 num_ps_stack_entries
= 40;
1240 num_vs_stack_entries
= 40;
1241 num_gs_stack_entries
= 32;
1242 num_es_stack_entries
= 16;
1244 case CHIP_FAMILY_RV610
:
1245 case CHIP_FAMILY_RV620
:
1246 case CHIP_FAMILY_RS780
:
1247 case CHIP_FAMILY_RS880
:
1254 num_ps_threads
= 136;
1255 num_vs_threads
= 48;
1258 num_ps_stack_entries
= 40;
1259 num_vs_stack_entries
= 40;
1260 num_gs_stack_entries
= 32;
1261 num_es_stack_entries
= 16;
1263 case CHIP_FAMILY_RV670
:
1269 num_ps_threads
= 136;
1270 num_vs_threads
= 48;
1273 num_ps_stack_entries
= 40;
1274 num_vs_stack_entries
= 40;
1275 num_gs_stack_entries
= 32;
1276 num_es_stack_entries
= 16;
1278 case CHIP_FAMILY_RV770
:
1284 num_ps_threads
= 188;
1285 num_vs_threads
= 60;
1288 num_ps_stack_entries
= 256;
1289 num_vs_stack_entries
= 256;
1290 num_gs_stack_entries
= 0;
1291 num_es_stack_entries
= 0;
1293 case CHIP_FAMILY_RV730
:
1294 case CHIP_FAMILY_RV740
:
1300 num_ps_threads
= 188;
1301 num_vs_threads
= 60;
1304 num_ps_stack_entries
= 128;
1305 num_vs_stack_entries
= 128;
1306 num_gs_stack_entries
= 0;
1307 num_es_stack_entries
= 0;
1309 case CHIP_FAMILY_RV710
:
1315 num_ps_threads
= 144;
1316 num_vs_threads
= 48;
1319 num_ps_stack_entries
= 128;
1320 num_vs_stack_entries
= 128;
1321 num_gs_stack_entries
= 0;
1322 num_es_stack_entries
= 0;
1327 if ((context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV610
) ||
1328 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV620
) ||
1329 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS780
) ||
1330 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RS880
) ||
1331 (context
->radeon
.radeonScreen
->chip_family
== CHIP_FAMILY_RV710
))
1332 CLEARbit(sq_config
, VC_ENABLE_bit
);
1334 SETbit(sq_config
, VC_ENABLE_bit
);
1335 SETbit(sq_config
, DX9_CONSTS_bit
);
1336 SETbit(sq_config
, ALU_INST_PREFER_VECTOR_bit
);
1337 SETfield(sq_config
, ps_prio
, PS_PRIO_shift
, PS_PRIO_mask
);
1338 SETfield(sq_config
, vs_prio
, VS_PRIO_shift
, VS_PRIO_mask
);
1339 SETfield(sq_config
, gs_prio
, GS_PRIO_shift
, GS_PRIO_mask
);
1340 SETfield(sq_config
, es_prio
, ES_PRIO_shift
, ES_PRIO_mask
);
1342 sq_gpr_resource_mgmt_1
= 0;
1343 SETfield(sq_gpr_resource_mgmt_1
, num_ps_gprs
, NUM_PS_GPRS_shift
, NUM_PS_GPRS_mask
);
1344 SETfield(sq_gpr_resource_mgmt_1
, num_vs_gprs
, NUM_VS_GPRS_shift
, NUM_VS_GPRS_mask
);
1345 SETfield(sq_gpr_resource_mgmt_1
, num_temp_gprs
,
1346 NUM_CLAUSE_TEMP_GPRS_shift
, NUM_CLAUSE_TEMP_GPRS_mask
);
1348 sq_gpr_resource_mgmt_2
= 0;
1349 SETfield(sq_gpr_resource_mgmt_2
, num_gs_gprs
, NUM_GS_GPRS_shift
, NUM_GS_GPRS_mask
);
1350 SETfield(sq_gpr_resource_mgmt_2
, num_es_gprs
, NUM_ES_GPRS_shift
, NUM_ES_GPRS_mask
);
1352 sq_thread_resource_mgmt
= 0;
1353 SETfield(sq_thread_resource_mgmt
, num_ps_threads
,
1354 NUM_PS_THREADS_shift
, NUM_PS_THREADS_mask
);
1355 SETfield(sq_thread_resource_mgmt
, num_vs_threads
,
1356 NUM_VS_THREADS_shift
, NUM_VS_THREADS_mask
);
1357 SETfield(sq_thread_resource_mgmt
, num_gs_threads
,
1358 NUM_GS_THREADS_shift
, NUM_GS_THREADS_mask
);
1359 SETfield(sq_thread_resource_mgmt
, num_es_threads
,
1360 NUM_ES_THREADS_shift
, NUM_ES_THREADS_mask
);
1362 sq_stack_resource_mgmt_1
= 0;
1363 SETfield(sq_stack_resource_mgmt_1
, num_ps_stack_entries
,
1364 NUM_PS_STACK_ENTRIES_shift
, NUM_PS_STACK_ENTRIES_mask
);
1365 SETfield(sq_stack_resource_mgmt_1
, num_vs_stack_entries
,
1366 NUM_VS_STACK_ENTRIES_shift
, NUM_VS_STACK_ENTRIES_mask
);
1368 sq_stack_resource_mgmt_2
= 0;
1369 SETfield(sq_stack_resource_mgmt_2
, num_gs_stack_entries
,
1370 NUM_GS_STACK_ENTRIES_shift
, NUM_GS_STACK_ENTRIES_mask
);
1371 SETfield(sq_stack_resource_mgmt_2
, num_es_stack_entries
,
1372 NUM_ES_STACK_ENTRIES_shift
, NUM_ES_STACK_ENTRIES_mask
);
1375 SETfield(ta_cntl_aux
, 28, TD_FIFO_CREDIT_shift
, TD_FIFO_CREDIT_mask
);
1377 SETfield(db_watermarks
, 4, DEPTH_FREE_shift
, DEPTH_FREE_mask
);
1378 SETfield(db_watermarks
, 16, DEPTH_FLUSH_shift
, DEPTH_FLUSH_mask
);
1379 SETfield(db_watermarks
, 0, FORCE_SUMMARIZE_shift
, FORCE_SUMMARIZE_mask
);
1380 SETfield(db_watermarks
, 4, DEPTH_PENDING_FREE_shift
, DEPTH_PENDING_FREE_mask
);
1381 sq_dyn_gpr_cntl_ps_flush_req
= 0;
1383 if (context
->radeon
.radeonScreen
->chip_family
< CHIP_FAMILY_RV770
) {
1384 SETfield(ta_cntl_aux
, 3, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1385 db_debug
= 0x82000000;
1386 SETfield(db_watermarks
, 16, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1388 SETfield(ta_cntl_aux
, 2, GRADIENT_CREDIT_shift
, GRADIENT_CREDIT_mask
);
1389 SETfield(db_watermarks
, 4, DEPTH_CACHELINE_FREE_shift
, DEPTH_CACHELINE_FREE_mask
);
1390 SETbit(sq_dyn_gpr_cntl_ps_flush_req
, VS_PC_LIMIT_ENABLE_bit
);
1393 BEGIN_BATCH_NO_AUTOSTATE(117);
1394 R600_OUT_BATCH_REGSEQ(SQ_CONFIG
, 6);
1395 R600_OUT_BATCH(sq_config
);
1396 R600_OUT_BATCH(sq_gpr_resource_mgmt_1
);
1397 R600_OUT_BATCH(sq_gpr_resource_mgmt_2
);
1398 R600_OUT_BATCH(sq_thread_resource_mgmt
);
1399 R600_OUT_BATCH(sq_stack_resource_mgmt_1
);
1400 R600_OUT_BATCH(sq_stack_resource_mgmt_2
);
1402 R600_OUT_BATCH_REGVAL(TA_CNTL_AUX
, ta_cntl_aux
);
1403 R600_OUT_BATCH_REGVAL(VC_ENHANCE
, 0);
1404 R600_OUT_BATCH_REGVAL(R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
, sq_dyn_gpr_cntl_ps_flush_req
);
1405 R600_OUT_BATCH_REGVAL(DB_DEBUG
, db_debug
);
1406 R600_OUT_BATCH_REGVAL(DB_WATERMARKS
, db_watermarks
);
1408 R600_OUT_BATCH_REGSEQ(SQ_ESGS_RING_ITEMSIZE
, 9);
1419 R600_OUT_BATCH_REGVAL(CB_CLRCMP_CONTROL
,
1420 (CLRCMP_SEL_SRC
<< CLRCMP_FCN_SEL_shift
));
1421 R600_OUT_BATCH_REGVAL(SQ_VTX_BASE_VTX_LOC
, 0);
1422 R600_OUT_BATCH_REGVAL(SQ_VTX_START_INST_LOC
, 0);
1423 R600_OUT_BATCH_REGVAL(DB_DEPTH_INFO
, 0);
1424 R600_OUT_BATCH_REGVAL(DB_DEPTH_CONTROL
, 0);
1425 R600_OUT_BATCH_REGVAL(CB_SHADER_MASK
, (OUTPUT0_ENABLE_mask
));
1426 R600_OUT_BATCH_REGVAL(CB_TARGET_MASK
, (TARGET0_ENABLE_mask
));
1427 R600_OUT_BATCH_REGVAL(R7xx_CB_SHADER_CONTROL
, (RT0_ENABLE_bit
));
1428 R600_OUT_BATCH_REGVAL(CB_COLOR_CONTROL
, (0xcc << ROP3_shift
));
1430 R600_OUT_BATCH_REGVAL(PA_CL_VTE_CNTL
, VTX_XY_FMT_bit
);
1431 R600_OUT_BATCH_REGVAL(PA_CL_VS_OUT_CNTL
, 0);
1432 R600_OUT_BATCH_REGVAL(PA_CL_CLIP_CNTL
, CLIP_DISABLE_bit
);
1433 R600_OUT_BATCH_REGVAL(PA_SU_SC_MODE_CNTL
, (FACE_bit
) |
1434 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_FRONT_PTYPE_shift
) |
1435 (POLYMODE_PTYPE__TRIANGLES
<< POLYMODE_BACK_PTYPE_shift
));
1436 R600_OUT_BATCH_REGVAL(PA_SU_VTX_CNTL
, (PIX_CENTER_bit
) |
1437 (X_ROUND_TO_EVEN
<< PA_SU_VTX_CNTL__ROUND_MODE_shift
) |
1438 (X_1_256TH
<< QUANT_MODE_shift
));
1440 R600_OUT_BATCH_REGSEQ(VGT_MAX_VTX_INDX
, 4);
1441 R600_OUT_BATCH(2048);
1446 R600_OUT_BATCH_REGSEQ(VGT_OUTPUT_PATH_CNTL
, 13);
1461 R600_OUT_BATCH_REGVAL(VGT_PRIMITIVEID_EN
, 0);
1462 R600_OUT_BATCH_REGVAL(VGT_MULTI_PRIM_IB_RESET_EN
, 0);
1463 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_0
, 0);
1464 R600_OUT_BATCH_REGVAL(VGT_INSTANCE_STEP_RATE_1
, 0);
1466 R600_OUT_BATCH_REGSEQ(VGT_STRMOUT_EN
, 3);
1471 R600_OUT_BATCH_REGVAL(VGT_STRMOUT_BUFFER_EN
, 0);
1477 static GLboolean
validate_buffers(context_t
*rmesa
,
1478 struct radeon_bo
*src_bo
,
1479 struct radeon_bo
*dst_bo
)
1482 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1483 src_bo
, RADEON_GEM_DOMAIN_VRAM
, 0);
1485 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1486 dst_bo
, 0, RADEON_GEM_DOMAIN_VRAM
);
1488 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1489 rmesa
->blit_bo
, RADEON_GEM_DOMAIN_GTT
, 0);
1491 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1493 RADEON_GEM_DOMAIN_GTT
, 0);
1497 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
,
1498 first_elem(&rmesa
->radeon
.dma
.reserved
)->bo
,
1499 RADEON_GEM_DOMAIN_GTT
, 0);
1506 GLboolean
r600_blit(context_t
*context
,
1507 struct radeon_bo
*src_bo
,
1508 intptr_t src_offset
,
1509 gl_format src_mesaformat
,
1512 unsigned src_height
,
1515 struct radeon_bo
*dst_bo
,
1516 intptr_t dst_offset
,
1517 gl_format dst_mesaformat
,
1520 unsigned dst_height
,
1529 /* not sure blit to depth works or not yet */
1530 if (_mesa_get_format_bits(src_mesaformat
, GL_DEPTH_BITS
) > 0)
1533 if (src_bo
== dst_bo
) {
1538 fprintf(stderr
, "src: width %d, height %d, pitch %d vs %d, format %s\n",
1539 src_width
, src_height
, src_pitch
,
1540 _mesa_format_row_stride(src_mesaformat
, src_width
),
1541 _mesa_get_format_name(src_mesaformat
));
1542 fprintf(stderr
, "dst: width %d, height %d, pitch %d, format %s\n",
1543 dst_width
, dst_height
,
1544 _mesa_format_row_stride(dst_mesaformat
, dst_width
),
1545 _mesa_get_format_name(dst_mesaformat
));
1548 /* Flush is needed to make sure that source buffer has correct data */
1549 radeonFlush(context
->radeon
.glCtx
);
1551 rcommonEnsureCmdBufSpace(&context
->radeon
, 304, __FUNCTION__
);
1554 load_shaders(context
->radeon
.glCtx
);
1556 if (!validate_buffers(context
, src_bo
, dst_bo
))
1559 /* set clear state */
1561 set_default_state(context
);
1565 set_shaders(context
);
1569 set_tex_resource(context
, src_mesaformat
, src_bo
,
1570 src_width
, src_height
, src_pitch
, src_offset
);
1573 set_tex_sampler(context
);
1577 set_render_target(context
, dst_bo
, dst_mesaformat
,
1578 dst_pitch
, dst_width
, dst_height
, dst_offset
);
1581 set_scissors(context
, dst_x
, dst_y
, dst_x
+ dst_width
, dst_y
+ dst_height
);
1583 set_vb_data(context
, src_x
, src_y
, dst_x
, dst_y
, w
, h
, src_height
, flip_y
);
1584 /* Vertex buffer setup */
1586 set_vtx_resource(context
);
1593 r700SyncSurf(context
, dst_bo
, 0,
1594 RADEON_GEM_DOMAIN_VRAM
|RADEON_GEM_DOMAIN_GTT
,
1595 CB_ACTION_ENA_bit
| (1 << (id
+ 6)));
1598 r700WaitForIdleClean(context
);
1600 radeonFlush(context
->radeon
.glCtx
);