diff --git a/gDP.cpp b/gDP.cpp index 4f8c9f70..bb671abb 100644 --- a/gDP.cpp +++ b/gDP.cpp @@ -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) { - u32 address, height, bpl, line, y; + u32 address, bpl, line, y; u64 *dest; 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->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<masks) : (u16)width; + info.height = gDP.loadTile->maskt != 0 ? (u16)min(height, 1U<maskt) : (u16)height; + info.texWidth = gDP.textureImage.width; + info.size = gDP.textureImage.size; + info.loadType = LOADTYPE_TILE; + if (gDP.loadTile->line == 0) return; address = gDP.textureImage.address + gDP.loadTile->ult * gDP.textureImage.bpl + (gDP.loadTile->uls << gDP.textureImage.size >> 1); dest = &TMEM[gDP.loadTile->tmem]; 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; 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; + 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 address = gDP.textureImage.address + ult * gDP.textureImage.bpl + (uls << gDP.textureImage.size >> 1); diff --git a/gDP.h b/gDP.h index 91813e31..4cd8e139 100644 --- a/gDP.h +++ b/gDP.h @@ -95,6 +95,18 @@ struct gDPTile 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 @@ -234,6 +246,8 @@ struct gDPInfo u32 paletteCRC16[16]; u32 paletteCRC256; u32 half_1, half_2; + + gDPLoadTileInfo loadInfo[512]; }; extern gDPInfo gDP;