It was a fast start to the game as Benni McCarthy saw his trademark free-kick go just wide of goal in the opening five minutes.
Seconds later Shere Lekgothoane was booked for a late challenge, while the Swallows defence was caught napping as Oupa Manyisa went agonizingly close as his shot kissed the crossbar two minutes later.
The visitors dominated the first-half as they put out attack after attack, with McCarthy seeing his set-piece hit the woodwork once more in the 13th minute.
Thirty-seven minutes in Lucky Lekgwathi was shown a yellow card for a foul on David Mathebula, while his opposite number Luvhengo Mungomeni was also cautioned for his foul on Tokelo Rantie a minute later.
Swallows came close in the last minute of the half as Bennet Chenene saw the ball taken off him inside the box from a well-timed tackle by Lekgwathi.
The restart saw Khumalo made way for Joseph Makhanya, while the 54th minute saw Andile Jali shown a yellow card for a foul on Lekgothoane.
Two minutes after the hour mark Etafia made a save from a long-range shot by Manyisa, while Moeneeb Josephs pulled off two successive saves six minutes later.
Ten minutes from time Rudolph Bester replaced the tired Rantie, while Tlou Segolela was replaced by Thulasizwe Mbuyane in the 83rd minute.
Swallows should have taken the lead two minutes later as Makhanya was denied by a spectacular save from Josephs, while extra-time saw Pirates’ misery continued as McCarthy clipped the woodwork off a free-kick.