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

📄 i830_state.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
    case GL_DITHER:      I830_STATECHANGE(i830, I830_UPLOAD_CTX);      i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DITHER;      if (state)	 i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_DITHER;      else	 i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_DITHER;      break;   case GL_DEPTH_TEST:      I830_STATECHANGE(i830, I830_UPLOAD_CTX);      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_DEPTH_TEST_MASK;      if (state)	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_DEPTH_TEST;      else	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_DEPTH_TEST;      /* Also turn off depth writes when GL_DEPTH_TEST is disabled:       */      i830DepthMask( ctx, ctx->Depth.Mask );      break;   case GL_SCISSOR_TEST:      I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS);            if (state)	 i830->state.Buffer[I830_DESTREG_SENABLE] = 	    (_3DSTATE_SCISSOR_ENABLE_CMD |	     ENABLE_SCISSOR_RECT);      else	 i830->state.Buffer[I830_DESTREG_SENABLE] = 	    (_3DSTATE_SCISSOR_ENABLE_CMD |	     DISABLE_SCISSOR_RECT);      break;   case GL_LINE_SMOOTH:      I830_STATECHANGE(i830, I830_UPLOAD_CTX);            i830->state.Ctx[I830_CTXREG_AA] &= ~AA_LINE_ENABLE;      if (state)	 i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_ENABLE;      else	 i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_DISABLE;      break;   case GL_FOG:      I830_STATECHANGE(i830, I830_UPLOAD_CTX);      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_FOG_MASK;      if (state)	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_FOG;      else	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_FOG;      break;   case GL_CULL_FACE:      i830CullFaceFrontFace(ctx, 0);      break;   case GL_TEXTURE_2D:      break;   case GL_STENCIL_TEST:      {         GLboolean hw_stencil = GL_FALSE;         if (ctx->DrawBuffer) {            struct intel_renderbuffer *irbStencil               = intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_STENCIL);            hw_stencil = (irbStencil && irbStencil->region);         }         if (hw_stencil) {            I830_STATECHANGE(i830, I830_UPLOAD_CTX);            if (state) {               i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_STENCIL_TEST;               i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_STENCIL_WRITE;            } else {               i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_STENCIL_TEST;               i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_STENCIL_WRITE;               i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_STENCIL_TEST;               i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_STENCIL_WRITE;            }         } else {            FALLBACK( &i830->intel, I830_FALLBACK_STENCIL, state );         }      }      break;   case GL_POLYGON_STIPPLE:      /* The stipple command worked on my 855GM box, but not my 845G.       * I'll do more testing later to find out exactly which hardware       * supports it.  Disabled for now.       */      if (i830->intel.hw_stipple && 	  i830->intel.reduced_primitive == GL_TRIANGLES)      {	 I830_STATECHANGE(i830, I830_UPLOAD_STIPPLE);	 i830->state.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE;	 if (state)	    i830->state.Stipple[I830_STPREG_ST1] |= ST1_ENABLE;      }      break;   default:      ;   }}static void i830_init_packets( struct i830_context *i830 ){   intelScreenPrivate *screen = i830->intel.intelScreen;   /* Zero all state */   memset(&i830->state, 0, sizeof(i830->state));   /* Set default blend state */   i830->state.TexBlend[0][0] = (_3DSTATE_MAP_BLEND_OP_CMD(0) |				  TEXPIPE_COLOR |				  ENABLE_TEXOUTPUT_WRT_SEL |				  TEXOP_OUTPUT_CURRENT |				  DISABLE_TEX_CNTRL_STAGE |				  TEXOP_SCALE_1X |				  TEXOP_MODIFY_PARMS |				  TEXOP_LAST_STAGE |				  TEXBLENDOP_ARG1);   i830->state.TexBlend[0][1] = (_3DSTATE_MAP_BLEND_OP_CMD(0) |				  TEXPIPE_ALPHA |				  ENABLE_TEXOUTPUT_WRT_SEL |				  TEXOP_OUTPUT_CURRENT |				  TEXOP_SCALE_1X |				  TEXOP_MODIFY_PARMS |				  TEXBLENDOP_ARG1);   i830->state.TexBlend[0][2] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) |				  TEXPIPE_COLOR |				  TEXBLEND_ARG1 |				  TEXBLENDARG_MODIFY_PARMS |				  TEXBLENDARG_DIFFUSE);   i830->state.TexBlend[0][3] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) |				  TEXPIPE_ALPHA |				  TEXBLEND_ARG1 |				  TEXBLENDARG_MODIFY_PARMS |				  TEXBLENDARG_DIFFUSE);   i830->state.TexBlendWordsUsed[0] = 4;   i830->state.Ctx[I830_CTXREG_VF] =  0;   i830->state.Ctx[I830_CTXREG_VF2] = 0;   i830->state.Ctx[I830_CTXREG_AA] = (_3DSTATE_AA_CMD |				      AA_LINE_ECAAR_WIDTH_ENABLE |				      AA_LINE_ECAAR_WIDTH_1_0 |				      AA_LINE_REGION_WIDTH_ENABLE |				      AA_LINE_REGION_WIDTH_1_0 | 				      AA_LINE_DISABLE);   i830->state.Ctx[I830_CTXREG_ENABLES_1] = (_3DSTATE_ENABLES_1_CMD |					     DISABLE_LOGIC_OP |					     DISABLE_STENCIL_TEST |					     DISABLE_DEPTH_BIAS |					     DISABLE_SPEC_ADD |					     DISABLE_FOG |					     DISABLE_ALPHA_TEST |					     DISABLE_COLOR_BLEND |					     DISABLE_DEPTH_TEST);#if 000 /* XXX all the stencil enable state is set in i830Enable(), right? */   if (i830->intel.hw_stencil) {      i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD |						ENABLE_STENCIL_WRITE |						ENABLE_TEX_CACHE |						ENABLE_DITHER |						ENABLE_COLOR_MASK |						/* set no color comps disabled */						ENABLE_COLOR_WRITE |						ENABLE_DEPTH_WRITE);   } else#endif   {      i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD |						DISABLE_STENCIL_WRITE |						ENABLE_TEX_CACHE |						ENABLE_DITHER |						ENABLE_COLOR_MASK |						/* set no color comps disabled */						ENABLE_COLOR_WRITE |						ENABLE_DEPTH_WRITE);   }   i830->state.Ctx[I830_CTXREG_STATE1] = (_3DSTATE_MODES_1_CMD |					  ENABLE_COLR_BLND_FUNC |					  BLENDFUNC_ADD |					  ENABLE_SRC_BLND_FACTOR |					  SRC_BLND_FACT(BLENDFACT_ONE) | 					  ENABLE_DST_BLND_FACTOR |					  DST_BLND_FACT(BLENDFACT_ZERO) );   i830->state.Ctx[I830_CTXREG_STATE2] = (_3DSTATE_MODES_2_CMD |					  ENABLE_GLOBAL_DEPTH_BIAS | 					  GLOBAL_DEPTH_BIAS(0) |					  ENABLE_ALPHA_TEST_FUNC | 					  ALPHA_TEST_FUNC(COMPAREFUNC_ALWAYS) |					  ALPHA_REF_VALUE(0) );   i830->state.Ctx[I830_CTXREG_STATE3] = (_3DSTATE_MODES_3_CMD |					  ENABLE_DEPTH_TEST_FUNC |					  DEPTH_TEST_FUNC(COMPAREFUNC_LESS) |					  ENABLE_ALPHA_SHADE_MODE |					  ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) |					  ENABLE_FOG_SHADE_MODE |					  FOG_SHADE_MODE(SHADE_MODE_LINEAR) |					  ENABLE_SPEC_SHADE_MODE |					  SPEC_SHADE_MODE(SHADE_MODE_LINEAR) |					  ENABLE_COLOR_SHADE_MODE |					  COLOR_SHADE_MODE(SHADE_MODE_LINEAR) |					  ENABLE_CULL_MODE |					  CULLMODE_NONE);   i830->state.Ctx[I830_CTXREG_STATE4] = (_3DSTATE_MODES_4_CMD |					  ENABLE_LOGIC_OP_FUNC |					  LOGIC_OP_FUNC(LOGICOP_COPY) |					  ENABLE_STENCIL_TEST_MASK |					  STENCIL_TEST_MASK(0xff) |					  ENABLE_STENCIL_WRITE_MASK |					  STENCIL_WRITE_MASK(0xff));   i830->state.Ctx[I830_CTXREG_STENCILTST] = (_3DSTATE_STENCIL_TEST_CMD |					      ENABLE_STENCIL_PARMS |					      STENCIL_FAIL_OP(STENCILOP_KEEP) |					      STENCIL_PASS_DEPTH_FAIL_OP(STENCILOP_KEEP) |					      STENCIL_PASS_DEPTH_PASS_OP(STENCILOP_KEEP) |					      ENABLE_STENCIL_TEST_FUNC |					      STENCIL_TEST_FUNC(COMPAREFUNC_ALWAYS) |					      ENABLE_STENCIL_REF_VALUE |					      STENCIL_REF_VALUE(0) );   i830->state.Ctx[I830_CTXREG_STATE5] = (_3DSTATE_MODES_5_CMD |					  FLUSH_TEXTURE_CACHE |					  ENABLE_SPRITE_POINT_TEX |					  SPRITE_POINT_TEX_OFF |					  ENABLE_FIXED_LINE_WIDTH |					  FIXED_LINE_WIDTH(0x2) | /* 1.0 */					  ENABLE_FIXED_POINT_WIDTH |					  FIXED_POINT_WIDTH(1) );   i830->state.Ctx[I830_CTXREG_IALPHAB] = (_3DSTATE_INDPT_ALPHA_BLEND_CMD |					   DISABLE_INDPT_ALPHA_BLEND |					   ENABLE_ALPHA_BLENDFUNC |					   ABLENDFUNC_ADD);   i830->state.Ctx[I830_CTXREG_FOGCOLOR] = (_3DSTATE_FOG_COLOR_CMD |					    FOG_COLOR_RED(0) |					    FOG_COLOR_GREEN(0) |					    FOG_COLOR_BLUE(0));   i830->state.Ctx[I830_CTXREG_BLENDCOLOR0] = _3DSTATE_CONST_BLEND_COLOR_CMD;   i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = 0;   i830->state.Ctx[I830_CTXREG_MCSB0] = _3DSTATE_MAP_COORD_SETBIND_CMD;   i830->state.Ctx[I830_CTXREG_MCSB1] = (TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) |					 TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) |					 TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |					 TEXBIND_SET0(TEXCOORDSRC_VTXSET_0));					    i830->state.Stipple[I830_STPREG_ST0] = _3DSTATE_STIPPLE;   i830->state.Buffer[I830_DESTREG_CBUFADDR0] = _3DSTATE_BUF_INFO_CMD;   i830->state.Buffer[I830_DESTREG_CBUFADDR1] =       (BUF_3D_ID_COLOR_BACK |        BUF_3D_PITCH(screen->front.pitch) |  /* pitch in bytes */       BUF_3D_USE_FENCE);   i830->state.Buffer[I830_DESTREG_DBUFADDR0] = _3DSTATE_BUF_INFO_CMD;   i830->state.Buffer[I830_DESTREG_DBUFADDR1] =       (BUF_3D_ID_DEPTH |<<<<<<< i830_state.c       BUF_3D_PITCH(screen->depth.pitch) |  /* pitch in bytes */=======       BUF_3D_PITCH(screen->depth.pitch * screen->cpp) | /* XXX FBO fix */>>>>>>> 1.7.2.6       BUF_3D_USE_FENCE);/*    i830->state.Buffer[I830_DESTREG_DBUFADDR2] = screen->depth.offset; */   i830->state.Buffer[I830_DESTREG_DV0] = _3DSTATE_DST_BUF_VARS_CMD;   switch (screen->fbFormat) {   case DV_PF_565:      i830->state.Buffer[I830_DESTREG_DV1] = (DSTORG_HORT_BIAS(0x8) | /* .5 */					      DSTORG_VERT_BIAS(0x8) | /* .5 */					      screen->fbFormat |					      DEPTH_IS_Z |					      DEPTH_FRMT_16_FIXED);      break;   case DV_PF_8888:      i830->state.Buffer[I830_DESTREG_DV1] = (DSTORG_HORT_BIAS(0x8) | /* .5 */					      DSTORG_VERT_BIAS(0x8) | /* .5 */					      screen->fbFormat |					      DEPTH_IS_Z |					      DEPTH_FRMT_24_FIXED_8_OTHER);      break;   }   i830->state.Buffer[I830_DESTREG_SENABLE] = (_3DSTATE_SCISSOR_ENABLE_CMD |					       DISABLE_SCISSOR_RECT);   i830->state.Buffer[I830_DESTREG_SR0] = _3DSTATE_SCISSOR_RECT_0_CMD;   i830->state.Buffer[I830_DESTREG_SR1] = 0;   i830->state.Buffer[I830_DESTREG_SR2] = 0;}void i830InitStateFuncs( struct dd_function_table *functions ){   functions->AlphaFunc = i830AlphaFunc;   functions->BlendColor = i830BlendColor;   functions->BlendEquationSeparate = i830BlendEquationSeparate;   functions->BlendFuncSeparate = i830BlendFuncSeparate;   functions->ColorMask = i830ColorMask;   functions->CullFace = i830CullFaceFrontFace;   functions->DepthFunc = i830DepthFunc;   functions->DepthMask = i830DepthMask;   functions->Enable = i830Enable;   functions->Fogfv = i830Fogfv;   functions->FrontFace = i830CullFaceFrontFace;   functions->LightModelfv = i830LightModelfv;   functions->LineWidth = i830LineWidth;   functions->LogicOpcode = i830LogicOp;   functions->PointSize = i830PointSize;   functions->PolygonStipple = i830PolygonStipple;   functions->Scissor = i830Scissor;   functions->ShadeModel = i830ShadeModel;   functions->StencilFuncSeparate = i830StencilFuncSeparate;   functions->StencilMaskSeparate = i830StencilMaskSeparate;   functions->StencilOpSeparate = i830StencilOpSeparate;}void i830InitState( struct i830_context *i830 ){   GLcontext *ctx = &i830->intel.ctx;   i830_init_packets( i830 );   intelInitState( ctx );   memcpy( &i830->initial, &i830->state, sizeof(i830->state) );   i830->current = &i830->state;   i830->state.emitted = 0;   i830->state.active = (I830_UPLOAD_INVARIENT |			 I830_UPLOAD_TEXBLEND(0) |			 I830_UPLOAD_STIPPLE |			 I830_UPLOAD_CTX |			 I830_UPLOAD_BUFFERS);}

⌨️ 快捷键说明

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