Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Specification
The title of the invention is not descriptive. A new title is required that is clearly indicative of the invention to which the claims are directed. The examiner suggests the following title:
GRAPHICS PROCESSORS AND GRAPHICS PROCESSING METHOD FOR ACHIEVING INCREASED HIDDEN SURFACE REMOVAL EFFICIENCY.
Claim Objections
Claim 1-20 are objected to because of the following informalities:. Appropriate correction is required.
In particular, independent claims 1 and 11 each recites “at least some primitives that were processed by the first, pre-pass operation”. The phrase "at least some" is broad and may lack sufficient boundaries. It does not clearly define which primitives are selected for the second, main pass or how that selection is made, potentially leaving the "metes and bounds" of the claim unclear.
Additionally, these claims also repeatedly recite “may need to subsequently be processed”. Terms of possibility like "may" can be seen as indefinite because they do not positively recite a required step or structural limitation. This makes it difficult to determine whether a method that always processes the primitives would still infringe, or if the "possibility" is a required conditional state of the method.
Double Patenting
The nonstatutory double patenting rejection is based on a judicially created doctrine grounded in public policy (a policy reflected in the statute) so as to prevent the unjustified or improper timewise extension of the “right to exclude” granted by a patent and to prevent possible harassment by multiple assignees. A nonstatutory double patenting rejection is appropriate where the claims at issue are not identical, but at least one examined application claim is not patentably distinct from the reference claim(s) because the examined application claim is either anticipated by, or would have been obvious over, the reference claim(s). See, e.g., In re Berg, 140 F.3d 1428, 46 USPQ2d 1226 (Fed. Cir. 1998); In re Goodman, 11 F.3d 1046, 29 USPQ2d 2010 (Fed. Cir. 1993); In re Longi, 759 F.2d 887, 225 USPQ 645 (Fed. Cir. 1985); In re Van Ornum, 686 F.2d 937, 214 USPQ 761 (CCPA 1982); In re Vogel, 422 F.2d 438, 164 USPQ 619 (CCPA 1970); and In re Thorington, 418 F.2d 528, 163 USPQ 644 (CCPA 1969).
A timely filed terminal disclaimer in compliance with 37 CFR 1.321(c) or 1.321(d) may be used to overcome an actual or provisional rejection based on a nonstatutory double patenting ground provided the reference application or patent either is shown to be commonly owned with this application, or claims an invention made as a result of activities undertaken within the scope of a joint research agreement. A terminal disclaimer must be signed in compliance with 37 CFR 1.321(b).
The USPTO internet Web site contains terminal disclaimer forms which may be used. Please visit http://www.uspto.gov/forms/. The filing date of the application will determine what form should be used. A web-based eTerminal Disclaimer may be filled out completely online using web-screens. An eTerminal Disclaimer that meets all requirements is auto-processed and approved immediately upon submission. For more information about eTerminal Disclaimers, refer to http://www.uspto.gov/patents/process/file/efs/guidance/eTD-info-I.jsp.
Claims 1 and 11 of the present application are rejected on the ground of nonstatutory double patenting as being unpatentable over claims 1 and 8 of the US Patent 12,322,023 (“Patent ‘023” hereinafter), in view of Jeong et al. (Pub. No. US 2016/0125649).
The following table shows in detail the correspondence between claim 1 of the present application and claim 1 of the above US Patent. The mapping for other claims is also shown, but in less details for brevity purposes.
Present Application
Patent ‘023
1. A method of operating a graphics processor to generate a render output in which, for the purposes of generating a render output, the render output is divided into a plurality of patches, the method comprising: for a sequence of primitives to be rendered for a render output:
performing a first, pre-pass operation in which primitives in the sequence of primitives to be rendered are processed into respective sets of one or more fragments, each fragment associated with a respective set of one or more sampling positions within the render output, and wherein as part of the first, pre-pass operation fragments for primitives in the sequence of primitives are processed to determine visibility information for the sequence of primitives; and identifying for respective patches of the render output, each patch encompassing a respective group of plural sampling positions within the render output, respective ranges of primitives within the sequence of primitives that may need to subsequently be processed further for the sampling positions covered by the patch to which the identified range of primitives relates, wherein the respective ranges of primitives within the sequence of primitives that may need to subsequently be processed further for the sampling positions covered by the respective patches are identified based on the determined visibility information for the sequence of primitives; the method further comprising:
thereafter performing a second, main pass operation in which visibility testing is performed to determine which primitives in the sequence of primitives should be further processed for which sampling positions within the render output, wherein for the purposes of visibility testing at least some primitives that were processed by the first, pre-pass operation are processed into respective groups of fragments, each group of fragments corresponding to a respective patch of the render output, and wherein the visibility testing for a group of fragments uses the identified range of primitives within the sequence of primitives that may subsequently need to be processed further for the respective patch corresponding to the group of fragments being tested to determine whether or not the group of fragments should be further processed.
1. A method of compiling a fragment shader for a graphics processor to generate a render output, the graphics processor including an execution unit that is operable to execute fragment shaders to process fragments to generate fragment shaded data for the render output, wherein a fragment shader may in addition to generating the fragment shaded data include one or more fragment shader side effects, wherein the graphics processor is configured to: render primitives in a sequence of primitives for a render output by: performing a first, pre-pass operation in which primitives in the sequence of primitives are processed into respective sets of one or more fragments, each fragment associated with a respective set of one or more sampling positions within the render output, and the resulting fragments are processed to determine visibility information for the sequence of primitives, wherein the first, pre-pass operation is operable to execute a first fragment shader routine for a fragment, if required, to determine the visibility information for the sequence of primitives; and
thereafter performing a second, main pass operation in which primitives that were processed by the first, pre-pass operation are processed again into their respective sets of one or more fragments for processing for respective sampling positions within the render output, wherein the fragment processing during the second, main pass is controlled based on the determined visibility information, and wherein for fragments that the visibility information indicates should be processed further to generate rendered output data, a second fragment shader routine is executed to generate the rendered output data for the sampling position or positions to which the fragments relate; the method comprising: including in a fragment shader for execution by the execution unit of the graphics processor a sequence of instructions that when executed by the first fragment shader routine and/or by the second fragment shader routine controls the execution of one or more fragment shader side effects for a fragment for a primitive such that for any fragments for which both the first fragment shader routine and the second fragment shader routine are executed, the one or more fragment shader side effects associated with the fragment shader are only executed once.
Patent ‘023 does not disclose dividing the render output into a plurality of patches, and identifying a range of primitives associated with each patch that may need to subsequently be processed further. However, Jeong teaches dividing a render output into a plurality of tiles, and identifying a range of primitives associated with each tile that may need to subsequently be processed further (See the rejection of claim 1 below).
The reason of doing so is to reduce processing burden as processing smaller pieces will be much faster and can use parallel processing technique
11, similar to claim 1
See rejection above.
Claim Rejections - 35 USC § 102
In the event the determination of the status of the application as subject to AIA 35 U.S.C. 102 and 103 (or as subject to pre-AIA 35 U.S.C. 102 and 103) is incorrect, any correction of the statutory basis (i.e., changing from AIA to pre-AIA ) for the rejection will not be considered a new ground of rejection if the prior art relied upon, and the rationale supporting the rejection, would be the same under either status.
The following is a quotation of the appropriate paragraphs of 35 U.S.C. 102 that form the basis for the rejections under this section made in this Office action:
A person shall be entitled to a patent unless –
(a)(1) the claimed invention was patented, described in a printed publication, or in public use, on sale, or otherwise available to the public before the effective filing date of the claimed invention.
Claim(s) 1, 2, 4, 6, 11, 12, 14 and 16 is/are rejected under 35 U.S.C. 102(a)(1) as being anticipated by Jeong et al. (Pub. No. US 2016/0125649).
Regarding claim 1, Jeong discloses a method of operating a graphics processor to generate a render output in which, for the purposes of generating a render output, the render output is divided into a plurality of patches (Par. 12: “The method may further include dividing a frame into tiles and recognizing a primitive included in each of the tiles, wherein the primitive visibility stream is generated according to the tiles and indicates whether a primitive included in each of the tiles is visible”), the method comprising:
for a sequence of primitives to be rendered for a render output (A frame (render output) comprises a plurality of primitives, as suggested in the above cited paragraph):
performing a first, pre-pass operation (Par. 100: “in the rendering method according to the current example, as illustrated in FIG. 7, rendering is continuously performed twice, thus providing for two-pass rendering, wherein the rendering apparatus 200 continuously performs rendering using a first pipeline 710 and a second pipeline 720”) in which primitives in the sequence of primitives to be rendered are processed into respective sets of one or more fragments, each fragment associated with a respective set of one or more sampling positions within the render output, and wherein as part of the first, pre-pass operation fragments for primitives in the sequence of primitives are processed to determine visibility information for the sequence of primitives (Par. 101: “In the first pipeline 710, the vertex shader 650 performs shading on a vertex by only using a location value of the vertex, the tessellation pipeline 660 performs tessellation by only using a location value of a patch, and the rasterization unit 670 performs rasterization by only using a location value of a primitive. Also, in the first pipeline 710, the depth test unit 610 determines a visible fragment via a depth test, and the P-buffer 620 stores an ID of a primitive corresponding to the visible fragment. Also, the stream generator 630 generates a primitive visibility stream, a patch visibility stream, and a vertex visibility stream based on the ID of the primitive stored in the P-buffer 620”. As is well known in the art, the rasterization unit rasterizes a primitive into fragments, each of which has at least one sampling position); and
identifying for respective patches of the render output, each patch encompassing a respective group of plural sampling positions within the render output, respective ranges of primitives within the sequence of primitives that may need to subsequently be processed further for the sampling positions covered by the patch to which the identified range of primitives relates, wherein the respective ranges of primitives within the sequence of primitives that may need to subsequently be processed further for the sampling positions covered by the respective patches are identified based on the determined visibility information for the sequence of primitives (Par. 104: “the rendering apparatus 100 divides a frame into a plurality of tiles and recognizes a primitive included in each of the plurality of tiles or a fragment generated from the primitive… when depth tests are performed on all fragments included in one tile, depth values stored in the Z-buffer 340 all assume depth values of visible fragments”, par. 105: “the rendering apparatus 100 stores an ID of a primitive corresponding to a visible fragment in the P-buffer 330 based on a result of performing a depth test on a depth value of each of a plurality of fragments included in a tile… when depth tests are performed on all fragments included in one frame or one tile, IDs of primitives stored in the P-buffer 330 only include IDs of visible primitives”, and par. 106: “In operation S830, the method generates a primitive visibility stream. For example, the rendering apparatus 100 generates a primitive visibility stream indicating visibility information of each of a plurality of primitives included in the tile based on the IDs of the primitives stored in the P-buffer 330”. See also pars. 82-83. Since the primitive visibility stream indicates visible information of primitives included in a tile, it could be said that each tile is associated with a range of primitives that may need to subsequently be processed further in the second pipeline (i.e. visible primitives)); the method further comprising:
thereafter performing a second, main pass operation in which visibility testing is performed to determine which primitives in the sequence of primitives should be further processed for which sampling positions within the render output, wherein for the purposes of visibility testing at least some primitives that were processed by the first, pre-pass operation are processed into respective groups of fragments, each group of fragments corresponding to a respective patch of the render output, and wherein the visibility testing for a group of fragments uses the identified range of primitives within the sequence of primitives that may subsequently need to be processed further for the respective patch corresponding to the group of fragments being tested to determine whether or not the group of fragments should be further processed (Par. 107: “In operation S840, the method performs selective rendering. For example, the rendering apparatus 100 performs selective rendering on the plurality of primitives included in the tile based on the IDs of the primitives stored in the P-buffer 330. According to an example, the rendering apparatus 100 performs selective rendering on a plurality of primitives included in a tile by using a primitive visibility stream. In such an example, the rendering unit 360 included in the rendering apparatus 100 performs selective rendering on a plurality of primitives included in a primitive visibility stream received from the stream generator 350. Thus, the rendering unit 360 performs rasterizing only on a visible primitive from among a plurality of primitives by using a primitive visibility stream”).
Regarding claim 2, Jeong discloses the method of claim 1, wherein the determined visibility information comprises a set of primitive identifying information, the set of primitive identifying information capable of storing for respective sampling positions within the render output, or groups thereof, respective primitive identifiers, the primitive identifier stored for a respective sampling position, or group of sampling positions, being usable to subsequently control further processing of primitives for the sampling position or positions for which the primitive identifier is stored (Par. 82: “Referring to the example of FIG. 4, a primitive ID block 440 is an example of the P-buffer 330. According to an example, the P-buffer 330 includes the primitive ID block 440 corresponding to the tile 420, wherein the primitive ID block 440 includes an ID of a primitive visible at a location of each pixel of the tile 420, according to locations of pixels. In other words, when the tile 420 includes an array of 5×5 pixels, in the example, of FIG. 4, an ID of a primitive visible at a pixel located at a first row and a first column is 3 and an ID of a primitive visible at a pixel located at a second row and a third column is 1. Also, in such an example, the P-buffer 330 includes the primitive ID block 440 that is generated for each tile forming the frame 410”), and wherein identifying the respective ranges of primitives within the sequence of primitives that may need to subsequently be processed further for the respective patches of the render output comprises: after the first, pre-pass operation has completed the processing of primitives in the sequence of primitives to determine the set of primitive identifying information for the sequence of primitives: processing the determined set of primitive identifying information for the sequence of primitives to identify the respective ranges of primitives that may need to subsequently be processed further for the sampling positions covered by the respective patches of the render output (Par. 83: “Also, according to an example, the stream generator 350 of FIG. 3 generates a primitive visibility stream 450 corresponding to the tile 420 by using the primitive ID block 440 stored in the P-buffer 330. In other words, the stream generator 350 assigns a value of ‘1’ indicating visibility to IDs included in the primitive ID block 440 from among all IDs of the primitives included in the tile 420 and assign a value of ‘0’ indicating non-visibility to IDs not included in the primitive ID block 440 from among the all IDs of the primitives included in the tile 420. The stream generator 350 assigns such a value by using values of the IDs included in the primitive ID block 440”).
Regarding claim 4, Jeong discloses the method of claim 2, wherein the processing of primitives during the first, pre-pass operation to determine the set of primitive identifying information comprises determining an initial range of primitives that may need to be further processed for respective patches of the render output, with information indicative of the initially determined range of primitives that may need to be further processed for a patch being stored accordingly in the set of primitive identifying information, and wherein the step of processing the initially determined set of primitive identifying information for the sequence of primitives to identify the respective ranges of primitives that may need to subsequently be processed further for the sampling positions covered by the respective patches of the render output is performed to update the respective ranges of primitives that may need to subsequently be processed further for at least some patches of the render output, to thereby identify a refined range of primitives within the sequence of primitives that may subsequently need to be processed further for the sampling positions covered by the patch (Jeong, par. 16: “The storing may include, in response to one fragment of the fragments being visible, updating and storing an existing identifier as an identifier of a primitive corresponding to the one fragment”, and par. 26: “In response to one fragment of the fragments being visible, an identifier pre-stored in the primitive buffer may be updated and stored as an identifier of a primitive corresponding to the one fragment”).
Regarding claim 6, Jeong discloses the method of claim 4, wherein when it is determined during the initial processing of primitives to determine the set of primitive identifying information that no primitives write to any sampling positions covered by a patch, the method comprises omitting processing that patch during the subsequent processing of the initially determined set of primitive identifying information (Jeong, par. 87: “the stream generator 350 obtains visibility information about each primitive of the tile through a P-buffer and obtains an ID of a patch or an ID of a vertex, which corresponds to an ID of each primitive, through the structure 510. As a result, the stream generator 350 generates a patch visibility stream indicating visibility information according to IDs of patches included in the tile and vertex visibility stream indicating visibility information according to IDs of vertices included in the tile”, and par. 91: “Also, according to an example, the rendering unit 360 performs selective rendering on a plurality of patches included in a patch visibility stream received from the stream generator 350”. In particular, “selective rendering’ suggests that only visible patches are rendered).
Claims 11, 12, 14 and 16 recite similar limitations as respective claims 1, 2, 4 and 6, but are directed to a graphics processor comprising a rasterizing circuit and a rendering circuit. Since Jeong also discloses such a graphics processor (Fig. 7 shows a first pipeline comprising a rasterisation unit 670 and Fig. 3 shows a rendering unit 360), these claims could be rejected under the same rationales set forth in the rejections of their respective claims.
Claim Rejections - 35 USC § 103
The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action:
A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made.
Claim(s) 3 and 13 is/are rejected under 35 U.S.C. 103 as being unpatentable over Jeong, in view of Fishwick et al. (Pub. No. US 2014/0071150).
Regarding claim 3, Jeong discloses the method of claim 2, further comprising storing, for respective patches of the render output, information indicative of the respective identified range of primitives within the sequence of primitives that may subsequently need to be processed further for the respective patches, the stored information being usable by the visibility testing,(Par. 83: “Also, according to an example, the stream generator 350 of FIG. 3 generates a primitive visibility stream 450 corresponding to the tile 420 by using the primitive ID block 440 stored in the P-buffer 330. In other words, the stream generator 350 assigns a value of ‘1’ indicating visibility to IDs included in the primitive ID block 440 from among all IDs of the primitives included in the tile 420 and assign a value of ‘0’ indicating non-visibility to IDs not included in the primitive ID block 440 from among the all IDs of the primitives included in the tile 420. The stream generator 350 assigns such a value by using values of the IDs included in the primitive ID block 440”).
Jeong, however, does not disclose the above lined-through limitations.
In the same field of GPU architecture, Fishwick teaches creating a unique identifier for each primitive in a sequence of primitives covered by a tile (See pars. 52-53), and in addition to storing an identifier identifying the primitive from which the sequence of primitives is derived, data indicating the first and/or last position in the sequence of those primitives located within the tile is stored. This data may be stored in the object list for that tile or in another region of memory (See pars. 64-67).
In light of Fishwick’s teachings, it would have been obvious to one skilled in the art before the effective filing date of the claimed invention to modify Jeong by storing, for each primitive in the sequence of primitives, a unique primitive identifier, with the primitive identifiers within the sequence of primitives monotonically change from a particular starting value, and wherein the stored information indicative of the respective identified range of primitives within the sequence of primitives that may subsequently need to be processed further for a respective patch of the render output would comprise a respective primitive identifier indicating the first primitive in the sequence of primitives that may subsequently need to be processed further for the patch and a further respective primitive identifier indicating the final primitive of the primitives that were processed by the first, pre-pass operation that may need to be further processed for the patch. The motivation would have been to improve memory usage (Fishwick, par. 67).
Claim 13 recites similar limitations as claim 3, but is directed to a graphics processor comprising a rasterizing circuit and a rendering circuit. Since Jeong also discloses such a graphics processor (Fig. 7 shows a first pipeline comprising a rasterisation unit 670 and Fig. 3 shows a rendering unit 360), claim 13 could be rejected under the same rationale set forth in the rejection of claim 3.
Allowable Subject Matter
Claims 5, 7-10, 15 and 17-20 are objected to as being dependent upon a rejected base claim, but would be allowable if rewritten in independent form including all of the limitations of the base claim and any intervening claims.
Conclusion
Any inquiry concerning this communication or earlier communications from the examiner should be directed to PHONG X NGUYEN whose telephone number is (571)270-1591. The examiner can normally be reached Mon-Fri 8am - 5pm EST.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, King Poon can be reached at (571)272-7440. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
/PHONG X NGUYEN/ Primary Patent Examiner, Art Unit 2617