Block rendering method for a graphics subsystem
First Claim
1. A method of rendering a primitive, comprising:
- dividing a primitive into groups of spans each including at least two subgroups of spans;
rendering each group of spans along the spans from an entry in a direction away from a long edge of the primitive, including alternately rendering blocks of pixels from different subgroups of spans while rendering along the spans by the steps of;
(a) rendering a block of pixels within a subgroup of spans;
(b) rendering a block of pixels adjacent a block of pixels last rendered and within a same subgroup of spans as the block of pixels last rendered;
(c) rendering a block of pixels within a different subgroup of spans adjacent the block of pixels rendered in step (b);
(d) repeating steps (b) and (c) until all blocks of pixels within a current group of spans in a current rendering direction have been rendered; and
rendering each group of spans along the spans from the entry in a direction toward the long edge of the primitive.
1 Assignment
0 Petitions
Accused Products
Abstract
Primitives are divided into span groups of 2N spans, and then processed in M×N blocks of pixels, with the pixel blocks preferably being as close to square as possible and therefore optimized for small spans and texture mapping. Each span group is rendered block-by-block in a serpentine manner from an initial or entry block, first in a direction away from the long edge of the primitive and then in a direction towards the long edge. The interpolators include a one-deep stack onto which pixel and texel information for the initial or entry block are pushed before rendering any other blocks within the span group. Blocks or pairs of blocks within different span subgroups of the span group are then alternately rendered, such that rendering zig-zags between the span subgroups as it proceeds to the end of the span group. Once the first end of a span group is reached, the values for the initial or entry block are popped from the stack and rendering resumes from the initial or entry block in the opposite direction, but in the same serpentine or zig-zag manner, until the other end of the span group is reached. The next span group, if any, is rendered starting with a block adjacent to the last block rendered in the previous span group. Memory bandwidth utilization between the pixel and texel cache and the frame buffer is thus improved, together with texel reuse during texture mapping, to reduce the total number of pixel and texel fetches required to render the primitive.
65 Citations
19 Claims
-
1. A method of rendering a primitive, comprising:
-
dividing a primitive into groups of spans each including at least two subgroups of spans;
rendering each group of spans along the spans from an entry in a direction away from a long edge of the primitive, including alternately rendering blocks of pixels from different subgroups of spans while rendering along the spans by the steps of;
(a) rendering a block of pixels within a subgroup of spans;
(b) rendering a block of pixels adjacent a block of pixels last rendered and within a same subgroup of spans as the block of pixels last rendered;
(c) rendering a block of pixels within a different subgroup of spans adjacent the block of pixels rendered in step (b);
(d) repeating steps (b) and (c) until all blocks of pixels within a current group of spans in a current rendering direction have been rendered; and
rendering each group of spans along the spans from the entry in a direction toward the long edge of the primitive. - View Dependent Claims (4, 5, 6, 7)
rendering a first group of spans from a block of pixels including a vertex of the primitive in the direction away from the long edge; and
after rendering the first group of spans from the block of pixels including the vertex in the direction away from the long edge, rendering the first group of spans, if necessary, from the block of pixels including the vertex in the direction towards the long edge.
-
-
5. The method of claim 4, wherein the step of rendering each group of spans along the spans from an entry in a direction away from a long edge of the primitive further comprises:
-
rendering each group of spans subsequent to the first group of spans;
from an entry block of pixels adjacent a last block of pixels rendered in a previous group of spans in the direction away from the long edge; and
after rendering from the entry block of pixels in the direction away from the long edge, rendering from the entry block of pixels in the direction towards the long edge if necessary.
-
-
6. The method of claim 1, wherein the step of rendering each group of spans along the spans from an entry in a direction away from a long edge of the primitive further comprises:
rendering each group of spans in M×
N blocks of pixels.
-
7. The method of claim 6, wherein the step of rendering each group of spans in M×
- N blocks of pixels further comprises;
rendering each group of spans in 4×
2 blocks of pixels.
- N blocks of pixels further comprises;
-
2. A method of rendering a primitive, comprising:
-
dividing a primitive into groups of four spans;
rendering each group of spans along the spans from an entry in a direction away from a long edge of the primitive; and
rendering each group of spans along the spans from the entry in a direction toward the long edge of the primitive. - View Dependent Claims (3)
alternately rendering one or two 4×
2 blocks of pixels from different subgroups of two spans within a group of spans while rendering along the spans.
-
-
8. A system for rendering a primitive, comprising:
-
blocking control logic dividing a primitive into span groups each including 2N spans, and further dividing the span groups into M×
N blocks of pixels; and
one or more interpolators rendering each span group along the spans from an entry in a direction away from a long edge of the primitive and then from the entry in a direction toward the long edge of the primitive, wherein the one or more interpolators render the span groups block-by-block in a serpentine order along the spans each span group includes two subgroups of N spans and the one or more interpolators render no more than two blocks within a given span subgroup before rendering at least one block within a different span subgroup. - View Dependent Claims (9, 10, 11, 12, 13, 14)
a graphics adapter containing the blocking control logic and the one or more interpolators.
-
-
10. The system of claim 8, further comprising:
-
a data processing system including a display; and
a graphics adapter within the data processing system and containing the blocking control logic and the one or more interpolators, the graphics adapter rendering the primitive for the display.
-
-
11. The system of claim 8, wherein the one or more interpolators each include an at least one-deep stack onto which pixel and texel information for an entry block in a span group is pushed before rendering other blocks within the span group.
-
12. The system of claim 11, wherein the entry block is an initial block within a first span group including a vertex for the primitive.
-
13. The system of claim 11, wherein the entry block is an block within a span group adjacent to a last rendered block within a previous span group.
-
14. The system of claim 11, wherein the pixel and texel information for the entry block is popped from the stack after rendering the span group from the entry block in the direction away from the long edge to a first end of the span group and before rendering the span group from the entry block in the direction towards the long edge to a second, opposite end of the span group.
-
15. A computer program product within a computer usable medium for rendering a primitive, comprising:
-
instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive; and
instructions for rendering the group of blocks block-by-block in the serpentine order from the entry block in a direction towards the long edge of the primitive instructions for logically dividing the primitive into M×
N blocks of pixels and into groups of blocks, wherein each group of blocks includes two parallel rows of blocks spanning the primitive.
-
-
16. A computer program product within a computer usable medium for rendering a primitive, comprising:
-
instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive; and
instructions for rendering the group of blocks block-by-block in the serpentine order from the entry block in a direction towards the long edge of the primitive including instructions for rendering no more than two blocks within one row of blocks in the group of blocks before rendering at least one block within another row of blocks in the group of blocks.
-
-
17. A computer program product within a computer usable medium for rendering a primitive, comprising:
-
instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive; and
instructions for rendering the group of blocks block-by-block in the serpentine order from the entry block in a direction towards the long edge of the primitive including instructions for zig-zagging between two rows of blocks in the group of blocks while rendering the group of blocks.
-
-
18. A computer program product within a computer usable medium for rendering a primitive, comprising:
-
instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive; and
instructions for rendering the group of blocks block-by-block in the serpentine order from the entry block in a direction towards the long edge of the primitive wherein the instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive further comprise;
instructions for rendering the entry block first in the group of blocks; and
instructions for pushing pixel and texel information for the entry block onto a stack before rendering any other block within the group of blocks.
-
-
19. A computer program product within a computer usable medium for rendering a primitive, comprising:
-
instructions for rendering a group of blocks within a primitive block-by-block in a serpentine order from an entry block in a direction away from a long edge of the primitive;
instructions for rendering the group of blocks block-by-block in the serpentine order from the entry block in a direction towards the long edge of the primitive; and
instructions for popping pixel and texel information for the entry block from a stack after rendering all blocks in the group of blocks from the entry block in the direction away from the long edge and before rendering any block within the group of blocks from the entry block in the direction towards the long edge.
-
Specification