Multi-pass shading

Information

  • Patent Grant
  • 8289325
  • Patent Number
    8,289,325
  • Date Filed
    Tuesday, October 7, 2008
    17 years ago
  • Date Issued
    Tuesday, October 16, 2012
    13 years ago
Abstract
An application binary interface includes a descriptor specifying a binary shader for each pass of a multi-pass shader. The application binary interface also includes a graphics state of a graphics object for each pass of the multi-pass shader. The graphics state for the first pass is an initial graphics state of the graphics object. The graphics state for each subsequent pass specifies a change from the graphics state of a previous pass. The application binary interface further includes parameters for the binary shaders. The application binary interface links the binary shaders together based on the parameters. Further, the parameters of the binary shaders may be modified at run time to configure the multi-pass shader. The binary shader of each pass is then executed based on the graphics state and parameters of the pass to render the graphics object.
Description
BACKGROUND

1. Field of the Invention


The present invention relates generally to computer graphics. More particularly, the present invention relates to systems and methods of controlling precompiled computer programs in computer graphics systems.


2. Background Art


Prior art computer graphics systems typically execute an application program, such as a computer video game program, to generate graphics images for display on a computer screen. One type of prior art computer graphics system includes an on-line compiler. In this type of computing system, the computer graphics system compiles portions of the application program while executing other portions of the application program in real time. In this way, a first portion of the application program executing in the computer graphics system can provide run time parameters for compiling a second portion of the application program.


In some situations, a portion of the application program written specifically for graphics hardware in the computer graphics system can be simplified by using run time parameters during compilation. For instance, a first portion of the application program may include a loop construct having a loop count parameter, and the compiler can unroll the loop construct based on a value of the loop count parameter provided by a second portion of the application program at run time. Including a compiler in the computer graphics system, however, increases the cost and complexity of the graphics computer system.


Another type of prior art computer graphics system executes precompiled application programs. In this type of computer graphics system, an application program is compiled into binary programs by using an off-line compiler. The binary programs are then provided to the computer graphics system, which executes the binary programs. Precompiling the application program avoids the need for an on-line compiler but may complicate portions of the application program written specifically for graphics hardware in the computer graphics system. Specifically, these portions of the application program may require fixed parameters at compile time.


One type of program typically found in an application program written for a computer graphics system is a shader. A shader generates visual effects for graphics objects. In many computer graphics systems, the shader controls multiple texture units in the graphics hardware, each of which can access samples from a texture. Moreover, the shader generates colors for the graphics object based on the textures accessed from the texture units.


Some shaders require a greater number of textures for creating a visual effect than the number of texture units available in the graphics hardware of a computer graphics system. Consequently, some compilers cannot compile these application programs for these computer graphics systems. Other compilers generate a multi-pass shader by breaking up the task of creating a visual effect into passes such that each pass requires no more texture units than the number of texture units available in the computer graphics system. Each pass of the multi-pass shader performs an operation on a graphics to generate a result. In this way, a pass of the multi-pass shader may perform an operation based on a result generated in a previous pass.


In those types of computer graphics systems that compile programs on-line, an application program can modify parameters of a shader to configure the shader at run time, which may simplify the task of programming the shader. In contrast, those computer graphics systems that rely on an off-line compiler may need to fix some parameters of the shader at the time of compilation (i.e., compile time). Consequently, the shader (i.e., the precompiled shader) is not configurable at run time, which may complicate the task of programming the shader.


In light of the above, there exists a need to simplify the task of programming a multi-pass shader. Additionally, these exists a need for a precompiled multi-pass shader that is configurable at run time.


SUMMARY OF THE CLAIMED INVENTION

An application binary interface addresses the need for simplifying the task of programming a multi-pass shader. Further, the application binary interface addresses the need for a precompiled multi-pass shader that is configurable at run time. For each pass of a multi-pass shader, the application binary interface specifies a binary shader, one or more parameters for the binary shader, and a graphics state. The graphics state for a first pass specifies an initial graphics state of a graphics object, and the graphics state of each subsequent pass specifies a change from the graphics state of a previous pass. The parameters link the binary shaders together so that a binary shader of a given pass can use a result generated by a binary shader of a previous pass. The binary application interface simplifies the task of programming the multi-pass shader by specifying the binary shaders, parameters for the binary shaders, and graphics states for the multi-pass shader in a binary file.


In one embodiment of the presently disclosed invention, a method for rendering an image with a graphics processor driven by a multi-pass shader program including a predetermined set of default steps is disclosed. Through the method, the multi-pass shader program is pre-complied to generate binary execution code for execution by the graphics processor. A first parameter of the image is received. A first pass of the multi-pass shader program is executed utilizing the binary execution code and the first parameter to obtain a first data value. At least one default step corresponding to a second pass of the multi-pass shader program is modified based upon the first data value. A second pass of the multi-pass shader is executed utilizing the binary execution code including the at least one default step as modified based upon the first data value to obtain a second data value. An operation is performed on the first data value and the second data value to obtain image rendering data. The image is then rendered, a portion of the image based upon the image rendering data. The multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.


In a second embodiment a further method for rendering an image with a graphics processor driven by a multi-pass shader program including a predetermined set of default steps is provided. The method includes pre-compiling the multi-pass shader program to generate binary execution code for execution by the graphics processor, receiving a first parameter of the image, and executing a first pass of the multi-pass shader program utilizing the binary execution code and the first parameter to obtain a first data value. A second parameter of the image is received and at least one default step of a second pass of the multi-pass shader program is modified based upon the second parameter. A second pass of the multi-pass shader program is executed utilizing the binary execution code including the at least one default step as modified based upon the second parameter to obtain a second data value and an operation is performed on the first data value and the second data value to obtain image rendering data. The image is rendered, a portion of the image based upon the image rendering data. The multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.


In a third claimed embodiment, a graphics processor driven by a multi-pass shader program including a predetermined set of default steps is disclosed. The graphics processor is configured to receive a first parameter of the image, execute a first pass of the multi-pass shader program utilizing binary execution code pre-compiled by the multi-pass shader, and the first parameter to obtain a first data value. The processor is further configured to modify at least one default step of a second pass of the multi-pass shader program based upon the first data value and execute a second pass of the multi-pass shader program utilizing the binary execution code including the at least one default step as modified based upon the first data value to obtain a second data value. An image is rendered in response to execution of the graphics processor, a portion of the image based upon the image rendering data. The multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a block diagram of an exemplary computing environment, in accordance with one embodiment of the present invention;



FIG. 2 is a block diagram of the exemplary computing system of FIG. 1;



FIG. 3 is a block diagram of the exemplary computer graphics system of FIG. 1;



FIG. 4 is a block diagram of the exemplary graphics pipeline of FIG. 3;



FIG. 5 is a block diagram of the exemplary application program of FIG. 1;



FIG. 6 is a block diagram of the exemplary binary program of FIG. 1;



FIG. 7 is a flow chart for a method of generating an application binary interface, in accordance with one embodiment of the present invention; and



FIG. 8 is a flow chart for a method of rendering a graphic object by using an application binary interface, in accordance with one embodiment of the present invention.





DETAILED DESCRIPTION

According to one embodiment of the present invention, an application binary interface includes a descriptor for each pass of a multi-pass shader specifying a binary shader for the pass. The application binary interface also includes one or more parameters for the binary shader of each pass. Further, the application binary interface includes a graphics state of each pass. The graphics state of the first pass is an initial graphics state of a graphics object, and the graphics state of each subsequent pass specifies a change from the graphics state of a previous pass. The parameters link the binary shaders together such that a binary shader of a given pass can use a result generated by a binary shader of a previous pass. The binary shader of each pass is then executed based on the graphics state and the parameters of the pass to render the graphics object.



FIG. 1 depicts an exemplary computing environment 100 in accordance with one embodiment of the present invention. The exemplary computing environment 100 includes a computing system 105 and a computer graphics system 120. The exemplary computing system 105 includes a computer program 110, a compiler 115, and a binary program 125. In operation, the computing system 105 executes the compiler 115 on the computer program 110 to generate the binary program 125. The binary program 125 is then provided to the computer graphics system 120. The computer graphics system 120 executes the binary program 125 and renders graphics images based on the binary program 125.


In one embodiment, the computer program 110 is a video game program. In this embodiment, the computer graphics system 120 executes the binary program 125 to render graphics images for the video game program. In another embodiment, the computing system 105 includes the computer graphics system 120.



FIG. 2 depicts the exemplary computing system 105 of FIG. 1. The exemplary computing system 105 includes a computing processor 200, input-output (I/O) device(s) 215, and a memory system 220 coupled in communication with each other via a communication bus 205. The memory system 220 stores the computer program 110 and the compiler 115. The computing processor 200 executes the compiler 115 on the computer program 110 to generate the binary program 125 and provides the binary program to the I/O device(s) 215.


In one embodiment, the binary program 125 includes computer program code stored on a compact disc read-only memory (CD-ROM). In another embodiment, the binary program 125 includes computer program code stored on a digital versatile disc (DVD). In still another embodiment, the binary program 125 includes computer program code stored on a portable memory device, such as a flash memory device.



FIG. 3 depicts the exemplary computer graphics system 120 of FIG. 1. The exemplary computer graphics system 120 includes input-output (I/O) device(s) 305, a computing processor 300, a memory system 320, and a graphics processor 325 coupled in communication with each other via a communication bus 315. In this embodiment, the I/O device(s) 305 receives the binary program 125 and the computing processor 300 stores the binary program 125 into the memory system 320. The computing processor 300 and the graphics processor 325 then execute various portions of the binary program 125 stored in the memory system 320 to render graphics images, as is described more fully herein.



FIG. 4 is a block diagram of the exemplary graphics processor 325 of FIG. 3. In this embodiment, the graphics processor 325 includes a graphics pipeline 400. The graphics pipeline 400 includes a transform unit 405, a raster unit 410, a texture unit 415, and a frame buffer 420. The transform unit 405 executes a vertex program to transform a graphics object into graphics primitives defined by vertices, such as lines and triangles. The raster unit 410 transforms the graphics primitives into pixels and generates a value for each pixel. Optionally, the texture unit 415 accesses samples from one or more textures and provides data based on the samples to the raster unit 410. In turn, the raster unit 410 generates the value for each pixel based on the data received from the texture unit 415. The frame buffer 420 stores the value of each pixel in the graphics object. In one embodiment, the value of each pixel represents a color of the pixel. In a further embodiment, the frame buffer 420 stores the value of each pixel in a graphics image composed of multiple graphics objects.


In one embodiment, the graphics pipeline 400 includes a plurality of texture units 415, each of which can access one or more textures. In this embodiment, each texture unit 415 concurrently generates an intermediate value for each pixel based on the texture accessed by the texture unit 415, and the raster unit 410 combines the intermediate values of the pixel to generate the value of the pixel. In another embodiment, the value of the pixel represents a color of the pixel.



FIG. 5 depicts the exemplary computer program 110 of FIG. 1. The computer program 110 includes an application 500 (i.e., application program) and a shader 505 (i.e., a shader program). The shader 505 includes computing instructions for rendering a graphics object, and the application 500 includes instructions for invoking the shader 505 to render a graphics object. Further, the application 500 can include instructions for invoking multiple shaders 505 to render multiple graphics objects for a graphics image.



FIG. 6 depicts the exemplary binary program 125 of FIG. 1. The binary program 125 includes a binary application 600 (i.e., a binary application program), one or more binary shaders 605 (i.e., binary shader programs) and an application binary interface 610. In this embodiment, the application binary interface 610 includes a descriptor for specifying a binary shader, one or more parameters for the binary shader, and a graphics state for each pass of a multi-pass shader. The graphics state of the first pass is an initial graphics state for a graphics object. The graphics state of each subsequent pass specifies a change from the graphics state of the previous pass. The parameters link the binary shaders together so that the binary shader of a given pass can use a result generated by the binary shader of a previous pass. For example, an input parameter of the binary shader of the given pass can be an output parameter of the binary shader of the previous pass. In this way, the passes of the multi-pass shader can be executed to render the graphics object. In a further embodiment, the passes of the multi-pass shaders are arranged in serial form. In this embodiment, a subsequent pass of the multi-pass shaders follows a previous pass of the multi-pass shader.


In one embodiment, the compiler 115 (FIG. 1) compiles the shader 505 (FIG. 5) to generate an expression for rendering a graphics object. Subsequently, the compiler 115 identifies subexpressions in the expression such that each subexpression can be executed by the graphics processor 325 (FIG. 3) in a single pass. The compiler 115 then generates the binary shader 605, one or more parameters for the binary shader, and the graphic state for each subexpression. In this embodiment, the graphics states link the binary shaders 605 together so that the graphics processor 325 can execute the binary shaders 605 to render the graphics object. For example, a binary shader 605 can store data in a location (e.g., a texture unit or frame buffer) in the graphics processor 325 and a graphics state can specify that location. Another binary shader 605 can then determine the location of the data based on the graphics state.


In another embodiment, a graphics state can specify characteristics of the computer graphics system 120 (FIG. 3) or a graphics image. For example, the graphics state can specify a number of texture units available in the graphics processor 325. As another example, the graphics state can specify a pixel size of the graphics image. In still another example, the graphics state can specify a texture program to be executed by the graphics processor 325 on the graphics object.


According to an exemplary embodiment, the application 500 (FIG. 5) includes computing instructions for invoking a shader 505 via the application binary interface 610. In this embodiment, the computing instructions include one or more variables, each of which corresponds to a parameter in the application binary interface 610. Consequently, the binary application 600 can determine the value of a variable and bind the value of the variable to the corresponding parameter at run time. In this way, the binary application 600 configures a multi-pass shader at run time based on the value of the variable.


In another embodiment, the value of a variable is limited to a predetermined set of values in the application 500. In this embodiment, the compiler 115 generates a binary shader 605 for each value in the predetermined set by setting the parameter to the value. In this way, the parameter of each binary shader 605 is fixed at compile time. The binary application 600 then determines the value of the variable at run time to select the binary shader 605 identified by the value of the variable. In this way, the binary application 600 configures a multi-pass shader at run time based on the value of the variable.


A representation of a shader, a multi-pass shader, and an exemplary application binary interface 610 for the multi-pass shader is depicted in Table 1. As depicted in Table 1, the shader is represented by the expression “output=cosine (texture_lookup(x,y))” in which “x” and “y” are input parameters and “output” represents an output value of the shader. The first pass of the multi-pass shader is represented by the subexpression “tmp=texture_lookup(x, y)” and the second pass is represented by the subexpression “output=cosine(tmp).” In the first pass, “x” and “y” are input parameters and “tmp” represents an output value of the first pass. In the second pass, “tmp” is an input parameter and “output” represents an output value of the second pass.


As is also depicted in table 1, the application binary interface 610 specifies the first pass and the second pass of the multi-pass shader. For the first pass, a descriptor is represented by “texture_lookup”, which identifies a binary shader for the first pass. Further, input parameters for the binary shader of the first pass are represented by “x” and “y”, and an output parameter for the binary shader of the first pass is represented by “tmp”. The output parameter “tmp” represents an output value for the binary shader of the first pass. Further, in this embodiment, the output value for the binary shader of the first pass is a result for the first pass. Additionally, an initial graphics state for a graphics object is represented by “texture unit 1”, which specifies that a first texture unit will access a texture for the binary shader of the first pass.


For the second pass, a descriptor is represented by “cosine”, which represents a binary shader for the second pass. Further, an input parameter for the binary shader of the second pass is represented by “tmp”, which is the output parameter of the first pass. Accordingly, the input parameter “tmp” for the binary shader of the second pass represents the output value of the binary shader of the first pass. Additionally, a graphics state of the second pass is represented by “frame buffer”, which specifies that the result of the second pass will be stored in a frame buffer. In this way, the graphics state of the second pass specifies a change from the graphics state of the first pass. Further, the parameter “tmp” links the binary shader of the second pass to the binary shader of the first pass such that the result of the first pass is an input parameter for the binary shader of the second pass. The output parameter “output” represents an output value for the binary shader of the second pass. Further, in this embodiment, the output value for the binary shader of the second pass is a result for the second pass.









TABLE 1







Shader









output = cosine (texture_lookup (x, y))







multi-pass shader









first pass: tmp = texture_lookup (x, y)



second pass: output = cosine (tmp)







application binary interface










first pass:
descriptor = texture_lookup




input parameter(s) = x, y




output parameter(s) = tmp




graphics state = texture unit 1



second pass:
descriptor = cosine




input parameter(s) = tmp




output parameter(s) = output




graphics state = frame buffer











FIG. 7 depicts a flow chart for a method 700 of generating the application binary interface 610 (FIG. 6), in accordance with one embodiment of the present invention. In step 705, the compiler 115 (FIG. 1) compiles the shader 505 (FIG. 5) to generate a first binary shader 605 (FIG. 6) and a first graphics state for a first pass of a multi-pass shader. In one embodiment, the compiler 115 compiles the application 500 (FIG. 5) together with the shader 505 to generate the first binary shader 605. It is to be appreciated that step 705 is optional in the present invention.


In step 710, the compiler 115 compiles the shader 505 to generate the next binary shader 605 and the next graphics state for the next pass of a multi-pass shader. In one embodiment, the compiler 115 compiles the application 500 together with the shader 505 to generate the binary shader 605 and the graphics state for this next pass. It is to be appreciated that step 710 is optional in the present invention.


In another embodiment, the compiler 115 performs steps 705 and 710 concurrently to generate the binary shader 605 and the graphics state for each pass of the multi-pass shader. In a further embodiment, the compiler 115 also generates the binary application 600 (FIG. 6).


In step 715, the compiler 115 determines whether the multi-pass shader includes additional passes. If the multi-pass shader includes additional passes, the method returns to step 710, otherwise the method proceeds to step 720. It is to be appreciated that step 715 is optional in the present invention.


In step 720, the compiler 115 generates a descriptor and one or more parameters for the first pass of the multi-pass shader. The descriptor of the first pass specifies the first binary shader. In one embodiment, the compiler 115 binds at least one parameter of the first pass to the first binary shader 605 at compile time. In another embodiment, the binary application 600 (FIG. 6) binds at least one parameter of the first pass to the first binary shader 605 at run time. In still another embodiment, the compiler 115 binds some of the parameters of the first pass to the first binary shader 605 at compile time and the binary application 600 binds some of the parameters of the first pass to the first binary shader 605 at run time.


In step 725, the compiler 115 generates a descriptor and one or more parameters for the next pass of the multi-pass shader. The descriptor of this pass specifies the binary shader of this pass. In one embodiment, the compiler 115 binds at least one parameter of this pass to the binary shader 605 of this pass at compile time. In another embodiment, the binary application 600 binds at least one parameter of this pass to the binary shader 605 at run time. In still another embodiment, the compiler 115 binds some of the parameters of this pass to the binary shader at compile time and the binary application 600 binds some of the parameters of this pass to the binary shader at run time.


In step 730, the compiler 115 determines whether the multi-pass shader includes additional passes. If the multi-pass shader includes additional passes, the method returns to step 725, otherwise the method ends. It is to be appreciated the application binary interface 610 comprises the parameter(s) generated for each pass of the multi-pass shader.


In one embodiment, the compiler 115 can perform steps 720-730 concurrently to generate the parameters(s) for each pass of the multi-pass shader. In another embodiment of the present invention, the compiler 115 can perform steps 705-730 concurrently to generate the binary shader 605, the graphics state, and the parameter(s) for each pass of the multi-pass shader. In a further embodiment, the compiler can also generate the binary application 600. In still another embodiment, the compiler 115 can perform steps 705 and 720 concurrently. In yet another embodiment, the compiler can perform steps 710 and 725 concurrently.



FIG. 8 depicts a flow chart for a method 800 of rendering a graphics object by using the application binary interface 610 (FIG. 6), in accordance with one embodiment of the present invention. In step 805, the binary application 600 (FIG. 6) configures a multi-pass shader. In one embodiment, the binary application 600 modifies at least one parameter of the application binary interface 610 at run time (i.e. during execution of the binary application 600) to configure the multi-pass shader. In another embodiment, the binary application 600 configures the multi-pass shader by selecting an application binary interface 610 among multiple application binary interfaces 610 based on one or more parameters at run time. It is to be appreciated that step 805 is optional in the present invention.


In step 810, the binary application 600 identifies the binary shader 605 (FIG. 6) and the graphics state for a first pass of a multi-pass shader based on the application binary interface 610. In one embodiment, the descriptor of the first pass specifies the binary shader 605 of the first pass. In this embodiment, the binary application 600 identifies the binary shader 605 of the first pass based on the descriptor of the first pass. In another embodiment, the descriptor specifies a plurality of binary shaders 605. In this embodiment, the binary application 600 selects the binary shader 605 of the first pass from the plurality of binary shaders 605 at run time based on one or more parameters for the binary shader 605 of the first pass in the application binary interface 610.


In step 815, the graphics processor 325 executes the first pass of the multi-pass shader by executing the first binary shader 605 based on the first graphics state to generate a result for the first pass. In one embodiment, the result for the first pass is a value of each pixel in the graphics object. In a further embodiment, the graphics processor 325 (FIG. 3) includes multiple texture units, each of which can access a texture. In this further embodiment, the graphics processor 325 executes the first binary shader on the multiple texture units in the graphics processor 325 to generate the value for each pixel based on the textures accessed by the texture units.


In step 820, the binary application 600 identifies the binary shader 605 and the graphics state for the next pass of the multi-pass shader based on the application binary interface 610. In one embodiment, the descriptor of this pass specifies the binary shader 605 of the pass. In this embodiment, the binary application 600 identifies the binary shader 605 of this pass based on the descriptor of this pass. In another embodiment, the descriptor specifies a plurality of binary shaders 605. In this embodiment, the binary application 600 selects the binary shader 605 of this pass from the plurality of binary shaders 605 at run time based on one or more parameters for the binary shader 605 of this pass in the application binary interface 610. In a further embodiment, some or all of the parameters for the binary shader 605 of this pass may be a result of a previous pass.


In step 825, the graphics processor 325 executes this next pass of the multi-pass shader by executing the binary shader 605 based on the graphics state to generate a result for this pass. In one embodiment, the result for this pass is a value of each pixel in the graphics object. In a further embodiment, the graphics processor 325 includes multiple texture units, each of which can access a texture. In this further embodiment, the graphics processor 325 executes the binary shader on the multiple texture units in the graphics processor 325 to generate the value for each pixel based on the textures accessed by the texture units.


In another embodiment, the graphics processor 325 generates the value of each pixel based on the value of the pixel generated in a previous pass. In this embodiment, the graphics state of this pass specifies the texture unit storing the intermediate color of each pixel generated in the previous pass. Consequently, the binary shader 605 of the current pass can access the value of the pixel generated in the previous pass to generate the value of the pixel for this pass. In a further embodiment, the value of the pixel generated for the last pass of the multi-pass shader is a color of the pixel. In another further embodiment, the graphics processor 325 stores the value of each pixel for each pass into the frame buffer 420 (FIG. 4) and then combines the values of each pixel to generate a color for the pixel in the frame buffer 420.


In step 830, the binary application 600 determines whether the multi-pass shader includes an additional pass based on the application binary interface 610. If the multi-pass shader includes an additional pass, the method returns to step 820, otherwise the method ends.


The embodiments discussed herein are illustrative of the present invention. As these embodiments of the present invention are described with reference to illustrations, various modifications or adaptations of the methods and/or specific structures described may become apparent to those skilled in the art. All such modifications, adaptations, or variations that rely upon the teachings of the present invention, and through which these teachings have advanced the art, are considered to be within the spirit and scope of the present invention. Hence, these descriptions and drawings should not be considered in a limiting sense, as it is understood that the present invention is in no way limited to only the embodiments illustrated.

Claims
  • 1. A method for rendering an image with a graphics processor driven by a multi-pass shader program including a descriptor and an input parameter, the method comprising: pre-compiling, before run time, the multi-pass shader program to generate binary execution code for execution by the graphics processor by configuring a binary shader for each value in a predetermined set of values, wherein a variable of each binary shader is fixed at compile time to one of the predetermined values in the set;receiving a first parameter of the image, a value of the first parameter being limited to one of the values in the predetermined set of values in the multi-pass shader program;executing a first pass of the multi-pass shader program utilizing the binary execution code and the first parameter as the input parameter to obtain a first data value wherein the multi-pass shader program selects, at run-time, the binary shader comprising the binary execution code identified by the value of the first parameter in the first pass;binding, at run time, the first data value as the input parameter for a second pass of the multi-pass shader program;executing a second pass of the multi-pass shader program utilizing the binary execution code including the bound first data value to obtain a second data value;performing an operation on the first data value and the second data value to obtain image rendering data; andrendering the image, a portion of the image based upon the image rendering data, and wherein the multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.
  • 2. The method of claim 1, wherein the operation includes modifying the first data value and the second data value.
  • 3. The method of claim 1, wherein the first parameter of the image indicates the color to be applied to the portion of the image.
  • 4. The method of claim 1, wherein the first parameter of the image indicates corresponds to a specified position of the light source.
  • 5. The method of claim 1, further comprising: executing a texture mapping operation;applying the results of the texture mapping operation to an object in the rendered image.
  • 6. The method of claim 1, wherein rendering the image occurs without the use of a texture mapping operation.
  • 7. A method for rendering an image with a graphics processor driven by a multi-pass shader program including a descriptor and an input parameter, the method comprising: pre-compiling, before run time, the multi-pass shader program to generate binary execution code for execution by the graphics processor by configuring a binary shader for each value in a predetermined set of values, wherein a variable of each binary shader is fixed at compile time to one of the predetermined values in the set;receiving a first parameter of the image, a value of the first parameter being limited to one of the values in the predetermined set of values in the multi-pass shader program;executing a first pass of the multi-pass shader program utilizing the binary execution code and the first parameter as the input parameter to obtain a first data value wherein the multi-pass shader program selects, at run-time, the binary shader comprising the binary execution code identified by the value of the first parameter in the first pass;receiving a second parameter of the image;binding, at run time, the first data value as the input parameter for a second pass of the multi-pass shader program;executing a second pass of the multi-pass shader program utilizing the binary execution code including both the second parameter and the bound first data value to obtain a second data value;performing an operation on the first data value and the second data value to obtain image rendering data; andrendering the image, a portion of the image based upon the image rendering data, and wherein the multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.
  • 8. The method of claim 7, wherein the operation includes modifying the first data value and the second data value.
  • 9. The method of claim 7, wherein the first parameter indicates that a portion of the image is to be treated as if it is illuminated by a first light source at a first specified position and the second parameter indicates that the portion of the image is to be treated as if it is illuminated simultaneously by a second light source at a second specified position.
  • 10. The method of claim 9, wherein the image rendering data results in the portion of the image being rendered as if it were illuminated by a first light source located at the first specified position and by a second light source at the second specified position.
  • 11. The method of claim 7, further comprising: executing a texture mapping operation;applying the results of the texture mapping operation to an object in the rendered image.
  • 12. The method of claim 7, wherein rendering the image occurs without the use of a texture mapping operation.
  • 13. A graphics processor driven by a multi-pass shader program including a descriptor and an input parameter, the graphics processor configured to: pre-compile, before run time, the multi-pass shader program to generate binary execution code for execution by the graphics processor by configuring a binary shader for each value in a predetermined set of values, wherein a variable of each binary shader is fixed at compile time to one of the predetermined values in the set;receive a first parameter of the image, a value of the first parameter being limited to one of the values in the predetermined set of values in the multi-pass shader program;execute a first pass of the multi-pass shader program utilizing binary execution code pre-compiled by the multi-pass shader, before run time, and further utilizing the first parameter as the input parameter to obtain a first data value wherein the multi-pass shader program selects, at run-time, the binary shader comprising the binary execution code identified by the value of the first parameter in the first pass;bind, at run time, the first data value as the input parameter for a second pass of the multi-pass shader program; andexecute a second pass of the multi-pass shader program utilizing the binary execution code including the bound first data value to obtain a second data value, wherein an image is rendered in response to execution of the graphics processor, a portion of the image based upon the image rendering data, and wherein the multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.
  • 14. A method for rendering an image with a graphics processor driven by a multi-pass shader program including a descriptor and an input parameter, the method comprising: pre-compiling, before run time, the multi-pass shader program to generate binary execution code for execution by the graphics processor by configuring a binary shader for each value in a predetermined set of values, wherein a variable of each binary shader is fixed at compile time to one of the predetermined values in the set, wherein binary execution code is identified by the descriptor;receiving a first parameter of the image, a value of the first parameter being limited to one of the values in the predetermined set of values in the multi-pass shader program;executing a first pass of the multi-pass shader program utilizing the binary execution code and the first parameter as the input parameter to obtain a first data value wherein the multi-pass shader program selects, at run-time, the binary shader comprising the binary execution code identified by the value of the first parameter in the first pass;binding, at run time, the first data value as the descriptor for a second pass of the multi-pass shader program;executing a second pass of the multi-pass shader program utilizing the binary execution code including the bound first data value to obtain a second data value;performing an operation on the first data value and the second data value to obtain image rendering data; andrendering the image, a portion of the image based upon the image rendering data, and wherein the multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.
  • 15. A computer implemented memory having embodied thereon a program, the program being executable by a processor to perform a method for rendering an image, the method comprising: pre-compiling, before run time, a multi-pass shader program including a descriptor and an input parameter to generate binary execution code for execution by the processor by configuring a binary shader for each value in a predetermined set of values, wherein a variable of each binary shader is fixed at compile time to one of the predetermined values in the set;receiving a first parameter of the image, a value of the first parameter being limited to one of the values in the predetermined set of values in the multi-pass shader program;executing a first pass of the multi-pass shader program utilizing the binary execution code and the first parameter as an input parameter to obtain a first data value wherein the multi-pass shader program selects, at run-time, the binary shader comprising the binary execution code identified by the value of the first parameter in the first pass;binding, at run time, the first data value as the input parameter for a second pass of the multi-pass shader program;executing a second pass of the multi-pass shader program utilizing the binary execution code including the bound first data value to obtain a second data value;performing an operation on the first data value and the second data value to obtain image rendering data; andrendering the image, a portion of the image based upon the image rendering data, and wherein the multi-pass shader program effectuates a photorealistic effect in the portion of the image through the alteration of a color based on the angle and distance of an object with respect to a light source in the portion of the image.
CROSS-REFERENCE TO RELATED APPLICATION

The present application is a continuation and claims the priority benefit of U.S. patent application Ser. No. 10/959,695 entitled “Application Binary Interface for Multi-Pass Shaders” filed Oct. 6, 2004, the disclosure of which is incorporated herein by reference.

US Referenced Citations (388)
Number Name Date Kind
3147341 Gibson Sep 1964 A
3200193 Eiggs Aug 1965 A
3717345 Banville Feb 1973 A
3943277 Everly et al. Mar 1976 A
4051520 Davidse et al. Sep 1977 A
4068847 Lukkarila et al. Jan 1978 A
4090216 Constable May 1978 A
4116444 Mayer et al. Sep 1978 A
4133004 Fitts Jan 1979 A
4241341 Thorson Dec 1980 A
4321635 Tsuyuguchi Mar 1982 A
4355334 Fitzgibbon et al. Oct 1982 A
4361850 Nishimura Nov 1982 A
4448200 Brooks et al. May 1984 A
4514727 Van Antwerp Apr 1985 A
4533937 Yamamoto et al. Aug 1985 A
4646075 Andrews et al. Feb 1987 A
4649504 Krouglicof et al. Mar 1987 A
4658247 Gharachorloo Apr 1987 A
4672564 Egli et al. Jun 1987 A
4675562 Herlein et al. Jun 1987 A
4677569 Nakano et al. Jun 1987 A
4683466 Holtey et al. Jul 1987 A
4685054 Manninen et al. Aug 1987 A
4685146 Fenster et al. Aug 1987 A
4709231 Sakaibara et al. Nov 1987 A
4727365 Bunker et al. Feb 1988 A
4737921 Goldwasser et al. Apr 1988 A
4757525 Matthews et al. Jul 1988 A
4807158 Blanton et al. Feb 1989 A
4817005 Kubota et al. Mar 1989 A
4843568 Krueger et al. Jun 1989 A
4860197 Langendorf et al. Aug 1989 A
4864515 Deck Sep 1989 A
4866637 Gonzalez-Lopez et al. Sep 1989 A
4901064 Deering Feb 1990 A
4905147 Logg Feb 1990 A
4905168 McCarthy et al. Feb 1990 A
4933864 Evans, Jr. et al. Jun 1990 A
4934908 Turrell et al. Jun 1990 A
4942538 Yuan et al. Jul 1990 A
4943938 Aoshima et al. Jul 1990 A
4952917 Yabuuchi Aug 1990 A
4956794 Zeevi et al. Sep 1990 A
4962540 Tsujiuchi et al. Oct 1990 A
4969036 Bhanu et al. Nov 1990 A
4980823 Liu Dec 1990 A
5014327 Potter et al. May 1991 A
5034986 Karmann et al. Jul 1991 A
5045843 Hansen Sep 1991 A
5057744 Barbier et al. Oct 1991 A
5064291 Reiser Nov 1991 A
5067014 Bergen et al. Nov 1991 A
5128671 Thomas, Jr. Jul 1992 A
5128794 Mocker et al. Jul 1992 A
5162781 Cambridge Nov 1992 A
5194941 Grimaldi et al. Mar 1993 A
5208763 Hong et al. May 1993 A
5212888 Cary et al. May 1993 A
5222203 Obata Jun 1993 A
5227985 DeMenthon Jul 1993 A
5230623 Guthrie et al. Jul 1993 A
5253339 Wells Oct 1993 A
5265888 Yamamoto et al. Nov 1993 A
5268996 Steiner et al. Dec 1993 A
5269687 Mott et al. Dec 1993 A
5274560 LaRue Dec 1993 A
5297061 Dementhon et al. Mar 1994 A
5305389 Palmer Apr 1994 A
5307137 Jones et al. Apr 1994 A
5335557 Yasutake Aug 1994 A
5351090 Nakamura Sep 1994 A
5354202 Moncrief et al. Oct 1994 A
5361147 Katayama et al. Nov 1994 A
5363120 Drumm Nov 1994 A
5366376 Copperman et al. Nov 1994 A
5367615 Economy et al. Nov 1994 A
5369737 Gholizadeh et al. Nov 1994 A
5387943 Silver Feb 1995 A
5446714 Yoshio et al. Aug 1995 A
5446798 Morita et al. Aug 1995 A
5448687 Hoogerhyde et al. Sep 1995 A
5450504 Calia Sep 1995 A
5469193 Giobbi et al. Nov 1995 A
5473736 Young Dec 1995 A
5526041 Glatt Jun 1996 A
5534917 MacDougall Jul 1996 A
5537638 Morita et al. Jul 1996 A
5548667 Tu Aug 1996 A
5550960 Shirman et al. Aug 1996 A
5555532 Sacha Sep 1996 A
5557684 Wang et al. Sep 1996 A
5559950 Cannon Sep 1996 A
5563989 Billyard Oct 1996 A
5572261 Cooper Nov 1996 A
5574836 Broemmelsiek Nov 1996 A
5577179 Blank Nov 1996 A
5577913 Moncrief et al. Nov 1996 A
5586231 Florent et al. Dec 1996 A
5590248 Zarge et al. Dec 1996 A
5598297 Yamanaka et al. Jan 1997 A
5611000 Szeliski et al. Mar 1997 A
5616078 Oh Apr 1997 A
5617407 Bareis Apr 1997 A
5630033 Purcell et al. May 1997 A
5631697 Nishimura et al. May 1997 A
5647019 Iino et al. Jul 1997 A
5649032 Burt et al. Jul 1997 A
5659671 Tannenbaum et al. Aug 1997 A
5660547 Copperman Aug 1997 A
5668646 Katayama et al. Sep 1997 A
5672820 Rossi et al. Sep 1997 A
5673374 Sakaibara et al. Sep 1997 A
5680487 Markandey Oct 1997 A
5684887 Lee et al. Nov 1997 A
5699497 Erdahl et al. Dec 1997 A
5704024 Voorhies et al. Dec 1997 A
5717148 Ely et al. Feb 1998 A
5717848 Watanabe et al. Feb 1998 A
5734384 Yanof et al. Mar 1998 A
5748865 Yamamoto et al. May 1998 A
5748867 Cosman et al. May 1998 A
5751928 Bakalash May 1998 A
5756354 Tzidon et al. May 1998 A
5757360 Nitta et al. May 1998 A
5760781 Kaufman et al. Jun 1998 A
5761401 Kobayashi et al. Jun 1998 A
5764803 Jacquin et al. Jun 1998 A
5769718 Rieder Jun 1998 A
5774124 Itoh et al. Jun 1998 A
5781194 Ponomarev et al. Jul 1998 A
5786801 Ichise Jul 1998 A
5793376 Tanaka et al. Aug 1998 A
5798519 Vock et al. Aug 1998 A
5805170 Burch Sep 1998 A
5805745 Graf Sep 1998 A
5805782 Foran Sep 1998 A
5808617 Kenworthy et al. Sep 1998 A
5808619 Choi et al. Sep 1998 A
5812136 Keondjian Sep 1998 A
5812141 Kamen et al. Sep 1998 A
5818424 Korth Oct 1998 A
5818553 Koenck et al. Oct 1998 A
5825308 Rosenberg Oct 1998 A
5831623 Negishi et al. Nov 1998 A
5852443 Kenworthy Dec 1998 A
5854632 Steiner Dec 1998 A
5856844 Batterman et al. Jan 1999 A
5864342 Kajiya et al. Jan 1999 A
5864742 Gasper et al. Jan 1999 A
5870097 Snyder et al. Feb 1999 A
5870098 Gardiner Feb 1999 A
5880736 Peercy et al. Mar 1999 A
5880856 Ferriere Mar 1999 A
5889505 Toyama et al. Mar 1999 A
5890122 Van Kleeck et al. Mar 1999 A
5894308 Isaacs Apr 1999 A
5899810 Smith May 1999 A
5903318 Demay et al. May 1999 A
5905894 De Bonet May 1999 A
5912830 Krech, Jr. et al. Jun 1999 A
5913727 Ahdoot Jun 1999 A
5914724 Deering et al. Jun 1999 A
5915972 Tada Jun 1999 A
5917937 Szeliski et al. Jun 1999 A
5922318 Bandman et al. Jul 1999 A
5923381 Demay et al. Jul 1999 A
5929860 Hoppe Jul 1999 A
5933150 Ngo et al. Aug 1999 A
5933535 Lee et al. Aug 1999 A
5935198 Blomgren Aug 1999 A
5949424 Cabral et al. Sep 1999 A
5953485 Abecassis Sep 1999 A
5959673 Lee et al. Sep 1999 A
5963209 Hoppe Oct 1999 A
5966133 Hoppe Oct 1999 A
5977977 Kajiya et al. Nov 1999 A
5982352 Pryor Nov 1999 A
5982390 Stoneking et al. Nov 1999 A
5986668 Szeliski et al. Nov 1999 A
5987164 Szeliski et al. Nov 1999 A
5990901 Lawton et al. Nov 1999 A
6002738 Cabral et al. Dec 1999 A
6009188 Cohen et al. Dec 1999 A
6009190 Szeliski et al. Dec 1999 A
6010403 Adam et al. Jan 2000 A
6016150 Lengyel et al. Jan 2000 A
6018347 Willis Jan 2000 A
6018349 Szeliski et al. Jan 2000 A
6023523 Cohen et al. Feb 2000 A
6026182 Lee et al. Feb 2000 A
6031934 Ahmad et al. Feb 2000 A
6034691 Aono et al. Mar 2000 A
6034692 Gallery et al. Mar 2000 A
6034693 Kobayashi et al. Mar 2000 A
6035067 Ponticos Mar 2000 A
6037947 Nelson et al. Mar 2000 A
6040842 Wavish et al. Mar 2000 A
6044181 Szeliski et al. Mar 2000 A
6046744 Hoppe Apr 2000 A
6049619 Anandan et al. Apr 2000 A
6049636 Yang Apr 2000 A
6058397 Barrus et al. May 2000 A
6072494 Nguyen Jun 2000 A
6072504 Segen Jun 2000 A
6081274 Shiraishi Jun 2000 A
6100898 Malamy et al. Aug 2000 A
6101289 Kellner Aug 2000 A
6121953 Walker Sep 2000 A
6130673 Pulli et al. Oct 2000 A
6137492 Hoppe Oct 2000 A
6141013 Nelson et al. Oct 2000 A
6141041 Carlbom et al. Oct 2000 A
6155924 Nakagawa et al. Dec 2000 A
6157386 Wilde Dec 2000 A
6162123 Woolston Dec 2000 A
6172354 Adan et al. Jan 2001 B1
6175367 Parikh et al. Jan 2001 B1
6181384 Kurashige et al. Jan 2001 B1
6181988 Schneider et al. Jan 2001 B1
6200138 Ando et al. Mar 2001 B1
6201581 Moriwake et al. Mar 2001 B1
6203426 Matsui et al. Mar 2001 B1
6208347 Migdal et al. Mar 2001 B1
6220962 Miyamoto et al. Apr 2001 B1
6222555 Christofferson et al. Apr 2001 B1
6229553 Duluk, Jr. et al. May 2001 B1
6233291 Shukhman et al. May 2001 B1
6252608 Snyder et al. Jun 2001 B1
6268875 Duluk, Jr. et al. Jul 2001 B1
6273814 Komoto Aug 2001 B1
6288730 Duluk, Jr. et al. Sep 2001 B1
6313841 Ogata et al. Nov 2001 B1
6313842 Tampieri Nov 2001 B1
6319129 Igarashi et al. Nov 2001 B1
6320580 Yasui et al. Nov 2001 B1
6330000 Fenney et al. Dec 2001 B1
6331851 Suzuki et al. Dec 2001 B1
6342885 Knittel et al. Jan 2002 B1
6348921 Zhao et al. Feb 2002 B1
6353272 van der Hoeven Mar 2002 B1
6356263 Migdal et al. Mar 2002 B2
6356288 Freeman et al. Mar 2002 B1
6361438 Morihira Mar 2002 B1
6366272 Rosenberg et al. Apr 2002 B1
6392647 Migdal et al. May 2002 B1
6396490 Gorman May 2002 B1
6400842 Fukuda Jun 2002 B2
6411298 Goto et al. Jun 2002 B1
6414960 Kuhn et al. Jul 2002 B1
6417836 Kumar et al. Jul 2002 B1
6421057 Lauer et al. Jul 2002 B1
6426720 Ross et al. Jul 2002 B1
6426755 Deering Jul 2002 B1
6456977 Wang Sep 2002 B1
6476807 Duluk, Jr. et al. Nov 2002 B1
6488505 Hightower Dec 2002 B1
6489955 Newhall, Jr. Dec 2002 B1
6496189 Yaron et al. Dec 2002 B1
6496598 Harman Dec 2002 B1
6504538 Freund et al. Jan 2003 B1
6529206 Ohki et al. Mar 2003 B1
6529875 Nakajima et al. Mar 2003 B1
6538666 Ozawa et al. Mar 2003 B1
6545663 Arbter et al. Apr 2003 B1
6554707 Sinclair et al. Apr 2003 B1
6563499 Waupotitsch et al. May 2003 B1
6571208 Kuhn et al. May 2003 B1
6572475 Okabe et al. Jun 2003 B1
6573890 Lengyel Jun 2003 B1
6577312 Deering et al. Jun 2003 B2
6578197 Peercy et al. Jun 2003 B1
6585599 Horigami et al. Jul 2003 B1
6594388 Gindele et al. Jul 2003 B1
6597363 Duluk, Jr. et al. Jul 2003 B1
6611265 Hong et al. Aug 2003 B1
6639594 Zhang et al. Oct 2003 B2
6646639 Greene et al. Nov 2003 B1
6646640 Nagy Nov 2003 B2
6650329 Koike Nov 2003 B1
6652376 Yoshida et al. Nov 2003 B1
6664955 Deering Dec 2003 B1
6664959 Duluk, Jr. et al. Dec 2003 B2
6680746 Kawai et al. Jan 2004 B2
6686924 Mang et al. Feb 2004 B1
6714236 Wada et al. Mar 2004 B1
6717576 Duluk, Jr. et al. Apr 2004 B1
6717579 Deslandes et al. Apr 2004 B1
6717599 Olano Apr 2004 B1
6720949 Pryor et al. Apr 2004 B1
6738059 Yoshinaga et al. May 2004 B1
6744442 Chan et al. Jun 2004 B1
6750867 Gibson Jun 2004 B1
6755654 Hightower Jun 2004 B2
6764403 Gavin Jul 2004 B2
6771264 Duluk et al. Aug 2004 B1
6771813 Katsuyama Aug 2004 B1
6778181 Kilgariff et al. Aug 2004 B1
6781594 Day Aug 2004 B2
6795068 Marks Sep 2004 B1
6798411 Gorman et al. Sep 2004 B1
6803910 Pfister et al. Oct 2004 B2
6803964 Post et al. Oct 2004 B1
6807296 Mishima Oct 2004 B2
6825851 Leather Nov 2004 B1
6850236 Deering Feb 2005 B2
6850243 Kilgariff et al. Feb 2005 B1
6853382 Van Dyke et al. Feb 2005 B1
6854632 Larsson Feb 2005 B1
6864895 Tidwell et al. Mar 2005 B1
6903738 Pfister et al. Jun 2005 B2
6912010 Baker et al. Jun 2005 B2
6917692 Murching et al. Jul 2005 B1
6928433 Goodman et al. Aug 2005 B2
6956871 Wang et al. Oct 2005 B2
6962527 Baba Nov 2005 B2
6995788 James Feb 2006 B2
7006101 Brown et al. Feb 2006 B1
7072792 Freifeld Jul 2006 B2
7079138 Day Jul 2006 B2
7081893 Cerny Jul 2006 B2
7085722 Luisi Aug 2006 B2
7101284 Kake et al. Sep 2006 B2
7113193 Marks Sep 2006 B2
7162314 Fay et al. Jan 2007 B2
7180529 Covannon et al. Feb 2007 B2
7214133 Jen et al. May 2007 B2
7233904 Luisi Jun 2007 B2
7251315 Quinton Jul 2007 B1
7293235 Powers et al. Nov 2007 B1
7304667 Watanabe et al. Dec 2007 B2
7333150 Cooper Feb 2008 B2
7339589 Annunziata Mar 2008 B2
7589723 Wang et al. Sep 2009 B2
7636126 Mallinson Dec 2009 B2
7777746 Annunziata Aug 2010 B2
7877262 Luisi Jan 2011 B2
7880746 Marks et al. Feb 2011 B2
7920209 Mallinson Apr 2011 B2
20010048434 Brown Dec 2001 A1
20020018063 Donovan et al. Feb 2002 A1
20020041335 Taraci et al. Apr 2002 A1
20020047937 Wells Apr 2002 A1
20020068626 Takeda et al. Jun 2002 A1
20020080136 Kouadio Jun 2002 A1
20020107070 Nagy Aug 2002 A1
20020130866 Stuttard Sep 2002 A1
20020140703 Baker et al. Oct 2002 A1
20020162081 Solomon Oct 2002 A1
20020167518 Migdal et al. Nov 2002 A1
20030009748 Glanville et al. Jan 2003 A1
20030043163 Day Mar 2003 A1
20030058238 Doak et al. Mar 2003 A1
20030112238 Cerny et al. Jun 2003 A1
20030117391 Olano Jun 2003 A1
20030142232 Albean Jul 2003 A1
20030179220 Dietrich et al. Sep 2003 A1
20040003370 Schenk et al. Jan 2004 A1
20040051716 Sevigny Mar 2004 A1
20040056860 Collodi Mar 2004 A1
20040100582 Stanger May 2004 A1
20040130550 Blanco et al. Jul 2004 A1
20040130552 Duluk et al. Jul 2004 A1
20040263636 Cutler et al. Dec 2004 A1
20040268413 Reid et al. Dec 2004 A1
20050001836 Day Jan 2005 A1
20050019020 Sato et al. Jan 2005 A1
20050024379 Marks Feb 2005 A1
20050078116 Sloan et al. Apr 2005 A1
20050090312 Campbell Apr 2005 A1
20050243094 Patel et al. Nov 2005 A1
20050253965 Cooper Nov 2005 A1
20060015348 Cooper et al. Jan 2006 A1
20060039017 Park et al. Feb 2006 A1
20060071933 Green et al. Apr 2006 A1
20060209210 Swan et al. Sep 2006 A1
20060290810 Mallinson Dec 2006 A1
20070106760 Houh et al. May 2007 A1
20070257928 Marks et al. Nov 2007 A1
20070279427 Marks Dec 2007 A1
20080070655 Tanabe Mar 2008 A1
20080268956 Suzuki Oct 2008 A1
20090193453 Cansler et al. Jul 2009 A1
20100029387 Luisi Feb 2010 A1
20100053430 Mallinson Mar 2010 A1
20110181776 Mallinson Jul 2011 A1
20110205240 Marks et al. Aug 2011 A1
20110249072 Marks Oct 2011 A1
Foreign Referenced Citations (46)
Number Date Country
1201180 Dec 1998 CN
19905076 May 2000 DE
448411 Sep 1991 EP
615386 Sep 1994 EP
789296 Aug 1997 EP
850673 Jul 1998 EP
1029569 Aug 2000 EP
1630754 Mar 2006 EP
1650706 Apr 2006 EP
2351637 Jan 2001 GB
2411065 Aug 2005 GB
59-002040 Jan 1984 JP
59-202779 Nov 1984 JP
61-131110 Jun 1986 JP
H527779 Apr 1993 JP
6266854 Sep 1994 JP
7-160412 Jun 1995 JP
2007271999 Oct 1995 JP
2007334664 Dec 1995 JP
9265379 Oct 1997 JP
10055454 Feb 1998 JP
11070273 Mar 1999 JP
2000137828 May 2000 JP
2000311251 Jul 2000 JP
2000218036 Aug 2000 JP
2000233072 Aug 2000 JP
2000237453 Sep 2000 JP
200338993 Dec 2000 JP
2001029649 Feb 2001 JP
3244798 Oct 2001 JP
2002159749 Jun 2002 JP
2001079263 Mar 2003 JP
2008165784 Jul 2008 JP
4616330 Oct 2010 JP
20000072753 Dec 2000 KR
9418790 Aug 1994 WO
9802223 Jan 1998 WO
9853443 Nov 1998 WO
0010130 Feb 2000 WO
0129768 Apr 2001 WO
0182626 Nov 2001 WO
2005040900 May 2005 WO
2006033360 Mar 2006 WO
2008018943 Feb 2008 WO
2008058271 May 2008 WO
2008058271 Aug 2008 WO
Related Publications (1)
Number Date Country
20090040222 A1 Feb 2009 US
Continuations (1)
Number Date Country
Parent 10959695 Oct 2004 US
Child 12287317 US