2 * Copyright (C) 2008-2010 Advanced Micro Devices, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 * Richard Li <RichardZ.Li@amd.com>, <richardradeon@gmail.com>
27 #include "main/imports.h"
28 #include "main/glheader.h"
29 #include "main/simple_list.h"
31 #include "r600_context.h"
32 #include "r600_cmdbuf.h"
34 #include "evergreen_tex.h"
35 #include "evergreen_chip.h"
36 #include "evergreen_off.h"
37 #include "evergreen_diff.h"
38 #include "evergreen_fragprog.h"
39 #include "evergreen_vertprog.h"
41 #include "radeon_mipmap_tree.h"
43 void evergreenCreateChip(context_t
*context
)
45 EVERGREEN_CHIP_CONTEXT
* evergreen
=
46 (EVERGREEN_CHIP_CONTEXT
*) CALLOC(sizeof(EVERGREEN_CHIP_CONTEXT
));
48 context
->pChip
= (void*)evergreen
;
51 #define EVERGREEN_ALLOC_STATE( ATOM, CHK, SZ, EMIT ) \
53 context->evergreen_atoms.ATOM.cmd_size = (SZ); \
54 context->evergreen_atoms.ATOM.cmd = NULL; \
55 context->evergreen_atoms.ATOM.name = #ATOM; \
56 context->evergreen_atoms.ATOM.idx = 0; \
57 context->evergreen_atoms.ATOM.check = check_##CHK; \
58 context->evergreen_atoms.ATOM.dirty = GL_FALSE; \
59 context->evergreen_atoms.ATOM.emit = (EMIT); \
60 context->radeon.hw.max_state_size += (SZ); \
61 insert_at_tail(&context->radeon.hw.atomlist, &context->evergreen_atoms.ATOM); \
65 static void evergreen_init_query_stateobj(radeonContextPtr radeon, int SZ)
67 radeon->query.queryobj.cmd_size = (SZ);
68 radeon->query.queryobj.cmd = NULL;
69 radeon->query.queryobj.name = "queryobj";
70 radeon->query.queryobj.idx = 0;
71 radeon->query.queryobj.check = check_queryobj;
72 radeon->query.queryobj.dirty = GL_FALSE;
73 radeon->query.queryobj.emit = r700SendQueryBegin;
74 radeon->hw.max_state_size += (SZ);
75 insert_at_tail(&radeon->hw.atomlist, &radeon->query.queryobj);
79 static int check_always(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
81 return atom
->cmd_size
;
84 static void evergreenSendTexState(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
86 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
87 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
89 struct evergreen_vertex_program
*vp
= context
->selected_vp
;
91 struct radeon_bo
*bo
= NULL
;
93 unsigned int nBorderSet
= 0;
94 BATCH_LOCALS(&context
->radeon
);
96 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
98 for (i
= 0; i
< R700_TEXTURE_NUMBERUNITS
; i
++) {
99 if (ctx
->Texture
.Unit
[i
]._ReallyEnabled
) {
100 radeonTexObj
*t
= evergreen
->textures
[i
];
104 if (!t
->image_override
) {
113 r700SyncSurf(context
, bo
,
114 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
,
115 0, TC_ACTION_ENA_bit
);
117 BEGIN_BATCH_NO_AUTOSTATE(10 + 4);
118 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 8));
120 if( (1<<i
) & vp
->r700AsmCode
.unVetTexBits
)
122 R600_OUT_BATCH((i
+ VERT_ATTRIB_MAX
+ EG_SQ_FETCH_RESOURCE_VS_OFFSET
) * FETCH_RESOURCE_STRIDE
);
126 R600_OUT_BATCH(i
* EG_FETCH_RESOURCE_STRIDE
);
129 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE0
);
130 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE1
);
131 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE2
);
132 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE3
);
133 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE4
);
134 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE5
);
135 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE6
);
136 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_RESOURCE7
);
138 R600_OUT_BATCH_RELOC(evergreen
->textures
[i
]->SQ_TEX_RESOURCE2
,
140 evergreen
->textures
[i
]->SQ_TEX_RESOURCE2
,
141 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
142 R600_OUT_BATCH_RELOC(evergreen
->textures
[i
]->SQ_TEX_RESOURCE3
,
144 evergreen
->textures
[i
]->SQ_TEX_RESOURCE3
,
145 RADEON_GEM_DOMAIN_GTT
|RADEON_GEM_DOMAIN_VRAM
, 0, 0);
150 BEGIN_BATCH_NO_AUTOSTATE(5);
151 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_SAMPLER
, 3));
153 if( (1<<i
) & vp
->r700AsmCode
.unVetTexBits
)
155 R600_OUT_BATCH((i
+SQ_TEX_SAMPLER_VS_OFFSET
) * 3);
159 R600_OUT_BATCH(i
* 3);
161 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_SAMPLER0
);
162 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_SAMPLER1
);
163 R600_OUT_BATCH(evergreen
->textures
[i
]->SQ_TEX_SAMPLER2
);
168 /* Tex border color */
171 BEGIN_BATCH_NO_AUTOSTATE(2 + 4);
172 R600_OUT_BATCH_REGSEQ(EG_TD_PS_BORDER_COLOR_RED
, 4);
173 R600_OUT_BATCH(evergreen
->textures
[i
]->TD_PS_SAMPLER0_BORDER_RED
);
174 R600_OUT_BATCH(evergreen
->textures
[i
]->TD_PS_SAMPLER0_BORDER_GREEN
);
175 R600_OUT_BATCH(evergreen
->textures
[i
]->TD_PS_SAMPLER0_BORDER_BLUE
);
176 R600_OUT_BATCH(evergreen
->textures
[i
]->TD_PS_SAMPLER0_BORDER_ALPHA
);
187 static int check_evergreen_tx(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
189 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
190 unsigned int i
, count
= 0;
191 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
193 for (i
= 0; i
< R700_TEXTURE_NUMBERUNITS
; i
++) {
194 if (ctx
->Texture
.Unit
[i
]._ReallyEnabled
) {
195 radeonTexObj
*t
= evergreen
->textures
[i
];
200 radeon_print(RADEON_STATE
, RADEON_TRACE
, "%s %d\n", __func__
, count
);
201 return count
* 37 + 6;
204 static void evergreenSendSQConfig(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
206 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
207 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
208 BATCH_LOCALS(&context
->radeon
);
209 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
211 BEGIN_BATCH_NO_AUTOSTATE(19);
213 EVERGREEN_OUT_BATCH_REGVAL(EG_SPI_CONFIG_CNTL
, evergreen
->evergreen_config
.SPI_CONFIG_CNTL
.u32All
);
214 EVERGREEN_OUT_BATCH_REGVAL(EG_SPI_CONFIG_CNTL_1
, evergreen
->evergreen_config
.SPI_CONFIG_CNTL_1
.u32All
);
216 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_CONFIG
, 4);
217 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_CONFIG
.u32All
);
218 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_GPR_RESOURCE_MGMT_1
.u32All
);
219 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_GPR_RESOURCE_MGMT_2
.u32All
);
220 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_GPR_RESOURCE_MGMT_3
.u32All
);
222 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_THREAD_RESOURCE_MGMT
, 5);
223 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_THREAD_RESOURCE_MGMT
.u32All
);
224 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_THREAD_RESOURCE_MGMT_2
.u32All
);
225 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_STACK_RESOURCE_MGMT_1
.u32All
);
226 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_STACK_RESOURCE_MGMT_2
.u32All
);
227 R600_OUT_BATCH(evergreen
->evergreen_config
.SQ_STACK_RESOURCE_MGMT_3
.u32All
);
234 extern int evergreen_getTypeSize(GLenum type
);
235 static void evergreenSetupVTXConstants(GLcontext
* ctx
,
237 StreamDesc
* pStreamDesc
)
239 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
240 struct radeon_aos
* paos
= (struct radeon_aos
*)pAos
;
241 unsigned int nVBsize
;
242 BATCH_LOCALS(&context
->radeon
);
244 unsigned int uSQ_VTX_CONSTANT_WORD0_0
;
245 unsigned int uSQ_VTX_CONSTANT_WORD1_0
;
246 unsigned int uSQ_VTX_CONSTANT_WORD2_0
= 0;
247 unsigned int uSQ_VTX_CONSTANT_WORD3_0
= 0;
248 unsigned int uSQ_VTX_CONSTANT_WORD7_0
= 0;
253 r700SyncSurf(context
, paos
->bo
, RADEON_GEM_DOMAIN_GTT
, 0, VC_ACTION_ENA_bit
);
255 if(0 == pStreamDesc
->stride
)
257 nVBsize
= paos
->count
* pStreamDesc
->size
* getTypeSize(pStreamDesc
->type
);
261 nVBsize
= (paos
->count
- 1) * pStreamDesc
->stride
262 + pStreamDesc
->size
* getTypeSize(pStreamDesc
->type
);
265 //uSQ_VTX_CONSTANT_WORD0_0
266 uSQ_VTX_CONSTANT_WORD0_0
= paos
->offset
;
268 //uSQ_VTX_CONSTANT_WORD1_0
269 uSQ_VTX_CONSTANT_WORD1_0
= nVBsize
;
271 //uSQ_VTX_CONSTANT_WORD2_0
272 SETfield(uSQ_VTX_CONSTANT_WORD2_0
,
274 SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift
,
275 SQ_VTX_CONSTANT_WORD2_0__STRIDE_mask
);
276 SETfield(uSQ_VTX_CONSTANT_WORD2_0
, GetSurfaceFormat(pStreamDesc
->type
, pStreamDesc
->size
, NULL
),
277 SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_shift
,
278 SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_mask
); // TODO : trace back api for initial data type, not only GL_FLOAT
279 SETfield(uSQ_VTX_CONSTANT_WORD2_0
, 0, BASE_ADDRESS_HI_shift
, BASE_ADDRESS_HI_mask
); // TODO
280 if(GL_TRUE
== pStreamDesc
->normalize
)
282 SETfield(uSQ_VTX_CONSTANT_WORD2_0
, SQ_NUM_FORMAT_NORM
,
283 SQ_VTX_CONSTANT_WORD2_0__NUM_FORMAT_ALL_shift
, SQ_VTX_CONSTANT_WORD2_0__NUM_FORMAT_ALL_mask
);
287 SETfield(uSQ_VTX_CONSTANT_WORD2_0
, SQ_NUM_FORMAT_SCALED
,
288 SQ_VTX_CONSTANT_WORD2_0__NUM_FORMAT_ALL_shift
, SQ_VTX_CONSTANT_WORD2_0__NUM_FORMAT_ALL_mask
);
290 if(1 == pStreamDesc
->_signed
)
292 SETbit(uSQ_VTX_CONSTANT_WORD2_0
, SQ_VTX_CONSTANT_WORD2_0__FORMAT_COMP_ALL_bit
);
295 //uSQ_VTX_CONSTANT_WORD3_0
296 SETfield(uSQ_VTX_CONSTANT_WORD3_0
, SQ_SEL_X
,
297 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_X_shift
,
298 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_X_mask
);
299 SETfield(uSQ_VTX_CONSTANT_WORD3_0
, SQ_SEL_Y
,
300 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Y_shift
,
301 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Y_mask
);
302 SETfield(uSQ_VTX_CONSTANT_WORD3_0
, SQ_SEL_Z
,
303 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Z_shift
,
304 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_Z_mask
);
305 SETfield(uSQ_VTX_CONSTANT_WORD3_0
, SQ_SEL_W
,
306 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_shift
,
307 EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_mask
);
309 //uSQ_VTX_CONSTANT_WORD7_0
310 SETfield(uSQ_VTX_CONSTANT_WORD7_0
, SQ_TEX_VTX_VALID_BUFFER
,
311 SQ_TEX_RESOURCE_WORD6_0__TYPE_shift
, SQ_TEX_RESOURCE_WORD6_0__TYPE_mask
);
313 BEGIN_BATCH_NO_AUTOSTATE(10 + 2);
315 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE
, 8));
316 R600_OUT_BATCH((pStreamDesc
->element
+ EG_SQ_FETCH_RESOURCE_VS_OFFSET
) * EG_FETCH_RESOURCE_STRIDE
);
317 R600_OUT_BATCH(uSQ_VTX_CONSTANT_WORD0_0
);
318 R600_OUT_BATCH(uSQ_VTX_CONSTANT_WORD1_0
);
319 R600_OUT_BATCH(uSQ_VTX_CONSTANT_WORD2_0
);
320 R600_OUT_BATCH(uSQ_VTX_CONSTANT_WORD3_0
);
324 R600_OUT_BATCH(uSQ_VTX_CONSTANT_WORD7_0
);
325 R600_OUT_BATCH_RELOC(uSQ_VTX_CONSTANT_WORD0_0
,
327 uSQ_VTX_CONSTANT_WORD0_0
,
328 RADEON_GEM_DOMAIN_GTT
, 0, 0);
334 static int check_evergreen_vtx(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
336 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
337 int count
= context
->radeon
.tcl
.aos_count
* 12;
342 radeon_print(RADEON_STATE
, RADEON_TRACE
, "%s %d\n", __func__
, count
);
346 static void evergreenSendVTX(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
348 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
349 struct evergreen_vertex_program
*vp
= (struct evergreen_vertex_program
*)(context
->selected_vp
);
350 unsigned int i
, j
= 0;
351 BATCH_LOCALS(&context
->radeon
);
352 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
354 if (context
->radeon
.tcl
.aos_count
== 0)
357 BEGIN_BATCH_NO_AUTOSTATE(6);
358 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
359 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
362 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST
, 1));
363 R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC
- ASIC_CTL_CONST_BASE_INDEX
);
368 for(i
=0; i
<VERT_ATTRIB_MAX
; i
++) {
369 if(vp
->mesa_program
->Base
.InputsRead
& (1 << i
))
371 evergreenSetupVTXConstants(ctx
,
372 (void*)(&context
->radeon
.tcl
.aos
[j
]),
373 &(context
->stream_desc
[j
]));
378 static void evergreenSendPA(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
380 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
381 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
382 BATCH_LOCALS(&context
->radeon
);
383 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
386 BEGIN_BATCH_NO_AUTOSTATE(3);
387 EVERGREEN_OUT_BATCH_REGVAL(EG_PA_SU_HARDWARE_SCREEN_OFFSET
, 0);
390 BEGIN_BATCH_NO_AUTOSTATE(22);
391 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_SCREEN_SCISSOR_TL
, 2);
392 R600_OUT_BATCH(evergreen
->PA_SC_SCREEN_SCISSOR_TL
.u32All
);
393 R600_OUT_BATCH(evergreen
->PA_SC_SCREEN_SCISSOR_BR
.u32All
);
395 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_WINDOW_OFFSET
, 12);
396 R600_OUT_BATCH(evergreen
->PA_SC_WINDOW_OFFSET
.u32All
);
397 R600_OUT_BATCH(evergreen
->PA_SC_WINDOW_SCISSOR_TL
.u32All
);
398 R600_OUT_BATCH(evergreen
->PA_SC_WINDOW_SCISSOR_BR
.u32All
);
399 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_RULE
.u32All
);
400 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_0_TL
.u32All
);
401 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_0_BR
.u32All
);
402 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_1_TL
.u32All
);
403 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_1_BR
.u32All
);
404 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_2_TL
.u32All
);
405 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_2_BR
.u32All
);
406 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_3_TL
.u32All
);
407 R600_OUT_BATCH(evergreen
->PA_SC_CLIPRECT_3_BR
.u32All
);
409 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_GENERIC_SCISSOR_TL
, 2);
410 R600_OUT_BATCH(evergreen
->PA_SC_GENERIC_SCISSOR_TL
.u32All
);
411 R600_OUT_BATCH(evergreen
->PA_SC_GENERIC_SCISSOR_BR
.u32All
);
414 BEGIN_BATCH_NO_AUTOSTATE(3);
415 EVERGREEN_OUT_BATCH_REGVAL(EG_PA_SC_EDGERULE
, evergreen
->PA_SC_EDGERULE
.u32All
);
419 BEGIN_BATCH_NO_AUTOSTATE(18);
420 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_VPORT_SCISSOR_0_TL
, 4);
421 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_SCISSOR_0_TL
.u32All
);
422 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_SCISSOR_0_BR
.u32All
);
423 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_SCISSOR_0_TL
.u32All
);
424 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_SCISSOR_0_BR
.u32All
);
426 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_VPORT_ZMIN_0
, 2);
427 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_ZMIN_0
.u32All
);
428 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_SC_VPORT_ZMAX_0
.u32All
);
430 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_CL_VPORT_XSCALE
, 6);
431 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_XSCALE
.u32All
);
432 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_XOFFSET
.u32All
);
433 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_YSCALE
.u32All
);
434 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_YOFFSET
.u32All
);
435 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_ZSCALE
.u32All
);
436 R600_OUT_BATCH(evergreen
->viewport
[id
].PA_CL_VPORT_ZOFFSET
.u32All
);
440 for (id
= 0; id
< EVERGREEN_MAX_UCP
; id
++) {
441 if (evergreen
->ucp
[id
].enabled
) {
442 BEGIN_BATCH_NO_AUTOSTATE(6);
443 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_CL_UCP_0_X
+ (4 * id
), 4);
444 R600_OUT_BATCH(evergreen
->ucp
[id
].PA_CL_UCP_0_X
.u32All
);
445 R600_OUT_BATCH(evergreen
->ucp
[id
].PA_CL_UCP_0_Y
.u32All
);
446 R600_OUT_BATCH(evergreen
->ucp
[id
].PA_CL_UCP_0_Z
.u32All
);
447 R600_OUT_BATCH(evergreen
->ucp
[id
].PA_CL_UCP_0_W
.u32All
);
452 BEGIN_BATCH_NO_AUTOSTATE(42);
453 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_CL_CLIP_CNTL
, 5);
454 R600_OUT_BATCH(evergreen
->PA_CL_CLIP_CNTL
.u32All
);
455 R600_OUT_BATCH(evergreen
->PA_SU_SC_MODE_CNTL
.u32All
);
456 R600_OUT_BATCH(evergreen
->PA_CL_VTE_CNTL
.u32All
);
457 R600_OUT_BATCH(evergreen
->PA_CL_VS_OUT_CNTL
.u32All
);
458 R600_OUT_BATCH(evergreen
->PA_CL_NANINF_CNTL
.u32All
);
460 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SU_POINT_SIZE
, 3);
461 R600_OUT_BATCH(evergreen
->PA_SU_POINT_SIZE
.u32All
);
462 R600_OUT_BATCH(evergreen
->PA_SU_POINT_MINMAX
.u32All
);
463 R600_OUT_BATCH(evergreen
->PA_SU_LINE_CNTL
.u32All
);
465 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_MODE_CNTL_0
, 2);
466 R600_OUT_BATCH(evergreen
->PA_SC_MODE_CNTL_0
.u32All
);
467 R600_OUT_BATCH(evergreen
->PA_SC_MODE_CNTL_1
.u32All
);
469 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SU_POLY_OFFSET_DB_FMT_CNTL
, 6);
470 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_DB_FMT_CNTL
.u32All
);
471 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_CLAMP
.u32All
);
472 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_FRONT_SCALE
.u32All
);
473 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_FRONT_OFFSET
.u32All
);
474 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_BACK_SCALE
.u32All
);
475 R600_OUT_BATCH(evergreen
->PA_SU_POLY_OFFSET_BACK_OFFSET
.u32All
);
477 EVERGREEN_OUT_BATCH_REGSEQ(EG_PA_SC_LINE_CNTL
, 16);
478 R600_OUT_BATCH(evergreen
->PA_SC_LINE_CNTL
.u32All
);
479 R600_OUT_BATCH(evergreen
->PA_SC_AA_CONFIG
.u32All
);
480 R600_OUT_BATCH(evergreen
->PA_SU_VTX_CNTL
.u32All
);
481 R600_OUT_BATCH(evergreen
->PA_CL_GB_VERT_CLIP_ADJ
.u32All
);
482 R600_OUT_BATCH(evergreen
->PA_CL_GB_VERT_DISC_ADJ
.u32All
);
483 R600_OUT_BATCH(evergreen
->PA_CL_GB_HORZ_CLIP_ADJ
.u32All
);
484 R600_OUT_BATCH(evergreen
->PA_CL_GB_HORZ_DISC_ADJ
.u32All
);
485 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_0
.u32All
);
486 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_1
.u32All
);
487 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_2
.u32All
);
488 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_3
.u32All
);
489 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_4
.u32All
);
490 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_5
.u32All
);
491 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_6
.u32All
);
492 R600_OUT_BATCH(evergreen
->PA_SC_AA_SAMPLE_LOCS_7
.u32All
);
493 R600_OUT_BATCH(evergreen
->PA_SC_AA_MASK
.u32All
);
499 static void evergreenSendTP(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
502 context_t *context = EVERGREEN_CONTEXT(ctx);
503 EVERGREEN_CHIP_CONTEXT *evergreen = GET_EVERGREEN_CHIP(context);
504 BATCH_LOCALS(&context->radeon);
505 radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s\n", __func__);
511 static void evergreenSendPSresource(GLcontext
*ctx
)
513 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
514 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
515 struct radeon_bo
* pbo
;
517 struct radeon_bo
* pbo_const
;
519 BATCH_LOCALS(&context
->radeon
);
520 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
522 pbo
= (struct radeon_bo
*)evergreenGetActiveFpShaderBo(GL_CONTEXT(context
));
527 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
529 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
530 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_START_PS
, 1);
531 R600_OUT_BATCH(evergreen
->ps
.SQ_PGM_START_PS
.u32All
);
532 R600_OUT_BATCH_RELOC(evergreen
->ps
.SQ_PGM_START_PS
.u32All
,
534 evergreen
->ps
.SQ_PGM_START_PS
.u32All
,
535 RADEON_GEM_DOMAIN_GTT
, 0, 0);
538 BEGIN_BATCH_NO_AUTOSTATE(3);
539 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_LOOP_CONST_0
, 0x01000FFF);
542 pbo_const
= (struct radeon_bo
*)(context
->fp_Constbo
);
544 if(NULL
!= pbo_const
)
546 r700SyncSurf(context
, pbo_const
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
548 BEGIN_BATCH_NO_AUTOSTATE(3);
550 if(evergreen
->ps
.num_consts
< 4)
552 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_ALU_CONST_BUFFER_SIZE_PS_0
, 1);
556 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_ALU_CONST_BUFFER_SIZE_PS_0
, (evergreen
->ps
.num_consts
* 4)/16 );
561 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
562 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_ALU_CONST_CACHE_PS_0
, 1);
563 R600_OUT_BATCH(context
->fp_bo_offset
>> 8);
564 R600_OUT_BATCH_RELOC(0,
567 RADEON_GEM_DOMAIN_GTT
, 0, 0);
574 static void evergreenSendVSresource(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
576 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
577 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
578 struct radeon_bo
* pbo
;
580 struct radeon_bo
* pbo_const
;
582 BATCH_LOCALS(&context
->radeon
);
583 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
585 pbo
= (struct radeon_bo
*)evergreenGetActiveVpShaderBo(GL_CONTEXT(context
));
590 r700SyncSurf(context
, pbo
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
592 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
593 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_START_VS
, 1);
594 R600_OUT_BATCH(evergreen
->vs
.SQ_PGM_START_VS
.u32All
);
595 R600_OUT_BATCH_RELOC(evergreen
->vs
.SQ_PGM_START_VS
.u32All
,
597 evergreen
->vs
.SQ_PGM_START_VS
.u32All
,
598 RADEON_GEM_DOMAIN_GTT
, 0, 0);
601 BEGIN_BATCH_NO_AUTOSTATE(3);
602 EVERGREEN_OUT_BATCH_REGVAL((EG_SQ_LOOP_CONST_0
+ 32*1), 0x0100000F); //consts == 1
603 //EVERGREEN_OUT_BATCH_REGVAL((EG_SQ_LOOP_CONST_0 + (SQ_LOOP_CONST_vs<2)), 0x0100000F);
606 pbo_const
= (struct radeon_bo
*)(context
->vp_Constbo
);
608 if(NULL
!= pbo_const
)
610 r700SyncSurf(context
, pbo_const
, RADEON_GEM_DOMAIN_GTT
, 0, SH_ACTION_ENA_bit
);
612 BEGIN_BATCH_NO_AUTOSTATE(3);
614 if(evergreen
->vs
.num_consts
< 4)
616 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_ALU_CONST_BUFFER_SIZE_VS_0
, 1);
620 EVERGREEN_OUT_BATCH_REGVAL(EG_SQ_ALU_CONST_BUFFER_SIZE_VS_0
, (evergreen
->vs
.num_consts
* 4)/16 );
625 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
626 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_ALU_CONST_CACHE_VS_0
, 1);
627 R600_OUT_BATCH(context
->vp_bo_offset
>> 8);
628 R600_OUT_BATCH_RELOC(0,
631 RADEON_GEM_DOMAIN_GTT
, 0, 0);
638 static void evergreenSendSQ(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
640 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
641 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
642 BATCH_LOCALS(&context
->radeon
);
643 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
645 evergreenSendPSresource(ctx
); //16 entries now
647 BEGIN_BATCH_NO_AUTOSTATE(77);
650 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_VTX_SEMANTIC_0
, 32);
651 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_0
.u32All
); //// // = 0x28380, // SAME
652 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_1
.u32All
); //// // = 0x28384, // SAME
653 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_2
.u32All
); //// // = 0x28388, // SAME
654 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_3
.u32All
); //// // = 0x2838C, // SAME
655 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_4
.u32All
); //// // = 0x28390, // SAME
656 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_5
.u32All
); //// // = 0x28394, // SAME
657 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_6
.u32All
); //// // = 0x28398, // SAME
658 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_7
.u32All
); //// // = 0x2839C, // SAME
659 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_8
.u32All
); //// // = 0x283A0, // SAME
660 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_9
.u32All
); //// // = 0x283A4, // SAME
661 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_10
.u32All
); //// // = 0x283A8, // SAME
662 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_11
.u32All
); //// // = 0x283AC, // SAME
663 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_12
.u32All
); //// // = 0x283B0, // SAME
664 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_13
.u32All
); //// // = 0x283B4, // SAME
665 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_14
.u32All
); //// // = 0x283B8, // SAME
666 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_15
.u32All
); //// // = 0x283BC, // SAME
667 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_16
.u32All
); //// // = 0x283C0, // SAME
668 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_17
.u32All
); //// // = 0x283C4, // SAME
669 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_18
.u32All
); //// // = 0x283C8, // SAME
670 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_19
.u32All
); //// // = 0x283CC, // SAME
671 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_20
.u32All
); //// // = 0x283D0, // SAME
672 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_21
.u32All
); //// // = 0x283D4, // SAME
673 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_22
.u32All
); //// // = 0x283D8, // SAME
674 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_23
.u32All
); //// // = 0x283DC, // SAME
675 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_24
.u32All
); //// // = 0x283E0, // SAME
676 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_25
.u32All
); //// // = 0x283E4, // SAME
677 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_26
.u32All
); //// // = 0x283E8, // SAME
678 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_27
.u32All
); //// // = 0x283EC, // SAME
679 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_28
.u32All
); //// // = 0x283F0, // SAME
680 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_29
.u32All
); //// // = 0x283F4, // SAME
681 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_30
.u32All
); //// // = 0x283F8, // SAME
682 R600_OUT_BATCH(evergreen
->SQ_VTX_SEMANTIC_31
.u32All
); //// // = 0x283FC, // SAME
686 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_DYN_GPR_RESOURCE_LIMIT_1
, 1);
687 R600_OUT_BATCH(evergreen
->SQ_DYN_GPR_RESOURCE_LIMIT_1
.u32All
);//// // = 0x28838, //
690 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_PS
, 3);
691 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_PS
.u32All
); //// // = 0x28844, // DIFF 0x28850
692 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_PS
.u32All
); //// // = 0x28848, //
693 R600_OUT_BATCH(evergreen
->SQ_PGM_EXPORTS_PS
.u32All
); //// // = 0x2884C, // SAME 0x28854
696 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_VS
, 2);
697 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_VS
.u32All
);//// // = 0x28860, // DIFF 0x28868
698 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_VS
.u32All
); //// // = 0x28864, //
701 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_GS
, 2);
703 R600_OUT_BATCH(evergreen->SQ_PGM_START_GS.u32All); //// // = 0x28874, // SAME 0x2886C
705 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_GS
.u32All
); //// // = 0x28878, // DIFF 0x2887C
706 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_GS
.u32All
); //// // = 0x2887C, //
709 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_ES
, 2);
711 R600_OUT_BATCH(evergreen->SQ_PGM_START_ES.u32All); //// // = 0x2888C, // SAME 0x28880
713 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_ES
.u32All
); //// // = 0x28890, // DIFF
714 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_ES
.u32All
); //// // = 0x28894, //
717 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_FS
, 1);
719 R600_OUT_BATCH(evergreen->SQ_PGM_START_FS.u32All); //// // = 0x288A4, // SAME 0x28894
721 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_FS
.u32All
); //// // = 0x288A8, // DIFF 0x288A4
724 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_2_HS
, 1);
725 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_HS
.u32All
);//// // = 0x288C0, //
728 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_PGM_RESOURCES_2_LS
, 1);
729 R600_OUT_BATCH(evergreen
->SQ_PGM_RESOURCES_2_LS
.u32All
); //// // = 0x288D8, //
732 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_LDS_ALLOC_PS
, 1);
733 R600_OUT_BATCH(evergreen
->SQ_LDS_ALLOC_PS
.u32All
); //// // = 0x288EC, //
736 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_ESGS_RING_ITEMSIZE
, 6);
737 R600_OUT_BATCH(evergreen
->SQ_ESGS_RING_ITEMSIZE
.u32All
); //// // = 0x28900, // SAME 0x288A8
738 R600_OUT_BATCH(evergreen
->SQ_GSVS_RING_ITEMSIZE
.u32All
); //// // = 0x28904, // SAME 0x288AC
739 R600_OUT_BATCH(evergreen
->SQ_ESTMP_RING_ITEMSIZE
.u32All
); //// // = 0x28908, // SAME 0x288B0
740 R600_OUT_BATCH(evergreen
->SQ_GSTMP_RING_ITEMSIZE
.u32All
); //// // = 0x2890C, // SAME 0x288B4
741 R600_OUT_BATCH(evergreen
->SQ_VSTMP_RING_ITEMSIZE
.u32All
); //// // = 0x28910, // SAME 0x288B8
742 R600_OUT_BATCH(evergreen
->SQ_PSTMP_RING_ITEMSIZE
.u32All
); //// // = 0x28914, // SAME 0x288BC
745 EVERGREEN_OUT_BATCH_REGSEQ(EG_SQ_GS_VERT_ITEMSIZE
, 1);
746 R600_OUT_BATCH(evergreen
->SQ_GS_VERT_ITEMSIZE
.u32All
); //// // = 0x2891C, // SAME 0x288C8
753 static void evergreenSendSPI(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
755 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
756 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
757 BATCH_LOCALS(&context
->radeon
);
758 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
760 BEGIN_BATCH_NO_AUTOSTATE(59);
762 EVERGREEN_OUT_BATCH_REGSEQ(EG_SPI_VS_OUT_ID_0
, 10);
763 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_0
.u32All
);
764 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_1
.u32All
);
765 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_2
.u32All
);
766 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_3
.u32All
);
767 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_4
.u32All
);
768 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_5
.u32All
);
769 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_6
.u32All
);
770 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_7
.u32All
);
771 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_8
.u32All
);
772 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_ID_9
.u32All
);
774 EVERGREEN_OUT_BATCH_REGSEQ(EG_SPI_PS_INPUT_CNTL_0
, 45);
775 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[0].u32All
);
776 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[1].u32All
);
777 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[2].u32All
);
778 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[3].u32All
);
779 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[4].u32All
);
780 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[5].u32All
);
781 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[6].u32All
);
782 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[7].u32All
);
783 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[8].u32All
);
784 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[9].u32All
);
785 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[10].u32All
);
786 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[11].u32All
);
787 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[12].u32All
);
788 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[13].u32All
);
789 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[14].u32All
);
790 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[15].u32All
);
791 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[16].u32All
);
792 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[17].u32All
);
793 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[18].u32All
);
794 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[19].u32All
);
795 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[20].u32All
);
796 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[21].u32All
);
797 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[22].u32All
);
798 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[23].u32All
);
799 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[24].u32All
);
800 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[25].u32All
);
801 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[26].u32All
);
802 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[27].u32All
);
803 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[28].u32All
);
804 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[29].u32All
);
805 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[30].u32All
);
806 R600_OUT_BATCH(evergreen
->SPI_PS_INPUT_CNTL
[31].u32All
);
807 R600_OUT_BATCH(evergreen
->SPI_VS_OUT_CONFIG
.u32All
);
808 R600_OUT_BATCH(evergreen
->SPI_THREAD_GROUPING
.u32All
);
809 R600_OUT_BATCH(evergreen
->SPI_PS_IN_CONTROL_0
.u32All
);
810 R600_OUT_BATCH(evergreen
->SPI_PS_IN_CONTROL_1
.u32All
);
811 R600_OUT_BATCH(evergreen
->SPI_INTERP_CONTROL_0
.u32All
);
812 R600_OUT_BATCH(evergreen
->SPI_INPUT_Z
.u32All
);
813 R600_OUT_BATCH(evergreen
->SPI_FOG_CNTL
.u32All
);
814 R600_OUT_BATCH(evergreen
->SPI_BARYC_CNTL
.u32All
);
815 R600_OUT_BATCH(evergreen
->SPI_PS_IN_CONTROL_2
.u32All
);
816 R600_OUT_BATCH(evergreen
->SPI_COMPUTE_INPUT_CNTL
.u32All
);
817 R600_OUT_BATCH(evergreen
->SPI_COMPUTE_NUM_THREAD_X
.u32All
);
818 R600_OUT_BATCH(evergreen
->SPI_COMPUTE_NUM_THREAD_Y
.u32All
);
819 R600_OUT_BATCH(evergreen
->SPI_COMPUTE_NUM_THREAD_Z
.u32All
);
825 static void evergreenSendSX(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
827 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
828 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
829 BATCH_LOCALS(&context
->radeon
);
830 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
832 BEGIN_BATCH_NO_AUTOSTATE(9);
834 EVERGREEN_OUT_BATCH_REGVAL(EG_SX_MISC
, evergreen
->SX_MISC
.u32All
);
835 EVERGREEN_OUT_BATCH_REGVAL(EG_SX_ALPHA_TEST_CONTROL
, evergreen
->SX_ALPHA_TEST_CONTROL
.u32All
);
836 EVERGREEN_OUT_BATCH_REGVAL(EG_SX_ALPHA_REF
, evergreen
->SX_ALPHA_REF
.u32All
);
843 static void evergreenSetDepthTarget(context_t
*context
)
845 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
846 struct radeon_renderbuffer
*rrb
;
847 unsigned int nPitchInPixel
;
849 rrb
= radeon_get_depthbuffer(&context
->radeon
);
855 EVERGREEN_STATECHANGE(context
, db
);
857 evergreen
->DB_DEPTH_SIZE
.u32All
= 0;
859 SETfield(evergreen
->DB_DEPTH_SIZE
.u32All
, (nPitchInPixel
/8)-1,
860 EG_DB_DEPTH_SIZE__PITCH_TILE_MAX_shift
,
861 EG_DB_DEPTH_SIZE__PITCH_TILE_MAX_mask
);
862 SETfield(evergreen
->DB_DEPTH_SIZE
.u32All
, (context
->radeon
.radeonScreen
->driScreen
->fbHeight
/8)-1,
863 EG_DB_DEPTH_SIZE__HEIGHT_TILE_MAX_shift
,
864 EG_DB_DEPTH_SIZE__HEIGHT_TILE_MAX_mask
);
865 evergreen
->DB_DEPTH_SLICE
.u32All
= ( (nPitchInPixel
* context
->radeon
.radeonScreen
->driScreen
->fbHeight
)/64 )-1;
869 SETfield(evergreen
->DB_Z_INFO
.u32All
, DEPTH_8_24
,
870 EG_DB_Z_INFO__FORMAT_shift
,
871 EG_DB_Z_INFO__FORMAT_mask
);
875 SETfield(evergreen
->DB_Z_INFO
.u32All
, DEPTH_16
,
876 EG_DB_Z_INFO__FORMAT_shift
,
877 EG_DB_Z_INFO__FORMAT_mask
);
879 SETfield(evergreen
->DB_Z_INFO
.u32All
, ARRAY_1D_TILED_THIN1
,
880 EG_DB_Z_INFO__ARRAY_MODE_shift
,
881 EG_DB_Z_INFO__ARRAY_MODE_mask
);
884 static void evergreenSendDB(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
886 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
887 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
888 struct radeon_renderbuffer
*rrb
;
889 BATCH_LOCALS(&context
->radeon
);
890 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
892 evergreenSetDepthTarget(context
);
895 BEGIN_BATCH_NO_AUTOSTATE(7);
896 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_RENDER_CONTROL
, 5);
897 R600_OUT_BATCH(evergreen
->DB_RENDER_CONTROL
.u32All
);
898 R600_OUT_BATCH(evergreen
->DB_COUNT_CONTROL
.u32All
);
899 R600_OUT_BATCH(evergreen
->DB_DEPTH_VIEW
.u32All
);
900 R600_OUT_BATCH(evergreen
->DB_RENDER_OVERRIDE
.u32All
);
901 R600_OUT_BATCH(evergreen
->DB_RENDER_OVERRIDE2
.u32All
);
903 R600_OUT_BATCH(evergreen->DB_HTILE_DATA_BASE.u32All);
908 BEGIN_BATCH_NO_AUTOSTATE(4);
909 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_STENCIL_CLEAR
, 2);
910 R600_OUT_BATCH(evergreen
->DB_STENCIL_CLEAR
.u32All
);
911 R600_OUT_BATCH(evergreen
->DB_DEPTH_CLEAR
.u32All
);
915 BEGIN_BATCH_NO_AUTOSTATE(4);
916 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_DEPTH_SIZE
, 2);
917 R600_OUT_BATCH(evergreen
->DB_DEPTH_SIZE
.u32All
);
918 R600_OUT_BATCH(evergreen
->DB_DEPTH_SLICE
.u32All
);
922 BEGIN_BATCH_NO_AUTOSTATE(3);
923 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_DEPTH_CONTROL
, evergreen
->DB_DEPTH_CONTROL
.u32All
);
927 BEGIN_BATCH_NO_AUTOSTATE(3);
928 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_SHADER_CONTROL
, evergreen
->DB_SHADER_CONTROL
.u32All
);
932 BEGIN_BATCH_NO_AUTOSTATE(5);
933 EVERGREEN_OUT_BATCH_REGSEQ(EG_DB_SRESULTS_COMPARE_STATE0
, 3);
934 R600_OUT_BATCH(evergreen
->DB_SRESULTS_COMPARE_STATE0
.u32All
);
935 R600_OUT_BATCH(evergreen
->DB_SRESULTS_COMPARE_STATE1
.u32All
);
936 R600_OUT_BATCH(evergreen
->DB_PRELOAD_CONTROL
.u32All
);
940 BEGIN_BATCH_NO_AUTOSTATE(3);
941 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_ALPHA_TO_MASK
, evergreen
->DB_ALPHA_TO_MASK
.u32All
);
944 rrb
= radeon_get_depthbuffer(&context
->radeon
);
945 if( (rrb
!= NULL
) && (rrb
->bo
!= NULL
) )
948 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
949 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_Z_INFO
, evergreen
->DB_Z_INFO
.u32All
);
950 R600_OUT_BATCH_RELOC(evergreen
->DB_Z_INFO
.u32All
,
952 evergreen
->DB_Z_INFO
.u32All
,
953 0, RADEON_GEM_DOMAIN_VRAM
, 0);
957 if((evergreen
->DB_DEPTH_CONTROL
.u32All
& Z_ENABLE_bit
) > 0)
959 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
960 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_Z_READ_BASE
, evergreen
->DB_Z_READ_BASE
.u32All
);
961 R600_OUT_BATCH_RELOC(evergreen
->DB_Z_READ_BASE
.u32All
,
963 evergreen
->DB_Z_READ_BASE
.u32All
,
964 0, RADEON_GEM_DOMAIN_VRAM
, 0);
968 if((evergreen
->DB_DEPTH_CONTROL
.u32All
& Z_WRITE_ENABLE_bit
) > 0)
970 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
971 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_Z_WRITE_BASE
, evergreen
->DB_Z_READ_BASE
.u32All
);
972 R600_OUT_BATCH_RELOC(evergreen
->DB_Z_WRITE_BASE
.u32All
,
974 evergreen
->DB_Z_WRITE_BASE
.u32All
,
975 0, RADEON_GEM_DOMAIN_VRAM
, 0);
982 rrb = radeon_get_renderbuffer(ctx->DrawBuffer, BUFFER_STENCIL);
984 if((rrb != NULL) && (rrb->bo != NULL))
987 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
988 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_STENCIL_INFO, evergreen->DB_Z_INFO.u32All);
989 R600_OUT_BATCH_RELOC(evergreen->DB_STENCIL_INFO.u32All,
991 evergreen->DB_STENCIL_INFO.u32All,
992 0, RADEON_GEM_DOMAIN_VRAM, 0);
996 if((evergreen->DB_DEPTH_CONTROL.u32All & STENCIL_ENABLE_bit) > 0)
998 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
999 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_STENCIL_READ_BASE, evergreen->DB_STENCIL_READ_BASE.u32All);
1000 R600_OUT_BATCH_RELOC(evergreen->DB_STENCIL_READ_BASE.u32All,
1002 evergreen->DB_STENCIL_READ_BASE.u32All,
1003 0, RADEON_GEM_DOMAIN_VRAM, 0);
1006 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
1007 EVERGREEN_OUT_BATCH_REGVAL(EG_DB_STENCIL_WRITE_BASE, evergreen->DB_STENCIL_WRITE_BASE.u32All);
1008 R600_OUT_BATCH_RELOC(evergreen->DB_STENCIL_WRITE_BASE.u32All,
1010 evergreen->DB_STENCIL_WRITE_BASE.u32All,
1011 0, RADEON_GEM_DOMAIN_VRAM, 0);
1020 static void evergreenSetRenderTarget(context_t
*context
, int id
)
1022 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
1024 struct radeon_renderbuffer
*rrb
;
1025 unsigned int nPitchInPixel
;
1027 rrb
= radeon_get_colorbuffer(&context
->radeon
);
1028 if (!rrb
|| !rrb
->bo
) {
1032 EVERGREEN_STATECHANGE(context
, cb
);
1035 evergreen
->render_target
[id
].CB_COLOR0_BASE
.u32All
= context
->radeon
.state
.color
.draw_offset
/ 256;
1038 nPitchInPixel
= rrb
->pitch
/rrb
->cpp
;
1040 SETfield(evergreen
->render_target
[id
].CB_COLOR0_PITCH
.u32All
, (nPitchInPixel
/8)-1,
1041 EG_CB_COLOR0_PITCH__TILE_MAX_shift
,
1042 EG_CB_COLOR0_PITCH__TILE_MAX_mask
);
1045 SETfield(evergreen
->render_target
[id
].CB_COLOR0_SLICE
.u32All
,
1046 //( (nPitchInPixel * context->radeon.radeonScreen->driScreen->fbHeight)/64 )-1,
1047 ( (nPitchInPixel
* 240)/64 )-1,
1048 EG_CB_COLOR0_SLICE__TILE_MAX_shift
,
1049 EG_CB_COLOR0_SLICE__TILE_MAX_mask
);
1051 /* CB_COLOR0_ATTRIB */ /* TODO : for z clear, this should be set to 0 */
1052 SETbit(evergreen
->render_target
[id
].CB_COLOR0_ATTRIB
.u32All
,
1053 EG_CB_COLOR0_ATTRIB__NON_DISP_TILING_ORDER_bit
);
1055 /* CB_COLOR0_INFO */
1056 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1058 EG_CB_COLOR0_INFO__ENDIAN_shift
,
1059 EG_CB_COLOR0_INFO__ENDIAN_mask
);
1060 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1061 ARRAY_LINEAR_GENERAL
,
1062 EG_CB_COLOR0_INFO__ARRAY_MODE_shift
,
1063 EG_CB_COLOR0_INFO__ARRAY_MODE_mask
);
1066 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1068 EG_CB_COLOR0_INFO__FORMAT_shift
,
1069 EG_CB_COLOR0_INFO__FORMAT_mask
);
1070 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1071 SWAP_ALT
, //SWAP_STD
1072 EG_CB_COLOR0_INFO__COMP_SWAP_shift
,
1073 EG_CB_COLOR0_INFO__COMP_SWAP_mask
);
1077 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1079 EG_CB_COLOR0_INFO__FORMAT_shift
,
1080 EG_CB_COLOR0_INFO__FORMAT_mask
);
1081 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1083 EG_CB_COLOR0_INFO__COMP_SWAP_shift
,
1084 EG_CB_COLOR0_INFO__COMP_SWAP_mask
);
1086 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1088 EG_CB_COLOR0_INFO__SOURCE_FORMAT_shift
,
1089 EG_CB_COLOR0_INFO__SOURCE_FORMAT_mask
);
1090 SETbit(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1091 EG_CB_COLOR0_INFO__BLEND_CLAMP_bit
);
1092 SETfield(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1094 EG_CB_COLOR0_INFO__NUMBER_TYPE_shift
,
1095 EG_CB_COLOR0_INFO__NUMBER_TYPE_mask
);
1097 evergreen
->render_target
[id
].CB_COLOR0_VIEW
.u32All
= 0;
1098 evergreen
->render_target
[id
].CB_COLOR0_CMASK
.u32All
= 0;
1099 evergreen
->render_target
[id
].CB_COLOR0_FMASK
.u32All
= 0;
1100 evergreen
->render_target
[id
].CB_COLOR0_FMASK_SLICE
.u32All
= 0;
1102 evergreen
->render_target
[id
].enabled
= GL_TRUE
;
1105 static void evergreenSendCB(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
1107 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
1108 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
1109 struct radeon_renderbuffer
*rrb
;
1110 BATCH_LOCALS(&context
->radeon
);
1112 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
1114 rrb
= radeon_get_colorbuffer(&context
->radeon
);
1115 if (!rrb
|| !rrb
->bo
) {
1119 evergreenSetRenderTarget(context
, 0);
1121 if (!evergreen
->render_target
[id
].enabled
)
1124 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
1125 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_BASE
+ (4 * id
), 1);
1126 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_BASE
.u32All
);
1127 R600_OUT_BATCH_RELOC(evergreen
->render_target
[id
].CB_COLOR0_BASE
.u32All
,
1129 evergreen
->render_target
[id
].CB_COLOR0_BASE
.u32All
,
1130 0, RADEON_GEM_DOMAIN_VRAM
, 0);
1133 BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
1134 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_COLOR0_INFO
, evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
);
1135 R600_OUT_BATCH_RELOC(evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1137 evergreen
->render_target
[id
].CB_COLOR0_INFO
.u32All
,
1138 0, RADEON_GEM_DOMAIN_VRAM
, 0);
1141 BEGIN_BATCH_NO_AUTOSTATE(5);
1142 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_PITCH
, 3);
1143 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_PITCH
.u32All
);
1144 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_SLICE
.u32All
);
1145 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_VIEW
.u32All
);
1148 BEGIN_BATCH_NO_AUTOSTATE(4);
1149 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_ATTRIB
, 2);
1150 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_ATTRIB
.u32All
);
1151 R600_OUT_BATCH(evergreen
->render_target
[id
].CB_COLOR0_DIM
.u32All
);
1153 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_CMASK.u32All);
1154 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_CMASK_SLICE.u32All);
1155 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_FMASK.u32All);
1156 R600_OUT_BATCH(evergreen->render_target[id].CB_COLOR0_FMASK_SLICE.u32All);
1160 BEGIN_BATCH_NO_AUTOSTATE(4);
1161 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_TARGET_MASK
, 2);
1162 R600_OUT_BATCH(evergreen
->CB_TARGET_MASK
.u32All
);
1163 R600_OUT_BATCH(evergreen
->CB_SHADER_MASK
.u32All
);
1166 BEGIN_BATCH_NO_AUTOSTATE(5);
1167 EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_BLEND_RED
, 3);
1168 R600_OUT_BATCH(evergreen
->CB_BLEND_RED
.u32All
);
1169 R600_OUT_BATCH(evergreen
->CB_BLEND_GREEN
.u32All
);
1170 R600_OUT_BATCH(evergreen
->CB_BLEND_BLUE
.u32All
);
1173 BEGIN_BATCH_NO_AUTOSTATE(9);
1174 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_BLEND_ALPHA
, evergreen
->CB_BLEND_ALPHA
.u32All
);
1175 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_BLEND0_CONTROL
, evergreen
->CB_BLEND0_CONTROL
.u32All
);
1176 EVERGREEN_OUT_BATCH_REGVAL(EG_CB_COLOR_CONTROL
, evergreen
->CB_COLOR_CONTROL
.u32All
);
1181 static void evergreenSendCP(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
1183 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
1184 BATCH_LOCALS(&context
->radeon
);
1185 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
1189 BEGIN_BATCH_NO_AUTOSTATE(3);
1190 R600_OUT_BATCH(CP_PACKET3(R600_IT_CONTEXT_CONTROL
, 1)); //IT_CONTEXT_CONTROL 0x28
1191 R600_OUT_BATCH(0x80000000);
1192 R600_OUT_BATCH(0x80000000);
1197 static void evergreenSendVGT(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
1199 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
1200 EVERGREEN_CHIP_CONTEXT
*evergreen
= GET_EVERGREEN_CHIP(context
);
1201 BATCH_LOCALS(&context
->radeon
);
1202 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
1209 BEGIN_BATCH_NO_AUTOSTATE(5);
1210 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_MAX_VTX_INDX
, 3);
1211 R600_OUT_BATCH(evergreen
->VGT_MAX_VTX_INDX
.u32All
);
1212 R600_OUT_BATCH(evergreen
->VGT_MIN_VTX_INDX
.u32All
);
1213 R600_OUT_BATCH(evergreen
->VGT_INDX_OFFSET
.u32All
);
1216 BEGIN_BATCH_NO_AUTOSTATE(6);
1217 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_OUTPUT_PATH_CNTL
, evergreen
->VGT_OUTPUT_PATH_CNTL
.u32All
);
1219 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_GS_MODE
, evergreen
->VGT_GS_MODE
.u32All
);
1222 BEGIN_BATCH_NO_AUTOSTATE(3);
1223 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_PRIMITIVEID_EN
, 1);
1224 R600_OUT_BATCH(evergreen
->VGT_PRIMITIVEID_EN
.u32All
);
1227 BEGIN_BATCH_NO_AUTOSTATE(4);
1228 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_INSTANCE_STEP_RATE_0
, 2);
1229 R600_OUT_BATCH(evergreen
->VGT_INSTANCE_STEP_RATE_0
.u32All
);
1230 R600_OUT_BATCH(evergreen
->VGT_INSTANCE_STEP_RATE_1
.u32All
);
1233 BEGIN_BATCH_NO_AUTOSTATE(4);
1234 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_REUSE_OFF
, 2);
1235 R600_OUT_BATCH(evergreen
->VGT_REUSE_OFF
.u32All
);
1236 R600_OUT_BATCH(evergreen
->VGT_VTX_CNT_EN
.u32All
);
1239 BEGIN_BATCH_NO_AUTOSTATE(3);
1240 EVERGREEN_OUT_BATCH_REGVAL(EG_VGT_SHADER_STAGES_EN
, evergreen
->VGT_SHADER_STAGES_EN
.u32All
);
1243 BEGIN_BATCH_NO_AUTOSTATE(4);
1244 EVERGREEN_OUT_BATCH_REGSEQ(EG_VGT_STRMOUT_CONFIG
, 2);
1245 R600_OUT_BATCH(evergreen
->VGT_STRMOUT_CONFIG
.u32All
);
1246 R600_OUT_BATCH(evergreen
->VGT_STRMOUT_BUFFER_CONFIG
.u32All
);
1252 static void evergreenSendTIMESTAMP(GLcontext
*ctx
, struct radeon_state_atom
*atom
)
1254 context_t
*context
= EVERGREEN_CONTEXT(ctx
);
1255 BATCH_LOCALS(&context
->radeon
);
1256 radeon_print(RADEON_STATE
, RADEON_VERBOSE
, "%s\n", __func__
);
1259 void evergreenInitAtoms(context_t
*context
)
1261 radeon_print(RADEON_STATE
, RADEON_NORMAL
, "%s %p\n", __func__
, context
);
1262 context
->radeon
.hw
.max_state_size
= 10 + 5 + 14 + 3; /* start 3d, idle, cb/db flush, 3 for time stamp */
1264 /* Setup the atom linked list */
1265 make_empty_list(&context
->radeon
.hw
.atomlist
);
1266 context
->radeon
.hw
.atomlist
.name
= "atom-list";
1268 EVERGREEN_ALLOC_STATE(init
, always
, 19, evergreenSendSQConfig
);
1270 //make sure send first
1271 EVERGREEN_ALLOC_STATE(cp
, always
, 3, evergreenSendCP
);
1273 EVERGREEN_ALLOC_STATE(vtx
, evergreen_vtx
, (6 + (VERT_ATTRIB_MAX
* 12)), evergreenSendVTX
);
1274 EVERGREEN_ALLOC_STATE(pa
, always
, 124, evergreenSendPA
);
1275 EVERGREEN_ALLOC_STATE(tp
, always
, 0, evergreenSendTP
);
1276 EVERGREEN_ALLOC_STATE(sq
, always
, 86, evergreenSendSQ
); /* 85 */
1277 EVERGREEN_ALLOC_STATE(vs
, always
, 16, evergreenSendVSresource
);
1278 EVERGREEN_ALLOC_STATE(spi
, always
, 59, evergreenSendSPI
);
1279 EVERGREEN_ALLOC_STATE(sx
, always
, 9, evergreenSendSX
);
1280 EVERGREEN_ALLOC_STATE(tx
, evergreen_tx
, (R700_TEXTURE_NUMBERUNITS
* (21+5) + 6), evergreenSendTexState
); /* 21 for resource, 5 for sampler */
1281 EVERGREEN_ALLOC_STATE(db
, always
, 60, evergreenSendDB
);
1282 EVERGREEN_ALLOC_STATE(cb
, always
, 35, evergreenSendCB
);
1283 EVERGREEN_ALLOC_STATE(vgt
, always
, 29, evergreenSendVGT
);
1284 EVERGREEN_ALLOC_STATE(timestamp
, always
, 3, evergreenSendTIMESTAMP
);
1286 //evergreen_init_query_stateobj(&context->radeon, 6 * 2);
1288 context
->radeon
.hw
.is_dirty
= GL_TRUE
;
1289 context
->radeon
.hw
.all_dirty
= GL_TRUE
;