If you still want to use blocking assignments in driver.sv and get same result as that of questasim;
just use #0 before the blocking assign statements as....
task my_driver::driver_one(my_transaction tr);
#0 vif.en = tr.en;
#0 vif.datain = tr.datain;
@(posedge vif.clk);
endtask;