An apparatus comprising: a system memory that is accessible via a system bus; and a graphics processing unit comprising: a local memory; a memory copy engine configured to retrieve first data from the system memory via the system bus, perform one or more modification tasks on the first data, and store the modified first data into the local memory; and, a shader processor configured to retrieve the modified first data from the local memory, process the modified first data to generate second data, and store the second data into the local memory, wherein the memory copy engine is further configured to: retrieve the second data from the local memory, perform one or more modification tasks on the second data, and store the modified second data into the system memory via the system bus,; and to indicate to the shader processor that the memory copy engine completed at least one of storing the modified first data into the local memory, and storing the modified second data into the system memory, the apparatus being characterized in that the modification tasks comprise at least one of gathering and compacting data, color conversion of data, compression of data, decompression of data, or conversion of data generated by one shader program into a data form usable by another shader program. a system memory that is accessible via a system bus; and a graphics processing unit comprising: a local memory; a memory copy engine configured to retrieve first data from the system memory via the system bus, perform one or more modification tasks on the first data, and store the modified first data into the local memory; and, a shader processor configured to retrieve the modified first data from the local memory, process the modified first data to generate second data, and store the second data into the local memory, wherein the memory copy engine is further configured to: retrieve the second data from the local memory, perform one or more modification tasks on the second data, and store the modified second data into the system memory via the system bus,; and to indicate to the shader processor that the memory copy engine completed at least one of storing the modified first data into the local memory, and storing the modified second data into the system memory, the apparatus being characterized in that the modification tasks comprise at least one of gathering and compacting data, color conversion of data, compression of data, decompression of data, or conversion of data generated by one shader program into a data form usable by another shader program. a local memory; a memory copy engine configured to retrieve first data from the system memory via the system bus, perform one or more modification tasks on the first data, and store the modified first data into the local memory; and, a shader processor configured to retrieve the modified first data from the local memory, process the modified first data to generate second data, and store the second data into the local memory, wherein the memory copy engine is further configured to: retrieve the second data from the local memory, perform one or more modification tasks on the second data, and store the modified second data into the system memory via the system bus,; and to indicate to the shader processor that the memory copy engine completed at least one of storing the modified first data into the local memory, and storing the modified second data into the system memory, the apparatus being characterized in that the modification tasks comprise at least one of gathering and compacting data, color conversion of data, compression of data, decompression of data, or conversion of data generated by one shader program into a data form usable by another shader program.