Author: grehan
Date: Fri May  4 01:36:49 2018
New Revision: 333235
URL: https://svnweb.freebsd.org/changeset/base/333235

Log:
  Allow arbitrary numbers of columns for VNC server screen resolution.
  
  The prior code only allowed multiples of 32 for the
  numbers of columns. Remove this restriction to allow
  a forthcoming UEFI firmware update to allow arbitrary
  x,y resolutions.
  
  (the code for handling rows already supported non mult-32 values)
  
  Reviewed by:  Leon Dang (original author)
  MFC after:    3 weeks
  Differential Revision:        https://reviews.freebsd.org/D15274

Modified:
  head/usr.sbin/bhyve/rfb.c

Modified: head/usr.sbin/bhyve/rfb.c
==============================================================================
--- head/usr.sbin/bhyve/rfb.c   Fri May  4 00:56:41 2018        (r333234)
+++ head/usr.sbin/bhyve/rfb.c   Fri May  4 01:36:49 2018        (r333235)
@@ -541,40 +541,23 @@ rfb_send_screen(struct rfb_softc *rc, int cfd, int all
                }
 
                for (x = 0; x < xcells; x++) {
+                       if (x == (xcells - 1) && rem_x > 0)
+                               cellwidth = rem_x;
+                       else
+                               cellwidth = PIX_PER_CELL;
+
                        if (rc->hw_crc)
                                crc_p[x] = fast_crc32(p,
-                                            PIX_PER_CELL * sizeof(uint32_t),
+                                            cellwidth * sizeof(uint32_t),
                                             crc_p[x]);
                        else
                                crc_p[x] = (uint32_t)crc32(crc_p[x],
                                             (Bytef *)p,
-                                            PIX_PER_CELL * sizeof(uint32_t));
+                                            cellwidth * sizeof(uint32_t));
 
-                       p += PIX_PER_CELL;
+                       p += cellwidth;
 
                        /* check for crc delta if last row in cell */
-                       if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) {
-                               if (orig_crc[x] != crc_p[x]) {
-                                       orig_crc[x] = crc_p[x];
-                                       crc_p[x] = 1;
-                                       changes++;
-                               } else {
-                                       crc_p[x] = 0;
-                               }
-                       }
-               }
-
-               if (rem_x) {
-                       if (rc->hw_crc)
-                               crc_p[x] = fast_crc32(p,
-                                                   rem_x * sizeof(uint32_t),
-                                                   crc_p[x]);
-                       else
-                               crc_p[x] = (uint32_t)crc32(crc_p[x],
-                                                   (Bytef *)p,
-                                                   rem_x * sizeof(uint32_t));
-                       p += rem_x;
-
                        if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) {
                                if (orig_crc[x] != crc_p[x]) {
                                        orig_crc[x] = crc_p[x];
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to