summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 8b86136e0..6aea375f1 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -478,6 +478,10 @@ TextureCacheRuntime::TextureCacheRuntime(const Device& device_, ProgramManager&
478 if (is_rescaling_on) { 478 if (is_rescaling_on) {
479 rescale_draw_fbo.Create(); 479 rescale_draw_fbo.Create();
480 rescale_read_fbo.Create(); 480 rescale_read_fbo.Create();
481
482 // Make sure the framebuffer is created without DSA
483 glBindFramebuffer(GL_READ_FRAMEBUFFER, rescale_draw_fbo.handle);
484 glBindFramebuffer(GL_READ_FRAMEBUFFER, rescale_read_fbo.handle);
481 } 485 }
482} 486}
483 487
@@ -882,11 +886,6 @@ bool Image::Scale(bool scale_src, bool scale_dst) {
882 UNIMPLEMENTED(); 886 UNIMPLEMENTED();
883 return false; 887 return false;
884 } 888 }
885 GLint prev_draw_fbo;
886 GLint prev_read_fbo;
887 glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &prev_draw_fbo);
888 glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &prev_read_fbo);
889
890 const GLenum attachment = [this] { 889 const GLenum attachment = [this] {
891 switch (GetFormatType(info.format)) { 890 switch (GetFormatType(info.format)) {
892 case SurfaceType::ColorTexture: 891 case SurfaceType::ColorTexture:
@@ -935,10 +934,8 @@ bool Image::Scale(bool scale_src, bool scale_dst) {
935 dst_info.size.height = dst_height; 934 dst_info.size.height = dst_height;
936 auto dst_texture = MakeImage(dst_info, gl_internal_format); 935 auto dst_texture = MakeImage(dst_info, gl_internal_format);
937 936
938 const auto& read_fbo = runtime->rescale_read_fbo; 937 const GLuint read_fbo = runtime->rescale_read_fbo.handle;
939 const auto& draw_fbo = runtime->rescale_draw_fbo; 938 const GLuint draw_fbo = runtime->rescale_draw_fbo.handle;
940 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw_fbo.handle);
941 glBindFramebuffer(GL_READ_FRAMEBUFFER, read_fbo.handle);
942 for (s32 layer = 0; layer < info.resources.layers; ++layer) { 939 for (s32 layer = 0; layer < info.resources.layers; ++layer) {
943 for (s32 level = 0; level < info.resources.levels; ++level) { 940 for (s32 level = 0; level < info.resources.levels; ++level) {
944 const u32 src_level_width = std::max(1u, src_width >> level); 941 const u32 src_level_width = std::max(1u, src_width >> level);
@@ -946,20 +943,15 @@ bool Image::Scale(bool scale_src, bool scale_dst) {
946 const u32 dst_level_width = std::max(1u, dst_width >> level); 943 const u32 dst_level_width = std::max(1u, dst_width >> level);
947 const u32 dst_level_height = std::max(1u, dst_height >> level); 944 const u32 dst_level_height = std::max(1u, dst_height >> level);
948 945
949 glNamedFramebufferTextureLayer(read_fbo.handle, attachment, texture.handle, level, 946 glNamedFramebufferTextureLayer(read_fbo, attachment, texture.handle, level, layer);
950 layer); 947 glNamedFramebufferTextureLayer(draw_fbo, attachment, dst_texture.handle, level, layer);
951 glNamedFramebufferTextureLayer(draw_fbo.handle, attachment, dst_texture.handle, level, 948 glBlitNamedFramebuffer(read_fbo, draw_fbo, 0, 0, src_level_width, src_level_height, 0,
952 layer); 949 0, dst_level_width, dst_level_height, mask, filter);
953 glBlitNamedFramebuffer(read_fbo.handle, draw_fbo.handle, 0, 0, src_level_width, 950 glNamedFramebufferTextureLayer(read_fbo, attachment, 0, level, layer);
954 src_level_height, 0, 0, dst_level_width, dst_level_height, mask, 951 glNamedFramebufferTextureLayer(draw_fbo, attachment, 0, level, layer);
955 filter);
956 } 952 }
957 } 953 }
958 texture = std::move(dst_texture); 954 texture = std::move(dst_texture);
959
960 // Restore previous framebuffers
961 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prev_draw_fbo);
962 glBindFramebuffer(GL_READ_FRAMEBUFFER, prev_read_fbo);
963 return true; 955 return true;
964} 956}
965 957