A method of processing data with a graphics processing unit, GPU,, the method comprising: executing, with one or more shader processors of the GPU, a work items of a first kernel of an application that includes the first kernel and one or more consecutively executed second kernels, wherein the work items include one or more instructions for processing input data; generating, in addition to results of the work items, a plurality of cull values based on the results of the work items of the first kernel, wherein the plurality of cull values indicate whether to execute work items of one or more second kernels on the input data; storing the plurality of cull values in a buffer; when the plurality of cull values indicate that the work items of the one or more second kernels are not to be executed, determining not to execute the work items of the one or more second kernels based on the one or more cull values; removing the work items of the one or more second kernels from an instruction stream prior to scheduling the work items to be executed by the one or more shader processors if it is determined not to execute the work items of the one or more second kernels; wherein determining whether to execute the work items of the one or more second kernels comprises reading the cull values stored in the buffer and wherein the cull buffer is arranged to store one or more values that represent a characteristic of a workgroup, as well as one or more values that represent a characteristic of individual work items within the work group, such that the cull buffer is used to determine whether instructions are to be culled on both a workgroup and a work item level, whereby if all of the work items of a given workgroup are determined to be irrelevant to the result of the application by the first kernel, the step of removing removes the entire workgroup, so that the irrelevant workgroup is not executed by the one or more second kernels. executing, with one or more shader processors of the GPU, a work items of a first kernel of an application that includes the first kernel and one or more consecutively executed second kernels, wherein the work items include one or more instructions for processing input data; generating, in addition to results of the work items, a plurality of cull values based on the results of the work items of the first kernel, wherein the plurality of cull values indicate whether to execute work items of one or more second kernels on the input data; storing the plurality of cull values in a buffer; when the plurality of cull values indicate that the work items of the one or more second kernels are not to be executed, determining not to execute the work items of the one or more second kernels based on the one or more cull values; removing the work items of the one or more second kernels from an instruction stream prior to scheduling the work items to be executed by the one or more shader processors if it is determined not to execute the work items of the one or more second kernels; wherein determining whether to execute the work items of the one or more second kernels comprises reading the cull values stored in the buffer and wherein the cull buffer is arranged to store one or more values that represent a characteristic of a workgroup, as well as one or more values that represent a characteristic of individual work items within the work group, such that the cull buffer is used to determine whether instructions are to be culled on both a workgroup and a work item level, whereby if all of the work items of a given workgroup are determined to be irrelevant to the result of the application by the first kernel, the step of removing removes the entire workgroup, so that the irrelevant workgroup is not executed by the one or more second kernels.