Просмотр исходного кода

Render-to-texture flush, interval math fix

tfarley 11 лет назад
Родитель
Сommit
66b0d799ee
2 измененных файлов с 14 добавлено и 2 удалено
  1. 1 1
      src/common/math_util.h
  2. 13 1
      src/video_core/renderer_opengl/gl_rasterizer.cpp

+ 1 - 1
src/common/math_util.h

@@ -12,7 +12,7 @@ namespace MathUtil
 {
 
 inline bool IntervalsIntersect(unsigned start0, unsigned length0, unsigned start1, unsigned length1) {
-    return (std::max(start0, start1) <= std::min(start0 + length0, start1 + length1));
+    return (std::max(start0, start1) < std::min(start0 + length0, start1 + length1));
 }
 
 template<typename T>

+ 13 - 1
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -217,7 +217,19 @@ void RasterizerOpenGL::DrawTriangles() {
 
     vertex_batch.clear();
 
-    // TODO: Flush the resource cache at the current depth and color framebuffer addresses for render-to-texture
+    // Flush the resource cache at the current depth and color framebuffer addresses for render-to-texture
+    const auto& regs = Pica::g_state.regs;
+
+    PAddr cur_fb_color_addr = regs.framebuffer.GetColorBufferPhysicalAddress();
+    u32 cur_fb_color_size = Pica::Regs::BytesPerColorPixel(regs.framebuffer.color_format)
+                            * regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight();
+
+    PAddr cur_fb_depth_addr = regs.framebuffer.GetDepthBufferPhysicalAddress();
+    u32 cur_fb_depth_size = Pica::Regs::BytesPerDepthPixel(regs.framebuffer.depth_format)
+                            * regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight();
+
+    res_cache.NotifyFlush(cur_fb_color_addr, cur_fb_color_size);
+    res_cache.NotifyFlush(cur_fb_depth_addr, cur_fb_depth_size);
 }
 
 void RasterizerOpenGL::CommitFramebuffer() {