BACKGROUND

The technology described herein relates to graphics processing systems, and in particular to a method and apparatus for use when processing graphics primitives in a tile-based graphics processing systems.

Graphics processing is normally carried out by first splitting the scene to be displayed into a number of similar basic components or “primitives”, which primitives are then subjected to the desired graphics processing operations. The graphics “primitives” are usually in the form of simple polygons, such as triangles.

Each primitive is at this stage defined by and represented as a set of vertices. Each vertex for a primitive has associated with it a set of data (such as position, colour, texture and other attributes data) representing the vertex. This “vertex data” is then used, e.g., when rasterising and rendering the primitive(s) to which the vertex relates in order to generate the desired render output of the graphics processing system.

Thus, once primitives and their vertices have been generated and defined, the primitives can be processed by the graphics processing system, in order, e.g., to display the frame. This processing basically involves determining which sampling points of an array of sampling points covering the output area to be processed are covered by a primitive, and then determining the appearance each sampling point should have (e.g. in terms of its colour, etc.) to represent the primitive at that sampling point. These processes are commonly referred to as rasterising and rendering, respectively.

Many graphics processing systems use so-called “tile-based” rendering. In tile-based rendering, the two-dimensional render output (i.e. the output of the rendering process, such as an output frame to be displayed) is rendered as a plurality of smaller area sub-regions, usually referred to as “tiles”. The tiles are each rendered separately (typically one-after-another), and the rendered tiles are then recombined to provide the complete render output (e.g. frame for display). In such arrangements, the render output is typically divided (by area) into regularly-sized and shaped rendering tiles (they are usually e.g., squares or rectangles).

(Other terms that are commonly used for “tiling” and “tile-based” rendering include “chunking” (the rendering tiles are referred to as “chunks”) and “bucket” rendering. The terms “tile” and “tiling” will be used hereinafter for convenience, but it should be understood that these terms are intended to encompass all alternative and equivalent terms and techniques wherein the render output is rendered as a plurality of smaller area sub-regions.)

The advantage of such tile-based rendering is that primitives that do not appear in a given tile do not have to be processed for that tile, and therefore can be ignored when the tile is processed. This can allow the overall amount of graphics processing necessary for a given render output to be reduced.

In a tile-based rendering system, it is accordingly usually desirable to be able to identify and know those primitives that are actually present in a given tile (sub-region), so as to, e.g., avoid unnecessarily rendering primitives that are not actually present in a tile. In order to facilitate this, it is known to prepare for each tile a list of the primitives to be rendered for that tile (e.g. that will appear in the tile). Such a “tile-list” (which is also often referred to as a “primitive list”) identifies, e.g. by reference to a primitive indicator, the primitives to be rendered for the tile in question.

The process of preparing tile-lists for each tile to be rendered basically therefore involves determining the primitives that should be rendered for a given tile. This process is usually carried out by determining (at a desired level of accuracy) the primitives that intersect (i.e. that will appear (at least in part) within) the tile in question, and then preparing a list of those primitives for future use by the graphics processing system. (It should be noted here that where a primitive falls into more than one tile, as will frequently be the case, it is included in the tile-list for each tile that it falls within.)

In effect, each tile can be considered to have a bin (the tile-list) into which any primitive that is found to fall within (i.e. intersect) the sub-region is placed (and, indeed, the process of sorting the primitives on a tile-by-tile basis in this manner is commonly referred to as “binning”).

The tile-lists are usually prepared by processing the data for the primitives in a pipelined fashion, e.g. by performing a series of processing steps such as obtaining the vertex data for the primitives (i.e., primitive assembly, which may include various known geometry processing steps), bounding, binning, etc. These processes generally form part of a “tiler pipeline” within the overall graphics processing system. The tiler pipeline thus prepares the tile-lists, and then writes the tile-lists out (e.g. back to memory), so that the tile-lists can then be used to identify the primitives to be rendered for each tile when generating the desired render output, e.g. to display the frame.

However, the Applicants have recognised that there can be various processing inefficiencies within the tiler pipeline when preparing such tile-lists. Accordingly, the Applicants believe that there remains scope for improvements to existing tile-based rendering systems.

