mirror of https://github.com/mgba-emu/mgba.git
Preliminary pass at straightening out VRAM loads
This commit is contained in:
parent
56a105e3da
commit
38e8cc1ee4
|
@ -811,7 +811,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
xBase += (localX & 0x100) << 5; \
|
||||
} \
|
||||
screenBase = yBase + (xBase >> 3); \
|
||||
mapData = vram[screenBase]; \
|
||||
LOAD_16(mapData, screenBase << 1, vram); \
|
||||
localY = inY & 0x7; \
|
||||
if (GBA_TEXT_MAP_VFLIP(mapData)) { \
|
||||
localY = 7 - localY; \
|
||||
|
@ -852,7 +852,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
||||
palette = &mainPalette[paletteData]; \
|
||||
charBase = ((background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) >> 2) + localY; \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
tileData >>= 4 * mod8; \
|
||||
for (; outX < end; ++outX) { \
|
||||
|
@ -868,7 +868,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
|
||||
#define DRAW_BACKGROUND_MODE_0_TILE_PREFIX_16(BLEND, OBJWIN) \
|
||||
charBase = ((background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) >> 2) + localY; \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
||||
palette = &mainPalette[paletteData]; \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
|
@ -902,7 +902,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
if (!mosaicWait) { \
|
||||
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
||||
palette = &mainPalette[paletteData]; \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
tileData >>= x * 4; \
|
||||
} else { \
|
||||
|
@ -931,7 +931,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
||||
palette = &mainPalette[paletteData]; \
|
||||
charBase = ((background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) >> 2) + localY; \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
if (tileData) { \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
BACKGROUND_DRAW_PIXEL_16(BLEND, OBJWIN); \
|
||||
|
@ -980,7 +980,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
int shift = inX & 0x3; \
|
||||
if (end2 > outX) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
tileData >>= 8 * shift; \
|
||||
shift = 0; \
|
||||
for (; outX < end2; ++outX) { \
|
||||
|
@ -989,7 +989,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
} \
|
||||
} \
|
||||
\
|
||||
tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
tileData >>= 8 * shift; \
|
||||
for (; outX < end; ++outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
|
@ -999,7 +999,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
int start = outX; \
|
||||
outX = end - 1; \
|
||||
if (end2 > start) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
for (; outX >= end2; --outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1007,7 +1007,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
++charBase; \
|
||||
} \
|
||||
\
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
for (; outX >= renderer->start; --outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1021,7 +1021,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
int end2 = 4 - end; \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
if (end2 > 0) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
for (; outX < renderer->end - end2; ++outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1029,7 +1029,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
++charBase; \
|
||||
} \
|
||||
\
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
for (; outX < renderer->end; ++outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1039,7 +1039,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
int start = outX; \
|
||||
outX = renderer->end - 1; \
|
||||
if (end2 > 0) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
tileData >>= 8 * shift; \
|
||||
for (; outX >= start + 4; --outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
|
@ -1048,7 +1048,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
shift = 0; \
|
||||
} \
|
||||
\
|
||||
tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
tileData >>= 8 * shift; \
|
||||
for (; outX >= start; --outX) { \
|
||||
pixel = &renderer->row[outX]; \
|
||||
|
@ -1061,7 +1061,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
BACKGROUND_TEXT_SELECT_CHARACTER; \
|
||||
charBase = ((background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) >> 2) + (localY << 1); \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
if (tileData) { \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
++pixel; \
|
||||
|
@ -1074,7 +1074,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
} else { \
|
||||
pixel += 4; \
|
||||
} \
|
||||
tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
if (tileData) { \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
++pixel; \
|
||||
|
@ -1088,7 +1088,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
pixel += 4; \
|
||||
} \
|
||||
} else { \
|
||||
uint32_t tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
if (tileData) { \
|
||||
pixel += 3; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1100,7 +1100,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
} \
|
||||
pixel += 4; \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
if (tileData) { \
|
||||
pixel += 3; \
|
||||
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN); \
|
||||
|
@ -1124,18 +1124,18 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
|
|||
if (!mosaicWait) { \
|
||||
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
||||
if (x >= 4) { \
|
||||
tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
tileData >>= (x - 4) * 8; \
|
||||
} else { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
tileData >>= x * 8; \
|
||||
} \
|
||||
} else { \
|
||||
if (x >= 4) { \
|
||||
tileData = ((uint32_t*) vram)[charBase]; \
|
||||
LOAD_32(tileData, charBase << 2, vram); \
|
||||
tileData >>= (7 - x) * 8; \
|
||||
} else { \
|
||||
tileData = ((uint32_t*) vram)[charBase + 1]; \
|
||||
LOAD_32(tileData, (charBase + 1) << 2, vram); \
|
||||
tileData >>= (3 - x) * 8; \
|
||||
} \
|
||||
} \
|
||||
|
@ -1348,7 +1348,7 @@ static void _drawBackgroundMode3(struct GBAVideoSoftwareRenderer* renderer, stru
|
|||
for (outX = renderer->start, pixel = &renderer->row[outX]; outX < renderer->end; ++outX, ++pixel) {
|
||||
BACKGROUND_BITMAP_ITERATE(VIDEO_HORIZONTAL_PIXELS, VIDEO_VERTICAL_PIXELS);
|
||||
|
||||
color = ((uint16_t*)renderer->d.vram)[(localX >> 8) + (localY >> 8) * VIDEO_HORIZONTAL_PIXELS];
|
||||
LOAD_16(color, (localX >> 8) + (localY >> 8) * VIDEO_HORIZONTAL_PIXELS << 1, renderer->d.vram);
|
||||
#ifndef COLOR_16_BIT
|
||||
unsigned color32;
|
||||
color32 = 0;
|
||||
|
@ -1413,7 +1413,7 @@ static void _drawBackgroundMode5(struct GBAVideoSoftwareRenderer* renderer, stru
|
|||
for (outX = renderer->start, pixel = &renderer->row[outX]; outX < renderer->end; ++outX, ++pixel) {
|
||||
BACKGROUND_BITMAP_ITERATE(160, 128);
|
||||
|
||||
color = ((uint16_t*)renderer->d.vram)[offset + (localX >> 8) + (localY >> 8) * 160];
|
||||
LOAD_16(color, offset + (localX >> 8) + (localY >> 8) * 320, renderer->d.vram);
|
||||
#ifndef COLOR_16_BIT
|
||||
unsigned color32 = 0;
|
||||
color32 |= (color << 9) & 0xF80000;
|
||||
|
|
Loading…
Reference in New Issue