Mayo ended Donegal's hopes of reaching a fourth All-Ireland semi-final berth in five years with a 2-13 to 0-11 win.
Goals from Aidan O'Shea and Lee Keegan either side of half time were crucial for the Connacht side in Croke Park.
Donegal were over-reliant on Michael Murphy who kicked 0-8 of their total.
Mayo, who lost Kevin Keane to a straight red card in stoppage time, were fresher after an easier route to the quarter-finals as injuries finally took their toll on Donegal.
Facing into a sixth tough championship encounter of the summer, Donegal were second best throughout and looked in trouble when they trailed by 0-7 to 0-4 after half an hour.
Two Michael Murphy frees reduced the deficit to the minimum, but O'Shea's goal in the second minute of first-half injury time was a killer score.
Sheamus O'Shea's long ball in was well won by his brother on the edge of the square. He turned Neil McGee and easily brushed Mark McHugh aside to drill the ball left-footed across the goal into the far corner of the net to give Mayo a 1-7 to 0-6 half time lead.
It changed the complexion of the game, as Donegal had been hanging in the game despite struggling to commit enough bodies forward to attacks.
Donegal relied on captain Michael Murphy to provide the scores. He hit 0-5 in the opening half, including two from play.
Lee Keegan scored two early points for Mayo and Jason Doherty also scored twice from play as the Connacht champions made the running.
Christy Toye was Donegal's only other point-scorer apart from Murphy in the first half while Mayo had five different players on the scoresheet.
Donegal needed a good start to the second half to recover from O'Shea's spectacular goal, but it was Mayo who got the dream start with Lee Keegan's attempt at a point dropping over Paul Durcan's head into the back of the net.
Goals either side of the interval put Mayo 2-7 to 0-6 ahead and Cillian O'Connor's free opened up an eight-point lead.
Neil McGee limped off early in the second half in a further blow to Donegal's hopes of reaching an All-Ireland semi-final for the fourth time in five years.
The intensity dipped in the second half with Donegal unable to claw their way back into the game.
Subs Leo McLoone and Anthony Thompson kicked points but Mayo were in cruise control and set up an All-Ireland semi-final against Dublin on 30 August.
Donegal: P Durcan; P McGrath, N McGee, E McGee; R McHugh, K Lacey, F McGlynn, N Gallagher, H McFadden; C Toye (0-1), O MacNiallais, M McHugh; P McBrearty, M Murphy (0-8, 5f), C McFadden.
Subs: M McElhinney for Toye (HT), A Thompson (0-1) for N McGee (38), L McLoone (0-1) for MacNiallais (39)
Mayo: D Clarke; G Cafferkey, D Vaughan, K Higgins (0-1); L Keegan (1-2), T Cunniffe, C Boyle; S O'Shea, T Parsons; D O'Connor, A O'Shea (1-0), K McLoughlin (0-2); B Moran, C O'Connor (0-3, 2f), J Doherty (0-3).
Subs: C Barrett for Cunniffe (34), R Hennelly for Clarke (44), P Durcan for Vaughan (BC. 55), A Moran (0-1) for B Moran (61), A Freeman (0-1) for S O'Shea (65), K Keane for Cafferkey (70).
Referee: David Gough (Meath).