(19)
(11)EP 2 289 000 B1

(12)EUROPEAN PATENT SPECIFICATION

(45)Mention of the grant of the patent:
08.08.2018 Bulletin 2018/32

(21)Application number: 09755252.5

(22)Date of filing:  27.05.2009
(51)International Patent Classification (IPC): 
G06F 15/16(2006.01)
G06T 17/20(2006.01)
G06T 15/00(2011.01)
(86)International application number:
PCT/US2009/003215
(87)International publication number:
WO 2009/145889 (03.12.2009 Gazette  2009/49)

(54)

SYSTEM, METHOD, AND COMPUTER PROGRAM PRODUCT FOR A TESSELLATION ENGINE USING A GEOMETRY SHADER

SYSTEM, VERFAHREN UND COMPUTERPROGRAMMPRODUKT FÜR EINE EINEN GEOMETRIESCHATTIERER VERWENDENDE MOSAIK-ENGINE

SYSTÈME, PROCÉDÉ ET PRODUIT DE PROGRAMME D'ORDINATEUR POUR UN MOTEUR DE STRUCTURE EN MOSAÏQUE UTILISANT UN ORGANE D'OMBRAGE GÉOMÉTRIQUE


(84)Designated Contracting States:
AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MK MT NL NO PL PT RO SE SI SK TR

(30)Priority: 29.05.2008 US 56936 P

(43)Date of publication of application:
02.03.2011 Bulletin 2011/09

(73)Proprietor: Advanced Micro Devices, Inc.
Santa Clara, CA 95054 (US)

(72)Inventor:
  • GOEL, Vineet
    Winter Park FL 32789 (US)

(74)Representative: Robinson, David Edward Ashdown et al
Marks & Clerk LLP 1 New York Street
Manchester M1 4HD
Manchester M1 4HD (GB)


(56)References cited: : 
WO-A1-02/43011
US-A1- 2006 164 414
US-A1- 2006 050 072
US-A1- 2008 001 952
  
  • BOUBEKEUR T ET AL: "QAS: Real-Time Quadratic Approximation of Subdivision Surfaces", COMPUTER GRAPHICS AND APPLICATIONS, 2007. PG '07. 15TH PACIFIC CONFERENCE ON, IEEE, PISCATAWAY, NJ, USA, 29 October 2007 (2007-10-29), pages 453-456, XP031221792, ISBN: 978-0-7695-3009-3
  • LORENZ, H. AND DÖLLNER, J.: "Dynamic Mesh Refinement on GPU using Geometry Shaders", , February 2008 (2008-02), pages 1-8, XP002690083, Retrieved from the Internet: URL:http://iason.fav.zcu.cz/wscg2008/Paper s_2008/full/C97-full.pdf [retrieved on 2013-01-10]
  
Note: Within nine months from the publication of the mention of the grant of the European patent, any person may give notice to the European Patent Office of opposition to the European patent granted. Notice of opposition shall be filed in a written reasoned statement. It shall not be deemed to have been filed until the opposition fee has been paid. (Art. 99(1) European Patent Convention).


Description

BACKGROUND


FIELD OF THE INVENTION



[0001] The present invention relates generally to optimizing tessellation operations in a graphics processing unit.

BACKGROUND



[0002] A graphics processing unit (GPU) is a special-purpose integrated circuit optimized for graphics processing operations. A GPU is often incorporated into computing devices (e.g., personal computers, rendering farms or servers, handheld devices, digital televisions, etc.) used for executing applications with demanding graphics processing needs, such as, for example, video game applications.

[0003] In most modern GPU implementations, the processing of graphics operations is broken into various functional units, each located within a different stage of a processing pipeline. Typically, input to the GPU is in the form of a set of vertices as well as some connectivity information identifying how the vertices are connected to each other. A set of vertices coupled with connectivity information for that set of vertices defines a geometric primitive. Often, the geometric primitive of choice is a triangle, which is defined by three vertices and three edges, the edges represented as connectivity information.

[0004] As each geometric primitive is processed by the GPU for rendering, individual vertices are processed by a vertex shader. The vertex shader is generally used to perform operations that apply to individual vertices. Examples of these operations include transform operations and lighting operations. As a result of these operations, data regarding a computed vertex position, the color of the primitive at that vertex, and texture coordinates at that vertex for texture mapping are generally computed.

[0005] After computations involving individual vertices are performed, an additional stage of the pipeline may perform operations on primitives as a whole. This stage, commonly referred to as the geometry shader, can apply graphics techniques to an entire primitive, potentially resulting in the creation of additional primitives. For example, a geometry shader can be used to apply a displacement map, for repositioning the vertices, or for applying fur and fin techniques.

[0006] Upon completion of the geometry shader stage, the output is commonly sent to a rasterizer for conversion into a two-dimensional image, and further enhancements can be performed by a pixel shader.

[0007] The techniques performed by the geometry shader typically result in the creation of additional primitives for the purpose of enhancing the appearance of a rendered object. By applying a displacement map, for example, additional primitives are generated in order to provide additional vertices, which are then displaced according to a texture bitmap. Generally, as more primitives are used in the computation of the technique, the smoother and more realistic the final object will appear. However, providing too many vertices can overwhelm the vertex and geometry shaders, and may not result in a noticeably improved rendering of the object, particularly when the object being rendered is located at a significant distance from the viewing plane.

[0008] Prior implementations have relied on using a tessellation engine to increase the number of primitives immediately prior to the vertex shader stage. For example, commonly-owned U.S. Patent Application Publication No. 2004/0085312 to Buchner et al. (Appl. No. 10/287,143), discloses a method and apparatus for performing such tessellation. However, previous implementations have simply allowed for output from the tessellation engine to be processed by the vertex shader, then transmitted to the rasterizer for rendering to the display. If a developer using a prior implementation wanted to increase the primitive count by tessellating the primitives, then running the tessellated primitives through the geometry shader, it was necessary to store the tessellated output somewhere in memory. The developer would then need to re-run the GPU pipeline on the tessellated data in order to allow the geometry shader to perform its computations on the tessellated data. Another document in this technical field is US 2008/001952.

[0009] Accordingly, what are needed are improved techniques to reduce the rendering costs attributed to tessellation when further processing tessellated data in a geometry shader.

SUMMARY



[0010] Embodiments of the invention include a method according to claim 1 for providing tessellated primitive data to a geometry shader.

[0011] Embodiments of the invention additionally include a graphics processing unit according to claim 7 for providing tessellated primitive data to a geometry shader.

[0012] Embodiments of the invention further include a computer program product according to claim 14 comprising a computer-usable medium having computer program logic recorded thereon for enabling a processor to provide tessellated primitive data to a geometry shader.

[0013] Further features and advantages of the invention, as well as the structure and operation of various embodiments of the invention, are described in detail below with reference to the accompanying drawings. It is noted that the invention is not limited to the specific embodiments described herein. Such embodiments are presented herein for illustrative purposes only. Additional embodiments will be apparent to persons skilled in the relevant art based on the teachings contained herein.

BRIEF DESCRIPTION OF THE DRAWINGS



[0014] The accompanying drawings, which are incorporated herein and form a part of the specification, illustrate embodiments of the present invention and, together with the description, further serve to explain the principles of the invention and to enable a person skilled in the relevant art to make and use the invention.

FIG. 1 is an illustration of a typical GPU pipeline implementation, in accordance with an embodiment of the present invention.

FIG. 2 is an illustration of a typical GPU pipeline implementation incorporating a tessellation engine, in accordance with an embodiment of the present invention.

FIG. 3 is an illustration of an optimized GPU pipeline implementation incorporating a tessellation engine within the pipeline, in accordance with an embodiment of the present invention.

FIG. 4 is an illustration of the communications between stages of a GPU pipeline implementation, in accordance with an embodiment of the present invention.

FIG. 5 is a flowchart depicting the steps by which a GPU pipeline implementation having a tessellation engine is operable to enhance processing by a geometry shader, in accordance with an embodiment of the present invention.

FIG. 6 depicts an example computer system in which embodiments of the present invention may be implemented.

FIG. 7 is an exemplary illustration of interface layers in a computer system in which embodiments of the present invention may be implemented.



[0015] Further features and advantages of the invention, as well as the structure and operation of various embodiments of the invention, are described in detail below with reference to the accompanying drawings. It is noted that the invention is not limited to the specific embodiments described herein. Such embodiments are presented herein for illustrative purposes only. Additional embodiments will be apparent to persons skilled in the relevant art based on the teachings contained herein provided that they are within the scope of the appended claims

DETAILED DESCRIPTION


INTRODUCTION



[0016] The following detailed description of the present invention refers to the accompanying drawings that illustrate exemplary embodiments consistent with this invention. Other embodiments are possible, and modifications can be made to the embodiments within the scope of the invention as defined by the appended claims.

[0017] It would be apparent to one of skill in the art that the present invention, as described below, can be implemented in many different embodiments of software, hardware, firmware, and/or the entities illustrated in the figures. Any actual software code with the specialized control of hardware to implement the present invention is not limiting of the present invention. Thus, the operational behavior of the present invention will be described with the understanding that modifications and variations of the embodiments are possible, given the level of detail presented herein. Additionally, and as will be apparent to one of ordinary skill in the art, the simulation, synthesis and/or manufacture of the various embodiments of this invention may be accomplished, in part, through the use of computer readable code (as noted above), including general programming languages (such as C or C++), hardware description languages (HDL) including Verilog HDL, VHDL, Altera HDL (AHDL) and so on, or other available programming and/or schematic capture tools (such as circuit capture tools). This computer readable code can be disposed in any known computer usable medium including semiconductor, magnetic disk, optical disk (such as CD-ROM, DVD-ROM) and as a computer data signal embodied in a computer usable (e.g., readable) transmission medium (such as a carrier wave or any other medium including digital, optical, or analog-based medium). As such, the code can be transmitted over communication networks including the Internet and internets. It is understood that the functions accomplished and/or structure provided by the systems and techniques described above can be represented in a core (such as a GPU core) that is embodied in program code and may be transformed to hardware as part of the production of integrated circuits.

[0018] FIG. 1 illustrates a typical graphics processing unit (GPU) pipeline 100 having at least four processing stages. A modern GPU pipeline 100 often has a vertex shader 102 stage, a geometry shader 104 stage, a rasterizer 106 stage, and a pixel shader 108 stage. In a typical use of GPU pipeline 100, a graphics application provides vertex shader 102 with a set of vertices and a set of connectivity data. Together, this set of vertices and the set of connectivity data define an object or a scene to be rendered.

[0019] The vertex shader 102 is operable to manipulate the set of vertices to perform pervertex operations. These operations include, for example, transform operations and lighting operations. The vertex shader allows a graphics application to manipulate an object to be rendered by, for example, moving the object within a scene by adding an offset to each of the vertices that comprise the object. As an example, if a graphics application wanted to move an object to be rendered by five units along the x-axis in x,y,z-space, the vertex shader would be useful in computing a +5 offset to the x-coordinate of each vertex comprising the object, resulting in the movement of the entire object to the new offset location. In accordance with an embodiment of the present invention, such computations are accomplished by issuing a single-instruction multiple-data ("SIMD") instruction to the GPU pipeline 100.

[0020] Geometry shader 104 obtains the manipulated vertex set and the set of connectivity data from the vertex shader in preparation for further manipulation. The geometry shader 104 is configured to operate on simple geometric shapes known as primitives. While primitives may be any set of vertex data and the connectivity data between the vertices in that set, most geometry shader 104 implementations operate primarily on triangles. Triangles are defined by three vertices and the connectivity data between those three vertices. The geometry shader 104 can be used, for example, to apply a displacement map, for repositioning the vertices in a set of primitives, or for applying fur and fin techniques to a set of primitives.

[0021] The result of the geometry shader 104 applying the aforementioned techniques may be the creation of additional vertices and connectivity data, therefore forming additional primitives. For example, the application of a displacement map may result in the generation of additional vertices, and corresponding connectivity data, in order to displace areas of an object where vertices may not have previously been located.

[0022] The techniques applied at the vertex shader 102 and geometry shader 104 tend to benefit from higher primitive counts as an input to the geometry shader 104, resulting in smoother, more complex objects. Accordingly, it is beneficial to use high-order surfaces as inputs to the GPU pipeline 100 in order to obtain better results from the application of the primitive-manipulation techniques at the vertex shader 102 and geometry shader 104.

[0023] Rasterizer 106 takes the final vertex set and connectivity data set and, based on a viewing plane, determines what a scene comprising the vertex set and connectivity data set would look like if rendered in two dimensions from the corresponding point of view. This rendered scene, typically comprising a set of picture elements ("pixels") ready for display on a two-dimensional display device, is then sent to pixel shader 108 for additional processing on a per-pixel level.

[0024] As previously noted, it is generally beneficial when performing processing of primitives within GPU pipeline 100 to have additional primitives to work with, for the purposes of image quality.

[0025] FIG. 2 is a block diagram illustration of a GPU pipeline 200. The GPU pipeline 200 includes a vertex shader 203, geometry shader 104, rasterizer 106, and pixel shader 108 as in GPU pipeline 100. The GPU pipeline also includes a tessellation engine 202 for accomplishing the process of introducing additional primitives based on existing primitives, a process known as "tessellation."

[0026] Tessellation engine 202 is operable to take a vertex data set and connectivity data set and tessellate the resulting primitives, providing a new vertex data set and new connectivity data to vertex shader 203 for further processing. Commonly-owned U.S. Patent Application Publication No. 2004/0085312 to Buchner et al. (Appl. No. 10/287,143), discloses a method and apparatus for performing such tessellation. The output of tessellation engine 202 is then sent to the vertex shader 203 as in the traditional pathway, allowing the vertex shader 203 to compute a new set of vertices and store them within an evaluation shader 204. Rasterizer 106 could subsequently retrieve the vertices from evaluation shader 204 and continue operations as before.

[0027] In this implementation it is not possible to perform geometry shader operations on a tessellated output within the pipeline 200, as there is no means by which the tessellated output could be retrieved by the geometry shader 104. Accordingly, in order to apply the geometry shader 104 techniques to tessellated data, it would be necessary to store the tessellated data somewhere in memory and restart the pipeline 200 using the tessellated data as an input to vertex shader 203 to pass the data to geometry shader 104.

OPTIMIZED GPU PIPELINE WITH TESSELLATION



[0028] FIG. 3 is illustration of an optimized GPU pipeline 300, in accordance with an embodiment of the present invention. Pipeline 300 includes tessellation engine 202, vertex shader 102, evaluation shader 204, geometry shader 104, rasterizer 106, and pixel shader 108.

[0029] Tessellation engine 202 is operable to retrieve (or receive) a set of vertices and a set of connectivity information from a memory location (not shown), in accordance with an embodiment of the present invention. Applying a tessellation technique, such as the one described in commonly-owned U.S. Patent Application Publication No. 2004/0085312 to Buchner et al. (Appl. No. 10/287,143), allows the tessellation engine to generate tessellated primitives, in accordance with an embodiment of the present invention.

[0030] In accordance with an additional embodiment of the present invention, application of the tessellation technique at the tessellation engine 202 results in the output of the original vertices for the original input primitives as well as tessellated vertices. New connectivity information is generated by the tessellation engine corresponding to the original vertices and the tessellated vertices. The tessellated vertices are output, in the exemplary embodiment, as barycentric coordinates.

[0031] As shown in FIG. 3, the output from tessellation engine 202 is transmitted to both geometry shader 104 and vertex shader 203. In accordance with an embodiment of the present invention, tessellation engine 202 transmits the computed vertex set, comprising original vertices as well as tessellated vertices, to vertex shader 203. Vertex shader 203 is operable to compute vertex values for the computed vertex set, in accordance with an embodiment of the present invention. In accordance with an additional embodiment of the present invention, vertex shader 203 is operable to perform additional vertex operations on the vertices of the computed vertex set such as, for example, a transformation operation. One skilled in the relevant arts will appreciate that the functionality of the vertex shader includes well-known techniques for vertex-level manipulation. When all changes on the computed vertex set are performed, the computed vertex set is written to evaluation shader 204. In accordance with an embodiment of the present invention, evaluation shader 204 comprises a ring buffer to which the computed vertex set is written.

[0032] Tessellation engine 202 further transmits the connectivity data of all vertices, both original and tessellated, directly to geometry shader 104. Geometry shader 104 is then operable to use this connectivity data to obtain the vertices corresponding to a primitive defined by a subset of the connectivity data, in accordance with an embodiment of the present invention. Geometry shader 104 retrieves the vertex data from evaluation shader 204, where it has been stored by vertex shader 102, in accordance with an embodiment of the present invention.

[0033] Communication flow diagram 400 of FIG. 4 further illustrates this process in accordance with an embodiment of the present invention. Flow diagram 400 shows the communications between tessellation engine 202, vertex shader 203, evaluation shader 204, and geometry shader 104. After performing tessellation, tessellation engine 202 transmits the original and tessellated vertex set to vertex shader 203 at step 402. Upon computing the computed vertex set, vertex shader 203 stores the computed vertex set at evaluation shader 204 at step 404. Furthermore, tessellation engine 202 transmits the computed connectivity data for all vertices directly to geometry shader 104 at step 406.

[0034] With the connectivity data in hand, geometry shader 104 then requests the set of vertices corresponding to a primitive defined by the connectivity data at step 408, in accordance with an embodiment of the present invention. Evaluation shader 204 then provides the requested vertices at step 410. Geometry shader 104 is then operable to perform primitive-level operations on the vertices returned at step 410.

METHOD OF OPERATION



[0035] FIG. 5 is a flowchart 500 illustrating the steps by which the GPU pipeline 300 of FIG. 3 is operable to provide optimized tessellated graphics, in accordance with an embodiment of the present invention. The method begins at step 501 and proceeds to step 502 where it is determined whether tessellation has been requested.

[0036] In accordance with an embodiment of the present invention, tessellation is only applied when a certain threshold has been met. This threshold could be, for example, the distance of an object being rendered from a viewing plane, the curvature of the object, or other criteria. One skilled in the relevant arts will recognize that other thresholds exist for optimizing the complexity of a rendered object relative to the ability of a user of a graphics application to perceive the complexity. Moreover, the threshold is modified, in accordance with an embodiment of the present invention, based on considerations such as the computational ability of the particular GPU pipeline 300, the display area, and user preferences. If tessellation is not requested at step 502, the method proceeds at step 506 without performing tessellation.

[0037] At step 504, tessellation is performed in the tessellation engine 202, with the tessellation engine 202 computing tessellated vertices and generating new connectivity data defining connections between all vertices, both original and tessellated. At step 506, the vertex shader 203 computes modified vertex data, in accordance with an embodiment of the present invention. As previously disclosed, vertex shader 203 receives the original and the tessellated vertex set at step 402 of FIG. 4 from the tessellation engine 202, on which vertex shader 203 is operable to generated the computed vertex set at step 404. In accordance with an additional embodiment of the present invention, the computed vertex set is stored in evaluation shader 204.

[0038] The method proceeds to step 508, where the geometry shader 104 receives the connectivity data from tessellation engine 202. At step 510, the geometry shader 104 identifies the primitives corresponding to the connectivity data and retrieves the corresponding vertices. In accordance with an embodiment of the present invention, geometry shader 104 retrieves the vertices from evaluation shader 204, where they have been stored by vertex shader 203. Geometry shader 104 then performs primitive-level operations on the retrieved primitives, and the method ends at step 512.

COMPUTER SYSTEM IMPLEMENTATION



[0039] Various aspects of the present invention can be implemented by software, firmware, hardware, or a combination thereof. FIG. 6 illustrates an example computer system 600 in which the present invention, or portions thereof, can be implemented as computer-readable code. For example, the methods illustrated by flowchart 500 of FIG. 5 can be implemented in system 600. Various embodiments of the invention are described in terms of this example computer system 600. After reading this description, it will become apparent to a person skilled in the relevant art how to implement the invention using other computer systems and/or computer architectures.

[0040] Computer system 600 includes one or more processors, such as processor 604. Processor 604 can be a special purpose or a general purpose processor. Processor 604 is connected to a communication infrastructure 606 (e.g., a bus or network).

[0041] Computer system 600 also includes a main memory 608, preferably random access memory (RAM), and can also include a secondary memory 610. Secondary memory 610 can include, for example, a hard disk drive 612, a removable storage drive 614, and/or a memory stick. Removable storage drive 614 can comprise a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash memory, or the like. The removable storage drive 614 reads from and/or writes to a removable storage unit 618 in a well known manner. Removable storage unit 618 can comprise a floppy disk, magnetic tape, optical disk, etc. which is read by and written to by removable storage drive 614. As will be appreciated by persons skilled in the relevant art, removable storage unit 618 includes a computer-usable storage medium having stored therein computer software and/or data.

[0042] In alternative implementations, secondary memory 610 can include other similar means for allowing computer programs or other instructions to be loaded into computer system 600. Such means can include, for example, a removable storage unit 622 and an interface 620. Examples of such means can include a program cartridge and cartridge interface (such as those found in video game devices), a removable memory chip (e.g., EPROM or PROM) and associated socket, and other removable storage units 622 and interfaces 620 which allow software and data to be transferred from the removable storage unit 622 to computer system 600.

[0043] Computer system 600 can also include a communications interface 624. Communications interface 624 allows software and data to be transferred between computer system 600 and external devices. Communications interface 624 can include a modem, a network interface (such as an Ethernet card), a communications port, a PCMCIA slot and card, or the like. Software and data transferred via communications interface 624 are in the form of signals which can be electronic, electromagnetic, optical, or other signals capable of being received by communications interface 624. These signals are provided to communications interface 624 via a communications path 626. Communications path 626 carries signals and can be implemented using wire or cable, fiber optics, a phone line, a cellular phone link, a RF link or other communications channels.

[0044] In this document, the terms "computer program medium" and "computer-usable medium" are used to generally refer to media such as removable storage unit 618, removable storage unit 622, and a hard disk installed in hard disk drive 612. Signals carried over communications path 626 can also embody the logic described herein. Computer program medium and computer-usable medium can also refer to memories, such as main memory 608 and secondary memory 610, which can be memory semiconductors (e.g., DRAMs, etc.). These computer program products are means for providing software to computer system 600.

[0045] Computer programs (also called computer control logic or data and/or instructions) are stored in main memory 608 and/or secondary memory 610. Computer programs can also be received via communications interface 624. Such computer programs, when executed, enable computer system 600 to implement the present invention as discussed herein. In particular, the computer programs, when executed, enable processor 604 to implement the processes of the present invention, such as the steps in the methods illustrated by flowchart 500 of FIG. 5, discussed above. Accordingly, such computer programs represent controllers of the computer system 600. Where the invention is implemented using software, the software can be stored in a computer program product and loaded into computer system 600 using removable storage drive 614, interface 620, hard drive 612 or communications interface 624.

[0046] The invention is also directed to computer program products comprising software stored on any computer-usable medium. Such software, when executed in one or more data processing device, causes a data processing device(s) to operate as described herein or, as noted above, allows for the synthesis and/or manufacture of computing devices (e.g., ASICs, or processors) to perform embodiments of the present invention described herein. Embodiments of the invention employ any computer-usable or -readable medium, known now or in the future. Examples of computer-usable mediums include, but are not limited to, primary storage devices (e.g., any type of random access memory), secondary storage devices (e.g., hard drives, floppy disks, CD ROMS, ZIP disks, tapes, magnetic storage devices, optical storage devices, MEMS, nanotechnological storage devices, etc.), and communication mediums (e.g., wired and wireless communications networks, local area networks, wide area networks, intranets, etc.).

APPLICATION-LEVEL IMPLEMENTATION



[0047] FIG. 7 is a diagram 700 illustrating various layers of abstraction by which graphics applications 702 are operable to interact with graphics hardware disclosed herein, in accordance with an embodiment of the present invention. Applications 702 are able to send messages to a number of application programming interfaces ("APIs"), including graphics APIs 704 and operating system ("OS") APIs 706. Graphics APIs 704 include, for example, Microsoft DirectX 10 developed by Microsoft Corporation of Redmond, Washington, or the Open Graphics Library ("OpenGL") developed by Silicon Graphics, Inc. of Sunnyvale, California.

[0048] The various APIs may further interact with an abstraction layer commonly provided by a graphics hardware manufacturer to interact with the specific graphics hardware, namely graphics hardware drivers 708. The various levels of communication are received by the operating system kernel 710, which then sends the appropriate messages to graphics hardware 712.

[0049] In accordance with an embodiment of the present invention, the aforementioned graphics pipeline 300 of FIG. 3 is implemented within graphics hardware 712. In accordance with an additional embodiment of the present invention, graphics hardware drivers 708 and graphics API 704 are optimized to use the tessellation features of graphics pipeline 300.

CONCLUSION



[0050] While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. It will be understood by those skilled in the relevant art that various changes in form and details can be made therein without departing from the spirit and scope of the invention as defined in the appended claims. It should be understood that the invention is not limited to these examples. The invention is applicable to any elements operating as described herein. Accordingly, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims.


Claims

1. A method for providing tessellated primitive data to a geometry shader (104), the method comprising:

computing a new set of tessellated vertices and a new set of connectivity data in a tessellation engine (202) based on an original set of vertices and an original set of connectivity data;

characterized by transmitting, from the tessellation engine, the computed new set of connectivity data and the original set of connectivity data to the geometry shader (104), wherein the computed new set of connectivity data and the original set of connectivity data are transmitted from the tessellation engine (202) without going through the vertex shader (102,203);

generating modified vertex data at a vertex shader (102,203) based on the original set of vertices and the new set of tessellated vertices received from the tessellation engine (202);

retrieving at the geometry shader (104) from the vertex shader, a subset of the modified vertex data based on the new set of connectivity data; and

processing primitives defined by the subset of the modified vertex data.


 
2. The method of claim 1, further comprising:
disabling the use of the tessellation engine (202) to process the surface data output if the set of vertices does not meet a threshold.
 
3. The method of claim 2, wherein the threshold is defined by a distance from a viewing plane.
 
4. The method of claim 3, wherein the threshold is adjusted based on the size of a viewing window.
 
5. The method of claim 1, further comprising:
storing the modified vertex data at an evaluation shader (204) in the vertex shader.
 
6. The method of claim 5, wherein the requesting a subset of the computed vertex data based comprises:
requesting the subset of the modified vertex data from the evaluation shader (204).
 
7. A graphics processing unit (100,200) for providing tessellated primitive data to a geometry shader (104), the graphics processing unit comprising:

a tessellation engine (202) for computing a new set of tessellated vertices and a new set of connectivity data based on an original set of vertices and an original set of connectivity data

characterized by transmitting the new set of connectivity data for the original set of vertices and the new set of tessellated vertices to the geometry shader (104);

characterized by a vertex shader (102,203) for generating modified vertex data based on the original set of vertices and the set of tessellated vertices received from the tessellation engine (202); and

the geometry shader (104) receiving the new set of tessellated vertices from the vertex shader, a subset of the modified vertex data based on the new set of connectivity data, receiving from the vertex shader (102,203) a subset of the modified vertex data based on the new set of connectivity data, and processing primitives defined by the subset of the computed vertex data,

wherein the new set of connectivity data is transmitted from the tessellation engine (202) without going through the vertex shader.


 
8. The graphics processing unit of claim 7, wherein the tessellation engine (202) is disabled if the original set of vertices does not meet a threshold.
 
9. The graphics processing unit of claim 8, wherein the threshold is defined by a distance from a viewing plane.
 
10. The graphics processing unit of claim 9, wherein the threshold is adjusted based on the size of a viewing window.
 
11. The graphics processing unit of claim 7, wherein the vertex shader (102, 203) is operable to store the modified vertex data at an evaluation shader (204).
 
12. The graphics processing unit of claim 11, wherein the geometry shader is operable to request the subset of the modified vertex data from the evaluation shader (204).
 
13. The graphics processing unit of claim 7 wherein said graphics processing unit comprises a set of instructions stored on a computer readable media, the instructions comprising hardware description language instructions.
 
14. A computer program product comprising a computer-usable medium having computer program logic recorded thereon for enabling a processor to provide tessellated primitive data to a geometry shader (104), the computer program logic comprising data and instructions to enable the processor to:

compute a set of tessellated vertices and a computed set of connectivity data at a tessellation engine (202) based on an original set of vertices and an original set of connectivity data;

characterized by the processor being further enabled to transmit the new set of connectivity data for the original set of vertices and the new set of tessellated vertices to the geometry shader (104);

generate modified vertex data at a vertex shader (102,203) based on the original set of vertices and a new set of tessellated vertices received from the tessellation engine (202);

retrieve at the geometry shader (104) from the vertex shader (102,203), a subset of the modified vertex data based on the new set of connectivity data; and

process primitives defined by the subset of the computed vertex data,

wherein the new set of connectivity data is transmitted from the tessellation engine (202) without going through the vertex shader.


 
15. The computer program logic of claim 14, further comprising:
disabling the use of the tessellation engine (202) to process the surface data output if the set of vertices does not meet a threshold.
 
16. The computer program logic of claim 15, wherein the threshold is defined by a distance from a viewing plane.
 
17. The computer program logic of claim 16, wherein the threshold is adjusted based on the size of a viewing window.
 
18. The computer program logic of claim 14, further comprising data and instructions to enable the processor to:
store the modified vertex data at an evaluation shader (204) in the vertex shader.
 
19. The computer program logic of claim 18, wherein the data and instructions to enable the processor to request a subset of the modified vertex data comprises data and instructions to enable the processor to:
request the subset of the modified vertex data from the evaluation shader (204).
 
20. The computer program logic of claim 14, wherein data and instructions comprise hardware description language data and instructions.
 


Ansprüche

1. Verfahren zum Bereitstellen von primitiven Mosaikdaten für einen Geometrieschattierer (104), wobei das Verfahren Folgendes umfasst:

Berechnen eines neuen Satzes von Mosaikvertices und eines neuen Satzes von Konnektivitätsdaten in einer Mosaik-Engine (202) auf Grundlage eines ursprünglichen Satzes von Vertices und eines ursprünglichen Satzes von Konnektivitätsdaten;

gekennzeichnet durch das Übertragen des berechneten neuen Satzes von Konnektivitätsdaten und des ursprünglichen Satzes von Konnektivitätsdaten von der Mosaik-Engine zu dem Geometrischattierer (104), wobei der berechnete neue Satz von Konnektivitätsdaten und der ursprüngliche Satz von Konnektivitätsdaten von der Mosaik-Engine (202) übertragen werden, ohne durch den Vertexschattierer (102,203) hindurchzugehen;

Generieren modifizierter Vertexdaten an einem Vertexschattierer (102,203) auf Grundlage des ursprünglichen Satzes von Vertices und des neuen Satzes von Vertices, die von der Mosaik-Engine (202) empfangen werden;

Abrufen an dem Geometrieschattierer (104) einer Teilmenge der modifizierten Vertexdaten von dem Vertexschattierer auf Grundlage des neuen Satzes von Konnektivitätsdaten; und

Verarbeiten von Primitiven, die durch die Teilmenge der modifizierten Vertexdaten definiert sind.


 
2. Verfahren nach Anspruch 1, ferner umfassend:
Deaktivieren der Verwendung der Mosaik-Engine (202), um die Oberflächendatenausgabe zu verarbeiten, wenn der Satz von Vertices einem Schwellenwert nicht entspricht.
 
3. Verfahren nach Anspruch 2, wobei der Schwellenwert durch einen Abstand von einer Betrachtungsebene definiert ist.
 
4. Verfahren nach Anspruch 3, wobei der Schwellenwert auf Grundlage der Größe eines Betrachtungsfensters eingestellt ist.
 
5. Verfahren nach Anspruch 1, ferner umfassend:
Speichern der modifizierten Vertexdaten an einem Auswertungsschattierer (204) in dem Vertexschattierer.
 
6. Verfahren nach Anspruch 5, wobei das Anfordern einer Teilmenge der berechneten Vertexdaten (AT) Folgendes umfasst:
Anfordern der Teilmenge der modifizierten Vertexdaten von dem Auswertungsschattierer (204).
 
7. Grafikverarbeitungseinheit (100,200) zum Bereitstellen von primitiven Mosaikdaten für einen Geometrieschattierer (104), wobei die Grafikverarbeitungseinheit Folgendes umfasst:

eine Mosaik-Engine (202) zum Berechnen eines neuen Satzes von Mosaikvertices und eines neuen Satzes von Konnektivitätsdaten auf Grundlage eines ursprünglichen Satzes von Vertices und eines ursprünglichen Satzes von Konnektivitätsdaten,

gekennzeichnet durch das Übertragen des neuen Satzes von Konnektivitätsdaten für den ursprünglichen Satz von Vertices und des neuen Satzes von Mosaikvertices zu dem Geometrischattierer (104);

gekennzeichnet durch einen Vertexschattierer (102,203) zum Generieren modifizierter Vertexdaten auf Grundlage des ursprünglichen Satzes von Vertices und des Satzes von Mosaikvertices, die von der Mosaik-Engine (202) empfangen werden; und

wobei der Geometrieschattierer (104) den neuen Satz von Mosaikvertices von dem Vertexschattierer und eine Teilmenge der modifizierten Vertexdaten auf Grundlage des neuen Satzes von Konnektivitätsdaten empfängt, von dem Vertexschattierer (102,203) eine Teilmenge der modifizierten Vertexdaten auf Grundlage des neuen Satzes von Konnektivitätsdaten empfängt, und Primitive verarbeitet, die durch die Teilmenge der berechneten Vertexdaten definiert sind,

wobei der neue Satz von Konnektivitätsdaten von der Mosaik-Engine (202) übertragen wird, ohne durch den Vertexschattierer hindurchzugehen.


 
8. Grafikverarbeitungseinheit nach Anspruch 7, wobei die Mosaik-Engine (202) deaktiviert ist, wenn der ursprüngliche Satz von Vertices einem Schwellenwert nicht entspricht.
 
9. Grafikverarbeitungseinheit nach Anspruch 8, wobei der Schwellenwert durch einen Abstand von einer Betrachtungsebene definiert ist.
 
10. Grafikverarbeitungseinheit nach Anspruch 9, wobei der Schwellenwert auf Grundlage der Größe eines Betrachtungsfensters eingestellt ist.
 
11. Grafikverarbeitungseinheit nach Anspruch 7, wobei der Vertexschattierer (102,203) betrieben werden kann, um die modifizierten Vertexdaten an einem Auswertungsschattierer (204) zu speichern.
 
12. Grafikverarbeitungseinheit nach Anspruch 11, wobei der Geometrieschattierer betrieben werden kann, um die Teilmenge der modifizierten Vertexdaten von dem Auswertungsschattierer (204) anzufordern.
 
13. Grafikverarbeitungseinheit nach Anspruch 7, wobei die Grafikverarbeitungseinheit einen Satz von Anweisungen umfasst, die auf einem computerlesbaren Medium gespeichert sind, wobei die Anweisungen Anweisungen der Hardwarebeschreibungssprache umfassen.
 
14. Computerprogrammprodukt, umfassend ein von einem Computer verwendbares Medium, das eine Computerprogrammlogik aufweist, die darauf aufgezeichnet ist, um es einem Prozessor zu ermöglichen, primitive Mosaikdaten für einen Geometrieschattierer (104) bereitzustellen, wobei die Computerprogrammlogik Daten und Anweisungen umfasst, um dem Prozessor Folgendes zu ermöglichen:

Berechnen eines Satzes von Mosaikvertices und eines berechneten Satzes von Konnektivitätsdaten an einer Mosaik-Engine (202) auf Grundlage eines ursprünglichen Satzes von Vertices und eines ursprünglichen Satzes von Konnektivitätsdaten;

dadurch gekennzeichnet, dass der Prozessor ferner dazu in der Lage ist, den neuen Satz von Konnektivitätsdaten für den ursprünglichen Satz von Vertices und den neuen Satz von Mosaikvertices zu dem Geometrischattierer (104) zu übertragen;

Generieren modifizierter Vertexdaten an einem Vertexschattierer (102,203) auf Grundlage des ursprünglichen Satzes von Vertices und eines neuen Satzes von Mosaikvertices, die von der Mosaik-Engine (202) empfangen werden;

Abrufen an dem Geometrieschattierer (104) einer Teilmenge der modifizierten Vertexdaten von dem Vertexschattierer (102,203) auf Grundlage des neuen Satzes von Konnektivitätsdaten; und

Verarbeiten von Primitiven, die durch die Teilmenge der berechneten Vertexdaten definiert sind,

wobei der neue Satz von Konnektivitätsdaten von der Mosaik-Engine (202) übertragen wird, ohne durch den Vertexschattierer hindurchzugehen.


 
15. Computerprogrammlogik nach Anspruch 14, ferner umfassend:
Deaktivieren der Verwendung der Mosaik-Engine (202), um die Oberflächendatenausgabe zu verarbeiten, wenn der Satz von Vertices einem Schwellenwert nicht entspricht.
 
16. Computerprogrammlogik nach Anspruch 15, wobei der Schwellenwert durch einen Abstand von einer Betrachtungsebene definiert ist.
 
17. Computerprogrammlogik nach Anspruch 16, wobei der Schwellenwert auf Grundlage der Größe eines Betrachtungsfensters eingestellt ist.
 
18. Computerprogrammlogik nach Anspruch 14, ferner umfassend Daten und Anweisungen, um dem Prozessor Folgendes zu ermöglichen:
Speichern der modifizierten Vertexdaten an einem Auswertungsschattierer (204) in dem Vertexschattierer.
 
19. Computerprogrammlogik nach Anspruch 18, wobei die Daten und Anweisungen, um dem Prozessor zu ermöglichen, eine Teilmenge der modifizierten Vertexdaten anzufordern, Daten und Anweisungen umfasst, um dem Prozessor Folgendes zu ermöglichen:
Anfordern der Teilmenge der modifizierten Vertexdaten von dem Auswertungsschattierer (204).
 
20. Computerprogrammlogik nach Anspruch 14, wobei Daten und Anweisungen Daten und Anweisungen der Hardwarebeschreibungssprache umfassen.
 


Revendications

1. Procédé pour fournir des données de primitive tessellées à un nuanceur de géométrie (104), le procédé comprenant :

le calcul d'un nouvel ensemble de sommets tessellés et d'un nouvel ensemble de données de connectivité dans un moteur de tessellation (202) sur la base d'un ensemble original de sommets et d'un ensemble original de données de connectivité ;

caractérisé par la transmission, à partir du moteur de tessellation, du nouvel ensemble de données de connectivité calculé et de l'ensemble original de données de connectivité au nuanceur de géométrie (104), où le nouvel ensemble de données de connectivité calculé et l'ensemble original de données de connectivité sont transmis à partir du moteur de tessellation (202) sans passer par le nuanceur de sommet (102, 203) ;

la génération de données de sommet modifiées au niveau d'un nuanceur de sommet (102, 203) sur la base de l'ensemble original de sommets et du nouvel ensemble de sommets tessellés reçus en provenance du moteur de tessellation (202) ;

la récupération au niveau du nuanceur de géométrie (104) à partir du nuanceur de sommet, d'un sous-ensemble des données de sommet modifiées sur la base du nouvel ensemble de données de connectivité ; et

le traitement de primitives définies par le sous-ensemble des données de sommet modifiées.


 
2. Procédé selon la revendication 1, comprenant en outre :
la désactivation de l'utilisation du moteur de tessellation (202) pour traiter la sortie de données de surface si l'ensemble de sommets ne satisfait pas à un seuil.
 
3. Procédé selon la revendication 2, dans lequel le seuil est défini par une distance depuis un plan de visualisation.
 
4. Procédé selon la revendication 3, dans lequel le seuil est ajusté sur la base de la taille d'une fenêtre de visualisation.
 
5. Procédé selon la revendication 1, comprenant en outre :
le stockage des données de sommet modifiées au niveau d'un nuanceur d'évaluation (204) dans le nuanceur de sommet.
 
6. Procédé selon la revendication 5, dans lequel la demande d'un sous-ensemble des données de sommet calculées comprend :
la demande du sous-ensemble des données de sommet modifiées au nuanceur d'évaluation (204).
 
7. Unité de traitement graphique (100, 200) pour fournir des données de primitive tessellées à un nuanceur de géométrie (104), l'unité de traitement graphique comprenant :

un moteur de tessellation (202) pour calculer un nouvel ensemble de sommets tessellés et un nouvel ensemble de données de connectivité sur la base d'un ensemble original de sommets et d'un ensemble original de données de connectivité ;

caractérisé par la transmission du nouvel ensemble de données de connectivité pour l'ensemble original de sommets et le nouvel ensemble de sommets tessellés au nuanceur de géométrie (104) ;

caractérisé par un nuanceur de sommet (102, 203) pour générer des données de sommet modifiées sur la base de l'ensemble original de sommets et de l'ensemble de sommets tessellés reçus en provenance du moteur de tessellation (202) ; et

le nuanceur de géométrie (104) recevant le nouvel ensemble de sommets tessellés en provenance du nuanceur de sommet, un sous-ensemble des données de sommet modifiées basé sur le nouvel ensemble de données de connectivité, recevant en provenance du nuanceur de sommet (102, 203) un sous-ensemble des données de sommet modifiées basé sur le nouvel ensemble de données de connectivité, et traitant des primitives définies par le sous-ensemble des données de sommet calculées,

dans laquelle le nouvel ensemble de données de connectivité est transmis à partir du moteur de tessellation (202) sans passer par le nuanceur de sommet.


 
8. Unité de traitement graphique selon la revendication 7, dans laquelle le moteur de tessellation (202) est désactivé si l'ensemble original de sommets ne satisfait pas à un seuil.
 
9. Unité de traitement graphique selon la revendication 8, dans laquelle le seuil est défini par une distance depuis un plan de visualisation.
 
10. Unité de traitement graphique selon la revendication 9, dans laquelle le seuil est ajusté sur la base de la taille d'une fenêtre de visualisation.
 
11. Unité de traitement graphique selon la revendication 7, dans laquelle le nuanceur de sommet (102, 203) est exploitable pour stocker les données de sommet modifiées au niveau d'un nuanceur d'évaluation (204).
 
12. Unité de traitement graphique selon la revendication 11, dans lequel le nuanceur de géométrie est exploitable pour demander le sous-ensemble des données de sommet modifiées au nuanceur d'évaluation (204).
 
13. Unité de traitement graphique selon la revendication 7, dans laquelle ladite unité de traitement graphique comprend un jeu d'instructions stocké sur un support lisible par ordinateur, les instructions comprenant des instructions de langage de description de matériel.
 
14. Produit de programme d'ordinateur comprenant un support utilisable par ordinateur ayant une logique de programme d'ordinateur enregistrée sur celui-ci pour permettre à un processeur de fournir des données de primitive tessellées à un nuanceur de géométrie (104), la logique de programme d'ordinateur comprenant des données et des instructions pour permettre au processeur de :

calculer un ensemble de sommets tessellés et un ensemble de données de connectivité calculé au niveau d'un moteur de tessellation (202) sur la base d'un ensemble original de sommets et d'un ensemble original de données de connectivité ;

caractérisé par le processeur étant en outre activé pour transmettre le nouvel ensemble de données de connectivité calculé pour l'ensemble original de sommets et le nouvel ensemble de sommets tessellés au nuanceur de géométrie (104) ;

générer des données de sommet modifiées au niveau d'un nuanceur de sommet (102, 203) sur la base de l'ensemble original de sommets et d'un nouvel ensemble de sommets tessellés reçus en provenance du moteur de tessellation (202) ;

récupérer au niveau du nuanceur de géométrie (104) à partir du nuanceur de sommet (102, 203), un sous-ensemble des données de sommet modifiées sur la base du nouvel ensemble de données de connectivité ; et

traiter des primitives définies par le sous-ensemble des données de sommet calculées,

dans lequel le nouvel ensemble de données de connectivité est transmis à partir du moteur de tessellation (202) sans passer par le nuanceur de sommet.


 
15. Logique de programme d'ordinateur selon la revendication 14, comprenant en outre :
la désactivation de l'utilisation du moteur de tessellation (202) pour traiter la sortie de données de surface si l'ensemble de sommets ne satisfait pas à un seuil.
 
16. Logique de programme d'ordinateur selon la revendication 15, dans laquelle le seuil est défini par une distance depuis un plan de visualisation.
 
17. Logique de programme d'ordinateur selon la revendication 16, dans laquelle le seuil est ajusté sur la base de la taille d'une fenêtre de visualisation.
 
18. Logique de programme d'ordinateur selon la revendication 14, comprenant en outre des données et des instructions pour permettre au processeur de :
stocker les données de sommet modifiées au niveau d'un nuanceur d'évaluation (204) dans le nuanceur de sommet.
 
19. Logique de programme d'ordinateur selon la revendication 18, dans laquelle les données et les instructions pour permettre au processeur de demander un sous-ensemble des données de sommet modifiées comprennent des données et des instructions pour permettre au processeur de :
demander le sous-ensemble des données de sommet modifiées au nuanceur d'évaluation (204).
 
20. Logique de programme d'ordinateur selon la revendication 14, dans laquelle des données et des instructions comprennent des données et des instructions de langage de description de matériel.
 




Drawing


























Cited references

REFERENCES CITED IN THE DESCRIPTION



This list of references cited by the applicant is for the reader's convenience only. It does not form part of the European patent document. Even though great care has been taken in compiling the references, errors or omissions cannot be excluded and the EPO disclaims all liability in this regard.

Patent documents cited in the description