mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-26 23:10:38 +00:00
Merge pull request #17513 from hrydgard/fix-post-proc-stretch
Post-processing: Fix using limited UV ranges when there's a single upscaling filter in the chain.
This commit is contained in:
commit
6f380a7a0a
@ -287,6 +287,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
GLRFramebuffer *CreateFramebuffer(int width, int height, bool z_stencil, const char *tag) {
|
GLRFramebuffer *CreateFramebuffer(int width, int height, bool z_stencil, const char *tag) {
|
||||||
|
_dbg_assert_(width > 0 && height > 0 && tag != nullptr);
|
||||||
|
|
||||||
GLRInitStep &step = initSteps_.push_uninitialized();
|
GLRInitStep &step = initSteps_.push_uninitialized();
|
||||||
step.stepType = GLRInitStepType::CREATE_FRAMEBUFFER;
|
step.stepType = GLRInitStepType::CREATE_FRAMEBUFFER;
|
||||||
step.create_framebuffer.framebuffer = new GLRFramebuffer(caps_, width, height, z_stencil, tag);
|
step.create_framebuffer.framebuffer = new GLRFramebuffer(caps_, width, height, z_stencil, tag);
|
||||||
|
@ -293,6 +293,8 @@ bool PresentationCommon::UpdatePostShader() {
|
|||||||
int w = usePreviousAtOutputResolution ? pixelWidth_ : renderWidth_;
|
int w = usePreviousAtOutputResolution ? pixelWidth_ : renderWidth_;
|
||||||
int h = usePreviousAtOutputResolution ? pixelHeight_ : renderHeight_;
|
int h = usePreviousAtOutputResolution ? pixelHeight_ : renderHeight_;
|
||||||
|
|
||||||
|
_dbg_assert_(w > 0 && h > 0);
|
||||||
|
|
||||||
static constexpr int FRAMES = 2;
|
static constexpr int FRAMES = 2;
|
||||||
previousFramebuffers_.resize(FRAMES);
|
previousFramebuffers_.resize(FRAMES);
|
||||||
previousIndex_ = 0;
|
previousIndex_ = 0;
|
||||||
@ -668,7 +670,7 @@ void PresentationCommon::CopyToOutput(OutputFlags flags, int uvRotation, float u
|
|||||||
|
|
||||||
float finalU0 = u0, finalU1 = u1, finalV0 = v0, finalV1 = v1;
|
float finalU0 = u0, finalU1 = u1, finalV0 = v0, finalV1 = v1;
|
||||||
|
|
||||||
if (usePostShader) {
|
if (usePostShader && !(isFinalAtOutputResolution && postShaderPipelines_.size() == 1)) {
|
||||||
// The final blit will thus use the full texture.
|
// The final blit will thus use the full texture.
|
||||||
finalU0 = 0.0f;
|
finalU0 = 0.0f;
|
||||||
finalV0 = 0.0f;
|
finalV0 = 0.0f;
|
||||||
|
@ -212,32 +212,6 @@ void GPUCommon::NotifyDisplayResized() {
|
|||||||
displayResized_ = true;
|
displayResized_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called once per frame. Might also get called during the pause screen
|
|
||||||
// if "transparent".
|
|
||||||
void GPUCommon::CheckConfigChanged() {
|
|
||||||
if (configChanged_) {
|
|
||||||
ClearCacheNextFrame();
|
|
||||||
gstate_c.SetUseFlags(CheckGPUFeatures());
|
|
||||||
drawEngineCommon_->NotifyConfigChanged();
|
|
||||||
textureCache_->NotifyConfigChanged();
|
|
||||||
framebufferManager_->NotifyConfigChanged();
|
|
||||||
BuildReportingInfo();
|
|
||||||
configChanged_ = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check needed when running tests.
|
|
||||||
if (framebufferManager_) {
|
|
||||||
framebufferManager_->CheckPostShaders();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPUCommon::CheckDisplayResized() {
|
|
||||||
if (displayResized_) {
|
|
||||||
framebufferManager_->NotifyDisplayResized();
|
|
||||||
displayResized_ = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPUCommon::DumpNextFrame() {
|
void GPUCommon::DumpNextFrame() {
|
||||||
dumpNextFrame_ = true;
|
dumpNextFrame_ = true;
|
||||||
}
|
}
|
||||||
|
@ -76,9 +76,6 @@ public:
|
|||||||
}
|
}
|
||||||
virtual u32 CheckGPUFeatures() const = 0;
|
virtual u32 CheckGPUFeatures() const = 0;
|
||||||
|
|
||||||
void CheckDisplayResized() override;
|
|
||||||
void CheckConfigChanged() override;
|
|
||||||
|
|
||||||
virtual void UpdateCmdInfo() = 0;
|
virtual void UpdateCmdInfo() = 0;
|
||||||
|
|
||||||
bool IsReady() override {
|
bool IsReady() override {
|
||||||
|
@ -401,6 +401,32 @@ GPUCommonHW::~GPUCommonHW() {
|
|||||||
delete shaderManager_;
|
delete shaderManager_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called once per frame. Might also get called during the pause screen
|
||||||
|
// if "transparent".
|
||||||
|
void GPUCommonHW::CheckConfigChanged() {
|
||||||
|
if (configChanged_) {
|
||||||
|
ClearCacheNextFrame();
|
||||||
|
gstate_c.SetUseFlags(CheckGPUFeatures());
|
||||||
|
drawEngineCommon_->NotifyConfigChanged();
|
||||||
|
textureCache_->NotifyConfigChanged();
|
||||||
|
framebufferManager_->NotifyConfigChanged();
|
||||||
|
BuildReportingInfo();
|
||||||
|
configChanged_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check needed when running tests.
|
||||||
|
if (framebufferManager_) {
|
||||||
|
framebufferManager_->CheckPostShaders();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUCommonHW::CheckDisplayResized() {
|
||||||
|
if (displayResized_) {
|
||||||
|
framebufferManager_->NotifyDisplayResized();
|
||||||
|
displayResized_ = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GPUCommonHW::CheckRenderResized() {
|
void GPUCommonHW::CheckRenderResized() {
|
||||||
if (renderResized_) {
|
if (renderResized_) {
|
||||||
framebufferManager_->NotifyRenderResized(msaaLevel_);
|
framebufferManager_->NotifyRenderResized(msaaLevel_);
|
||||||
|
@ -83,7 +83,10 @@ protected:
|
|||||||
void BuildReportingInfo() override;
|
void BuildReportingInfo() override;
|
||||||
void UpdateMSAALevel(Draw::DrawContext *draw) override;
|
void UpdateMSAALevel(Draw::DrawContext *draw) override;
|
||||||
|
|
||||||
|
void CheckDisplayResized() override;
|
||||||
void CheckRenderResized() override;
|
void CheckRenderResized() override;
|
||||||
|
void CheckConfigChanged() override;
|
||||||
|
|
||||||
u32 CheckGPUFeaturesLate(u32 features) const;
|
u32 CheckGPUFeaturesLate(u32 features) const;
|
||||||
|
|
||||||
int msaaLevel_ = 0;
|
int msaaLevel_ = 0;
|
||||||
|
@ -449,11 +449,13 @@ SoftGPU::SoftGPU(GraphicsContext *gfxCtx, Draw::DrawContext *draw)
|
|||||||
if (gfxCtx && draw) {
|
if (gfxCtx && draw) {
|
||||||
presentation_ = new PresentationCommon(draw_);
|
presentation_ = new PresentationCommon(draw_);
|
||||||
presentation_->SetLanguage(draw_->GetShaderLanguageDesc().shaderLanguage);
|
presentation_->SetLanguage(draw_->GetShaderLanguageDesc().shaderLanguage);
|
||||||
|
presentation_->UpdateDisplaySize(PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
|
||||||
|
presentation_->UpdateRenderSize(PSP_CoreParameter().renderWidth, PSP_CoreParameter().renderHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
NotifyConfigChanged();
|
NotifyConfigChanged();
|
||||||
NotifyRenderResized();
|
|
||||||
NotifyDisplayResized();
|
NotifyDisplayResized();
|
||||||
|
NotifyRenderResized();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftGPU::DeviceLost() {
|
void SoftGPU::DeviceLost() {
|
||||||
@ -723,14 +725,28 @@ void SoftGPU::NotifyRenderResized() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SoftGPU::NotifyDisplayResized() {
|
void SoftGPU::NotifyDisplayResized() {
|
||||||
if (presentation_) {
|
displayResized_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoftGPU::CheckDisplayResized() {
|
||||||
|
if (displayResized_ && presentation_) {
|
||||||
presentation_->UpdateDisplaySize(PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
|
presentation_->UpdateDisplaySize(PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
|
||||||
presentation_->UpdateRenderSize(PSP_CoreParameter().renderWidth, PSP_CoreParameter().renderHeight);
|
presentation_->UpdateRenderSize(PSP_CoreParameter().renderWidth, PSP_CoreParameter().renderHeight);
|
||||||
presentation_->UpdatePostShader();
|
presentation_->UpdatePostShader();
|
||||||
|
displayResized_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftGPU::NotifyConfigChanged() {}
|
void SoftGPU::CheckConfigChanged() {
|
||||||
|
if (configChanged_) {
|
||||||
|
drawEngineCommon_->NotifyConfigChanged();
|
||||||
|
BuildReportingInfo();
|
||||||
|
if (presentation_) {
|
||||||
|
presentation_->UpdatePostShader();
|
||||||
|
}
|
||||||
|
configChanged_ = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SoftGPU::FastRunLoop(DisplayList &list) {
|
void SoftGPU::FastRunLoop(DisplayList &list) {
|
||||||
PROFILE_THIS_SCOPE("soft_runloop");
|
PROFILE_THIS_SCOPE("soft_runloop");
|
||||||
|
@ -152,7 +152,9 @@ public:
|
|||||||
|
|
||||||
void NotifyRenderResized() override;
|
void NotifyRenderResized() override;
|
||||||
void NotifyDisplayResized() override;
|
void NotifyDisplayResized() override;
|
||||||
void NotifyConfigChanged() override;
|
|
||||||
|
void CheckDisplayResized() override;
|
||||||
|
void CheckConfigChanged() override;
|
||||||
|
|
||||||
void GetReportingInfo(std::string &primaryInfo, std::string &fullInfo) override {
|
void GetReportingInfo(std::string &primaryInfo, std::string &fullInfo) override {
|
||||||
primaryInfo = "Software";
|
primaryInfo = "Software";
|
||||||
|
Loading…
Reference in New Issue
Block a user