- Parse and cache the WININ and WINOUT registers, instead of using them directly.
- Parse and cache the Target1 bits of the BLDCNT register.
- Remove some template parameters which are now suspected to no longer improve performance, most notably LAYERID. Should significantly reduce the generated code size.
This commit is contained in:
rogerman 2016-07-15 16:29:08 +00:00
parent 7ae811e5cf
commit c5c9e14eb9
4 changed files with 579 additions and 624 deletions

File diff suppressed because it is too large Load Diff

View File

@ -997,6 +997,8 @@ typedef struct
#define MMU_BOBJ 0x06600000
#define MMU_LCDC 0x06800000
#define WINDOWCONTROL_EFFECTFLAG 5
enum GPULayerID
{
GPULayerID_BG0 = 0,
@ -1244,12 +1246,26 @@ protected:
u8 _sprBoundary;
u8 _sprBMPBoundary;
bool _blend2[6];
bool _srcBlendEnable[6];
bool _dstBlendEnable[6];
#ifdef ENABLE_SSE2
__m128i _srcBlendEnable_SSE2[6];
#ifdef ENABLE_SSSE3
__m128i _dstBlendEnable_SSSE3;
#else
__m128i _dstBlendEnable_SSE2[6];
#endif
#endif // ENABLE_SSE2
#if defined(ENABLE_SSSE3)
__m128i _blend2_SSSE3;
#elif defined(ENABLE_SSE2)
__m128i _blend2_SSE2[6];
bool _WIN0_enable[6];
bool _WIN1_enable[6];
bool _WINOUT_enable[6];
bool _WINOBJ_enable[6];
#if defined(ENABLE_SSE2)
__m128i _WIN0_enable_SSE2[6];
__m128i _WIN1_enable_SSE2[6];
__m128i _WINOUT_enable_SSE2[6];
__m128i _WINOBJ_enable_SSE2[6];
#endif
TBlendTable *_blendTable;
@ -1307,24 +1323,24 @@ protected:
void _MosaicSpriteLinePixel(const size_t x, u16 l, u16 *__restrict dst, u8 *__restrict dst_alpha, u8 *__restrict typeTab, u8 *__restrict prioTab);
void _MosaicSpriteLine(u16 l, u16 *__restrict dst, u8 *__restrict dst_alpha, u8 *__restrict typeTab, u8 *__restrict prioTab);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc, bool WRAP> void _RenderPixelIterate_Final(u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc, bool WRAP> void _RenderPixelIterate_ApplyWrap(u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc> void _RenderPixelIterate(u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc, bool WRAP> void _RenderPixelIterate_Final(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc, bool WRAP> void _RenderPixelIterate_ApplyWrap(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED, PixelLookupFunc GetPixelFunc> void _RenderPixelIterate(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, const u32 map, const u32 tile, const u16 *__restrict pal);
TILEENTRY _GetTileEntry(const u32 tileMapAddress, const u16 xOffset, const u16 layerWidthMask);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> FORCEINLINE void _RenderPixelSingle(void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex, u16 color, const size_t srcX, const bool opaque);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> void _RenderPixelsCustom(void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> void _RenderPixelsCustomVRAM(void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> FORCEINLINE void _RenderPixelSingle(const GPULayerID srcLayerID, void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex, u16 color, const size_t srcX, const bool opaque);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> void _RenderPixelsCustom(const GPULayerID srcLayerID, void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> void _RenderPixelsCustomVRAM(const GPULayerID srcLayerID, void *__restrict dstColorLine, u8 *__restrict dstLayerID, const size_t lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _RenderLine_BGText(u16 *__restrict dstColorLine, const u16 lineIndex, const u16 XBG, const u16 YBG);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _RenderLine_BGAffine(u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_BGExtended(u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, bool &outUseCustomVRAM);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _RenderLine_BGText(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const u16 XBG, const u16 YBG);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _RenderLine_BGAffine(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_BGExtended(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex, const IOREG_BGnParameter &param, bool &outUseCustomVRAM);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineText(void *__restrict dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineRot(void *__restrict dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _LineExtRot(void *__restrict dstColorLine, const u16 lineIndex, bool &outUseCustomVRAM);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineText(const GPULayerID srcLayerID, void *__restrict dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineRot(const GPULayerID srcLayerID, void *__restrict dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _LineExtRot(const GPULayerID srcLayerID, void *__restrict dstColorLine, const u16 lineIndex, bool &outUseCustomVRAM);
template<GPULayerID LAYERID> void _RenderPixel_CheckWindows(const size_t srcX, bool &didPassWindowTest, bool &enableColorEffect) const;
void _RenderPixel_CheckWindows(const size_t srcX, const GPULayerID srcLayerID, bool &didPassWindowTest, bool &enableColorEffect) const;
void _RenderLine_Clear(const u16 clearColor, const u16 l, void *renderLineTarget);
void _RenderLine_SetupSprites(const u16 backdropColor, const u16 lineIndex);
@ -1336,15 +1352,15 @@ protected:
template<size_t WIN_NUM> void _UpdateWINH();
template<size_t WIN_NUM> void _SetupWindows(const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_Final(void *dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyColorEffectDisabledHint(void *dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyNoWindowsEnabledHint(void *dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyMosaic(void *dstColorLine, const u16 lineIndex);
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG(void *dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_Final(const GPULayerID srcLayerID, void *dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyColorEffectDisabledHint(const GPULayerID srcLayerID, void *dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyNoWindowsEnabledHint(const GPULayerID srcLayerID, void *dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG_ApplyMosaic(const GPULayerID srcLayerID, void *dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool ISCUSTOMRENDERINGNEEDED> void* _RenderLine_LayerBG(const GPULayerID srcLayerID, void *dstColorLine, const u16 lineIndex);
template<NDSColorFormat OUTPUTFORMAT> void* _RenderLine_LayerOBJ(itemsForPriority_t *__restrict item, void *__restrict dstColorLine, const u16 lineIndex);
template<NDSColorFormat OUTPUTFORMAT, GPULayerID LAYERID, bool ISDEBUGRENDER, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> FORCEINLINE void _RenderPixel(const size_t srcX, const u16 src, const u8 srcAlpha, void *__restrict dstColorLine, u8 *__restrict dstLayerIDLine);
template<NDSColorFormat OUTPUTFORMAT, bool ISSRCLAYEROBJ, bool ISDEBUGRENDER, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT> FORCEINLINE void _RenderPixel(const size_t srcX, const u16 srcColor, const u8 srcAlpha, const GPULayerID srcLayerID, void *__restrict dstColorLine, u8 *__restrict dstLayerIDLine);
FORCEINLINE void _RenderPixel3D(const FragmentColor src, u16 &dstColor, u8 &dstLayerID, bool enableColorEffect);
template<NDSColorFormat OUTPUTFORMAT> FORCEINLINE void _RenderPixel3D(const FragmentColor src, FragmentColor &dstColor, u8 &dstLayerID, bool enableColorEffect);
@ -1368,8 +1384,8 @@ protected:
template<NDSColorFormat COLORFORMATB> FORCEINLINE __m128i _ColorEffectBlend3D(const __m128i &colA_Lo, const __m128i &colA_Hi, const __m128i &colB);
template<NDSColorFormat COLORFORMAT> FORCEINLINE __m128i _ColorEffectIncreaseBrightness(const __m128i &col, const __m128i &blendEVY);
template<NDSColorFormat COLORFORMAT> FORCEINLINE __m128i _ColorEffectDecreaseBrightness(const __m128i &col, const __m128i &blendEVY);
template<GPULayerID LAYERID, bool ISCUSTOMRENDERINGNEEDED> FORCEINLINE void _RenderPixel_CheckWindows16_SSE2(const size_t dstX, __m128i &didPassWindowTest, __m128i &enableColorEffect) const;
template<NDSColorFormat OUTPUTFORMAT, GPULayerID LAYERID, bool ISDEBUGRENDER, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> FORCEINLINE void _RenderPixel16_SSE2(const size_t dstX, const ColorEffect colorEffect, const __m128i &src3, const __m128i &src2, const __m128i &src1, const __m128i &src0, const __m128i &srcAlpha, const __m128i &srcEffectEnableMask, __m128i &dst3, __m128i &dst2, __m128i &dst1, __m128i &dst0, __m128i &dstLayerID, __m128i &passMask8);
template<bool ISCUSTOMRENDERINGNEEDED> FORCEINLINE void _RenderPixel_CheckWindows16_SSE2(const size_t dstX, const GPULayerID srcLayerID, __m128i &didPassWindowTest, __m128i &enableColorEffect) const;
template<NDSColorFormat OUTPUTFORMAT, bool ISSRCLAYEROBJ, bool ISDEBUGRENDER, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> FORCEINLINE void _RenderPixel16_SSE2(const size_t dstX, const ColorEffect colorEffect, const GPULayerID srcLayerID, const __m128i &src3, const __m128i &src2, const __m128i &src1, const __m128i &src0, const __m128i &srcAlpha, const __m128i &srcEffectEnableMask, __m128i &dst3, __m128i &dst2, __m128i &dst1, __m128i &dst0, __m128i &dstLayerID, __m128i &passMask8);
template<NDSColorFormat OUTPUTFORMAT> FORCEINLINE void _RenderPixel3D_SSE2(const __m128i &passMask8, const __m128i &enableColorEffectMask, const __m128i &src3, const __m128i &src2, const __m128i &src1, const __m128i &src0, __m128i &dst3, __m128i &dst2, __m128i &dst1, __m128i &dst0, __m128i &dstLayerID);
#endif
@ -1393,20 +1409,22 @@ public:
void RefreshAffineStartRegs();
template<GPUEngineID ENGINEID> void ParseReg_DISPCNT();
template<GPUEngineID ENGINEID, GPULayerID LAYERID> void ParseReg_BGnCNT();
void ParseReg_DISPCNT();
void ParseReg_BGnCNT(const GPULayerID layerID);
template<GPULayerID LAYERID> void ParseReg_BGnHOFS();
template<GPULayerID LAYERID> void ParseReg_BGnVOFS();
template<GPULayerID LAYERID> void ParseReg_BGnX();
template<GPULayerID LAYERID> void ParseReg_BGnY();
template<size_t WINNUM> void ParseReg_WINnH();
void ParseReg_WININ();
void ParseReg_WINOUT();
void ParseReg_MOSAIC();
void ParseReg_BLDCNT();
void ParseReg_BLDALPHA();
void ParseReg_BLDY();
void ParseReg_MASTER_BRIGHT();
template<GPUEngineID ENGINEID> void ParseAllRegisters();
void ParseAllRegisters();
void UpdatePropertiesWithoutRender(const u16 l);
void FramebufferPostprocess();
@ -1446,7 +1464,7 @@ public:
void UpdateVRAM3DUsageProperties_OBJLayer(const size_t bankIndex);
void SpriteRenderDebug(const u16 lineIndex, u16 *dst);
template<GPULayerID LAYERID> void RenderLayerBG(u16 *dstLineColor);
void RenderLayerBG(const GPULayerID layerID, u16 *dstLineColor);
NDSDisplayID GetDisplayByID() const;
void SetDisplayByID(const NDSDisplayID theDisplayID);
@ -1479,7 +1497,7 @@ protected:
DISPCAPCNT_parsed _dispCapCnt;
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineLarge8bpp(u16 *__restrict dstColorLine, const u16 lineIndex);
template<bool ISDEBUGRENDER, bool MOSAIC, bool NOWINDOWSENABLEDHINT, bool COLOREFFECTDISABLEDHINT, bool ISCUSTOMRENDERINGNEEDED> void _LineLarge8bpp(const GPULayerID srcLayerID, u16 *__restrict dstColorLine, const u16 lineIndex);
template<size_t CAPTURELENGTH> void _RenderLine_DisplayCapture(const void *renderedLineSrcA, const u16 l);
void _RenderLine_DispCapture_FIFOToBuffer(u16 *fifoLineBuffer);

View File

@ -3335,16 +3335,20 @@ void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val)
case REG_DISPA_WININ:
T1WriteByte(MMU.ARM9_REG, 0x0048, val);
mainEngine->ParseReg_WININ();
return;
case REG_DISPA_WININ+1:
T1WriteByte(MMU.ARM9_REG, 0x0049, val);
mainEngine->ParseReg_WININ();
return;
case REG_DISPA_WINOUT:
T1WriteByte(MMU.ARM9_REG, 0x004A, val);
mainEngine->ParseReg_WINOUT();
return;
case REG_DISPA_WINOUT+1:
T1WriteByte(MMU.ARM9_REG, 0x004B, val);
mainEngine->ParseReg_WINOUT();
return;
case REG_DISPA_MOSAIC:
@ -3500,16 +3504,20 @@ void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val)
case REG_DISPB_WININ:
T1WriteByte(MMU.ARM9_REG, 0x1048, val);
subEngine->ParseReg_WININ();
return;
case REG_DISPB_WININ+1:
T1WriteByte(MMU.ARM9_REG, 0x1049, val);
subEngine->ParseReg_WININ();
return;
case REG_DISPB_WINOUT:
T1WriteByte(MMU.ARM9_REG, 0x104A, val);
subEngine->ParseReg_WINOUT();
return;
case REG_DISPB_WINOUT+1:
T1WriteByte(MMU.ARM9_REG, 0x104B, val);
subEngine->ParseReg_WINOUT();
return;
case REG_DISPB_MOSAIC:
@ -3719,36 +3727,36 @@ void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val)
{
case REG_DISPA_DISPCNT:
T1WriteWord(MMU.ARM9_REG, 0x0000, val);
mainEngine->ParseReg_DISPCNT<GPUEngineID_Main>();
mainEngine->ParseReg_DISPCNT();
return;
case REG_DISPA_DISPCNT+2:
T1WriteWord(MMU.ARM9_REG, 0x0002, val);
mainEngine->ParseReg_DISPCNT<GPUEngineID_Main>();
mainEngine->ParseReg_DISPCNT();
return;
case REG_DISPA_BG0CNT:
//GPULOG("MAIN BG0 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x0008, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG0>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG0);
return;
case REG_DISPA_BG1CNT:
//GPULOG("MAIN BG1 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x000A, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG1>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG1);
return;
case REG_DISPA_BG2CNT:
//GPULOG("MAIN BG2 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x000C, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG2>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG2);
return;
case REG_DISPA_BG3CNT:
//GPULOG("MAIN BG3 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x000E, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG3>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG3);
return;
case REG_DISPA_BG0HOFS:
@ -3851,10 +3859,12 @@ void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val)
case REG_DISPA_WININ:
T1WriteWord(MMU.ARM9_REG, 0x0048, val);
mainEngine->ParseReg_WININ();
return;
case REG_DISPA_WINOUT:
T1WriteWord(MMU.ARM9_REG, 0x004A, val);
mainEngine->ParseReg_WINOUT();
return;
case REG_DISPA_MOSAIC:
@ -3904,36 +3914,36 @@ void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val)
case REG_DISPB_DISPCNT:
T1WriteWord(MMU.ARM9_REG, 0x1000, val);
subEngine->ParseReg_DISPCNT<GPUEngineID_Sub>();
subEngine->ParseReg_DISPCNT();
return;
case REG_DISPB_DISPCNT+2:
T1WriteWord(MMU.ARM9_REG, 0x1002, val);
subEngine->ParseReg_DISPCNT<GPUEngineID_Sub>();
subEngine->ParseReg_DISPCNT();
return;
case REG_DISPB_BG0CNT:
//GPULOG("SUB BG0 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x1008, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG0>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG0);
return;
case REG_DISPB_BG1CNT:
//GPULOG("SUB BG1 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x100A, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG1>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG1);
return;
case REG_DISPB_BG2CNT:
//GPULOG("SUB BG2 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x100C, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG2>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG2);
return;
case REG_DISPB_BG3CNT:
//GPULOG("SUB BG3 SETPROP 16B %08X\r\n", val);
T1WriteWord(MMU.ARM9_REG, 0x100E, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG3>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG3);
return;
case REG_DISPB_BG0HOFS:
@ -4036,10 +4046,12 @@ void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val)
case REG_DISPB_WININ:
T1WriteWord(MMU.ARM9_REG, 0x1048, val);
subEngine->ParseReg_WININ();
return;
case REG_DISPB_WINOUT:
T1WriteWord(MMU.ARM9_REG, 0x104A, val);
subEngine->ParseReg_WINOUT();
return;
case REG_DISPB_MOSAIC:
@ -4352,20 +4364,20 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val)
{
case REG_DISPA_DISPCNT:
T1WriteLong(MMU.ARM9_REG, 0x0000, val);
mainEngine->ParseReg_DISPCNT<GPUEngineID_Main>();
mainEngine->ParseReg_DISPCNT();
//GPULOG("MAIN INIT 32B %08X\r\n", val);
return;
case REG_DISPA_BG0CNT:
T1WriteLong(MMU.ARM9_REG, 0x0008, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG0>();
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG1>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG0);
mainEngine->ParseReg_BGnCNT(GPULayerID_BG1);
return;
case REG_DISPA_BG2CNT:
T1WriteLong(MMU.ARM9_REG, 0x000C, val);
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG2>();
mainEngine->ParseReg_BGnCNT<GPUEngineID_Main, GPULayerID_BG3>();
mainEngine->ParseReg_BGnCNT(GPULayerID_BG2);
mainEngine->ParseReg_BGnCNT(GPULayerID_BG3);
return;
case REG_DISPA_BG0HOFS:
@ -4424,6 +4436,8 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val)
case REG_DISPA_WININ:
T1WriteLong(MMU.ARM9_REG, 0x0048, val);
mainEngine->ParseReg_WININ();
mainEngine->ParseReg_WINOUT();
return;
case REG_DISPA_MOSAIC:
@ -4465,20 +4479,20 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val)
case REG_DISPB_DISPCNT:
T1WriteLong(MMU.ARM9_REG, 0x1000, val);
subEngine->ParseReg_DISPCNT<GPUEngineID_Sub>();
subEngine->ParseReg_DISPCNT();
//GPULOG("SUB INIT 32B %08X\r\n", val);
return;
case REG_DISPB_BG0CNT:
T1WriteLong(MMU.ARM9_REG, 0x1008, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG0>();
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG1>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG0);
subEngine->ParseReg_BGnCNT(GPULayerID_BG1);
return;
case REG_DISPB_BG2CNT:
T1WriteLong(MMU.ARM9_REG, 0x100C, val);
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG2>();
subEngine->ParseReg_BGnCNT<GPUEngineID_Sub, GPULayerID_BG3>();
subEngine->ParseReg_BGnCNT(GPULayerID_BG2);
subEngine->ParseReg_BGnCNT(GPULayerID_BG3);
return;
case REG_DISPB_BG0HOFS:
@ -4537,6 +4551,8 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val)
case REG_DISPB_WININ:
T1WriteLong(MMU.ARM9_REG, 0x1048, val);
subEngine->ParseReg_WININ();
subEngine->ParseReg_WINOUT();
return;
case REG_DISPB_MOSAIC:

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2006-2015 DeSmuME team
Copyright (C) 2006-2016 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -43,19 +43,9 @@ struct mapview_struct
void render()
{
GPUEngineBase *gpu = (engineID == GPUEngineID_Main) ? (GPUEngineBase *)GPU->GetEngineMain() : (GPUEngineBase *)GPU->GetEngineSub();
memset(bitmap,0,sizeof(bitmap));
switch (layerID)
{
case GPULayerID_BG0: gpu->RenderLayerBG<GPULayerID_BG0>(bitmap); break;
case GPULayerID_BG1: gpu->RenderLayerBG<GPULayerID_BG1>(bitmap); break;
case GPULayerID_BG2: gpu->RenderLayerBG<GPULayerID_BG2>(bitmap); break;
case GPULayerID_BG3: gpu->RenderLayerBG<GPULayerID_BG3>(bitmap); break;
default:
break;
}
memset(bitmap, 0, sizeof(bitmap));
gpu->RenderLayerBG(layerID, bitmap);
}
};