mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-14 18:19:36 +01:00
Merge branch 'sum2012-crc32_patch3'
This commit is contained in:
commit
ba1b900bf8
5 files changed
+147
-84
No files matched your search
+70
-70
@@ -35,16 +35,16 @@ class FakeJit : public FakeGen::FakeXCodeBlock, public JitInterface, public MIPS
|
||||
public:
|
||||
FakeJit(MIPSState *mipsState);
|
||||
|
||||
void DoState(PointerWrap &p);
|
||||
void DoState(PointerWrap &p) override;
|
||||
static void DoDummyState(PointerWrap &p);
|
||||
|
||||
const JitOptions &GetJitOptions() { return jo; }
|
||||
|
||||
void Comp_Generic(MIPSOpcode op);
|
||||
void Comp_Generic(MIPSOpcode op) override;
|
||||
|
||||
void RunLoopUntil(u64 globalticks);
|
||||
void RunLoopUntil(u64 globalticks) override;
|
||||
|
||||
void Compile(u32 em_address); // Compiles a block at current MIPS PC
|
||||
void Compile(u32 em_address) override; // Compiles a block at current MIPS PC
|
||||
const u8 *DoJit(u32 em_address, JitBlock *b);
|
||||
|
||||
const u8 *GetCrashHandler() const override { return nullptr; }
|
||||
@@ -55,80 +55,80 @@ public:
|
||||
void EatInstruction(MIPSOpcode op);
|
||||
void AddContinuedBlock(u32 dest);
|
||||
|
||||
void Comp_RunBlock(MIPSOpcode op);
|
||||
void Comp_ReplacementFunc(MIPSOpcode op);
|
||||
void Comp_RunBlock(MIPSOpcode op) override;
|
||||
void Comp_ReplacementFunc(MIPSOpcode op) override;
|
||||
|
||||
// Ops
|
||||
void Comp_ITypeMem(MIPSOpcode op) {}
|
||||
void Comp_Cache(MIPSOpcode op) {}
|
||||
void Comp_ITypeMem(MIPSOpcode op) override {}
|
||||
void Comp_Cache(MIPSOpcode op) override {}
|
||||
|
||||
void Comp_RelBranch(MIPSOpcode op) {}
|
||||
void Comp_RelBranchRI(MIPSOpcode op) {}
|
||||
void Comp_FPUBranch(MIPSOpcode op) {}
|
||||
void Comp_FPULS(MIPSOpcode op) {}
|
||||
void Comp_FPUComp(MIPSOpcode op) {}
|
||||
void Comp_Jump(MIPSOpcode op) {}
|
||||
void Comp_JumpReg(MIPSOpcode op) {}
|
||||
void Comp_Syscall(MIPSOpcode op) {}
|
||||
void Comp_Break(MIPSOpcode op) {}
|
||||
void Comp_RelBranch(MIPSOpcode op) override {}
|
||||
void Comp_RelBranchRI(MIPSOpcode op) override {}
|
||||
void Comp_FPUBranch(MIPSOpcode op) override {}
|
||||
void Comp_FPULS(MIPSOpcode op) override {}
|
||||
void Comp_FPUComp(MIPSOpcode op) override {}
|
||||
void Comp_Jump(MIPSOpcode op) override {}
|
||||
void Comp_JumpReg(MIPSOpcode op) override {}
|
||||
void Comp_Syscall(MIPSOpcode op) override {}
|
||||
void Comp_Break(MIPSOpcode op) override {}
|
||||
|
||||
void Comp_IType(MIPSOpcode op) {}
|
||||
void Comp_RType2(MIPSOpcode op) {}
|
||||
void Comp_RType3(MIPSOpcode op) {}
|
||||
void Comp_ShiftType(MIPSOpcode op) {}
|
||||
void Comp_Allegrex(MIPSOpcode op) {}
|
||||
void Comp_Allegrex2(MIPSOpcode op) {}
|
||||
void Comp_VBranch(MIPSOpcode op) {}
|
||||
void Comp_MulDivType(MIPSOpcode op) {}
|
||||
void Comp_Special3(MIPSOpcode op) {}
|
||||
void Comp_IType(MIPSOpcode op) override {}
|
||||
void Comp_RType2(MIPSOpcode op) override {}
|
||||
void Comp_RType3(MIPSOpcode op) override {}
|
||||
void Comp_ShiftType(MIPSOpcode op) override {}
|
||||
void Comp_Allegrex(MIPSOpcode op) override {}
|
||||
void Comp_Allegrex2(MIPSOpcode op) override {}
|
||||
void Comp_VBranch(MIPSOpcode op) override {}
|
||||
void Comp_MulDivType(MIPSOpcode op) override {}
|
||||
void Comp_Special3(MIPSOpcode op) override {}
|
||||
|
||||
void Comp_FPU3op(MIPSOpcode op) {}
|
||||
void Comp_FPU2op(MIPSOpcode op) {}
|
||||
void Comp_mxc1(MIPSOpcode op) {}
|
||||
void Comp_FPU3op(MIPSOpcode op) override {}
|
||||
void Comp_FPU2op(MIPSOpcode op) override {}
|
||||
void Comp_mxc1(MIPSOpcode op) override {}
|
||||
|
||||
void Comp_DoNothing(MIPSOpcode op) {}
|
||||
void Comp_DoNothing(MIPSOpcode op) override {}
|
||||
|
||||
void Comp_SV(MIPSOpcode op) {}
|
||||
void Comp_SVQ(MIPSOpcode op) {}
|
||||
void Comp_VPFX(MIPSOpcode op) {}
|
||||
void Comp_VVectorInit(MIPSOpcode op) {}
|
||||
void Comp_VMatrixInit(MIPSOpcode op) {}
|
||||
void Comp_VDot(MIPSOpcode op) {}
|
||||
void Comp_VecDo3(MIPSOpcode op) {}
|
||||
void Comp_VV2Op(MIPSOpcode op) {}
|
||||
void Comp_Mftv(MIPSOpcode op) {}
|
||||
void Comp_Vmfvc(MIPSOpcode op) {}
|
||||
void Comp_Vmtvc(MIPSOpcode op) {}
|
||||
void Comp_Vmmov(MIPSOpcode op) {}
|
||||
void Comp_VScl(MIPSOpcode op) {}
|
||||
void Comp_Vmmul(MIPSOpcode op) {}
|
||||
void Comp_Vmscl(MIPSOpcode op) {}
|
||||
void Comp_Vtfm(MIPSOpcode op) {}
|
||||
void Comp_VHdp(MIPSOpcode op) {}
|
||||
void Comp_VCrs(MIPSOpcode op) {}
|
||||
void Comp_VDet(MIPSOpcode op) {}
|
||||
void Comp_Vi2x(MIPSOpcode op) {}
|
||||
void Comp_Vx2i(MIPSOpcode op) {}
|
||||
void Comp_Vf2i(MIPSOpcode op) {}
|
||||
void Comp_Vi2f(MIPSOpcode op) {}
|
||||
void Comp_Vh2f(MIPSOpcode op) {}
|
||||
void Comp_Vcst(MIPSOpcode op) {}
|
||||
void Comp_Vhoriz(MIPSOpcode op) {}
|
||||
void Comp_VRot(MIPSOpcode op) {}
|
||||
void Comp_VIdt(MIPSOpcode op) {}
|
||||
void Comp_Vcmp(MIPSOpcode op) {}
|
||||
void Comp_Vcmov(MIPSOpcode op) {}
|
||||
void Comp_Viim(MIPSOpcode op) {}
|
||||
void Comp_Vfim(MIPSOpcode op) {}
|
||||
void Comp_VCrossQuat(MIPSOpcode op) {}
|
||||
void Comp_Vsgn(MIPSOpcode op) {}
|
||||
void Comp_Vocp(MIPSOpcode op) {}
|
||||
void Comp_ColorConv(MIPSOpcode op) {}
|
||||
void Comp_Vbfy(MIPSOpcode op) {}
|
||||
void Comp_SV(MIPSOpcode op) override {}
|
||||
void Comp_SVQ(MIPSOpcode op) override {}
|
||||
void Comp_VPFX(MIPSOpcode op) override {}
|
||||
void Comp_VVectorInit(MIPSOpcode op) override {}
|
||||
void Comp_VMatrixInit(MIPSOpcode op) override {}
|
||||
void Comp_VDot(MIPSOpcode op) override {}
|
||||
void Comp_VecDo3(MIPSOpcode op) override {}
|
||||
void Comp_VV2Op(MIPSOpcode op) override {}
|
||||
void Comp_Mftv(MIPSOpcode op) override {}
|
||||
void Comp_Vmfvc(MIPSOpcode op) override {}
|
||||
void Comp_Vmtvc(MIPSOpcode op) override {}
|
||||
void Comp_Vmmov(MIPSOpcode op) override {}
|
||||
void Comp_VScl(MIPSOpcode op) override {}
|
||||
void Comp_Vmmul(MIPSOpcode op) override {}
|
||||
void Comp_Vmscl(MIPSOpcode op) override {}
|
||||
void Comp_Vtfm(MIPSOpcode op) override {}
|
||||
void Comp_VHdp(MIPSOpcode op) override {}
|
||||
void Comp_VCrs(MIPSOpcode op) override {}
|
||||
void Comp_VDet(MIPSOpcode op) override {}
|
||||
void Comp_Vi2x(MIPSOpcode op) override {}
|
||||
void Comp_Vx2i(MIPSOpcode op) override {}
|
||||
void Comp_Vf2i(MIPSOpcode op) override {}
|
||||
void Comp_Vi2f(MIPSOpcode op) override {}
|
||||
void Comp_Vh2f(MIPSOpcode op) override {}
|
||||
void Comp_Vcst(MIPSOpcode op) override {}
|
||||
void Comp_Vhoriz(MIPSOpcode op) override {}
|
||||
void Comp_VRot(MIPSOpcode op) override {}
|
||||
void Comp_VIdt(MIPSOpcode op) override {}
|
||||
void Comp_Vcmp(MIPSOpcode op) override {}
|
||||
void Comp_Vcmov(MIPSOpcode op) override {}
|
||||
void Comp_Viim(MIPSOpcode op) override {}
|
||||
void Comp_Vfim(MIPSOpcode op) override {}
|
||||
void Comp_VCrossQuat(MIPSOpcode op) override {}
|
||||
void Comp_Vsgn(MIPSOpcode op) override {}
|
||||
void Comp_Vocp(MIPSOpcode op) override {}
|
||||
void Comp_ColorConv(MIPSOpcode op) override {}
|
||||
void Comp_Vbfy(MIPSOpcode op) override {}
|
||||
|
||||
int Replace_fabsf() { return 0; }
|
||||
int Replace_fabsf() override { return 0; }
|
||||
|
||||
JitBlockCache *GetBlockCache() { return &blocks; }
|
||||
JitBlockCache *GetBlockCache() override { return &blocks; }
|
||||
JitBlockCacheDebugInterface *GetBlockCacheDebugInterface() override { return &blocks; }
|
||||
|
||||
MIPSOpcode GetOriginalOp(MIPSOpcode op) override { return op; }
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
void LinkBlock(u8 *exitPoint, const u8 *checkedEntry) override {}
|
||||
void UnlinkBlock(u8 *checkedEntry, u32 originalAddress) override {}
|
||||
|
||||
void EatPrefix() { js.EatPrefix(); }
|
||||
void EatPrefix() override { js.EatPrefix(); }
|
||||
|
||||
private:
|
||||
void GenerateFixedCode();
|
||||
|
||||
+14
-3
@@ -138,9 +138,11 @@ namespace Reporting
|
||||
|
||||
if (crcPending) {
|
||||
// Already in process.
|
||||
INFO_LOG(SYSTEM, "CRC already pending");
|
||||
return;
|
||||
}
|
||||
|
||||
INFO_LOG(SYSTEM, "Starting CRC calculation");
|
||||
crcFilename = gamePath;
|
||||
crcPending = true;
|
||||
crcCancel = false;
|
||||
@@ -178,15 +180,24 @@ namespace Reporting
|
||||
|
||||
static void PurgeCRC() {
|
||||
std::unique_lock<std::mutex> guard(crcLock);
|
||||
crcCancel = true;
|
||||
while (crcPending) {
|
||||
crcCond.wait(guard);
|
||||
if (crcPending) {
|
||||
INFO_LOG(SYSTEM, "Cancelling CRC calculation");
|
||||
crcCancel = true;
|
||||
while (crcPending) {
|
||||
crcCond.wait(guard);
|
||||
}
|
||||
} else {
|
||||
INFO_LOG(SYSTEM, "no CRC pending");
|
||||
}
|
||||
|
||||
if (crcThread.joinable())
|
||||
crcThread.join();
|
||||
}
|
||||
|
||||
void CancelCRC() {
|
||||
PurgeCRC();
|
||||
}
|
||||
|
||||
// Returns the full host (e.g. report.ppsspp.org:80.)
|
||||
std::string ServerHost()
|
||||
{
|
||||
|
||||
@@ -63,6 +63,8 @@ namespace Reporting
|
||||
// Returns true if the hash is available, does not queue if not.
|
||||
bool HasCRC(const Path &gamePath);
|
||||
|
||||
void CancelCRC();
|
||||
|
||||
// Blocks until the CRC hash is available for game, and returns it.
|
||||
// To avoid stalling, call HasCRC() in update() or similar and call this if it returns true.
|
||||
uint32_t RetrieveCRC(const Path &gamePath);
|
||||
|
||||
@@ -42,12 +42,40 @@
|
||||
#include "UI/MiscScreens.h"
|
||||
#include "UI/MainScreen.h"
|
||||
#include "UI/BackgroundAudio.h"
|
||||
#include "Core/Reporting.h"
|
||||
|
||||
GameScreen::GameScreen(const Path &gamePath) : UIDialogScreenWithGameBackground(gamePath) {
|
||||
g_BackgroundAudio.SetGame(gamePath);
|
||||
}
|
||||
|
||||
GameScreen::~GameScreen() {
|
||||
if (CRC32string == "...") {
|
||||
Reporting::CancelCRC();
|
||||
}
|
||||
}
|
||||
|
||||
template <typename I> std::string int2hexstr(I w, size_t hex_len = sizeof(I) << 1) {
|
||||
static const char* digits = "0123456789ABCDEF";
|
||||
std::string rc(hex_len, '0');
|
||||
for (size_t i = 0, j = (hex_len - 1) * 4; i < hex_len; ++i, j -= 4)
|
||||
rc[i] = digits[(w >> j) & 0x0f];
|
||||
return rc;
|
||||
}
|
||||
|
||||
void GameScreen::update() {
|
||||
UIScreen::update();
|
||||
|
||||
// Has the user requested a CRC32?
|
||||
if (CRC32string == "...") {
|
||||
// Wait until the CRC32 is ready. It might take time on some devices.
|
||||
if (Reporting::HasCRC(gamePath_)) {
|
||||
uint32_t crcvalue = Reporting::RetrieveCRC(gamePath_);
|
||||
CRC32string = int2hexstr(crcvalue);
|
||||
tvCRC_->SetVisibility(UI::V_VISIBLE);
|
||||
tvCRC_->SetText(CRC32string);
|
||||
btnCalcCRC_->SetVisibility(UI::V_GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameScreen::CreateViews() {
|
||||
@@ -149,6 +177,13 @@ void GameScreen::CreateViews() {
|
||||
btnSetBackground_ = rightColumnItems->Add(new Choice(ga->T("Use UI background")));
|
||||
btnSetBackground_->OnClick.Handle(this, &GameScreen::OnSetBackground);
|
||||
btnSetBackground_->SetVisibility(V_GONE);
|
||||
|
||||
if (!Reporting::HasCRC(gamePath_)) {
|
||||
btnCalcCRC_ = rightColumnItems->Add(new ChoiceWithValueDisplay(&CRC32string, ga->T("Calculate CRC"), (const char*)nullptr));
|
||||
btnCalcCRC_->OnClick.Handle(this, &GameScreen::OnDoCRC32);
|
||||
} else {
|
||||
btnCalcCRC_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
UI::Choice *GameScreen::AddOtherChoice(UI::Choice *choice) {
|
||||
@@ -278,6 +313,14 @@ UI::EventReturn GameScreen::OnCwCheat(UI::EventParams &e) {
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
UI::EventReturn GameScreen::OnDoCRC32(UI::EventParams& e) {
|
||||
CRC32string = "...";
|
||||
Reporting::QueueCRC(gamePath_);
|
||||
btnCalcCRC_->SetEnabled(false);
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
|
||||
UI::EventReturn GameScreen::OnSwitchBack(UI::EventParams &e) {
|
||||
TriggerFinish(DR_OK);
|
||||
return UI::EVENT_DONE;
|
||||
|
||||
+18
-11
@@ -34,6 +34,8 @@ public:
|
||||
GameScreen(const Path &gamePath);
|
||||
~GameScreen();
|
||||
|
||||
void update() override;
|
||||
|
||||
void render() override;
|
||||
|
||||
std::string tag() const override { return "game"; }
|
||||
@@ -61,20 +63,25 @@ private:
|
||||
UI::EventReturn OnDeleteConfig(UI::EventParams &e);
|
||||
UI::EventReturn OnCwCheat(UI::EventParams &e);
|
||||
UI::EventReturn OnSetBackground(UI::EventParams &e);
|
||||
UI::EventReturn OnDoCRC32(UI::EventParams& e);
|
||||
|
||||
// As we load metadata in the background, we need to be able to update these after the fact.
|
||||
UI::TextView *tvTitle_;
|
||||
UI::TextView *tvGameSize_;
|
||||
UI::TextView *tvSaveDataSize_;
|
||||
UI::TextView *tvInstallDataSize_;
|
||||
UI::TextView *tvRegion_;
|
||||
UI::TextView *tvCRC_;
|
||||
UI::TextView *tvTitle_ = nullptr;
|
||||
UI::TextView *tvGameSize_ = nullptr;
|
||||
UI::TextView *tvSaveDataSize_ = nullptr;
|
||||
UI::TextView *tvInstallDataSize_ = nullptr;
|
||||
UI::TextView *tvRegion_ = nullptr;
|
||||
UI::TextView *tvCRC_ = nullptr;
|
||||
|
||||
UI::Choice *btnGameSettings_ = nullptr;
|
||||
UI::Choice *btnCreateGameConfig_ = nullptr;
|
||||
UI::Choice *btnDeleteGameConfig_ = nullptr;
|
||||
UI::Choice *btnDeleteSaveData_ = nullptr;
|
||||
UI::Choice *btnSetBackground_ = nullptr;
|
||||
|
||||
UI::Choice *btnCalcCRC_ = nullptr;
|
||||
|
||||
UI::Choice *btnGameSettings_;
|
||||
UI::Choice *btnCreateGameConfig_;
|
||||
UI::Choice *btnDeleteGameConfig_;
|
||||
UI::Choice *btnDeleteSaveData_;
|
||||
UI::Choice *btnSetBackground_;
|
||||
std::vector<UI::Choice *> otherChoices_;
|
||||
std::vector<Path> saveDirs;
|
||||
std::string CRC32string;
|
||||
};
|
||||
Reference in new issue
Block a user