Vertex cache for 3D computer graphics

Information

  • Patent Grant
  • 6717577
  • Patent Number
    6,717,577
  • Date Filed
    Friday, December 17, 1999
    24 years ago
  • Date Issued
    Tuesday, April 6, 2004
    20 years ago
Abstract
In a 3D interactive computer graphics system such as a video game display system, polygon vertex data is fed to a 3D graphics processor/display engine via a vertex cache used to cache and organize indexed primitive vertex data streams. The vertex cache may be a small, low-latency cache memory local to the display engine hardware. Polygons can be represented as indexed arrays, e.g., indexed linear lists of data components representing some feature of a vertex (for example, positions, colors, surface normals, or texture coordinates). The vertex cache can fetch the relevant blocks of indexed vertex attribute data on an as-needed basis to make it available to the display processor—providing spatial locality for display processing without requiring the vertex data to be prestored in display order. Efficiency can be increased by customizing and optimizing the vertex cache and associated tags for the purpose of delivering vertices to the graphics engine—allowing more efficient prefetching and assembling of vertices than might be possible using a general-purpose cache and tag structure.
Description




FIELD OF THE INVENTION




The present invention relates to 3D interactive computer graphics, and more specifically, to arrangements and techniques for efficiently representing and storing vertex information for animation and display processing. Still more particularly, the invention relates to a 3D graphics integrated circuit including a vertex cache for more efficient imaging of 3D polygon data.




BACKGROUND AND SUMMARY OF THE INVENTION




Modem 3D computer graphics systems construct animated displays from display primitives, i.e., polygons. Each display object (e.g., a tree, a car, or a person or other character) is typically constructed from a number of individual polygons. Each polygon is represented by its vertices—which together specify the location, orientation and size of the polygon in three-dimensional space—along with other characteristics (e.g., color, surface normals for shading, textures, etc.). Computer techniques can efficiently construct rich animated 3D graphical scenes using these techniques.




Low cost, high speed interactive 3D graphics systems such as video game systems are constrained in terms of memory and processing resources. Therefore, in such systems it is important to be able to efficiently represent and process the various polygons representing a display object. For example, it is desirable to make the data representing the display object compact, and to present the data to the 3D graphics system in a way so that all of the data needed for a particular task is conveniently available.




One can characterize data in terms of temporal locality and spatial locality. Temporal locality means the same data is being referenced frequently in a small amount of time. In general, the polygon-representing data for typical 3D interactive graphics applications has a large degree of temporal locality. Spatial locality means that the next data item referenced is stored close in memory to the last one referenced. Efficiency improvements can be realized by increasing the data's spatial locality. In a practical memory system that does not allow unlimited low-latency random access to an unlimited amount of data, performance is increased if all data needed to perform a given task is stored close together in low-latency memory.




To increase the spatial locality of the data, one can sort the polygon data based on the order of processing—assuring that all of the data needed to perform a particular task will be presented at close to the same time so it can be stored together. For example, polygon data making up animations can be sorted in a way that is preferential to the type of animation being performed. As one example, typical complex interactive real-time animation such as surface deformation requires manipulation of all the vertices at the surfaces. To perform such animation efficiently, it is desirable to sort the vertex data in a certain way.




Typical 3D graphical systems perform animation processing and display processing separately, and these separate steps process the data differently. Unfortunately, the optimal order to sort the vertex data for animation processing is generally different from the optimal sort order for display processing. Sorting for animation may tend to add randomness to display ordering. By sorting a data stream to simplify animation processing, we make it harder to efficiently display the data.




Thus, for various reasons, it may not be possible to assume that spatial locality exists when accessing data for display. Difficulty arises from the need to efficiently access an arbitrarily large display object. In addition, for the reasons explained above, there will typically be some amount of randomness—at least for display purposes—in the order the vertex data is presented to the display engine. Furthermore, there may be other data locality above the vertex level that would be useful to implement (e.g., grouping together all polygons that share a certain texture).




One approach to achieving higher efficiency is to provide additional low-latency memory (e.g., the lowest latency memory system affordable). It might al so be possible to fit a display object in fast local memory to achieve random access. However, objects can be quite large, and may need to be double-buffered. Therefore, the buffers required for such an approach could be very large. It might also be possible to use a main CPU's data cache to assemble and sort the polygon data in an optimal order for the display engine. However, to do this effectively, there would have to be some way to prevent the polygon data from thrashing the rest of the data cache. In addition, there would be a need to prefetch the data to hide memory latency—since there will probably be some randomness in the way even data sorted for display order is accessed. Additionally, this approach would place additional loading on the CPU—especially since there might be a need in certain implementations to assemble the data in a binary format the display engine can interpret. Using this approach, the main CPU and the display engine would become serial, with the CPU feeding the data directly to the graphics engine. Parallelizing the processing (e.g., to feed the display engine through a DRAM FIFO buffer) would require substantial additional memory access bandwidth as compared to immediate-mode feeding.




Thus, there exists a need for more efficient techniques that can be used to represent, store and deliver polygon data for a 3D graphics display process.




The present invention solves this problem by providing a vertex cache to organize indexed primitive vertex data streams.




In accordance with one aspect provided by the present invention, polygon vertex data is fed to the 3D graphics processor/display engine via a vertex cache. The vertex cache may be a small, low-latency memory that is local to (e.g., part of) the 3D graphics processor/display engine hardware. Flexibility and efficiency results from the cache providing a virtual memory view much larger than the actual cache contents.




The vertex cache may be used to build up the vertex data needed for display processing on the fly on an as-needed basis. Thus, rather than pre-sorting the vertex data for display purposes, the vertex cache can simply fetch the relevant blocks of data on an as-needed basis to make it available to the display processor. Based on the high degree of temporal locality exhibited by the vertex data for interactive video game display and the use of particularly optimal indexed-array data structures (see below), most of the vertex data needed at any given time will be available in even a small set-associative vertex cache having a number of cache lines proportional to the number of vertex data streams. One example optimum arrangement provides a 512×128-bit dual ported RAM to form an 8 set-associative vertex cache.




Efficiency can be increased by customizing and optimizing the vertex cache and associated tags for the purpose of delivering vertices to the 3D graphics processor/display engine—allowing more efficient prefetching and assembling of vertices than might be possible using a general-purpose cache and tag structure. Because the vertex cache allows data to be fed directly to the display engine, the cost of additional memory access bandwidth is avoided. Direct memory access may be used to efficiently transfer vertex data into the vertex cache.




To further increase the efficiencies afforded by the vertex cache, it is desirable to reduce the need to completely re-specify a particular polygon or set of polygons each time it is (they are) used. In accordance with a further aspect provided by the present invention, polygons can be represented as arrays, e.g., linear lists of data components representing some feature of a vertex (for example, positions, colors, surface normals, or texture coordinates). Each display object may be represented as a collection of such arrays along with various sets of indices. The indices reference the arrays for a particular animation or display purpose. By representing polygon data as indexed component lists, discontinuities are allowed between mappings. Further, separating out individual components allows data to be stored more compactly (e.g., in a fully compressed format). The vertex cache provided by the present invention can accommodate streams of such indexed data up to the index size.




Through use of an indexed vertex representation in conjunction with the vertex cache, there is no need to provide any resorting for display purposes. For example, the vertex data may be presented to the display engine in a order presorted for animation as opposed to display—making animation a more efficient process. The vertex cache uses the indexed vertex data structure representation to efficiently make the vertex data available to the display engine without any need for explicit resorting.




Any vertex component can be index-referenced or directly inlined in the command stream. This enables efficient data processing by the main processor without requiring the main processor's output to conform to the graphics display data structure. For example, lighting operations performed by the main processor may generate only a color array from a list of normals and positions by loop-processing a list of lighting parameters to generate the color array. There is no need for the animation process to follow a triangle list display data structure, nor does the animation process need to reformat the data for display. The display process can naturally consume the data provided by the animation process without adding substantial data reformatting overhead to the animation process.




On the other hand, there is no penalty for sorting the vertex data in display order; the vertex data is efficiently presented to the display engine in either case, without the vertex cache significantly degrading performance vis-a-vis a vertex presentation structure optimized for presenting data presorted for display.




In accordance with a further aspect provided by this invention, the vertex data includes quantized, compressed data streams in any of several different formats (e.g., 8-bit fixed point, 16-bit fixed point, or floating point). This data can be indexed (i.e., referenced by the vertex data stream) or direct (i.e., contained within the stream itself). These various data formats can all be stored in the common vertex cache, and subsequently decompressed and converted into a common format for the graphics display pipeline. Such hardware support of flexible types, formats and numbers of attributes as either immediate or indexed input data avoids complex and time-consuming software data conversion.











BRIEF DESCRIPTION OF THE DRAWINGS




These and other features and advantages provided by the present invention will be better and more completely understood by referring to the following detailed description of preferred embodiments in conjunction with the drawings of which:





FIG. 1

is a block diagram of an example interactive 3D graphics system;





FIG. 1A

is a block diagram of the example graphics and audio coprocessor shown in

FIG. 1

;





FIG. 1B

is a more detailed schematic diagram of portions of the

FIG. 1A

graphics and audio coprocessor showing an example 3D pipeline graphics processing arrangement;





FIG. 2

shows an example command processor including a vertex cache provided with vertex index array data;





FIG. 2A

shows an example display list processor including a vertex cache provided in accordance with the present invention;





FIG. 2B

shows an example dual FIFO arrangement;





FIG. 3

is a schematic diagram of an example indexed vertex data structure;





FIG. 3A

shows an example vertex descriptor block;





FIG. 4

is a block diagram of an example vertex cache implementation;





FIG. 5

shows an example vertex cache memory address format; and





FIG. 6

shows an example vertex cache tag status register format.











DETAILED DESCRIPTION OF PRESENTLY PREFERRED EXAMPLE EMBODIMENTS





FIG. 1

is a schematic diagram of an overall example interactive 3D computer graphics system


100


in which the present invention may be practiced. System


100


can be used to play interactive 3D video games accompanied by interesting stereo sound. Different games can be played by inserting appropriate storage media such as optical disks into an optical disk player


134


. A game player can interact with system


100


in real time by manipulating input devices such as handheld controllers


132


, which may include a variety of controls such as joysticks, buttons, switches, keyboards or keypads, etc.




System


100


includes a main processor (CPU)


102


, a main memory


104


, and a graphics and audio coprocessor


106


. In this example, main processor


102


receives inputs from handheld controllers


132


(and/or other input devices) via coprocessor


100


. Main processor


102


interactively responds to such user inputs, and executes a video game or other graphics program supplied, for example, by external storage


134


. For example, main processor


102


can perform collision detection and animation processing in addition to a variety of real time interactive control functions.




Main processor


102


generates 3D graphics and audio commands and sends them to graphics and audio coprocessor


106


. The graphics and audio coprocessor


106


processes these commands to generate interesting visual images on a display


136


and stereo sounds on stereo loudspeakers


137


R,


137


L or other suitable sound-generating devices.




System


100


includes a TV encoder


140


that receives image signals from coprocessor


100


and converts the image signals into composite video signals suitable for display on a standard display device


136


(e.g., a computer monitor or home color television set). System


100


also includes an audio codec (compressor/decompressor)


138


that compresses and decompresses digitized audio signals (and may also convert between digital and analog audio signalling formats). Audio codec


138


can receive audio inputs via a buffer


140


and provide them to coprocessor


106


for processing (e.g., mixing with other audio signals the coprocessor generates and/or receives via a streaming audio output of optical disk device


134


). Coprocessor


106


stores audio related information in a memory


144


that is dedicated to audio tasks. Coprocessor


106


provides the resulting audio output signals to audio codec


138


for decompression and conversion to analog signals (e.g., via buffer amplifiers


142


L,


142


R) so they can be played by speakers


137


L,


137


R.




Coprocessor


106


has the ability to communicate with various peripherals that may be present within system


100


. For example, a parallel digital bus


146


may be used to communicate with optical disk device


134


. A serial peripheral bus


148


may communicate with a variety of peripherals including, for example, a ROM and/or real time clock


150


, a modem


152


, and flash memory


154


. A further external serial bus


156


may be used to communicate with additional expansion memory


158


(e.g., a memory card).




Graphics And Audio Coprocessor





FIG. 1A

is a block diagram of components within coprocessor


106


. Coprocessor


106


may be a single integrated circuit. In this example, coprocessor


106


includes a 3D graphics processor/display engine


107


, a processor interface


108


, a memory interface


110


, an audio digital signal processor (DSP)


162


, an audio memory interface (I/F)


164


, an audio interface and mixer


166


, a peripheral controller


168


, and a display controller


128


.




3D graphics processor/display engine


107


performs graphics processing tasks, and audio digital signal processor


162


performs audio processing tasks. Display controller


128


accesses image information from memory


104


and provides it to TV encoder


140


for display on display device


136


. Audio interface and mixer


166


interfaces with audio codec


138


, and can also mix audio from different sources (e.g., a streaming audio input from disk


134


, the output of audio DSP


162


, and external audio input received via audio codec


138


). Processor interface


108


provides a data and control interface between main processor


102


and coprocessor


106


. Memory interface


110


provides a data and control interface between coprocessor


106


and memory


104


. In this example, main processor


102


accesses main memory


104


via processor interface


108


and memory controller


110


that are part of coprocessor


106


. Peripheral controller


168


provides a data and control interface between coprocessor


106


and the various peripherals mentioned above (e.g., optical disk device


134


, controllers


132


, ROM and/or real time clock


150


, modem


152


, flash memory


154


, and memory card


158


). Audio memory interface


164


provides an interface with audio memory


144


.





FIG. 1B

shows a more detailed view of 3D graphics processor/display engine


107


and associated components within coprocessor


106


. 3D graphics processor/display engine


107


includes a command processor


114


and a 3D graphics pipeline


116


. Main processor


102


communicates streams of graphics data (i.e., display lists) to command processor


114


. Command processor


114


receives these display commands and parses them (obtaining any additional data necessary to process them from memory


104


), and provides a stream of vertex commands to graphics pipeline


116


for 3D processing and rendering. Graphics pipeline


116


generates a 3D image based on these commands. The resulting image information may be transferred to main memory


104


for access by display controller


128


—which displays the frame buffer output of pipeline


116


on display


136


.




In more detail, main processor


102


may store display lists in main memory


104


, and pass pointers to command processor


114


via bus interface


108


. The command processor


114


(which includes a vertex cache


212


discussed in detail below) fetches the command stream from CPU


102


, fetches vertex attributes from the command stream and/or from vertex arrays in memory, converts attribute types to floating point format, and passes the resulting complete vertex polygon data to the graphics pipeline


116


for rendering/rasterization. As explained in more detail below, vertex data can come directly from the command stream, and/or from a vertex array in memory where each attribute is stored in its own linear array. A memory arbitration circuitry


130


arbitrates memory access between graphics pipeline


116


, command processor


114


and display unit


128


. As explained below, an on-chip 8-way set-associative vertex cache


212


is used to reduce vertex attribute access latency.




As shown in

FIG. 1B

, graphics pipeline


116


may include transform unit


118


, a setup/rasterizer


120


, a texture unit


122


, a texture environment unit


124


and a pixel engine


126


. In graphics pipeline


116


, transform unit


118


performs a variety of 3D transform operations, and may also perform lighting and texture effects. For example, transform unit


118


transforms incoming geometry per vertex from object space to screen space; transforms incoming texture coordinates and computes projective texture coordinates; performs polygon clipping; performs per vertex lighting computations; and performs bump mapping texture coordinate generation. Set up/rasterizer


120


includes a set up unit which receives vertex data from the transform unit


118


and sends triangle set up information to rasterizers performing edge rasterization, texture coordinate rasterization and color rasterization. Texture unit


122


performs various tasks related to texturing, including multi-texture handling, post-cache texture decompression, texture filtering, embossed bump mapping, shadows and lighting through the use of projective textures, and BLIT with alpha transparency and depth. Texture unit


122


outputs filtered texture values to the texture environment unit


124


. Texture environment unit


124


blends the polygon color and texture color together, performing texture fog and other environment-related functions. Pixel engine


126


performs z buffering and blending, and stores data into an on-chip frame buffer memory.




Thus, graphics pipeline


116


may include one or more embedded DRAM memories (not shown) to store-frame buffer and/or texture information locally. The on-chip frame buffer is periodically written to main memory


104


for access by display unit


128


. The frame buffer output of graphics pipeline


116


(which is ultimately stored in main memory


104


) is read each frame by display unit


128


. Display unit


128


provides digital RGB pixel values for display on display


136


.




Vertex Cache And Vertex Index Array





FIG. 2

is a schematic illustration of command processor


114


including a vertex cache


212


and a display list processor


213


. Command processor


114


handles a wide range of vertex and primitive data structures, from a single stream of vertex data containing position, normal, texture coordinates and colors to fully indexed arrays. Any vertex component can be index-referenced or directly in-lined in the command stream. Command processor


114


thus supports flexible types, formats and numbers of attributes as either immediate or indexed data.




Display list processor


213


within command processor


114


processes display list commands provided by CPU


102


—typically via a buffer allocated within main memory


104


. Vertex cache


212


caches indexed polygon vertex data structures such as the example data structure


300


shown in FIG.


2


. Example indexed polygon vertex data structure


300


may include a vertex index array


304


which references a number of vertex component data arrays (e.g., a color data array


306




a


, a texture vertex data array


306




b


, a surface normal data array


306




c


, a position vertex data array


306




d


, and so on). Vertex cache


212


accesses the vertex data from these arrays


306


in main memory


104


, and caches them for fast access and use by display list processor


213


.




Display List Processor





FIG. 2A

shows example display list processor


213


performed by command processor


114


. In this

FIG. 2A

example, display list processor


213


provides several stages of parsing. Display list commands received from main processor


102


are interpreted by a display list stream parser


200


. Display list stream parser


200


may use an address stack


202


to provide nesting of instructions—or dual FIFOS may be used to store a stream of vertex commands from a FIFO in main memory


106


to allow subroutine branching in instancing (see

FIG. 2B

) without need for reloading prefetched vertex command data. Using the

FIG. 2B

approach, the display list commands may thus provide for a one-level-deep display list—where the top level command stream can call the display list one level deep. This “call” capability is useful for pre-computed commands and instancing in geometry.




Display list stream parser


200


routes commands that affect the state of graphics pipeline


116


to the graphics pipeline. The remaining primitive command stream is parsed by a primitive stream parser


204


based on a primitive descriptor obtained from memory


104


(see below).




The indices to vertices are de-referenced and parsed by a vertex stream parser


208


based on a vertex descriptor


306


which may be provided in a table in hardware. The vertex stream provided to vertex stream parser


208


may include such indices to vertex data stored within main memory


104


. Vertex stream parser


208


can access this vertex data from main memory


104


via vertex cache


212


—thus separately providing the vertex commands and associated referenced vertex attributes via different paths in the case of indexed as opposed to direct data. In one example, vertex stream parser


208


addresses vertex cache


212


as if it were the entirety of main memory


104


. Vertex cache


212


, in turn, retrieves (and often times, may prefetch) vertex data from main memory


104


, and caches it temporarily for use by vertex stream parser


208


. Caching the vertex data in vertex cache


212


reduces the number of accesses to main memory


104


—and thus the main memory bandwidth required by command processor


114


.




Vertex stream parser


208


provides data for each vertex to be rendered within each triangle (polygon). This per-vertex data is provided, along with the per-primitive data outputted by primitive stream parser


204


, to a decompression/inverse quantizer block


214


. Inverse quantizer


214


converts different vertex representations (e.g., 8-bit and 16-bit fixed point format data) to a uniform floating-point representation used by graphics pipeline


116


. Inverse quantizer


214


provides hardware support for a flexible variety of different types, formats and numbers of attributes, and such data can be presented to display list processor


213


as either immediate or indexed input data. The uniform floating-point representation output of inverse quantizer


214


is provided to graphics pipeline


116


for rasterization and further processing. If desired as an optimization, a further small cache or buffer may be provided at the output of inverse quantizer


214


to avoid the need to re-transform vertex strip data.




Vertex Index Array





FIG. 3

shows a more detailed example of an indexed vertex list


300


of the preferred embodiment used to provide indirect (i.e., indexed) vertex attribute data via vertex cache


212


. This generalization indexed vertex list


300


may be used to define primitives in the system shown in FIG.


1


. Each primitive is described by a list of indices, each of which indexes into an array of vertices. Vertices and primitives each use format descriptors to define the types of their items. These descriptors associate an attribute with a type. An attribute is a data item that has a specific meaning to the rendering hardware. This affords the possibility of programming the hardware with descriptors so it can parse and convert the vertex/primitive stream as it is loaded. Using the minimum size type and the minimum number of attributes per vertex leads to geometry compression. The

FIG. 3

arrangement also allows attributes to be associated with the vertices, the indices, or the primitive, as desired.




Thus, in the

FIG. 3

example indexed vertex array


300


, a primitive list


302


defines each of the various primitives (e.g., triangles) in the data stream (e.g., prim


0


, prim


1


, prim


2


, prim


3


, . . . ). A primitive descriptor block


308


may provide attributes common to a primitive (e.g., texture and connectivity data which may be direct or indexed). Each primitive within primitive list


302


indexes corresponding vertices within a vertex list


304


. A single vertex within vertex list


304


may be used by multiple primitives within primitive list


302


. If desired, primitive list


302


may be implied rather than explicit—i.e., vertex list


304


can be ordered in such a way as to define corresponding primitives by implication (e.g., using triangle strips).




A vertex descriptor block


306


may be provided for each vertex within vertex list


304


. Vertex descriptor block


306


includes attribute data corresponding to a particular vertex (e.g., rgb or other color data, alpha data, xyz surface normal data). As shown in

FIG. 2

, vertex descriptor block


306


may comprise a number of different indexed component blocks. The vertex attribute descriptor block


306




10


defines which vertex attributes are present, the number and size of the components, and how the components are referenced (e.g., either direct—that is, included within the quantized vertex data stream—or indexed). In one example, the vertices in a DRAW command for a particular primitive all have the same vertex attribute data structure format.





FIG. 3A

shows an example list of attributes provided by vertex attribute block


306


. The following attributes may be provided:















Attribute

























Position







Normal







Diffused Color







Specular Color







(Skinning)







Texture 0 Coordinate







Texture 1 Coordinate







Texture 2 Coordinate







Texture 3 Coordinate







Texture 4 Coordinate







Texture 5 Coordinate







Texture 6 Coordinate







Texture 7 Coordinate















In this example vertex attribute descriptor block


306


, the position attribute is always present, may be either indexed or direct, and can take a number of different quantized, compressed formats (e.g., floating point, 8-bit, integer, or 16-bit). All remaining attributes may or may not be present for any given vertex, and may be either indexed or direct as desired. The texture coordinate values may, like the position values, be represented in a variety of different formats (e.g., 8-bit integer, 16-bit integer or floating point), as can the surface normal attribute. The diffused and specular color attributes may provide 3 (rgb) or 4 (rgba) values in a variety of formats including 16-bit threes-complement, 24-bit threes-complement, 32-bit threes-complement, or 16-, 24- or 32-bit fours-complement representations). All vertices for a given primitive preferably have the same format.




In this example, vertex descriptor


306


references indexed data using a 16-bit pointer into an array of attributes. A particular offset used to access a particular attribute within the array depends upon a number of factors including, e.g., the number of components in the attribute; the size of the components, padding between attributes for alignment purposes; and whether multiple attributes are interleaved in the same array. A vertex can have direct and indirect attributes intermixed, and some attributes can be generated by the hardware (e.g., generating a texture coordinate from a position). Any attribute can be sent either directly or as an index into an array. Vertex cache


212


includes sufficient cache lines to handle the typical number of respective data component streams (e.g., position, normal, color and texture) without too many cache misses.




Vertex Cache Implementation





FIG. 4

shows an example schematic diagram of vertex cache


212


and associated logic. Vertex cache


212


in this example includes an 8-Kilobyte cache memory


400


organized as a 512×128-bit dual ported RAM. Since there are multiple attribute streams being looked up in the cache


212


, an eight set-associative cache including eight tag lines


402


is used to reduce thrashing. Each tag line includes a 32×16 bit dual ported tag RAM


404


and associated tag status register


406


. Tag RAMS


404


store the main memory address of the corresponding data block stored within vertex RAM


400


. Address calculation block


408


determines whether necessary vertex attribute data is already present within vertex RAM


400


—or whether an additional fetch to main memory is required. Cache lines are prefetched from main memory


104


to hide memory latency. Data required to process a particular component is stored within a queue


410


having a depth that is proportional to memory latency.





FIG. 5

shows an example memory address format provided by vertex stream parser


208


to vertex cache


212


. This memory address


450


includes a field


452


providing a byte offset into a cache line; a tag RAM address


454


; and a main memory address for comparison with the contents of tag RAMs


404


. Address calculation block


408


compares the main memory address


456


with the tag RAM


404


contents to determine whether the required data is already cached within vertex RAM


400


, or whether it needs to be fetched from main memory


104


.




The tag status registers


406


store data in the format shown in

FIG. 6. A

“data valid” field


462


indicates whether the data in that particular cache line is valid. A counter field


464


keeps track of the number of entries in queue


410


that depend on the cache line. Counter field


464


is used in the case that all tag status registers


406


show “data valid” if a miss occurs. Address calculation block


408


then needs to throw one of the cache lines out to make room for the new entry. If counter field


464


is not zero, the cache line is still in use and cannot be thrown away. Based on a modified partial LRU algorithm, address calculation block


408


selects one of the cache lines for replacement. The “data valid” field


462


is set to “invalid”, and the cache line is replaced with a new contents from main memory


104


. If another attribute index maps to the same cache line, the counter field


464


is incremented. Once the data arrives from main memory


104


, the “data valid” bit is set and an entry can be processes from queue


410


. Otherwise, the processing of queue


410


will be stalled until the data gets into the cache RAM


400


. Once the cache RAM


400


is accessed for the queue entry, counter


464


decrements.




While the invention has been described in connection with what is presently considered to be the most practical and preferred embodiment, it is to be understood that the invention is not to be limited to the disclosed embodiment, but on the contrary, is intended to cover various modifications and equivalent arrangements included within the scope of the appended claims.



Claims
  • 1. A 3D videographics system including:a memory storing polygon vertex data, and a 3D graphics engine including a graphics pipeline having at least a transform unit, a rasterizer, a texture unit and a pixel engine, said 3D graphics engine generating and displaying images at least in part in response to said polygon vertex data, said 3D graphics engine comprising a vertex cache arrangement operatively coupled to said memory, said vertex cache arrangement caching said polygon vertex data from said memory prior to use by said 3D graphics engine transform unit, wherein said polygon vertex data includes an indexed polygon vertex data structure and said vertex cache arrangement operates in accordance with said indexed polygon vertex data structure representation to cache vertex attribute data and make it available for efficient access by the 3D graphics engine transform unit without requiring explicit resorting of said polygon vertex data for image display.
  • 2. A vertex cache arrangement as in claim 1 wherein 3D graphics engine is disposed on an integrated circuit, and said vertex cache arrangement comprises a memory device disposed on said integrated circuit and operatively coupled to said 3D graphics engine.
  • 3. A vertex cache arrangement as in claim 2 wherein said memory device comprises a set-associative cache memory for caching said vertex data.
  • 4. A vertex cache arrangement as in claim 3 wherein said set-associative cache memory provides eight cache lines.
  • 5. A vertex cache arrangement as in claim 2 wherein said memory device comprises an 8 kilobyte low-latency random access memory.
  • 6. A vertex cache arrangement as in claim 1 including a queue and a miss queue.
  • 7. A vertex cache arrangement as in claim 1 wherein said vertex cache arrangement is coupled to said memory and, in use, fetches vertex data from said memory as said vertex data is needed by said 3D graphics engine.
  • 8. A vertex cache arrangement as in claim 1 further including a hardware-based inverse quantizer operatively coupled between said vertex cache and said 3D graphics engine, said inverse quantizer converting plural vertex data formats into a uniform floating-point format for consumption by said 3D graphics engine.
  • 9. A vertex cache arrangement as in claim 1 wherein said indexed vertex data representation comprises an indexed array referencing attribute data.
  • 10. A vertex cache arrangement as in claim 9 wherein said indexed array directly references said attribute data.
  • 11. A vertex cache arrangement as in claim 1 wherein said indexed polygon vertex data structure comprises an indexed array referencing vertex attribute data.
  • 12. A vertex cache arrangement as in claim 11 wherein said indexed array directly references said attribute data.
  • 13. A vertex cache arrangement as in claim 11 wherein said indexed array indirectly references said attribute data.
  • 14. In a 3D videographics system including a memory storing polygon vertex data, and a 3D graphics engine including a graphics pipeline having at least a transform unit, a rasterizer, a texture unit and a pixel engine, said 3D graphics engine generating and displaying images at least in part in response to said polygon vertex data,a method for caching polygon vertex data prior to use by said 3D graphics engine transform unit, said method including the steps of: representing said polygon vertex data by an indexed polygon vertex data structure; retrieving said polygon vertex data from said memory; and caching said polygon vertex data in a low-latency cache memory device local to said 3D graphics engine to make said vertex data available for efficient access by the 3D graphics engine transform unit.
  • 15. A method as in claim 14 further including the step of fetching vertex data from said memory to said cache memory device as said vertex data is needed by said 3D graphics engine.
  • 16. A method as in claim 14 further including the step of converting plural vertex data formats stored in said cache memory device into a uniform floating-point format for consumption by said 3D graphics engine.
  • 17. A 3D videographics system including:a memory storing polygon vertex data and a 3D graphics pipeline that renders and displays images at least in part in response to said polygon vertex data, wherein said polygon vertex data includes an indexed polygon vertex data structure and said videographics system further comprises a vertex cache operatively coupled to said memory and to a command stream processor, said vertex cache retrieving and caching polygon vertex data from said memory prior to use by said 3D graphics pipeline according to said indexed polygon vertex data structure representation, wherein said vertex data is made available for efficient access by the 3D graphics pipeline without requiring explicit resorting of said polygon vertex data for image display.
  • 18. A vertex data caching arrangement for a 3D videographics system comprising:a memory storing polygon vertex attribute data and an indexed polygon vertex data structure indexing at least a portion of said polygon vertex attribute data; a command stream processor that parses at least indices corresponding to said indexed polygon vertex data structure and provides said parsed indices to a low-latency cache memory device; a low-latency cache memory device operatively coupled to the command stream processor and to said memory, said cache memory device retrieving polygon vertex attribute data from said memory in response to at least parsed indices provided by the command stream processor and caching the retrieved vertex attribute data; and a graphics pipeline coupled to said cache memory device, said graphics pipeline generating image data for displaying at least in part in response to the vertex attribute data cached in said low-latency cache memory device.
  • 19. A memory device storing a 3D graphics command stream for use by a 3D graphics engine of the type including a graphics pipeline having at least a transform unit, a rasterizer, a texture unit and a pixel engine, said 3D graphics engine, in use, generating images for display at least in part in response to said 3D graphics command stream, said 3D graphics engine including a vertex cache that caches polygon vertex data from memory prior to use by said transform unit, said stored graphics command stream including a vertex stream that references indexed polygon vertex attribute data cached in the vertex cache for efficient use by said graphics pipeline without requiring explicit re-ordering of vertices represented by said vertex stream specially for image display.
  • 20. The memory device of claim 19 wherein the vertex stream directly references at least some of the indexed polygon vertex attribute data.
  • 21. The memory device of claim 19 wherein the vertex stream references a vertex descriptor array including color and position attributes.
Parent Case Info

This application claims the benefit of Provisional application Ser. No. 60/161,915, filed Oct. 28, 1999.

US Referenced Citations (354)
Number Name Date Kind
4275413 Sakamoto et al. Jun 1981 A
4357624 Greenberg Nov 1982 A
4463380 Hooks, Jr. Jul 1984 A
4586038 Sims et al. Apr 1986 A
4600919 Stern Jul 1986 A
4615013 Yan et al. Sep 1986 A
4625289 Rockwood Nov 1986 A
4692880 Merz et al. Sep 1987 A
4808988 Burke et al. Feb 1989 A
4817175 Tenenbaum et al. Mar 1989 A
4855934 Robinson Aug 1989 A
4888712 Barkans et al. Dec 1989 A
4897806 Cook et al. Jan 1990 A
4907174 Priem Mar 1990 A
4918625 Yan Apr 1990 A
4935879 Ueda Jun 1990 A
4974176 Buchner et al. Nov 1990 A
4974177 Nishiguchi Nov 1990 A
4989138 Radochonski Jan 1991 A
5003496 Hunt, Jr. et al. Mar 1991 A
5016183 Shyona May 1991 A
5018076 Johary et al. May 1991 A
5043922 Matsumoto Aug 1991 A
5062057 Blacken et al. Oct 1991 A
5091967 Ohsawa Feb 1992 A
5097427 Lathrop et al. Mar 1992 A
5144291 Nishizawa Sep 1992 A
5204944 Wolberg et al. Apr 1993 A
5224208 Miller, Jr. et al. Jun 1993 A
5239624 Cook et al. Aug 1993 A
5241658 Masterson et al. Aug 1993 A
5255353 Itoh Oct 1993 A
5268995 Diefendorff et al. Dec 1993 A
5268996 Steiner et al. Dec 1993 A
5278948 Luken, Jr. Jan 1994 A
5307450 Grossman Apr 1994 A
5315692 Hansen et al. May 1994 A
5345541 Kelley et al. Sep 1994 A
5353424 Partovi et al. Oct 1994 A
5357579 Buchner et al. Oct 1994 A
5361386 Watkins et al. Nov 1994 A
5363475 Baker et al. Nov 1994 A
5377313 Scheibl Dec 1994 A
5394516 Winser Feb 1995 A
5402532 Epstein et al. Mar 1995 A
5404445 Matsumoto Apr 1995 A
5408650 Arsenault Apr 1995 A
5412796 Olive May 1995 A
5415549 Logg May 1995 A
5416606 Katayama et al. May 1995 A
5422997 Nagashima Jun 1995 A
5432895 Myers Jul 1995 A
5432900 Rhodes et al. Jul 1995 A
5438663 Matsumoto et al. Aug 1995 A
5448689 Matsuo et al. Sep 1995 A
5461712 Chelstowski et al. Oct 1995 A
5467438 Nishio et al. Nov 1995 A
5467459 Alexander et al. Nov 1995 A
5469535 Jarvis et al. Nov 1995 A
5473736 Young Dec 1995 A
5475803 Stearns et al. Dec 1995 A
5487146 Guttag et al. Jan 1996 A
5490240 Foran et al. Feb 1996 A
5495563 Winser Feb 1996 A
5504499 Horie et al. Apr 1996 A
5506604 Nally et al. Apr 1996 A
5535374 Olive Jul 1996 A
5543824 Priem et al. Aug 1996 A
5544292 Winser Aug 1996 A
5548709 Hannah et al. Aug 1996 A
5553228 Erb et al. Sep 1996 A
5557712 Guay Sep 1996 A
5559954 Sakoda et al. Sep 1996 A
5561746 Murata et al. Oct 1996 A
5561752 Jevans Oct 1996 A
5563989 Billyard Oct 1996 A
5566285 Okada Oct 1996 A
5573402 Gray Nov 1996 A
5579456 Cosman Nov 1996 A
5582451 Baumann Dec 1996 A
5586234 Sakuraba et al. Dec 1996 A
5593350 Bouton et al. Jan 1997 A
5600763 Greene et al. Feb 1997 A
5606650 Kelley et al. Feb 1997 A
5607157 Nagashima Mar 1997 A
5608864 Bindlish et al. Mar 1997 A
5616031 Logg Apr 1997 A
5621867 Murata et al. Apr 1997 A
5628686 Svancarek et al. May 1997 A
5638535 Rosenthal et al. Jun 1997 A
5644364 Kurtze et al. Jul 1997 A
5649082 Burns Jul 1997 A
5650955 Puar et al. Jul 1997 A
5651104 Cosman Jul 1997 A
5657045 Katsura et al. Aug 1997 A
5657443 Krech, Jr. Aug 1997 A
5657478 Recker et al. Aug 1997 A
5659671 Tannenbaum et al. Aug 1997 A
5659673 Nonoshita Aug 1997 A
5659715 Wu et al. Aug 1997 A
5664162 Dye Sep 1997 A
5666439 Ishida et al. Sep 1997 A
5678037 Osugi et al. Oct 1997 A
5682522 Huang et al. Oct 1997 A
5684941 Dye Nov 1997 A
5687304 Kiss Nov 1997 A
5691746 Shyu Nov 1997 A
5694143 Fielder et al. Dec 1997 A
5696892 Redmann et al. Dec 1997 A
5703806 Puar et al. Dec 1997 A
5706481 Hannah et al. Jan 1998 A
5706482 Matsushima et al. Jan 1998 A
5714981 Scott-Jackson et al. Feb 1998 A
5724561 Tarolli et al. Mar 1998 A
5726689 Negishi et al. Mar 1998 A
5726947 Yamazaki et al. Mar 1998 A
5734386 Cosman Mar 1998 A
5739819 Bar-Nahum Apr 1998 A
5740343 Tarolli et al. Apr 1998 A
5740383 Nally et al. Apr 1998 A
5742749 Foran et al. Apr 1998 A
5742788 Priem et al. Apr 1998 A
5745118 Alcorn et al. Apr 1998 A
5745125 Deering et al. Apr 1998 A
5748199 Palm May 1998 A
5748986 Butterfield et al. May 1998 A
5751291 Olsen et al. May 1998 A
5751292 Emmot May 1998 A
5751295 Becklund et al. May 1998 A
5751930 Katsura et al. May 1998 A
5754191 Mills et al. May 1998 A
5757382 Lee May 1998 A
5760783 Migdal et al. Jun 1998 A
5764228 Baldwin Jun 1998 A
5764237 Kaneko Jun 1998 A
5767856 Peterson et al. Jun 1998 A
5767858 Kawase et al. Jun 1998 A
5768629 Wise et al. Jun 1998 A
5777623 Small Jul 1998 A
5781927 Wu et al. Jul 1998 A
5791994 Hirano et al. Aug 1998 A
5801711 Koss et al. Sep 1998 A
5801720 Norrod et al. Sep 1998 A
5805175 Priem Sep 1998 A
5808619 Choi et al. Sep 1998 A
5808630 Pannell Sep 1998 A
5809219 Pearce et al. Sep 1998 A
5809278 Watanabe et al. Sep 1998 A
5815165 Blixt Sep 1998 A
5818456 Cosman et al. Oct 1998 A
5819017 Akeley et al. Oct 1998 A
5821940 Morgan et al. Oct 1998 A
5822516 Krech, Jr. Oct 1998 A
5828382 Wilde Oct 1998 A
5828383 May et al. Oct 1998 A
5828907 Wise et al. Oct 1998 A
5831624 Tarolli et al. Nov 1998 A
5831625 Rich et al. Nov 1998 A
5831640 Wang et al. Nov 1998 A
5835096 Baldwin Nov 1998 A
5835792 Wise et al. Nov 1998 A
5838334 Dye Nov 1998 A
5844576 Wilde et al. Dec 1998 A
5850229 Edelsbrunner et al. Dec 1998 A
5856829 Gray, III et al. Jan 1999 A
5859645 Latham Jan 1999 A
5861888 Dempsey Jan 1999 A
5861893 Stugress Jan 1999 A
5867166 Myhrvold et al. Feb 1999 A
5870097 Snyder et al. Feb 1999 A
5870098 Gardiner Feb 1999 A
5870102 Tarolli et al. Feb 1999 A
5870109 McCormack et al. Feb 1999 A
5870587 Danforth et al. Feb 1999 A
5872902 Kuchkuda et al. Feb 1999 A
5877741 Chee et al. Mar 1999 A
5877770 Hanaoka Mar 1999 A
5877771 Drebin et al. Mar 1999 A
5880736 Peercy et al. Mar 1999 A
5880737 Griffin et al. Mar 1999 A
5883638 Rouet et al. Mar 1999 A
5886701 Chauvin et al. Mar 1999 A
5886705 Lentz Mar 1999 A
5887155 Laidig Mar 1999 A
5890190 Rutman Mar 1999 A
5892517 Rich Apr 1999 A
5892974 Koizumi et al. Apr 1999 A
5894300 Takizawa Apr 1999 A
5900881 Ikedo May 1999 A
5903283 Selwan et al. May 1999 A
5909218 Naka et al. Jun 1999 A
5909225 Schinnerer et al. Jun 1999 A
5912675 Laperriere Jun 1999 A
5912676 Malladi et al. Jun 1999 A
5914721 Lim Jun 1999 A
5914725 McInnis et al. Jun 1999 A
5914729 Lippincott Jun 1999 A
5920876 Ungar et al. Jul 1999 A
5923332 Izawa Jul 1999 A
5923334 Luken Jul 1999 A
5926182 Menon et al. Jul 1999 A
5926647 Adams et al. Jul 1999 A
5933150 Ngo et al. Aug 1999 A
5933154 Howard et al. Aug 1999 A
5933155 Akeley Aug 1999 A
5933529 Kim Aug 1999 A
5936641 Jain et al. Aug 1999 A
5936683 Lin Aug 1999 A
5940089 Dilliplane et al. Aug 1999 A
5940538 Spiegel et al. Aug 1999 A
5943058 Nagy Aug 1999 A
5943060 Cosman et al. Aug 1999 A
5945997 Zhao et al. Aug 1999 A
5949421 Ogletree et al. Sep 1999 A
5949423 Olsen Sep 1999 A
5949428 Toelle et al. Sep 1999 A
5956042 Tucker et al. Sep 1999 A
5956043 Jensen Sep 1999 A
5958020 Evoy et al. Sep 1999 A
5959640 Rudin et al. Sep 1999 A
5963220 Lee et al. Oct 1999 A
5966134 Arias Oct 1999 A
5977979 Clough et al. Nov 1999 A
5977984 Omori Nov 1999 A
5982376 Abe et al. Nov 1999 A
5982390 Stoneking et al. Nov 1999 A
5986659 Gallery et al. Nov 1999 A
5986663 Wilde Nov 1999 A
5986677 Jones et al. Nov 1999 A
5987567 Rivard et al. Nov 1999 A
5990903 Donovan Nov 1999 A
5995120 Dye Nov 1999 A
5995121 Alcokrn et al. Nov 1999 A
5999189 Kaiiya et al. Dec 1999 A
5999198 Horan et al. Dec 1999 A
6002407 Fadden Dec 1999 A
6002410 Battle Dec 1999 A
6005582 Gabriel et al. Dec 1999 A
6005583 Morrison Dec 1999 A
6005584 Kitamura et al. Dec 1999 A
6007428 Nishiumi et al. Dec 1999 A
6008820 Chauvin et al. Dec 1999 A
6011562 Gagne et al. Jan 2000 A
6011565 Kuo et al. Jan 2000 A
6014144 Nelson et al. Jan 2000 A
6016150 Lengvel et al. Jan 2000 A
6016151 Lin Jan 2000 A
6018350 Lee et al. Jan 2000 A
6020931 Bilbrey et al. Feb 2000 A
6021417 Massarksy Feb 2000 A
6022274 Takeda et al. Feb 2000 A
6023261 Ugaiin Feb 2000 A
6026182 Lee et al. Feb 2000 A
6028608 Jenkins Feb 2000 A
6031542 Wittig Feb 2000 A
6035360 Doidge et al. Mar 2000 A
6037948 Liepa Mar 2000 A
6038031 Murphy Mar 2000 A
6038348 Carlev Mar 2000 A
6040843 Monroe et al. Mar 2000 A
6040844 Yamaguchi et al. Mar 2000 A
6041010 Puar et al. Mar 2000 A
6043804 Greene Mar 2000 A
6043821 Sprague et al. Mar 2000 A
6046746 Deering Apr 2000 A
6046747 Saunders et al. Apr 2000 A
6046752 Kirkland et al. Apr 2000 A
6049337 Van Overveld Apr 2000 A
6049338 Anderson et al. Apr 2000 A
6052125 Gardiner et al. Apr 2000 A
6052126 Sakuraba et al. Apr 2000 A
6052127 Vaswani et al. Apr 2000 A
6052129 Fowler et al. Apr 2000 A
6052133 Kang Apr 2000 A
6054993 Devic et al. Apr 2000 A
6054999 Strandberg Apr 2000 A
6057847 Jenkins May 2000 A
6057849 Haubner et al. May 2000 A
6057851 Luken et al. May 2000 A
6057859 Handelman et al. May 2000 A
6057861 Lee et al. May 2000 A
6057862 Margulis May 2000 A
6057863 Olarig May 2000 A
6061462 Tostevin et al. May 2000 A
6064392 Rohner May 2000 A
6067098 Dye May 2000 A
6070204 Poisner May 2000 A
6072496 Guenter et al. Jun 2000 A
6075543 Akeley Jun 2000 A
6075546 Hussain et al. Jun 2000 A
6078311 Pelkey Jun 2000 A
6078333 Wittig et al. Jun 2000 A
6078334 Hanaoka et al. Jun 2000 A
6078338 Horan et al. Jun 2000 A
6081274 Shiraishi Jun 2000 A
6088035 Sudarsky et al. Jul 2000 A
6088042 Handelman et al. Jul 2000 A
6088487 Kurashige Jul 2000 A
6088701 Whaley et al. Jul 2000 A
6091431 Saxena et al. Jul 2000 A
6092158 Harriman et al. Jul 2000 A
6094200 Olsen et al. Jul 2000 A
6097435 Stanger et al. Aug 2000 A
6097437 Hwang Aug 2000 A
6104415 Gossett Aug 2000 A
6104417 Nielsen et al. Aug 2000 A
6105094 Lindeman Aug 2000 A
6108743 Debs et al. Aug 2000 A
6111582 Jenkins Aug 2000 A
6111584 Murphy Aug 2000 A
6115047 Deering Sep 2000 A
6115049 Winner et al. Sep 2000 A
6118462 Margulis Sep 2000 A
6128026 Brothers, III Oct 2000 A
6144365 Young et al. Nov 2000 A
6144387 Liu et al. Nov 2000 A
6151602 Hejlsberg et al. Nov 2000 A
6155926 Miyamoto et al. Dec 2000 A
6157387 Kotani Dec 2000 A
6166748 Van Hook et al. Dec 2000 A
6172678 Shiraishi Jan 2001 B1
6177944 Fowler et al. Jan 2001 B1
6191794 Priem et al. Feb 2001 B1
6200253 Nishiumi et al. Mar 2001 B1
6204851 Netschke et al. Mar 2001 B1
6215496 Szeliski et al. Apr 2001 B1
6215497 Leung Apr 2001 B1
6226713 Mehrotra May 2001 B1
6232981 Gossett May 2001 B1
6236413 Gossett et al. May 2001 B1
6239810 Van Hook et al. May 2001 B1
6252608 Snyder et al. Jun 2001 B1
6252610 Hussain Jun 2001 B1
6264558 Nishiumi et al. Jul 2001 B1
6268861 Sanz-Pastor et al. Jul 2001 B1
6275235 Morgan, III Aug 2001 B1
6285779 Lapidous et al. Sep 2001 B1
6292194 Powll, III Sep 2001 B1
6329997 Wu et al. Dec 2001 B1
6331856 Van Hook et al. Dec 2001 B1
6339428 Fowler et al. Jan 2002 B1
6342892 Van Hook et al. Jan 2002 B1
6353438 Van Hook et al. Mar 2002 B1
6356497 Puar et al. Mar 2002 B1
6408362 Arimilli et al. Jun 2002 B1
6417858 Bosch et al. Jul 2002 B1
6426747 Hoppe et al. Jul 2002 B1
6437781 Tucker et al. Aug 2002 B1
6459429 Deering Oct 2002 B1
6466223 Dorbie et al. Oct 2002 B1
6469707 Voorhies Oct 2002 B1
6476808 Kuo et al. Nov 2002 B1
6476822 Burbank Nov 2002 B1
6496187 Deering et al. Dec 2002 B1
Foreign Referenced Citations (3)
Number Date Country
0 637 813 Feb 1995 EP
9-330230 Dec 1997 JP
WO9304429 Mar 1993 WO
Non-Patent Literature Citations (82)
Entry
GDC 2000: Advanced OpenGL Game Development, “A Practical and Robust Bump-mapping Technique for Today's GPUs,” by Mark Kilgard, Jul. 5, 2000, www.nvidia.com.
Technical Presentations: “Texture Space Bump Mapping,”Sim Dietrich, Nov. 10, 2000, www.nvidia.com.
Whitepapers: “Texture Addressing,” Sim Dietrich, Jan. 6, 2000, www.nvidia.com.
ZDNet Reviews, from PC Magazine, “Other Enhancements,” Jan. 15, 1999, wysiwyg://16/http://www4.zdnet.com...ies/reviews/0,4161,2188286,00.html.
ZDNet Reviews, from PC Magazine, “Screen Shot of Alpha-channel Transparency,” Jan. 15, 1999, wysiwyg://16/http://www4.zdnet.com...ies/reviews/0,4161,2188286,00.html.
Alpha (transparency) Effects, Future Technology Research Index, http://www.futuretech.vuurwerk.n1/alpha.html.
Blythe, David, 5.6 Transparency Mapping and Trimming with Alpha, http://toolbox.sgi.com/TasteOfDT/d...penGL/advanced 98/notes/node41.html, Jun. 11, 1998.
10.2 Alpha Blending, http://www.sgi.com/software/opengl/advanced98/notes/node146.html.
10.3 Sorting, http://www.sgi.com/software/opengl/advanced98/notes/node147.html.
10.4 Using the Alpha Function, http://www.sgi.com/software/opengl/advanced98/notes/node148.html.
Winner, Stephanie, et al., “Hardware Accelerated Rendering Of Antialiasing Using A Modified A-buffer Algorithm,” Computer Graphics Proceedings, Annual Conference Series, 1997, pp 307-316.
Debevec, Paul, et al., “Efficient View-Dependent Image-Based Rendering with Projective Texture-Mapping,” University of California at Berkeley.
Gibson, Simon, et al., “Interactive Rendering with Real-World Illumination,” Rendering Techniques 2000; 11th Eurographics Workshop on Rendering, pp. 365-376 (Jun. 2000).
Segal, Mark, et al., “Fast Shadows and Lighting Effects Using Texture Mapping,” Computer Graphics, 26, 2, pp.. 249-252 (Jul. 1992).
White paper, Kilgard, Mark J., “Improving Shadows and Reflections via the Stencil Buffer” (Nov. 3, 1999).
“OpenGL Projected Textures,” from web site:HTTP:// reality.sgi.com, 5 pages.
“5.13.1 How to Project a Texture,” from web site: www.sgi.com, 2 pages.
Arkin, Alan, email, subject: “Texture distortion problem,” from web site: HTTP://reality.sgi.com (Jul. 1997).
Moller, Tomas et al., “Real-Time Rendering,” pp. 179-183 (AK Peters Ltd., 1999).
Williams, Lance, “Casting Curved Shadows on Curved Surfaces,” Computer Graphics (SIGGRAPH '78 Proceedings), vol. 12, No. 3, pp. 270-274 (Aug. 1978).
Woo et al., “A Survey of Shadow Algorithms,” (IEEE Computer Graphics and Applications, vol. 10, No. 6, pp. 13-32 (Nov. 1990).
Heidrich et al., “Applications of Pixel Textures in Visualization and Realistic Image Synthesis,” Proceedings 1999 Symposium On Interactive 3D Graphics, pp. 127-134 (Apr. 1999).
Hourcade et al, “Algorithms for Antialiased Cast Shadows”, Computers and Graphics, vol. 9, No. 3, pp. 260-265 (1985).
Michael McCool, “Shadow Volume Reconstruction from Depth Maps”, ACM Transactions on Graphics, vol. 19, No. 1, Jan. 2000, pp. 1-26.
RenderMan Artist Tools, PhotoRealistic RenderMan 3.8 User's Manual, Pixar (Aug. 1998).
RenderMan Interface Version 3.2 (Jul. 2000).
White paper, Dietrich, Sim, “Cartoon Rendering and Advanced Texture Features of the GeForce 256 Texture Matrix, Projective Textures, Cube Maps, Texture Coordinate Generation and DOTPRODUCT3 Texture Blending” (Dec. 16, 1999).
Peter J. Kovach, INSIDE DIRECT 3D, Alpha Testing, ppp 289-291 (1999).
Web site information, CartoonReyes, REM Infografica, http://www.digimotion.co.uk/cartoonreyes.htm.
Raskar, Ramesh et al., “Image Precision Silhouette Edges,” Symposium on Interactive 3D Graphics 1999, Atlanta, 7 pages (Apr. 26-29, 1999).
Schlechtweg, Stefan et al., Rendering Line-Drawings with Limited Resources, Proceedings of GRAPHICON '96, 6th International Conference and Exhibition on Computer Graphics and Visualization in Russia, (St. Petersburg, Jul. 1-5, 1996) vol. 2, pp 131-137.
Haeberli, Paul et al., “Texture Mapping as a Fundamental Drawing Primitive,” Proceedings of the Fourth Eurographics Workshop on Rendering, 11pages, Paris, France (Jun. 1993).
Schlechtweg, Stefan et al., “Emphasising in Line-drawings,” Norsk samarbeid innen grafisk databehandling: NORSIGD Info, medlemsblad for NORSIGD, Nr 1/95, pp. 9-10.
Markosian, Lee et al., “Real-Time Nonphotorealistic Rendering,” Brown University site of the NSF Science and Technology Center for Computer Graphics and Scientific Visualization, Providence, RI, 5 pages (undated).
Feth, Bill, “Non-Photorealistic Rendering,” wif3@cornell.edu, CS490—Bruce Land, 5 pages (Spring 1998).
Elber, Gershon, “Line Art Illustrations of Parametric and Implicit Forms,” IEEE Transactions on Visualization and Computer Graphics, vol. 4, No. 1, Jan.-Mar. 1998.
Zeleznik, Robert et al. “SKETCH: An Interface for Sketching 3D Scenes,” Computer Graphics Proceedings, Annual Conference Series 1996, pp. 163-170.
Computer Graphics World, Dec. 1997.
Reynolds, Craig, “Stylized Depiction in Computer Graphics, Non-Photorealistic, Painterly and Toon Rendering,” an annotated survey of online Resources, 13 pages, last update May 30, 2000, http://www.red.com/cwr/painterly.html.
Render Man Artist Tools, Using Arbitrary Output Variables in Photorealistic Renderman (With Applications), PhotoRealistic Renderman Application Note #24, 8 pages, Jun. 1998, http://www.pixar.com/products/renderman/toolkit/Toolkit/AppNotes/appnote.24.html.
Decaudin, Philippe, “Cartoon-Looking Rendering of 3D Scenes,” Syntim Project Inria, 6 pages, http://www-syntim.inria.fr/syntim/recherche/decaudin/cartoon-eng.html.
Hachigian, Jennifer, “Super Cel Shader 1.00 Tips and Tricks,” 2 pages, wysiwyg://thePage.13/http://members.xoom.com/_XMCM.jarvia/3D/celshade.html.
Digimation Inc., “The Incredible Comicshop,” info sheet, 2 pages, http://www.digimation.com/asp/product/asp?product_id=33.
Softimage/3D Full Support, “Toon Assistant,” 1998 Avid Technology, Inc., 1 page, http://www.softimage.com/3dsupport/techn...uments/3.8/features3.8/rel_notes.56.html.
Cambridge Animo—Scene III, info sheet, Cambridge Animation Systems, 2 pages, http://www.com-ani.co.uk/casweb/products/software/SceneIII.htm.
Mulligan, Vikram, Toon, info sheet, 2 pages, http://digitalcarversguild.com/products/toon/toon.ttml.
Toony Shader, “Dang I'm tired of photorealism,” 4 pages, http://www.visi.com/˜mcdonald/toony.html.
“Cartoon Shading , Using Shading Mapping,” 1 page, http://www.goat.com/alias/shader.html#toonshad.
Web site information, CartoonReyes, http://www.zentertainment.com/zentropy/review/cartoonreyes.html.
VIDI Presenter 3D Repository, “Shaders.” 2 pages, http://www.webnation.com/vidirep/panels/renderman/shaders/toon.phtml.
The RenderMan Interface Version 3.1, (Sep. 1989).
“Renderman Artist Tools, PhotoRealistic RenderMan Tutorial,” Pixar (Jan. 1996).
Web site materials, “Renderman Artist Tools, PhotoRealistic RenderMan 3.8 User's Manual,” Pixar.
NVIDIA.com, technical presentation, “AGDC Per-Pixel Shading” (Nov. 15, 2000).
NVIDIA.com, technical presentation, Introduction to DX8 Pixel Shaders (Nov. 10, 2000).
NVIDIA.com, technical presentation, “Advanced Pixel Shader Details” (Nov. 10, 2000).
“Developer's Lair, Multitexturing with the ATI Rage Pro,” (7 pages) from ati.com web site (2000).
Slide Presentation, Sébastien Dominé, “nVIDIA Mesh Skinning, OpenGl”.
Singh, Karan et al., “Skinning Characters using Surface-Oriented Free-Form Deformations,” Toronto Canada.
“Hardware Technology,” from ATI.com web site, 8 pages (2000).
“Skeletal Animation and Skinning,” from ATI.com web site, 2 pages (Summer 2000).
“Developer Relations, ATI Summer 2000 Developer Newsletter,” from ATI.com web site, 5 pages (Summer 2000).
Press Releases, “ATI's RADEON family of products delivers the most comprehensive support for the advance graphics features of DirectX 8.0,” Canada, from ATI.com web site, 2 pages (Nov. 9, 2000).
“ATI RADEON Skinning and Tweening,” from ATI.com web site, 1 page (2000).
Hart, Evan et al., “Vertex Shading with Direct3D and OpenGL,” Game Developers Conference 2001, from ATI.com web site (2001).
Search Results for: skinning, from ATI.com web site, 5 pages (May 24, 2001).
Hart, Evan et al., “Graphics by rage,” Game Developers Conference 2000, from ATI.com web site (2000).
Efficient Command/Data Interface Protocol For Graphics, IBM TDB, vol. 36, issue 9A, Sep. 1, 1993, pp. 307-312.
Shade, Jonathan et al., “Layered Depth Images,” Computer Graphics Proceedings, Annual Conference Series, pp. 231-242 (1998).
Videum Conference Pro (PCI) Specification, product of Winnov (Winnov), published Jul. 21, 1999.
Whitepaper: Implementing Fog in Direct3D, Jan. 3, 2000, www.nvidia.com.
Akeley, Kurt, “Reality Engine Graphics”, 1993, Silicon Graphics Computer Systems, pp. 109-116.
White paper, Huddy, Richard, “The Efficient Use of Vertex Buffers,” (Nov. 01, 2000).
White paper, Spitzer, John, et al., “Using GL_NV_array_range and GL_NV_Fence on GEForce Products and Beyone” (Aug. 1, 2000).
White paper, Rogers, Douglas H., “Optimizing Direct3D for the GeForce 256” (Jan. 3, 2000).
White paper, “Technical Brief, AGP 4X With Fast Writes—A Unique NVIDIA GeForce 256 Feature” (Nov. 10, 1999).
Hoppe, Hugues, “Optimization of Mesh Locality for Transparent Vertex Caching,” Proceedings of SIGGRAPH, pp. 269-276 (Aug. 8-13, 1999).
Hook, Brian, “An Incomplete Guide to Programming DirectDraw and Direct3D Immediate Mode (Release 0.46),” printed from web site: www.wksoftware.com, 42 pages.
Thompson, Tom, “Must-See 3-D Engines,” BYTE Magazine, printed from web site www.byte.com, 10 pages (Jun. 1996).
Thompson, Nigel, “Rendering with Immediate Mode,” Microsoft Interactive Developer Column: Fun and Games, printed from web site msdn.microsoft.com, 8 pages (Mar. 97).
“HOWTO: Animate Textures in Direct3D Immediate Mode,” printed from web site support.microsoft.com, 3 pages (last reviewed Dec. 15, 2000).
“INFO: Rendering a Triangle Using an Execute Buffer,” printed from web site support.microsoft.com, 6 pages (last reviewed Oct. 20, 2000).
Provisional Applications (1)
Number Date Country
60/161915 Oct 1999 US