A processor comprising: a cache; and one or more shader units (215A-215C) coupled to the cache; wherein responsive to a write request targeting compressed surface data usable to render an image, a shader unit of the one or more shader units is configured to: identify a first block of the compressed data targeted by the write request; determine whether to activate logic for fetching and decompressing the first block; responsive to detecting (820, 840) either or both of, based on metadata associated with the first block: data of the first block is set to a single value; or data of the write request updates an entirety of the first block: prevent logic for fetching and decompressing the first block from being activated (825, 860), such that the first block is not fetched; compress data of the write request to form a new first block (830, 865); and write the new first block to the cache (835, 870); responsive to detecting (820, 840) that data of the write request targets less than an entirety of the first block and data of the first block is not set to a single value, the shader unit is configured to: activate logic for fetching and decompressing the first block; merge the data of the write request with the decompressed first block to form a new first block; and compress and write the new first block to the cache. a cache; and one or more shader units (215A-215C) coupled to the cache; wherein responsive to a write request targeting compressed surface data usable to render an image, a shader unit of the one or more shader units is configured to: identify a first block of the compressed data targeted by the write request; determine whether to activate logic for fetching and decompressing the first block; responsive to detecting (820, 840) either or both of, based on metadata associated with the first block: data of the first block is set to a single value; or data of the write request updates an entirety of the first block: prevent logic for fetching and decompressing the first block from being activated (825, 860), such that the first block is not fetched; compress data of the write request to form a new first block (830, 865); and write the new first block to the cache (835, 870); responsive to detecting (820, 840) that data of the write request targets less than an entirety of the first block and data of the first block is not set to a single value, the shader unit is configured to: activate logic for fetching and decompressing the first block; merge the data of the write request with the decompressed first block to form a new first block; and compress and write the new first block to the cache. identify a first block of the compressed data targeted by the write request; determine whether to activate logic for fetching and decompressing the first block; responsive to detecting (820, 840) either or both of, based on metadata associated with the first block: data of the first block is set to a single value; or data of the write request updates an entirety of the first block: prevent logic for fetching and decompressing the first block from being activated (825, 860), such that the first block is not fetched; compress data of the write request to form a new first block (830, 865); and write the new first block to the cache (835, 870); responsive to detecting (820, 840) that data of the write request targets less than an entirety of the first block and data of the first block is not set to a single value, the shader unit is configured to: activate logic for fetching and decompressing the first block; merge the data of the write request with the decompressed first block to form a new first block; and compress and write the new first block to the cache. prevent logic for fetching and decompressing the first block from being activated (825, 860), such that the first block is not fetched; compress data of the write request to form a new first block (830, 865); and write the new first block to the cache (835, 870); responsive to detecting (820, 840) that data of the write request targets less than an entirety of the first block and data of the first block is not set to a single value, the shader unit is configured to: activate logic for fetching and decompressing the first block; merge the data of the write request with the decompressed first block to form a new first block; and compress and write the new first block to the cache. activate logic for fetching and decompressing the first block; merge the data of the write request with the decompressed first block to form a new first block; and compress and write the new first block to the cache.