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)