A method for rendering a computer graphics image of a 3-dimensional scene, the method comprising the steps of: subdividing the image into a plurality of rectangular tiles; arranging the tiles in a multi level structure wherein the plurality of tiles are grouped into a plurality of tile blocks, and the plurality of tile blocks are grouped into a plurality of macrotiles; dividing image data to be rendered into a plurality of primitive blocks containing image data required to render the image; for each primitive block, determining a macrotile overlapped by that primitive block, and writing a pointer for that primitive block in a macrotile control list for the macrotile; for each tile block of a macrotile, generating control stream data indicating whether a primitive block that overlaps the macrotile is to be processed for that tile block; for each tile of a tile block for which a primitive block is to be processed, generating a tile indication indicating whether the primitive block is to be processed or is not to be processed for that tile; and using the macrotile control list, control stream data and tile indications to render primitive data into the image; in which the control stream data includes a Full Primitive Mask Flag Present bit to determine whether any full primitive masks are present in the control stream data, and if the Full Primitive Mask Flag Present bit is set, the full primitive masks are used to set a bit for each tile in a tile block which determines whether all primitives in a primitive block are visible in each respective tile, and if the Full Primitive Mask Flag Present bit is not set, writing primitive and vertex data into a primitive mask data stream per macrotile. subdividing the image into a plurality of rectangular tiles; arranging the tiles in a multi level structure wherein the plurality of tiles are grouped into a plurality of tile blocks, and the plurality of tile blocks are grouped into a plurality of macrotiles; dividing image data to be rendered into a plurality of primitive blocks containing image data required to render the image; for each primitive block, determining a macrotile overlapped by that primitive block, and writing a pointer for that primitive block in a macrotile control list for the macrotile; for each tile block of a macrotile, generating control stream data indicating whether a primitive block that overlaps the macrotile is to be processed for that tile block; for each tile of a tile block for which a primitive block is to be processed, generating a tile indication indicating whether the primitive block is to be processed or is not to be processed for that tile; and using the macrotile control list, control stream data and tile indications to render primitive data into the image; in which the control stream data includes a Full Primitive Mask Flag Present bit to determine whether any full primitive masks are present in the control stream data, and if the Full Primitive Mask Flag Present bit is set, the full primitive masks are used to set a bit for each tile in a tile block which determines whether all primitives in a primitive block are visible in each respective tile, and if the Full Primitive Mask Flag Present bit is not set, writing primitive and vertex data into a primitive mask data stream per macrotile.