📄 intel_context.c
字号:
intel->bm = bm_intel_Attach( intel );#if 0 bmInitPool(intel->bm, intel->intelScreen->tex.offset, /* low offset */ intel->intelScreen->tex.map, /* low virtual */ intel->intelScreen->tex.size, DRM_MM_TT);#endif /* XXX FBO: these have to go away! * FBO regions should be setup when creating the drawable. */ /* These are still static, but create regions for them. */ intel->front_region = intel_region_create_static(intel, DRM_MM_TT, intelScreen->front.offset, intelScreen->front.map, intelScreen->cpp, intelScreen->front.pitch, intelScreen->height); intel->back_region = intel_region_create_static(intel, DRM_MM_TT, intelScreen->back.offset, intelScreen->back.map, intelScreen->cpp, intelScreen->back.pitch, intelScreen->height); /* Still assuming front.cpp == depth.cpp */ intel->depth_region = intel_region_create_static(intel, DRM_MM_TT, intelScreen->depth.offset, intelScreen->depth.map, intelScreen->cpp, intelScreen->depth.pitch, intelScreen->height); intel->batch = intel_batchbuffer_alloc( intel ); intel_bufferobj_init( intel ); intel_fbo_init( intel ); if (intel->ctx.Mesa_DXTn) { _mesa_enable_extension( ctx, "GL_EXT_texture_compression_s3tc" ); _mesa_enable_extension( ctx, "GL_S3_s3tc" ); } else if (driQueryOptionb (&intelScreen->optionCache, "force_s3tc_enable")) { _mesa_enable_extension( ctx, "GL_EXT_texture_compression_s3tc" ); }<<<<<<< intel_context.c/* driInitTextureObjects( ctx, & intel->swapped, *//* DRI_TEXMGR_DO_TEXTURE_1D | *//* DRI_TEXMGR_DO_TEXTURE_2D | *//* DRI_TEXMGR_DO_TEXTURE_RECT ); */ intelInitBatchBuffer(&intel->ctx); intel->prim.flush = intel_emit_invarient_state;=======>>>>>>> 1.20.2.25 intel->prim.primitive = ~0;#if DO_DEBUG INTEL_DEBUG = driParseDebugString( getenv( "INTEL_DEBUG" ), debug_control );#endif if (getenv("INTEL_NO_RAST")) { fprintf(stderr, "disabling 3D rasterization\n"); FALLBACK(intel, INTEL_FALLBACK_USER, 1); } return GL_TRUE;}void intelDestroyContext(__DRIcontextPrivate *driContextPriv){ struct intel_context *intel = (struct intel_context *) driContextPriv->driverPrivate; assert(intel); /* should never be null */ if (intel) { GLboolean release_texture_heaps; intel->vtbl.destroy( intel ); release_texture_heaps = (intel->ctx.Shared->RefCount == 1); _swsetup_DestroyContext (&intel->ctx); _tnl_DestroyContext (&intel->ctx); _ac_DestroyContext (&intel->ctx); _swrast_DestroyContext (&intel->ctx); intel->Fallback = 0; /* don't call _swrast_Flush later */ intel_batchbuffer_free(intel->batch); if ( release_texture_heaps ) { /* This share group is about to go away, free our private * texture object data. */ fprintf(stderr, "do something to free texture heaps\n"); } /* free the Mesa context */ _mesa_free_context_data(&intel->ctx); }}GLboolean intelUnbindContext(__DRIcontextPrivate *driContextPriv){ return GL_TRUE;}GLboolean intelMakeCurrent(__DRIcontextPrivate *driContextPriv, __DRIdrawablePrivate *driDrawPriv, __DRIdrawablePrivate *driReadPriv){ if (driContextPriv) { struct intel_context *intel = (struct intel_context *) driContextPriv->driverPrivate; GLframebuffer *drawFb = (GLframebuffer *) driDrawPriv->driverPrivate; GLframebuffer *readFb = (GLframebuffer *) driReadPriv->driverPrivate; if ( intel->driDrawable != driDrawPriv ) { /* Shouldn't the readbuffer be stored also? */ driDrawableInitVBlank( driDrawPriv, intel->vblank_flags ); intel->driDrawable = driDrawPriv; intelWindowMoved( intel ); } /* XXX FBO temporary fix-ups! */ /* if the renderbuffers don't have regions, init them from the context */ { struct intel_renderbuffer *irbFront = intel_get_renderbuffer(drawFb, BUFFER_FRONT_LEFT); struct intel_renderbuffer *irbBack = intel_get_renderbuffer(drawFb, BUFFER_BACK_LEFT); struct intel_renderbuffer *irbDepth = intel_get_renderbuffer(drawFb, BUFFER_DEPTH); struct intel_renderbuffer *irbStencil = intel_get_renderbuffer(drawFb, BUFFER_STENCIL); if (irbFront && !irbFront->region) { intel_region_reference(&irbFront->region, intel->front_region); } if (irbBack && !irbBack->region) { intel_region_reference(&irbBack->region, intel->back_region); } if (irbDepth && !irbDepth->region) { intel_region_reference(&irbDepth->region, intel->depth_region); } if (irbStencil && !irbStencil->region) { intel_region_reference(&irbStencil->region, intel->depth_region); } } _mesa_make_current(&intel->ctx, drawFb, readFb); intel_draw_buffer(&intel->ctx, drawFb); } else { _mesa_make_current(NULL, NULL, NULL); } return GL_TRUE;}<<<<<<< intel_context.c/** * Use the information in the sarea to update the screen parameters * related to screen rotation. */static voidintelUpdateScreenRotation(intelContextPtr intel, __DRIscreenPrivate *sPriv, drmI830Sarea *sarea){ intelScreenPrivate *intelScreen = (intelScreenPrivate *)sPriv->private; intelRegion *colorBuf; intelUnmapScreenRegions(intelScreen); intelUpdateScreenFromSAREA(intelScreen, sarea); /* update the current hw offsets for the color and depth buffers */ if (intel->ctx.DrawBuffer->_ColorDrawBufferMask[0] == BUFFER_BIT_BACK_LEFT) colorBuf = &intelScreen->back; else colorBuf = &intelScreen->front; intel->vtbl.update_color_z_regions(intel, colorBuf, &intelScreen->depth); if (!intelMapScreenRegions(sPriv)) { fprintf(stderr, "ERROR Remapping screen regions!!!\n"); }}void intelGetLock( intelContextPtr intel, GLuint flags )=======void intelGetLock( struct intel_context *intel, GLuint flags )>>>>>>> 1.20.2.25{ __DRIdrawablePrivate *dPriv = intel->driDrawable; __DRIscreenPrivate *sPriv = intel->driScreen; intelScreenPrivate *intelScreen = (intelScreenPrivate *)sPriv->private; drmI830Sarea * sarea = intel->sarea;<<<<<<< intel_context.c unsigned i;======= int me = intel->hHWContext;>>>>>>> 1.20.2.25 drmGetLock(intel->driFd, intel->hHWContext, flags); /* If the window moved, may need to set a new cliprect now. * * NOTE: This releases and regains the hw lock, so all state * checking must be done *after* this call: */ if (dPriv) DRI_VALIDATE_DRAWABLE_INFO(sPriv, dPriv);<<<<<<< intel_context.c if (dPriv && intel->lastStamp != dPriv->lastStamp) { intelWindowMoved( intel ); intel->lastStamp = dPriv->lastStamp; } /* If we lost context, need to dump all registers to hardware. * Note that we don't care about 2d contexts, even if they perform * accelerated commands, so the DRI locking in the X server is even * more broken than usual.======= /* Lost context?>>>>>>> 1.20.2.25 */<<<<<<< intel_context.c if (sarea->width != intelScreen->width || sarea->height != intelScreen->height || sarea->rotation != intelScreen->current_rotation) { intelUpdateScreenRotation(intel, sPriv, sarea); /* This will drop the outstanding batchbuffer on the floor */ intel->batch.ptr -= (intel->batch.size - intel->batch.space); intel->batch.space = intel->batch.size; /* lose all primitives */ intel->prim.primitive = ~0; intel->prim.start_ptr = 0; intel->prim.flush = 0; intel->vtbl.lost_hardware( intel ); intel->lastStamp = 0; /* force window update */ /* Release batch buffer */ intelDestroyBatchBuffer(&intel->ctx); intelInitBatchBuffer(&intel->ctx); intel->prim.flush = intel_emit_invarient_state; /* Still need to reset the global LRU? */ intel_driReinitTextureHeap( intel->texture_heaps[0], intel->intelScreen->tex.size );======= if (sarea->ctxOwner != me) { intel->perf_boxes |= I830_BOX_LOST_CONTEXT; sarea->ctxOwner = me;>>>>>>> 1.20.2.25 } /* Drawable changed? */<<<<<<< intel_context.c for ( i = 0 ; i < intel->nr_heaps ; i++ ) { DRI_AGE_TEXTURES( intel->texture_heaps[ i ] ); }}======= if (dPriv && intel->lastStamp != dPriv->lastStamp) { intelWindowMoved( intel ); intel->lastStamp = dPriv->lastStamp; }}>>>>>>> 1.20.2.25<<<<<<< intel_context.cvoid intelSwapBuffers( __DRIdrawablePrivate *dPriv ){ if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) { intelContextPtr intel; GLcontext *ctx; intel = (intelContextPtr) dPriv->driContextPriv->driverPrivate; ctx = &intel->ctx; if (ctx->Visual.doubleBufferMode) { intelScreenPrivate *screen = intel->intelScreen; _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */ if ( 0 /*intel->doPageFlip*/ ) { /* doPageFlip is never set !!! */ intelPageFlip( dPriv ); } else { intelCopyBuffer( dPriv ); } if (screen->current_rotation != 0) { intelRotateWindow(intel, dPriv, BUFFER_BIT_FRONT_LEFT); } } } else { /* XXX this shouldn't be an error but we can't handle it for now */ fprintf(stderr, "%s: drawable has no context!\n", __FUNCTION__); }}void intelInitState( GLcontext *ctx ){ /* Mesa should do this for us: */ ctx->Driver.AlphaFunc( ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef); ctx->Driver.BlendColor( ctx, ctx->Color.BlendColor ); ctx->Driver.BlendEquationSeparate( ctx, ctx->Color.BlendEquationRGB, ctx->Color.BlendEquationA); ctx->Driver.BlendFuncSeparate( ctx, ctx->Color.BlendSrcRGB, ctx->Color.BlendDstRGB, ctx->Color.BlendSrcA, ctx->Color.BlendDstA); ctx->Driver.ColorMask( ctx, ctx->Color.ColorMask[RCOMP], ctx->Color.ColorMask[GCOMP], ctx->Color.ColorMask[BCOMP], ctx->Color.ColorMask[ACOMP]); ctx->Driver.CullFace( ctx, ctx->Polygon.CullFaceMode ); ctx->Driver.DepthFunc( ctx, ctx->Depth.Func ); ctx->Driver.DepthMask( ctx, ctx->Depth.Mask ); ctx->Driver.Enable( ctx, GL_ALPHA_TEST, ctx->Color.AlphaEnabled ); ctx->Driver.Enable( ctx, GL_BLEND, ctx->Color.BlendEnabled ); ctx->Driver.Enable( ctx, GL_COLOR_LOGIC_OP, ctx->Color.ColorLogicOpEnabled ); ctx->Driver.Enable( ctx, GL_COLOR_SUM, ctx->Fog.ColorSumEnabled ); ctx->Driver.Enable( ctx, GL_CULL_FACE, ctx->Polygon.CullFlag ); ctx->Driver.Enable( ctx, GL_DEPTH_TEST, ctx->Depth.Test ); ctx->Driver.Enable( ctx, GL_DITHER, ctx->Color.DitherFlag ); ctx->Driver.Enable( ctx, GL_FOG, ctx->Fog.Enabled ); ctx->Driver.Enable( ctx, GL_LIGHTING, ctx->Light.Enabled ); ctx->Driver.Enable( ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag ); ctx->Driver.Enable( ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag ); ctx->Driver.Enable( ctx, GL_SCISSOR_TEST, ctx->Scissor.Enabled ); ctx->Driver.Enable( ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled ); ctx->Driver.Enable( ctx, GL_TEXTURE_1D, GL_FALSE ); ctx->Driver.Enable( ctx, GL_TEXTURE_2D, GL_FALSE ); ctx->Driver.Enable( ctx, GL_TEXTURE_RECTANGLE_NV, GL_FALSE ); ctx->Driver.Enable( ctx, GL_TEXTURE_3D, GL_FALSE ); ctx->Driver.Enable( ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE ); ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color ); ctx->Driver.Fogfv( ctx, GL_FOG_MODE, 0 ); 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.FrontFace( ctx, ctx->Polygon.FrontFace ); { GLfloat f = (GLfloat)ctx->Light.Model.ColorControl; ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_COLOR_CONTROL, &f ); }=======>>>>>>> 1.20.2.25<<<<<<< intel_context.c ctx->Driver.LineWidth( ctx, ctx->Line.Width ); ctx->Driver.LogicOpcode( ctx, ctx->Color.LogicOp ); ctx->Driver.PointSize( ctx, ctx->Point.Size ); ctx->Driver.PolygonStipple( ctx, (const GLubyte *)ctx->PolygonStipple ); ctx->Driver.Scissor( ctx, ctx->Scissor.X, ctx->Scissor.Y, ctx->Scissor.Width, ctx->Scissor.Height ); ctx->Driver.ShadeModel( ctx, ctx->Light.ShadeModel ); ctx->Driver.StencilFuncSeparate( ctx, GL_FRONT, ctx->Stencil.Function[0], ctx->Stencil.Ref[0], ctx->Stencil.ValueMask[0] ); ctx->Driver.StencilFuncSeparate( ctx, GL_BACK, ctx->Stencil.Function[1], ctx->Stencil.Ref[1], ctx->Stencil.ValueMask[1] ); ctx->Driver.StencilMaskSeparate( ctx, GL_FRONT, ctx->Stencil.WriteMask[0] ); ctx->Driver.StencilMaskSeparate( ctx, GL_BACK, ctx->Stencil.WriteMask[1] ); ctx->Driver.StencilOpSeparate( ctx, GL_FRONT, ctx->Stencil.FailFunc[0], ctx->Stencil.ZFailFunc[0], ctx->Stencil.ZPassFunc[0]); ctx->Driver.StencilOpSeparate( ctx, GL_BACK, ctx->Stencil.FailFunc[1], ctx->Stencil.ZFailFunc[1], ctx->Stencil.ZPassFunc[1]); ctx->Driver.DrawBuffer( ctx, ctx->Color.DrawBuffer[0] );}=======>>>>>>> 1.20.2.25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -