Method and apparatus for buffering graphics data in a graphics system
First Claim
1. A 3D graphics system including:
- a producer that outputs graphics commands, said producer comprising a microprocessor;
a consumer that consumes the graphics commands outputted by the producer, said consumer comprising graphics hardware including a cache/command processor and pipelined graphics components that transform and rasterize polygons for display; and
a shared memory coupled to the producer and to the consumer, the shared memory having plural buffers allocated therein, said plural buffers each receiving and temporarily storing graphics commands outputted by the producer for delivery to the consumer, at least some of said commands comprising polygon vertex commands, wherein the producer and the consumer are capable of accessing each said buffer independently of one another,wherein said buffers store inline commands calling display lists comprising further graphics commands including polygon vertex commands for execution by said graphics hardware, said display lists being stored elsewhere in said shared memory,wherein said polygon vertex commands are provided to said pipelined graphics components, said pipelined graphics components generating images based at least in part on said polygon vertex commands.
1 Assignment
0 Petitions
Accused Products
Abstract
A graphics system including a custom graphics and audio processor produces exciting 2D and 3D graphics and surround sound. The system includes a graphics and audio processor including a 3D graphics pipeline and an audio digital signal processor. Techniques for efficiently buffering graphics data between a producer and a consumer within a low-cost graphics systems such as a 3D home video game overcome the problem that a small-sized FIFO buffer in the graphics hardware may not adequately load balance a producer and consumer—causing the producer to stall when the consumer renders bit primitives. One aspect of the invention solves this invention by allocating part of main memory to provide a variable number of variable sized graphics commands buffers. Applications can specify the number of buffers and the size of each. All writes to the graphics FIFO can be routed a buffer in main memory. The producer and consumer independently maintain their own read and write pointers, decoupling the producer from the consumer. The consumer does not write to the buffer, but uses its write pointer to keep track of data valid positions within the buffer. The producer can write a read command to a buffer that directs the consumer to read a string of graphics commands (e.g., display list) stored elsewhere in the memory, and to subsequently return to reading the rest of the buffer. Display lists can be created by simply writing a command that redirects the output of the producer to a display list buffer.
-
Citations
68 Claims
-
1. A 3D graphics system including:
-
a producer that outputs graphics commands, said producer comprising a microprocessor; a consumer that consumes the graphics commands outputted by the producer, said consumer comprising graphics hardware including a cache/command processor and pipelined graphics components that transform and rasterize polygons for display; and a shared memory coupled to the producer and to the consumer, the shared memory having plural buffers allocated therein, said plural buffers each receiving and temporarily storing graphics commands outputted by the producer for delivery to the consumer, at least some of said commands comprising polygon vertex commands, wherein the producer and the consumer are capable of accessing each said buffer independently of one another, wherein said buffers store inline commands calling display lists comprising further graphics commands including polygon vertex commands for execution by said graphics hardware, said display lists being stored elsewhere in said shared memory, wherein said polygon vertex commands are provided to said pipelined graphics components, said pipelined graphics components generating images based at least in part on said polygon vertex commands. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
-
-
31. A 3D graphics system including:
-
a memory shared between a producer and a consumer; a storage buffer allocated within said shared memory, said storage buffer receiving and temporarily storing graphics commands; a producer that writes graphics commands into said buffer, said producer maintaining a producer write pointer and a producer read pointer associated with the buffer, said producer comprising a microprocessor; and a consumer that consumes the graphics commands stored within the buffer, said consumer comprising graphics hardware including a cache/command processor and pipelined graphics components that transform and rasterize polygons for display, the consumer maintaining a consumer write pointer that is independent of the producer write pointer, and a consumer read pointer that is independent of the producer read pointer, wherein said buffer stores an inline command calling a display command list stored elsewhere in said shared memory for execution by said consumer, said display command list comprising polygon vertex commands that control said pipelined graphics components to draw polygons for display. - View Dependent Claims (32, 33)
-
-
34. A graphics system including:
-
a storage buffer that receives and temporarily stores graphics commands; a producer that writes graphics commands into said buffer, said producer maintaining a producer write pointer and a producer read pointer associated with the buffer; and a consumer that consumes the graphics commands stored within the buffer, the consumer maintaining a consumer write pointer that is independent of the producer write pointer, and a consumer read pointer that is independent of the producer read pointer, wherein the producer sends the consumer a configuration command specifying whether the consumer should auto-increment the consumer write pointer in response to producer writes to the buffer.
-
-
35. In a 3D graphics system including a graphics command producer that writes graphics commands into a buffer based on a producer write pointer, said command producer allocating said buffer within a memory shared by said command producer and a graphics command consumer, the graphics command consumer reading graphics commands from the buffer based on a consumer read pointer, said graphics command consumer comprising graphics hardware including a cache/command processor and pipelined graphics components that transform and rasterize polygons for display,
an improvement comprising: -
a consumer write pointer independently maintained by the consumer, the consumer write pointer indicating the extent of valid data the producer has written into said buffer, the consumer ceasing to consume graphics commands from the buffer upon the consumer read pointer having a predetermined relationship to the consumer write pointer, wherein said buffer stores an inline command calling a list of graphics commands stored elsewhere in said shared memory for execution by said consumer, said called list of graphics commands including polygon vertex commands that command said pipelined graphics components to draw polygons for display.
-
-
36. In an interactive 3D graphics system including a processor module executing an application, a graphics processor module and at least one memory coupled to the processor module and to the graphics processor module, a method of controlling the flow of graphics commands between the processor module and the graphics processor module comprising:
-
dynamically establishing, under control of the application, a variable number of FIFO buffers in the memory, the application specifying the size of each of the FIFO buffers; the application controlling the processor module to write graphics commands into at least a first of the plurality of FIFO buffers; and the application sending graphics commands to the graphics processor module that control the graphics processor module to read, independently of said processor writes, the graphics command from the first FIFO buffer, wherein said application stores, into at least one of the FIFO buffers, an inline command calling a list of graphics commands stored elsewhere in said memory for execution by said graphics module, said called list of graphics commands including polygon vertex commands that command said graphics module to draw polygons for display. - View Dependent Claims (37, 38, 39, 40, 41, 42)
-
-
43. A 3D graphics system including:
-
a shared memory that receives and temporarily stores graphics commands; a producer that writes commands into a buffer within said shared memory, said producer comprising a microprocessor, said commands including a first set of graphics commands and a command referencing a second set of graphics commands stored elsewhere within said shared memory; and a consumer that consumes the first set of graphics commands stored within the buffer and, in response to encountering the referencing command, consumes the second set of graphics commands referenced thereby and subsequently returns to the buffer to consume additional commands therefrom, said consumer comprising graphics hardware including a cache/command processor and further graphics pipeline components that transform and rasterize polygons for display, wherein said buffer stores an inline command calling a list of display commands stored elsewhere in said shared memory for execution by said consumer, said called list of graphics commands including polygon vertex commands that command said graphics pipeline components to draw polygons for display. - View Dependent Claims (44, 45)
-
-
46. A graphics system including:
-
a storage device that receives and temporarily stores graphics commands; a producer that writes commands into a buffer within said storage device, said commands including a first set of graphics commands and a command referencing a second set of graphics commands stored elsewhere within said storage device; and a consumer that consumes the first set of graphics commands stored within the buffer and, in response to encountering the referencing command, consumes the second set of graphics commands referenced thereby and subsequently returns to the buffer to consume additional commands therefrom, wherein the referencing command specifies a starting address of a display list, the referencing command controlling the consumer to read the display list beginning at the specified starting address.
-
-
47. A 3D graphics system including:
-
a storage device that receives and temporarily stores graphics commands; a producer that writes commands into a buffer within said storage device, said commands including a first set of graphics commands and a command referencing a second set of graphics commands stored elsewhere within said storage device; and a consumer that consumes the first set of graphics commands stored within the buffer and, in response to encountering the referencing command, consumes the second set of graphics commands referenced thereby and subsequently returns to the buffer to consume additional commands therefrom, wherein the referencing command specifies a number of data units the consumer is to consume.
-
-
48. In a 3D graphics system, a method for passing graphics commands from a producer of graphics commands, said producer comprising a microprocessor, to a consumer of graphics commands, said consumer comprising graphics hardware including a cache/command processor and further graphics pipeline components that transform and rasterize polygons for display, the method comprising:
-
creating plural variable sized buffers disposed at variable locations within a memory coupled to the producer and the consumer, temporarily storing graphics commands produced by the producer in the variable sized buffers; writing, into at least one said buffers, an inline command calling a list of display commands stored elsewhere in the memory; consuming the graphics commands from the variable sized buffers with the consumer by accessing the buffers independently of the producer; executing the list of display commands in response to said inline command within said at least one buffer, said list of display commands including polygon vertex commands specifying vertices of polygons to draw within a graphics image; after consuming the list of display commands, accessing further graphics command within said buffer having said inline command calling said display list written therein;
generating at least a part of said graphics image based at least in part on the consumed graphics commands and said executed display list; and
outputting the generated part of said graphics image to a display. - View Dependent Claims (49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62)
-
-
63. A method for producing 3D images including:
-
maintaining a producer write pointer and a producer read pointer associated with a buffer allocated within a memory shared by the producer and a consumer; writing graphics commands, including an inline display list call, into the buffer, and updating at least the write pointer in response to the writing; maintaining, in association with the buffer, a consumer write pointer that is independent of the producer write pointer, and a consumer read pointer that is independent of the producer read pointer; the consumer consuming the graphics commands stored within the buffer, including accessing a display list comprising polygon vertex graphics commands stored elsewhere within said memory in response to encountering said inline display list call within said buffer, updating at least the read pointer in response to the consuming, and, after executing the display list, accessing and consuming further graphics command disposed sequentially within said buffer after the inline display list call;
producing at least a part of a graphics image at least in part in response to the consuming and executing step; and
outputting the generated part of said graphics image to a display.
-
-
64. A method of producing 3D images including:
-
writing commands into a buffer within a shared memory, said commands including a first set of graphics commands and a command referring to a display list stored elsewhere within said shared memory; consuming the first set of graphics commands stored within the buffer; in response to encountering the referring command, executing polygon vertex commands in the display list and subsequently automatically returning to consume additional commands from the buffer;
generating at least a part of an image at least in part in response to the consumed first set of graphics commands and said display list; and
outputting the generated part of said graphics image to a display.
-
-
65. A method of supplying 3D graphics commands to a 3D graphics command consumer comprising:
-
(a) storing a command sequence beginning at a predetermined storage location; (b) supplying a graphics command stream through a FIFO buffer to the consumer, the stream including at least one command that refers the command consumer to a display list comprising polygon vertex commands stored beginning at the predetermined storage location; and (c) the graphics command consumer executing said display list polygon vertex commands beginning at the predetermined storage location in response to encountering said at least one command that refers the command consumer to the display list, wherein the producer returns to access additional portions of said graphics command stream from the FIFO buffer after consuming the command sequence beginning at the predetermined storage location;
wherein the graphics command consumer executes said display list polygon vertex commands to generate at least a part of a graphics image and outputting the generated part of said graphics image to a display.
-
-
66. A method of efficiently generating successive graphics images on a display device, comprising:
-
writing commands into a memory buffer, said commands including at least a first set of graphics commands and at least one calling command that calls a further, prestored list of display commands; consuming, with a 3D graphics engine, at least some of the first set of graphics commands to generate at least a portion of a first image in a frame buffer memory; in response to encountering the calling command, reading the stored display commands in the display list with the 3D graphics engine and responsively generating at least a further portion of said first image in said frame buffer memory; the 3D graphics engine subsequently automatically returning from said called display list to consume additional ones of the first set of graphics commands stored in said memory buffer to generate at least an additional portion of the first graphics display image in the frame buffer memory; displaying the first graphics display image on the display device; writing additional commands into the same or different memory buffer, said additional commands including at least a second set of graphics commands and at least one calling command that calls the same further, prestored list of display commands; consuming, with the 3D graphics engine, at least some of the second set of graphics commands to generate at least a portion of a second image in the same or different frame buffer memory; in response to encountering the calling command, reading the commands in said prestored display list with the 3D graphics engine and responsively generating at least a further portion of said second image in said same or different frame buffer memory, thereby reusing said further, stored list of display commands to generate said second image; subsequently automatically returning from said called display list to consume, with the 3D graphics engine, additional ones of the second set of graphics commands stored in said memory buffer to generate at least an additional portion of the second graphics display image in the same or different frame buffer memory; and displaying the second graphics display image on the display device based on the contents of said same or different frame buffer memory. - View Dependent Claims (67, 68)
-
Specification