Index: gfxdrivers/ati128/ati128_overlay.c
===================================================================
RCS file: /cvs/directfb/DirectFB/gfxdrivers/ati128/ati128_overlay.c,v
retrieving revision 1.15
diff -u -r1.15 ati128_overlay.c
--- gfxdrivers/ati128/ati128_overlay.c	19 Dec 2002 20:53:37 -0000	1.15
+++ gfxdrivers/ati128/ati128_overlay.c	11 Sep 2003 22:04:43 -0000
@@ -293,7 +293,19 @@
                 void                *layer_data,
                 DFBSurfaceFlipFlags  flags )
 {
-     return DFB_UNIMPLEMENTED;
+     ATI128DriverData    *adrv = (ATI128DriverData*) driver_data;
+     ATIOverlayLayerData *aov0 = (ATIOverlayLayerData*) layer_data;
+     CoreSurface        *surface = dfb_layer_surface( layer );
+
+     dfb_surface_flip_buffers( surface );
+
+     ov0_calc_regs( adrv, aov0, layer, &aov0->config );
+     ov0_set_regs( adrv, aov0 );
+
+     if (flags & DSFLIP_WAITFORSYNC)
+          dfb_layer_wait_vsync( dfb_layer_at( DLID_PRIMARY ) );
+
+     return DFB_OK;
 }
 
 static DFBResult
@@ -407,7 +419,6 @@
      
      CoreSurface   *surface      = dfb_layer_surface( layer );
      SurfaceBuffer *front_buffer = surface->front_buffer;
-
      
      /* destination box */
      dstBox.x1 = aov0->dest.x;
@@ -450,15 +461,15 @@
      /* choose pixel format and calculate buffer offsets for planar modes */
      switch (surface->format) {
           case DSPF_UYVY:
-               aov0->regs.SCALE_CNTL = R128_SCALER_SOURCE_YVYU422;
+               aov0->regs.SCALE_CNTL |= R128_SCALER_SOURCE_YVYU422;
                break;
 
           case DSPF_YUY2:
-               aov0->regs.SCALE_CNTL = R128_SCALER_SOURCE_VYUY422;
+               aov0->regs.SCALE_CNTL |= R128_SCALER_SOURCE_VYUY422;
                break;
 
           case DSPF_I420:
-               aov0->regs.SCALE_CNTL = R128_SCALER_SOURCE_YUV12;
+               aov0->regs.SCALE_CNTL |= R128_SCALER_SOURCE_YUV12;
 
                offset_u = front_buffer->video.offset +
                           surface->height * front_buffer->video.pitch;
@@ -467,7 +478,7 @@
                break;
 
           case DSPF_YV12:
-               aov0->regs.SCALE_CNTL = R128_SCALER_SOURCE_YUV12;
+               aov0->regs.SCALE_CNTL |= R128_SCALER_SOURCE_YUV12;
 
                offset_v = front_buffer->video.offset +
                           surface->height * front_buffer->video.pitch;
@@ -484,7 +495,8 @@
      aov0->regs.SCALE_CNTL            |= R128_SCALER_DOUBLE_BUFFER |
                                          R128_SCALER_BURST_PER_PLANE |
                                          R128_SCALER_Y2R_TEMP |
-                                         R128_SCALER_PIX_EXPAND;
+                                         R128_SCALER_PIX_EXPAND |
+                                         R128_SCALER_SMART_SWITCH;
 
      aov0->regs.H_INC                  = h_inc | ((h_inc >> 1) << 16);
      aov0->regs.V_INC                  = v_inc;
