static void _g2d_drv_overlay_set_roi_info(G2D_HANDLE_STRUCT *handle)
{
   G2D_OVERLAY_STRUCT *overlayFunc = &(handle->overlayFunc);
   G2D_WINDOW_STRUCT *roiWindow = &(handle->overlayFunc.roiWindow);

   /// setting the avoidance and replacement colors
   g2d_drv_set_replacement_colors(handle);

   /// setting the clipping window
   g2d_drv_set_clipping_window(handle);

   SET_G2D_ROI_OFFSET(roiWindow->topLeft.x, roiWindow->topLeft.y);
   SET_G2D_ROI_SIZE(roiWindow->buttomRight.x - roiWindow->topLeft.x + 1, roiWindow->buttomRight.y - roiWindow->topLeft.y + 1);

   #if defined(G2D_FPGA)
      if(KAL_TRUE == (overlayFunc->backgroundDisable))
      {
         DISABLE_G2D_ROI_CON_BG;
      }
      else
      {
         SET_G2D_ROI_CON_BG_COLOR(overlayFunc->backgroundColor);
      }
   #else
      SET_G2D_ROI_CON_BG_COLOR(overlayFunc->backgroundColor);
   #endif
   
   if(KAL_TRUE == (overlayFunc->dstAlphaEnable))
   {
      ENABLE_G2D_ROI_CON_ALPHA;
      SET_G2D_ROI_CON_ALPHA(overlayFunc->dstAlphaValue);
   }

   /// color setting is on _g2d_drv_overlay_set_dst_info
   //Enable Tile
   {
      #if defined(G2D_FPGA)
         ///if(KAL_FALSE == (handle->auto_tile_size_enable))
         ///{
         ///   REG_G2D_ROI_CON |= G2D_ROI_CON_ENABLE_FORCE_TS_BIT;
         ///   switch(handle->tile_size)
         ///   {
         ///      case G2D_TILE_SIZE_TYPE_8x8:
         ///         REG_G2D_ROI_CON |= G2D_ROI_CON_TILE_SIZE_8x8_BIT;
         ///      break;
         ///      case G2D_TILE_SIZE_TYPE_16x8:
         ///         REG_G2D_ROI_CON |= G2D_ROI_CON_TILE_SIZE_16x8_BIT;
         ///      break;
         ///      default:
         ///         ASSERT(0);
         ///   }
         ///}
      #else
      #endif
   }
}
static void _g2d_drv_set_roi_info(g2d_context_t *g2d_ctx)
{
    SET_G2D_ROI_OFFSET(g2d_ctx->dst.offset.x, g2d_ctx->dst.offset.y);
    SET_G2D_ROI_SIZE(g2d_ctx->dst.width, g2d_ctx->dst.height);

    if (g2d_ctx->flag & G2D_FLAG_AFFINE_TRANSFORM)
    {
        REG_G2D_ROI_CON |= G2D_ROI_CON_ENABLE_FORCE_TS_BIT;
        REG_G2D_ROI_CON |= G2D_ROI_CON_TILE_SIZE_16x8_BIT;
    }

    if (g2d_ctx->flag & G2D_FLAG_BACKGROUND_COLOR)
    {
        SET_G2D_ROI_CON_BG_COLOR(g2d_ctx->bg_color);
    }
    else
    {
        DISABLE_G2D_ROI_CON_BG;
    }
}
static void _g2d_drv_rectfill_set_info(G2D_HANDLE_STRUCT *handle)
{
   G2D_RECTANGLE_FILL_STRUCT *rectFillFunc = &(handle->rectFillFunc);
   G2D_CANVAS_INFO_STRUCT *srcCanvas = &(rectFillFunc->srcCanvas);

   G2D_CANVAS_INFO_STRUCT *dstCanvas  = &(handle->dstCanvas);
   #if defined(G2D_FPGA)
      G2D_WINDOW_STRUCT *dstWindow  = &(handle->rectFillFunc.dstWindow);
   #else
      G2D_WINDOW_STRUCT  *dstWindow = &(handle->targetClipWindow);
   #endif
   G2D_COORDINATE_STRUCT *topLeft     = &(dstWindow->topLeft);
   G2D_COORDINATE_STRUCT *buttomRight = &(dstWindow->buttomRight);
   kal_uint32 width, height, pitch, srcpitch;

   /// destination base addr
   ASSERT(dstCanvas->RGBBufferAddr);
   //SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr));
   REG_G2D_W2M_ADDR = (kal_int32)dstCanvas->RGBBufferAddr;

   /// destination pitch
   pitch = (dstCanvas->width) * (dstCanvas->bytesPerPixel);
   ASSERT(((unsigned)pitch) <= 0x2000);
   //SET_G2D_LAYER_PITCH(0, pitch);
   SET_G2D_LAYER_PITCH(1, pitch);
   REG_G2D_W2M_PITCH = pitch;

   /// -2048 <= x <= 2047
   ASSERT(((unsigned)((topLeft->x) + 2048)) < 4096);
   ASSERT(((unsigned)((topLeft->y) + 2048)) < 4096);
   /// destination rectangle start point(x,y)
   SET_G2D_W2M_OFFSET(topLeft->x, topLeft->y);
   SET_G2D_ROI_OFFSET(topLeft->x, topLeft->y);
   //SET_G2D_LAYER_OFFSET(0, 0, 0);
   SET_G2D_LAYER_OFFSET(1, topLeft->x, topLeft->y);

   width = buttomRight->x - topLeft->x + 1;
   height = buttomRight->y - topLeft->y + 1;

   /// 1 <= x <= 2048
   ASSERT(((unsigned)(width - 1)) <= 2048);
   ASSERT(((unsigned)(height - 1)) <= 2048);
   /// destination rectangle width and height
   REG_G2D_ROI_SIZE = (width << 16) | height;
   //SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height);
   SET_G2D_LAYER_SIZE(1, width, height);

   if (KAL_TRUE == rectFillFunc->overlayBufferEnable)
   {
      srcpitch = (srcCanvas->width) * (srcCanvas->bytesPerPixel);
      ASSERT(((unsigned)srcpitch) <= 0x2000);
      SET_G2D_LAYER_PITCH(1, srcpitch);
      SET_G2D_LAYER_ADDR(0, (kal_uint32)(srcCanvas->RGBBufferAddr));
      SET_G2D_LAYER_OFFSET(0, 0, 0);
      SET_G2D_LAYER_SIZE(0, srcCanvas->width, srcCanvas->height);
      /// set src_clr_fmt bits
      switch(srcCanvas->colorFormat)
      {
         case G2D_COLOR_FORMAT_GRAY:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_GRAY);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_GRAY);
         break;
         case G2D_COLOR_FORMAT_RGB565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565);
         break;
         case G2D_COLOR_FORMAT_ARGB8888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888);
         break;
         case G2D_COLOR_FORMAT_RGB888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888);
         break;
         case G2D_COLOR_FORMAT_BGR888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888);
         break;
         case G2D_COLOR_FORMAT_PARGB8888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888);
         break;
         case G2D_COLOR_FORMAT_UYVY422:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_UYVY);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_UYVY);
         break;
         case G2D_COLOR_FORMAT_ARGB8565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8565);
         break;
         case G2D_COLOR_FORMAT_PARGB8565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8565);
         break;
         case G2D_COLOR_FORMAT_ARGB6666:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666);
         break;
         case G2D_COLOR_FORMAT_PARGB6666:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666);
         break;
         default:
            ASSERT(0);
         break;
      }

   }
   else
   {
     SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr));
     SET_G2D_LAYER_PITCH(0, pitch);
     SET_G2D_LAYER_OFFSET(0, 0, 0);
     SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height);

     /// setting destination color format bits
     switch(dstCanvas->colorFormat)
     {
        case G2D_COLOR_FORMAT_RGB565:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565);
        break;
        case G2D_COLOR_FORMAT_ARGB6666:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666);
        break;
        case G2D_COLOR_FORMAT_ARGB8888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888);
        break;
        case G2D_COLOR_FORMAT_RGB888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888);
        break;
        case G2D_COLOR_FORMAT_BGR888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888);
        break;
        case G2D_COLOR_FORMAT_PARGB6666:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666);
        break;
        case G2D_COLOR_FORMAT_PARGB8888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888);
        break;
        default:
           ASSERT(0);
        break;
     }

   }

   /// setting destination color format bits
   switch(dstCanvas->colorFormat)
   {
      case G2D_COLOR_FORMAT_RGB565:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB565);
      break;
      case G2D_COLOR_FORMAT_ARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB6666);
      break;
      case G2D_COLOR_FORMAT_ARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB8888);
      break;
      case G2D_COLOR_FORMAT_RGB888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB888);
      break;
      case G2D_COLOR_FORMAT_BGR888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_BGR888);
      break;
      case G2D_COLOR_FORMAT_PARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB6666);
      break;
      case G2D_COLOR_FORMAT_PARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB8888);
      break;
      default:
         ASSERT(0);
      break;
   }

   if(KAL_TRUE == (rectFillFunc->srcAlphaEnable))
   {
      ENABLE_G2D_LAYER_CON_ALPHA(1);
      SET_G2D_LAYER_CON_ALPHA(1, rectFillFunc->srcAlphaValue);
      //ENABLE_G2D_ROI_LAYER(0);
      ENABLE_G2D_ROI_LAYER_0;
   }

   /// Set color;
   SET_G2D_LAYER_RECTANGLE_FILL_COLOR(1, (kal_uint32)rectFillFunc->rectFillColor);
   ENABLE_G2D_ROI_LAYER(1);
}