diff options
| author | Jerome Glisse <jglisse@redhat.com> | 2010-09-28 17:37:56 -0400 | 
|---|---|---|
| committer | Jerome Glisse <jglisse@redhat.com> | 2010-09-29 12:44:32 -0400 | 
| commit | 5646964b1360883b6254e2ebacc198f43869d36f (patch) | |
| tree | 05f02b140afc27d6e6b781ef228af9d143a91590 | |
| parent | 0cb545a7f2e823c85309013c4c41e9461f297d06 (diff) | |
r600g: use a hash table instead of group
Instead of creating group of register use a hash table
to lookup into which block each register belongs. This
simplify code a bit.
Signed-off-by: Jerome Glisse <jglisse@redhat.com
| -rw-r--r-- | src/gallium/drivers/r600/evergreen_state.c | 440 | ||||
| -rw-r--r-- | src/gallium/drivers/r600/r600.h | 44 | ||||
| -rw-r--r-- | src/gallium/drivers/r600/r600_state2.c | 404 | ||||
| -rw-r--r-- | src/gallium/winsys/r600/drm/evergreen_state.c | 935 | ||||
| -rw-r--r-- | src/gallium/winsys/r600/drm/r600.c | 3 | ||||
| -rw-r--r-- | src/gallium/winsys/r600/drm/r600_priv.h | 47 | ||||
| -rw-r--r-- | src/gallium/winsys/r600/drm/r600_state2.c | 1044 | 
7 files changed, 1432 insertions, 1485 deletions
| diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index b9fadabd15..74e2373b19 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -60,10 +60,10 @@ static void evergreen_set_blend_color(struct pipe_context *ctx,  		return;  	rstate->id = R600_PIPE_STATE_BLEND_COLOR; -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028414_CB_BLEND_RED, fui(state->color[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028418_CB_BLEND_GREEN, fui(state->color[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02841C_CB_BLEND_BLUE, fui(state->color[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028420_CB_BLEND_ALPHA, fui(state->color[3]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028414_CB_BLEND_RED, fui(state->color[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028418_CB_BLEND_GREEN, fui(state->color[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02841C_CB_BLEND_BLUE, fui(state->color[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028420_CB_BLEND_ALPHA, fui(state->color[3]), 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_BLEND_COLOR]);  	rctx->states[R600_PIPE_STATE_BLEND_COLOR] = rstate; @@ -104,9 +104,9 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,  		}  	}  	blend->cb_target_mask = target_mask; -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028808_CB_COLOR_CONTROL, +	r600_pipe_state_add_reg(rstate, R_028808_CB_COLOR_CONTROL,  				color_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C3C_PA_SC_AA_MASK, 0xFFFFFFFF, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C3C_PA_SC_AA_MASK, 0xFFFFFFFF, 0xFFFFFFFF, NULL);  	for (int i = 0; i < 8; i++) {  		unsigned eqRGB = state->rt[i].rgb_func; @@ -133,7 +133,7 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,  		}  	}  	for (int i = 0; i < 8; i++) { -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl[i], 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl[i], 0xFFFFFFFF, NULL);  	}  	return rstate; @@ -214,25 +214,25 @@ static void *evergreen_create_dsa_state(struct pipe_context *ctx,  		S_02800C_FORCE_HIS_ENABLE0(V_02800C_FORCE_DISABLE) |  		S_02800C_FORCE_HIS_ENABLE1(V_02800C_FORCE_DISABLE);  	/* TODO db_render_override depends on query */ -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028028_DB_STENCIL_CLEAR, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02802C_DB_DEPTH_CLEAR, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028410_SX_ALPHA_TEST_CONTROL, alpha_test_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate, R_028028_DB_STENCIL_CLEAR, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02802C_DB_DEPTH_CLEAR, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028410_SX_ALPHA_TEST_CONTROL, alpha_test_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate,  				R_028430_DB_STENCILREFMASK, stencil_ref_mask,  				0xFFFFFFFF & C_028430_STENCILREF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028434_DB_STENCILREFMASK_BF, stencil_ref_mask_bf,  				0xFFFFFFFF & C_028434_STENCILREF_BF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028438_SX_ALPHA_REF, alpha_ref, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0286DC_SPI_FOG_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028800_DB_DEPTH_CONTROL, db_depth_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02880C_DB_SHADER_CONTROL, db_shader_control, 0xFFFFFFBE, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028000_DB_RENDER_CONTROL, db_render_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02800C_DB_RENDER_OVERRIDE, db_render_override, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028AC0_DB_SRESULTS_COMPARE_STATE0, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028AC4_DB_SRESULTS_COMPARE_STATE1, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028AC8_DB_PRELOAD_CONTROL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028B70_DB_ALPHA_TO_MASK, 0x0000AA00, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028438_SX_ALPHA_REF, alpha_ref, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286DC_SPI_FOG_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028800_DB_DEPTH_CONTROL, db_depth_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02880C_DB_SHADER_CONTROL, db_shader_control, 0xFFFFFFBE, NULL); +	r600_pipe_state_add_reg(rstate, R_028000_DB_RENDER_CONTROL, db_render_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02800C_DB_RENDER_OVERRIDE, db_render_override, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AC0_DB_SRESULTS_COMPARE_STATE0, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AC4_DB_SRESULTS_COMPARE_STATE1, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AC8_DB_PRELOAD_CONTROL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028B70_DB_ALPHA_TO_MASK, 0x0000AA00, 0xFFFFFFFF, NULL);  	return rstate;  } @@ -271,11 +271,11 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,  			tmp |= S_0286D4_PNT_SPRITE_TOP_1(1);  		}  	} -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0286D4_SPI_INTERP_CONTROL_0, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286D4_SPI_INTERP_CONTROL_0, tmp, 0xFFFFFFFF, NULL);  	polygon_dual_mode = (state->fill_front != PIPE_POLYGON_MODE_FILL ||  				state->fill_back != PIPE_POLYGON_MODE_FILL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028814_PA_SU_SC_MODE_CNTL, +	r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,  		S_028814_PROVOKING_VTX_LAST(prov_vtx) |  		S_028814_CULL_FRONT((state->cull_face & PIPE_FACE_FRONT) ? 1 : 0) |  		S_028814_CULL_BACK((state->cull_face & PIPE_FACE_BACK) ? 1 : 0) | @@ -286,22 +286,22 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,  		S_028814_POLY_MODE(polygon_dual_mode) |  		S_028814_POLYMODE_FRONT_PTYPE(r600_translate_fill(state->fill_front)) |  		S_028814_POLYMODE_BACK_PTYPE(r600_translate_fill(state->fill_back)), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02881C_PA_CL_VS_OUT_CNTL, +	r600_pipe_state_add_reg(rstate, R_02881C_PA_CL_VS_OUT_CNTL,  			S_02881C_USE_VTX_POINT_SIZE(state->point_size_per_vertex) |  			S_02881C_VS_OUT_MISC_VEC_ENA(state->point_size_per_vertex), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028820_PA_CL_NANINF_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028820_PA_CL_NANINF_CNTL, 0x00000000, 0xFFFFFFFF, NULL);  	/* point size 12.4 fixed point */  	tmp = (unsigned)(state->point_size * 8.0); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A08_PA_SU_LINE_CNTL, 0x00000008, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C08_PA_SU_VTX_CNTL, 0x00000005, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, 0x00000008, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL, 0x00000005, 0xFFFFFFFF, NULL);  	return rstate;  } @@ -347,7 +347,7 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,  	rstate->id = R600_PIPE_STATE_SAMPLER;  	util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER, R_03C000_SQ_TEX_SAMPLER_WORD0_0, +	r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,  			S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |  			S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |  			S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) | @@ -357,20 +357,20 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,  			S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |  			S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);  	/* FIXME LOD it depends on texture base level ... */ -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER, R_03C004_SQ_TEX_SAMPLER_WORD1_0, +	r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,  			S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |  			S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)),  			0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER, R_03C008_SQ_TEX_SAMPLER_WORD2_0, +	r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,  				S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)) |  				S_03C008_TYPE(1),  				0xFFFFFFFF, NULL);  	if (uc.ui) { -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER_BORDER, R_00A404_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER_BORDER, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER_BORDER, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_SAMPLER_BORDER, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);  	}  	return rstate;  } @@ -455,29 +455,29 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte  	pitch = align(tmp->pitch[0] / tmp->bpt, 8);  	/* FIXME properly handle first level != 0 */ -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030000_RESOURCE0_WORD0, +	r600_pipe_state_add_reg(rstate, R_030000_RESOURCE0_WORD0,  				S_030000_DIM(r600_tex_dim(texture->target)) |  				S_030000_PITCH((pitch / 8) - 1) |  				S_030000_TEX_WIDTH(texture->width0 - 1), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030004_RESOURCE0_WORD1, +	r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1,  				S_030004_TEX_HEIGHT(texture->height0 - 1) |  				S_030004_TEX_DEPTH(texture->depth0 - 1),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030008_RESOURCE0_WORD2, +	r600_pipe_state_add_reg(rstate, R_030008_RESOURCE0_WORD2,  				tmp->offset[0] >> 8, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_03000C_RESOURCE0_WORD3, +	r600_pipe_state_add_reg(rstate, R_03000C_RESOURCE0_WORD3,  				tmp->offset[1] >> 8, 0xFFFFFFFF, bo[1]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030010_RESOURCE0_WORD4, +	r600_pipe_state_add_reg(rstate, R_030010_RESOURCE0_WORD4,  				word4 | S_030010_NUM_FORMAT_ALL(V_030010_SQ_NUM_FORMAT_NORM) |  				S_030010_SRF_MODE_ALL(V_030010_SFR_MODE_NO_ZERO) |  				S_030010_REQUEST_SIZE(1) |  				S_030010_BASE_LEVEL(state->first_level), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030014_RESOURCE0_WORD5, +	r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5,  				S_030014_LAST_LEVEL(state->last_level) |  				S_030014_BASE_ARRAY(0) |  				S_030014_LAST_ARRAY(0), 0xffffffff, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030018_RESOURCE0_WORD6, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_03001C_RESOURCE0_WORD7, +	r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7,  				S_03001C_DATA_FORMAT(format) |  				S_03001C_TYPE(V_03001C_SQ_TEX_VTX_VALID_TEXTURE), 0xFFFFFFFF, NULL); @@ -573,20 +573,20 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,  	rctx->clip = *state;  	rstate->id = R600_PIPE_STATE_CLIP;  	for (int i = 0; i < state->nr; i++) { -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_0285BC_PA_CL_UCP0_X + i * 4,  					fui(state->ucp[i][0]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_0285C0_PA_CL_UCP0_Y + i * 4,  					fui(state->ucp[i][1]) , 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_0285C4_PA_CL_UCP0_Z + i * 4,  					fui(state->ucp[i][2]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_0285C8_PA_CL_UCP0_W + i * 4,  					fui(state->ucp[i][3]), 0xFFFFFFFF, NULL);  	} -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028810_PA_CL_CLIP_CNTL, +	r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,  			S_028810_PS_UCP_MODE(3) | ((1 << state->nr) - 1) |  			S_028810_ZCLIP_NEAR_DISABLE(state->depth_clamp) |  			S_028810_ZCLIP_FAR_DISABLE(state->depth_clamp), 0xFFFFFFFF, NULL); @@ -631,49 +631,49 @@ static void evergreen_set_scissor_state(struct pipe_context *ctx,  	rstate->id = R600_PIPE_STATE_SCISSOR;  	tl = S_028240_TL_X(state->minx) | S_028240_TL_Y(state->miny);  	br = S_028244_BR_X(state->maxx) | S_028244_BR_Y(state->maxy); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028030_PA_SC_SCREEN_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028034_PA_SC_SCREEN_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028204_PA_SC_WINDOW_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028208_PA_SC_WINDOW_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028210_PA_SC_CLIPRECT_0_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028214_PA_SC_CLIPRECT_0_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028218_PA_SC_CLIPRECT_1_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02821C_PA_SC_CLIPRECT_1_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028220_PA_SC_CLIPRECT_2_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028224_PA_SC_CLIPRECT_2_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028228_PA_SC_CLIPRECT_3_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02822C_PA_SC_CLIPRECT_3_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028200_PA_SC_WINDOW_OFFSET, 0x00000000,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02820C_PA_SC_CLIPRECT_RULE, 0x0000FFFF,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028230_PA_SC_EDGERULE, 0xAAAAAAAA,  				0xFFFFFFFF, NULL); @@ -695,11 +695,11 @@ static void evergreen_set_stencil_ref(struct pipe_context *ctx,  	rctx->stencil_ref = *state;  	rstate->id = R600_PIPE_STATE_STENCIL_REF;  	tmp = S_028430_STENCILREF(state->ref_value[0]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028430_DB_STENCILREFMASK, tmp,  				~C_028430_STENCILREF, NULL);  	tmp = S_028434_STENCILREF_BF(state->ref_value[1]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028434_DB_STENCILREFMASK_BF, tmp,  				~C_028434_STENCILREF_BF, NULL); @@ -719,15 +719,15 @@ static void evergreen_set_viewport_state(struct pipe_context *ctx,  	rctx->viewport = *state;  	rstate->id = R600_PIPE_STATE_VIEWPORT; -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0282D0_PA_SC_VPORT_ZMIN_0, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0282D4_PA_SC_VPORT_ZMAX_0, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02843C_PA_CL_VPORT_XSCALE_0, fui(state->scale[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028444_PA_CL_VPORT_YSCALE_0, fui(state->scale[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02844C_PA_CL_VPORT_ZSCALE_0, fui(state->scale[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028440_PA_CL_VPORT_XOFFSET_0, fui(state->translate[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028448_PA_CL_VPORT_YOFFSET_0, fui(state->translate[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028450_PA_CL_VPORT_ZOFFSET_0, fui(state->translate[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028818_PA_CL_VTE_CNTL, 0x0000043F, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0282D0_PA_SC_VPORT_ZMIN_0, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0282D4_PA_SC_VPORT_ZMAX_0, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02843C_PA_CL_VPORT_XSCALE_0, fui(state->scale[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028444_PA_CL_VPORT_YSCALE_0, fui(state->scale[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02844C_PA_CL_VPORT_ZSCALE_0, fui(state->scale[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028440_PA_CL_VPORT_XOFFSET_0, fui(state->translate[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028448_PA_CL_VPORT_YOFFSET_0, fui(state->translate[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028450_PA_CL_VPORT_ZOFFSET_0, fui(state->translate[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028818_PA_CL_VTE_CNTL, 0x0000043F, 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_VIEWPORT]);  	rctx->states[R600_PIPE_STATE_VIEWPORT] = rstate; @@ -769,27 +769,27 @@ static void evergreen_cb(struct r600_pipe_context *rctx, struct r600_pipe_state  		color_info |= S_028C70_SOURCE_FORMAT(1);  	/* FIXME handle enabling of CB beyond BASE8 which has different offset */ -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C60_CB_COLOR0_BASE + cb * 0x3C,  				state->cbufs[cb]->offset >> 8, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C78_CB_COLOR0_DIM + cb * 0x3C,  				0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C70_CB_COLOR0_INFO + cb * 0x3C,  				color_info, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C64_CB_COLOR0_PITCH + cb * 0x3C,  				S_028C64_PITCH_TILE_MAX(pitch),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C68_CB_COLOR0_SLICE + cb * 0x3C,  				S_028C68_SLICE_TILE_MAX(slice),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C6C_CB_COLOR0_VIEW + cb * 0x3C,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028C74_CB_COLOR0_ATTRIB + cb * 0x3C,  				S_028C74_NON_DISP_TILING_ORDER(1),  				0xFFFFFFFF, NULL); @@ -818,19 +818,19 @@ static void evergreen_db(struct r600_pipe_context *rctx, struct r600_pipe_state  	slice = (rtex->pitch[level] / rtex->bpt) * state->zsbuf->height / 64 - 1;  	format = r600_translate_dbformat(state->zsbuf->texture->format); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028048_DB_Z_READ_BASE, +	r600_pipe_state_add_reg(rstate, R_028048_DB_Z_READ_BASE,  				state->zsbuf->offset >> 8, 0xFFFFFFFF, rbuffer->bo); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028050_DB_Z_WRITE_BASE, +	r600_pipe_state_add_reg(rstate, R_028050_DB_Z_WRITE_BASE,  				state->zsbuf->offset >> 8, 0xFFFFFFFF, rbuffer->bo); -//	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028014_DB_HTILE_DATA_BASE, state->zsbuf->offset >> 8, 0xFFFFFFFF, rbuffer->bo); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028008_DB_DEPTH_VIEW, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028040_DB_Z_INFO, +//	r600_pipe_state_add_reg(rstate, R_028014_DB_HTILE_DATA_BASE, state->zsbuf->offset >> 8, 0xFFFFFFFF, rbuffer->bo); +	r600_pipe_state_add_reg(rstate, R_028008_DB_DEPTH_VIEW, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028040_DB_Z_INFO,  				S_028040_ARRAY_MODE(rtex->array_mode) | S_028040_FORMAT(format),  				0xFFFFFFFF, rbuffer->bo); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028058_DB_DEPTH_SIZE, +	r600_pipe_state_add_reg(rstate, R_028058_DB_DEPTH_SIZE,  				S_028058_PITCH_TILE_MAX(pitch),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02805C_DB_DEPTH_SLICE, +	r600_pipe_state_add_reg(rstate, R_02805C_DB_DEPTH_SLICE,  				S_02805C_SLICE_TILE_MAX(slice),  				0xFFFFFFFF, NULL);  } @@ -874,26 +874,26 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,  	tl = S_028240_TL_X(0) | S_028240_TL_Y(0);  	br = S_028244_BR_X(state->width) | S_028244_BR_Y(state->height); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028240_PA_SC_GENERIC_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028244_PA_SC_GENERIC_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028250_PA_SC_VPORT_SCISSOR_0_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028254_PA_SC_VPORT_SCISSOR_0_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028238_CB_TARGET_MASK, +	r600_pipe_state_add_reg(rstate, R_028238_CB_TARGET_MASK,  				0x00000000, target_mask, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02823C_CB_SHADER_MASK, +	r600_pipe_state_add_reg(rstate, R_02823C_CB_SHADER_MASK,  				shader_mask, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C04_PA_SC_AA_CONFIG, +	r600_pipe_state_add_reg(rstate, R_028C04_PA_SC_AA_CONFIG,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX, +	r600_pipe_state_add_reg(rstate, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX,  				0x00000000, 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_FRAMEBUFFER]); @@ -944,22 +944,22 @@ static void evergreen_set_constant_buffer(struct pipe_context *ctx, uint shader,  	switch (shader) {  	case PIPE_SHADER_VERTEX:  		rctx->vs_const_buffer.nregs = 0; -		r600_pipe_state_add_reg(&rctx->vs_const_buffer, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&rctx->vs_const_buffer,  					R_028180_ALU_CONST_BUFFER_SIZE_VS_0,  					ALIGN_DIVUP(buffer->width0 >> 4, 16),  					0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&rctx->vs_const_buffer, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&rctx->vs_const_buffer,  					R_028980_ALU_CONST_CACHE_VS_0,  					0, 0xFFFFFFFF, rbuffer->bo);  		r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_const_buffer);  		break;  	case PIPE_SHADER_FRAGMENT:  		rctx->ps_const_buffer.nregs = 0; -		r600_pipe_state_add_reg(&rctx->ps_const_buffer, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&rctx->ps_const_buffer,  					R_028140_ALU_CONST_BUFFER_SIZE_PS_0,  					ALIGN_DIVUP(buffer->width0 >> 4, 16),  					0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&rctx->ps_const_buffer, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&rctx->ps_const_buffer,  					R_028940_ALU_CONST_CACHE_PS_0,  					0, 0xFFFFFFFF, rbuffer->bo);  		r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_const_buffer); @@ -1209,125 +1209,125 @@ void evergreen_init_config2(struct r600_pipe_context *rctx)  	tmp |= S_008C00_VS_PRIO(vs_prio);  	tmp |= S_008C00_GS_PRIO(gs_prio);  	tmp |= S_008C00_ES_PRIO(es_prio); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C00_SQ_CONFIG, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C00_SQ_CONFIG, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C04_NUM_PS_GPRS(num_ps_gprs);  	tmp |= S_008C04_NUM_VS_GPRS(num_vs_gprs);  	tmp |= S_008C04_NUM_CLAUSE_TEMP_GPRS(num_temp_gprs); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C04_SQ_GPR_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C04_SQ_GPR_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C08_NUM_GS_GPRS(num_gs_gprs);  	tmp |= S_008C08_NUM_ES_GPRS(num_es_gprs); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C08_SQ_GPR_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C08_SQ_GPR_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C0C_NUM_HS_GPRS(num_hs_gprs);  	tmp |= S_008C0C_NUM_LS_GPRS(num_ls_gprs); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C0C_SQ_GPR_RESOURCE_MGMT_3, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C0C_SQ_GPR_RESOURCE_MGMT_3, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C18_NUM_PS_THREADS(num_ps_threads);  	tmp |= S_008C18_NUM_VS_THREADS(num_vs_threads);  	tmp |= S_008C18_NUM_GS_THREADS(num_gs_threads);  	tmp |= S_008C18_NUM_ES_THREADS(num_es_threads); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C18_SQ_THREAD_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C18_SQ_THREAD_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C1C_NUM_HS_THREADS(num_hs_threads);  	tmp |= S_008C1C_NUM_LS_THREADS(num_ls_threads); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C1C_SQ_THREAD_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C1C_SQ_THREAD_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C20_NUM_PS_STACK_ENTRIES(num_ps_stack_entries);  	tmp |= S_008C20_NUM_VS_STACK_ENTRIES(num_vs_stack_entries); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C20_SQ_STACK_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C20_SQ_STACK_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C24_NUM_GS_STACK_ENTRIES(num_gs_stack_entries);  	tmp |= S_008C24_NUM_ES_STACK_ENTRIES(num_es_stack_entries); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C24_SQ_STACK_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C24_SQ_STACK_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL);  	tmp = 0;  	tmp |= S_008C28_NUM_HS_STACK_ENTRIES(num_hs_stack_entries);  	tmp |= S_008C28_NUM_LS_STACK_ENTRIES(num_ls_stack_entries); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008C28_SQ_STACK_RESOURCE_MGMT_3, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C28_SQ_STACK_RESOURCE_MGMT_3, tmp, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_009100_SPI_CONFIG_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_00913C_SPI_CONFIG_CNTL_1, S_00913C_VTX_DONE_DELAY(4), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_009100_SPI_CONFIG_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_00913C_SPI_CONFIG_CNTL_1, S_00913C_VTX_DONE_DELAY(4), 0xFFFFFFFF, NULL); -//	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028350_SX_MISC, 0x0, 0xFFFFFFFF, NULL); +//	r600_pipe_state_add_reg(rstate, R_028350_SX_MISC, 0x0, 0xFFFFFFFF, NULL); -//	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A48_PA_SC_MODE_CNTL_0, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A4C_PA_SC_MODE_CNTL_1, 0x0, 0xFFFFFFFF, NULL); +//	r600_pipe_state_add_reg(rstate, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A48_PA_SC_MODE_CNTL_0, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL_1, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028900_SQ_ESGS_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028904_SQ_GSVS_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028908_SQ_ESTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02890C_SQ_GSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028910_SQ_VSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028914_SQ_PSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028900_SQ_ESGS_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028904_SQ_GSVS_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028908_SQ_ESTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02890C_SQ_GSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028910_SQ_VSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028914_SQ_PSTMP_RING_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02891C_SQ_GS_VERT_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028920_SQ_GS_VERT_ITEMSIZE_1, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028924_SQ_GS_VERT_ITEMSIZE_2, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028928_SQ_GS_VERT_ITEMSIZE_3, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02891C_SQ_GS_VERT_ITEMSIZE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028920_SQ_GS_VERT_ITEMSIZE_1, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028924_SQ_GS_VERT_ITEMSIZE_2, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028928_SQ_GS_VERT_ITEMSIZE_3, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A10_VGT_OUTPUT_PATH_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A14_VGT_HOS_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A20_VGT_HOS_REUSE_DEPTH, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A24_VGT_GROUP_PRIM_TYPE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A28_VGT_GROUP_FIRST_DECR, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A2C_VGT_GROUP_DECR, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A30_VGT_GROUP_VECT_0_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A34_VGT_GROUP_VECT_1_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028A40_VGT_GS_MODE, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028B94_VGT_STRMOUT_CONFIG, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028AB4_VGT_REUSE_OFF, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028AB8_VGT_VTX_CNT_EN, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONFIG, R_008A14_PA_CL_ENHANCE, (3 << 1) | 1, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A10_VGT_OUTPUT_PATH_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A14_VGT_HOS_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A20_VGT_HOS_REUSE_DEPTH, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A24_VGT_GROUP_PRIM_TYPE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A28_VGT_GROUP_FIRST_DECR, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A2C_VGT_GROUP_DECR, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A30_VGT_GROUP_VECT_0_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A34_VGT_GROUP_VECT_1_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A40_VGT_GS_MODE, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028B94_VGT_STRMOUT_CONFIG, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AB4_VGT_REUSE_OFF, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AB8_VGT_VTX_CNT_EN, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008A14_PA_CL_ENHANCE, (3 << 1) | 1, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028380_SQ_VTX_SEMANTIC_0, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028384_SQ_VTX_SEMANTIC_1, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028388_SQ_VTX_SEMANTIC_2, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02838C_SQ_VTX_SEMANTIC_3, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028390_SQ_VTX_SEMANTIC_4, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028394_SQ_VTX_SEMANTIC_5, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028398_SQ_VTX_SEMANTIC_6, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_02839C_SQ_VTX_SEMANTIC_7, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283A0_SQ_VTX_SEMANTIC_8, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283A4_SQ_VTX_SEMANTIC_9, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283A8_SQ_VTX_SEMANTIC_10, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283AC_SQ_VTX_SEMANTIC_11, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283B0_SQ_VTX_SEMANTIC_12, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283B4_SQ_VTX_SEMANTIC_13, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283B8_SQ_VTX_SEMANTIC_14, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283BC_SQ_VTX_SEMANTIC_15, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283C0_SQ_VTX_SEMANTIC_16, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283C4_SQ_VTX_SEMANTIC_17, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283C8_SQ_VTX_SEMANTIC_18, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283CC_SQ_VTX_SEMANTIC_19, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283D0_SQ_VTX_SEMANTIC_20, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283D4_SQ_VTX_SEMANTIC_21, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283D8_SQ_VTX_SEMANTIC_22, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283DC_SQ_VTX_SEMANTIC_23, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283E0_SQ_VTX_SEMANTIC_24, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283E4_SQ_VTX_SEMANTIC_25, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283E8_SQ_VTX_SEMANTIC_26, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283EC_SQ_VTX_SEMANTIC_27, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283F0_SQ_VTX_SEMANTIC_28, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283F4_SQ_VTX_SEMANTIC_29, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283F8_SQ_VTX_SEMANTIC_30, 0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0283FC_SQ_VTX_SEMANTIC_31, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028380_SQ_VTX_SEMANTIC_0, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028384_SQ_VTX_SEMANTIC_1, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028388_SQ_VTX_SEMANTIC_2, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02838C_SQ_VTX_SEMANTIC_3, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028390_SQ_VTX_SEMANTIC_4, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028394_SQ_VTX_SEMANTIC_5, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028398_SQ_VTX_SEMANTIC_6, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02839C_SQ_VTX_SEMANTIC_7, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283A0_SQ_VTX_SEMANTIC_8, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283A4_SQ_VTX_SEMANTIC_9, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283A8_SQ_VTX_SEMANTIC_10, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283AC_SQ_VTX_SEMANTIC_11, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283B0_SQ_VTX_SEMANTIC_12, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283B4_SQ_VTX_SEMANTIC_13, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283B8_SQ_VTX_SEMANTIC_14, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283BC_SQ_VTX_SEMANTIC_15, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283C0_SQ_VTX_SEMANTIC_16, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283C4_SQ_VTX_SEMANTIC_17, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283C8_SQ_VTX_SEMANTIC_18, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283CC_SQ_VTX_SEMANTIC_19, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283D0_SQ_VTX_SEMANTIC_20, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283D4_SQ_VTX_SEMANTIC_21, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283D8_SQ_VTX_SEMANTIC_22, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283DC_SQ_VTX_SEMANTIC_23, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283E0_SQ_VTX_SEMANTIC_24, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283E4_SQ_VTX_SEMANTIC_25, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283E8_SQ_VTX_SEMANTIC_26, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283EC_SQ_VTX_SEMANTIC_27, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283F0_SQ_VTX_SEMANTIC_28, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283F4_SQ_VTX_SEMANTIC_29, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283F8_SQ_VTX_SEMANTIC_30, 0x0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0283FC_SQ_VTX_SEMANTIC_31, 0x0, 0xFFFFFFFF, NULL); -r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028810_PA_CL_CLIP_CNTL, +r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,  			0x0, 0xFFFFFFFF, NULL);  	r600_context_pipe_state_set(&rctx->ctx, rstate); @@ -1420,26 +1420,26 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)  		rstate->nregs = 0;  		r600_translate_vertex_num_format(rctx->vertex_elements->elements[i].src_format, &num_format, &format_comp); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, +		r600_pipe_state_add_reg(rstate, R_030000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo); +		r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate,  					R_030008_RESOURCE0_WORD2,  					S_030008_STRIDE(vertex_buffer->stride) |  					S_030008_DATA_FORMAT(format) |  					S_030008_NUM_FORMAT_ALL(num_format) |  					S_030008_FORMAT_COMP_ALL(format_comp),  					0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, +		r600_pipe_state_add_reg(rstate,  					R_03000C_RESOURCE0_WORD3,  					S_03000C_DST_SEL_X(V_03000C_SQ_SEL_X) |  					S_03000C_DST_SEL_Y(V_03000C_SQ_SEL_Y) |  					S_03000C_DST_SEL_Z(V_03000C_SQ_SEL_Z) |  					S_03000C_DST_SEL_W(V_03000C_SQ_SEL_W),  					0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030010_RESOURCE0_WORD4, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_030018_RESOURCE0_WORD6, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_RESOURCE, R_03001C_RESOURCE0_WORD7, 0xC0000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_030010_RESOURCE0_WORD4, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7, 0xC0000000, 0xFFFFFFFF, NULL);  		evergreen_vs_resource_set(&rctx->ctx, rstate, i);  	} @@ -1450,11 +1450,11 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)  	vgt.id = R600_PIPE_STATE_VGT;  	vgt.nregs = 0; -	r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONFIG, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, R_028408_VGT_INDX_OFFSET, draw.index_bias, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, R_028400_VGT_MAX_VTX_INDX, draw.max_index, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, R_028404_VGT_MIN_VTX_INDX, draw.min_index, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028408_VGT_INDX_OFFSET, draw.index_bias, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028400_VGT_MAX_VTX_INDX, draw.max_index, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028404_VGT_MIN_VTX_INDX, draw.min_index, 0xFFFFFFFF, NULL);  	if (rctx->rasterizer && rctx->framebuffer.zsbuf) {  		float offset_units = rctx->rasterizer->offset_units; @@ -1479,19 +1479,19 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)  			return;  		}  		offset_db_fmt_cntl |= S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(depth); -		r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE,  				fui(rctx->rasterizer->offset_scale), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET,  				fui(offset_units), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE,  				fui(rctx->rasterizer->offset_scale), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET,  				fui(offset_units), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL,  				offset_db_fmt_cntl, 0xFFFFFFFF, NULL);  	} @@ -1536,10 +1536,10 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader  			rctx->sprite_coord_enable & (1 << rshader->input[i].sid)) {  			tmp |= S_028644_PT_SPRITE_TEX(1);  		} -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, tmp, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, tmp, 0xFFFFFFFF, NULL);  	}  	for (i = 0; i < rshader->noutput; i++) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  				R_02880C_DB_SHADER_CONTROL,  				S_02880C_Z_EXPORT_ENABLE(1),  				S_02880C_Z_EXPORT_ENABLE(1), NULL); @@ -1567,27 +1567,27 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader  		spi_ps_in_control_0 |=  S_0286CC_POSITION_ENA(1);  		spi_input_z |= 1;  	} -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0286CC_SPI_PS_IN_CONTROL_0, +	r600_pipe_state_add_reg(rstate, R_0286CC_SPI_PS_IN_CONTROL_0,  				spi_ps_in_control_0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0286D0_SPI_PS_IN_CONTROL_1, +	r600_pipe_state_add_reg(rstate, R_0286D0_SPI_PS_IN_CONTROL_1,  				S_0286D0_FRONT_FACE_ENA(have_face), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, R_0286D8_SPI_INPUT_Z, spi_input_z, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate, R_0286D8_SPI_INPUT_Z, spi_input_z, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate,  				R_028840_SQ_PGM_START_PS,  				0x00000000, 0xFFFFFFFF, shader->bo); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028844_SQ_PGM_RESOURCES_PS,  				S_028844_NUM_GPRS(rshader->bc.ngpr) |  				S_028844_PRIME_CACHE_ON_DRAW(1) |  				S_028844_STACK_SIZE(rshader->bc.nstack),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028848_SQ_PGM_RESOURCES_2_PS,  				0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02884C_SQ_PGM_EXPORTS_PS,  				exports_ps, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_0286E0_SPI_BARYC_CNTL,  				S_0286E0_PERSP_CENTROID_ENA(1) |  				S_0286E0_LINEAR_CENTROID_ENA(1), @@ -1595,7 +1595,7 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader  	if (rshader->uses_kill) {  		/* only set some bits here, the other bits are set in the dsa state */ -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_02880C_DB_SHADER_CONTROL,  					S_02880C_KILL_ENABLE(1),  					S_02880C_KILL_ENABLE(1), NULL); @@ -1621,30 +1621,30 @@ void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader  		spi_vs_out_id[i / 4] |= tmp;  	}  	for (i = 0; i < 10; i++) { -		r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_02861C_SPI_VS_OUT_ID_0 + i * 4,  					spi_vs_out_id[i], 0xFFFFFFFF, NULL);  	} -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0286C4_SPI_VS_OUT_CONFIG,  			S_0286C4_VS_EXPORT_COUNT(rshader->noutput - 2),  			0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_028860_SQ_PGM_RESOURCES_VS,  			S_028860_NUM_GPRS(rshader->bc.ngpr) |  			S_028860_STACK_SIZE(rshader->bc.nstack),  			0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028864_SQ_PGM_RESOURCES_2_VS,  				0x0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0288A8_SQ_PGM_RESOURCES_FS,  			0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_02885C_SQ_PGM_START_VS,  			0x00000000, 0xFFFFFFFF, shader->bo); -	r600_pipe_state_add_reg(rstate, EVERGREEN_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0288A4_SQ_PGM_START_FS,  			0x00000000, 0xFFFFFFFF, shader->bo);  } diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index adc35afc02..58d753ef5e 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -117,32 +117,7 @@ void radeon_ws_bo_reference(struct radeon *radeon, struct radeon_ws_bo **dst,  #define R600_BLOCK_MAX_BO		32  #define R600_BLOCK_MAX_REG		128 -enum r600_group_id { -	R600_GROUP_CONFIG = 0, -	R600_GROUP_CONTEXT, -	R600_GROUP_ALU_CONST, -	R600_GROUP_RESOURCE, -	R600_GROUP_SAMPLER, -	R600_GROUP_CTL_CONST, -	R600_GROUP_LOOP_CONST, -	R600_GROUP_BOOL_CONST, -	R600_NGROUPS -}; - -enum evergreen_group_id { -	EVERGREEN_GROUP_CONFIG = 0, -	EVERGREEN_GROUP_CONTEXT, -	EVERGREEN_GROUP_RESOURCE, -	EVERGREEN_GROUP_SAMPLER, -	EVERGREEN_GROUP_CTL_CONST, -	EVERGREEN_GROUP_LOOP_CONST, -	EVERGREEN_GROUP_BOOL_CONST, -	EVERGREEN_GROUP_SAMPLER_BORDER, -	EVERGREEN_NGROUPS -}; -  struct r600_pipe_reg { -	unsigned			group_id;  	u32				offset;  	u32				mask;  	u32				value; @@ -156,11 +131,9 @@ struct r600_pipe_state {  };  static inline void r600_pipe_state_add_reg(struct r600_pipe_state *state, -					unsigned group_id, u32 offset, -					u32 value, u32 mask, +					u32 offset, u32 value, u32 mask,  					struct radeon_ws_bo *bo)  { -	state->regs[state->nregs].group_id = group_id;  	state->regs[state->nregs].offset = offset;  	state->regs[state->nregs].value = value;  	state->regs[state->nregs].mask = mask; @@ -178,7 +151,7 @@ struct r600_block_reloc {  	unsigned		bo_pm4_index[R600_BLOCK_MAX_BO];  }; -struct r600_group_block { +struct r600_block {  	unsigned		status;  	unsigned		start_offset;  	unsigned		pm4_ndwords; @@ -190,12 +163,10 @@ struct r600_group_block {  	struct r600_block_reloc	reloc[R600_BLOCK_MAX_BO];  }; -struct r600_group { +struct r600_range {  	unsigned		start_offset;  	unsigned		end_offset; -	unsigned		nblocks; -	struct r600_group_block	*blocks; -	unsigned		*offset_block_id; +	struct r600_block	**blocks;  };  /* @@ -236,8 +207,11 @@ struct r600_query {  struct r600_context {  	struct radeon		*radeon; -	unsigned		ngroups; -	struct r600_group	groups[R600_GROUP_MAX]; +	unsigned		hash_size; +	unsigned		hash_shift; +	struct r600_range	range[256]; +	unsigned		nblocks; +	struct r600_block	**blocks;  	unsigned		pm4_ndwords;  	unsigned		pm4_cdwords;  	unsigned		pm4_dirty_cdwords; diff --git a/src/gallium/drivers/r600/r600_state2.c b/src/gallium/drivers/r600/r600_state2.c index 5bd38726e7..38cd9acf45 100644 --- a/src/gallium/drivers/r600/r600_state2.c +++ b/src/gallium/drivers/r600/r600_state2.c @@ -73,33 +73,33 @@ static void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shade  		spi_vs_out_id[i / 4] |= tmp;  	}  	for (i = 0; i < 10; i++) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028614_SPI_VS_OUT_ID_0 + i * 4,  					spi_vs_out_id[i], 0xFFFFFFFF, NULL);  	} -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0286C4_SPI_VS_OUT_CONFIG,  			S_0286C4_VS_EXPORT_COUNT(rshader->noutput - 2),  			0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_028868_SQ_PGM_RESOURCES_VS,  			S_028868_NUM_GPRS(rshader->bc.ngpr) |  			S_028868_STACK_SIZE(rshader->bc.nstack),  			0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0288A4_SQ_PGM_RESOURCES_FS,  			0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0288D0_SQ_PGM_CF_OFFSET_VS,  			0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_0288DC_SQ_PGM_CF_OFFSET_FS,  			0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_028858_SQ_PGM_START_VS,  			0x00000000, 0xFFFFFFFF, shader->bo); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  			R_028894_SQ_PGM_START_FS,  			0x00000000, 0xFFFFFFFF, shader->bo);  } @@ -145,10 +145,10 @@ static void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shade  			rctx->sprite_coord_enable & (1 << rshader->input[i].sid)) {  			tmp |= S_028644_PT_SPRITE_TEX(1);  		} -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, tmp, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, tmp, 0xFFFFFFFF, NULL);  	}  	for (i = 0; i < rshader->noutput; i++) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  				R_02880C_DB_SHADER_CONTROL,  				S_02880C_Z_EXPORT_ENABLE(1),  				S_02880C_Z_EXPORT_ENABLE(1), NULL); @@ -177,27 +177,27 @@ static void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shade  					S_0286CC_BARYC_SAMPLE_CNTL(1);  		spi_input_z |= 1;  	} -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286CC_SPI_PS_IN_CONTROL_0, spi_ps_in_control_0, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286D0_SPI_PS_IN_CONTROL_1, S_0286D0_FRONT_FACE_ENA(have_face), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286D8_SPI_INPUT_Z, spi_input_z, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate, R_0286CC_SPI_PS_IN_CONTROL_0, spi_ps_in_control_0, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286D0_SPI_PS_IN_CONTROL_1, S_0286D0_FRONT_FACE_ENA(have_face), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286D8_SPI_INPUT_Z, spi_input_z, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate,  				R_028840_SQ_PGM_START_PS,  				0x00000000, 0xFFFFFFFF, shader->bo); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028850_SQ_PGM_RESOURCES_PS,  				S_028868_NUM_GPRS(rshader->bc.ngpr) |  				S_028868_STACK_SIZE(rshader->bc.nstack),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028854_SQ_PGM_EXPORTS_PS,  				exports_ps, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_0288CC_SQ_PGM_CF_OFFSET_PS,  				0x00000000, 0xFFFFFFFF, NULL);  	if (rshader->uses_kill) {  		/* only set some bits here, the other bits are set in the dsa state */ -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_02880C_DB_SHADER_CONTROL,  					S_02880C_KILL_ENABLE(1),  					S_02880C_KILL_ENABLE(1), NULL); @@ -538,19 +538,19 @@ static void r600_draw_common(struct r600_drawl *draw)  		rstate->nregs = 0;  		r600_translate_vertex_num_format(rctx->vertex_elements->elements[i].src_format, &num_format, &format_comp); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, +		r600_pipe_state_add_reg(rstate, R_038000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo); +		r600_pipe_state_add_reg(rstate, R_038004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate,  					R_038008_RESOURCE0_WORD2,  					S_038008_STRIDE(vertex_buffer->stride) |  					S_038008_DATA_FORMAT(format) |  					S_038008_NUM_FORMAT_ALL(num_format) |  					S_038008_FORMAT_COMP_ALL(format_comp),  					0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_03800C_RESOURCE0_WORD3, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038010_RESOURCE0_WORD4, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038018_RESOURCE0_WORD6, 0xC0000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_03800C_RESOURCE0_WORD3, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_038010_RESOURCE0_WORD4, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_038014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6, 0xC0000000, 0xFFFFFFFF, NULL);  		r600_context_pipe_state_set_vs_resource(&rctx->ctx, rstate, i);  	} @@ -561,11 +561,11 @@ static void r600_draw_common(struct r600_drawl *draw)  	vgt.id = R600_PIPE_STATE_VGT;  	vgt.nregs = 0; -	r600_pipe_state_add_reg(&vgt, R600_GROUP_CONFIG, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, R_028408_VGT_INDX_OFFSET, draw->index_bias, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, R_028400_VGT_MAX_VTX_INDX, draw->max_index, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, R_028404_VGT_MIN_VTX_INDX, draw->min_index, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028408_VGT_INDX_OFFSET, draw->index_bias, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028400_VGT_MAX_VTX_INDX, draw->max_index, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028404_VGT_MIN_VTX_INDX, draw->min_index, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(&vgt, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL);  	/* build late state */  	if (rctx->rasterizer && rctx->framebuffer.zsbuf) {  		float offset_units = rctx->rasterizer->offset_units; @@ -590,19 +590,19 @@ static void r600_draw_common(struct r600_drawl *draw)  			return;  		}  		offset_db_fmt_cntl |= S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS(depth); -		r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028E00_PA_SU_POLY_OFFSET_FRONT_SCALE,  				fui(rctx->rasterizer->offset_scale), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028E04_PA_SU_POLY_OFFSET_FRONT_OFFSET,  				fui(offset_units), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028E08_PA_SU_POLY_OFFSET_BACK_SCALE,  				fui(rctx->rasterizer->offset_scale), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028E0C_PA_SU_POLY_OFFSET_BACK_OFFSET,  				fui(offset_units), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(&vgt, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(&vgt,  				R_028DF8_PA_SU_POLY_OFFSET_DB_FMT_CNTL,  				offset_db_fmt_cntl, 0xFFFFFFFF, NULL);  	} @@ -888,10 +888,10 @@ static void r600_set_blend_color(struct pipe_context *ctx,  		return;  	rstate->id = R600_PIPE_STATE_BLEND_COLOR; -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028414_CB_BLEND_RED, fui(state->color[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028418_CB_BLEND_GREEN, fui(state->color[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02841C_CB_BLEND_BLUE, fui(state->color[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028420_CB_BLEND_ALPHA, fui(state->color[3]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028414_CB_BLEND_RED, fui(state->color[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028418_CB_BLEND_GREEN, fui(state->color[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02841C_CB_BLEND_BLUE, fui(state->color[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028420_CB_BLEND_ALPHA, fui(state->color[3]), 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_BLEND_COLOR]);  	rctx->states[R600_PIPE_STATE_BLEND_COLOR] = rstate;  	r600_context_pipe_state_set(&rctx->ctx, rstate); @@ -935,7 +935,7 @@ static void *r600_create_blend_state(struct pipe_context *ctx,  		}  	}  	blend->cb_target_mask = target_mask; -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028808_CB_COLOR_CONTROL, +	r600_pipe_state_add_reg(rstate, R_028808_CB_COLOR_CONTROL,  				color_control, 0xFFFFFFFF, NULL);  	for (int i = 0; i < 8; i++) { @@ -962,9 +962,9 @@ static void *r600_create_blend_state(struct pipe_context *ctx,  			bc |= S_028804_ALPHA_DESTBLEND(r600_translate_blend_factor(dstA));  		} -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028780_CB_BLEND0_CONTROL + i * 4, bc, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028780_CB_BLEND0_CONTROL + i * 4, bc, 0xFFFFFFFF, NULL);  		if (i == 0) { -			r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028804_CB_BLEND_CONTROL, bc, 0xFFFFFFFF, NULL); +			r600_pipe_state_add_reg(rstate, R_028804_CB_BLEND_CONTROL, bc, 0xFFFFFFFF, NULL);  		}  	}  	return rstate; @@ -1045,26 +1045,26 @@ static void *r600_create_dsa_state(struct pipe_context *ctx,  		S_028D10_FORCE_HIS_ENABLE0(V_028D10_FORCE_DISABLE) |  		S_028D10_FORCE_HIS_ENABLE1(V_028D10_FORCE_DISABLE);  	/* TODO db_render_override depends on query */ -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028028_DB_STENCIL_CLEAR, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02802C_DB_DEPTH_CLEAR, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028410_SX_ALPHA_TEST_CONTROL, alpha_test_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate, R_028028_DB_STENCIL_CLEAR, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02802C_DB_DEPTH_CLEAR, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028410_SX_ALPHA_TEST_CONTROL, alpha_test_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate,  				R_028430_DB_STENCILREFMASK, stencil_ref_mask,  				0xFFFFFFFF & C_028430_STENCILREF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028434_DB_STENCILREFMASK_BF, stencil_ref_mask_bf,  				0xFFFFFFFF & C_028434_STENCILREF_BF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028438_SX_ALPHA_REF, alpha_ref, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286E0_SPI_FOG_FUNC_SCALE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286E4_SPI_FOG_FUNC_BIAS, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286DC_SPI_FOG_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028800_DB_DEPTH_CONTROL, db_depth_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02880C_DB_SHADER_CONTROL, db_shader_control, 0xFFFFFFBE, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D0C_DB_RENDER_CONTROL, db_render_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D10_DB_RENDER_OVERRIDE, db_render_override, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D2C_DB_SRESULTS_COMPARE_STATE1, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D30_DB_PRELOAD_CONTROL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D44_DB_ALPHA_TO_MASK, 0x0000AA00, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028438_SX_ALPHA_REF, alpha_ref, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286E0_SPI_FOG_FUNC_SCALE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286E4_SPI_FOG_FUNC_BIAS, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286DC_SPI_FOG_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028800_DB_DEPTH_CONTROL, db_depth_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02880C_DB_SHADER_CONTROL, db_shader_control, 0xFFFFFFBE, NULL); +	r600_pipe_state_add_reg(rstate, R_028D0C_DB_RENDER_CONTROL, db_render_control, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028D10_DB_RENDER_OVERRIDE, db_render_override, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028D2C_DB_SRESULTS_COMPARE_STATE1, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028D30_DB_PRELOAD_CONTROL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028D44_DB_ALPHA_TO_MASK, 0x0000AA00, 0xFFFFFFFF, NULL);  	return rstate;  } @@ -1103,11 +1103,11 @@ static void *r600_create_rs_state(struct pipe_context *ctx,  			tmp |= S_0286D4_PNT_SPRITE_TOP_1(1);  		}  	} -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286D4_SPI_INTERP_CONTROL_0, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0286D4_SPI_INTERP_CONTROL_0, tmp, 0xFFFFFFFF, NULL);  	polygon_dual_mode = (state->fill_front != PIPE_POLYGON_MODE_FILL ||  				state->fill_back != PIPE_POLYGON_MODE_FILL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028814_PA_SU_SC_MODE_CNTL, +	r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,  		S_028814_PROVOKING_VTX_LAST(prov_vtx) |  		S_028814_CULL_FRONT((state->cull_face & PIPE_FACE_FRONT) ? 1 : 0) |  		S_028814_CULL_BACK((state->cull_face & PIPE_FACE_BACK) ? 1 : 0) | @@ -1118,23 +1118,23 @@ static void *r600_create_rs_state(struct pipe_context *ctx,  		S_028814_POLY_MODE(polygon_dual_mode) |  		S_028814_POLYMODE_FRONT_PTYPE(r600_translate_fill(state->fill_front)) |  		S_028814_POLYMODE_BACK_PTYPE(r600_translate_fill(state->fill_back)), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02881C_PA_CL_VS_OUT_CNTL, +	r600_pipe_state_add_reg(rstate, R_02881C_PA_CL_VS_OUT_CNTL,  			S_02881C_USE_VTX_POINT_SIZE(state->point_size_per_vertex) |  			S_02881C_VS_OUT_MISC_VEC_ENA(state->point_size_per_vertex), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028820_PA_CL_NANINF_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028820_PA_CL_NANINF_CNTL, 0x00000000, 0xFFFFFFFF, NULL);  	/* point size 12.4 fixed point */  	tmp = (unsigned)(state->point_size * 8.0); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A08_PA_SU_LINE_CNTL, 0x00000008, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A0C_PA_SC_LINE_STIPPLE, 0x00000005, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A48_PA_SC_MPASS_PS_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, 0x00000008, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A0C_PA_SC_LINE_STIPPLE, 0x00000005, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A48_PA_SC_MPASS_PS_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, 0x00000000, 0xFFFFFFFF, NULL);  	return rstate;  } @@ -1180,7 +1180,7 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,  	rstate->id = R600_PIPE_STATE_SAMPLER;  	util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); -	r600_pipe_state_add_reg(rstate, R600_GROUP_SAMPLER, R_03C000_SQ_TEX_SAMPLER_WORD0_0, +	r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,  			S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |  			S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |  			S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) | @@ -1190,16 +1190,16 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,  			S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |  			S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);  	/* FIXME LOD it depends on texture base level ... */ -	r600_pipe_state_add_reg(rstate, R600_GROUP_SAMPLER, R_03C004_SQ_TEX_SAMPLER_WORD1_0, +	r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,  			S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |  			S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)) |  			S_03C004_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_SAMPLER, R_03C008_SQ_TEX_SAMPLER_WORD2_0, S_03C008_TYPE(1), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0, S_03C008_TYPE(1), 0xFFFFFFFF, NULL);  	if (uc.ui) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_00A400_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A400_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);  	}  	return rstate;  } @@ -1281,30 +1281,30 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c  	pitch = align(tmp->pitch[0] / tmp->bpt, 8);  	/* FIXME properly handle first level != 0 */ -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038000_RESOURCE0_WORD0, +	r600_pipe_state_add_reg(rstate, R_038000_RESOURCE0_WORD0,  				S_038000_DIM(r600_tex_dim(texture->target)) |  				S_038000_TILE_MODE(array_mode) |  				S_038000_TILE_TYPE(tile_type) |  				S_038000_PITCH((pitch / 8) - 1) |  				S_038000_TEX_WIDTH(texture->width0 - 1), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038004_RESOURCE0_WORD1, +	r600_pipe_state_add_reg(rstate, R_038004_RESOURCE0_WORD1,  				S_038004_TEX_HEIGHT(texture->height0 - 1) |  				S_038004_TEX_DEPTH(texture->depth0 - 1) |  				S_038004_DATA_FORMAT(format), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038008_RESOURCE0_WORD2, +	r600_pipe_state_add_reg(rstate, R_038008_RESOURCE0_WORD2,  				tmp->offset[0] >> 8, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_03800C_RESOURCE0_WORD3, +	r600_pipe_state_add_reg(rstate, R_03800C_RESOURCE0_WORD3,  				tmp->offset[1] >> 8, 0xFFFFFFFF, bo[1]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038010_RESOURCE0_WORD4, +	r600_pipe_state_add_reg(rstate, R_038010_RESOURCE0_WORD4,  				word4 | S_038010_NUM_FORMAT_ALL(V_038010_SQ_NUM_FORMAT_NORM) |  				S_038010_SRF_MODE_ALL(V_038010_SFR_MODE_NO_ZERO) |  				S_038010_REQUEST_SIZE(1) |  				S_038010_BASE_LEVEL(state->first_level), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038014_RESOURCE0_WORD5, +	r600_pipe_state_add_reg(rstate, R_038014_RESOURCE0_WORD5,  				S_038014_LAST_LEVEL(state->last_level) |  				S_038014_BASE_ARRAY(0) |  				S_038014_LAST_ARRAY(0), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_RESOURCE, R_038018_RESOURCE0_WORD6, +	r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6,  				S_038018_TYPE(V_038010_SQ_TEX_VTX_VALID_TEXTURE), 0xFFFFFFFF, NULL);  	return &resource->base; @@ -1399,20 +1399,20 @@ static void r600_set_clip_state(struct pipe_context *ctx,  	rctx->clip = *state;  	rstate->id = R600_PIPE_STATE_CLIP;  	for (int i = 0; i < state->nr; i++) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028E20_PA_CL_UCP0_X + i * 4,  					fui(state->ucp[i][0]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028E24_PA_CL_UCP0_Y + i * 4,  					fui(state->ucp[i][1]) , 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028E28_PA_CL_UCP0_Z + i * 4,  					fui(state->ucp[i][2]), 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028E2C_PA_CL_UCP0_W + i * 4,  					fui(state->ucp[i][3]), 0xFFFFFFFF, NULL);  	} -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028810_PA_CL_CLIP_CNTL, +	r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,  			S_028810_PS_UCP_MODE(3) | ((1 << state->nr) - 1) |  			S_028810_ZCLIP_NEAR_DISABLE(state->depth_clamp) |  			S_028810_ZCLIP_FAR_DISABLE(state->depth_clamp), 0xFFFFFFFF, NULL); @@ -1457,50 +1457,50 @@ static void r600_set_scissor_state(struct pipe_context *ctx,  	rstate->id = R600_PIPE_STATE_SCISSOR;  	tl = S_028240_TL_X(state->minx) | S_028240_TL_Y(state->miny) | S_028240_WINDOW_OFFSET_DISABLE(1);  	br = S_028244_BR_X(state->maxx) | S_028244_BR_Y(state->maxy); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028030_PA_SC_SCREEN_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028034_PA_SC_SCREEN_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028204_PA_SC_WINDOW_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028208_PA_SC_WINDOW_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028210_PA_SC_CLIPRECT_0_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028214_PA_SC_CLIPRECT_0_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028218_PA_SC_CLIPRECT_1_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02821C_PA_SC_CLIPRECT_1_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028220_PA_SC_CLIPRECT_2_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028224_PA_SC_CLIPRECT_2_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028228_PA_SC_CLIPRECT_3_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02822C_PA_SC_CLIPRECT_3_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028200_PA_SC_WINDOW_OFFSET, 0x00000000,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02820C_PA_SC_CLIPRECT_RULE, 0x0000FFFF,  				0xFFFFFFFF, NULL);  	if (rctx->family >= CHIP_RV770) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +		r600_pipe_state_add_reg(rstate,  					R_028230_PA_SC_EDGERULE, 0xAAAAAAAA,  					0xFFFFFFFF, NULL);  	} @@ -1523,11 +1523,11 @@ static void r600_set_stencil_ref(struct pipe_context *ctx,  	rctx->stencil_ref = *state;  	rstate->id = R600_PIPE_STATE_STENCIL_REF;  	tmp = S_028430_STENCILREF(state->ref_value[0]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028430_DB_STENCILREFMASK, tmp,  				~C_028430_STENCILREF, NULL);  	tmp = S_028434_STENCILREF_BF(state->ref_value[1]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028434_DB_STENCILREFMASK_BF, tmp,  				~C_028434_STENCILREF_BF, NULL); @@ -1547,15 +1547,15 @@ static void r600_set_viewport_state(struct pipe_context *ctx,  	rctx->viewport = *state;  	rstate->id = R600_PIPE_STATE_VIEWPORT; -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0282D0_PA_SC_VPORT_ZMIN_0, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0282D4_PA_SC_VPORT_ZMAX_0, 0x3F800000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02843C_PA_CL_VPORT_XSCALE_0, fui(state->scale[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028444_PA_CL_VPORT_YSCALE_0, fui(state->scale[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02844C_PA_CL_VPORT_ZSCALE_0, fui(state->scale[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028440_PA_CL_VPORT_XOFFSET_0, fui(state->translate[0]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028448_PA_CL_VPORT_YOFFSET_0, fui(state->translate[1]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028450_PA_CL_VPORT_ZOFFSET_0, fui(state->translate[2]), 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028818_PA_CL_VTE_CNTL, 0x0000043F, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0282D0_PA_SC_VPORT_ZMIN_0, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0282D4_PA_SC_VPORT_ZMAX_0, 0x3F800000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02843C_PA_CL_VPORT_XSCALE_0, fui(state->scale[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028444_PA_CL_VPORT_YSCALE_0, fui(state->scale[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02844C_PA_CL_VPORT_ZSCALE_0, fui(state->scale[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028440_PA_CL_VPORT_XOFFSET_0, fui(state->translate[0]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028448_PA_CL_VPORT_YOFFSET_0, fui(state->translate[1]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028450_PA_CL_VPORT_ZOFFSET_0, fui(state->translate[2]), 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028818_PA_CL_VTE_CNTL, 0x0000043F, 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_VIEWPORT]);  	rctx->states[R600_PIPE_STATE_VIEWPORT] = rstate; @@ -1596,27 +1596,27 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta  	if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)   		color_info |= S_0280A0_SOURCE_FORMAT(1); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028040_CB_COLOR0_BASE + cb * 4,  				state->cbufs[cb]->offset >> 8, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_0280A0_CB_COLOR0_INFO + cb * 4,  				color_info, 0xFFFFFFFF, bo[0]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028060_CB_COLOR0_SIZE + cb * 4,  				S_028060_PITCH_TILE_MAX(pitch) |  				S_028060_SLICE_TILE_MAX(slice),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028080_CB_COLOR0_VIEW + cb * 4,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_0280E0_CB_COLOR0_FRAG + cb * 4,  				0x00000000, 0xFFFFFFFF, bo[1]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_0280C0_CB_COLOR0_TILE + cb * 4,  				0x00000000, 0xFFFFFFFF, bo[2]); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028100_CB_COLOR0_MASK + cb * 4,  				0x00000000, 0xFFFFFFFF, NULL);  } @@ -1644,16 +1644,16 @@ static void r600_db(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta  	slice = (rtex->pitch[level] / rtex->bpt) * state->zsbuf->height / 64 - 1;  	format = r600_translate_dbformat(state->zsbuf->texture->format); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02800C_DB_DEPTH_BASE, +	r600_pipe_state_add_reg(rstate, R_02800C_DB_DEPTH_BASE,  				state->zsbuf->offset >> 8, 0xFFFFFFFF, rbuffer->bo); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028000_DB_DEPTH_SIZE, +	r600_pipe_state_add_reg(rstate, R_028000_DB_DEPTH_SIZE,  				S_028000_PITCH_TILE_MAX(pitch) | S_028000_SLICE_TILE_MAX(slice),  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028004_DB_DEPTH_VIEW, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028010_DB_DEPTH_INFO, +	r600_pipe_state_add_reg(rstate, R_028004_DB_DEPTH_VIEW, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028010_DB_DEPTH_INFO,  				S_028010_ARRAY_MODE(rtex->array_mode) | S_028010_FORMAT(format),  				0xFFFFFFFF, rbuffer->bo); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028D34_DB_PREFETCH_LIMIT, +	r600_pipe_state_add_reg(rstate, R_028D34_DB_PREFETCH_LIMIT,  				(state->zsbuf->height / 8) - 1, 0xFFFFFFFF, NULL);  } @@ -1699,40 +1699,40 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,  	tl = S_028240_TL_X(0) | S_028240_TL_Y(0) | S_028240_WINDOW_OFFSET_DISABLE(1);  	br = S_028244_BR_X(state->width) | S_028244_BR_Y(state->height); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028240_PA_SC_GENERIC_SCISSOR_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028244_PA_SC_GENERIC_SCISSOR_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028250_PA_SC_VPORT_SCISSOR_0_TL, tl,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028254_PA_SC_VPORT_SCISSOR_0_BR, br,  				0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0287A0_CB_SHADER_CONTROL, +	r600_pipe_state_add_reg(rstate, R_0287A0_CB_SHADER_CONTROL,  				shader_control, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028238_CB_TARGET_MASK, +	r600_pipe_state_add_reg(rstate, R_028238_CB_TARGET_MASK,  				0x00000000, target_mask, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02823C_CB_SHADER_MASK, +	r600_pipe_state_add_reg(rstate, R_02823C_CB_SHADER_MASK,  				shader_mask, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C04_PA_SC_AA_CONFIG, +	r600_pipe_state_add_reg(rstate, R_028C04_PA_SC_AA_CONFIG,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX, +	r600_pipe_state_add_reg(rstate, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C20_PA_SC_AA_SAMPLE_LOCS_8S_WD1_MCTX, +	r600_pipe_state_add_reg(rstate, R_028C20_PA_SC_AA_SAMPLE_LOCS_8S_WD1_MCTX,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C30_CB_CLRCMP_CONTROL, +	r600_pipe_state_add_reg(rstate, R_028C30_CB_CLRCMP_CONTROL,  				0x01000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C34_CB_CLRCMP_SRC, +	r600_pipe_state_add_reg(rstate, R_028C34_CB_CLRCMP_SRC,  				0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C38_CB_CLRCMP_DST, +	r600_pipe_state_add_reg(rstate, R_028C38_CB_CLRCMP_DST,  				0x000000FF, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C3C_CB_CLRCMP_MSK, +	r600_pipe_state_add_reg(rstate, R_028C3C_CB_CLRCMP_MSK,  				0xFFFFFFFF, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028C48_PA_SC_AA_MASK, +	r600_pipe_state_add_reg(rstate, R_028C48_PA_SC_AA_MASK,  				0xFFFFFFFF, 0xFFFFFFFF, NULL);  	free(rctx->states[R600_PIPE_STATE_FRAMEBUFFER]); @@ -1805,10 +1805,10 @@ static void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint  			return;  		for (int i = 0; i < *nconst; i++, offset += 0x10) {  			rstate[i].nregs = 0; -			r600_pipe_state_add_reg(&rstate[i], R600_GROUP_ALU_CONST, offset + 0x0, ptr[i * 4 + 0], 0xFFFFFFFF, NULL); -			r600_pipe_state_add_reg(&rstate[i], R600_GROUP_ALU_CONST, offset + 0x4, ptr[i * 4 + 1], 0xFFFFFFFF, NULL); -			r600_pipe_state_add_reg(&rstate[i], R600_GROUP_ALU_CONST, offset + 0x8, ptr[i * 4 + 2], 0xFFFFFFFF, NULL); -			r600_pipe_state_add_reg(&rstate[i], R600_GROUP_ALU_CONST, offset + 0xC, ptr[i * 4 + 3], 0xFFFFFFFF, NULL); +			r600_pipe_state_add_reg(&rstate[i], offset + 0x0, ptr[i * 4 + 0], 0xFFFFFFFF, NULL); +			r600_pipe_state_add_reg(&rstate[i], offset + 0x4, ptr[i * 4 + 1], 0xFFFFFFFF, NULL); +			r600_pipe_state_add_reg(&rstate[i], offset + 0x8, ptr[i * 4 + 2], 0xFFFFFFFF, NULL); +			r600_pipe_state_add_reg(&rstate[i], offset + 0xC, ptr[i * 4 + 3], 0xFFFFFFFF, NULL);  			r600_context_pipe_state_set(&rctx->ctx, &rstate[i]);  		}  		pipe_buffer_unmap(ctx, buffer, transfer); @@ -2072,20 +2072,20 @@ static void r600_init_config2(struct r600_pipe_context *rctx)  	tmp |= S_008C00_VS_PRIO(vs_prio);  	tmp |= S_008C00_GS_PRIO(gs_prio);  	tmp |= S_008C00_ES_PRIO(es_prio); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C00_SQ_CONFIG, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C00_SQ_CONFIG, tmp, 0xFFFFFFFF, NULL);  	/* SQ_GPR_RESOURCE_MGMT_1 */  	tmp = 0;  	tmp |= S_008C04_NUM_PS_GPRS(num_ps_gprs);  	tmp |= S_008C04_NUM_VS_GPRS(num_vs_gprs);  	tmp |= S_008C04_NUM_CLAUSE_TEMP_GPRS(num_temp_gprs); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C04_SQ_GPR_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C04_SQ_GPR_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL);  	/* SQ_GPR_RESOURCE_MGMT_2 */  	tmp = 0;  	tmp |= S_008C08_NUM_GS_GPRS(num_gs_gprs);  	tmp |= S_008C08_NUM_GS_GPRS(num_es_gprs); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C08_SQ_GPR_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C08_SQ_GPR_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL);  	/* SQ_THREAD_RESOURCE_MGMT */  	tmp = 0; @@ -2093,70 +2093,70 @@ static void r600_init_config2(struct r600_pipe_context *rctx)  	tmp |= S_008C0C_NUM_VS_THREADS(num_vs_threads);  	tmp |= S_008C0C_NUM_GS_THREADS(num_gs_threads);  	tmp |= S_008C0C_NUM_ES_THREADS(num_es_threads); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C0C_SQ_THREAD_RESOURCE_MGMT, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C0C_SQ_THREAD_RESOURCE_MGMT, tmp, 0xFFFFFFFF, NULL);  	/* SQ_STACK_RESOURCE_MGMT_1 */  	tmp = 0;  	tmp |= S_008C10_NUM_PS_STACK_ENTRIES(num_ps_stack_entries);  	tmp |= S_008C10_NUM_VS_STACK_ENTRIES(num_vs_stack_entries); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C10_SQ_STACK_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C10_SQ_STACK_RESOURCE_MGMT_1, tmp, 0xFFFFFFFF, NULL);  	/* SQ_STACK_RESOURCE_MGMT_2 */  	tmp = 0;  	tmp |= S_008C14_NUM_GS_STACK_ENTRIES(num_gs_stack_entries);  	tmp |= S_008C14_NUM_ES_STACK_ENTRIES(num_es_stack_entries); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008C14_SQ_STACK_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_008C14_SQ_STACK_RESOURCE_MGMT_2, tmp, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009714_VC_ENHANCE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028350_SX_MISC, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_009714_VC_ENHANCE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028350_SX_MISC, 0x00000000, 0xFFFFFFFF, NULL);  	if (family >= CHIP_RV770) { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x00004000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009508_TA_CNTL_AUX, 0x07000002, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009830_DB_DEBUG, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009838_DB_WATERMARKS, 0x00420204, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286C8_SPI_THREAD_GROUPING, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A4C_PA_SC_MODE_CNTL, 0x00514000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x00004000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009508_TA_CNTL_AUX, 0x07000002, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009830_DB_DEBUG, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009838_DB_WATERMARKS, 0x00420204, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_0286C8_SPI_THREAD_GROUPING, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL, 0x00514000, 0xFFFFFFFF, NULL);  	} else { -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x00000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009508_TA_CNTL_AUX, 0x07000003, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009830_DB_DEBUG, 0x82000000, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONFIG, R_009838_DB_WATERMARKS, 0x01020204, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0286C8_SPI_THREAD_GROUPING, 0x00000001, 0xFFFFFFFF, NULL); -		r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A4C_PA_SC_MODE_CNTL, 0x00004010, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x00000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009508_TA_CNTL_AUX, 0x07000003, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009830_DB_DEBUG, 0x82000000, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_009838_DB_WATERMARKS, 0x01020204, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_0286C8_SPI_THREAD_GROUPING, 0x00000001, 0xFFFFFFFF, NULL); +		r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL, 0x00004010, 0xFFFFFFFF, NULL);  	} -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288A8_SQ_ESGS_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288AC_SQ_GSVS_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288B0_SQ_ESTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288B4_SQ_GSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288B8_SQ_VSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288BC_SQ_PSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288C0_SQ_FBUF_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288C4_SQ_REDUC_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_0288C8_SQ_GS_VERT_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A10_VGT_OUTPUT_PATH_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A14_VGT_HOS_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A20_VGT_HOS_REUSE_DEPTH, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A24_VGT_GROUP_PRIM_TYPE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A28_VGT_GROUP_FIRST_DECR, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A2C_VGT_GROUP_DECR, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A30_VGT_GROUP_VECT_0_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A34_VGT_GROUP_VECT_1_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A40_VGT_GS_MODE, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028AB0_VGT_STRMOUT_EN, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028AB4_VGT_REUSE_OFF, 0x00000001, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028AB8_VGT_VTX_CNT_EN, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028B20_VGT_STRMOUT_BUFFER_EN, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288A8_SQ_ESGS_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288AC_SQ_GSVS_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288B0_SQ_ESTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288B4_SQ_GSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288B8_SQ_VSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288BC_SQ_PSTMP_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288C0_SQ_FBUF_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288C4_SQ_REDUC_RING_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_0288C8_SQ_GS_VERT_ITEMSIZE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A10_VGT_OUTPUT_PATH_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A14_VGT_HOS_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A20_VGT_HOS_REUSE_DEPTH, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A24_VGT_GROUP_PRIM_TYPE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A28_VGT_GROUP_FIRST_DECR, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A2C_VGT_GROUP_DECR, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A30_VGT_GROUP_VECT_0_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A34_VGT_GROUP_VECT_1_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A40_VGT_GS_MODE, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AB0_VGT_STRMOUT_EN, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AB4_VGT_REUSE_OFF, 0x00000001, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AB8_VGT_VTX_CNT_EN, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028B20_VGT_STRMOUT_BUFFER_EN, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A84_VGT_PRIMITIVEID_EN, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028AA0_VGT_INSTANCE_STEP_RATE_0, 0x00000000, 0xFFFFFFFF, NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, R_028AA4_VGT_INSTANCE_STEP_RATE_1, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A84_VGT_PRIMITIVEID_EN, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AA0_VGT_INSTANCE_STEP_RATE_0, 0x00000000, 0xFFFFFFFF, NULL); +	r600_pipe_state_add_reg(rstate, R_028AA4_VGT_INSTANCE_STEP_RATE_1, 0x00000000, 0xFFFFFFFF, NULL);  	r600_context_pipe_state_set(&rctx->ctx, rstate);  } @@ -2236,11 +2236,11 @@ static void *r600_create_db_flush_dsa(struct r600_pipe_context *rctx)  	}  	rstate = rctx->context.create_depth_stencil_alpha_state(&rctx->context, &dsa); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_02880C_DB_SHADER_CONTROL,  				0x0,  				S_02880C_DUAL_EXPORT_ENABLE(1), NULL); -	r600_pipe_state_add_reg(rstate, R600_GROUP_CONTEXT, +	r600_pipe_state_add_reg(rstate,  				R_028D0C_DB_RENDER_CONTROL,  				S_028D0C_DEPTH_COPY_ENABLE(1) |  				S_028D0C_STENCIL_COPY_ENABLE(1) | diff --git a/src/gallium/winsys/r600/drm/evergreen_state.c b/src/gallium/winsys/r600/drm/evergreen_state.c index 1cc22a98fd..3165bcd678 100644 --- a/src/gallium/winsys/r600/drm/evergreen_state.c +++ b/src/gallium/winsys/r600/drm/evergreen_state.c @@ -31,12 +31,12 @@  #include "xf86drm.h"  #include "r600.h"  #include "evergreend.h" -#include "r600_priv.h"  #include "radeon_drm.h"  #include "bof.h"  #include "pipe/p_compiler.h"  #include "util/u_inlines.h"  #include <pipebuffer/pb_bufmgr.h> +#include "r600_priv.h"  struct radeon_bo {  	struct pipe_reference		reference; @@ -46,460 +46,454 @@ struct radeon_bo {  	unsigned			map_count;  	void				*data;  }; -struct radeon_ws_bo { -	struct pipe_reference		reference; -	struct pb_buffer		*pb; -}; +  struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf); -struct radeon_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned group_id, unsigned offset); -void r600_context_group_emit_dirty(struct r600_context *ctx, struct r600_group *group); -void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct radeon_bo *bo); -int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg, unsigned nreg, unsigned opcode); -int r600_group_init(struct r600_group *group, unsigned start_offset, unsigned end_offset); +struct radeon_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset); +int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg, unsigned nreg);  #define GROUP_FORCE_NEW_BLOCK	0 +  static const struct r600_reg evergreen_config_reg_list[] = { -	{0, 0, R_008958_VGT_PRIMITIVE_TYPE}, -	{0, 0, R_008A14_PA_CL_ENHANCE}, -	{0, 0, R_008C00_SQ_CONFIG}, -	{0, 0, R_008C04_SQ_GPR_RESOURCE_MGMT_1}, -	{0, 0, R_008C08_SQ_GPR_RESOURCE_MGMT_2}, -	{0, 0, R_008C0C_SQ_THREAD_RESOURCE_MGMT}, -	{0, 0, R_008C18_SQ_THREAD_RESOURCE_MGMT_1}, -	{0, 0, R_008C1C_SQ_THREAD_RESOURCE_MGMT_2}, -	{0, 0, R_008C20_SQ_STACK_RESOURCE_MGMT_1}, -	{0, 0, R_008C24_SQ_STACK_RESOURCE_MGMT_2}, -	{0, 0, R_008C28_SQ_STACK_RESOURCE_MGMT_3}, -	{0, 0, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ}, -	{0, 0, R_009100_SPI_CONFIG_CNTL}, -	{0, 0, R_00913C_SPI_CONFIG_CNTL_1}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008958_VGT_PRIMITIVE_TYPE, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008A14_PA_CL_ENHANCE, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C00_SQ_CONFIG, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C04_SQ_GPR_RESOURCE_MGMT_1, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C08_SQ_GPR_RESOURCE_MGMT_2, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C0C_SQ_THREAD_RESOURCE_MGMT, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C18_SQ_THREAD_RESOURCE_MGMT_1, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C1C_SQ_THREAD_RESOURCE_MGMT_2, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C20_SQ_STACK_RESOURCE_MGMT_1, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C24_SQ_STACK_RESOURCE_MGMT_2, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008C28_SQ_STACK_RESOURCE_MGMT_3, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_009100_SPI_CONFIG_CNTL, 0, 0}, +	{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, R_00913C_SPI_CONFIG_CNTL_1, 0, 0},  };  static const struct r600_reg evergreen_context_reg_list[] = { -	{0, 0, R_028000_DB_RENDER_CONTROL}, -	{0, 0, R_028004_DB_COUNT_CONTROL}, -	{0, 0, R_028008_DB_DEPTH_VIEW}, -	{0, 0, R_02800C_DB_RENDER_OVERRIDE}, -	{0, 0, R_028010_DB_RENDER_OVERRIDE2}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028014_DB_HTILE_DATA_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{0, 0, R_028028_DB_STENCIL_CLEAR}, -	{0, 0, R_02802C_DB_DEPTH_CLEAR}, -	{0, 0, R_028030_PA_SC_SCREEN_SCISSOR_TL}, -	{0, 0, R_028034_PA_SC_SCREEN_SCISSOR_BR}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028040_DB_Z_INFO}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{0, 0, R_028044_DB_STENCIL_INFO}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028048_DB_Z_READ_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_02804C_DB_STENCIL_READ_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028050_DB_Z_WRITE_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028054_DB_STENCIL_WRITE_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{0, 0, R_028058_DB_DEPTH_SIZE}, -	{0, 0, R_02805C_DB_DEPTH_SLICE}, -	{0, 0, R_028140_ALU_CONST_BUFFER_SIZE_PS_0}, -	{0, 0, R_028180_ALU_CONST_BUFFER_SIZE_VS_0}, -	{0, 0, R_028200_PA_SC_WINDOW_OFFSET}, -	{0, 0, R_028204_PA_SC_WINDOW_SCISSOR_TL}, -	{0, 0, R_028208_PA_SC_WINDOW_SCISSOR_BR}, -	{0, 0, R_02820C_PA_SC_CLIPRECT_RULE}, -	{0, 0, R_028210_PA_SC_CLIPRECT_0_TL}, -	{0, 0, R_028214_PA_SC_CLIPRECT_0_BR}, -	{0, 0, R_028218_PA_SC_CLIPRECT_1_TL}, -	{0, 0, R_02821C_PA_SC_CLIPRECT_1_BR}, -	{0, 0, R_028220_PA_SC_CLIPRECT_2_TL}, -	{0, 0, R_028224_PA_SC_CLIPRECT_2_BR}, -	{0, 0, R_028228_PA_SC_CLIPRECT_3_TL}, -	{0, 0, R_02822C_PA_SC_CLIPRECT_3_BR}, -	{0, 0, R_028230_PA_SC_EDGERULE}, -	{0, 0, R_028234_PA_SU_HARDWARE_SCREEN_OFFSET}, -	{0, 0, R_028238_CB_TARGET_MASK}, -	{0, 0, R_02823C_CB_SHADER_MASK}, -	{0, 0, R_028240_PA_SC_GENERIC_SCISSOR_TL}, -	{0, 0, R_028244_PA_SC_GENERIC_SCISSOR_BR}, -	{0, 0, R_028250_PA_SC_VPORT_SCISSOR_0_TL}, -	{0, 0, R_028254_PA_SC_VPORT_SCISSOR_0_BR}, -	{0, 0, R_028350_SX_MISC}, -	{0, 0, R_028380_SQ_VTX_SEMANTIC_0}, -	{0, 0, R_028384_SQ_VTX_SEMANTIC_1}, -	{0, 0, R_028388_SQ_VTX_SEMANTIC_2}, -	{0, 0, R_02838C_SQ_VTX_SEMANTIC_3}, -	{0, 0, R_028390_SQ_VTX_SEMANTIC_4}, -	{0, 0, R_028394_SQ_VTX_SEMANTIC_5}, -	{0, 0, R_028398_SQ_VTX_SEMANTIC_6}, -	{0, 0, R_02839C_SQ_VTX_SEMANTIC_7}, -	{0, 0, R_0283A0_SQ_VTX_SEMANTIC_8}, -	{0, 0, R_0283A4_SQ_VTX_SEMANTIC_9}, -	{0, 0, R_0283A8_SQ_VTX_SEMANTIC_10}, -	{0, 0, R_0283AC_SQ_VTX_SEMANTIC_11}, -	{0, 0, R_0283B0_SQ_VTX_SEMANTIC_12}, -	{0, 0, R_0283B4_SQ_VTX_SEMANTIC_13}, -	{0, 0, R_0283B8_SQ_VTX_SEMANTIC_14}, -	{0, 0, R_0283BC_SQ_VTX_SEMANTIC_15}, -	{0, 0, R_0283C0_SQ_VTX_SEMANTIC_16}, -	{0, 0, R_0283C4_SQ_VTX_SEMANTIC_17}, -	{0, 0, R_0283C8_SQ_VTX_SEMANTIC_18}, -	{0, 0, R_0283CC_SQ_VTX_SEMANTIC_19}, -	{0, 0, R_0283D0_SQ_VTX_SEMANTIC_20}, -	{0, 0, R_0283D4_SQ_VTX_SEMANTIC_21}, -	{0, 0, R_0283D8_SQ_VTX_SEMANTIC_22}, -	{0, 0, R_0283DC_SQ_VTX_SEMANTIC_23}, -	{0, 0, R_0283E0_SQ_VTX_SEMANTIC_24}, -	{0, 0, R_0283E4_SQ_VTX_SEMANTIC_25}, -	{0, 0, R_0283E8_SQ_VTX_SEMANTIC_26}, -	{0, 0, R_0283EC_SQ_VTX_SEMANTIC_27}, -	{0, 0, R_0283F0_SQ_VTX_SEMANTIC_28}, -	{0, 0, R_0283F4_SQ_VTX_SEMANTIC_29}, -	{0, 0, R_0283F8_SQ_VTX_SEMANTIC_30}, -	{0, 0, R_0283FC_SQ_VTX_SEMANTIC_31}, -	{0, 0, R_0282D0_PA_SC_VPORT_ZMIN_0}, -	{0, 0, R_0282D4_PA_SC_VPORT_ZMAX_0}, -	{0, 0, R_028400_VGT_MAX_VTX_INDX}, -	{0, 0, R_028404_VGT_MIN_VTX_INDX}, -	{0, 0, R_028408_VGT_INDX_OFFSET}, -	{0, 0, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX}, -	{0, 0, R_028410_SX_ALPHA_TEST_CONTROL}, -	{0, 0, R_028414_CB_BLEND_RED}, -	{0, 0, R_028418_CB_BLEND_GREEN}, -	{0, 0, R_02841C_CB_BLEND_BLUE}, -	{0, 0, R_028420_CB_BLEND_ALPHA}, -	{0, 0, R_028430_DB_STENCILREFMASK}, -	{0, 0, R_028434_DB_STENCILREFMASK_BF}, -	{0, 0, R_028438_SX_ALPHA_REF}, -	{0, 0, R_02843C_PA_CL_VPORT_XSCALE_0}, -	{0, 0, R_028440_PA_CL_VPORT_XOFFSET_0}, -	{0, 0, R_028444_PA_CL_VPORT_YSCALE_0}, -	{0, 0, R_028448_PA_CL_VPORT_YOFFSET_0}, -	{0, 0, R_02844C_PA_CL_VPORT_ZSCALE_0}, -	{0, 0, R_028450_PA_CL_VPORT_ZOFFSET_0}, -	{0, 0, R_0285BC_PA_CL_UCP0_X}, -	{0, 0, R_0285C0_PA_CL_UCP0_Y}, -	{0, 0, R_0285C4_PA_CL_UCP0_Z}, -	{0, 0, R_0285C8_PA_CL_UCP0_W}, -	{0, 0, R_0285CC_PA_CL_UCP1_X}, -	{0, 0, R_0285D0_PA_CL_UCP1_Y}, -	{0, 0, R_0285D4_PA_CL_UCP1_Z}, -	{0, 0, R_0285D8_PA_CL_UCP1_W}, -	{0, 0, R_0285DC_PA_CL_UCP2_X}, -	{0, 0, R_0285E0_PA_CL_UCP2_Y}, -	{0, 0, R_0285E4_PA_CL_UCP2_Z}, -	{0, 0, R_0285E8_PA_CL_UCP2_W}, -	{0, 0, R_0285EC_PA_CL_UCP3_X}, -	{0, 0, R_0285F0_PA_CL_UCP3_Y}, -	{0, 0, R_0285F4_PA_CL_UCP3_Z}, -	{0, 0, R_0285F8_PA_CL_UCP3_W}, -	{0, 0, R_0285FC_PA_CL_UCP4_X}, -	{0, 0, R_028600_PA_CL_UCP4_Y}, -	{0, 0, R_028604_PA_CL_UCP4_Z}, -	{0, 0, R_028608_PA_CL_UCP4_W}, -	{0, 0, R_02860C_PA_CL_UCP5_X}, -	{0, 0, R_028610_PA_CL_UCP5_Y}, -	{0, 0, R_028614_PA_CL_UCP5_Z}, -	{0, 0, R_028618_PA_CL_UCP5_W}, -	{0, 0, R_02861C_SPI_VS_OUT_ID_0}, -	{0, 0, R_028620_SPI_VS_OUT_ID_1}, -	{0, 0, R_028624_SPI_VS_OUT_ID_2}, -	{0, 0, R_028628_SPI_VS_OUT_ID_3}, -	{0, 0, R_02862C_SPI_VS_OUT_ID_4}, -	{0, 0, R_028630_SPI_VS_OUT_ID_5}, -	{0, 0, R_028634_SPI_VS_OUT_ID_6}, -	{0, 0, R_028638_SPI_VS_OUT_ID_7}, -	{0, 0, R_02863C_SPI_VS_OUT_ID_8}, -	{0, 0, R_028640_SPI_VS_OUT_ID_9}, -	{0, 0, R_028644_SPI_PS_INPUT_CNTL_0}, -	{0, 0, R_028648_SPI_PS_INPUT_CNTL_1}, -	{0, 0, R_02864C_SPI_PS_INPUT_CNTL_2}, -	{0, 0, R_028650_SPI_PS_INPUT_CNTL_3}, -	{0, 0, R_028654_SPI_PS_INPUT_CNTL_4}, -	{0, 0, R_028658_SPI_PS_INPUT_CNTL_5}, -	{0, 0, R_02865C_SPI_PS_INPUT_CNTL_6}, -	{0, 0, R_028660_SPI_PS_INPUT_CNTL_7}, -	{0, 0, R_028664_SPI_PS_INPUT_CNTL_8}, -	{0, 0, R_028668_SPI_PS_INPUT_CNTL_9}, -	{0, 0, R_02866C_SPI_PS_INPUT_CNTL_10}, -	{0, 0, R_028670_SPI_PS_INPUT_CNTL_11}, -	{0, 0, R_028674_SPI_PS_INPUT_CNTL_12}, -	{0, 0, R_028678_SPI_PS_INPUT_CNTL_13}, -	{0, 0, R_02867C_SPI_PS_INPUT_CNTL_14}, -	{0, 0, R_028680_SPI_PS_INPUT_CNTL_15}, -	{0, 0, R_028684_SPI_PS_INPUT_CNTL_16}, -	{0, 0, R_028688_SPI_PS_INPUT_CNTL_17}, -	{0, 0, R_02868C_SPI_PS_INPUT_CNTL_18}, -	{0, 0, R_028690_SPI_PS_INPUT_CNTL_19}, -	{0, 0, R_028694_SPI_PS_INPUT_CNTL_20}, -	{0, 0, R_028698_SPI_PS_INPUT_CNTL_21}, -	{0, 0, R_02869C_SPI_PS_INPUT_CNTL_22}, -	{0, 0, R_0286A0_SPI_PS_INPUT_CNTL_23}, -	{0, 0, R_0286A4_SPI_PS_INPUT_CNTL_24}, -	{0, 0, R_0286A8_SPI_PS_INPUT_CNTL_25}, -	{0, 0, R_0286AC_SPI_PS_INPUT_CNTL_26}, -	{0, 0, R_0286B0_SPI_PS_INPUT_CNTL_27}, -	{0, 0, R_0286B4_SPI_PS_INPUT_CNTL_28}, -	{0, 0, R_0286B8_SPI_PS_INPUT_CNTL_29}, -	{0, 0, R_0286BC_SPI_PS_INPUT_CNTL_30}, -	{0, 0, R_0286C0_SPI_PS_INPUT_CNTL_31}, -	{0, 0, R_0286C4_SPI_VS_OUT_CONFIG}, -	{0, 0, R_0286C8_SPI_THREAD_GROUPING}, -	{0, 0, R_0286CC_SPI_PS_IN_CONTROL_0}, -	{0, 0, R_0286D0_SPI_PS_IN_CONTROL_1}, -	{0, 0, R_0286D4_SPI_INTERP_CONTROL_0}, -	{0, 0, R_0286D8_SPI_INPUT_Z}, -	{0, 0, R_0286DC_SPI_FOG_CNTL}, -	{0, 0, R_0286E0_SPI_BARYC_CNTL}, -	{0, 0, R_0286E4_SPI_PS_IN_CONTROL_2}, -	{0, 0, R_0286E8_SPI_COMPUTE_INPUT_CNTL}, -	{0, 0, R_028780_CB_BLEND0_CONTROL}, -	{0, 0, R_028784_CB_BLEND1_CONTROL}, -	{0, 0, R_028788_CB_BLEND2_CONTROL}, -	{0, 0, R_02878C_CB_BLEND3_CONTROL}, -	{0, 0, R_028790_CB_BLEND4_CONTROL}, -	{0, 0, R_028794_CB_BLEND5_CONTROL}, -	{0, 0, R_028798_CB_BLEND6_CONTROL}, -	{0, 0, R_02879C_CB_BLEND7_CONTROL}, -	{0, 0, R_028800_DB_DEPTH_CONTROL}, -	{0, 0, R_02880C_DB_SHADER_CONTROL}, -	{0, 0, R_028808_CB_COLOR_CONTROL}, -	{0, 0, R_028810_PA_CL_CLIP_CNTL}, -	{0, 0, R_028814_PA_SU_SC_MODE_CNTL}, -	{0, 0, R_028818_PA_CL_VTE_CNTL}, -	{0, 0, R_02881C_PA_CL_VS_OUT_CNTL}, -	{0, 0, R_028820_PA_CL_NANINF_CNTL}, -	{0, 0, R_028838_SQ_DYN_GPR_RESOURCE_LIMIT_1}, -	{1, S_0085F0_SH_ACTION_ENA(1), R_028840_SQ_PGM_START_PS}, -	{0, 0, R_028844_SQ_PGM_RESOURCES_PS}, -	{0, 0, R_028848_SQ_PGM_RESOURCES_2_PS}, -	{0, 0, R_02884C_SQ_PGM_EXPORTS_PS}, -	{1, S_0085F0_SH_ACTION_ENA(1), R_02885C_SQ_PGM_START_VS}, -	{0, 0, R_028860_SQ_PGM_RESOURCES_VS}, -	{0, 0, R_028864_SQ_PGM_RESOURCES_2_VS}, -	{1, S_0085F0_SH_ACTION_ENA(1), R_0288A4_SQ_PGM_START_FS}, -	{0, 0, R_0288A8_SQ_PGM_RESOURCES_FS}, -	{0, 0, R_0288EC_SQ_LDS_ALLOC_PS}, -	{0, 0, R_028900_SQ_ESGS_RING_ITEMSIZE}, -	{0, 0, R_028904_SQ_GSVS_RING_ITEMSIZE}, -	{0, 0, R_028908_SQ_ESTMP_RING_ITEMSIZE}, -	{0, 0, R_02890C_SQ_GSTMP_RING_ITEMSIZE}, -	{0, 0, R_028910_SQ_VSTMP_RING_ITEMSIZE}, -	{0, 0, R_028914_SQ_PSTMP_RING_ITEMSIZE}, -	{0, 0, R_02891C_SQ_GS_VERT_ITEMSIZE}, -	{0, 0, R_028920_SQ_GS_VERT_ITEMSIZE_1}, -	{0, 0, R_028924_SQ_GS_VERT_ITEMSIZE_2}, -	{0, 0, R_028928_SQ_GS_VERT_ITEMSIZE_3}, -	{1, 0, R_028940_ALU_CONST_CACHE_PS_0}, -	{1, 0, R_028980_ALU_CONST_CACHE_VS_0}, -	{0, 0, R_028A00_PA_SU_POINT_SIZE}, -	{0, 0, R_028A04_PA_SU_POINT_MINMAX}, -	{0, 0, R_028A08_PA_SU_LINE_CNTL}, -	{0, 0, R_028A10_VGT_OUTPUT_PATH_CNTL}, -	{0, 0, R_028A14_VGT_HOS_CNTL}, -	{0, 0, R_028A18_VGT_HOS_MAX_TESS_LEVEL}, -	{0, 0, R_028A1C_VGT_HOS_MIN_TESS_LEVEL}, -	{0, 0, R_028A20_VGT_HOS_REUSE_DEPTH}, -	{0, 0, R_028A24_VGT_GROUP_PRIM_TYPE}, -	{0, 0, R_028A28_VGT_GROUP_FIRST_DECR}, -	{0, 0, R_028A2C_VGT_GROUP_DECR}, -	{0, 0, R_028A30_VGT_GROUP_VECT_0_CNTL}, -	{0, 0, R_028A34_VGT_GROUP_VECT_1_CNTL}, -	{0, 0, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL}, -	{0, 0, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL}, -	{0, 0, R_028A40_VGT_GS_MODE}, -	{0, 0, R_028A48_PA_SC_MODE_CNTL_0}, -	{0, 0, R_028A4C_PA_SC_MODE_CNTL_1}, -	{0, 0, R_028AB4_VGT_REUSE_OFF}, -	{0, 0, R_028AB8_VGT_VTX_CNT_EN}, -	{0, 0, R_028ABC_DB_HTILE_SURFACE}, -	{0, 0, R_028AC0_DB_SRESULTS_COMPARE_STATE0}, -	{0, 0, R_028AC4_DB_SRESULTS_COMPARE_STATE1}, -	{0, 0, R_028AC8_DB_PRELOAD_CONTROL}, -	{0, 0, R_028B54_VGT_SHADER_STAGES_EN}, -	{0, 0, R_028B70_DB_ALPHA_TO_MASK}, -	{0, 0, R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL}, -	{0, 0, R_028B7C_PA_SU_POLY_OFFSET_CLAMP}, -	{0, 0, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE}, -	{0, 0, R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET}, -	{0, 0, R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE}, -	{0, 0, R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET}, -	{0, 0, R_028B94_VGT_STRMOUT_CONFIG}, -	{0, 0, R_028B98_VGT_STRMOUT_BUFFER_CONFIG}, -	{0, 0, R_028C00_PA_SC_LINE_CNTL}, -	{0, 0, R_028C04_PA_SC_AA_CONFIG}, -	{0, 0, R_028C08_PA_SU_VTX_CNTL}, -	{0, 0, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ}, -	{0, 0, R_028C10_PA_CL_GB_VERT_DISC_ADJ}, -	{0, 0, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ}, -	{0, 0, R_028C18_PA_CL_GB_HORZ_DISC_ADJ}, -	{0, 0, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX}, -	{0, 0, R_028C3C_PA_SC_AA_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028C60_CB_COLOR0_BASE}, -	{0, 0, R_028C64_CB_COLOR0_PITCH}, -	{0, 0, R_028C68_CB_COLOR0_SLICE}, -	{0, 0, R_028C6C_CB_COLOR0_VIEW}, -	{1, 0, R_028C70_CB_COLOR0_INFO}, -	{0, 0, R_028C74_CB_COLOR0_ATTRIB}, -	{0, 0, R_028C78_CB_COLOR0_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028C9C_CB_COLOR1_BASE}, -	{0, 0, R_028CA0_CB_COLOR1_PITCH}, -	{0, 0, R_028CA4_CB_COLOR1_SLICE}, -	{0, 0, R_028CA8_CB_COLOR1_VIEW}, -	{1, 0, R_028CAC_CB_COLOR1_INFO}, -	{0, 0, R_028CB0_CB_COLOR1_ATTRIB}, -	{0, 0, R_028CB8_CB_COLOR1_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028CD8_CB_COLOR2_BASE}, -	{0, 0, R_028CDC_CB_COLOR2_PITCH}, -	{0, 0, R_028CE0_CB_COLOR2_SLICE}, -	{0, 0, R_028CE4_CB_COLOR2_VIEW}, -	{1, 0, R_028CE8_CB_COLOR2_INFO}, -	{0, 0, R_028CEC_CB_COLOR2_ATTRIB}, -	{0, 0, R_028CF0_CB_COLOR2_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028D14_CB_COLOR3_BASE}, -	{0, 0, R_028D18_CB_COLOR3_PITCH}, -	{0, 0, R_028D1C_CB_COLOR3_SLICE}, -	{0, 0, R_028D20_CB_COLOR3_VIEW}, -	{1, 0, R_028D24_CB_COLOR3_INFO}, -	{0, 0, R_028D28_CB_COLOR3_ATTRIB}, -	{0, 0, R_028D2C_CB_COLOR3_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028D50_CB_COLOR4_BASE}, -	{0, 0, R_028D54_CB_COLOR4_PITCH}, -	{0, 0, R_028D58_CB_COLOR4_SLICE}, -	{0, 0, R_028D5C_CB_COLOR4_VIEW}, -	{1, 0, R_028D60_CB_COLOR4_INFO}, -	{0, 0, R_028D64_CB_COLOR4_ATTRIB}, -	{0, 0, R_028D68_CB_COLOR4_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028D8C_CB_COLOR5_BASE}, -	{0, 0, R_028D90_CB_COLOR5_PITCH}, -	{0, 0, R_028D94_CB_COLOR5_SLICE}, -	{0, 0, R_028D98_CB_COLOR5_VIEW}, -	{1, 0, R_028D9C_CB_COLOR5_INFO}, -	{0, 0, R_028DA0_CB_COLOR5_ATTRIB}, -	{0, 0, R_028DA4_CB_COLOR5_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028DC8_CB_COLOR6_BASE}, -	{0, 0, R_028DCC_CB_COLOR6_PITCH}, -	{0, 0, R_028DD0_CB_COLOR6_SLICE}, -	{0, 0, R_028DD4_CB_COLOR6_VIEW}, -	{1, 0, R_028DD8_CB_COLOR6_INFO}, -	{0, 0, R_028DDC_CB_COLOR6_ATTRIB}, -	{0, 0, R_028DE0_CB_COLOR6_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028E04_CB_COLOR7_BASE}, -	{0, 0, R_028E08_CB_COLOR7_PITCH}, -	{0, 0, R_028E0C_CB_COLOR7_SLICE}, -	{0, 0, R_028E10_CB_COLOR7_VIEW}, -	{1, 0, R_028E14_CB_COLOR7_INFO}, -	{0, 0, R_028E18_CB_COLOR7_ATTRIB}, -	{0, 0, R_028E1C_CB_COLOR7_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028E40_CB_COLOR8_BASE}, -	{0, 0, R_028E44_CB_COLOR8_PITCH}, -	{0, 0, R_028E48_CB_COLOR8_SLICE}, -	{0, 0, R_028E4C_CB_COLOR8_VIEW}, -	{1, 0, R_028E50_CB_COLOR8_INFO}, -	{0, 0, R_028E54_CB_COLOR8_ATTRIB}, -	{0, 0, R_028E58_CB_COLOR8_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028E5C_CB_COLOR9_BASE}, -	{0, 0, R_028E60_CB_COLOR9_PITCH}, -	{0, 0, R_028E64_CB_COLOR9_SLICE}, -	{0, 0, R_028E68_CB_COLOR9_VIEW}, -	{1, 0, R_028E6C_CB_COLOR9_INFO}, -	{0, 0, R_028E70_CB_COLOR9_ATTRIB}, -	{0, 0, R_028E74_CB_COLOR9_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028E78_CB_COLOR10_BASE}, -	{0, 0, R_028E7C_CB_COLOR10_PITCH}, -	{0, 0, R_028E80_CB_COLOR10_SLICE}, -	{0, 0, R_028E84_CB_COLOR10_VIEW}, -	{1, 0, R_028E88_CB_COLOR10_INFO}, -	{0, 0, R_028E8C_CB_COLOR10_ATTRIB}, -	{0, 0, R_028E90_CB_COLOR10_DIM}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028E94_CB_COLOR11_BASE}, -	{0, 0, R_028E98_CB_COLOR11_PITCH}, -	{0, 0, R_028E9C_CB_COLOR11_SLICE}, -	{0, 0, R_028EA0_CB_COLOR11_VIEW}, -	{1, 0, R_028EA4_CB_COLOR11_INFO}, -	{0, 0, R_028EA8_CB_COLOR11_ATTRIB}, -	{0, 0, R_028EAC_CB_COLOR11_DIM}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028000_DB_RENDER_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028004_DB_COUNT_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028008_DB_DEPTH_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02800C_DB_RENDER_OVERRIDE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028010_DB_RENDER_OVERRIDE2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028014_DB_HTILE_DATA_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028028_DB_STENCIL_CLEAR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02802C_DB_DEPTH_CLEAR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028030_PA_SC_SCREEN_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028034_PA_SC_SCREEN_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028040_DB_Z_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028044_DB_STENCIL_INFO, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028048_DB_Z_READ_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02804C_DB_STENCIL_READ_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028050_DB_Z_WRITE_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028054_DB_STENCIL_WRITE_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028058_DB_DEPTH_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02805C_DB_DEPTH_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028200_PA_SC_WINDOW_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028204_PA_SC_WINDOW_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028208_PA_SC_WINDOW_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02820C_PA_SC_CLIPRECT_RULE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028210_PA_SC_CLIPRECT_0_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028214_PA_SC_CLIPRECT_0_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028218_PA_SC_CLIPRECT_1_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02821C_PA_SC_CLIPRECT_1_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028220_PA_SC_CLIPRECT_2_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028224_PA_SC_CLIPRECT_2_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028228_PA_SC_CLIPRECT_3_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02822C_PA_SC_CLIPRECT_3_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028230_PA_SC_EDGERULE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028234_PA_SU_HARDWARE_SCREEN_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028238_CB_TARGET_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02823C_CB_SHADER_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028240_PA_SC_GENERIC_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028244_PA_SC_GENERIC_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028250_PA_SC_VPORT_SCISSOR_0_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028254_PA_SC_VPORT_SCISSOR_0_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028350_SX_MISC, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028380_SQ_VTX_SEMANTIC_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028384_SQ_VTX_SEMANTIC_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028388_SQ_VTX_SEMANTIC_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02838C_SQ_VTX_SEMANTIC_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028390_SQ_VTX_SEMANTIC_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028394_SQ_VTX_SEMANTIC_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028398_SQ_VTX_SEMANTIC_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02839C_SQ_VTX_SEMANTIC_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283A0_SQ_VTX_SEMANTIC_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283A4_SQ_VTX_SEMANTIC_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283A8_SQ_VTX_SEMANTIC_10, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283AC_SQ_VTX_SEMANTIC_11, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283B0_SQ_VTX_SEMANTIC_12, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283B4_SQ_VTX_SEMANTIC_13, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283B8_SQ_VTX_SEMANTIC_14, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283BC_SQ_VTX_SEMANTIC_15, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283C0_SQ_VTX_SEMANTIC_16, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283C4_SQ_VTX_SEMANTIC_17, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283C8_SQ_VTX_SEMANTIC_18, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283CC_SQ_VTX_SEMANTIC_19, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283D0_SQ_VTX_SEMANTIC_20, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283D4_SQ_VTX_SEMANTIC_21, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283D8_SQ_VTX_SEMANTIC_22, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283DC_SQ_VTX_SEMANTIC_23, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283E0_SQ_VTX_SEMANTIC_24, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283E4_SQ_VTX_SEMANTIC_25, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283E8_SQ_VTX_SEMANTIC_26, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283EC_SQ_VTX_SEMANTIC_27, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283F0_SQ_VTX_SEMANTIC_28, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283F4_SQ_VTX_SEMANTIC_29, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283F8_SQ_VTX_SEMANTIC_30, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0283FC_SQ_VTX_SEMANTIC_31, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0282D0_PA_SC_VPORT_ZMIN_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0282D4_PA_SC_VPORT_ZMAX_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028400_VGT_MAX_VTX_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028404_VGT_MIN_VTX_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028408_VGT_INDX_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028410_SX_ALPHA_TEST_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028414_CB_BLEND_RED, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028418_CB_BLEND_GREEN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02841C_CB_BLEND_BLUE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028420_CB_BLEND_ALPHA, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028430_DB_STENCILREFMASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028434_DB_STENCILREFMASK_BF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028438_SX_ALPHA_REF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02843C_PA_CL_VPORT_XSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028440_PA_CL_VPORT_XOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028444_PA_CL_VPORT_YSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028448_PA_CL_VPORT_YOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02844C_PA_CL_VPORT_ZSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028450_PA_CL_VPORT_ZOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285BC_PA_CL_UCP0_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285C0_PA_CL_UCP0_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285C4_PA_CL_UCP0_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285C8_PA_CL_UCP0_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285CC_PA_CL_UCP1_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285D0_PA_CL_UCP1_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285D4_PA_CL_UCP1_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285D8_PA_CL_UCP1_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285DC_PA_CL_UCP2_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285E0_PA_CL_UCP2_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285E4_PA_CL_UCP2_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285E8_PA_CL_UCP2_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285EC_PA_CL_UCP3_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285F0_PA_CL_UCP3_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285F4_PA_CL_UCP3_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285F8_PA_CL_UCP3_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0285FC_PA_CL_UCP4_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028600_PA_CL_UCP4_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028604_PA_CL_UCP4_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028608_PA_CL_UCP4_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02860C_PA_CL_UCP5_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028610_PA_CL_UCP5_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028614_PA_CL_UCP5_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028618_PA_CL_UCP5_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02861C_SPI_VS_OUT_ID_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028620_SPI_VS_OUT_ID_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028624_SPI_VS_OUT_ID_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028628_SPI_VS_OUT_ID_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02862C_SPI_VS_OUT_ID_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028630_SPI_VS_OUT_ID_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028634_SPI_VS_OUT_ID_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028638_SPI_VS_OUT_ID_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02863C_SPI_VS_OUT_ID_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028640_SPI_VS_OUT_ID_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028644_SPI_PS_INPUT_CNTL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028648_SPI_PS_INPUT_CNTL_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02864C_SPI_PS_INPUT_CNTL_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028650_SPI_PS_INPUT_CNTL_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028654_SPI_PS_INPUT_CNTL_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028658_SPI_PS_INPUT_CNTL_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02865C_SPI_PS_INPUT_CNTL_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028660_SPI_PS_INPUT_CNTL_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028664_SPI_PS_INPUT_CNTL_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028668_SPI_PS_INPUT_CNTL_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02866C_SPI_PS_INPUT_CNTL_10, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028670_SPI_PS_INPUT_CNTL_11, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028674_SPI_PS_INPUT_CNTL_12, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028678_SPI_PS_INPUT_CNTL_13, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02867C_SPI_PS_INPUT_CNTL_14, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028680_SPI_PS_INPUT_CNTL_15, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028684_SPI_PS_INPUT_CNTL_16, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028688_SPI_PS_INPUT_CNTL_17, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02868C_SPI_PS_INPUT_CNTL_18, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028690_SPI_PS_INPUT_CNTL_19, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028694_SPI_PS_INPUT_CNTL_20, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028698_SPI_PS_INPUT_CNTL_21, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02869C_SPI_PS_INPUT_CNTL_22, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286A0_SPI_PS_INPUT_CNTL_23, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286A4_SPI_PS_INPUT_CNTL_24, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286A8_SPI_PS_INPUT_CNTL_25, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286AC_SPI_PS_INPUT_CNTL_26, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286B0_SPI_PS_INPUT_CNTL_27, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286B4_SPI_PS_INPUT_CNTL_28, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286B8_SPI_PS_INPUT_CNTL_29, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286BC_SPI_PS_INPUT_CNTL_30, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286C0_SPI_PS_INPUT_CNTL_31, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286C4_SPI_VS_OUT_CONFIG, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286C8_SPI_THREAD_GROUPING, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286CC_SPI_PS_IN_CONTROL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286D0_SPI_PS_IN_CONTROL_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286D4_SPI_INTERP_CONTROL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286D8_SPI_INPUT_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286DC_SPI_FOG_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286E0_SPI_BARYC_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286E4_SPI_PS_IN_CONTROL_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0286E8_SPI_COMPUTE_INPUT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028780_CB_BLEND0_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028784_CB_BLEND1_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028788_CB_BLEND2_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02878C_CB_BLEND3_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028790_CB_BLEND4_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028794_CB_BLEND5_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028798_CB_BLEND6_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02879C_CB_BLEND7_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028800_DB_DEPTH_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02880C_DB_SHADER_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028808_CB_COLOR_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028810_PA_CL_CLIP_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028814_PA_SU_SC_MODE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028818_PA_CL_VTE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02881C_PA_CL_VS_OUT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028820_PA_CL_NANINF_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028838_SQ_DYN_GPR_RESOURCE_LIMIT_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028844_SQ_PGM_RESOURCES_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028848_SQ_PGM_RESOURCES_2_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02884C_SQ_PGM_EXPORTS_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02885C_SQ_PGM_START_VS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028860_SQ_PGM_RESOURCES_VS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028864_SQ_PGM_RESOURCES_2_VS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288A4_SQ_PGM_START_FS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288A8_SQ_PGM_RESOURCES_FS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288EC_SQ_LDS_ALLOC_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028900_SQ_ESGS_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028904_SQ_GSVS_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028908_SQ_ESTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02890C_SQ_GSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028910_SQ_VSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028914_SQ_PSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02891C_SQ_GS_VERT_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028920_SQ_GS_VERT_ITEMSIZE_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028924_SQ_GS_VERT_ITEMSIZE_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028928_SQ_GS_VERT_ITEMSIZE_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028940_ALU_CONST_CACHE_PS_0, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028980_ALU_CONST_CACHE_VS_0, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A00_PA_SU_POINT_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A04_PA_SU_POINT_MINMAX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A08_PA_SU_LINE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A10_VGT_OUTPUT_PATH_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A14_VGT_HOS_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A20_VGT_HOS_REUSE_DEPTH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A24_VGT_GROUP_PRIM_TYPE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A28_VGT_GROUP_FIRST_DECR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A2C_VGT_GROUP_DECR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A30_VGT_GROUP_VECT_0_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A34_VGT_GROUP_VECT_1_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A40_VGT_GS_MODE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A48_PA_SC_MODE_CNTL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A4C_PA_SC_MODE_CNTL_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028AB4_VGT_REUSE_OFF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028AB8_VGT_VTX_CNT_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028ABC_DB_HTILE_SURFACE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028AC0_DB_SRESULTS_COMPARE_STATE0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028AC4_DB_SRESULTS_COMPARE_STATE1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028AC8_DB_PRELOAD_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B54_VGT_SHADER_STAGES_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B70_DB_ALPHA_TO_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B94_VGT_STRMOUT_CONFIG, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C00_PA_SC_LINE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C04_PA_SC_AA_CONFIG, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C08_PA_SU_VTX_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C3C_PA_SC_AA_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C60_CB_COLOR0_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C64_CB_COLOR0_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C68_CB_COLOR0_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C6C_CB_COLOR0_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C70_CB_COLOR0_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C74_CB_COLOR0_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C78_CB_COLOR0_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C9C_CB_COLOR1_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA0_CB_COLOR1_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA4_CB_COLOR1_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA8_CB_COLOR1_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CAC_CB_COLOR1_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CB0_CB_COLOR1_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CB8_CB_COLOR1_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CD8_CB_COLOR2_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CDC_CB_COLOR2_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE0_CB_COLOR2_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE4_CB_COLOR2_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE8_CB_COLOR2_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CEC_CB_COLOR2_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CF0_CB_COLOR2_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D14_CB_COLOR3_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D18_CB_COLOR3_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D1C_CB_COLOR3_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D20_CB_COLOR3_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D24_CB_COLOR3_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D28_CB_COLOR3_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D2C_CB_COLOR3_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D50_CB_COLOR4_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D54_CB_COLOR4_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D58_CB_COLOR4_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D5C_CB_COLOR4_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D60_CB_COLOR4_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D64_CB_COLOR4_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D68_CB_COLOR4_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D8C_CB_COLOR5_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D90_CB_COLOR5_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D94_CB_COLOR5_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D98_CB_COLOR5_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D9C_CB_COLOR5_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DA0_CB_COLOR5_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DA4_CB_COLOR5_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DC8_CB_COLOR6_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DCC_CB_COLOR6_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD0_CB_COLOR6_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD4_CB_COLOR6_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD8_CB_COLOR6_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DDC_CB_COLOR6_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DE0_CB_COLOR6_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E04_CB_COLOR7_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E08_CB_COLOR7_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E0C_CB_COLOR7_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E10_CB_COLOR7_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E14_CB_COLOR7_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E18_CB_COLOR7_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E1C_CB_COLOR7_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E40_CB_COLOR8_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E44_CB_COLOR8_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E48_CB_COLOR8_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E4C_CB_COLOR8_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E50_CB_COLOR8_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E54_CB_COLOR8_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E58_CB_COLOR8_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E5C_CB_COLOR9_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E60_CB_COLOR9_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E64_CB_COLOR9_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E68_CB_COLOR9_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E6C_CB_COLOR9_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E70_CB_COLOR9_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E74_CB_COLOR9_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E78_CB_COLOR10_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E7C_CB_COLOR10_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E80_CB_COLOR10_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E84_CB_COLOR10_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E88_CB_COLOR10_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E8C_CB_COLOR10_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E90_CB_COLOR10_DIM, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E94_CB_COLOR11_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E98_CB_COLOR11_PITCH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E9C_CB_COLOR11_SLICE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA0_CB_COLOR11_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA4_CB_COLOR11_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA8_CB_COLOR11_ATTRIB, 0, 0}, +	{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EAC_CB_COLOR11_DIM, 0, 0},  };  /* SHADER RESOURCE R600/R700 */  static int evergreen_state_resource_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_resource[] = { -		{0, 0, R_030000_RESOURCE0_WORD0}, -		{0, 0, R_030004_RESOURCE0_WORD1}, -		{1, 0, R_030008_RESOURCE0_WORD2}, -		{1, 0, R_03000C_RESOURCE0_WORD3}, -		{0, 0, R_030010_RESOURCE0_WORD4}, -		{0, 0, R_030014_RESOURCE0_WORD5}, -		{0, 0, R_030018_RESOURCE0_WORD6}, -		{0, 0, R_03001C_RESOURCE0_WORD7}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030000_RESOURCE0_WORD0, 0, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030004_RESOURCE0_WORD1, 0, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030008_RESOURCE0_WORD2, 1, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_03000C_RESOURCE0_WORD3, 1, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030010_RESOURCE0_WORD4, 0, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030014_RESOURCE0_WORD5, 0, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030018_RESOURCE0_WORD6, 0, 0}, +		{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_03001C_RESOURCE0_WORD7, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_resource)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_resource[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_resource, nreg, PKT3_SET_RESOURCE); +	return r600_context_add_block(ctx, r600_shader_resource, nreg);  }  /* SHADER SAMPLER R600/R700 */  static int r600_state_sampler_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_sampler[] = { -		{0, 0, R_03C000_SQ_TEX_SAMPLER_WORD0_0}, -		{0, 0, R_03C004_SQ_TEX_SAMPLER_WORD1_0}, -		{0, 0, R_03C008_SQ_TEX_SAMPLER_WORD2_0}, +		{PKT3_SET_SAMPLER, EVERGREEN_SAMPLER_OFFSET, R_03C000_SQ_TEX_SAMPLER_WORD0_0, 0, 0}, +		{PKT3_SET_SAMPLER, EVERGREEN_SAMPLER_OFFSET, R_03C004_SQ_TEX_SAMPLER_WORD1_0, 0, 0}, +		{PKT3_SET_SAMPLER, EVERGREEN_SAMPLER_OFFSET, R_03C008_SQ_TEX_SAMPLER_WORD2_0, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_sampler)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_sampler[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_sampler, nreg, PKT3_SET_SAMPLER); +	return r600_context_add_block(ctx, r600_shader_sampler, nreg);  }  /* SHADER SAMPLER BORDER R600/R700 */  static int evergreen_state_sampler_border_init(struct r600_context *ctx, u32 offset, unsigned id)  {  	struct r600_reg r600_shader_sampler_border[] = { -		{0, 0, R_00A400_TD_PS_SAMPLER0_BORDER_INDEX}, -		{0, 0, R_00A404_TD_PS_SAMPLER0_BORDER_RED}, -		{0, 0, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN}, -		{0, 0, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE}, -		{0, 0, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA}, +		{PKT3_SET_CONFIG_REG, 0, R_00A400_TD_PS_SAMPLER0_BORDER_INDEX, 0, 0}, +		{PKT3_SET_CONFIG_REG, 0, R_00A404_TD_PS_SAMPLER0_BORDER_RED, 0, 0}, +		{PKT3_SET_CONFIG_REG, 0, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, 0, 0}, +		{PKT3_SET_CONFIG_REG, 0, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, 0, 0}, +		{PKT3_SET_CONFIG_REG, 0, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_sampler_border)/sizeof(struct r600_reg);  	unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) * 0x10 + 0x40000 + id * 0x1C; -	struct r600_group_block *block; -	struct r600_group *group; +	struct r600_range *range; +	struct r600_block *block;  	int r;  	for (int i = 0; i < nreg; i++) {  		r600_shader_sampler_border[i].offset -= R_00A400_TD_PS_SAMPLER0_BORDER_INDEX;  		r600_shader_sampler_border[i].offset += fake_offset;  	} -	r = r600_context_add_block(ctx, r600_shader_sampler_border, nreg, PKT3_SET_CONFIG_REG); +	r = r600_context_add_block(ctx, r600_shader_sampler_border, nreg);  	if (r) {  		return r;  	}  	/* set proper offset */ -	group = &ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER]; -	id = group->offset_block_id[((fake_offset - group->start_offset) >> 2)]; -	block = &group->blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, r600_shader_sampler_border[0].offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, r600_shader_sampler_border[0].offset)];  	block->pm4[1] = (offset - EVERGREEN_CONFIG_REG_OFFSET) >> 2;  	return 0;  } @@ -512,47 +506,26 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)  	radeon->use_mem_constant = TRUE;  	ctx->radeon = radeon;  	LIST_INITHEAD(&ctx->query_list); -	/* initialize groups */ -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_CONFIG], EVERGREEN_CONFIG_REG_OFFSET, EVERGREEN_CONFIG_REG_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_LOOP_CONST], EVERGREEN_LOOP_CONST_OFFSET, EVERGREEN_LOOP_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_BOOL_CONST], EVERGREEN_BOOL_CONST_OFFSET, EVERGREEN_BOOL_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_SAMPLER], EVERGREEN_SAMPLER_OFFSET, EVERGREEN_SAMPLER_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_RESOURCE], EVERGREEN_RESOURCE_OFFSET, EVERGREEN_RESOURCE_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_CONTEXT], EVERGREEN_CONTEXT_REG_OFFSET, EVERGREEN_CONTEXT_REG_END); -	if (r) { -		goto out_err; -	} -	/* we use unassigned range of GPU reg to fake border color register */ -	r = r600_group_init(&ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER], 0x40000, 0x41000); -	if (r) { -		goto out_err; + +	/* initialize hash */ +	ctx->hash_size = 19; +	ctx->hash_shift = 11; +	for (int i = 0; i < 256; i++) { +		ctx->range[i].start_offset = i << ctx->hash_shift; +		ctx->range[i].end_offset = ((i + 1) << ctx->hash_shift) - 1; +		ctx->range[i].blocks = calloc(1 << ctx->hash_shift, sizeof(void*)); +		if (ctx->range[i].blocks == NULL) { +			return -ENOMEM; +		}  	} -	ctx->ngroups = EVERGREEN_NGROUPS;  	/* add blocks */  	r = r600_context_add_block(ctx, evergreen_config_reg_list, -				 sizeof(evergreen_config_reg_list)/sizeof(struct r600_reg), -					PKT3_SET_CONFIG_REG); +				 sizeof(evergreen_config_reg_list)/sizeof(struct r600_reg));  	if (r)  		goto out_err;  	r = r600_context_add_block(ctx, evergreen_context_reg_list, -				 sizeof(evergreen_context_reg_list)/sizeof(struct r600_reg), -					PKT3_SET_CONTEXT_REG); +				 sizeof(evergreen_context_reg_list)/sizeof(struct r600_reg));  	if (r)  		goto out_err; @@ -593,6 +566,18 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)  			goto out_err;  	} +	/* setup block table */ +	ctx->blocks = calloc(ctx->nblocks, sizeof(void*)); +	for (int i = 0, c = 0; i < 256; i++) { +		for (int j = 0; j < (1 << ctx->hash_shift); j++) { +			if (ctx->range[i].blocks[j]) { +				assert(c < ctx->nblocks); +				ctx->blocks[c++] = ctx->range[i].blocks[j]; +				j += (ctx->range[i].blocks[j]->nreg << 2) - 1; +			} +		} +	} +  	/* allocate cs variables */  	ctx->nreloc = RADEON_CTX_MAX_PM4;  	ctx->reloc = calloc(ctx->nreloc, sizeof(struct r600_reloc)); @@ -619,12 +604,11 @@ out_err:  static inline void evergreen_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[EVERGREEN_GROUP_RESOURCE].start_offset; -	id = ctx->groups[EVERGREEN_GROUP_RESOURCE].offset_block_id[offset >> 2]; -	block = &ctx->groups[EVERGREEN_GROUP_RESOURCE].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		radeon_ws_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL); @@ -673,12 +657,11 @@ void evergreen_context_pipe_state_set_vs_resource(struct r600_context *ctx, stru  static inline void evergreen_context_pipe_state_set_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[EVERGREEN_GROUP_SAMPLER].start_offset; -	id = ctx->groups[EVERGREEN_GROUP_SAMPLER].offset_block_id[offset >> 2]; -	block = &ctx->groups[EVERGREEN_GROUP_SAMPLER].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		return; @@ -693,12 +676,12 @@ static inline void evergreen_context_pipe_state_set_sampler(struct r600_context  static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset, unsigned id)  { -	struct r600_group_block *block;  	unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) * 0x10 + 0x40000 + id * 0x1C; +	struct r600_range *range; +	struct r600_block *block; -	fake_offset -= ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER].start_offset; -	id = ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER].offset_block_id[fake_offset >> 2]; -	block = &ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, fake_offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, fake_offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		return; @@ -710,6 +693,7 @@ static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_c  	block->reg[1] = state->regs[3].value;  	block->reg[2] = state->regs[4].value;  	block->reg[3] = state->regs[5].value; +	block->reg[4] = state->regs[6].value;  	block->status |= R600_BLOCK_STATUS_ENABLED;  	block->status |= R600_BLOCK_STATUS_DIRTY;  	ctx->pm4_dirty_cdwords += block->pm4_ndwords; @@ -748,18 +732,18 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr  	}  	/* find number of color buffer */ -	cb[0] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028C60_CB_COLOR0_BASE); -	cb[1] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028C9C_CB_COLOR1_BASE); -	cb[2] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028CD8_CB_COLOR2_BASE); -	cb[3] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028D14_CB_COLOR3_BASE); -	cb[4] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028D50_CB_COLOR4_BASE); -	cb[5] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028D8C_CB_COLOR5_BASE); -	cb[6] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028DC8_CB_COLOR6_BASE); -	cb[7] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028E04_CB_COLOR7_BASE); -	cb[8] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028E40_CB_COLOR8_BASE); -	cb[9] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028E5C_CB_COLOR9_BASE); -	cb[10] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028E78_CB_COLOR10_BASE); -	cb[11] = r600_context_reg_bo(ctx, EVERGREEN_GROUP_CONTEXT, R_028E94_CB_COLOR11_BASE); +	cb[0] = r600_context_reg_bo(ctx, R_028C60_CB_COLOR0_BASE); +	cb[1] = r600_context_reg_bo(ctx, R_028C9C_CB_COLOR1_BASE); +	cb[2] = r600_context_reg_bo(ctx, R_028CD8_CB_COLOR2_BASE); +	cb[3] = r600_context_reg_bo(ctx, R_028D14_CB_COLOR3_BASE); +	cb[4] = r600_context_reg_bo(ctx, R_028D50_CB_COLOR4_BASE); +	cb[5] = r600_context_reg_bo(ctx, R_028D8C_CB_COLOR5_BASE); +	cb[6] = r600_context_reg_bo(ctx, R_028DC8_CB_COLOR6_BASE); +	cb[7] = r600_context_reg_bo(ctx, R_028E04_CB_COLOR7_BASE); +	cb[8] = r600_context_reg_bo(ctx, R_028E40_CB_COLOR8_BASE); +	cb[9] = r600_context_reg_bo(ctx, R_028E5C_CB_COLOR9_BASE); +	cb[10] = r600_context_reg_bo(ctx, R_028E78_CB_COLOR10_BASE); +	cb[11] = r600_context_reg_bo(ctx, R_028E94_CB_COLOR11_BASE);  	for (int i = 0; i < 12; i++) {  		if (cb[i]) {  			ndwords += 7; @@ -768,11 +752,11 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr  	/* queries need some special values */  	if (ctx->num_query_running) { -		r600_context_reg(ctx, EVERGREEN_GROUP_CONTEXT, +		r600_context_reg(ctx,  				R_028004_DB_COUNT_CONTROL,  				S_028004_PERFECT_ZPASS_COUNTS(1),  				S_028004_PERFECT_ZPASS_COUNTS(1)); -		r600_context_reg(ctx, EVERGREEN_GROUP_CONTEXT, +		r600_context_reg(ctx,  				R_02800C_DB_RENDER_OVERRIDE,  				S_02800C_NOOP_CULL_DISABLE(1),  				S_02800C_NOOP_CULL_DISABLE(1)); @@ -789,11 +773,11 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr  	}  	/* enough room to copy packet */ -	r600_context_group_emit_dirty(ctx, &ctx->groups[EVERGREEN_GROUP_CONFIG]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[EVERGREEN_GROUP_CONTEXT]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[EVERGREEN_GROUP_RESOURCE]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[EVERGREEN_GROUP_SAMPLER]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[EVERGREEN_GROUP_SAMPLER_BORDER]); +	for (int i = 0; i < ctx->nblocks; i++) { +		if (ctx->blocks[i]->status & R600_BLOCK_STATUS_DIRTY) { +			r600_context_block_emit_dirty(ctx, ctx->blocks[i]); +		} +	}  	/* draw packet */  	ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_INDEX_TYPE, 0); @@ -838,12 +822,11 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr  static inline void evergreen_resource_set(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[EVERGREEN_GROUP_RESOURCE].start_offset; -	id = ctx->groups[EVERGREEN_GROUP_RESOURCE].offset_block_id[offset >> 2]; -	block = &ctx->groups[EVERGREEN_GROUP_RESOURCE].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	block->reg[0] = state->regs[0].value;  	block->reg[1] = state->regs[1].value;  	block->reg[2] = state->regs[2].value; diff --git a/src/gallium/winsys/r600/drm/r600.c b/src/gallium/winsys/r600/drm/r600.c index fdcadffc53..496547ca99 100644 --- a/src/gallium/winsys/r600/drm/r600.c +++ b/src/gallium/winsys/r600/drm/r600.c @@ -25,6 +25,9 @@   */  #include "xf86drm.h"  #include "radeon_drm.h" +#include "pipe/p_compiler.h" +#include "util/u_inlines.h" +#include <pipebuffer/pb_bufmgr.h>  #include "r600_priv.h"  enum radeon_family r600_get_family(struct radeon *r600) diff --git a/src/gallium/winsys/r600/drm/r600_priv.h b/src/gallium/winsys/r600/drm/r600_priv.h index 710c66bcfd..92dadf8d1c 100644 --- a/src/gallium/winsys/r600/drm/r600_priv.h +++ b/src/gallium/winsys/r600/drm/r600_priv.h @@ -49,25 +49,30 @@ struct radeon *r600_new(int fd, unsigned device);  void r600_delete(struct radeon *r600);  struct r600_reg { +	unsigned			opcode; +	unsigned			offset_base; +	unsigned			offset;  	unsigned			need_bo;  	unsigned			flush_flags; -	unsigned			offset;  };  /* radeon_pciid.c */  unsigned radeon_family_from_device(unsigned device); +#define CTX_RANGE_ID(ctx, offset) (((offset) >> (ctx)->hash_shift) & 255) +#define CTX_BLOCK_ID(ctx, offset) ((offset) & ((1 << (ctx)->hash_shift) - 1)) + -static void inline r600_context_reg(struct r600_context *ctx, unsigned group_id, +static void inline r600_context_reg(struct r600_context *ctx,  					unsigned offset, unsigned value,  					unsigned mask)  { -	struct r600_group *group = &ctx->groups[group_id]; -	struct r600_group_block *block; +	struct r600_range *range; +	struct r600_block *block;  	unsigned id; -	id = group->offset_block_id[(offset - group->start_offset) >> 2]; -	block = &group->blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	id = (offset - block->start_offset) >> 2;  	block->reg[id] &= ~mask;  	block->reg[id] |= value; @@ -78,4 +83,34 @@ static void inline r600_context_reg(struct r600_context *ctx, unsigned group_id,  	block->status |= R600_BLOCK_STATUS_DIRTY;  } +struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf); +void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct radeon_bo *bo); + +struct radeon_ws_bo { +	struct pipe_reference		reference; +	struct pb_buffer		*pb; +}; + +static inline void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block) +{ +	struct radeon_bo *bo; +	int id; + +	for (int j = 0; j < block->nreg; j++) { +		if (block->pm4_bo_index[j]) { +			/* find relocation */ +			id = block->pm4_bo_index[j]; +			bo = radeon_bo_pb_get_bo(block->reloc[id].bo->pb); +			for (int k = 0; k < block->reloc[id].nreloc; k++) { +				r600_context_bo_reloc(ctx, +					&block->pm4[block->reloc[id].bo_pm4_index[k]], +					bo); +			} +		} +	} +	memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4); +	ctx->pm4_cdwords += block->pm4_ndwords; +	block->status ^= R600_BLOCK_STATUS_DIRTY; +} +  #endif diff --git a/src/gallium/winsys/r600/drm/r600_state2.c b/src/gallium/winsys/r600/drm/r600_state2.c index 1241bca244..87f33e0526 100644 --- a/src/gallium/winsys/r600/drm/r600_state2.c +++ b/src/gallium/winsys/r600/drm/r600_state2.c @@ -31,18 +31,14 @@  #include "xf86drm.h"  #include "r600.h"  #include "r600d.h" -#include "r600_priv.h"  #include "radeon_drm.h"  #include "bof.h"  #include "pipe/p_compiler.h"  #include "util/u_inlines.h"  #include <pipebuffer/pb_bufmgr.h> +#include "r600_priv.h"  #define GROUP_FORCE_NEW_BLOCK	0 -struct radeon_ws_bo { -	struct pipe_reference		reference; -	struct pb_buffer		*pb; -};  struct radeon_bo {  	struct pipe_reference		reference; @@ -52,7 +48,6 @@ struct radeon_bo {  	unsigned			map_count;  	void				*data;  }; -struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf);  int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo);  void radeon_bo_unmap(struct radeon *radeon, struct radeon_bo *bo);  void radeon_bo_reference(struct radeon *radeon, @@ -62,67 +57,49 @@ void radeon_bo_reference(struct radeon *radeon,  unsigned radeon_ws_bo_get_handle(struct radeon_ws_bo *pb_bo);  void radeon_bo_pbmgr_flush_maps(struct pb_manager *_mgr); -static int r600_group_id_register_offset(struct r600_context *ctx, unsigned offset) -{ -	for (int i = 0; i < ctx->ngroups; i++) { -		if (offset >= ctx->groups[i].start_offset && offset < ctx->groups[i].end_offset) { -			return i; -		} -	} -	return -1; -} - -int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg, unsigned nreg, unsigned opcode) +int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg, unsigned nreg)  { -	struct r600_group_block *block, *tmp; -	struct r600_group *group; -	int group_id, id; +	struct r600_block *block; +	struct r600_range *range; +	int offset;  	for (unsigned i = 0, n = 0; i < nreg; i += n) { -		u32 j, r; - -		/* register that need relocation are in their own group */ -		n = 1; -		if (!reg[i].need_bo) { -			/* find number of consecutive registers */ -			for (j = i + 1, r = reg[i].offset + 4, n = 1; j < (nreg - i); j++, n++, r+=4) { -				if (reg[i].need_bo || r != reg[j].offset) { -					break; -				} -			} -		} +		u32 j;  		/* ignore new block balise */ -		if (reg[i].offset == GROUP_FORCE_NEW_BLOCK) +		if (reg[i].offset == GROUP_FORCE_NEW_BLOCK) { +			n = 1;  			continue; +		} -		/* find into which group this block is */ -		group_id = r600_group_id_register_offset(ctx, reg[i].offset); -		assert(group_id >= 0); -		group = &ctx->groups[group_id]; +		/* register that need relocation are in their own group */ +		/* find number of consecutive registers */ +		n = 0; +		offset = reg[i].offset; +		while (reg[i + n].offset == offset) { +			n++; +			offset += 4; +			if ((n + i) >= nreg) +				break; +			if (n >= (R600_BLOCK_MAX_REG - 2)) +				break; +		}  		/* allocate new block */ -		tmp = realloc(group->blocks, (group->nblocks + 1) * sizeof(struct r600_group_block)); -		if (tmp == NULL) { +		block = calloc(1, sizeof(struct r600_block)); +		if (block == NULL) {  			return -ENOMEM;  		} -		/* update reg pointer */ -		if (tmp != group->blocks) { -			for (int j = 0; j < group->nblocks; j++) { -				tmp[j].reg = &tmp[j].pm4[2]; -			} -		} -		group->blocks = tmp; -		block = &group->blocks[group->nblocks++]; +		ctx->nblocks++;  		for (int j = 0; j < n; j++) { -			group->offset_block_id[((reg[i].offset - group->start_offset) >> 2) + j] = group->nblocks - 1; +			range = &ctx->range[CTX_RANGE_ID(ctx, reg[i + j].offset)]; +			range->blocks[CTX_BLOCK_ID(ctx, reg[i + j].offset)] = block;  		}  		/* initialize block */ -		memset(block, 0, sizeof(struct r600_group_block));  		block->start_offset = reg[i].offset; -		block->pm4[block->pm4_ndwords++] = PKT3(opcode, n); -		block->pm4[block->pm4_ndwords++] = (block->start_offset - group->start_offset) >> 2; +		block->pm4[block->pm4_ndwords++] = PKT3(reg[i].opcode, n); +		block->pm4[block->pm4_ndwords++] = (block->start_offset - reg[i].offset_base) >> 2;  		block->reg = &block->pm4[block->pm4_ndwords];  		block->pm4_ndwords += n;  		block->nreg = n; @@ -138,6 +115,8 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,  		}  		for (j = 0; j < n; j++) {  			if (reg[i+j].flush_flags) { +				unsigned id; +  				block->pm4[block->pm4_ndwords++] = PKT3(PKT3_SURFACE_SYNC, 3);  				block->pm4[block->pm4_ndwords++] = reg[i+j].flush_flags;  				block->pm4[block->pm4_ndwords++] = 0xFFFFFFFF; @@ -155,455 +134,456 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,  	return 0;  } -int r600_group_init(struct r600_group *group, unsigned start_offset, unsigned end_offset) -{ -	group->start_offset = start_offset; -	group->end_offset = end_offset; -	group->nblocks = 0; -	group->blocks = NULL; -	group->offset_block_id = calloc((end_offset - start_offset) >> 2, sizeof(unsigned)); -	if (group->offset_block_id == NULL) -		return -ENOMEM; -	return 0; -} - -static void r600_group_fini(struct r600_group *group) -{ -	free(group->offset_block_id); -	free(group->blocks); -} -  /* R600/R700 configuration */  static const struct r600_reg r600_config_reg_list[] = { -	{0, 0, R_008958_VGT_PRIMITIVE_TYPE}, -	{0, 0, R_008C00_SQ_CONFIG}, -	{0, 0, R_008C04_SQ_GPR_RESOURCE_MGMT_1}, -	{0, 0, R_008C08_SQ_GPR_RESOURCE_MGMT_2}, -	{0, 0, R_008C0C_SQ_THREAD_RESOURCE_MGMT}, -	{0, 0, R_008C10_SQ_STACK_RESOURCE_MGMT_1}, -	{0, 0, R_008C14_SQ_STACK_RESOURCE_MGMT_2}, -	{0, 0, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ}, -	{0, 0, R_009508_TA_CNTL_AUX}, -	{0, 0, R_009714_VC_ENHANCE}, -	{0, 0, R_009830_DB_DEBUG}, -	{0, 0, R_009838_DB_WATERMARKS}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008958_VGT_PRIMITIVE_TYPE, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C00_SQ_CONFIG, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C04_SQ_GPR_RESOURCE_MGMT_1, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C08_SQ_GPR_RESOURCE_MGMT_2, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C0C_SQ_THREAD_RESOURCE_MGMT, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C10_SQ_STACK_RESOURCE_MGMT_1, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008C14_SQ_STACK_RESOURCE_MGMT_2, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_009508_TA_CNTL_AUX, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_009714_VC_ENHANCE, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_009830_DB_DEBUG, 0, 0}, +	{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_009838_DB_WATERMARKS, 0, 0},  };  static const struct r600_reg r600_context_reg_list[] = { -	{0, 0, R_028350_SX_MISC}, -	{0, 0, R_0286C8_SPI_THREAD_GROUPING}, -	{0, 0, R_0288A8_SQ_ESGS_RING_ITEMSIZE}, -	{0, 0, R_0288AC_SQ_GSVS_RING_ITEMSIZE}, -	{0, 0, R_0288B0_SQ_ESTMP_RING_ITEMSIZE}, -	{0, 0, R_0288B4_SQ_GSTMP_RING_ITEMSIZE}, -	{0, 0, R_0288B8_SQ_VSTMP_RING_ITEMSIZE}, -	{0, 0, R_0288BC_SQ_PSTMP_RING_ITEMSIZE}, -	{0, 0, R_0288C0_SQ_FBUF_RING_ITEMSIZE}, -	{0, 0, R_0288C4_SQ_REDUC_RING_ITEMSIZE}, -	{0, 0, R_0288C8_SQ_GS_VERT_ITEMSIZE}, -	{0, 0, R_028A10_VGT_OUTPUT_PATH_CNTL}, -	{0, 0, R_028A14_VGT_HOS_CNTL}, -	{0, 0, R_028A18_VGT_HOS_MAX_TESS_LEVEL}, -	{0, 0, R_028A1C_VGT_HOS_MIN_TESS_LEVEL}, -	{0, 0, R_028A20_VGT_HOS_REUSE_DEPTH}, -	{0, 0, R_028A24_VGT_GROUP_PRIM_TYPE}, -	{0, 0, R_028A28_VGT_GROUP_FIRST_DECR}, -	{0, 0, R_028A2C_VGT_GROUP_DECR}, -	{0, 0, R_028A30_VGT_GROUP_VECT_0_CNTL}, -	{0, 0, R_028A34_VGT_GROUP_VECT_1_CNTL}, -	{0, 0, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL}, -	{0, 0, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL}, -	{0, 0, R_028A40_VGT_GS_MODE}, -	{0, 0, R_028A4C_PA_SC_MODE_CNTL}, -	{0, 0, R_028AB0_VGT_STRMOUT_EN}, -	{0, 0, R_028AB4_VGT_REUSE_OFF}, -	{0, 0, R_028AB8_VGT_VTX_CNT_EN}, -	{0, 0, R_028B20_VGT_STRMOUT_BUFFER_EN}, -	{0, 0, R_028028_DB_STENCIL_CLEAR}, -	{0, 0, R_02802C_DB_DEPTH_CLEAR}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028040_CB_COLOR0_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280A0_CB_COLOR0_INFO}, -	{0, 0, R_028060_CB_COLOR0_SIZE}, -	{0, 0, R_028080_CB_COLOR0_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280E0_CB_COLOR0_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280C0_CB_COLOR0_TILE}, -	{0, 0, R_028100_CB_COLOR0_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028044_CB_COLOR1_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280A4_CB_COLOR1_INFO}, -	{0, 0, R_028064_CB_COLOR1_SIZE}, -	{0, 0, R_028084_CB_COLOR1_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280E4_CB_COLOR1_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280C4_CB_COLOR1_TILE}, -	{0, 0, R_028104_CB_COLOR1_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028048_CB_COLOR2_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280A8_CB_COLOR2_INFO}, -	{0, 0, R_028068_CB_COLOR2_SIZE}, -	{0, 0, R_028088_CB_COLOR2_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280E8_CB_COLOR2_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280C8_CB_COLOR2_TILE}, -	{0, 0, R_028108_CB_COLOR2_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_02804C_CB_COLOR3_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280AC_CB_COLOR3_INFO}, -	{0, 0, R_02806C_CB_COLOR3_SIZE}, -	{0, 0, R_02808C_CB_COLOR3_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280EC_CB_COLOR3_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280CC_CB_COLOR3_TILE}, -	{0, 0, R_02810C_CB_COLOR3_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028050_CB_COLOR4_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280B0_CB_COLOR4_INFO}, -	{0, 0, R_028070_CB_COLOR4_SIZE}, -	{0, 0, R_028090_CB_COLOR4_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280F0_CB_COLOR4_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280D0_CB_COLOR4_TILE}, -	{0, 0, R_028110_CB_COLOR4_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028054_CB_COLOR5_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280B4_CB_COLOR5_INFO}, -	{0, 0, R_028074_CB_COLOR5_SIZE}, -	{0, 0, R_028094_CB_COLOR5_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280F4_CB_COLOR5_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280D4_CB_COLOR5_TILE}, -	{0, 0, R_028114_CB_COLOR5_MASK}, -	{1, 0, R_028058_CB_COLOR6_BASE}, -	{1, 0, R_0280B8_CB_COLOR6_INFO}, -	{0, 0, R_028078_CB_COLOR6_SIZE}, -	{0, 0, R_028098_CB_COLOR6_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280F8_CB_COLOR6_FRAG}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280D8_CB_COLOR6_TILE}, -	{0, 0, R_028118_CB_COLOR6_MASK}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_02805C_CB_COLOR7_BASE}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_0280BC_CB_COLOR7_INFO}, -	{0, 0, R_02807C_CB_COLOR7_SIZE}, -	{0, 0, R_02809C_CB_COLOR7_VIEW}, -	{1, 0, R_0280FC_CB_COLOR7_FRAG}, -	{1, 0, R_0280DC_CB_COLOR7_TILE}, -	{0, 0, R_02811C_CB_COLOR7_MASK}, -	{0, 0, R_028120_CB_CLEAR_RED}, -	{0, 0, R_028124_CB_CLEAR_GREEN}, -	{0, 0, R_028128_CB_CLEAR_BLUE}, -	{0, 0, R_02812C_CB_CLEAR_ALPHA}, -	{0, 0, R_02823C_CB_SHADER_MASK}, -	{0, 0, R_028238_CB_TARGET_MASK}, -	{0, 0, R_028410_SX_ALPHA_TEST_CONTROL}, -	{0, 0, R_028414_CB_BLEND_RED}, -	{0, 0, R_028418_CB_BLEND_GREEN}, -	{0, 0, R_02841C_CB_BLEND_BLUE}, -	{0, 0, R_028420_CB_BLEND_ALPHA}, -	{0, 0, R_028424_CB_FOG_RED}, -	{0, 0, R_028428_CB_FOG_GREEN}, -	{0, 0, R_02842C_CB_FOG_BLUE}, -	{0, 0, R_028430_DB_STENCILREFMASK}, -	{0, 0, R_028434_DB_STENCILREFMASK_BF}, -	{0, 0, R_028438_SX_ALPHA_REF}, -	{0, 0, R_0286DC_SPI_FOG_CNTL}, -	{0, 0, R_0286E0_SPI_FOG_FUNC_SCALE}, -	{0, 0, R_0286E4_SPI_FOG_FUNC_BIAS}, -	{0, 0, R_028780_CB_BLEND0_CONTROL}, -	{0, 0, R_028784_CB_BLEND1_CONTROL}, -	{0, 0, R_028788_CB_BLEND2_CONTROL}, -	{0, 0, R_02878C_CB_BLEND3_CONTROL}, -	{0, 0, R_028790_CB_BLEND4_CONTROL}, -	{0, 0, R_028794_CB_BLEND5_CONTROL}, -	{0, 0, R_028798_CB_BLEND6_CONTROL}, -	{0, 0, R_02879C_CB_BLEND7_CONTROL}, -	{0, 0, R_0287A0_CB_SHADER_CONTROL}, -	{0, 0, R_028800_DB_DEPTH_CONTROL}, -	{0, 0, R_028804_CB_BLEND_CONTROL}, -	{0, 0, R_028808_CB_COLOR_CONTROL}, -	{0, 0, R_02880C_DB_SHADER_CONTROL}, -	{0, 0, R_028C04_PA_SC_AA_CONFIG}, -	{0, 0, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX}, -	{0, 0, R_028C20_PA_SC_AA_SAMPLE_LOCS_8S_WD1_MCTX}, -	{0, 0, R_028C30_CB_CLRCMP_CONTROL}, -	{0, 0, R_028C34_CB_CLRCMP_SRC}, -	{0, 0, R_028C38_CB_CLRCMP_DST}, -	{0, 0, R_028C3C_CB_CLRCMP_MSK}, -	{0, 0, R_028C48_PA_SC_AA_MASK}, -	{0, 0, R_028D2C_DB_SRESULTS_COMPARE_STATE1}, -	{0, 0, R_028D44_DB_ALPHA_TO_MASK}, -	{1, 0, R_02800C_DB_DEPTH_BASE}, -	{0, 0, R_028000_DB_DEPTH_SIZE}, -	{0, 0, R_028004_DB_DEPTH_VIEW}, -	{0, 0, GROUP_FORCE_NEW_BLOCK}, -	{1, 0, R_028010_DB_DEPTH_INFO}, -	{0, 0, R_028D0C_DB_RENDER_CONTROL}, -	{0, 0, R_028D10_DB_RENDER_OVERRIDE}, -	{0, 0, R_028D24_DB_HTILE_SURFACE}, -	{0, 0, R_028D30_DB_PRELOAD_CONTROL}, -	{0, 0, R_028D34_DB_PREFETCH_LIMIT}, -	{0, 0, R_028030_PA_SC_SCREEN_SCISSOR_TL}, -	{0, 0, R_028034_PA_SC_SCREEN_SCISSOR_BR}, -	{0, 0, R_028200_PA_SC_WINDOW_OFFSET}, -	{0, 0, R_028204_PA_SC_WINDOW_SCISSOR_TL}, -	{0, 0, R_028208_PA_SC_WINDOW_SCISSOR_BR}, -	{0, 0, R_02820C_PA_SC_CLIPRECT_RULE}, -	{0, 0, R_028210_PA_SC_CLIPRECT_0_TL}, -	{0, 0, R_028214_PA_SC_CLIPRECT_0_BR}, -	{0, 0, R_028218_PA_SC_CLIPRECT_1_TL}, -	{0, 0, R_02821C_PA_SC_CLIPRECT_1_BR}, -	{0, 0, R_028220_PA_SC_CLIPRECT_2_TL}, -	{0, 0, R_028224_PA_SC_CLIPRECT_2_BR}, -	{0, 0, R_028228_PA_SC_CLIPRECT_3_TL}, -	{0, 0, R_02822C_PA_SC_CLIPRECT_3_BR}, -	{0, 0, R_028230_PA_SC_EDGERULE}, -	{0, 0, R_028240_PA_SC_GENERIC_SCISSOR_TL}, -	{0, 0, R_028244_PA_SC_GENERIC_SCISSOR_BR}, -	{0, 0, R_028250_PA_SC_VPORT_SCISSOR_0_TL}, -	{0, 0, R_028254_PA_SC_VPORT_SCISSOR_0_BR}, -	{0, 0, R_0282D0_PA_SC_VPORT_ZMIN_0}, -	{0, 0, R_0282D4_PA_SC_VPORT_ZMAX_0}, -	{0, 0, R_02843C_PA_CL_VPORT_XSCALE_0}, -	{0, 0, R_028440_PA_CL_VPORT_XOFFSET_0}, -	{0, 0, R_028444_PA_CL_VPORT_YSCALE_0}, -	{0, 0, R_028448_PA_CL_VPORT_YOFFSET_0}, -	{0, 0, R_02844C_PA_CL_VPORT_ZSCALE_0}, -	{0, 0, R_028450_PA_CL_VPORT_ZOFFSET_0}, -	{0, 0, R_0286D4_SPI_INTERP_CONTROL_0}, -	{0, 0, R_028810_PA_CL_CLIP_CNTL}, -	{0, 0, R_028814_PA_SU_SC_MODE_CNTL}, -	{0, 0, R_028818_PA_CL_VTE_CNTL}, -	{0, 0, R_02881C_PA_CL_VS_OUT_CNTL}, -	{0, 0, R_028820_PA_CL_NANINF_CNTL}, -	{0, 0, R_028A00_PA_SU_POINT_SIZE}, -	{0, 0, R_028A04_PA_SU_POINT_MINMAX}, -	{0, 0, R_028A08_PA_SU_LINE_CNTL}, -	{0, 0, R_028A0C_PA_SC_LINE_STIPPLE}, -	{0, 0, R_028A48_PA_SC_MPASS_PS_CNTL}, -	{0, 0, R_028C00_PA_SC_LINE_CNTL}, -	{0, 0, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ}, -	{0, 0, R_028C10_PA_CL_GB_VERT_DISC_ADJ}, -	{0, 0, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ}, -	{0, 0, R_028C18_PA_CL_GB_HORZ_DISC_ADJ}, -	{0, 0, R_028DF8_PA_SU_POLY_OFFSET_DB_FMT_CNTL}, -	{0, 0, R_028DFC_PA_SU_POLY_OFFSET_CLAMP}, -	{0, 0, R_028E00_PA_SU_POLY_OFFSET_FRONT_SCALE}, -	{0, 0, R_028E04_PA_SU_POLY_OFFSET_FRONT_OFFSET}, -	{0, 0, R_028E08_PA_SU_POLY_OFFSET_BACK_SCALE}, -	{0, 0, R_028E0C_PA_SU_POLY_OFFSET_BACK_OFFSET}, -	{0, 0, R_028E20_PA_CL_UCP0_X}, -	{0, 0, R_028E24_PA_CL_UCP0_Y}, -	{0, 0, R_028E28_PA_CL_UCP0_Z}, -	{0, 0, R_028E2C_PA_CL_UCP0_W}, -	{0, 0, R_028E30_PA_CL_UCP1_X}, -	{0, 0, R_028E34_PA_CL_UCP1_Y}, -	{0, 0, R_028E38_PA_CL_UCP1_Z}, -	{0, 0, R_028E3C_PA_CL_UCP1_W}, -	{0, 0, R_028E40_PA_CL_UCP2_X}, -	{0, 0, R_028E44_PA_CL_UCP2_Y}, -	{0, 0, R_028E48_PA_CL_UCP2_Z}, -	{0, 0, R_028E4C_PA_CL_UCP2_W}, -	{0, 0, R_028E50_PA_CL_UCP3_X}, -	{0, 0, R_028E54_PA_CL_UCP3_Y}, -	{0, 0, R_028E58_PA_CL_UCP3_Z}, -	{0, 0, R_028E5C_PA_CL_UCP3_W}, -	{0, 0, R_028E60_PA_CL_UCP4_X}, -	{0, 0, R_028E64_PA_CL_UCP4_Y}, -	{0, 0, R_028E68_PA_CL_UCP4_Z}, -	{0, 0, R_028E6C_PA_CL_UCP4_W}, -	{0, 0, R_028E70_PA_CL_UCP5_X}, -	{0, 0, R_028E74_PA_CL_UCP5_Y}, -	{0, 0, R_028E78_PA_CL_UCP5_Z}, -	{0, 0, R_028E7C_PA_CL_UCP5_W}, -	{0, 0, R_028380_SQ_VTX_SEMANTIC_0}, -	{0, 0, R_028384_SQ_VTX_SEMANTIC_1}, -	{0, 0, R_028388_SQ_VTX_SEMANTIC_2}, -	{0, 0, R_02838C_SQ_VTX_SEMANTIC_3}, -	{0, 0, R_028390_SQ_VTX_SEMANTIC_4}, -	{0, 0, R_028394_SQ_VTX_SEMANTIC_5}, -	{0, 0, R_028398_SQ_VTX_SEMANTIC_6}, -	{0, 0, R_02839C_SQ_VTX_SEMANTIC_7}, -	{0, 0, R_0283A0_SQ_VTX_SEMANTIC_8}, -	{0, 0, R_0283A4_SQ_VTX_SEMANTIC_9}, -	{0, 0, R_0283A8_SQ_VTX_SEMANTIC_10}, -	{0, 0, R_0283AC_SQ_VTX_SEMANTIC_11}, -	{0, 0, R_0283B0_SQ_VTX_SEMANTIC_12}, -	{0, 0, R_0283B4_SQ_VTX_SEMANTIC_13}, -	{0, 0, R_0283B8_SQ_VTX_SEMANTIC_14}, -	{0, 0, R_0283BC_SQ_VTX_SEMANTIC_15}, -	{0, 0, R_0283C0_SQ_VTX_SEMANTIC_16}, -	{0, 0, R_0283C4_SQ_VTX_SEMANTIC_17}, -	{0, 0, R_0283C8_SQ_VTX_SEMANTIC_18}, -	{0, 0, R_0283CC_SQ_VTX_SEMANTIC_19}, -	{0, 0, R_0283D0_SQ_VTX_SEMANTIC_20}, -	{0, 0, R_0283D4_SQ_VTX_SEMANTIC_21}, -	{0, 0, R_0283D8_SQ_VTX_SEMANTIC_22}, -	{0, 0, R_0283DC_SQ_VTX_SEMANTIC_23}, -	{0, 0, R_0283E0_SQ_VTX_SEMANTIC_24}, -	{0, 0, R_0283E4_SQ_VTX_SEMANTIC_25}, -	{0, 0, R_0283E8_SQ_VTX_SEMANTIC_26}, -	{0, 0, R_0283EC_SQ_VTX_SEMANTIC_27}, -	{0, 0, R_0283F0_SQ_VTX_SEMANTIC_28}, -	{0, 0, R_0283F4_SQ_VTX_SEMANTIC_29}, -	{0, 0, R_0283F8_SQ_VTX_SEMANTIC_30}, -	{0, 0, R_0283FC_SQ_VTX_SEMANTIC_31}, -	{0, 0, R_028614_SPI_VS_OUT_ID_0}, -	{0, 0, R_028618_SPI_VS_OUT_ID_1}, -	{0, 0, R_02861C_SPI_VS_OUT_ID_2}, -	{0, 0, R_028620_SPI_VS_OUT_ID_3}, -	{0, 0, R_028624_SPI_VS_OUT_ID_4}, -	{0, 0, R_028628_SPI_VS_OUT_ID_5}, -	{0, 0, R_02862C_SPI_VS_OUT_ID_6}, -	{0, 0, R_028630_SPI_VS_OUT_ID_7}, -	{0, 0, R_028634_SPI_VS_OUT_ID_8}, -	{0, 0, R_028638_SPI_VS_OUT_ID_9}, -	{0, 0, R_0286C4_SPI_VS_OUT_CONFIG}, -	{1, 0, R_028858_SQ_PGM_START_VS}, -	{0, S_0085F0_SH_ACTION_ENA(1), R_028868_SQ_PGM_RESOURCES_VS}, -	{1, 0, R_028894_SQ_PGM_START_FS}, -	{0, S_0085F0_SH_ACTION_ENA(1), R_0288A4_SQ_PGM_RESOURCES_FS}, -	{0, 0, R_0288D0_SQ_PGM_CF_OFFSET_VS}, -	{0, 0, R_0288DC_SQ_PGM_CF_OFFSET_FS}, -	{0, 0, R_028644_SPI_PS_INPUT_CNTL_0}, -	{0, 0, R_028648_SPI_PS_INPUT_CNTL_1}, -	{0, 0, R_02864C_SPI_PS_INPUT_CNTL_2}, -	{0, 0, R_028650_SPI_PS_INPUT_CNTL_3}, -	{0, 0, R_028654_SPI_PS_INPUT_CNTL_4}, -	{0, 0, R_028658_SPI_PS_INPUT_CNTL_5}, -	{0, 0, R_02865C_SPI_PS_INPUT_CNTL_6}, -	{0, 0, R_028660_SPI_PS_INPUT_CNTL_7}, -	{0, 0, R_028664_SPI_PS_INPUT_CNTL_8}, -	{0, 0, R_028668_SPI_PS_INPUT_CNTL_9}, -	{0, 0, R_02866C_SPI_PS_INPUT_CNTL_10}, -	{0, 0, R_028670_SPI_PS_INPUT_CNTL_11}, -	{0, 0, R_028674_SPI_PS_INPUT_CNTL_12}, -	{0, 0, R_028678_SPI_PS_INPUT_CNTL_13}, -	{0, 0, R_02867C_SPI_PS_INPUT_CNTL_14}, -	{0, 0, R_028680_SPI_PS_INPUT_CNTL_15}, -	{0, 0, R_028684_SPI_PS_INPUT_CNTL_16}, -	{0, 0, R_028688_SPI_PS_INPUT_CNTL_17}, -	{0, 0, R_02868C_SPI_PS_INPUT_CNTL_18}, -	{0, 0, R_028690_SPI_PS_INPUT_CNTL_19}, -	{0, 0, R_028694_SPI_PS_INPUT_CNTL_20}, -	{0, 0, R_028698_SPI_PS_INPUT_CNTL_21}, -	{0, 0, R_02869C_SPI_PS_INPUT_CNTL_22}, -	{0, 0, R_0286A0_SPI_PS_INPUT_CNTL_23}, -	{0, 0, R_0286A4_SPI_PS_INPUT_CNTL_24}, -	{0, 0, R_0286A8_SPI_PS_INPUT_CNTL_25}, -	{0, 0, R_0286AC_SPI_PS_INPUT_CNTL_26}, -	{0, 0, R_0286B0_SPI_PS_INPUT_CNTL_27}, -	{0, 0, R_0286B4_SPI_PS_INPUT_CNTL_28}, -	{0, 0, R_0286B8_SPI_PS_INPUT_CNTL_29}, -	{0, 0, R_0286BC_SPI_PS_INPUT_CNTL_30}, -	{0, 0, R_0286C0_SPI_PS_INPUT_CNTL_31}, -	{0, 0, R_0286CC_SPI_PS_IN_CONTROL_0}, -	{0, 0, R_0286D0_SPI_PS_IN_CONTROL_1}, -	{0, 0, R_0286D8_SPI_INPUT_Z}, -	{1, S_0085F0_SH_ACTION_ENA(1), R_028840_SQ_PGM_START_PS}, -	{0, 0, R_028850_SQ_PGM_RESOURCES_PS}, -	{0, 0, R_028854_SQ_PGM_EXPORTS_PS}, -	{0, 0, R_0288CC_SQ_PGM_CF_OFFSET_PS}, -	{0, 0, R_028400_VGT_MAX_VTX_INDX}, -	{0, 0, R_028404_VGT_MIN_VTX_INDX}, -	{0, 0, R_028408_VGT_INDX_OFFSET}, -	{0, 0, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX}, -	{0, 0, R_028A84_VGT_PRIMITIVEID_EN}, -	{0, 0, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN}, -	{0, 0, R_028AA0_VGT_INSTANCE_STEP_RATE_0}, -	{0, 0, R_028AA4_VGT_INSTANCE_STEP_RATE_1}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028350_SX_MISC, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286C8_SPI_THREAD_GROUPING, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288A8_SQ_ESGS_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288AC_SQ_GSVS_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288B0_SQ_ESTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288B4_SQ_GSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288B8_SQ_VSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288BC_SQ_PSTMP_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288C0_SQ_FBUF_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288C4_SQ_REDUC_RING_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288C8_SQ_GS_VERT_ITEMSIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A10_VGT_OUTPUT_PATH_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A14_VGT_HOS_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A20_VGT_HOS_REUSE_DEPTH, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A24_VGT_GROUP_PRIM_TYPE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A28_VGT_GROUP_FIRST_DECR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A2C_VGT_GROUP_DECR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A30_VGT_GROUP_VECT_0_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A34_VGT_GROUP_VECT_1_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A40_VGT_GS_MODE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A4C_PA_SC_MODE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028AB0_VGT_STRMOUT_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028AB4_VGT_REUSE_OFF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028AB8_VGT_VTX_CNT_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028B20_VGT_STRMOUT_BUFFER_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028028_DB_STENCIL_CLEAR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02802C_DB_DEPTH_CLEAR, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028040_CB_COLOR0_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A0_CB_COLOR0_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028060_CB_COLOR0_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028080_CB_COLOR0_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E0_CB_COLOR0_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C0_CB_COLOR0_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028100_CB_COLOR0_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028044_CB_COLOR1_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A4_CB_COLOR1_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028064_CB_COLOR1_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028084_CB_COLOR1_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E4_CB_COLOR1_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C4_CB_COLOR1_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028104_CB_COLOR1_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028048_CB_COLOR2_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A8_CB_COLOR2_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028068_CB_COLOR2_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028088_CB_COLOR2_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E8_CB_COLOR2_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C8_CB_COLOR2_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028108_CB_COLOR2_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02804C_CB_COLOR3_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280AC_CB_COLOR3_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02806C_CB_COLOR3_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02808C_CB_COLOR3_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280EC_CB_COLOR3_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280CC_CB_COLOR3_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02810C_CB_COLOR3_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028050_CB_COLOR4_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B0_CB_COLOR4_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028070_CB_COLOR4_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028090_CB_COLOR4_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F0_CB_COLOR4_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D0_CB_COLOR4_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028110_CB_COLOR4_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028054_CB_COLOR5_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B4_CB_COLOR5_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028074_CB_COLOR5_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028094_CB_COLOR5_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F4_CB_COLOR5_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D4_CB_COLOR5_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028114_CB_COLOR5_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028058_CB_COLOR6_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B8_CB_COLOR6_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028078_CB_COLOR6_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028098_CB_COLOR6_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F8_CB_COLOR6_FRAG, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D8_CB_COLOR6_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028118_CB_COLOR6_MASK, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02805C_CB_COLOR7_BASE, 1, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280BC_CB_COLOR7_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02807C_CB_COLOR7_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02809C_CB_COLOR7_VIEW, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280FC_CB_COLOR7_FRAG, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280DC_CB_COLOR7_TILE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02811C_CB_COLOR7_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028120_CB_CLEAR_RED, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028124_CB_CLEAR_GREEN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028128_CB_CLEAR_BLUE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02812C_CB_CLEAR_ALPHA, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02823C_CB_SHADER_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028238_CB_TARGET_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028410_SX_ALPHA_TEST_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028414_CB_BLEND_RED, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028418_CB_BLEND_GREEN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02841C_CB_BLEND_BLUE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028420_CB_BLEND_ALPHA, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028424_CB_FOG_RED, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028428_CB_FOG_GREEN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02842C_CB_FOG_BLUE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028430_DB_STENCILREFMASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028434_DB_STENCILREFMASK_BF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028438_SX_ALPHA_REF, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286DC_SPI_FOG_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286E0_SPI_FOG_FUNC_SCALE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286E4_SPI_FOG_FUNC_BIAS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028780_CB_BLEND0_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028784_CB_BLEND1_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028788_CB_BLEND2_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02878C_CB_BLEND3_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028790_CB_BLEND4_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028794_CB_BLEND5_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028798_CB_BLEND6_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02879C_CB_BLEND7_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0287A0_CB_SHADER_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028800_DB_DEPTH_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028804_CB_BLEND_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028808_CB_COLOR_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02880C_DB_SHADER_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C04_PA_SC_AA_CONFIG, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C20_PA_SC_AA_SAMPLE_LOCS_8S_WD1_MCTX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C30_CB_CLRCMP_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C34_CB_CLRCMP_SRC, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C38_CB_CLRCMP_DST, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C3C_CB_CLRCMP_MSK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C48_PA_SC_AA_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D2C_DB_SRESULTS_COMPARE_STATE1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D44_DB_ALPHA_TO_MASK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02800C_DB_DEPTH_BASE, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028000_DB_DEPTH_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028004_DB_DEPTH_VIEW, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028010_DB_DEPTH_INFO, 1, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D0C_DB_RENDER_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D10_DB_RENDER_OVERRIDE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D24_DB_HTILE_SURFACE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D30_DB_PRELOAD_CONTROL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D34_DB_PREFETCH_LIMIT, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028030_PA_SC_SCREEN_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028034_PA_SC_SCREEN_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028200_PA_SC_WINDOW_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028204_PA_SC_WINDOW_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028208_PA_SC_WINDOW_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02820C_PA_SC_CLIPRECT_RULE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028210_PA_SC_CLIPRECT_0_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028214_PA_SC_CLIPRECT_0_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028218_PA_SC_CLIPRECT_1_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02821C_PA_SC_CLIPRECT_1_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028220_PA_SC_CLIPRECT_2_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028224_PA_SC_CLIPRECT_2_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028228_PA_SC_CLIPRECT_3_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02822C_PA_SC_CLIPRECT_3_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028230_PA_SC_EDGERULE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028240_PA_SC_GENERIC_SCISSOR_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028244_PA_SC_GENERIC_SCISSOR_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028250_PA_SC_VPORT_SCISSOR_0_TL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028254_PA_SC_VPORT_SCISSOR_0_BR, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0282D0_PA_SC_VPORT_ZMIN_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0282D4_PA_SC_VPORT_ZMAX_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02843C_PA_CL_VPORT_XSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028440_PA_CL_VPORT_XOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028444_PA_CL_VPORT_YSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028448_PA_CL_VPORT_YOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02844C_PA_CL_VPORT_ZSCALE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028450_PA_CL_VPORT_ZOFFSET_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286D4_SPI_INTERP_CONTROL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028810_PA_CL_CLIP_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028814_PA_SU_SC_MODE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028818_PA_CL_VTE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02881C_PA_CL_VS_OUT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028820_PA_CL_NANINF_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A00_PA_SU_POINT_SIZE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A04_PA_SU_POINT_MINMAX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A08_PA_SU_LINE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A0C_PA_SC_LINE_STIPPLE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A48_PA_SC_MPASS_PS_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C00_PA_SC_LINE_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028DF8_PA_SU_POLY_OFFSET_DB_FMT_CNTL, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E00_PA_SU_POLY_OFFSET_FRONT_SCALE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E04_PA_SU_POLY_OFFSET_FRONT_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E08_PA_SU_POLY_OFFSET_BACK_SCALE, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E0C_PA_SU_POLY_OFFSET_BACK_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E20_PA_CL_UCP0_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E24_PA_CL_UCP0_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E28_PA_CL_UCP0_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E2C_PA_CL_UCP0_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E30_PA_CL_UCP1_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E34_PA_CL_UCP1_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E38_PA_CL_UCP1_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E3C_PA_CL_UCP1_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E40_PA_CL_UCP2_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E44_PA_CL_UCP2_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E48_PA_CL_UCP2_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E4C_PA_CL_UCP2_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E50_PA_CL_UCP3_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E54_PA_CL_UCP3_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E58_PA_CL_UCP3_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E5C_PA_CL_UCP3_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E60_PA_CL_UCP4_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E64_PA_CL_UCP4_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E68_PA_CL_UCP4_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E6C_PA_CL_UCP4_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E70_PA_CL_UCP5_X, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E74_PA_CL_UCP5_Y, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E78_PA_CL_UCP5_Z, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028E7C_PA_CL_UCP5_W, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028380_SQ_VTX_SEMANTIC_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028384_SQ_VTX_SEMANTIC_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028388_SQ_VTX_SEMANTIC_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02838C_SQ_VTX_SEMANTIC_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028390_SQ_VTX_SEMANTIC_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028394_SQ_VTX_SEMANTIC_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028398_SQ_VTX_SEMANTIC_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02839C_SQ_VTX_SEMANTIC_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283A0_SQ_VTX_SEMANTIC_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283A4_SQ_VTX_SEMANTIC_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283A8_SQ_VTX_SEMANTIC_10, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283AC_SQ_VTX_SEMANTIC_11, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283B0_SQ_VTX_SEMANTIC_12, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283B4_SQ_VTX_SEMANTIC_13, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283B8_SQ_VTX_SEMANTIC_14, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283BC_SQ_VTX_SEMANTIC_15, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283C0_SQ_VTX_SEMANTIC_16, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283C4_SQ_VTX_SEMANTIC_17, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283C8_SQ_VTX_SEMANTIC_18, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283CC_SQ_VTX_SEMANTIC_19, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283D0_SQ_VTX_SEMANTIC_20, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283D4_SQ_VTX_SEMANTIC_21, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283D8_SQ_VTX_SEMANTIC_22, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283DC_SQ_VTX_SEMANTIC_23, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283E0_SQ_VTX_SEMANTIC_24, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283E4_SQ_VTX_SEMANTIC_25, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283E8_SQ_VTX_SEMANTIC_26, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283EC_SQ_VTX_SEMANTIC_27, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283F0_SQ_VTX_SEMANTIC_28, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283F4_SQ_VTX_SEMANTIC_29, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283F8_SQ_VTX_SEMANTIC_30, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0283FC_SQ_VTX_SEMANTIC_31, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028614_SPI_VS_OUT_ID_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028618_SPI_VS_OUT_ID_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02861C_SPI_VS_OUT_ID_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028620_SPI_VS_OUT_ID_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028624_SPI_VS_OUT_ID_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028628_SPI_VS_OUT_ID_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02862C_SPI_VS_OUT_ID_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028630_SPI_VS_OUT_ID_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028634_SPI_VS_OUT_ID_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028638_SPI_VS_OUT_ID_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286C4_SPI_VS_OUT_CONFIG, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028858_SQ_PGM_START_VS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028868_SQ_PGM_RESOURCES_VS, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028894_SQ_PGM_START_FS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288A4_SQ_PGM_RESOURCES_FS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288D0_SQ_PGM_CF_OFFSET_VS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288DC_SQ_PGM_CF_OFFSET_FS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028644_SPI_PS_INPUT_CNTL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028648_SPI_PS_INPUT_CNTL_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02864C_SPI_PS_INPUT_CNTL_2, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028650_SPI_PS_INPUT_CNTL_3, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028654_SPI_PS_INPUT_CNTL_4, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028658_SPI_PS_INPUT_CNTL_5, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02865C_SPI_PS_INPUT_CNTL_6, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028660_SPI_PS_INPUT_CNTL_7, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028664_SPI_PS_INPUT_CNTL_8, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028668_SPI_PS_INPUT_CNTL_9, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02866C_SPI_PS_INPUT_CNTL_10, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028670_SPI_PS_INPUT_CNTL_11, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028674_SPI_PS_INPUT_CNTL_12, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028678_SPI_PS_INPUT_CNTL_13, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02867C_SPI_PS_INPUT_CNTL_14, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028680_SPI_PS_INPUT_CNTL_15, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028684_SPI_PS_INPUT_CNTL_16, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028688_SPI_PS_INPUT_CNTL_17, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02868C_SPI_PS_INPUT_CNTL_18, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028690_SPI_PS_INPUT_CNTL_19, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028694_SPI_PS_INPUT_CNTL_20, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028698_SPI_PS_INPUT_CNTL_21, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02869C_SPI_PS_INPUT_CNTL_22, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286A0_SPI_PS_INPUT_CNTL_23, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286A4_SPI_PS_INPUT_CNTL_24, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286A8_SPI_PS_INPUT_CNTL_25, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286AC_SPI_PS_INPUT_CNTL_26, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286B0_SPI_PS_INPUT_CNTL_27, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286B4_SPI_PS_INPUT_CNTL_28, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286B8_SPI_PS_INPUT_CNTL_29, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286BC_SPI_PS_INPUT_CNTL_30, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286C0_SPI_PS_INPUT_CNTL_31, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286CC_SPI_PS_IN_CONTROL_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286D0_SPI_PS_IN_CONTROL_1, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286D8_SPI_INPUT_Z, 0, 0}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, 1, S_0085F0_SH_ACTION_ENA(1)}, +	{0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028850_SQ_PGM_RESOURCES_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028854_SQ_PGM_EXPORTS_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288CC_SQ_PGM_CF_OFFSET_PS, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028400_VGT_MAX_VTX_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028404_VGT_MIN_VTX_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028408_VGT_INDX_OFFSET, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A84_VGT_PRIMITIVEID_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028AA0_VGT_INSTANCE_STEP_RATE_0, 0, 0}, +	{PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028AA4_VGT_INSTANCE_STEP_RATE_1, 0, 0},  };  /* SHADER CONSTANT R600/R700 */  static int r600_state_constant_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_constant[] = { -		{0, 0, R_030000_SQ_ALU_CONSTANT0_0}, -		{0, 0, R_030004_SQ_ALU_CONSTANT1_0}, -		{0, 0, R_030008_SQ_ALU_CONSTANT2_0}, -		{0, 0, R_03000C_SQ_ALU_CONSTANT3_0}, +		{PKT3_SET_ALU_CONST, R600_ALU_CONST_OFFSET, R_030000_SQ_ALU_CONSTANT0_0, 0, 0}, +		{PKT3_SET_ALU_CONST, R600_ALU_CONST_OFFSET, R_030004_SQ_ALU_CONSTANT1_0, 0, 0}, +		{PKT3_SET_ALU_CONST, R600_ALU_CONST_OFFSET, R_030008_SQ_ALU_CONSTANT2_0, 0, 0}, +		{PKT3_SET_ALU_CONST, R600_ALU_CONST_OFFSET, R_03000C_SQ_ALU_CONSTANT3_0, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_constant)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_constant[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_constant, nreg, PKT3_SET_ALU_CONST); +	return r600_context_add_block(ctx, r600_shader_constant, nreg);  }  /* SHADER RESOURCE R600/R700 */  static int r600_state_resource_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_resource[] = { -		{0, 0, R_038000_RESOURCE0_WORD0}, -		{0, 0, R_038004_RESOURCE0_WORD1}, -		{1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), R_038008_RESOURCE0_WORD2}, -		{1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), R_03800C_RESOURCE0_WORD3}, -		{0, 0, R_038010_RESOURCE0_WORD4}, -		{0, 0, R_038014_RESOURCE0_WORD5}, -		{0, 0, R_038018_RESOURCE0_WORD6}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038000_RESOURCE0_WORD0, 0, 0}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038004_RESOURCE0_WORD1, 0, 0}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038008_RESOURCE0_WORD2, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1)}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_03800C_RESOURCE0_WORD3, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1)}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038010_RESOURCE0_WORD4, 0, 0}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038014_RESOURCE0_WORD5, 0, 0}, +		{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038018_RESOURCE0_WORD6, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_resource)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_resource[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_resource, nreg, PKT3_SET_RESOURCE); +	return r600_context_add_block(ctx, r600_shader_resource, nreg);  }  /* SHADER SAMPLER R600/R700 */  static int r600_state_sampler_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_sampler[] = { -		{0, 0, R_03C000_SQ_TEX_SAMPLER_WORD0_0}, -		{0, 0, R_03C004_SQ_TEX_SAMPLER_WORD1_0}, -		{0, 0, R_03C008_SQ_TEX_SAMPLER_WORD2_0}, +		{PKT3_SET_SAMPLER, R600_SAMPLER_OFFSET, R_03C000_SQ_TEX_SAMPLER_WORD0_0, 0, 0}, +		{PKT3_SET_SAMPLER, R600_SAMPLER_OFFSET, R_03C004_SQ_TEX_SAMPLER_WORD1_0, 0, 0}, +		{PKT3_SET_SAMPLER, R600_SAMPLER_OFFSET, R_03C008_SQ_TEX_SAMPLER_WORD2_0, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_sampler)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_sampler[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_sampler, nreg, PKT3_SET_SAMPLER); +	return r600_context_add_block(ctx, r600_shader_sampler, nreg);  }  /* SHADER SAMPLER BORDER R600/R700 */  static int r600_state_sampler_border_init(struct r600_context *ctx, u32 offset)  {  	struct r600_reg r600_shader_sampler_border[] = { -		{0, 0, R_00A400_TD_PS_SAMPLER0_BORDER_RED}, -		{0, 0, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN}, -		{0, 0, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE}, -		{0, 0, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA}, +		{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_00A400_TD_PS_SAMPLER0_BORDER_RED, 0, 0}, +		{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, 0, 0}, +		{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, 0, 0}, +		{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA, 0, 0},  	};  	unsigned nreg = sizeof(r600_shader_sampler_border)/sizeof(struct r600_reg);  	for (int i = 0; i < nreg; i++) {  		r600_shader_sampler_border[i].offset += offset;  	} -	return r600_context_add_block(ctx, r600_shader_sampler_border, nreg, PKT3_SET_CONFIG_REG); +	return r600_context_add_block(ctx, r600_shader_sampler_border, nreg);  }  /* initialize */  void r600_context_fini(struct r600_context *ctx)  { -	for (int i = 0; i < ctx->ngroups; i++) { -		r600_group_fini(&ctx->groups[i]); +	struct r600_block *block; +	struct r600_range *range; + +	for (int i = 0; i < 256; i++) { +		for (int j = 0; j < (1 << ctx->hash_shift); j++) { +			block = ctx->range[i].blocks[j]; +			if (block) { +				for (int k = 0, offset = block->start_offset; k < block->nreg; k++, offset += 4) { +					range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +					range->blocks[CTX_BLOCK_ID(ctx, offset)] = NULL; +				} +				free(block); +			} +		} +		free(ctx->range[i].blocks);  	}  	free(ctx->reloc);  	free(ctx->pm4); @@ -617,50 +597,26 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)  	memset(ctx, 0, sizeof(struct r600_context));  	ctx->radeon = radeon;  	LIST_INITHEAD(&ctx->query_list); -	/* initialize groups */ -	r = r600_group_init(&ctx->groups[R600_GROUP_CONFIG], R600_CONFIG_REG_OFFSET, R600_CONFIG_REG_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_CTL_CONST], R600_CTL_CONST_OFFSET, R600_CTL_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_LOOP_CONST], R600_LOOP_CONST_OFFSET, R600_LOOP_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_BOOL_CONST], R600_BOOL_CONST_OFFSET, R600_BOOL_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_SAMPLER], R600_SAMPLER_OFFSET, R600_SAMPLER_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_RESOURCE], R600_RESOURCE_OFFSET, R600_RESOURCE_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_ALU_CONST], R600_ALU_CONST_OFFSET, R600_ALU_CONST_END); -	if (r) { -		goto out_err; -	} -	r = r600_group_init(&ctx->groups[R600_GROUP_CONTEXT], R600_CONTEXT_REG_OFFSET, R600_CONTEXT_REG_END); -	if (r) { -		goto out_err; + +	/* initialize hash */ +	ctx->hash_size = 19; +	ctx->hash_shift = 11; +	for (int i = 0; i < 256; i++) { +		ctx->range[i].start_offset = i << ctx->hash_shift; +		ctx->range[i].end_offset = ((i + 1) << ctx->hash_shift) - 1; +		ctx->range[i].blocks = calloc(1 << ctx->hash_shift, sizeof(void*)); +		if (ctx->range[i].blocks == NULL) { +			return -ENOMEM; +		}  	} -	ctx->ngroups = R600_NGROUPS;  	/* add blocks */  	r = r600_context_add_block(ctx, r600_config_reg_list, -				sizeof(r600_config_reg_list)/sizeof(struct r600_reg), -				PKT3_SET_CONFIG_REG); +				sizeof(r600_config_reg_list)/sizeof(struct r600_reg));  	if (r)  		goto out_err;  	r = r600_context_add_block(ctx, r600_context_reg_list, -				sizeof(r600_context_reg_list)/sizeof(struct r600_reg), -				PKT3_SET_CONTEXT_REG); +				sizeof(r600_context_reg_list)/sizeof(struct r600_reg));  	if (r)  		goto out_err; @@ -714,6 +670,27 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)  			goto out_err;  	} +	/* setup block table */ +	ctx->blocks = calloc(ctx->nblocks, sizeof(void*)); +	for (int i = 0, c = 0; i < 256; i++) { +		for (int j = 0, add; j < (1 << ctx->hash_shift); j++) { +			if (ctx->range[i].blocks[j]) { +				add = 1; +				for (int k = 0; k < c; k++) { +					if (ctx->blocks[k] == ctx->range[i].blocks[j]) { +						add = 0; +						break; +					} +				} +				if (add) { +					assert(c < ctx->nblocks); +					ctx->blocks[c++] = ctx->range[i].blocks[j]; +					j += (ctx->range[i].blocks[j]->nreg << 2) - 1; +				} +			} +		} +	} +  	/* allocate cs variables */  	ctx->nreloc = RADEON_CTX_MAX_PM4;  	ctx->reloc = calloc(ctx->nreloc, sizeof(struct r600_reloc)); @@ -769,14 +746,14 @@ void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct radeon_bo  void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state)  { -	struct r600_group *group; -	struct r600_group_block *block; +	struct r600_range *range; +	struct r600_block *block;  	for (int i = 0; i < state->nregs; i++) {  		unsigned id; -		group = &ctx->groups[state->regs[i].group_id]; -		id = group->offset_block_id[(state->regs[i].offset - group->start_offset) >> 2]; -		block = &group->blocks[id]; + +		range = &ctx->range[CTX_RANGE_ID(ctx, state->regs[i].offset)]; +		block = range->blocks[CTX_BLOCK_ID(ctx, state->regs[i].offset)];  		id = (state->regs[i].offset - block->start_offset) >> 2;  		block->reg[id] &= ~state->regs[i].mask;  		block->reg[id] |= state->regs[i].value; @@ -793,12 +770,11 @@ void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_stat  static inline void r600_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[R600_GROUP_RESOURCE].start_offset; -	id = ctx->groups[R600_GROUP_RESOURCE].offset_block_id[offset >> 2]; -	block = &ctx->groups[R600_GROUP_RESOURCE].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		radeon_ws_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL); @@ -846,12 +822,11 @@ void r600_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r6  static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[R600_GROUP_SAMPLER].start_offset; -	id = ctx->groups[R600_GROUP_SAMPLER].offset_block_id[offset >> 2]; -	block = &ctx->groups[R600_GROUP_SAMPLER].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		return; @@ -866,12 +841,11 @@ static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx,  static inline void r600_context_pipe_state_set_sampler_border(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)  { -	struct r600_group_block *block; -	unsigned id; +	struct r600_range *range; +	struct r600_block *block; -	offset -= ctx->groups[R600_GROUP_CONFIG].start_offset; -	id = ctx->groups[R600_GROUP_CONFIG].offset_block_id[offset >> 2]; -	block = &ctx->groups[R600_GROUP_CONFIG].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	if (state == NULL) {  		block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);  		return; @@ -908,39 +882,14 @@ void r600_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struct r60  	r600_context_pipe_state_set_sampler_border(ctx, state, offset);  } -void r600_context_group_emit_dirty(struct r600_context *ctx, struct r600_group *group) -{ -	struct radeon_bo *bo; -	int id; - -	for (int i = 0; i < group->nblocks; i++) { -		struct r600_group_block *block = &group->blocks[i]; -		if (block->status & R600_BLOCK_STATUS_DIRTY) { -			for (int j = 0; j < block->nreg; j++) { -				if (block->pm4_bo_index[j]) { -					/* find relocation */ -					id = block->pm4_bo_index[j]; -					bo = radeon_bo_pb_get_bo(block->reloc[id].bo->pb); -					for (int k = 0; k < block->reloc[id].nreloc; k++) { -						r600_context_bo_reloc(ctx, &block->pm4[block->reloc[id].bo_pm4_index[k]], bo); -					} -				} -			} - -			memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4); -			ctx->pm4_cdwords += block->pm4_ndwords; -			block->status ^= R600_BLOCK_STATUS_DIRTY; -		} -	} -} - -struct radeon_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned group_id, unsigned offset) +struct radeon_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset)  { -	struct r600_group_block *block; +	struct r600_range *range; +	struct r600_block *block;  	unsigned id; -	id = ctx->groups[group_id].offset_block_id[(offset - ctx->groups[group_id].start_offset) >> 2]; -	block = &ctx->groups[group_id].blocks[id]; +	range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; +	block = range->blocks[CTX_BLOCK_ID(ctx, offset)];  	offset -= block->start_offset;  	id = block->pm4_bo_index[offset >> 2];  	if (block->reloc[id].bo) { @@ -963,8 +912,15 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)  	}  	/* find number of color buffer */ +	cb[0] = r600_context_reg_bo(ctx, R_028040_CB_COLOR0_BASE); +	cb[1] = r600_context_reg_bo(ctx, R_028044_CB_COLOR1_BASE); +	cb[2] = r600_context_reg_bo(ctx, R_028048_CB_COLOR2_BASE); +	cb[3] = r600_context_reg_bo(ctx, R_02804C_CB_COLOR3_BASE); +	cb[4] = r600_context_reg_bo(ctx, R_028050_CB_COLOR4_BASE); +	cb[5] = r600_context_reg_bo(ctx, R_028054_CB_COLOR5_BASE); +	cb[6] = r600_context_reg_bo(ctx, R_028058_CB_COLOR6_BASE); +	cb[7] = r600_context_reg_bo(ctx, R_02805C_CB_COLOR7_BASE);  	for (int i = 0; i < 8; i++) { -		cb[i] = r600_context_reg_bo(ctx, R600_GROUP_CONTEXT, R_028040_CB_COLOR0_BASE + (i << 2));  		if (cb[i]) {  			ndwords += 7;  		} @@ -973,12 +929,12 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)  	/* queries need some special values */  	if (ctx->num_query_running) {  		if (ctx->radeon->family >= CHIP_RV770) { -			r600_context_reg(ctx, R600_GROUP_CONTEXT, +			r600_context_reg(ctx,  					R_028D0C_DB_RENDER_CONTROL,  					S_028D0C_R700_PERFECT_ZPASS_COUNTS(1),  					S_028D0C_R700_PERFECT_ZPASS_COUNTS(1));  		} -		r600_context_reg(ctx, R600_GROUP_CONTEXT, +		r600_context_reg(ctx,  				R_028D10_DB_RENDER_OVERRIDE,  				S_028D10_NOOP_CULL_DISABLE(1),  				S_028D10_NOOP_CULL_DISABLE(1)); @@ -995,11 +951,11 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)  	}  	/* enough room to copy packet */ -	r600_context_group_emit_dirty(ctx, &ctx->groups[R600_GROUP_CONFIG]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[R600_GROUP_CONTEXT]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[R600_GROUP_ALU_CONST]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[R600_GROUP_RESOURCE]); -	r600_context_group_emit_dirty(ctx, &ctx->groups[R600_GROUP_SAMPLER]); +	for (int i = 0; i < ctx->nblocks; i++) { +		if (ctx->blocks[i]->status & R600_BLOCK_STATUS_DIRTY) { +			r600_context_block_emit_dirty(ctx, ctx->blocks[i]); +		} +	}  	/* draw packet */  	ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_INDEX_TYPE, 0); @@ -1047,7 +1003,7 @@ void r600_context_flush(struct r600_context *ctx)  	struct drm_radeon_cs drmib;  	struct drm_radeon_cs_chunk chunks[2];  	uint64_t chunk_array[2]; -	struct r600_group_block *block; +	struct r600_block *block;  	int r;  	if (!ctx->pm4_cdwords) @@ -1086,14 +1042,10 @@ void r600_context_flush(struct r600_context *ctx)  	/* set all valid group as dirty so they get reemited on  	 * next draw command  	 */ -	for (int i = 0; i < ctx->ngroups; i++) { -		for (int j = 0; j < ctx->groups[i].nblocks; j++) { -			/* mark enabled block as dirty */ -			block = &ctx->groups[i].blocks[j]; -			if (block->status & R600_BLOCK_STATUS_ENABLED) { -				ctx->pm4_dirty_cdwords += block->pm4_ndwords; -				block->status |= R600_BLOCK_STATUS_DIRTY; -			} +	for (int i = 0; i < ctx->nblocks; i++) { +		if (ctx->blocks[i]->status & R600_BLOCK_STATUS_ENABLED) { +			ctx->pm4_dirty_cdwords += ctx->blocks[i]->pm4_ndwords; +			ctx->blocks[i]->status |= R600_BLOCK_STATUS_DIRTY;  		}  	}  } | 
