Patent ID: 7852345

Claim:
A method for accessing a bindable uniform variable bound to a buffer object, the method comprising: creating a linked program object comprising two or more shader programs, wherein each shader program is executed by a different processing unit and includes instructions written in a high-level shader language, and wherein the linked program object includes a reference to a bindable uniform variable and indicates which shader programs use the bindable uniform variable; determining a memory size to support the bindable uniform variable; allocating a buffer object having the memory size; binding the buffer object to the bindable uniform variable; populating the buffer object with values for the bindable uniform variable; accessing the values of the bindable uniform with one or more of the shader programs in the linked program object, wherein the buffer object provides the values of the bindable uniform variable for each of the two or more shader programs; performing a first execution of a shader program that accesses an original value for a first portion of data in the buffer object, wherein the buffer object includes a plurality of portions of data; receiving a request to update the first portion of the data in the buffer object; updating the first portion of data, which includes: copying pointers from a 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 data within the buffer object is updated; and performing a second execution of a shader program that accesses an updated value for the first portion of data, wherein the second execution of a shader programs occurs without waiting for the execution of the first shader program to complete.