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;
|
||||
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.
|
||||
GLboolean scissor_test;
|
||||
glGetBooleani_v(GL_SCISSOR_TEST, 0, &scissor_test);
|
||||
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 draw_fbo = runtime->rescale_draw_fbos[fbo_index].handle;
|
||||
|
|
|
@ -116,6 +116,10 @@ public:
|
|||
|
||||
void TickFrame() {}
|
||||
|
||||
StateTracker& GetStateTracker() {
|
||||
return state_tracker;
|
||||
}
|
||||
|
||||
private:
|
||||
struct StagingBuffers {
|
||||
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) {
|
||||
return;
|
||||
}
|
||||
if (*old_id) {
|
||||
const ImageViewBase& old_view = slot_image_views[*old_id];
|
||||
if (new_id) {
|
||||
const ImageViewBase& old_view = slot_image_views[new_id];
|
||||
if (True(old_view.flags & ImageViewFlagBits::PreemtiveDownload)) {
|
||||
uncommitted_downloads.push_back(old_view.image_id);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue