113 lines
2.2 KiB
C++
113 lines
2.2 KiB
C++
/*
|
|
Copyright 2021 flyinghead
|
|
|
|
This file is part of Flycast.
|
|
|
|
Flycast is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Flycast is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
#include "pvr.h"
|
|
#include "spg.h"
|
|
#include "pvr_regs.h"
|
|
#include "Renderer_if.h"
|
|
#include "ta_ctx.h"
|
|
#include "rend/TexCache.h"
|
|
#include "serialize.h"
|
|
#include "pvr_mem.h"
|
|
#include "elan.h"
|
|
|
|
// ta.cpp
|
|
extern u8 ta_fsm[2049]; //[2048] stores the current state
|
|
extern u32 ta_fsm_cl;
|
|
extern u32 taRenderPass;
|
|
// pvr_regs.cpp
|
|
extern bool fog_needs_update;
|
|
extern bool pal_needs_update;
|
|
|
|
namespace pvr
|
|
{
|
|
|
|
void reset(bool hard)
|
|
{
|
|
KillTex = true;
|
|
Regs_Reset(hard);
|
|
spg_Reset(hard);
|
|
if (hard)
|
|
rend_reset();
|
|
tactx_Term();
|
|
elan::reset(hard);
|
|
if (hard)
|
|
ta_parse_reset();
|
|
}
|
|
|
|
void init()
|
|
{
|
|
spg_Init();
|
|
elan::init();
|
|
}
|
|
|
|
void term()
|
|
{
|
|
tactx_Term();
|
|
spg_Term();
|
|
elan::term();
|
|
}
|
|
|
|
void serialize(Serializer& ser)
|
|
{
|
|
YUV_serialize(ser);
|
|
|
|
ser << pvr_regs;
|
|
|
|
spg_Serialize(ser);
|
|
rend_serialize(ser);
|
|
|
|
ser << ta_fsm[2048];
|
|
ser << ta_fsm_cl;
|
|
ser << taRenderPass;
|
|
|
|
SerializeTAContext(ser);
|
|
|
|
if (!ser.rollback())
|
|
vram.serialize(ser);
|
|
elan::serialize(ser);
|
|
}
|
|
|
|
void deserialize(Deserializer& deser)
|
|
{
|
|
YUV_deserialize(deser);
|
|
|
|
deser >> pvr_regs;
|
|
fog_needs_update = true;
|
|
|
|
spg_Deserialize(deser);
|
|
|
|
rend_deserialize(deser);
|
|
|
|
deser >> ta_fsm[2048];
|
|
deser >> ta_fsm_cl;
|
|
if (deser.version() >= Deserializer::V29)
|
|
deser >> taRenderPass;
|
|
else
|
|
taRenderPass = 0;
|
|
if (deser.version() >= Deserializer::V11 || (deser.version() >= Deserializer::V10_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO))
|
|
DeserializeTAContext(deser);
|
|
|
|
if (!deser.rollback())
|
|
vram.deserialize(deser);
|
|
elan::deserialize(deser);
|
|
pal_needs_update = true;
|
|
}
|
|
|
|
}
|