Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Apr 2019 04:54:16 +0000 (UTC)
From:      Bruce Evans <bde@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r346025 - head/lib/libvgl
Message-ID:  <201904080454.x384sGZ2027271@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bde
Date: Mon Apr  8 04:54:15 2019
New Revision: 346025
URL: https://svnweb.freebsd.org/changeset/base/346025

Log:
  Fix copying of MEMBUFs to MEMBUFs.  This case was implemented by using
  the same code as the VIDBUF8 case, so it only worked for depths <= 8.
  The 2 directions for copying between VIDBUFs and MEMBUFs worked by using
  a Read/Write organization which makes the destination a VIDBUF so the
  MEMBUF case was not reached, and the VIDBUF cases have already been fixed.
  
  Fix this by removing "optimizations" for the VIDBUF8 case so that the
  MEMBUF case can fall through to the general (non-segmented) case.  The
  optimizations were to duplicate code for the VIDBUF8 case so as to
  avoid 2 multiplications by 1 at runtime.  This optimization is not useful
  since the multiplications are not in the inner loop.
  
  Remove the same "optimization" for the VIDBUF8S case.  It was even less
  useful there since it duplicated more to do relatively less.

Modified:
  head/lib/libvgl/bitmap.c

Modified: head/lib/libvgl/bitmap.c
==============================================================================
--- head/lib/libvgl/bitmap.c	Mon Apr  8 04:07:37 2019	(r346024)
+++ head/lib/libvgl/bitmap.c	Mon Apr  8 04:54:15 2019	(r346025)
@@ -136,16 +136,6 @@ WriteVerticalLine(VGLBitmap *dst, int x, int y, int wi
     }
     break;
   case VIDBUF8S:
-    pos = dst->VXsize * y + x;
-    while (width > 0) {
-      offset = VGLSetSegment(pos);
-      i = min(VGLAdpInfo.va_window_size - offset, width);
-      bcopy(line, dst->Bitmap + offset, i);
-      line += i;
-      pos += i;
-      width -= i;
-    }
-    break;
   case VIDBUF16S:
   case VIDBUF24S:
   case VIDBUF32S:
@@ -160,11 +150,8 @@ WriteVerticalLine(VGLBitmap *dst, int x, int y, int wi
       width -= i;
     }
     break;
-  case VIDBUF8:
   case MEMBUF:
-    address = dst->Bitmap + dst->VXsize * y + x;
-    bcopy(line, address, width);
-    break;
+  case VIDBUF8:
   case VIDBUF16:
   case VIDBUF24:
   case VIDBUF32:
@@ -251,16 +238,6 @@ read_planar:
     }
     break;
   case VIDBUF8S:
-    pos = src->VXsize * y + x;
-    while (width > 0) {
-      offset = VGLSetSegment(pos);
-      i = min(VGLAdpInfo.va_window_size - offset, width);
-      bcopy(src->Bitmap + offset, line, i);
-      line += i;
-      pos += i;
-      width -= i;
-    }
-    break;
   case VIDBUF16S:
   case VIDBUF24S:
   case VIDBUF32S:
@@ -275,11 +252,8 @@ read_planar:
       width -= i;
     }
     break;
-  case VIDBUF8:
   case MEMBUF:
-    address = src->Bitmap + src->VXsize * y + x;
-    bcopy(address, line, width);
-    break;
+  case VIDBUF8:
   case VIDBUF16:
   case VIDBUF24:
   case VIDBUF32:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201904080454.x384sGZ2027271>