nv50,nvc0: fix destination coordinates of blit
authorIlia Mirkin <imirkin@alum.mit.edu>
Mon, 30 Dec 2019 02:50:34 +0000 (21:50 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sun, 12 Jan 2020 17:11:16 +0000 (12:11 -0500)
commit838118462e63745ae70e05b42259f2aa4f81157a
tree236bccaddc5cbe046a645044abb4a866cfa5d594
parentbfd9e7ff243a48873721fd57d9a159cc82f580d6
nv50,nvc0: fix destination coordinates of blit

The fix was found by Karol Herbst a long time ago, but it was unclear
why it helped or if it would create additional problems. This change
adds a comment that explains what's going on, and in the process also
normalizes the nv50 implementation to match.

The coordinates which are fed to gl_Position map directly to pixel
coordinates, since the viewport transform is disabled. If the
framebuffer is MSAA, then that doesn't affect the pixel coordinates at
all, it's just that each pixel has multiple samples.

Note that this makes it really clear that this approach is inappropriate
for EXT_framebuffer_multisample_blit_scaled, and also the 3d path will
fail terribly for direct copies. Thankfully the 2d path normally takes
care of this.

Fixes KHR-GL43.packed_depth_stencil.blit.depth32f_stencil8 as well as
scaling issues in a number of EXT_framebuffer_multisample-related piglit
tests (although they continue to fail due to inaccuracies).

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nv50/nv50_surface.c
src/gallium/drivers/nouveau/nvc0/nvc0_surface.c