summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-03-23 15:49:04 -0400
committerGravatar bunnei2018-03-23 15:49:04 -0400
commit054393917e99d307eea0aabc78c0c6e5e709b2c7 (patch)
tree9e497f01b4cbb18deb1e7afc9979954b60ee848b /src
parentmemory: Fix typo in RasterizerFlushVirtualRegion. (diff)
downloadyuzu-054393917e99d307eea0aabc78c0c6e5e709b2c7.tar.gz
yuzu-054393917e99d307eea0aabc78c0c6e5e709b2c7.tar.xz
yuzu-054393917e99d307eea0aabc78c0c6e5e709b2c7.zip
renderer_opengl: Fixes for properly flushing & rendering the framebuffer.
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp6
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp18
2 files changed, 12 insertions, 12 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp
index f6c2b24a8..87b3a2d74 100644
--- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp
@@ -32,12 +32,6 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u3
32 32
33 Core::System::GetInstance().perf_stats.EndGameFrame(); 33 Core::System::GetInstance().perf_stats.EndGameFrame();
34 34
35 // TODO(bunnei): The framebuffer region should only be flushed and invalidated if it is written
36 // to, not every frame. When we find the right place for this, the below line can be removed.
37 Memory::RasterizerFlushVirtualRegion(framebuffer.address,
38 framebuffer.width * framebuffer.height * 4,
39 Memory::FlushMode::FlushAndInvalidate);
40
41 VideoCore::g_renderer->SwapBuffers(framebuffer); 35 VideoCore::g_renderer->SwapBuffers(framebuffer);
42} 36}
43 37
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index ef63cbcf0..4628f6db0 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -137,9 +137,15 @@ void RendererOpenGL::SwapBuffers(boost::optional<const Tegra::FramebufferConfig&
137 */ 137 */
138void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, 138void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer,
139 ScreenInfo& screen_info) { 139 ScreenInfo& screen_info) {
140 const u32 bpp{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)}; 140 const u32 bytes_per_pixel{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)};
141 const u32 size_in_bytes{framebuffer.stride * framebuffer.height * bpp}; 141 const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel};
142 const VAddr framebuffer_addr{framebuffer.address}; 142 const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset};
143
144 // TODO(bunnei): The framebuffer region should only be flushed and invalidated if it is
145 // written to, not every frame. When we find the right place for this, the below line can be
146 // removed.
147 Memory::RasterizerFlushVirtualRegion(framebuffer_addr, size_in_bytes,
148 Memory::FlushMode::FlushAndInvalidate);
143 149
144 // Framebuffer orientation handling 150 // Framebuffer orientation handling
145 framebuffer_transform_flags = framebuffer.transform_flags; 151 framebuffer_transform_flags = framebuffer.transform_flags;
@@ -154,10 +160,10 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf
154 screen_info.display_texture = screen_info.texture.resource.handle; 160 screen_info.display_texture = screen_info.texture.resource.handle;
155 screen_info.display_texcoords = MathUtil::Rectangle<float>(0.f, 0.f, 1.f, 1.f); 161 screen_info.display_texcoords = MathUtil::Rectangle<float>(0.f, 0.f, 1.f, 1.f);
156 162
157 Rasterizer()->FlushRegion(framebuffer_addr, framebuffer.stride * framebuffer.height); 163 Rasterizer()->FlushRegion(framebuffer_addr, size_in_bytes);
158 164
159 VideoCore::MortonCopyPixels128(framebuffer.width, framebuffer.height, bpp, 4, 165 VideoCore::MortonCopyPixels128(framebuffer.width, framebuffer.height, bytes_per_pixel, 4,
160 Memory::GetPointer(framebuffer.address), 166 Memory::GetPointer(framebuffer_addr),
161 gl_framebuffer_data.data(), true); 167 gl_framebuffer_data.data(), true);
162 168
163 state.texture_units[0].texture_2d = screen_info.texture.resource.handle; 169 state.texture_units[0].texture_2d = screen_info.texture.resource.handle;