1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +00:00

Add tile load info auxillary structure.

It will be used to calculate tile size.
This commit is contained in:
Sergey Lipskiy 2014-11-11 17:28:08 +06:00
parent 887504c301
commit e72ac2ed3d
2 changed files with 35 additions and 2 deletions

23
gDP.cpp
View File

@ -593,7 +593,7 @@ void gDPLoadTile32b(u32 uls, u32 ult, u32 lrs, u32 lrt)
void gDPLoadTile(u32 tile, u32 uls, u32 ult, u32 lrs, u32 lrt) void gDPLoadTile(u32 tile, u32 uls, u32 ult, u32 lrs, u32 lrt)
{ {
u32 address, height, bpl, line, y; u32 address, bpl, line, y;
u64 *dest; u64 *dest;
u8 *src; u8 *src;
@ -602,13 +602,25 @@ void gDPLoadTile(u32 tile, u32 uls, u32 ult, u32 lrs, u32 lrt)
gDP.loadTile->loadType = LOADTYPE_TILE; gDP.loadTile->loadType = LOADTYPE_TILE;
gDP.loadTile->imageAddress = gDP.textureImage.address; gDP.loadTile->imageAddress = gDP.textureImage.address;
const u32 width = (gDP.loadTile->lrs - gDP.loadTile->uls + 1) & 0x03FF;
const u32 height = (gDP.loadTile->lrt - gDP.loadTile->ult + 1) & 0x03FF;
gDPLoadTileInfo &info = gDP.loadInfo[gDP.loadTile->tmem];
info.texAddress = gDP.loadTile->imageAddress;
info.uls = uls;
info.ult = ult;
info.width = gDP.loadTile->masks != 0 ? (u16)min(width, 1U<<gDP.loadTile->masks) : (u16)width;
info.height = gDP.loadTile->maskt != 0 ? (u16)min(height, 1U<<gDP.loadTile->maskt) : (u16)height;
info.texWidth = gDP.textureImage.width;
info.size = gDP.textureImage.size;
info.loadType = LOADTYPE_TILE;
if (gDP.loadTile->line == 0) if (gDP.loadTile->line == 0)
return; return;
address = gDP.textureImage.address + gDP.loadTile->ult * gDP.textureImage.bpl + (gDP.loadTile->uls << gDP.textureImage.size >> 1); address = gDP.textureImage.address + gDP.loadTile->ult * gDP.textureImage.bpl + (gDP.loadTile->uls << gDP.textureImage.size >> 1);
dest = &TMEM[gDP.loadTile->tmem]; dest = &TMEM[gDP.loadTile->tmem];
bpl = (gDP.loadTile->lrs - gDP.loadTile->uls + 1) << gDP.loadTile->size >> 1; bpl = (gDP.loadTile->lrs - gDP.loadTile->uls + 1) << gDP.loadTile->size >> 1;
height = gDP.loadTile->lrt - gDP.loadTile->ult + 1;
const u32 bytes = height * bpl; const u32 bytes = height * bpl;
src = &RDRAM[address]; src = &RDRAM[address];
@ -712,6 +724,13 @@ void gDPLoadBlock(u32 tile, u32 uls, u32 ult, u32 lrs, u32 dxt)
} }
gDP.loadTile->imageAddress = gDP.textureImage.address; gDP.loadTile->imageAddress = gDP.textureImage.address;
gDPLoadTileInfo &info = gDP.loadInfo[gDP.loadTile->tmem];
info.texAddress = gDP.loadTile->imageAddress;
info.width = lrs;
info.dxt = dxt;
info.size = gDP.textureImage.size;
info.loadType = LOADTYPE_BLOCK;
u32 bytes = (lrs + 1) << gDP.loadTile->size >> 1; u32 bytes = (lrs + 1) << gDP.loadTile->size >> 1;
u32 address = gDP.textureImage.address + ult * gDP.textureImage.bpl + (uls << gDP.textureImage.size >> 1); u32 address = gDP.textureImage.address + ult * gDP.textureImage.bpl + (uls << gDP.textureImage.size >> 1);

14
gDP.h
View File

@ -95,6 +95,18 @@ struct gDPTile
FrameBuffer *frameBuffer; FrameBuffer *frameBuffer;
}; };
struct gDPLoadTileInfo {
u8 size;
u8 loadType;
u16 uls;
u16 ult;
u16 width;
u16 height;
u16 texWidth;
u32 texAddress;
u32 dxt;
};
struct gDPInfo struct gDPInfo
{ {
struct struct
@ -234,6 +246,8 @@ struct gDPInfo
u32 paletteCRC16[16]; u32 paletteCRC16[16];
u32 paletteCRC256; u32 paletteCRC256;
u32 half_1, half_2; u32 half_1, half_2;
gDPLoadTileInfo loadInfo[512];
}; };
extern gDPInfo gDP; extern gDPInfo gDP;