Quick answer: Pygame scrolling tilemap showing horizontal tear lines on AMD GPUs? Surface blits without vsync align to driver schedule - enable vsync or render through OpenGL texture.

Vertical scrolling level shows a 2-pixel tear line at random positions. Only AMD drivers.

Enable vsync

pygame.display.set_mode(size, vsync=1)

Pygame 2+ supports vsync. AMD's compositor expects it; without, tearing.

Or use double buffer

pygame.display.set_mode(size, pygame.DOUBLEBUF)

Cheaper than full vsync; reduces but doesn't eliminate.

Test on multiple drivers

NVIDIA, AMD, Intel iGPU. Each composes differently; tearing pattern varies.

“Tearing is a compositor artifact. Drivers compose differently.”

Test on real GPUs from all three major vendors. Cross-vendor bugs are common; cross-vendor testing isn't.

Related reading