mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 21:06:58 -05:00
OpenGlTextureCache: Fix state invalidation on rescaling.
This commit is contained in:
parent
c5dbd93adb
commit
5c6fa88935
3 changed files with 17 additions and 2 deletions
|
@ -942,10 +942,21 @@ bool Image::Scale(bool up_scale) {
|
||||||
dst_info.size.height = scaled_height;
|
dst_info.size.height = scaled_height;
|
||||||
upscaled_backup = MakeImage(dst_info, gl_internal_format);
|
upscaled_backup = MakeImage(dst_info, gl_internal_format);
|
||||||
}
|
}
|
||||||
|
auto& state_tracker = runtime->GetStateTracker();
|
||||||
|
state_tracker.NotifyViewport0();
|
||||||
|
state_tracker.NotifyScissor0();
|
||||||
// TODO (ameerj): Investigate other GL states that affect blitting.
|
// TODO (ameerj): Investigate other GL states that affect blitting.
|
||||||
GLboolean scissor_test;
|
GLboolean scissor_test;
|
||||||
glGetBooleani_v(GL_SCISSOR_TEST, 0, &scissor_test);
|
glGetBooleani_v(GL_SCISSOR_TEST, 0, &scissor_test);
|
||||||
glDisablei(GL_SCISSOR_TEST, 0);
|
glDisablei(GL_SCISSOR_TEST, 0);
|
||||||
|
if (up_scale) {
|
||||||
|
glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(scaled_width),
|
||||||
|
static_cast<GLfloat>(scaled_height));
|
||||||
|
} else {
|
||||||
|
glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(original_width),
|
||||||
|
static_cast<GLfloat>(original_height));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const GLuint read_fbo = runtime->rescale_read_fbos[fbo_index].handle;
|
const GLuint read_fbo = runtime->rescale_read_fbos[fbo_index].handle;
|
||||||
const GLuint draw_fbo = runtime->rescale_draw_fbos[fbo_index].handle;
|
const GLuint draw_fbo = runtime->rescale_draw_fbos[fbo_index].handle;
|
||||||
|
|
|
@ -116,6 +116,10 @@ public:
|
||||||
|
|
||||||
void TickFrame() {}
|
void TickFrame() {}
|
||||||
|
|
||||||
|
StateTracker& GetStateTracker() {
|
||||||
|
return state_tracker;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct StagingBuffers {
|
struct StagingBuffers {
|
||||||
explicit StagingBuffers(GLenum storage_flags_, GLenum map_flags_);
|
explicit StagingBuffers(GLenum storage_flags_, GLenum map_flags_);
|
||||||
|
|
|
@ -1810,8 +1810,8 @@ void TextureCache<P>::BindRenderTarget(ImageViewId* old_id, ImageViewId new_id)
|
||||||
if (*old_id == new_id) {
|
if (*old_id == new_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (*old_id) {
|
if (new_id) {
|
||||||
const ImageViewBase& old_view = slot_image_views[*old_id];
|
const ImageViewBase& old_view = slot_image_views[new_id];
|
||||||
if (True(old_view.flags & ImageViewFlagBits::PreemtiveDownload)) {
|
if (True(old_view.flags & ImageViewFlagBits::PreemtiveDownload)) {
|
||||||
uncommitted_downloads.push_back(old_view.image_id);
|
uncommitted_downloads.push_back(old_view.image_id);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue