1. A method for accessing and updating data in a buffer object during the execution of a shader program, the method comprising: loading a plurality of data portions in the buffer object; initiating a first execution of a shader program that accesses a first portion of data in the buffer object; receiving a request to update the first portion of data in the buffer object; updating a version of the first portion of data in the buffer object to reflect the update, wherein the step of updating the version of the first portion of data, comprises: copying pointers from the first version of the buffer object in a buffer object versions table to a second version of the buffer object in the buffer object versions table, wherein each pointer corresponds to a different one of the plurality of portions of data included in the buffer object, copying the first portion of the data in the buffer object to a page pool; modifying the first portion of data in the page pool to produce a first modified portion of data, and changing a pointer to the first portion of data in the second version of the buffer object in the buffer object versions table to point to an address of the first modified portion of data in the page pool; and initiating a second execution of a shader program that accesses the updated version of the first portion of data in the buffer object, wherein the second execution of the shader program occurs without waiting for the execution of the first shader program to complete.