Patent ID: 8139073

Claim:
A method of reading a surface stored in memory that includes compressed data and non-compressed data, comprising: producing a read request from a compression aware client to obtain existing data stored in a tile mapped to the surface; reading a compression tag corresponding to a position of the tile from a compression tag cache; determining if the existing data stored in the tile is represented in a compressed format or in a non-compressed format based on the compression tag; allocating an amount of memory in a returned data buffer to buffer the existing data stored in the tile based on the compression tag, wherein entries in the returned data buffer are allocated in the order in which read requests are received from the compression aware client; outputting the read request for arbitration to access the memory in order to receive the existing data stored in the tile; arbitrating the read request with other read and write requests, including other read and write requests produced by a naive client that is only able to read and write non-compressed surfaces, to produce arbitrated read requests and arbitrated write requests; reordering the arbitrated read requests and the arbitrated write requests based on sizes of the arbitrated read requests indicated by the compression tag to produce reordered requests that are in a different order than the order in which the requests are received from the compression aware client; and updating the compression tag stored in the compression tag cache when an entry in a compression tag storage corresponding to the position of the tile is changed.