From owner-svn-src-head@freebsd.org Sun Mar 24 19:27:05 2019 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 036661533FBC; Sun, 24 Mar 2019 19:27:05 +0000 (UTC) (envelope-from bde@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8F72393228; Sun, 24 Mar 2019 19:27:04 +0000 (UTC) (envelope-from bde@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 688C024B0B; Sun, 24 Mar 2019 19:27:04 +0000 (UTC) (envelope-from bde@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2OJR45N031376; Sun, 24 Mar 2019 19:27:04 GMT (envelope-from bde@FreeBSD.org) Received: (from bde@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2OJR4C9031375; Sun, 24 Mar 2019 19:27:04 GMT (envelope-from bde@FreeBSD.org) Message-Id: <201903241927.x2OJR4C9031375@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bde set sender to bde@FreeBSD.org using -f From: Bruce Evans Date: Sun, 24 Mar 2019 19:27:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r345481 - head/lib/libvgl X-SVN-Group: head X-SVN-Commit-Author: bde X-SVN-Commit-Paths: head/lib/libvgl X-SVN-Commit-Revision: 345481 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 8F72393228 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.96)[-0.963,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Mar 2019 19:27:05 -0000 Author: bde Date: Sun Mar 24 19:27:03 2019 New Revision: 345481 URL: https://svnweb.freebsd.org/changeset/base/345481 Log: Fix reading of pixels in (4 and 8-plane) planar modes. There seems to be no alternative to reading each plane independently using 3 slow i/o's per plane (this delivers 8 nearby pixels, but we don't buffer the results so run 8 times slower than necessary. All the code for this was there, but it was ifdefed out and replaced by simpler code that cannot work in planar modes. The ifdefed out code was correct except it was missing a volatile declaration, so compilers optimized the multiple dummy reads in it to a single read. Modified: head/lib/libvgl/simple.c Modified: head/lib/libvgl/simple.c ============================================================================== --- head/lib/libvgl/simple.c Sun Mar 24 19:11:45 2019 (r345480) +++ head/lib/libvgl/simple.c Sun Mar 24 19:27:03 2019 (r345481) @@ -148,11 +148,9 @@ VGLGetXY(VGLBitmap *object, int x, int y) { int offset; byte b[4]; -#if 0 int i; u_long color; byte mask; -#endif VGLCheckSwitch(); if (x<0 || x>=object->VXsize || y<0 || y>=object->VYsize) @@ -185,17 +183,14 @@ VGLGetXY(VGLBitmap *object, int x, int y) case VIDBUF4: offset = y*VGLAdpInfo.va_line_width + x/8; get_planar: -#if 1 - return (object->Bitmap[offset]&(0x80>>(x%8))) ? 1 : 0; /* XXX */ -#else color = 0; mask = 0x80 >> (x%8); for (i = 0; i < VGLModeInfo.vi_planes; i++) { outb(0x3ce, 0x04); outb(0x3cf, i); - color |= (object->Bitmap[offset] & mask) ? (1 << i) : 0; + color |= (((volatile VGLBitmap *)object)->Bitmap[offset] & mask) ? + (1 << i) : 0; } return color; -#endif } return 0; /* XXX black? */ }