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

📄 mach64_screen.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 2 页
字号:
   mach64Screen->AGPMode	= serverInfo->AGPMode;   mach64Screen->chipset	= serverInfo->chipset;   mach64Screen->width		= serverInfo->width;   mach64Screen->height		= serverInfo->height;   mach64Screen->mem		= serverInfo->mem;   mach64Screen->cpp		= serverInfo->cpp;   mach64Screen->frontOffset	= serverInfo->frontOffset;   mach64Screen->frontPitch	= serverInfo->frontPitch;   mach64Screen->backOffset	= serverInfo->backOffset;   mach64Screen->backPitch	= serverInfo->backPitch;   mach64Screen->depthOffset	= serverInfo->depthOffset;   mach64Screen->depthPitch	= serverInfo->depthPitch;   mach64Screen->texOffset[MACH64_CARD_HEAP] = serverInfo->textureOffset;   mach64Screen->texSize[MACH64_CARD_HEAP] = serverInfo->textureSize;   mach64Screen->logTexGranularity[MACH64_CARD_HEAP] =      serverInfo->logTextureGranularity;   if ( mach64Screen->IsPCI ) {      mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS - 1;      mach64Screen->firstTexHeap = MACH64_CARD_HEAP;      mach64Screen->texOffset[MACH64_AGP_HEAP] = 0;      mach64Screen->texSize[MACH64_AGP_HEAP] = 0;      mach64Screen->logTexGranularity[MACH64_AGP_HEAP] = 0;   } else {      if (mach64Screen->texSize[MACH64_CARD_HEAP] > 0) {	 mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS;	 mach64Screen->firstTexHeap = MACH64_CARD_HEAP;      } else {	 mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS - 1;	 mach64Screen->firstTexHeap = MACH64_AGP_HEAP;      }      mach64Screen->texOffset[MACH64_AGP_HEAP] = serverInfo->agpTextureOffset;      mach64Screen->texSize[MACH64_AGP_HEAP] = serverInfo->agpSize;      mach64Screen->logTexGranularity[MACH64_AGP_HEAP] = serverInfo->logAgpTextureGranularity;   }   mach64Screen->driScreen = sPriv;   if ( glx_enable_extension != NULL ) {      if ( mach64Screen->irq != 0 ) {	 (*glx_enable_extension)( psc, "GLX_SGI_swap_control" );	 (*glx_enable_extension)( psc, "GLX_SGI_video_sync" );	 (*glx_enable_extension)( psc, "GLX_MESA_swap_control" );      }      (*glx_enable_extension)( psc, "GLX_MESA_swap_frame_usage" );   }   return mach64Screen;}/* Destroy the device specific screen private data struct. */static voidmach64DestroyScreen( __DRIscreenPrivate *driScreen ){   mach64ScreenRec *mach64Screen = (mach64ScreenRec *) driScreen->private;   if ( !mach64Screen )      return;   if ( MACH64_DEBUG & DEBUG_VERBOSE_DRI )       fprintf( stderr, "%s\n", __FUNCTION__ );   if ( !mach64Screen->IsPCI ) {      drmUnmap( (drmAddress)mach64Screen->agpTextures.map,		mach64Screen->agpTextures.size );   }   drmUnmapBufs( mach64Screen->buffers );   drmUnmap( (drmAddress)mach64Screen->mmio.map, mach64Screen->mmio.size );   FREE( mach64Screen );   driScreen->private = NULL;}/* Create and initialize the Mesa and driver specific pixmap buffer * data. */static GLbooleanmach64CreateBuffer( __DRIscreenPrivate *driScrnPriv,		    __DRIdrawablePrivate *driDrawPriv,		    const __GLcontextModes *mesaVis,		    GLboolean isPixmap ){   mach64ScreenPtr screen = (mach64ScreenPtr) driScrnPriv->private;   if (isPixmap) {      return GL_FALSE; /* not implemented */   }   else {      struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);      {         driRenderbuffer *frontRb            = driNewRenderbuffer(GL_RGBA,                                 NULL,                                 screen->cpp,                                 screen->frontOffset, screen->frontPitch,                                 driDrawPriv);         mach64SetSpanFunctions(frontRb, mesaVis);         _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);      }      if (mesaVis->doubleBufferMode) {         driRenderbuffer *backRb            = driNewRenderbuffer(GL_RGBA,                                 NULL,                                 screen->cpp,                                 screen->backOffset, screen->backPitch,                                 driDrawPriv);         mach64SetSpanFunctions(backRb, mesaVis);         _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);      }      if (mesaVis->depthBits == 16) {         driRenderbuffer *depthRb            = driNewRenderbuffer(GL_DEPTH_COMPONENT16,                                 NULL, screen->cpp,                                 screen->depthOffset, screen->depthPitch,                                 driDrawPriv);         mach64SetSpanFunctions(depthRb, mesaVis);         _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);      }      else if (mesaVis->depthBits == 24) {         /* XXX I don't think 24-bit Z is supported - so this isn't used */         driRenderbuffer *depthRb            = driNewRenderbuffer(GL_DEPTH_COMPONENT24,                                 NULL,                                 screen->cpp,                                 screen->depthOffset, screen->depthPitch,                                 driDrawPriv);         mach64SetSpanFunctions(depthRb, mesaVis);         _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);      }      _mesa_add_soft_renderbuffers(fb,                                   GL_FALSE, /* color */                                   GL_FALSE, /* depth */                                   mesaVis->stencilBits > 0,                                   mesaVis->accumRedBits > 0,                                   GL_FALSE, /* alpha */                                   GL_FALSE /* aux */);      driDrawPriv->driverPrivate = (void *) fb;      return (driDrawPriv->driverPrivate != NULL);   }}static voidmach64DestroyBuffer(__DRIdrawablePrivate *driDrawPriv){   _mesa_destroy_framebuffer((GLframebuffer *) (driDrawPriv->driverPrivate));}/* Copy the back color buffer to the front color buffer */static voidmach64SwapBuffers(__DRIdrawablePrivate *dPriv){   if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {      mach64ContextPtr mmesa;      GLcontext *ctx;      mmesa = (mach64ContextPtr) dPriv->driContextPriv->driverPrivate;      ctx = mmesa->glCtx;      if (ctx->Visual.doubleBufferMode) {         _mesa_notifySwapBuffers( ctx );  /* flush pending rendering comands */         mach64CopyBuffer( dPriv );      }   }   else {      /* XXX this shouldn't be an error but we can't handle it for now */      _mesa_problem(NULL, "%s: drawable has no context!", __FUNCTION__);   }}/* Initialize the driver specific screen private data. */static GLbooleanmach64InitDriver( __DRIscreenPrivate *driScreen ){   driScreen->private = (void *) mach64CreateScreen( driScreen );   if ( !driScreen->private ) {      mach64DestroyScreen( driScreen );      return GL_FALSE;   }   return GL_TRUE;}static struct __DriverAPIRec mach64API = {   .InitDriver      = mach64InitDriver,   .DestroyScreen   = mach64DestroyScreen,   .CreateContext   = mach64CreateContext,   .DestroyContext  = mach64DestroyContext,   .CreateBuffer    = mach64CreateBuffer,   .DestroyBuffer   = mach64DestroyBuffer,   .SwapBuffers     = mach64SwapBuffers,   .MakeCurrent     = mach64MakeCurrent,   .UnbindContext   = mach64UnbindContext,   .GetSwapInfo     = NULL,   .GetMSC          = driGetMSC32,   .WaitForMSC      = driWaitForMSC32,   .WaitForSBC      = NULL,   .SwapBuffersMSC  = NULL};/** * This is the bootstrap function for the driver.  libGL supplies all of the * requisite information about the system, and the driver initializes itself. * This routine also fills in the linked list pointed to by \c driver_modes * with the \c __GLcontextModes that the driver can support for windows or * pbuffers. *  * \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on  *         failure. */PUBLICvoid * __driCreateNewScreen_20050727( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc,			     const __GLcontextModes * modes,			     const __DRIversion * ddx_version,			     const __DRIversion * dri_version,			     const __DRIversion * drm_version,			     const __DRIframebuffer * frame_buffer,			     drmAddress pSAREA, int fd, 			     int internal_api_version,			     const __DRIinterfaceMethods * interface,			     __GLcontextModes ** driver_modes )			     {   __DRIscreenPrivate *psp;   static const __DRIversion ddx_expected = { 6, 4, 0 };   static const __DRIversion dri_expected = { 4, 0, 0 };   static const __DRIversion drm_expected = { 1, 0, 0 };   dri_interface = interface;   if ( ! driCheckDriDdxDrmVersions2( "Mach64",				      dri_version, & dri_expected,				      ddx_version, & ddx_expected,				      drm_version, & drm_expected ) ) {      return NULL;   }   psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,				  ddx_version, dri_version, drm_version,				  frame_buffer, pSAREA, fd,				  internal_api_version, &mach64API);   if ( psp != NULL ) {      ATIDRIPtr dri_priv = (ATIDRIPtr) psp->pDevPriv;      *driver_modes = mach64FillInModes( dri_priv->cpp * 8,					 16,					 0,					 1);      /* Calling driInitExtensions here, with a NULL context pointer, does not actually       * enable the extensions.  It just makes sure that all the dispatch offsets for all       * the extensions that *might* be enables are known.  This is needed because the       * dispatch offsets need to be known when _mesa_context_create is called, but we can't       * enable the extensions until we have a context pointer.       *       * Hello chicken.  Hello egg.  How are you two today?       */      driInitExtensions( NULL, card_extensions, GL_FALSE );   }   return (void *) psp;}

⌨️ 快捷键说明

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