mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
Pull in additional state setup from the DDX
This commit is contained in:
parent
8c27d99eb8
commit
530e3e389d
5 changed files with 366 additions and 5 deletions
|
|
@ -57,6 +57,13 @@ GLboolean r700InitChipObject(context_t *context)
|
|||
r700->pStateList = (ContextState*) MALLOC (sizeof(ContextState)*sizeof(R700_CHIP_CONTEXT)/sizeof(unsigned int));
|
||||
pStateListWork = r700->pStateList;
|
||||
|
||||
// misc
|
||||
LINK_STATES(TA_CNTL_AUX);
|
||||
LINK_STATES(VC_ENHANCE);
|
||||
LINK_STATES(SQ_DYN_GPR_CNTL_PS_FLUSH_REQ);
|
||||
LINK_STATES(DB_DEBUG);
|
||||
LINK_STATES(DB_WATERMARKS);
|
||||
|
||||
// DB
|
||||
LINK_STATES(DB_DEPTH_SIZE);
|
||||
LINK_STATES(DB_DEPTH_VIEW);
|
||||
|
|
@ -122,18 +129,26 @@ GLboolean r700InitChipObject(context_t *context)
|
|||
LINK_STATES(PA_CL_GB_HORZ_DISC_ADJ);
|
||||
|
||||
// CB
|
||||
LINK_STATES(CB_CLEAR_RED_R6XX);
|
||||
LINK_STATES(CB_CLEAR_GREEN_R6XX);
|
||||
LINK_STATES(CB_CLEAR_BLUE_R6XX);
|
||||
LINK_STATES(CB_CLEAR_ALPHA_R6XX);
|
||||
LINK_STATES(CB_TARGET_MASK);
|
||||
LINK_STATES(CB_SHADER_MASK);
|
||||
LINK_STATES(CB_BLEND_RED);
|
||||
LINK_STATES(CB_BLEND_GREEN);
|
||||
LINK_STATES(CB_BLEND_BLUE);
|
||||
LINK_STATES(CB_BLEND_ALPHA);
|
||||
LINK_STATES(CB_FOG_RED_R6XX);
|
||||
LINK_STATES(CB_FOG_GREEN_R6XX);
|
||||
LINK_STATES(CB_FOG_BLUE_R6XX);
|
||||
LINK_STATES(CB_SHADER_CONTROL);
|
||||
LINK_STATES(CB_COLOR_CONTROL);
|
||||
LINK_STATES(CB_CLRCMP_CONTROL);
|
||||
LINK_STATES(CB_CLRCMP_SRC);
|
||||
LINK_STATES(CB_CLRCMP_DST);
|
||||
LINK_STATES(CB_CLRCMP_MSK);
|
||||
LINK_STATES(CB_BLEND_CONTROL);
|
||||
|
||||
// SX
|
||||
LINK_STATES(SX_MISC);
|
||||
|
|
@ -145,6 +160,17 @@ GLboolean r700InitChipObject(context_t *context)
|
|||
LINK_STATES(VGT_INDX_OFFSET);
|
||||
LINK_STATES(VGT_MULTI_PRIM_IB_RESET_INDX);
|
||||
LINK_STATES(VGT_OUTPUT_PATH_CNTL);
|
||||
LINK_STATES(VGT_HOS_CNTL);
|
||||
LINK_STATES(VGT_HOS_MAX_TESS_LEVEL);
|
||||
LINK_STATES(VGT_HOS_MIN_TESS_LEVEL);
|
||||
LINK_STATES(VGT_HOS_REUSE_DEPTH);
|
||||
LINK_STATES(VGT_GROUP_PRIM_TYPE);
|
||||
LINK_STATES(VGT_GROUP_FIRST_DECR);
|
||||
LINK_STATES(VGT_GROUP_DECR);
|
||||
LINK_STATES(VGT_GROUP_VECT_0_CNTL);
|
||||
LINK_STATES(VGT_GROUP_VECT_1_CNTL);
|
||||
LINK_STATES(VGT_GROUP_VECT_0_FMT_CNTL);
|
||||
LINK_STATES(VGT_GROUP_VECT_1_FMT_CNTL);
|
||||
LINK_STATES(VGT_GS_MODE);
|
||||
LINK_STATES(VGT_PRIMITIVEID_EN);
|
||||
LINK_STATES(VGT_DMA_NUM_INSTANCES);
|
||||
|
|
@ -153,6 +179,8 @@ GLboolean r700InitChipObject(context_t *context)
|
|||
LINK_STATES(VGT_INSTANCE_STEP_RATE_1);
|
||||
LINK_STATES(VGT_STRMOUT_EN);
|
||||
LINK_STATES(VGT_REUSE_OFF);
|
||||
LINK_STATES(VGT_VTX_CNT_EN);
|
||||
LINK_STATES(VGT_STRMOUT_BUFFER_EN);
|
||||
|
||||
// SPI
|
||||
LINK_STATES(SPI_VS_OUT_ID_0);
|
||||
|
|
@ -172,6 +200,8 @@ GLboolean r700InitChipObject(context_t *context)
|
|||
LINK_STATES(SPI_INTERP_CONTROL_0);
|
||||
LINK_STATES(SPI_INPUT_Z);
|
||||
LINK_STATES(SPI_FOG_CNTL);
|
||||
LINK_STATES(SPI_FOG_FUNC_SCALE);
|
||||
LINK_STATES(SPI_FOG_FUNC_BIAS);
|
||||
|
||||
// SQ
|
||||
LINK_STATES(SQ_ESGS_RING_ITEMSIZE);
|
||||
|
|
@ -570,3 +600,23 @@ GLboolean r700SendViewportState(context_t *context, int id)
|
|||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
GLboolean r700SendSQConfig(context_t *context)
|
||||
{
|
||||
R700_CHIP_CONTEXT *r700 = R700_CONTEXT_STATES(context);
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
|
||||
BEGIN_BATCH_NO_AUTOSTATE(8);
|
||||
R600_OUT_BATCH_REGSEQ(SQ_CONFIG, 6);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_CONFIG.u32All);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_GPR_RESOURCE_MGMT_1.u32All);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_GPR_RESOURCE_MGMT_2.u32All);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_STACK_RESOURCE_MGMT_1.u32All);
|
||||
R600_OUT_BATCH(r700->sq_config.SQ_STACK_RESOURCE_MGMT_2.u32All);
|
||||
END_BATCH();
|
||||
COMMIT_BATCH();
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -247,6 +247,16 @@ typedef struct _FS_STATE_STRUCT
|
|||
union UINT_FLOAT SQ_PGM_CF_OFFSET_FS ; /* 0xA237 */
|
||||
} FS_STATE_STRUCT;
|
||||
|
||||
typedef struct _SQ_CONFIG_STRUCT
|
||||
{
|
||||
union UINT_FLOAT SQ_CONFIG ; /* 0x2300 */
|
||||
union UINT_FLOAT SQ_GPR_RESOURCE_MGMT_1 ; /* 0x2301 */
|
||||
union UINT_FLOAT SQ_GPR_RESOURCE_MGMT_2 ; /* 0x2302 */
|
||||
union UINT_FLOAT SQ_THREAD_RESOURCE_MGMT ; /* 0x2303 */
|
||||
union UINT_FLOAT SQ_STACK_RESOURCE_MGMT_1 ; /* 0x2304 */
|
||||
union UINT_FLOAT SQ_STACK_RESOURCE_MGMT_2 ; /* 0x2305 */
|
||||
} SQ_CONFIG_STRUCT;
|
||||
|
||||
typedef struct ContextState
|
||||
{
|
||||
unsigned int * puiValue;
|
||||
|
|
@ -256,6 +266,13 @@ typedef struct ContextState
|
|||
|
||||
typedef struct _R700_CHIP_CONTEXT
|
||||
{
|
||||
// misc
|
||||
union UINT_FLOAT TA_CNTL_AUX ; /* 0x2542 */
|
||||
union UINT_FLOAT VC_ENHANCE ; /* 0x25C5 */
|
||||
union UINT_FLOAT SQ_DYN_GPR_CNTL_PS_FLUSH_REQ; /* 0x2363 */
|
||||
union UINT_FLOAT DB_DEBUG ; /* 0x260C */
|
||||
union UINT_FLOAT DB_WATERMARKS ; /* 0x260E */
|
||||
|
||||
// DB
|
||||
union UINT_FLOAT DB_DEPTH_SIZE ; /* 0xA000 */
|
||||
union UINT_FLOAT DB_DEPTH_VIEW ; /* 0xA001 */
|
||||
|
|
@ -325,18 +342,26 @@ typedef struct _R700_CHIP_CONTEXT
|
|||
UCP_STATE_STRUCT ucp[R700_MAX_UCP];
|
||||
|
||||
// CB
|
||||
union UINT_FLOAT CB_CLEAR_RED_R6XX ; /* 0xA048 */
|
||||
union UINT_FLOAT CB_CLEAR_GREEN_R6XX ; /* 0xA049 */
|
||||
union UINT_FLOAT CB_CLEAR_BLUE_R6XX ; /* 0xA04A */
|
||||
union UINT_FLOAT CB_CLEAR_ALPHA_R6XX ; /* 0xA04B */
|
||||
union UINT_FLOAT CB_TARGET_MASK ; /* 0xA08E */
|
||||
union UINT_FLOAT CB_SHADER_MASK ; /* 0xA08F */
|
||||
union UINT_FLOAT CB_BLEND_RED ; /* 0xA105 */
|
||||
union UINT_FLOAT CB_BLEND_GREEN ; /* 0xA106 */
|
||||
union UINT_FLOAT CB_BLEND_BLUE ; /* 0xA107 */
|
||||
union UINT_FLOAT CB_BLEND_ALPHA ; /* 0xA108 */
|
||||
union UINT_FLOAT CB_FOG_RED_R6XX ; /* 0xA109 */
|
||||
union UINT_FLOAT CB_FOG_GREEN_R6XX ; /* 0xA10A */
|
||||
union UINT_FLOAT CB_FOG_BLUE_R6XX ; /* 0xA10B */
|
||||
union UINT_FLOAT CB_SHADER_CONTROL ; /* 0xA1E8 */
|
||||
union UINT_FLOAT CB_COLOR_CONTROL ; /* 0xA202 */
|
||||
union UINT_FLOAT CB_CLRCMP_CONTROL ; /* 0xA30C */
|
||||
union UINT_FLOAT CB_CLRCMP_SRC ; /* 0xA30D */
|
||||
union UINT_FLOAT CB_CLRCMP_DST ; /* 0xA30E */
|
||||
union UINT_FLOAT CB_CLRCMP_MSK ; /* 0xA30F */
|
||||
union UINT_FLOAT CB_BLEND_CONTROL ; /* 0xABD0 */
|
||||
RENDER_TARGET_STATE_STRUCT render_target[R700_MAX_RENDER_TARGETS];
|
||||
|
||||
// SX
|
||||
|
|
@ -349,6 +374,17 @@ typedef struct _R700_CHIP_CONTEXT
|
|||
union UINT_FLOAT VGT_INDX_OFFSET ; /* 0xA102 */
|
||||
union UINT_FLOAT VGT_MULTI_PRIM_IB_RESET_INDX; /* 0xA103 */
|
||||
union UINT_FLOAT VGT_OUTPUT_PATH_CNTL ; /* 0xA284 */
|
||||
union UINT_FLOAT VGT_HOS_CNTL ; /* 0xA285 */
|
||||
union UINT_FLOAT VGT_HOS_MAX_TESS_LEVEL ; /* 0xA286 */
|
||||
union UINT_FLOAT VGT_HOS_MIN_TESS_LEVEL ; /* 0xA287 */
|
||||
union UINT_FLOAT VGT_HOS_REUSE_DEPTH ; /* 0xA288 */
|
||||
union UINT_FLOAT VGT_GROUP_PRIM_TYPE ; /* 0xA289 */
|
||||
union UINT_FLOAT VGT_GROUP_FIRST_DECR ; /* 0xA28A */
|
||||
union UINT_FLOAT VGT_GROUP_DECR ; /* 0xA28B */
|
||||
union UINT_FLOAT VGT_GROUP_VECT_0_CNTL ; /* 0xA28C */
|
||||
union UINT_FLOAT VGT_GROUP_VECT_1_CNTL ; /* 0xA28D */
|
||||
union UINT_FLOAT VGT_GROUP_VECT_0_FMT_CNTL ; /* 0xA28E */
|
||||
union UINT_FLOAT VGT_GROUP_VECT_1_FMT_CNTL ; /* 0xA28F */
|
||||
union UINT_FLOAT VGT_GS_MODE ; /* 0xA290 */
|
||||
union UINT_FLOAT VGT_PRIMITIVEID_EN ; /* 0xA2A1 */
|
||||
union UINT_FLOAT VGT_DMA_NUM_INSTANCES ; /* 0xA2A2 */
|
||||
|
|
@ -357,6 +393,8 @@ typedef struct _R700_CHIP_CONTEXT
|
|||
union UINT_FLOAT VGT_INSTANCE_STEP_RATE_1 ; /* 0xA2A9 */
|
||||
union UINT_FLOAT VGT_STRMOUT_EN ; /* 0xA2AC */
|
||||
union UINT_FLOAT VGT_REUSE_OFF ; /* 0xA2AD */
|
||||
union UINT_FLOAT VGT_VTX_CNT_EN ; /* 0xA2AE */
|
||||
union UINT_FLOAT VGT_STRMOUT_BUFFER_EN ; /* 0xA2C8 */
|
||||
|
||||
// SPI
|
||||
union UINT_FLOAT SPI_VS_OUT_ID_0 ; /* 0xA185 */
|
||||
|
|
@ -376,6 +414,8 @@ typedef struct _R700_CHIP_CONTEXT
|
|||
union UINT_FLOAT SPI_INTERP_CONTROL_0 ; /* 0xA1B5 */
|
||||
union UINT_FLOAT SPI_INPUT_Z ; /* 0xA1B6 */
|
||||
union UINT_FLOAT SPI_FOG_CNTL ; /* 0xA1B7 */
|
||||
union UINT_FLOAT SPI_FOG_FUNC_SCALE ; /* 0xA1B8 */
|
||||
union UINT_FLOAT SPI_FOG_FUNC_BIAS ; /* 0xA1B9 */
|
||||
union UINT_FLOAT SQ_VTX_SEMANTIC[R700_MAX_SHADER_EXPORTS];
|
||||
union UINT_FLOAT SPI_PS_INPUT_CNTL[R700_MAX_SHADER_EXPORTS];
|
||||
|
||||
|
|
@ -386,6 +426,9 @@ typedef struct _R700_CHIP_CONTEXT
|
|||
ES_STATE_STRUCT es;
|
||||
PS_STATE_STRUCT fs;
|
||||
|
||||
// SQ CONFIG
|
||||
SQ_CONFIG_STRUCT sq_config;
|
||||
|
||||
// SQ
|
||||
union UINT_FLOAT SQ_ESGS_RING_ITEMSIZE ; /* 0xA22A */
|
||||
union UINT_FLOAT SQ_GSVS_RING_ITEMSIZE ; /* 0xA22B */
|
||||
|
|
|
|||
|
|
@ -51,6 +51,12 @@
|
|||
#define mmCP_COHER_BASE 0x217E
|
||||
#define mmCP_COHER_STATUS 0x217F
|
||||
|
||||
#define mmTA_CNTL_AUX 0x2542
|
||||
#define mmVC_ENHANCE 0x25C5
|
||||
#define mmSQ_DYN_GPR_CNTL_PS_FLUSH_REQ 0x2363
|
||||
#define mmDB_DEBUG 0x260C
|
||||
#define mmDB_WATERMARKS 0x260E
|
||||
|
||||
#define mmPA_CL_VPORT_XSCALE 0xA10F
|
||||
#define mmPA_CL_VPORT_XOFFSET 0xA110
|
||||
#define mmPA_CL_VPORT_YSCALE 0xA111
|
||||
|
|
@ -568,7 +574,6 @@
|
|||
#define mmSPI_FOG_FUNC_BIAS 0xA1B9
|
||||
|
||||
#define mmSX_MISC 0xA0D4
|
||||
|
||||
#define mmSX_ALPHA_TEST_CONTROL 0xA104
|
||||
#define mmSX_ALPHA_REF 0xA10E
|
||||
|
||||
|
|
@ -592,6 +597,10 @@
|
|||
#define mmDB_DEPTH_CONTROL 0xA200
|
||||
#define mmDB_ALPHA_TO_MASK 0xA351
|
||||
|
||||
#define mmCB_CLEAR_RED_R6XX 0xA048
|
||||
#define mmCB_CLEAR_GREEN_R6XX 0xA049
|
||||
#define mmCB_CLEAR_BLUE_R6XX 0xA04A
|
||||
#define mmCB_CLEAR_ALPHA_R6XX 0xA04B
|
||||
#define mmCB_BLEND_RED 0xA105
|
||||
#define mmCB_BLEND_GREEN 0xA106
|
||||
#define mmCB_BLEND_BLUE 0xA107
|
||||
|
|
|
|||
|
|
@ -256,6 +256,8 @@ static GLboolean r700RunRender(GLcontext * ctx,
|
|||
|
||||
r700SyncSurf(context); /* TODO : make it light. */
|
||||
|
||||
r700SendSQConfig(context);
|
||||
|
||||
r700UpdateShaders(ctx);
|
||||
|
||||
r700SetScissor(context);
|
||||
|
|
|
|||
|
|
@ -630,9 +630,6 @@ void r700SetScissor(context_t *context) //---------------
|
|||
y2 = rrb->height - 1;
|
||||
}
|
||||
|
||||
/* 4 clip rectangles */ /* TODO : set these clip rects according to context->currentDraw->numClipRects */
|
||||
r700->PA_SC_CLIPRECT_RULE.u32All = 0x0000FFFF;
|
||||
|
||||
/* window */
|
||||
SETbit(r700->PA_SC_WINDOW_SCISSOR_TL.u32All, WINDOW_OFFSET_DISABLE_bit);
|
||||
SETfield(r700->PA_SC_WINDOW_SCISSOR_TL.u32All, x1,
|
||||
|
|
@ -756,10 +753,18 @@ void r700SetDepthTarget(context_t *context)
|
|||
r700->DB_DEPTH_VIEW.u32All = 0;
|
||||
r700->DB_RENDER_CONTROL.u32All = 0;
|
||||
r700->DB_RENDER_OVERRIDE.u32All = 0;
|
||||
if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770)
|
||||
SETbit(r700->DB_RENDER_OVERRIDE.u32All, FORCE_SHADER_Z_ORDER_bit);
|
||||
SETfield(r700->DB_RENDER_OVERRIDE.u32All, FORCE_DISABLE, FORCE_HIZ_ENABLE_shift, FORCE_HIZ_ENABLE_mask);
|
||||
SETfield(r700->DB_RENDER_OVERRIDE.u32All, FORCE_DISABLE, FORCE_HIS_ENABLE0_shift, FORCE_HIS_ENABLE0_mask);
|
||||
SETfield(r700->DB_RENDER_OVERRIDE.u32All, FORCE_DISABLE, FORCE_HIS_ENABLE1_shift, FORCE_HIS_ENABLE1_mask);
|
||||
|
||||
r700->DB_ALPHA_TO_MASK.u32All = 0;
|
||||
SETfield(r700->DB_ALPHA_TO_MASK.u32All, 2, ALPHA_TO_MASK_OFFSET0_shift, ALPHA_TO_MASK_OFFSET0_mask);
|
||||
SETfield(r700->DB_ALPHA_TO_MASK.u32All, 2, ALPHA_TO_MASK_OFFSET1_shift, ALPHA_TO_MASK_OFFSET1_mask);
|
||||
SETfield(r700->DB_ALPHA_TO_MASK.u32All, 2, ALPHA_TO_MASK_OFFSET2_shift, ALPHA_TO_MASK_OFFSET2_mask);
|
||||
SETfield(r700->DB_ALPHA_TO_MASK.u32All, 2, ALPHA_TO_MASK_OFFSET3_shift, ALPHA_TO_MASK_OFFSET3_mask);
|
||||
|
||||
rrb = radeon_get_depthbuffer(&context->radeon);
|
||||
if (!rrb)
|
||||
return;
|
||||
|
|
@ -796,6 +801,195 @@ void r700SetDepthTarget(context_t *context)
|
|||
/* r700->DB_PREFETCH_LIMIT.bits.DEPTH_HEIGHT_TILE_MAX = (context->currentDraw->h >> 3) - 1; */ /* z buffer sie may much bigger than what need, so use actual used h. */
|
||||
}
|
||||
|
||||
static void r700InitSQConfig(GLcontext * ctx)
|
||||
{
|
||||
context_t *context = R700_CONTEXT(ctx);
|
||||
R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
|
||||
int ps_prio;
|
||||
int vs_prio;
|
||||
int gs_prio;
|
||||
int es_prio;
|
||||
int num_ps_gprs;
|
||||
int num_vs_gprs;
|
||||
int num_gs_gprs;
|
||||
int num_es_gprs;
|
||||
int num_temp_gprs;
|
||||
int num_ps_threads;
|
||||
int num_vs_threads;
|
||||
int num_gs_threads;
|
||||
int num_es_threads;
|
||||
int num_ps_stack_entries;
|
||||
int num_vs_stack_entries;
|
||||
int num_gs_stack_entries;
|
||||
int num_es_stack_entries;
|
||||
|
||||
// SQ
|
||||
ps_prio = 0;
|
||||
vs_prio = 1;
|
||||
gs_prio = 2;
|
||||
es_prio = 3;
|
||||
switch (context->radeon.radeonScreen->chip_family) {
|
||||
case CHIP_FAMILY_R600:
|
||||
num_ps_gprs = 192;
|
||||
num_vs_gprs = 56;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 136;
|
||||
num_vs_threads = 48;
|
||||
num_gs_threads = 4;
|
||||
num_es_threads = 4;
|
||||
num_ps_stack_entries = 128;
|
||||
num_vs_stack_entries = 128;
|
||||
num_gs_stack_entries = 0;
|
||||
num_es_stack_entries = 0;
|
||||
break;
|
||||
case CHIP_FAMILY_RV630:
|
||||
case CHIP_FAMILY_RV635:
|
||||
num_ps_gprs = 84;
|
||||
num_vs_gprs = 36;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 144;
|
||||
num_vs_threads = 40;
|
||||
num_gs_threads = 4;
|
||||
num_es_threads = 4;
|
||||
num_ps_stack_entries = 40;
|
||||
num_vs_stack_entries = 40;
|
||||
num_gs_stack_entries = 32;
|
||||
num_es_stack_entries = 16;
|
||||
break;
|
||||
case CHIP_FAMILY_RV610:
|
||||
case CHIP_FAMILY_RV620:
|
||||
case CHIP_FAMILY_RS780:
|
||||
default:
|
||||
num_ps_gprs = 84;
|
||||
num_vs_gprs = 36;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 136;
|
||||
num_vs_threads = 48;
|
||||
num_gs_threads = 4;
|
||||
num_es_threads = 4;
|
||||
num_ps_stack_entries = 40;
|
||||
num_vs_stack_entries = 40;
|
||||
num_gs_stack_entries = 32;
|
||||
num_es_stack_entries = 16;
|
||||
break;
|
||||
case CHIP_FAMILY_RV670:
|
||||
num_ps_gprs = 144;
|
||||
num_vs_gprs = 40;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 136;
|
||||
num_vs_threads = 48;
|
||||
num_gs_threads = 4;
|
||||
num_es_threads = 4;
|
||||
num_ps_stack_entries = 40;
|
||||
num_vs_stack_entries = 40;
|
||||
num_gs_stack_entries = 32;
|
||||
num_es_stack_entries = 16;
|
||||
break;
|
||||
case CHIP_FAMILY_RV770:
|
||||
num_ps_gprs = 192;
|
||||
num_vs_gprs = 56;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 188;
|
||||
num_vs_threads = 60;
|
||||
num_gs_threads = 0;
|
||||
num_es_threads = 0;
|
||||
num_ps_stack_entries = 256;
|
||||
num_vs_stack_entries = 256;
|
||||
num_gs_stack_entries = 0;
|
||||
num_es_stack_entries = 0;
|
||||
break;
|
||||
case CHIP_FAMILY_RV730:
|
||||
//case CHIP_FAMILY_RV740:
|
||||
num_ps_gprs = 84;
|
||||
num_vs_gprs = 36;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 188;
|
||||
num_vs_threads = 60;
|
||||
num_gs_threads = 0;
|
||||
num_es_threads = 0;
|
||||
num_ps_stack_entries = 128;
|
||||
num_vs_stack_entries = 128;
|
||||
num_gs_stack_entries = 0;
|
||||
num_es_stack_entries = 0;
|
||||
break;
|
||||
case CHIP_FAMILY_RV710:
|
||||
num_ps_gprs = 192;
|
||||
num_vs_gprs = 56;
|
||||
num_temp_gprs = 4;
|
||||
num_gs_gprs = 0;
|
||||
num_es_gprs = 0;
|
||||
num_ps_threads = 144;
|
||||
num_vs_threads = 48;
|
||||
num_gs_threads = 0;
|
||||
num_es_threads = 0;
|
||||
num_ps_stack_entries = 128;
|
||||
num_vs_stack_entries = 128;
|
||||
num_gs_stack_entries = 0;
|
||||
num_es_stack_entries = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
r700->sq_config.SQ_CONFIG.u32All = 0;
|
||||
if ((context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV610) ||
|
||||
(context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV620) ||
|
||||
(context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RS780) ||
|
||||
(context->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV710))
|
||||
CLEARbit(r700->sq_config.SQ_CONFIG.u32All, VC_ENABLE_bit);
|
||||
else
|
||||
SETbit(r700->sq_config.SQ_CONFIG.u32All, VC_ENABLE_bit);
|
||||
SETbit(r700->sq_config.SQ_CONFIG.u32All, DX9_CONSTS_bit);
|
||||
SETbit(r700->sq_config.SQ_CONFIG.u32All, ALU_INST_PREFER_VECTOR_bit);
|
||||
SETfield(r700->sq_config.SQ_CONFIG.u32All, ps_prio, PS_PRIO_shift, PS_PRIO_mask);
|
||||
SETfield(r700->sq_config.SQ_CONFIG.u32All, ps_prio, VS_PRIO_shift, VS_PRIO_mask);
|
||||
SETfield(r700->sq_config.SQ_CONFIG.u32All, ps_prio, GS_PRIO_shift, GS_PRIO_mask);
|
||||
SETfield(r700->sq_config.SQ_CONFIG.u32All, ps_prio, ES_PRIO_shift, ES_PRIO_mask);
|
||||
|
||||
r700->sq_config.SQ_GPR_RESOURCE_MGMT_1.u32All = 0;
|
||||
SETfield(r700->sq_config.SQ_GPR_RESOURCE_MGMT_1.u32All, num_ps_gprs, NUM_PS_GPRS_shift, NUM_PS_GPRS_mask);
|
||||
SETfield(r700->sq_config.SQ_GPR_RESOURCE_MGMT_1.u32All, num_vs_gprs, NUM_VS_GPRS_shift, NUM_VS_GPRS_mask);
|
||||
SETfield(r700->sq_config.SQ_GPR_RESOURCE_MGMT_1.u32All, num_temp_gprs,
|
||||
NUM_CLAUSE_TEMP_GPRS_shift, NUM_CLAUSE_TEMP_GPRS_mask);
|
||||
|
||||
r700->sq_config.SQ_GPR_RESOURCE_MGMT_2.u32All = 0;
|
||||
SETfield(r700->sq_config.SQ_GPR_RESOURCE_MGMT_2.u32All, num_gs_gprs, NUM_GS_GPRS_shift, NUM_GS_GPRS_mask);
|
||||
SETfield(r700->sq_config.SQ_GPR_RESOURCE_MGMT_2.u32All, num_es_gprs, NUM_ES_GPRS_shift, NUM_ES_GPRS_mask);
|
||||
|
||||
r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All = 0;
|
||||
SETfield(r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All, num_ps_threads,
|
||||
NUM_PS_THREADS_shift, NUM_PS_THREADS_mask);
|
||||
SETfield(r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All, num_vs_threads,
|
||||
NUM_VS_THREADS_shift, NUM_VS_THREADS_mask);
|
||||
SETfield(r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All, num_gs_threads,
|
||||
NUM_GS_THREADS_shift, NUM_GS_THREADS_mask);
|
||||
SETfield(r700->sq_config.SQ_THREAD_RESOURCE_MGMT.u32All, num_es_threads,
|
||||
NUM_ES_THREADS_shift, NUM_ES_THREADS_mask);
|
||||
|
||||
r700->sq_config.SQ_STACK_RESOURCE_MGMT_1.u32All = 0;
|
||||
SETfield(r700->sq_config.SQ_STACK_RESOURCE_MGMT_1.u32All, num_ps_stack_entries,
|
||||
NUM_PS_STACK_ENTRIES_shift, NUM_PS_STACK_ENTRIES_mask);
|
||||
SETfield(r700->sq_config.SQ_STACK_RESOURCE_MGMT_1.u32All, num_vs_stack_entries,
|
||||
NUM_VS_STACK_ENTRIES_shift, NUM_VS_STACK_ENTRIES_mask);
|
||||
|
||||
r700->sq_config.SQ_STACK_RESOURCE_MGMT_2.u32All = 0;
|
||||
SETfield(r700->sq_config.SQ_STACK_RESOURCE_MGMT_2.u32All, num_gs_stack_entries,
|
||||
NUM_GS_STACK_ENTRIES_shift, NUM_GS_STACK_ENTRIES_mask);
|
||||
SETfield(r700->sq_config.SQ_STACK_RESOURCE_MGMT_2.u32All, num_es_stack_entries,
|
||||
NUM_ES_STACK_ENTRIES_shift, NUM_ES_STACK_ENTRIES_mask);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate initial hardware state and register state functions.
|
||||
* Assumes that the command buffer and state atoms have been
|
||||
|
|
@ -807,6 +1001,25 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
|
||||
R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
|
||||
|
||||
r700->TA_CNTL_AUX.u32All = 0;
|
||||
SETfield(r700->TA_CNTL_AUX.u32All, 28, TD_FIFO_CREDIT_shift, TD_FIFO_CREDIT_mask);
|
||||
r700->VC_ENHANCE.u32All = 0;
|
||||
r700->DB_WATERMARKS.u32All = 0;
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 4, DEPTH_FREE_shift, DEPTH_FREE_mask);
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 16, DEPTH_FLUSH_shift, DEPTH_FLUSH_mask);
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 0, FORCE_SUMMARIZE_shift, FORCE_SUMMARIZE_mask);
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 4, DEPTH_PENDING_FREE_shift, DEPTH_PENDING_FREE_mask);
|
||||
r700->SQ_DYN_GPR_CNTL_PS_FLUSH_REQ.u32All = 0;
|
||||
if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770) {
|
||||
SETfield(r700->TA_CNTL_AUX.u32All, 3, GRADIENT_CREDIT_shift, GRADIENT_CREDIT_mask);
|
||||
r700->DB_DEBUG.u32All = 0x82000000;
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 16, DEPTH_CACHELINE_FREE_shift, DEPTH_CACHELINE_FREE_mask);
|
||||
} else {
|
||||
SETfield(r700->TA_CNTL_AUX.u32All, 2, GRADIENT_CREDIT_shift, GRADIENT_CREDIT_mask);
|
||||
SETfield(r700->DB_WATERMARKS.u32All, 4, DEPTH_CACHELINE_FREE_shift, DEPTH_CACHELINE_FREE_mask);
|
||||
SETbit(r700->SQ_DYN_GPR_CNTL_PS_FLUSH_REQ.u32All, VS_PC_LIMIT_ENABLE_bit);
|
||||
}
|
||||
|
||||
/* Turn off vgt reuse */
|
||||
r700->VGT_REUSE_OFF.u32All = 0;
|
||||
SETbit(r700->VGT_REUSE_OFF.u32All, REUSE_OFF_bit);
|
||||
|
|
@ -823,7 +1036,7 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
CLEARfield(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_FUNC_mask);
|
||||
CLEARbit(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_TEST_ENABLE_bit);
|
||||
|
||||
/* defualt shader connections. */
|
||||
/* default shader connections. */
|
||||
r700->SPI_VS_OUT_ID_0.u32All = 0x03020100;
|
||||
r700->SPI_VS_OUT_ID_1.u32All = 0x07060504;
|
||||
|
||||
|
|
@ -831,6 +1044,10 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
r700->SPI_PS_INPUT_CNTL[1].u32All = 0x00000801;
|
||||
r700->SPI_PS_INPUT_CNTL[2].u32All = 0x00000802;
|
||||
|
||||
r700->SPI_THREAD_GROUPING.u32All = 0;
|
||||
if (context->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV770)
|
||||
SETfield(r700->SPI_THREAD_GROUPING.u32All, 1, PS_GROUPING_shift, PS_GROUPING_mask);
|
||||
|
||||
SETfield(r700->CB_COLOR_CONTROL.u32All, 0xCC, ROP3_shift, ROP3_mask);
|
||||
CLEARbit(r700->CB_COLOR_CONTROL.u32All, PER_MRT_BLEND_bit);
|
||||
|
||||
|
|
@ -853,6 +1070,25 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
((RADEONDRIPtr)(context->radeon.radeonScreen->driScreen->pDevPriv))->height,
|
||||
PA_SC_SCREEN_SCISSOR_BR__BR_Y_shift, PA_SC_SCREEN_SCISSOR_BR__BR_Y_mask);
|
||||
|
||||
/* 4 clip rectangles */ /* TODO : set these clip rects according to context->currentDraw->numClipRects */
|
||||
r700->PA_SC_CLIPRECT_RULE.u32All = 0;
|
||||
SETfield(r700->PA_SC_CLIPRECT_RULE.u32All, CLIP_RULE_mask, CLIP_RULE_shift, CLIP_RULE_mask);
|
||||
|
||||
if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770)
|
||||
r700->PA_SC_EDGERULE.u32All = 0;
|
||||
else
|
||||
r700->PA_SC_EDGERULE.u32All = 0xAAAAAAAA;
|
||||
|
||||
if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770) {
|
||||
r700->PA_SC_MODE_CNTL.u32All = 0;
|
||||
SETbit(r700->PA_SC_MODE_CNTL.u32All, WALK_ORDER_ENABLE_bit);
|
||||
SETbit(r700->PA_SC_MODE_CNTL.u32All, FORCE_EOV_CNTDWN_ENABLE_bit);
|
||||
} else {
|
||||
r700->PA_SC_MODE_CNTL.u32All = 0x00500000;
|
||||
SETbit(r700->PA_SC_MODE_CNTL.u32All, FORCE_EOV_REZ_ENABLE_bit);
|
||||
SETbit(r700->PA_SC_MODE_CNTL.u32All, FORCE_EOV_CNTDWN_ENABLE_bit);
|
||||
}
|
||||
|
||||
/* Do scale XY and Z by 1/W0. */
|
||||
r700->bEnablePerspective = GL_TRUE;
|
||||
CLEARbit(r700->PA_CL_VTE_CNTL.u32All, VTX_XY_FMT_bit);
|
||||
|
|
@ -878,6 +1114,10 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
/* Set up line control */
|
||||
SETfield(r700->PA_SU_LINE_CNTL.u32All, 0x8,
|
||||
PA_SU_LINE_CNTL__WIDTH_shift, PA_SU_LINE_CNTL__WIDTH_mask);
|
||||
SETfield(r700->PA_SU_LINE_CNTL.u32All, 0x2,
|
||||
PA_SU_VTX_CNTL__ROUND_MODE_shift, PA_SU_VTX_CNTL__ROUND_MODE_mask);
|
||||
SETfield(r700->PA_SU_LINE_CNTL.u32All, 0x5,
|
||||
QUANT_MODE_shift, QUANT_MODE_mask);
|
||||
|
||||
r700->PA_SC_LINE_CNTL.u32All = 0;
|
||||
CLEARbit(r700->PA_SC_LINE_CNTL.u32All, EXPAND_LINE_WIDTH_bit);
|
||||
|
|
@ -896,6 +1136,22 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
r700->PA_CL_GB_HORZ_CLIP_ADJ.u32All = 0x3F800000;
|
||||
r700->PA_CL_GB_HORZ_DISC_ADJ.u32All = 0x3F800000;
|
||||
|
||||
/* CB */
|
||||
r700->CB_CLEAR_RED_R6XX.f32All = 1.0; //r6xx only
|
||||
r700->CB_CLEAR_GREEN_R6XX.f32All = 0.0; //r6xx only
|
||||
r700->CB_CLEAR_BLUE_R6XX.f32All = 1.0; //r6xx only
|
||||
r700->CB_CLEAR_ALPHA_R6XX.f32All = 1.0; //r6xx only
|
||||
r700->CB_FOG_RED_R6XX.u32All = 0; //r6xx only
|
||||
r700->CB_FOG_GREEN_R6XX.u32All = 0; //r6xx only
|
||||
r700->CB_FOG_BLUE_R6XX.u32All = 0; //r6xx only
|
||||
|
||||
r700->CB_BLEND_RED.u32All = 0;
|
||||
r700->CB_BLEND_GREEN.u32All = 0;
|
||||
r700->CB_BLEND_BLUE.u32All = 0;
|
||||
r700->CB_BLEND_ALPHA.u32All = 0;
|
||||
|
||||
r700->CB_BLEND_CONTROL.u32All = 0;
|
||||
|
||||
/* Disable color compares */
|
||||
SETfield(r700->CB_CLRCMP_CONTROL.u32All, CLRCMP_DRAW_ALWAYS,
|
||||
CLRCMP_FCN_SRC_shift, CLRCMP_FCN_SRC_mask);
|
||||
|
|
@ -923,6 +1179,7 @@ void r700InitState(GLcontext * ctx) //-------------------
|
|||
|
||||
r700->SX_MISC.u32All = 0;
|
||||
|
||||
r700InitSQConfig(ctx);
|
||||
}
|
||||
|
||||
void r700InitStateFuncs(struct dd_function_table *functions) //-----------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue