⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radeon_state_init.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
   rmesa->hw.fog.cmd[FOG_CMD_0] =       cmdvec( RADEON_VS_FOG_PARAM_ADDR, 1, 4 );   rmesa->hw.glt.cmd[GLT_CMD_0] =       cmdvec( RADEON_VS_GLOBAL_AMBIENT_ADDR, 1, 4 );   rmesa->hw.eye.cmd[EYE_CMD_0] =       cmdvec( RADEON_VS_EYE_VECTOR_ADDR, 1, 4 );   for (i = 0 ; i < 6; i++) {      rmesa->hw.mat[i].cmd[MAT_CMD_0] = 	 cmdvec( RADEON_VS_MATRIX_0_ADDR + i*4, 1, 16);   }   for (i = 0 ; i < 8; i++) {      rmesa->hw.lit[i].cmd[LIT_CMD_0] = 	 cmdvec( RADEON_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 );      rmesa->hw.lit[i].cmd[LIT_CMD_1] = 	 cmdscl( RADEON_SS_LIGHT_DCD_ADDR + i, 8, 6 );   }   for (i = 0 ; i < 6; i++) {      rmesa->hw.ucp[i].cmd[UCP_CMD_0] = 	 cmdvec( RADEON_VS_UCP_ADDR + i, 1, 4 );   }   rmesa->last_ReallyEnabled = -1;   /* Initial Harware state:    */   rmesa->hw.ctx.cmd[CTX_PP_MISC] = (RADEON_ALPHA_TEST_PASS |				     RADEON_CHROMA_FUNC_FAIL |				     RADEON_CHROMA_KEY_NEAREST |				     RADEON_SHADOW_FUNC_EQUAL |				     RADEON_SHADOW_PASS_1 /*|				     RADEON_RIGHT_HAND_CUBE_OGL */);   rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (RADEON_FOG_VERTEX |					  /* this bit unused for vertex fog */					  RADEON_FOG_USE_DEPTH);   rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000;   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (RADEON_COMB_FCN_ADD_CLAMP |					    RADEON_SRC_BLEND_GL_ONE |					    RADEON_DST_BLEND_GL_ZERO );   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] =      rmesa->radeonScreen->depthOffset + rmesa->radeonScreen->fbLocation;   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] =       ((rmesa->radeonScreen->depthPitch &	RADEON_DEPTHPITCH_MASK) |       RADEON_DEPTH_ENDIAN_NO_SWAP);          if (rmesa->using_hyperz)       rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= RADEON_DEPTH_HYPERZ;   rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (depth_fmt |					       RADEON_Z_TEST_LESS |					       RADEON_STENCIL_TEST_ALWAYS |					       RADEON_STENCIL_FAIL_KEEP |					       RADEON_STENCIL_ZPASS_KEEP |					       RADEON_STENCIL_ZFAIL_KEEP |					       RADEON_Z_WRITE_ENABLE);   if (rmesa->using_hyperz) {       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_COMPRESSION_ENABLE |						   RADEON_Z_DECOMPRESSION_ENABLE;      if (rmesa->radeonScreen->chip_flags & RADEON_CHIPSET_TCL) {	 /* works for q3, but slight rendering errors with glxgears ? *//*	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/	 /* need this otherwise get lots of lockups with q3 ??? */	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_FORCE_Z_DIRTY;      }    }   rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (RADEON_SCISSOR_ENABLE |				     RADEON_ANTI_ALIAS_NONE);   rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] = (RADEON_PLANE_MASK_ENABLE |				       color_fmt |				       RADEON_ZBLOCK16);   switch ( driQueryOptioni( &rmesa->optionCache, "dither_mode" ) ) {   case DRI_CONF_DITHER_XERRORDIFFRESET:      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= RADEON_DITHER_INIT;      break;   case DRI_CONF_DITHER_ORDERED:      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= RADEON_SCALE_DITHER_ENABLE;      break;   }   if ( driQueryOptioni( &rmesa->optionCache, "round_mode" ) ==	DRI_CONF_ROUND_ROUND )      rmesa->state.color.roundEnable = RADEON_ROUND_ENABLE;   else      rmesa->state.color.roundEnable = 0;   if ( driQueryOptioni (&rmesa->optionCache, "color_reduction" ) ==	DRI_CONF_COLOR_REDUCTION_DITHER )      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= RADEON_DITHER_ENABLE;   else      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->state.color.roundEnable;   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((drawOffset +					       rmesa->radeonScreen->fbLocation)					      & RADEON_COLOROFFSET_MASK);   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((drawPitch &					      RADEON_COLORPITCH_MASK) |					     RADEON_COLOR_ENDIAN_NO_SWAP);   /* (fixed size) sarea is initialized to zero afaics so can omit version check. Phew! */   if (rmesa->sarea->tiling_enabled) {      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= RADEON_COLOR_TILE_ENABLE;   }   rmesa->hw.set.cmd[SET_SE_CNTL] = (RADEON_FFACE_CULL_CCW |				     RADEON_BFACE_SOLID |				     RADEON_FFACE_SOLID |/*  			     RADEON_BADVTX_CULL_DISABLE | */				     RADEON_FLAT_SHADE_VTX_LAST |				     RADEON_DIFFUSE_SHADE_GOURAUD |				     RADEON_ALPHA_SHADE_GOURAUD |				     RADEON_SPECULAR_SHADE_GOURAUD |				     RADEON_FOG_SHADE_GOURAUD |				     RADEON_VPORT_XY_XFORM_ENABLE |				     RADEON_VPORT_Z_XFORM_ENABLE |				     RADEON_VTX_PIX_CENTER_OGL |				     RADEON_ROUND_MODE_TRUNC |				     RADEON_ROUND_PREC_8TH_PIX);   rmesa->hw.set.cmd[SET_SE_CNTL_STATUS] =#ifdef MESA_BIG_ENDIAN					    RADEON_VC_32BIT_SWAP;#else  					    RADEON_VC_NO_SWAP;#endif   if (!(rmesa->radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {     rmesa->hw.set.cmd[SET_SE_CNTL_STATUS] |= RADEON_TCL_BYPASS;   }   rmesa->hw.set.cmd[SET_SE_COORDFMT] = (      RADEON_VTX_W0_IS_NOT_1_OVER_W0 |      RADEON_TEX1_W_ROUTING_USE_Q1);   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =       ((0 << RADEON_LINE_CURRENT_PTR_SHIFT) |       (1 << RADEON_LINE_CURRENT_COUNT_SHIFT));   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =       ((0x00 << RADEON_STENCIL_REF_SHIFT) |       (0xff << RADEON_STENCIL_MASK_SHIFT) |       (0xff << RADEON_STENCIL_WRITEMASK_SHIFT));   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = RADEON_ROP_COPY;   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;   rmesa->hw.msc.cmd[MSC_RE_MISC] =       ((0 << RADEON_STIPPLE_X_OFFSET_SHIFT) |       (0 << RADEON_STIPPLE_Y_OFFSET_SHIFT) |       RADEON_STIPPLE_BIG_BIT_ORDER);   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE]  = 0x00000000;   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000;   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE]  = 0x00000000;   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000;   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE]  = 0x00000000;   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000;   for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) {      rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = RADEON_BORDER_MODE_OGL;      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] = 	  (RADEON_TXFORMAT_ENDIAN_NO_SWAP |	   RADEON_TXFORMAT_PERSPECTIVE_ENABLE |	   (i << 24) | /* This is one of RADEON_TXFORMAT_ST_ROUTE_STQ[012] */	   (2 << RADEON_TXFORMAT_WIDTH_SHIFT) |	   (2 << RADEON_TXFORMAT_HEIGHT_SHIFT));      /* Initialize the texture offset to the start of the card texture heap */      rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;      rmesa->hw.tex[i].cmd[TEX_PP_TXCBLEND] =  	  (RADEON_COLOR_ARG_A_ZERO |	   RADEON_COLOR_ARG_B_ZERO |	   RADEON_COLOR_ARG_C_CURRENT_COLOR |	   RADEON_BLEND_CTL_ADD |	   RADEON_SCALE_1X |	   RADEON_CLAMP_TX);      rmesa->hw.tex[i].cmd[TEX_PP_TXABLEND] = 	  (RADEON_ALPHA_ARG_A_ZERO |	   RADEON_ALPHA_ARG_B_ZERO |	   RADEON_ALPHA_ARG_C_CURRENT_ALPHA |	   RADEON_BLEND_CTL_ADD |	   RADEON_SCALE_1X |	   RADEON_CLAMP_TX);      rmesa->hw.tex[i].cmd[TEX_PP_TFACTOR] = 0;      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_0] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_1] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_2] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_3] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_4] =	  rmesa->radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];   }   /* Can only add ST1 at the time of doing some multitex but can keep    * it after that.  Errors if DIFFUSE is missing.    */   rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] =       (RADEON_TCL_VTX_Z0 |       RADEON_TCL_VTX_W0 |       RADEON_TCL_VTX_PK_DIFFUSE	 );	/* need to keep this uptodate */						      rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXSEL] =      ( RADEON_TCL_COMPUTE_XYZW 	|	(RADEON_TCL_TEX_INPUT_TEX_0 << RADEON_TCL_TEX_0_OUTPUT_SHIFT) |	(RADEON_TCL_TEX_INPUT_TEX_1 << RADEON_TCL_TEX_1_OUTPUT_SHIFT) |	(RADEON_TCL_TEX_INPUT_TEX_2 << RADEON_TCL_TEX_2_OUTPUT_SHIFT));   /* XXX */   rmesa->hw.tcl.cmd[TCL_MATRIX_SELECT_0] =       ((MODEL << RADEON_MODELVIEW_0_SHIFT) |       (MODEL_IT << RADEON_IT_MODELVIEW_0_SHIFT));   rmesa->hw.tcl.cmd[TCL_MATRIX_SELECT_1] =       ((MODEL_PROJ << RADEON_MODELPROJECT_0_SHIFT) |       (TEXMAT_0 << RADEON_TEXMAT_0_SHIFT) |       (TEXMAT_1 << RADEON_TEXMAT_1_SHIFT) |       (TEXMAT_2 << RADEON_TEXMAT_2_SHIFT));   rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =       (RADEON_UCP_IN_CLIP_SPACE |       RADEON_CULL_FRONT_IS_CCW);   rmesa->hw.tcl.cmd[TCL_TEXTURE_PROC_CTL] = 0;    rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL] =       (RADEON_SPECULAR_LIGHTS |       RADEON_DIFFUSE_SPECULAR_COMBINE |       RADEON_LOCAL_LIGHT_VEC_GL |       (RADEON_LM_SOURCE_STATE_MULT << RADEON_EMISSIVE_SOURCE_SHIFT) |       (RADEON_LM_SOURCE_STATE_MULT << RADEON_AMBIENT_SOURCE_SHIFT) |       (RADEON_LM_SOURCE_STATE_MULT << RADEON_DIFFUSE_SOURCE_SHIFT) |       (RADEON_LM_SOURCE_STATE_MULT << RADEON_SPECULAR_SOURCE_SHIFT));   for (i = 0 ; i < 8; i++) {      struct gl_light *l = &ctx->Light.Light[i];      GLenum p = GL_LIGHT0 + i;      *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX;      ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient );      ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse );      ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular );      ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL );      ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL );      ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent );      ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff );      ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION,			   &l->ConstantAttenuation );      ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION, 			   &l->LinearAttenuation );      ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION, 		     &l->QuadraticAttenuation );      *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0;   }   ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT, 			     ctx->Light.Model.Ambient );   TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx );   for (i = 0 ; i < 6; i++) {      ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL );   }   ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL );   ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );   ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );   ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );   ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );   ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );      rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE;   rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE;   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE;   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE;   rmesa->hw.eye.cmd[EYE_X] = 0;   rmesa->hw.eye.cmd[EYE_Y] = 0;   rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;   rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;      rmesa->hw.all_dirty = GL_TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -