Compartilhar via


ATI Sample Display Driver Optimization

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

O driver ATI exemplo possui um emitir desempenho com vídeo memória para vídeo memória bloco bit transfere que também usar TRANPARENCY.

O seguinte mostra exemplo de código como resolver essa emitir usando este codificar para substituir o ATI::AcceleratedSrcCopyBlt função no Diretório de %_WINCEROOT%\Public\Common\OAK\Drivers\Display\ATI.

SCODE
ATI::AcceleratedSrcCopyBlt (GPEBltParms *pBltParms)
{
   DWORD  DstCntl = DST_Y_TOP_TO_BOTTOM | DST_X_LEFT_TO_RIGHT;
   int    srcX = pBltParms->prclSrc->left + ((ATISurf *) (pBltParms->pSrc))->Left(); // left of source rect
   int    srcY = pBltParms->prclSrc->top + ((ATISurf *) (pBltParms->pSrc))->Top();   // top of source rect
   int    dstX = pBltParms->prclDst->left + ((ATISurf *) (pBltParms->pDst))->Left(); // left of dest rect
   int    dstY = pBltParms->prclDst->top + ((ATISurf *) (pBltParms->pDst))->Top();   // top of dest rect
   int    width = pBltParms->prclDst->right  - pBltParms->prclDst->left;             // Rectangle Width Data Store
   int    height = pBltParms->prclDst->bottom - pBltParms->prclDst->top;             // Rectangle Height Data Store

   RETAILMSG (ATI_FUNCTION_MSGS, (TEXT("ATI::AcceleratedSrcCopyBlt()\r\n")));
 
   // check for negative x or y direction and correct values accordingly

   if (!pBltParms->xPositive)
   {
          srcX += (width - 1);
          dstX += (width - 1);
          DstCntl &= ~DST_X_LEFT_TO_RIGHT;
   }
 
   if (!pBltParms->yPositive)
   {
          srcY += (height - 1);
          dstY += (height - 1);
          DstCntl &= ~DST_Y_TOP_TO_BOTTOM;
   }
 
   WaitForFIFO(10);           // wait for max number of possibly used registers to be available
 
   if (pBltParms->bltFlags & BLT_TRANSPARENT)
   {
          _memwD_reg (CLR_CMP_CNTL, COMPARE_SOURCE | COMPARE_EQUAL);    // turn on transparency
          _memwD_reg (CLR_CMP_CLR, pBltParms->solidColor);              // set comparison color
   }
 
   switch (pBltParms->rop4)
   {
          case   0x6666:       // SRCINVERT
                 _memwD_reg (DP_MIX, FRGD_MIX_D_XOR_S | BKGD_MIX_D);
                 break;
 
          case   0x8888:       // SRCAND
                 _memwD_reg (DP_MIX, FRGD_MIX_D_AND_S | BKGD_MIX_D);
                 break;
 
          default:

          case   0xCCCC:       // SRCCOPY
                 _memwD_reg (DP_MIX, FRGD_MIX_S | BKGD_MIX_D);
                 break;
 
          case   0xEEEE:       // SRCPAINT
                 _memwD_reg (DP_MIX, FRGD_MIX_D_OR_S | BKGD_MIX_D);
                 break;
   }
 
   _memwD_reg (DP_SRC, FRGD_SRC_BLIT);
   _memwD_reg (SRC_Y_X, (srcX << 16) | srcY);
   _memwD_reg (SRC_HEIGHT1_WIDTH1, (width << 16) | height);
   _memwD_reg (DST_CNTL, DstCntl);
   _memwD_reg (DST_Y_X, (dstX << 16) | dstY);
   _memwD_reg (DST_HEIGHT_WIDTH, (width << 16) | height);
 
   if (pBltParms->bltFlags & BLT_TRANSPARENT)
   {
          _memwD_reg (CLR_CMP_CNTL, COMPARE_DESTINATION | COMPARE_FALSE);      // turn off Transparency

   }
 
   return S_OK;
}

See Also

Concepts

FLAT Sample Display Driver
ATI Sample Display Driver
Sample DrvEscape Function
Sample Blit Acceleration
Display Driver Performance Profiling
Display Driver Registry Settings
Display Driver Development Concepts
Display Driver Extensions
Display Driver Recommendations