After the Rohit-Rahane show, Ravindra Jadeja hit a composed half-century while Umesh Yadav smashed a whirlwind 10-ball 31 to swell India's first innings total.
South Africa skipper Faf du Plessis (1 batting) and Zubayr Hamza (0 batting) were at the crease in a rejigged batting order before bad light stopped play shortly after Tea, much like the first day.
Quinton de Kock, who is not donning the wicketkeeping gloves in this game, opened the batting along with Dean Elgar after Aiden Markram was ruled out of the tie due to an injury. Elgar (0) was caught behind by Wriddhiman Saha off Mohammed Shami, while de Kock (4) too met a similar fate off Umesh's bowling to leave the Proteas reeling at 8/2.
In the first session, vice-captain Ajinkya Rahane notched up his 11th Test hundred, his first at home since scoring 188 against New Zealand in Indore in October 2016.
However, the day belonged to Rohit who reached the 200-run milestone with a six over mid-wicket off pacer Lungi Ngidi in the third over after lunch to receive a standing ovation from the home crowd. Rohit was finally dismissed for 212 off 255 balls (4x28, 6x6), when his mis-timed pull off Kagiso Rabada landed in the hands of Ngidi in deep fine-leg.
In the process, Rohit became the fourth batsman to hit a double hundred both in Test and ODI cricket, emulating Sachin Tendulkar, Virender Sehwag and Chris Gayle.
Overnight batsmen Rohit and Rahane continued from where they had left, stitching together a 267-run fourth wicket stand before Rahane (115 off 192 balls; 4x17; 6x1) was caught behind by debutant wicketkeeper Heinrich Klaasen off fellow first-timer George Linde who scalped his first Test wicket and went on to finish with figures of 4/133.
Rahane, who was batting on 83, brought up his century off 169 balls.
At the other end, Rohit continued to shine as an opener in the longest format as he reached 150 off 199 deliveries after resuming on 117.
After Rahane's dismissal, Jadeja joined Rohit who moved to the 190s from 150 in no time as the visiting team bowlers seemed to lack the firepower to maul the marauding Indian opener who also hit a six to get to his century on Day 1.
Rohit hit Andrich Nortje (1/79) for back-to-back boundaries in the 84th over, the penultimate before lunch, to race to 196 and in the last over before the break survived few edges off Rabada to move to 199.
Jadeja extended his purple patch with the bat with a second consecutive fifty but fell just after achieving the landmark, caught behind off Linde for 51 off 119 deliveries, his knock studded with four fours.
Saha (24) was castled by Linde while Ravichandran Ashwin managed 14 before Umesh plundered five sixes in his entertaining cameo to take the total close to 500. Umesh was finally removed by Linde, who was hit big by the pacer, as he skied the ball for 'keeper Klaasen to complete the catch.
Debutant Shahbaz Nadeem (1 not out) and Mohammed Shami (10 not out) were at the crease when Virat Kohli called them off the field.
Besides Linde, pace spearhaead Rabada took three wickets.
India lead the three-match series 2-0.
Brief scores: India 1st innings: 497/9 declared (Rohit Sharma 212, Ajinkya Rahane 115; Ravindra Jadeja 51, George Linde 4/133, Kagiso Rabada 3/85); South Africa 1st innings: 9/2 (Mohammed Shami 1/0, Umesh Yadav 1/4)
( With inputs from IANS )