VideoCommon: Account for pixel quads in bounding box calculation

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. To account for this, we'll round the top/left down to even and
the bottom/right up to odd. I have verified that the values resulting
from this change exactly match a real Wii.
This commit is contained in:
Techjar 2021-05-22 01:13:55 -04:00
parent 0f17990137
commit be6b000bec
1 changed files with 12 additions and 1 deletions

View File

@ -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)