Always trigger gpu->Resized when exiting GameSettingsScreen.

Strangely, this does NOT help #9438.
This commit is contained in:
Henrik Rydgård 2017-03-17 10:27:49 +01:00
parent d8abcb8d74
commit 17a250df7a
13 changed files with 25 additions and 63 deletions

View file

@ -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);

View file

@ -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_;

View file

@ -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);
}

View file

@ -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;

View file

@ -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);
}

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);
}

View file

@ -88,7 +88,6 @@ public:
framebufferManager_ = fbManager;
}
void Resized();
void DeviceLost();
void DeviceRestore(VulkanContext *vulkan);

View file

@ -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();
}
/*

View file

@ -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;

View file

@ -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: