From eceb8d790b0d9b7ae3e3b0c2d65c29bd74285e64 Mon Sep 17 00:00:00 2001 From: Sour Date: Tue, 26 May 2020 00:14:19 -0400 Subject: [PATCH] GB: PPU - Removed unnecessary sort operation --- Core/GbPpu.cpp | 17 ++++------------- Core/GbPpu.h | 1 - 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/Core/GbPpu.cpp b/Core/GbPpu.cpp index dc432fe..e847a6a 100644 --- a/Core/GbPpu.cpp +++ b/Core/GbPpu.cpp @@ -111,7 +111,6 @@ void GbPpu::ExecCycle() case 4: { if(_state.Scanline < 144) { _spriteCount = 0; - _prevSprite = 0; ChangeMode(PpuMode::OamEvaluation); } else if(_state.Scanline == 144) { ChangeMode(PpuMode::VBlank); @@ -123,14 +122,6 @@ void GbPpu::ExecCycle() case 84: { if(_state.Scanline < 144) { - std::sort(_spriteIndexes, _spriteIndexes + _spriteCount, [=](uint8_t a, uint8_t b) { - if(_oam[a + 1] == _oam[b + 1]) { - return a < b; - } else { - return _oam[a + 1] < _oam[b + 1]; - } - }); - std::sort(_spriteX, _spriteX + _spriteCount); ChangeMode(PpuMode::Drawing); ResetRenderer(); } @@ -319,11 +310,11 @@ void GbPpu::ClockSpriteFetcher() void GbPpu::FindNextSprite() { - if(_prevSprite < _spriteCount && _fetchSprite < 0 && (_state.SpritesEnabled || _state.CgbEnabled)) { - for(int i = _prevSprite; i < _spriteCount; i++) { + if(_fetchSprite < 0 && (_state.SpritesEnabled || _state.CgbEnabled)) { + for(int i = 0; i < _spriteCount; i++) { if((int)_spriteX[i] - 8 == _drawnPixels) { _fetchSprite = _spriteIndexes[i]; - _prevSprite++; + _spriteX[i] = 0xFF; //Prevent processing the same sprite again _oamFetcher.Step = 0; break; } @@ -729,7 +720,7 @@ void GbPpu::Serialize(Serializer& s) s.Stream( _bgFetcher.Attributes, _bgFetcher.Step, _bgFetcher.Addr, _bgFetcher.LowByte, _bgFetcher.HighByte, _oamFetcher.Attributes, _oamFetcher.Step, _oamFetcher.Addr, _oamFetcher.LowByte, _oamFetcher.HighByte, - _drawnPixels, _fetchColumn, _fetchWindow, _fetchSprite, _spriteCount, _prevSprite, + _drawnPixels, _fetchColumn, _fetchWindow, _fetchSprite, _spriteCount, _bgFifo.Position, _bgFifo.Size, _oamFifo.Position, _oamFifo.Size ); diff --git a/Core/GbPpu.h b/Core/GbPpu.h index 0c8fbc4..2a8a52f 100644 --- a/Core/GbPpu.h +++ b/Core/GbPpu.h @@ -38,7 +38,6 @@ private: bool _fetchWindow = false; int16_t _fetchSprite = -1; - uint8_t _prevSprite = 0; uint8_t _spriteCount = 0; uint8_t _spriteX[10] = {}; uint8_t _spriteIndexes[10] = {};