VirtualBox

Changeset 65305 in vbox for trunk/src/VBox/Devices/Graphics


Ignore:
Timestamp:
Jan 16, 2017 8:12:05 AM (8 years ago)
Author:
vboxsync
Message:

VMSVGA/Cursor: 1-bit XOR conversion fix. Multi-bit AND mask conversion hacks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp

    r65303 r65305  
    24462446            }
    24472447            break;
     2448        /* Should take the XOR mask into account for the multi-bit AND mask. */
    24482449        case 8:
    24492450            for (uint32_t y = 0; y < cy; y++)
     
    24552456                    do
    24562457                    {
    2457                         if (pbSrc[x])
     2458                        uintptr_t const idxPal = pbSrc[x] * 3;
     2459                        if ((  pThis->last_palette[idxPal + 2]
     2460                             | pThis->last_palette[idxPal + 1]
     2461                             | pThis->last_palette[idxPal + 0]) > 0xfc)
    24582462                            bDst |= fBit;
    24592463                        fBit <<= 1;
     
    24752479                    do
    24762480                    {
    2477                         if (pbSrc[x * 2] || (pbSrc[x * 2 + 1] & 0x7f))
     2481                        if ((pbSrc[x * 2] | (pbSrc[x * 2 + 1] & 0x7f)) >= 0xfc)
    24782482                            bDst |= fBit;
    24792483                        fBit <<= 1;
     
    24952499                    do
    24962500                    {
    2497                         if (pbSrc[x * 2] || pbSrc[x * 2 + 1])
     2501                        if ((pbSrc[x * 2] | pbSrc[x * 2 + 1]) >= 0xfc)
    24982502                            bDst |= fBit;
    24992503                        fBit <<= 1;
     
    25152519                    do
    25162520                    {
    2517                         if (pbSrc[x * 3] || pbSrc[x * 3 + 1] || pbSrc[x * 3 + 2])
     2521                        if ((pbSrc[x * 3] | pbSrc[x * 3 + 1] | pbSrc[x * 3 + 2]) >= 0xfc)
    25182522                            bDst |= fBit;
    25192523                        fBit <<= 1;
     
    25342538                    do
    25352539                    {
    2536                         if (pbSrc[x * 4] || pbSrc[x * 4 + 1] || pbSrc[x * 4 + 2] || pbSrc[x * 4 + 3])
     2540                        if ((pbSrc[x * 4] | pbSrc[x * 4 + 1] | pbSrc[x * 4 + 2] | pbSrc[x * 4 + 3]) >= 0xfc)
    25372541                            bDst |= fBit;
    25382542                        fBit <<= 1;
     
    25582562            for (uint32_t y = 0; y < cy; y++)
    25592563            {
    2560                 for (uint32_t x = 0; x < cx; x++)
    2561                     *pu32Dst++ = ASMBitTest(pbSrc, x) ? UINT32_C(0x00ffffff) : 0;
     2564                for (uint32_t x = 0; x < cx; )
     2565                {
     2566                    /* most significant bit is the left most one. */
     2567                    uint8_t bSrc = pbSrc[x / 8];
     2568                    do
     2569                    {
     2570                        *pu32Dst++ = bSrc & 0x80 ? UINT32_C(0x00ffffff) : 0;
     2571                        bSrc <<= 1;
     2572                        x++;
     2573                    } while ((x & 7) && x < cx);
     2574                }
    25622575                pbSrc += cbSrcXorLine;
    25632576            }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette