You need the finish() otherwise there is no guarantee the commands have completed when you do the rebind. Rebinding an object in one context for sure does not call finish() in another context. The bind commands have no idea the other context has issued commands that need to complete. While the finish ensures the changes have made it to the object's primary data store, the rebind is necessary to ensure that any shadows of the object (of which there may be several in the massively parallel machine that is the GPU) get updated from its primary data store.Either way, I guess the only way to know for sure is to ask the people who wrote the spec.
NOTE: This electronic mail message may contain confidential and privileged information from HI Corporation. If you are not the intended recipient, any disclosure, photocopying, distribution or use of the contents of the received information is prohibited. If you have received this e-mail in error, please notify the sender immediately and permanently delete this message and all related copies.