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

📄 r200_state_init.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 3 页
字号:
   }   rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK * 			driQueryOptionf (&rmesa->optionCache,"texture_blend_quality");   rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0;   rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW |				     R200_BFACE_SOLID |				     R200_FFACE_SOLID |				     R200_FLAT_SHADE_VTX_LAST |				     R200_DIFFUSE_SHADE_GOURAUD |				     R200_ALPHA_SHADE_GOURAUD |				     R200_SPECULAR_SHADE_GOURAUD |				     R200_FOG_SHADE_GOURAUD |				     R200_DISC_FOG_SHADE_GOURAUD |				     R200_VTX_PIX_CENTER_OGL |				     R200_ROUND_MODE_TRUNC |				     R200_ROUND_PREC_8TH_PIX);   rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE |				     R200_SCISSOR_ENABLE);   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =       ((0 << R200_LINE_CURRENT_PTR_SHIFT) |       (1 << R200_LINE_CURRENT_COUNT_SHIFT));   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =       ((0x00 << R200_STENCIL_REF_SHIFT) |       (0xff << R200_STENCIL_MASK_SHIFT) |       (0xff << R200_STENCIL_WRITEMASK_SHIFT));   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY;   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;   rmesa->hw.tam.cmd[TAM_DEBUG3] = 0;   rmesa->hw.msc.cmd[MSC_RE_MISC] =       ((0 << R200_STIPPLE_X_OFFSET_SHIFT) |       (0 << R200_STIPPLE_Y_OFFSET_SHIFT) |       R200_STIPPLE_BIG_BIT_ORDER);   rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0;   rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0;   rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0;   rmesa->hw.cst.cmd[CST_RE_SCISSOR_TL_0] = 0;   rmesa->hw.cst.cmd[CST_RE_SCISSOR_BR_0] = 0;   rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] =#ifdef MESA_BIG_ENDIAN						R200_VC_32BIT_SWAP;#else						R200_VC_NO_SWAP;#endif   if (!(rmesa->r200Screen->chip_flags & RADEON_CHIPSET_TCL)) {      /* Bypass TCL */      rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8);   }   rmesa->hw.cst.cmd[CST_RE_POINTSIZE] =      (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10;   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] =      (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT);   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] =      (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) |      (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT);   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] =      (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) |      (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) |      (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) |      (0x09 << R200_VTX_TEX_3_ADDR__SHIFT);   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] =      (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) |      (0x0B << R200_VTX_TEX_5_ADDR__SHIFT);     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] = R200_BORDER_MODE_OGL;      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] =          ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) |  /* <-- note i */          (2 << R200_TXFORMAT_WIDTH_SHIFT) |          (2 << R200_TXFORMAT_HEIGHT_SHIFT));      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =         (/* R200_TEXCOORD_PROJ | */          0x100000);	/* Small default bias */      if (rmesa->r200Screen->drmSupportsFragShader) {	 rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =	     rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];	 rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0;	 rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0;      }      else {	  rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_OLDDRM] =	     rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];     }      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] =         rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] =         rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] =         rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] =         rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] =         rmesa->r200Screen->texOffset[RADEON_LOCAL_TEX_HEAP];      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] =         (R200_TXC_ARG_A_ZERO |          R200_TXC_ARG_B_ZERO |          R200_TXC_ARG_C_DIFFUSE_COLOR |          R200_TXC_OP_MADD);      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] =         ((i << R200_TXC_TFACTOR_SEL_SHIFT) |          R200_TXC_SCALE_1X |          R200_TXC_CLAMP_0_1 |          R200_TXC_OUTPUT_REG_R0);      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] =         (R200_TXA_ARG_A_ZERO |          R200_TXA_ARG_B_ZERO |          R200_TXA_ARG_C_DIFFUSE_ALPHA |          R200_TXA_OP_MADD);      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] =         ((i << R200_TXA_TFACTOR_SEL_SHIFT) |          R200_TXA_SCALE_1X |          R200_TXA_CLAMP_0_1 |          R200_TXA_OUTPUT_REG_R0);   }   rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0;   rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0;   rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0;   rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0;   rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0;   rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0;   rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] =       (R200_VAP_TCL_ENABLE |        (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT));   rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] =       (R200_VPORT_X_SCALE_ENA |       R200_VPORT_Y_SCALE_ENA |       R200_VPORT_Z_SCALE_ENA |       R200_VPORT_X_OFFSET_ENA |       R200_VPORT_Y_OFFSET_ENA |       R200_VPORT_Z_OFFSET_ENA |/* FIXME: Turn on for tex rect only */       R200_VTX_ST_DENORMALIZED |         R200_VTX_W0_FMT);    rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0;   rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0;   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] =       ((R200_VTX_Z0 | R200_VTX_W0 |       (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT)));	   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0;   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW);   rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE;						      /* Matrix selection */   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] =       (R200_MTX_MV << R200_MODELVIEW_0_SHIFT);      rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] =        (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT);   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] =       (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT);   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] =       ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) |       (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) |       (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) |       (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT));   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] =       ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) |       (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT));   /* General TCL state */   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] =       (R200_SPECULAR_LIGHTS |       R200_DIFFUSE_SPECULAR_COMBINE |       R200_LOCAL_LIGHT_VEC_GL |       R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT |       R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT);   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] =       ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) |       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT));    rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0;   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0;   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0;      rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =       (R200_UCP_IN_CLIP_SPACE |       R200_CULL_FRONT_IS_CCW);   /* Texgen/Texmat state */   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff;   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] =       ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) |       (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) |       (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) |       (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) |       (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) |       (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT));    rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0;    rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] =        ((0 << R200_TEXGEN_0_INPUT_SHIFT) |       (1 << R200_TEXGEN_1_INPUT_SHIFT) |       (2 << R200_TEXGEN_2_INPUT_SHIFT) |       (3 << R200_TEXGEN_3_INPUT_SHIFT) |       (4 << R200_TEXGEN_4_INPUT_SHIFT) |       (5 << R200_TEXGEN_5_INPUT_SHIFT));    rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0;   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.spr.cmd[SPR_POINT_SPRITE_CNTL] =      R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST;   /* ptp_eye is presumably used to calculate the attenuation wrt a different      location? In any case, since point attenuation triggers _needeyecoords,      it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC      isn't set */   rmesa->hw.ptp.cmd[PTP_EYE_X] = 0;   rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0;   rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */   rmesa->hw.ptp.cmd[PTP_EYE_3] = 0;   /* no idea what the ptp_vport_scale values are good for, except the      PTSIZE one - hopefully doesn't matter */   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0;   rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0;   rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0;   rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE;   rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */   rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0;   rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0;   r200LightingSpaceChange( ctx );   rmesa->hw.all_dirty = GL_TRUE;}

⌨️ 快捷键说明

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