Fix render resolution race condition. Should help #8002

This commit is contained in:
Henrik Rydgard 2015-09-27 19:59:47 +02:00
parent 89513a35cc
commit d3b265a3e4
4 changed files with 17 additions and 11 deletions

View file

@ -90,17 +90,13 @@ FramebufferManagerCommon::FramebufferManagerCommon() :
currentRenderVfb_(0),
framebufRangeEnd_(0),
hackForce04154000Download_(false) {
renderWidth_ = (float)PSP_CoreParameter().renderWidth;
renderHeight_ = (float)PSP_CoreParameter().renderHeight;
pixelWidth_ = PSP_CoreParameter().pixelWidth;
pixelHeight_ = PSP_CoreParameter().pixelHeight;
UpdateSize();
}
FramebufferManagerCommon::~FramebufferManagerCommon() {
}
void FramebufferManagerCommon::Init() {
const std::string gameId = g_paramSFO.GetValueString("DISC_ID");
// This applies a hack to Dangan Ronpa, its demo, and its sequel.
// The game draws solid colors to a small framebuffer, and then reads this directly in VRAM.
@ -114,15 +110,18 @@ void FramebufferManagerCommon::Init() {
BeginFrame();
}
void FramebufferManagerCommon::UpdateSize() {
renderWidth_ = (float)PSP_CoreParameter().renderWidth;
renderHeight_ = (float)PSP_CoreParameter().renderHeight;
pixelWidth_ = PSP_CoreParameter().pixelWidth;
pixelHeight_ = PSP_CoreParameter().pixelHeight;
}
void FramebufferManagerCommon::BeginFrame() {
DecimateFBOs();
currentRenderVfb_ = 0;
useBufferedRendering_ = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
updateVRAM_ = !(g_Config.iRenderingMode == FB_NON_BUFFERED_MODE || g_Config.iRenderingMode == FB_BUFFERED_MODE);
renderWidth_ = (float)PSP_CoreParameter().renderWidth;
renderHeight_ = (float)PSP_CoreParameter().renderHeight;
pixelWidth_ = PSP_CoreParameter().pixelWidth;
pixelHeight_ = PSP_CoreParameter().pixelHeight;
}
void FramebufferManagerCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {

View file

@ -211,6 +211,8 @@ public:
void SetRenderSize(VirtualFramebuffer *vfb);
protected:
void UpdateSize();
virtual void DisableState() = 0;
virtual void ClearBuffer() = 0;
virtual void ClearDepthBuffer() = 0;

View file

@ -1109,7 +1109,7 @@ namespace DX9 {
void FramebufferManagerDX9::EndFrame() {
if (resized_) {
DestroyAllFBOs();
dxstate.viewport.set(0, 0, pixelWidth_, pixelHeight_);
dxstate.viewport.set(0, 0, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
// Actually, auto mode should be more granular...
// Round up to a zoom factor for the render size.
int zoom = g_Config.iInternalResolution;
@ -1132,6 +1132,7 @@ namespace DX9 {
PSP_CoreParameter().renderHeight = 272 * zoom;
}
UpdateSize();
ShowScreenResolution();
resized_ = false;
}

View file

@ -1659,8 +1659,10 @@ void ShowScreenResolution();
void FramebufferManager::EndFrame() {
if (resized_) {
// TODO: Only do this if the new size actually changed the renderwidth/height.
DestroyAllFBOs();
glstate.viewport.set(0, 0, pixelWidth_, pixelHeight_);
// Probably not necessary
glstate.viewport.set(0, 0, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
// Actually, auto mode should be more granular...
// Round up to a zoom factor for the render size.
@ -1684,6 +1686,8 @@ void FramebufferManager::EndFrame() {
PSP_CoreParameter().renderHeight = 272 * zoom;
}
UpdateSize();
resized_ = false;
#ifdef _WIN32
ShowScreenResolution();