HD Pack Builder: Improved performance while recording (~80fps -> ~180fps)
This commit is contained in:
parent
f69b891d53
commit
fd33562205
5 changed files with 11 additions and 13 deletions
|
@ -1010,10 +1010,12 @@ uint32_t BaseMapper::GetMemorySize(DebugMemoryType type)
|
|||
}
|
||||
}
|
||||
|
||||
void BaseMapper::CopyChrRamTile(uint32_t address, uint8_t *dest)
|
||||
void BaseMapper::CopyChrTile(uint32_t address, uint8_t *dest)
|
||||
{
|
||||
if(address <= _chrRamSize - 16) {
|
||||
if(_chrRamSize > 0 && address <= _chrRamSize - 16) {
|
||||
memcpy(dest, _chrRam + address, 16);
|
||||
} else if(_chrRomSize > 0 && address <= _chrRomSize - 16) {
|
||||
memcpy(dest, _chrRom + address, 16);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ public:
|
|||
|
||||
void InitializeRam(void* data, uint32_t length);
|
||||
|
||||
void CopyChrRamTile(uint32_t address, uint8_t *dest);
|
||||
void CopyChrTile(uint32_t address, uint8_t *dest);
|
||||
|
||||
//Debugger Helper Functions
|
||||
bool HasChrRam();
|
||||
|
|
|
@ -65,9 +65,7 @@ protected:
|
|||
sprite.TileIndex = (isChrRam ? (_lastSprite->TileAddr & _chrRamIndexMask) : _lastSprite->AbsoluteTileAddr) / 16;
|
||||
sprite.PaletteColors = ReadPaletteRAM(_lastSprite->PaletteOffset + 3) | (ReadPaletteRAM(_lastSprite->PaletteOffset + 2) << 8) | (ReadPaletteRAM(_lastSprite->PaletteOffset + 1) << 16) | 0xFF000000;
|
||||
sprite.IsChrRamTile = isChrRam;
|
||||
for(int i = 0; i < 16; i++) {
|
||||
sprite.TileData[i] = _console->GetMapper()->GetMemoryValue(memoryType, _lastSprite->AbsoluteTileAddr / 16 * 16 + i);
|
||||
}
|
||||
_console->GetMapper()->CopyChrTile(_lastSprite->AbsoluteTileAddr & 0xFFFFFFF0, sprite.TileData);
|
||||
|
||||
_hdPackBuilder->ProcessTile(_cycle - 1, _scanline, _lastSprite->AbsoluteTileAddr, sprite, mapper, false, _bankHashes[_lastSprite->TileAddr / _chrRamBankSize], false);
|
||||
}
|
||||
|
@ -79,9 +77,7 @@ protected:
|
|||
tile.TileIndex = (isChrRam ? (lastTile->TileAddr & _chrRamIndexMask) : lastTile->AbsoluteTileAddr) / 16;
|
||||
tile.PaletteColors = ReadPaletteRAM(lastTile->PaletteOffset + 3) | (ReadPaletteRAM(lastTile->PaletteOffset + 2) << 8) | (ReadPaletteRAM(lastTile->PaletteOffset + 1) << 16) | (ReadPaletteRAM(0) << 24);
|
||||
tile.IsChrRamTile = isChrRam;
|
||||
for(int i = 0; i < 16; i++) {
|
||||
tile.TileData[i] = _console->GetMapper()->GetMemoryValue(memoryType, lastTile->AbsoluteTileAddr / 16 * 16 + i);
|
||||
}
|
||||
_console->GetMapper()->CopyChrTile(lastTile->AbsoluteTileAddr & 0xFFFFFFF0, tile.TileData);
|
||||
|
||||
_hdPackBuilder->ProcessTile(_cycle - 1, _scanline, lastTile->AbsoluteTileAddr, tile, mapper, false, _bankHashes[lastTile->TileAddr / _chrRamBankSize], hasBgSprite);
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ void HdPpu::DrawPixel()
|
|||
if(shift >= 0 && shift < 8) {
|
||||
tileInfo.Sprite[j].TileIndex = sprite.AbsoluteTileAddr / 16;
|
||||
if(isChrRam) {
|
||||
mapper->CopyChrRamTile(sprite.AbsoluteTileAddr & 0xFFFFFFF0, tileInfo.Sprite[j].TileData);
|
||||
mapper->CopyChrTile(sprite.AbsoluteTileAddr & 0xFFFFFFF0, tileInfo.Sprite[j].TileData);
|
||||
}
|
||||
if(_version >= 100) {
|
||||
tileInfo.Sprite[j].PaletteColors = 0xFF000000 | _paletteRAM[sprite.PaletteOffset + 3] | (_paletteRAM[sprite.PaletteOffset + 2] << 8) | (_paletteRAM[sprite.PaletteOffset + 1] << 16);
|
||||
|
@ -100,7 +100,7 @@ void HdPpu::DrawPixel()
|
|||
if(_flags.BackgroundEnabled && _cycle > _minimumDrawBgCycle) {
|
||||
tileInfo.Tile.TileIndex = lastTile->AbsoluteTileAddr / 16;
|
||||
if(isChrRam) {
|
||||
mapper->CopyChrRamTile(lastTile->AbsoluteTileAddr & 0xFFFFFFF0, tileInfo.Tile.TileData);
|
||||
mapper->CopyChrTile(lastTile->AbsoluteTileAddr & 0xFFFFFFF0, tileInfo.Tile.TileData);
|
||||
}
|
||||
if(_version >= 100) {
|
||||
tileInfo.Tile.PaletteColors = _paletteRAM[lastTile->PaletteOffset + 3] | (_paletteRAM[lastTile->PaletteOffset + 2] << 8) | (_paletteRAM[lastTile->PaletteOffset + 1] << 16) | (_paletteRAM[0] << 24);
|
||||
|
|
|
@ -345,7 +345,7 @@ void MemoryDumper::GatherChrPaletteInfo()
|
|||
key.TileIndex = absoluteAddr / 16;
|
||||
key.IsChrRamTile = false;
|
||||
} else {
|
||||
_mapper->CopyChrRamTile(absoluteAddr, key.TileData);
|
||||
_mapper->CopyChrTile(absoluteAddr, key.TileData);
|
||||
key.IsChrRamTile = true;
|
||||
}
|
||||
_paletteByTile[key] = palettes[paletteIndex];
|
||||
|
@ -463,7 +463,7 @@ void MemoryDumper::GetChrBank(int bankIndex, uint32_t* frameBuffer, uint8_t pale
|
|||
key.TileIndex = absoluteTileIndex;
|
||||
key.IsChrRamTile = false;
|
||||
} else {
|
||||
_mapper->CopyChrRamTile(absoluteTileIndex * 16, key.TileData);
|
||||
_mapper->CopyChrTile(absoluteTileIndex * 16, key.TileData);
|
||||
key.IsChrRamTile = true;
|
||||
}
|
||||
auto result = _paletteByTile.find(key);
|
||||
|
|
Loading…
Add table
Reference in a new issue