[PATCH] fbdev: Remove software clipping from drawing functions
authorAntonino A. Daplas <adaplas@gmail.com>
Mon, 7 Nov 2005 09:00:39 +0000 (01:00 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 7 Nov 2005 15:53:51 +0000 (07:53 -0800)
Remove software clipping from imageblit, fillrect and copyarea.  Clipping is
not needed because the console layer assures that reads/writes doest not
happen beyond the extents of the framebuffer.  And software clipping tends to
hide bugs, if they do exist.

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/video/cfbcopyarea.c
drivers/video/cfbfillrect.c
drivers/video/cfbimgblt.c

index 67711f7b11b14229f6cd8604c73c05b48c966b3c..cdc71572cf356d26955ec256d42e6c1149663108 100644 (file)
@@ -349,46 +349,10 @@ void cfb_copyarea(struct fb_info *p, const struct fb_copyarea *area)
        unsigned long __iomem *dst = NULL, *src = NULL;
        int bits = BITS_PER_LONG, bytes = bits >> 3;
        int dst_idx = 0, src_idx = 0, rev_copy = 0;
        unsigned long __iomem *dst = NULL, *src = NULL;
        int bits = BITS_PER_LONG, bytes = bits >> 3;
        int dst_idx = 0, src_idx = 0, rev_copy = 0;
-       int x2, y2, vxres, vyres;
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
-       /* We want rotation but lack hardware to do it for us. */
-       if (!p->fbops->fb_rotate && p->var.rotate) {
-       }
-
-       vxres = p->var.xres_virtual;
-       vyres = p->var.yres_virtual;
-
-       if (area->dx > vxres || area->sx > vxres ||
-           area->dy > vyres || area->sy > vyres)
-               return;
-
-       /* clip the destination
-        * We could use hardware clipping but on many cards you get around
-        * hardware clipping by writing to framebuffer directly.
-        */
-       x2 = area->dx + area->width;
-       y2 = area->dy + area->height;
-       dx = area->dx > 0 ? area->dx : 0;
-       dy = area->dy > 0 ? area->dy : 0;
-       x2 = x2 < vxres ? x2 : vxres;
-       y2 = y2 < vyres ? y2 : vyres;
-       width = x2 - dx;
-       height = y2 - dy;
-
-       if ((width==0) ||(height==0))
-               return;
-
-       /* update sx1,sy1 */
-       sx += (dx - area->dx);
-       sy += (dy - area->dy);
-
-       /* the source must be completely inside the virtual screen */
-       if (sx < 0 || sy < 0 || (sx + width) > vxres || (sy + height) > vyres)
-               return;
-
        /* if the beginning of the target area might overlap with the end of
        the source area, be have to copy the area reverse. */
        if ((dy == sy && dx > sx) || (dy > sy)) {
        /* if the beginning of the target area might overlap with the end of
        the source area, be have to copy the area reverse. */
        if ((dy == sy && dx > sx) || (dy > sy)) {
index e4fc42b013ebdb7f3bab16ef7f33c0d4d7a2573f..167d9314e6eb49c6ae25683e940563ef92f6ca1c 100644 (file)
@@ -344,7 +344,8 @@ bitfill_unaligned_rev(unsigned long __iomem *dst, int dst_idx, unsigned long pat
 
 void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
 {
 
 void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
 {
-       unsigned long x2, y2, vxres, vyres, height, width, pat, fg;
+       unsigned long pat, fg;
+       unsigned long width = rect->width, height = rect->height;
        int bits = BITS_PER_LONG, bytes = bits >> 3;
        u32 bpp = p->var.bits_per_pixel;
        unsigned long __iomem *dst;
        int bits = BITS_PER_LONG, bytes = bits >> 3;
        u32 bpp = p->var.bits_per_pixel;
        unsigned long __iomem *dst;
@@ -353,27 +354,6 @@ void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
-       /* We want rotation but lack hardware to do it for us. */
-       if (!p->fbops->fb_rotate && p->var.rotate) {
-       }
-
-       vxres = p->var.xres_virtual;
-       vyres = p->var.yres_virtual;
-
-       if (!rect->width || !rect->height ||
-           rect->dx > vxres || rect->dy > vyres)
-               return;
-
-       /* We could use hardware clipping but on many cards you get around
-        * hardware clipping by writing to framebuffer directly. */
-
-       x2 = rect->dx + rect->width;
-       y2 = rect->dy + rect->height;
-       x2 = x2 < vxres ? x2 : vxres;
-       y2 = y2 < vyres ? y2 : vyres;
-       width = x2 - rect->dx;
-       height = y2 - rect->dy;
-
        if (p->fix.visual == FB_VISUAL_TRUECOLOR ||
            p->fix.visual == FB_VISUAL_DIRECTCOLOR )
                fg = ((u32 *) (p->pseudo_palette))[rect->color];
        if (p->fix.visual == FB_VISUAL_TRUECOLOR ||
            p->fix.visual == FB_VISUAL_DIRECTCOLOR )
                fg = ((u32 *) (p->pseudo_palette))[rect->color];
index 4c123abaa843166f43dd1ae93e77ef43fb4d1f8f..da664cea7ecac216072d5fda2aeaa05178a3e696 100644 (file)
@@ -272,33 +272,13 @@ void cfb_imageblit(struct fb_info *p, const struct fb_image *image)
 {
        u32 fgcolor, bgcolor, start_index, bitstart, pitch_index = 0;
        u32 bpl = sizeof(u32), bpp = p->var.bits_per_pixel;
 {
        u32 fgcolor, bgcolor, start_index, bitstart, pitch_index = 0;
        u32 bpl = sizeof(u32), bpp = p->var.bits_per_pixel;
-       u32 width = image->width, height = image->height; 
+       u32 width = image->width;
        u32 dx = image->dx, dy = image->dy;
        u32 dx = image->dx, dy = image->dy;
-       int x2, y2, vxres, vyres;
        u8 __iomem *dst1;
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
        u8 __iomem *dst1;
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
-       vxres = p->var.xres_virtual;
-       vyres = p->var.yres_virtual;
-       /* 
-        * We could use hardware clipping but on many cards you get around
-        * hardware clipping by writing to framebuffer directly like we are
-        * doing here. 
-        */
-       if (image->dx > vxres || image->dy > vyres)
-               return;
-
-       x2 = image->dx + image->width;
-       y2 = image->dy + image->height;
-       dx = image->dx > 0 ? image->dx : 0;
-       dy = image->dy > 0 ? image->dy : 0;
-       x2 = x2 < vxres ? x2 : vxres;
-       y2 = y2 < vyres ? y2 : vyres;
-       width  = x2 - dx;
-       height = y2 - dy;
-
        bitstart = (dy * p->fix.line_length * 8) + (dx * bpp);
        start_index = bitstart & (32 - 1);
        pitch_index = (p->fix.line_length & (bpl - 1)) * 8;
        bitstart = (dy * p->fix.line_length * 8) + (dx * bpp);
        start_index = bitstart & (32 - 1);
        pitch_index = (p->fix.line_length & (bpl - 1)) * 8;