mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Always trigger gpu->Resized when exiting GameSettingsScreen.
Strangely, this does NOT help #9438.
This commit is contained in:
parent
d8abcb8d74
commit
17a250df7a
13 changed files with 25 additions and 63 deletions
|
@ -114,6 +114,17 @@ static Vec3f ScreenToDrawing(const Vec3f& coords) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
void DrawEngineCommon::Resized() {
|
||||
decJitCache_->Clear();
|
||||
lastVType_ = -1;
|
||||
dec_ = nullptr;
|
||||
for (auto iter = decoderMap_.begin(); iter != decoderMap_.end(); iter++) {
|
||||
delete iter->second;
|
||||
}
|
||||
decoderMap_.clear();
|
||||
ClearTrackedVertexArrays();
|
||||
}
|
||||
|
||||
u32 DrawEngineCommon::NormalizeVertices(u8 *outPtr, u8 *bufPtr, const u8 *inPtr, int lowerBound, int upperBound, u32 vertType) {
|
||||
const u32 vertTypeID = (vertType & 0xFFFFFF) | (gstate.getUVGenMode() << 24);
|
||||
VertexDecoder *dec = GetVertexDecoder(vertTypeID);
|
||||
|
|
|
@ -58,7 +58,11 @@ public:
|
|||
std::vector<std::string> DebugGetVertexLoaderIDs();
|
||||
std::string DebugGetVertexLoaderString(std::string id, DebugShaderStringType stringType);
|
||||
|
||||
void Resized();
|
||||
|
||||
protected:
|
||||
virtual void ClearTrackedVertexArrays() {}
|
||||
|
||||
// Preprocessing for spline/bezier
|
||||
u32 NormalizeVertices(u8 *outPtr, u8 *bufPtr, const u8 *inPtr, int lowerBound, int upperBound, u32 vertType);
|
||||
|
||||
|
@ -83,6 +87,7 @@ protected:
|
|||
u8 *splineBuffer;
|
||||
|
||||
// Cached vertex decoders
|
||||
u32 lastVType_ = -1;
|
||||
std::unordered_map<u32, VertexDecoder *> decoderMap_;
|
||||
VertexDecoder *dec_;
|
||||
VertexDecoderJitCache *decJitCache_;
|
||||
|
|
|
@ -79,7 +79,6 @@ DrawEngineD3D11::DrawEngineD3D11(Draw::DrawContext *draw, ID3D11Device *device,
|
|||
context_(context),
|
||||
decodedVerts_(0),
|
||||
prevPrim_(GE_PRIM_INVALID),
|
||||
lastVType_(-1),
|
||||
shaderManager_(0),
|
||||
textureCache_(0),
|
||||
framebufferManager_(0),
|
||||
|
@ -954,16 +953,6 @@ rotateVBO:
|
|||
host->GPUNotifyDraw();
|
||||
}
|
||||
|
||||
void DrawEngineD3D11::Resized() {
|
||||
decJitCache_->Clear();
|
||||
lastVType_ = -1;
|
||||
dec_ = NULL;
|
||||
for (auto iter = decoderMap_.begin(); iter != decoderMap_.end(); iter++) {
|
||||
delete iter->second;
|
||||
}
|
||||
decoderMap_.clear();
|
||||
}
|
||||
|
||||
bool DrawEngineD3D11::IsCodePtrVertexDecoder(const u8 *ptr) const {
|
||||
return decJitCache_->IsInSpace(ptr);
|
||||
}
|
||||
|
|
|
@ -128,10 +128,7 @@ public:
|
|||
void DestroyDeviceObjects();
|
||||
void GLLost() {};
|
||||
|
||||
void Resized(); // TODO: Call
|
||||
|
||||
void BeginFrame();
|
||||
void ClearTrackedVertexArrays();
|
||||
|
||||
void SetupVertexDecoder(u32 vertType);
|
||||
void SetupVertexDecoderInternal(u32 vertType);
|
||||
|
@ -156,6 +153,8 @@ public:
|
|||
SubmitPrim(verts, inds, prim, vertexCount, vertType, bytesRead);
|
||||
}
|
||||
|
||||
void ClearTrackedVertexArrays() override;
|
||||
|
||||
private:
|
||||
void DecodeVerts();
|
||||
void DecodeVertsStep();
|
||||
|
@ -194,8 +193,6 @@ private:
|
|||
IndexGenerator indexGen;
|
||||
int decodedVerts_;
|
||||
GEPrimitiveType prevPrim_;
|
||||
|
||||
u32 lastVType_;
|
||||
|
||||
TransformedVertex *transformed;
|
||||
TransformedVertex *transformedExpanded;
|
||||
|
|
|
@ -902,16 +902,6 @@ rotateVBO:
|
|||
host->GPUNotifyDraw();
|
||||
}
|
||||
|
||||
void DrawEngineDX9::Resized() {
|
||||
decJitCache_->Clear();
|
||||
lastVType_ = -1;
|
||||
dec_ = NULL;
|
||||
for (auto iter = decoderMap_.begin(); iter != decoderMap_.end(); iter++) {
|
||||
delete iter->second;
|
||||
}
|
||||
decoderMap_.clear();
|
||||
}
|
||||
|
||||
bool DrawEngineDX9::IsCodePtrVertexDecoder(const u8 *ptr) const {
|
||||
return decJitCache_->IsInSpace(ptr);
|
||||
}
|
||||
|
|
|
@ -127,10 +127,8 @@ public:
|
|||
void DestroyDeviceObjects();
|
||||
void GLLost() {};
|
||||
|
||||
void Resized(); // TODO: Call
|
||||
|
||||
void ClearTrackedVertexArrays() override;
|
||||
void DecimateTrackedVertexArrays();
|
||||
void ClearTrackedVertexArrays();
|
||||
|
||||
void SetupVertexDecoder(u32 vertType);
|
||||
void SetupVertexDecoderInternal(u32 vertType);
|
||||
|
|
|
@ -1009,16 +1009,6 @@ rotateVBO:
|
|||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
||||
void DrawEngineGLES::Resized() {
|
||||
decJitCache_->Clear();
|
||||
lastVType_ = -1;
|
||||
dec_ = NULL;
|
||||
for (auto iter = decoderMap_.begin(); iter != decoderMap_.end(); iter++) {
|
||||
delete iter->second;
|
||||
}
|
||||
decoderMap_.clear();
|
||||
}
|
||||
|
||||
GLuint DrawEngineGLES::BindBuffer(const void *p, size_t sz) {
|
||||
// Get a new buffer each time we need one.
|
||||
GLuint buf = AllocateBuffer(sz);
|
||||
|
|
|
@ -131,10 +131,9 @@ public:
|
|||
void DestroyDeviceObjects();
|
||||
void GLLost() override;
|
||||
void GLRestore() override;
|
||||
void Resized();
|
||||
|
||||
void ClearTrackedVertexArrays() override;
|
||||
void DecimateTrackedVertexArrays();
|
||||
void ClearTrackedVertexArrays();
|
||||
|
||||
void SetupVertexDecoder(u32 vertType);
|
||||
inline void SetupVertexDecoderInternal(u32 vertType);
|
||||
|
|
|
@ -933,16 +933,6 @@ void DrawEngineVulkan::UpdateUBOs(FrameData *frame) {
|
|||
}
|
||||
}
|
||||
|
||||
void DrawEngineVulkan::Resized() {
|
||||
decJitCache_->Clear();
|
||||
lastVTypeID_ = -1;
|
||||
dec_ = NULL;
|
||||
for (auto iter = decoderMap_.begin(); iter != decoderMap_.end(); iter++) {
|
||||
delete iter->second;
|
||||
}
|
||||
decoderMap_.clear();
|
||||
}
|
||||
|
||||
bool DrawEngineVulkan::IsCodePtrVertexDecoder(const u8 *ptr) const {
|
||||
return decJitCache_->IsInSpace(ptr);
|
||||
}
|
||||
|
|
|
@ -88,7 +88,6 @@ public:
|
|||
framebufferManager_ = fbManager;
|
||||
}
|
||||
|
||||
void Resized();
|
||||
void DeviceLost();
|
||||
void DeviceRestore(VulkanContext *vulkan);
|
||||
|
||||
|
|
|
@ -924,9 +924,6 @@ UI::EventReturn GameSettingsScreen::OnDisplayLayoutEditor(UI::EventParams &e) {
|
|||
};
|
||||
|
||||
UI::EventReturn GameSettingsScreen::OnResolutionChange(UI::EventParams &e) {
|
||||
if (gpu) {
|
||||
gpu->Resized();
|
||||
}
|
||||
if (g_Config.iAndroidHwScale == 1) {
|
||||
RecreateActivity();
|
||||
}
|
||||
|
@ -996,6 +993,11 @@ void GameSettingsScreen::onFinish(DialogResult result) {
|
|||
host->UpdateUI();
|
||||
|
||||
KeyMap::UpdateNativeMenuKeys();
|
||||
|
||||
// Wipe some caches after potentially changing settings.
|
||||
if (gpu)
|
||||
gpu->Resized();
|
||||
Reporting::UpdateConfig();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -352,13 +352,6 @@ UI::EventReturn GamePauseScreen::OnGameSettings(UI::EventParams &e) {
|
|||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
void GamePauseScreen::onFinish(DialogResult result) {
|
||||
// Do we really always need to "gpu->Resized" here?
|
||||
if (gpu)
|
||||
gpu->Resized();
|
||||
Reporting::UpdateConfig();
|
||||
}
|
||||
|
||||
UI::EventReturn GamePauseScreen::OnState(UI::EventParams &e) {
|
||||
screenManager()->finishDialog(this, DR_CANCEL);
|
||||
return UI::EVENT_DONE;
|
||||
|
|
|
@ -29,7 +29,6 @@ public:
|
|||
GamePauseScreen(const std::string &filename) : UIDialogScreenWithGameBackground(filename), finishNextFrame_(false), gamePath_(filename) {}
|
||||
virtual ~GamePauseScreen();
|
||||
|
||||
void onFinish(DialogResult result) override;
|
||||
virtual void dialogFinished(const Screen *dialog, DialogResult dr) override;
|
||||
|
||||
protected:
|
||||
|
|
Loading…
Add table
Reference in a new issue