Improve PMAKE on big endian machines and fix some bugs. Includes fix from #364. (jmarsh)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4310
This commit is contained in:
parent
88ac8b2dd9
commit
80c7bb7cc1
1 changed files with 41 additions and 11 deletions
|
@ -94,37 +94,67 @@
|
|||
|
||||
#if SBPP == 15
|
||||
#define SC scalerSourceCache.b16
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#if DBPP == 15 // GGGBBBBBxRRRRRGG -> xRRRRRGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL>>8)&0x00FF)|((_VAL<<8)&0xFF00))
|
||||
#elif DBPP == 16 // gggBBBBBxRRRRRGg -> RRRRRGggggGBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL>>8)&0x001F)|((_VAL>>7)&0x01C0)|((_VAL<<9)&0xFE00)|((_VAL<<4)&0x0020))
|
||||
#elif DBPP == 32 // GggBBBbbxRRRrrGG -> 00000000RRRrrRRRGGGggGGGBBBbbBBB
|
||||
#define PMAKE(_VAL) (((_VAL<<17)&0x00F80000)|((_VAL<<12)&0x00070000)|((_VAL<<14)&0x0000C000)|((_VAL>>2)&0x00003800)|((_VAL<<9)&0x00000600)|((_VAL>>7)&0x00000100)|((_VAL>>5)&0x000000F8)|((_VAL>>10)&0x00000007))
|
||||
#endif
|
||||
#else
|
||||
#if DBPP == 15
|
||||
#define PMAKE(_VAL) (_VAL)
|
||||
#elif DBPP == 16
|
||||
#define PMAKE(_VAL) (((_VAL) & 31) | ((_VAL) & ~31) << 1)
|
||||
#elif DBPP == 32
|
||||
#define PMAKE(_VAL) (((_VAL&(31<<10))<<9)|((_VAL&(31<<5))<<6)|((_VAL&31)<<3))
|
||||
#elif DBPP == 16 // xRRRRRGggggBBBBB -> RRRRRGggggGBBBBB
|
||||
#define PMAKE(_VAL) ((_VAL & 31)|((_VAL & ~31)<<1)|((_VAL&0x0200)>>4))
|
||||
#elif DBPP == 32 // xRRRrrGGGggBBBbb -> RRRrrRRRGGGggGGGBBBbbBBB
|
||||
#define PMAKE(_VAL) (((_VAL&(31<<10))<<9)|((_VAL&(31<<5))<<6)|((_VAL&31)<<3)|((_VAL&(7<<12))<<4)|((_VAL&(7<<7))<<1)|((_VAL&(7<<2))>>2))
|
||||
#endif
|
||||
#endif
|
||||
#define SRCTYPE Bit16u
|
||||
#endif
|
||||
|
||||
#if SBPP == 16
|
||||
#define SC scalerSourceCache.b16
|
||||
#if DBPP == 15
|
||||
#define PMAKE(_VAL) (((_VAL&~31)>>1)|(_VAL&31))
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#if DBPP == 15 // GGgBBBBBRRRRRGGG -> 0RRRRRGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL>>8)&0x001F)|((_VAL>>9)&0x0060)|((_VAL<<7)&0x7F80))
|
||||
#elif DBPP == 16 // GGGBBBBBRRRRRGGG -> RRRRRGGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL>>8)&0x00FF)|((_VAL<<8)&0xFF00))
|
||||
#elif DBPP == 32 // gggBBBbbRRRrrGGg -> RRRrrRRRGGggggGGBBBbbBBB
|
||||
#define PMAKE(_VAL) (((_VAL<<16)&0x00F80000)|((_VAL<<11)&0x00070000)|((_VAL<<13)&0x0000E000)|((_VAL>>3)&0x00001C00)|((_VAL<<7)&0x00000300)|((_VAL>>5)&0x000000F8)|((_VAL>>10)&0x00000007))
|
||||
#endif
|
||||
#else
|
||||
#if DBPP == 15 // RRRRRGGGGGgBBBBB -> 0RRRRRGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL&~63)>>1)|(_VAL&31))
|
||||
#elif DBPP == 16
|
||||
#define PMAKE(_VAL) (_VAL)
|
||||
#elif DBPP == 32
|
||||
#define PMAKE(_VAL) (((_VAL&(31<<11))<<8)|((_VAL&(63<<5))<<5)|((_VAL&31)<<3))
|
||||
#elif DBPP == 32 // RRRrrGGggggBBBbb -> RRRrrRRRGGggggGGBBBbbBBB
|
||||
#define PMAKE(_VAL) (((_VAL&(31<<11))<<8)|((_VAL&(63<<5))<<5)|((_VAL&0xE01F)<<3)|((_VAL&(3<<9))>>1)|((_VAL&(7<<2))>>2))
|
||||
#endif
|
||||
#endif
|
||||
#define SRCTYPE Bit16u
|
||||
#endif
|
||||
|
||||
#if SBPP == 32
|
||||
#define SC scalerSourceCache.b32
|
||||
#if DBPP == 15
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#if DBPP == 15 // BBBBBbbbGGGGGgggRRRRRrrrxxxxxxxx -> 0RRRRRGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (PTYPE)(((_VAL>>27)&0x001F)|((_VAL>>14)&0x03E0)|((_VAL>>1)&0x7C00))
|
||||
#elif DBPP == 16 // BBBBBbbbGGGGGGggRRRRRrrrxxxxxxxx -> RRRRRGGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (PTYPE)(((_VAL>>27)&0x001F)|((_VAL>>13)&0x07E0)|(_VAL&0xF800))
|
||||
#elif DBPP == 32 // BBBBBBBBGGGGGGGGRRRRRRRRxxxxxxxx -> RRRRRRRRGGGGGGGGBBBBBBBB
|
||||
#define PMAKE(_VAL) (((_VAL>>24)&0x000000FF)|((_VAL>>8)&0x0000FF00)|((_VAL<<8)&0x00FF0000))
|
||||
#endif
|
||||
#else
|
||||
#if DBPP == 15 // RRRRRrrrGGGGGgggBBBBBbbb -> 0RRRRRGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (PTYPE)(((_VAL&(31<<19))>>9)|((_VAL&(31<<11))>>6)|((_VAL&(31<<3))>>3))
|
||||
#elif DBPP == 16
|
||||
#define PMAKE(_VAL) (PTYPE)(((_VAL&(31<<19))>>8)|((_VAL&(63<<10))>>4)|((_VAL&(31<<3))>>3))
|
||||
#elif DBPP == 16 // RRRRRrrrGGGGGGggBBBBBbbb -> RRRRRGGGGGGBBBBB
|
||||
#define PMAKE(_VAL) (PTYPE)(((_VAL&(31<<19))>>8)|((_VAL&(63<<10))>>5)|((_VAL&(31<<3))>>3))
|
||||
#elif DBPP == 32
|
||||
#define PMAKE(_VAL) (_VAL)
|
||||
#endif
|
||||
#endif
|
||||
#define SRCTYPE Bit32u
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue