1. A computer-implemented method of executing a shader program subdivided into phases of executable instructions for processing two or more samples, each phase having one or more texture cache access operations, comprising: (a) executing math and texture cache access operations in a processing unit in a current phase of the shader program until a phase boundary between the current phase and a subsequent phase is reached; (b) after the phase boundary has been reached, allowing execution of math operations in the subsequent phase while preventing the execution of texture cache access operations in the subsequent phase until all texture cache access operations in the current phase have completed; and (c) allowing the execution of texture cache access operations in the subsequent phase when all texture cache access operations in the current phase have completed.