亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dalmode.c

?? 此代碼為WCE5.0下顯示器的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
*
*      DALShareModeTable allows the first DAL instance in a MAXX configuration to
*      pass the mode table to the second instance in a MAXX configuration.
*
* Note: Function may be called numerous times to reinitialize the set of connected
*       Displays [GG]
*      
\**************************************************************************/

BOOL DALShareModeTable(HDAL hDal, LPVOID lpModeTable, ULONG ulConnectedDisplays)
{
  LPHW_DAL_EXTENSION    lpHDE;  

  DALDEBUG((DALDBG_ENTRY_EXIT, "DALShareModeTable - Entry"));

  DALASSERT((hDal != NULL), "DAL handle 'hDAL' is NULL!");

  // grab the structure for the DAL out of the DDL's handle to it
  lpHDE = (LPHW_DAL_EXTENSION)hDal;

  // mark this DAL instance as sharing the mode table so it no longer builds it's
  // own mode list, and relies on it from somewhere else [GG]

  lpHDE->ulFlags |= HDAL_SHARINGMODETABLE;
  lpHDE->lpaModes = (LPDAL_MODEINFO)lpModeTable;
  lpHDE->ulConnectedDisplays = ulConnectedDisplays;

  // todo - need some validation of DAL's here to ensure both instances share the
  //        same set and order of display types [GG] 17/11/99

  DALDEBUG((DALDBG_ENTRY_EXIT, "DALShareModeTable - Exit"));

  return(TRUE);
}



/******************************Public*Routine******************************\
*
* BOOL DALUnShareModeTable()
*
*      DALUnShareModeTable allows the second DAL instance 
*      in a non-MAXX configuration to rebuild its own mode table.
*
* Note: Function will be called from Control Panel through Escape call
*
\**************************************************************************/

BOOL DALUnShareModeTable(HDAL hDal, LPVOID lpModeTable, ULONG ulConnectedDisplays)
{
  LPHW_DAL_EXTENSION    lpHDE;  

  DALDEBUG((DALDBG_ENTRY_EXIT, "DALUnShareModeTable - Entry"));

  DALASSERT((hDal != NULL), "DAL handle 'hDAL' is NULL!");

  // grab the structure for the DAL out of the DDL's handle to it
  lpHDE = (LPHW_DAL_EXTENSION)hDal;

  // mark this DAL instance as not sharing the mode table
  // and builds it's own mode list
  lpHDE->ulFlags &= ~HDAL_SHARINGMODETABLE;
  lpHDE->lpaModes = (LPDAL_MODEINFO)lpModeTable;
  lpHDE->ulConnectedDisplays = ulDetectConnectedDisplays(lpHDE);

  // Update connected displays in BIOS Scratch Registers
  // Do not update CMOS
  vUpdateBIOSDisplayInfo(lpHDE, TRUE, FALSE);

  DALDEBUG((DALDBG_ENTRY_EXIT, "DALUnShareModeTable - Exit"));

  return(TRUE);
}



/******************************Public*Routine******************************\
*
* ULONG DALSetModeVMI()
*
*      DALSetModeVMI will be called only by GDI.
*      Keep in mind it is called with desktop values, which may not 
*      necessarily coincide with the actual mode we wish to set.
*      CWDDE will call vControllerSetMode itself to change modes.
\**************************************************************************/

ULONG DALSetModeVMI(
HDAL hDAL,
ULONG ulDriverID,
VIDEO_MODE_INFORMATION FAR *lpVMI,
BOOL bForce)
{
  LPHW_DAL_EXTENSION    lpHDE;
  LPDAL_MODEINFO        lpDalMode;
  LPDEVMODE_INFO        lpMode;
  ULONG                 ulDisplayOffset;
  ULONG                 ulDisplayPitch;

  DALDEBUG((DALDBG_ENTRY_EXIT, "DALSetModeVMI - Entry"));
  DALASSERT((hDAL != NULL), "DAL handle 'hDAL' is NULL!");

  // grab the structure for the DAL out of the DDL's handle to it
  lpHDE = (LPHW_DAL_EXTENSION)hDAL;

  // retrieve the DAL_MODEINFO structure using the index passed in
  // from the VIDEO_MODE_INFORMATION structure
  lpDalMode = (LPDAL_MODEINFO) &lpHDE->lpaModes[lpVMI->ModeIndex];
  lpMode    = (LPDEVMODE_INFO) &lpDalMode->sDevModeInfo;

  // set pitch equal to the horizontal res and the offset to 0
  ulDisplayOffset = 0;
  ulDisplayPitch  = lpMode->ulPelsWidth;


  DALDEBUG((DALDBG_ENTRY_EXIT, "DALSetModeVMI - Exit"));
  return (DALSetMode(hDAL,
                     ulDriverID,
                     lpMode,
                     ulDisplayOffset,
                     ulDisplayPitch,
                     bForce));
}



/****************************Private*Routine*******************************\
*
* BOOL bValidateBandwidth()
*
* Function will ensure that there is enough bandwidth available and that
* horizontal time falls within lim  iting constraints.
* It will return TRUE if conditions are met, FALSE if not.
*
* Note: Inherent in this function is validation of both bandwidth and
*       horizonatal time.
*
\**************************************************************************/

BOOL bValidateBandwidth(
LPHW_DAL_EXTENSION lpHDE,
LPDEVMODE_INFO     lpMode,
LPULONG            lpulDisplaysType)
{
  LPDEVGCO        lpController = NULL;
  FIXEDPOINT      sAvailBandwidth;
  FIXEDPOINT      sAvailPeakBandwidth;
  FIXEDPOINT      sReqBandwidth;
  FIXEDPOINT      sReqPeakBandwidth;
  FIXEDPOINT      sBandwidth;
  FIXEDPOINT      sPeakBandwidth;
  PRIO_ELEM       aPrioTable[MAX_PRIO_ELEM];
  HORIZONTAL_TIME aTotalHTime[MAX_NUMBER_CONTROLLERS];
  LPDEVMODE_INFO  lpModeTemp;
  LPULONG         lpulDisplaysTypeTemp;
  BOOL            bRet = TRUE;
  BOOL            bPerformBandwidth = TRUE;
  BOOL            bPerformHTime = TRUE;
  ULONG           i, ulIndex;
  DAL_CRTC_TIMING sTiming;
  lpModeTemp = lpMode;
  lpulDisplaysTypeTemp = lpulDisplaysType;
  

  ZEROMEMORY(&sTiming, sizeof(DAL_CRTC_TIMING));

  for (i = 0; i < lpHDE->ulControllersCount; i++)
  {
    lpController = (LPDEVGCO) &lpHDE->aControllers[i];

    // If any of the controllers DON'T support bandwidth calcualtions,
    // don't perform any.
    if (!(lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_MEMORY_BANDWIDTH))
      bPerformBandwidth = FALSE;
    else
    {
      if (i == 0)
      {
        // Total CURRENT bandwidth in the system of ALL controllers
        sAvailBandwidth = lpController->lpHWED->sAvailBandwidth;
        ZEROMEMORY((LPVOID)&sReqBandwidth, sizeof(FIXEDPOINT));

        sAvailPeakBandwidth = lpController->lpHWED->sAvailPeakBandwidth;
        ZEROMEMORY((LPVOID)&sReqPeakBandwidth, sizeof(FIXEDPOINT));
      }

      if (lpController->ulFlags & GCO_ACTIVE)
      {
        // if this controller is CURRENTLY active, increment the available bandwidth
        // with which we have to work.  This will hopefully get our available
        // bandwidth in a state we were in at boot time
         //First find that mode's timing 
        
        if(lpController->lpHWED->ulFunctionHooks2 & GCO_HOOK2_CALCULATE_MODE_BANDWIDTH_EX )
        {
          (*lpController->lpHWED->pfnGCOGetDetailedTiming)(lpController->hGCO,
                                                          lpController->ulController,
                                                          NULL, //To get current mode timing
                                                          &sTiming);   

          (*lpController->lpHWED->pfnCalculateModeBandwidthEx) (lpController->hGCO, 
              &lpController->sModeInfo, (LPDAL_CRTC_TIMING)&sTiming, (LPFIXEDPOINT)&sBandwidth); 
        }
        else
        {
          (*lpController->lpHWED->pfnCalculateModeBandwidth) (lpController->hGCO, 
              &lpController->sModeInfo,(LPFIXEDPOINT)&sBandwidth); 
        }

        vIncrementBandwidth(&sAvailBandwidth, (LPFIXEDPOINT)&sBandwidth);
        // If this controller was allocated for a half frame buffer display, deallocate the bandwidth
        // If not, HalfFrameBuffer is zero
        if (lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_HALFFRAMEBUFFER_BANDWIDTH)
          vIncrementBandwidth(&sAvailBandwidth, (LPFIXEDPOINT)&lpController->sAllocatedBandwidth.HalfFrameBuffer);

        
        if(lpController->lpHWED->ulFunctionHooks2 & GCO_HOOK2_CALCULATE_PEAK_MEMORY_BANDWIDTH_EX)
        {
          if(sTiming.usPixelClock ==0) //We did not hook get mode bandwidth.
          {
            (*lpController->lpHWED->pfnGCOGetDetailedTiming)(lpController->hGCO,
                                                          lpController->ulController,
                                                          NULL, //To get current mode timing
                                                          &sTiming);   
          }

          (*lpController->lpHWED->pfnCalculatePeakModeBandwidthEx)
              (lpController->hGCO, &lpController->sModeInfo, &sTiming, (LPFIXEDPOINT)&sPeakBandwidth);

          vIncrementBandwidth(&sAvailPeakBandwidth, (LPFIXEDPOINT)&sPeakBandwidth);
          
        }
        else if (lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_PEAK_MEMORY_BANDWIDTH)
        {
          (*lpController->lpHWED->pfnCalculatePeakModeBandwidth)
              (lpController->hGCO, &lpController->sModeInfo, (LPFIXEDPOINT)&sPeakBandwidth);

          vIncrementBandwidth(&sAvailPeakBandwidth, (LPFIXEDPOINT)&sPeakBandwidth);

        }
        
      }
    }

    // If any of the controllers DON'T support HTime calcualtions,
    // don't perform any.
    if (!(lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_HORIZONTAL_TIME))
      bPerformHTime = FALSE;
  }

  //
  // Bandwidth validation
  //
  if (bPerformBandwidth)
  {
    LPDAL_CRTC_TIMING lpTiming;
    
    for (i = 0; i < lpHDE->ulControllersCount; i++)
    {
      lpController = (LPDEVGCO) &lpHDE->aControllers[i];
      lpTiming = NULL;

      if (*lpulDisplaysTypeTemp != 0)
      {
        // Get the requested bandwidth for this controller only if the
        // displays passed in for this controller are non-zero.  This is done 
        // since we are unaware if we are validating for the current
        // configuration or a possible future one
        
        
        if(lpController->lpHWED->ulFunctionHooks2 & GCO_HOOK2_CALCULATE_MODE_BANDWIDTH_EX)
        {
          if(bGetModeDetailedTimingEx(lpHDE, *lpulDisplaysTypeTemp, lpModeTemp, (LPDAL_CRTC_TIMING)&sTiming, FALSE))
          {
            lpTiming =(LPDAL_CRTC_TIMING)&sTiming;
          }
          (*lpController->lpHWED->pfnCalculateModeBandwidthEx) (lpController->hGCO, 
            lpModeTemp, (LPDAL_CRTC_TIMING)lpTiming, (LPFIXEDPOINT)&sBandwidth);

        }
        else
        {
          (*lpController->lpHWED->pfnCalculateModeBandwidth) (lpController->hGCO, 
            lpModeTemp, (LPFIXEDPOINT)&sBandwidth);
        }
        vIncrementBandwidth(&sReqBandwidth, (LPFIXEDPOINT)&sBandwidth);

        if ((lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_HALFFRAMEBUFFER_BANDWIDTH) && 
            (*lpulDisplaysTypeTemp & HW_DISPLAY_TYPE_LCD))
        {
          // If this LCD is half frame buffered, add the beandwidth.
          if ((*lpController->lpHWED->pfnCalculateHFBBandwidth) (lpController->hGCO, 
              lpModeTemp, (LPFIXEDPOINT)&sBandwidth))
          {
            vIncrementBandwidth(&sReqBandwidth, (LPFIXEDPOINT)&sBandwidth);
          }
        }

       //Check the new hook first.
       if(lpController->lpHWED->ulFunctionHooks2 & GCO_HOOK2_CALCULATE_PEAK_MEMORY_BANDWIDTH_EX)
        {
         // lpTiming = NULL; Use previous .

          if(sTiming.usPixelClock  == 0) 
          {
             if(bGetModeDetailedTimingEx(lpHDE, *lpulDisplaysTypeTemp, lpModeTemp, (LPDAL_CRTC_TIMING)&sTiming, FALSE))
             {
               lpTiming = (LPDAL_CRTC_TIMING)&sTiming;
             }
          }

          (*lpController->lpHWED->pfnCalculatePeakModeBandwidthEx)
              (lpController->hGCO, lpModeTemp, (LPDAL_CRTC_TIMING)lpTiming, (LPFIXEDPOINT)&sPeakBandwidth);

          vIncrementBandwidth(&sReqPeakBandwidth, (LPFIXEDPOINT)&sPeakBandwidth);
        }
       else if (lpController->lpHWED->ulFunctionHooks & GCO_CALCULATE_PEAK_MEMORY_BANDWIDTH)
        {
          (*lpController->lpHWED->pfnCalculatePeakModeBandwidth)
              (lpController->hGCO, lpModeTemp, (LPFIXEDPOINT)&sPeakBandwidth);
          vIncrementBandwidth(&sReqPeakBandwidth, (LPFIXEDPOINT)&sPeakBandwidth);
        }
      }

      lpModeTemp++;
      lpulDisplaysTypeTemp++;
    }

    // Now perform the validation between available and requested
    bRet = (bCompareFixed(&sAvailBandwidth, &sReqBandwidth) && 
            bCompareFixed(&sAvailPeakBandwidth, &sReqPeakBandwidth));

    if (!(lpHDE->bEnableBandwidthTest))
      bRet = TRUE;

    // Reset the pointers
    lpModeTemp = lpMode;
    lpulDisplaysTypeTemp = lpulDisplaysType;
  }

  //
  // HTime validation (only perform if bandwidth validation passes)
  //
  if (bPerformHTime && bRet)
  {
    ZEROMEMORY((LPVOID)aTotalHTime, (MAX_NUMBER_CONTROLLERS * sizeof(HORIZONTAL_TIME)));
    ZEROMEMORY((LPVOID)aPrioTable, (MAX_PRIO_ELEM * sizeof(PRIO_ELEM)));

    for (i = 0; i < lpHDE->ulControllersCount; i++)
    {
      lpController = (LPDEVGCO) &lpHDE->aControllers[i];

      if (*lpulDisplaysTypeTemp != 0)
      {
        // Get Horizontal Total Time
        (*lpController->lpHWED->pfnGetTotalHTime)(lpController->hGCO, (LPHORIZONTAL_TIME)&aTotalHTime[i], 
                                                  lpModeTemp, *lpulDisplaysTypeTemp);

        // Get display index for priority table
        ulIndex = 7 - (i * 3);

        // Fill in the fields for this controller element
        aPrioTable[ulIndex].bEnabled = TRUE;
        aPrioTable[ulIndex].ulMappedController = i;
        (*lpController->lpHWED->pfnCalculateModeHorizontalTime)(lpController->hGCO,
        

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费av资源| 亚洲女人的天堂| 精品一区二区在线免费观看| 欧美高清dvd| 蜜桃视频一区二区三区| 国产精品视频一区二区三区不卡| 久久福利资源站| 久久久精品一品道一区| 不卡的av电影在线观看| 亚洲精品免费看| 欧美一区二区三区在线观看视频| 奇米色777欧美一区二区| www久久精品| 成年人午夜久久久| 天堂av在线一区| 久久婷婷久久一区二区三区| 97se狠狠狠综合亚洲狠狠| 亚洲最大的成人av| 日韩欧美综合在线| 99r国产精品| 日本人妖一区二区| 国产精品乱人伦一区二区| 欧美三级一区二区| 韩日欧美一区二区三区| 亚洲三级免费电影| 欧美一区二区三区四区视频| 成人综合婷婷国产精品久久 | 国产精品一区专区| 一区二区三区四区中文字幕| 制服丝袜亚洲网站| 国产成人亚洲综合a∨猫咪| 一区二区三区中文字幕精品精品| 91精品国产综合久久婷婷香蕉| 国产精品99久久久久久似苏梦涵 | 亚洲国产精品自拍| 国产欧美日韩综合精品一区二区| 欧美午夜精品免费| 国产不卡在线播放| 亚洲成av人在线观看| 国产精品入口麻豆原神| 日韩视频免费直播| 在线一区二区视频| 国产精品18久久久久久久网站| 亚洲曰韩产成在线| 亚洲国产成人私人影院tom | 欧美最猛性xxxxx直播| 韩国av一区二区| 肉丝袜脚交视频一区二区| 国产精品无圣光一区二区| 日韩欧美国产小视频| 欧美综合色免费| 成人国产精品免费| 国产激情一区二区三区桃花岛亚洲| 亚洲高清在线精品| 椎名由奈av一区二区三区| 精品av综合导航| 69p69国产精品| 欧亚洲嫩模精品一区三区| 成人黄色777网| 高清在线成人网| 成人h动漫精品一区二区| 美女高潮久久久| 日本不卡免费在线视频| 午夜一区二区三区视频| 亚洲激情一二三区| 亚洲欧美激情在线| 国产精品国产三级国产a| 国产日韩精品视频一区| 久久亚洲精品小早川怜子| 日韩亚洲欧美一区| 欧美一区二区成人| 欧美一区二区三区四区视频 | 男女激情视频一区| 日韩精品电影一区亚洲| 午夜日韩在线电影| 天天亚洲美女在线视频| 香蕉成人伊视频在线观看| 无码av免费一区二区三区试看| 亚洲精品福利视频网站| 一区二区成人在线视频| 亚洲一区免费观看| 婷婷激情综合网| 五月激情综合婷婷| 日韩vs国产vs欧美| 日本欧美一区二区三区| 美女精品一区二区| 国产乱码一区二区三区| 丁香亚洲综合激情啪啪综合| 99精品一区二区三区| 99精品视频免费在线观看| 在线视频中文字幕一区二区| 欧美中文字幕一区| 欧美高清www午色夜在线视频| 欧美一区二区三区视频免费 | 天堂在线一区二区| 久久激情五月婷婷| 国产激情视频一区二区三区欧美 | 色猫猫国产区一区二在线视频| 色狠狠色狠狠综合| 欧美伦理电影网| 精品久久人人做人人爽| 国产日韩欧美不卡在线| 亚洲精品综合在线| 蜜桃av一区二区| 高清国产一区二区三区| 色婷婷综合久色| 日韩一区二区免费视频| 欧美高清一级片在线观看| 一区二区国产视频| 麻豆传媒一区二区三区| 丁香婷婷综合激情五月色| 欧洲精品一区二区三区在线观看| 欧美一级黄色片| 亚洲天堂免费看| 日韩中文字幕av电影| 成人开心网精品视频| 欧美乱熟臀69xxxxxx| 国产日韩一级二级三级| 五月激情丁香一区二区三区| 国产iv一区二区三区| 欧美日韩午夜在线视频| 国产午夜精品理论片a级大结局| 亚洲综合丁香婷婷六月香| 国产一区二区在线影院| 在线亚洲+欧美+日本专区| 久久综合九色综合97婷婷女人 | 一区二区高清免费观看影视大全 | jlzzjlzz国产精品久久| 欧美日韩一区三区| 中文字幕国产一区| 美国十次综合导航| 在线观看区一区二| 中文字幕精品—区二区四季| 青青草97国产精品免费观看| 色综合久久久久综合| 26uuu精品一区二区在线观看| 亚洲电影第三页| www.亚洲免费av| 久久综合色综合88| 丝袜诱惑制服诱惑色一区在线观看| 成人禁用看黄a在线| 精品成人一区二区三区| 日本欧美一区二区三区乱码| 欧美影视一区在线| 国产精品久久久久影院色老大| 精品一区二区在线免费观看| 555夜色666亚洲国产免| 亚洲在线一区二区三区| 97久久超碰国产精品| 国产精品私人自拍| 国产成人精品亚洲午夜麻豆| 欧美变态tickling挠脚心| 日韩电影在线观看一区| 欧美日韩一区二区三区高清| 亚洲少妇30p| hitomi一区二区三区精品| 久久久久亚洲综合| 国模套图日韩精品一区二区| 日韩欧美在线一区二区三区| 亚洲影院理伦片| 欧美系列在线观看| 亚洲一区二区三区四区五区中文| 国产成人av自拍| 欧美国产日韩精品免费观看| 国产一区在线观看视频| 日韩免费观看高清完整版| 国产精品亚洲专一区二区三区 | 国产激情一区二区三区| 久久亚洲私人国产精品va媚药| 精品一区精品二区高清| 久久综合网色—综合色88| 国产毛片精品一区| 久久精品人人爽人人爽| 成人av资源下载| 亚洲柠檬福利资源导航| 欧美视频一区二区| 午夜精品福利视频网站| 欧美一区二区三区四区在线观看| 美女视频黄 久久| 久久精品人人爽人人爽| 99综合影院在线| 一区二区三区日韩在线观看| 欧美三级电影在线观看| 美女诱惑一区二区| 国产亚洲婷婷免费| 91猫先生在线| 午夜精品福利在线| 26uuu精品一区二区| 不卡的av在线播放| 亚洲bt欧美bt精品| 久久亚洲春色中文字幕久久久| 国产黑丝在线一区二区三区| 亚洲视频1区2区| 91精品在线麻豆| 国产成人在线视频网址| 一区二区三区免费| 欧美成人一区二区三区片免费| 福利电影一区二区三区| 亚洲国产精品久久人人爱| 久久久久国产精品麻豆ai换脸|