summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index f93d498fc6..0ff5b52902 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -187,7 +187,18 @@ void Renderer::ReinterpretPixelData(EFBReinterpretType convtype)
u16 Renderer::BBoxRead(int index)
{
- return BBoxReadImpl(index);
+ u16 value = BBoxReadImpl(index);
+
+ // The GC/Wii GPU rasterizes in 2x2 pixel groups, so bounding box values will be rounded to the
+ // extents of these groups, rather than the exact pixel.
+ // This would have been handled in the pixel shader, but all attempts to do so did not work on
+ // OpenGL/NVIDIA, due to presumably mystical driver behavior with atomics.
+ if (index == 0 || index == 2)
+ value &= ~1;
+ else
+ value |= 1;
+
+ return value;
}
void Renderer::BBoxWrite(int index, u16 value)