HD Pack Builder: Improved performance while recording (~80fps -> ~180fps)

This commit is contained in:
Sour 2018-09-07 21:30:00 -04:00
parent f69b891d53
commit fd33562205
5 changed files with 11 additions and 13 deletions

View file

@ -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);
}
}

View file

@ -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();

View file

@ -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);
}

View file

@ -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);

View file

@ -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);