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:
parent
0f17990137
commit
be6b000bec
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue