Integer-based functionality in a graphics shading language
AssigneeNVIDIA Corporation
InventorsPatrick R. Brown, Barthold B. Lichtenbelt, Christopher T. Dodd
Life of this patent
Estimating the term…
Abstract
One embodiment of the present invention sets forth a technique for improving the flexibility and programmability of a graphics pipeline by adding application programming interface (API) extensions to the OpenGL Shading Language (GLSL) that provide native support for integer data types and operations. The integer API extensions span from the API to the hardware execution units within a graphics processing unit (GPU), thereby providing native integer support throughout the graphics pipeline.
Claims23
A method for processing integer data operations on a graphics processing unit, the method comprising:
- receiving a first shader program configured to be executed by a first shader unit in the graphics processing unit and a second shader program configured to be executed by a second shader unit in the graphics processing unit, wherein both the first shader program and the second shader program include instructions that are written in a high-level shading language and include integer data operations, and wherein the first shader unit and the second shader unit are configured to perform both integer data operations and floating point data operations;
- converting the high-level shading language instructions of the first shader program and the second shader program into assembly code, wherein variables requiring native integer processing are declared in the first shader program and the second shader program as integers in the high-level shading language for execution using only native integer data operations and not using floating point data operations;
- linking the assembly code instructions of the first shader program with the assembly code instructions of the second shader program, wherein a varying out variable written by the second shader program is linked to a fragment color reference number associated with a particular buffer and bindings of varying out variables can be queried using a command that returns a fragment color reference number to which a varying out variable specified as an input to the command was bound when the second shader program was last linked;
- converting the linked assembly code instructions of the first shader program and the second shader program into microcode instructions that can be executed on the graphics processing unit;
- and
- transmitting the microcode instructions of the first shader program to the first shader unit and the microcode instructions of the second shader program to the second shader unit, wherein the variables declared as integers are executed by the first shader unit and the second shader unit using only integer data operations and not using floating point data operations.
A non-transitory computer-readable storage medium including instructions that when executed by a processor cause a computing device having a graphics processing unit to process integer data operations by performing the steps of:
- receiving a first shader program configured to be executed by a first shader unit in the graphics processing unit and a second shader program configured to be executed by a second shader unit in the graphics processing unit, wherein both the first shader program and the second shader program include instructions that are written in a high-level shading language and include integer data operations, and wherein the first shader unit and the second shader unit are configured to perform both integer data operations and floating point data operations;
- converting the high-level shading language instructions of the first shader program and the second shader program into assembly code, wherein variables requiring native integer processing are declared in the first shader program and the second shader program as integers in the high-level shading language for execution using only native integer data operations and not using floating point data operations;
- linking the assembly code instructions of the first shader program with the assembly code instructions of the second shader program, wherein a varying out variable written by the second shader program is linked to a fragment color reference number associated with a particular buffer and the bindings of varying out variables are configured to be queried using a command that returns a fragment color reference number to which a varying out variable specified as an input to the command was bound when the second shader program was last linked;
- converting the linked assembly code instructions of the first shader program and the second shader program into microcode instructions that can be executed on the graphics processing unit;
- and
- transmitting the microcode instructions of the first shader program to the first shader unit and the microcode instructions of the second shader program to the second shader unit, wherein the variables declared as integers are executed by the first shader unit and the second shader unit using only integer data operations and not using floating point data operations.
A computing device configured to process integer data operations, the computing device comprising:
- a graphics processing unit that includes a first shader unit and a second shader unit;
- and
- a software driver configured to:
- receive a first shader program configured to be executed by the first shader unit in the graphics processing unit and a second shader program configured to be executed by the second shader unit in the graphics processing unit, wherein both the first shader program and the second shader program include instructions that are written in a high-level shading language and include integer data operations, and wherein the first shader unit and the second shader unit are configured to perform both integer data operations and floating point data operations,
- convert the high-level shading language instructions of the first shader program and the second shader program into assembly code, wherein variables requiring native integer processing are declared as integers in the first shader program and the second shader program in the high-level shading language for execution using only native integer data operations and not using floating point data operations,
- link the assembly code instructions of the first shader program with the assembly code instructions of the second shader program, wherein a varying out variable written by the second shader program is linked to a fragment color reference number associated with a particular buffer and the bindings of varying out variables are configured to be queried using a command that returns a fragment color reference number to which a varying out variable specified as an input to the command was bound when the second shader program was last linked,
- convert the linked assembly code instructions of the first shader program and the second shader program into microcode instructions that can be executed on the graphics processing unit, and
- transmit the microcode instructions of the first shader program to the first shader unit and the microcode instructions of the second shader program to the second shader unit, wherein the variables declared as integers are executed by the first shader unit and the second shader unit using only integer data operations and not using floating point data operations.
Dependencies are inferred from the claim text.