# US 9,436,969 B2 · Time slice processing of tessellation and geometry shaders

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,436,969 B2
- Document ID: US9436969B2
- Status: Granted
- Kind: B2
- Application number: 13/208,256
- Filed: 2011-08-11
- Published: 2013-02-14
- Granted: 2016-09-06
- Earliest claimed: 2009-10-05
- Assignees: NVIDIA Corporation
- Applicants: Ziyad S. Hakura; Emmett M. Kilgariff; Dale L. Kirkland; Johnny S. Rhoades; Cynthia Ann Edgeworth Allison; Karim M. Abdalla
- Inventors: Ziyad S. Hakura; Emmett M. Kilgariff; Dale L. Kirkland; Johnny S. Rhoades; Cynthia Ann Edgeworth Allison; Karim M. Abdalla
- Web page: https://patentgrep.com/patent/US9436969B2

## CPC

- G06T 1/20: Processor architectures; Processor configuration, e.g. pipelining
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL

## Abstract

One embodiment of the present invention sets forth a technique for redistributing geometric primitives generated by tessellation and geometry shaders for processing by multiple graphics pipelines. Geometric primitives that are generated in a first processing cycle are collected and redistributed more evenly and in smaller tasks to the multiple graphics pipelines for vertex processing in a second processing cycle. The smaller tasks do not exceed the resource limits of a graphics pipeline and the per-vertex processing workloads of the graphics pipelines in the second cycle are balanced and make full use of resources. Therefore, the performance of the tessellation and geometry shaders is improved.

## Claims

### Claim 1

A method for configuring a streaming multiprocessor to process data in first and second processing cycles, the method comprising:
transmitting a first set of input primitives to the streaming multiprocessor during a first processing cycle for the streaming multiprocessor to process the first set of input primitives to produce geometric primitives therefrom;
determining, based on a consumption level associated with at least one system resource exceeding a threshold level, that the streaming multiprocessor should transition, prior to completion of the first processing cycle, from the first processing cycle to a second processing cycle during which the streaming multiprocessor processes the geometric primitives produced from the first set of input primitives, wherein the first processing cycle and the second processing cycle are consecutive processing cycles of a graphics processing pipeline; and
transmitting a first transition state bundle to the streaming multiprocessor to cause the streaming multiprocessor to stop the first processing cycle prior to completion of the first processing cycle and start the second processing cycle to process the geometric primitives.

### Claim 2 (depends on 1)

The method of claim 1, further comprising estimating the consumption level based on a counter indicating the number of memory spaces that are available in the at least one system resource and on the number of memory spaces that are to be consumed when the first set of input primitives is processed by the streaming multiprocessor.

### Claim 3 (depends on 1)

The method of claim 1, wherein the first set of input primitives comprise one or more surface patches, and, in the first processing cycle, tessellation data for each of the one or more surface patches is generated, the tessellation data for each surface patch including level-of-detail values that define the geometric primitives.

### Claim 4 (depends on 3)

The method of claim 3, wherein the at least one system resource comprises a circular buffer that is included in a level-two cache coupled to the streaming multiprocessor and is configured to store at least a portion of the tessellation data.

### Claim 5 (depends on 4)

The method of claim 4, further comprising, after the first transition state bundle is transmitted to the streaming multiprocessor, copying the tessellation data from the circular buffer to a level-one cache coupled to the streaming multiprocessor, wherein the streaming multiprocessor is configured to access the tessellation data in the level-one cache when processing the geometric primitives.

### Claim 6 (depends on 3)

The method of claim 3, wherein the at least one system resource comprises a first-in-first-out memory that is included in the streaming multiprocessor and is configured to store the level-of-detail values that define geometric primitives associated with a first surface patch.

### Claim 7 (depends on 1)

The method of claim 1, further comprising, after transmitting the first transition bundle, transmitting a second transition state bundle to the streaming multiprocessor, and transmitting a second set of input primitives to the streaming multiprocessor for processing.

### Claim 8 (depends on 7)

The method of claim 7, wherein, upon receiving the second transition state bundle, the streaming multiprocessor is configured to finish processing the geometric primitives before processing the second set of input primitives.

### Claim 9 (depends on 1)

The method of claim 1, wherein determining that the streaming multiprocessor should begin processing the generated geometric primitives is further based on a number of state bundles that are transmitted to the streaming multiprocessor, wherein the first transition bundle is transmitted to the streaming multiprocessor when the number of state bundles exceeds a pre-determined threshold.

### Claim 10 (depends on 1)

The method of claim 1, further comprising determining that a number of state bundles transmitted to the streaming multiprocessor exceeds a second threshold level, and, in response, transmitting the first transition state bundle.

### Claim 11

A graphics processing unit, comprising:
a streaming multiprocessor, and
a work distribution processor coupled to the streaming multiprocessor and configured to:
transmit a first set of one or more surface patches to the streaming multiprocessor during a first processing cycle for the streaming multiprocessor to produce tessellation data for each of the one or more surface patches, the tessellation data for each surface patch including level-of-detail values that define geometric primitives associated with the surface patch;
determine, based on a consumption level associated with at least one system resource exceeding a threshold level, that the streaming multiprocessor should transition, prior to completion of the first processing cycle, from the first processing cycle to a second processing cycle during which the streaming multiprocessor processes the geometric primitives associated with each of the one or more surface patches, wherein the first processing cycle and the second processing cycle are consecutive processing cycles of a graphics processing pipeline; and
transmit a first transition state bundle to the streaming multiprocessor that causes the streaming multiprocessor to stop the first processing cycle prior to completion of the first processing cycle and start the second processing cycle to process the geometric primitives.

### Claim 12 (depends on 11)

The graphics processing unit of claim 11, wherein the work distribution processor is further configured to estimate the consumption level based on a counter indicating the number of memory spaces that are available in the at least one system resource and on the number of memory spaces that are to be consumed when the first set of one or more surface patches is processed by the streaming multiprocessor.

### Claim 13 (depends on 11)

The graphics processing unit of claim 11, wherein the at least one system resource comprises a circular buffer that is included in a level-two cache coupled to the streaming multiprocessor and is configured to store at least a portion of the tessellation data.

### Claim 14 (depends on 13)

The graphics processing unit of claim 13, wherein, after the first transition state bundle is transmitted to the streaming multiprocessor, the streaming multiprocessor copies the tessellation data from the circular buffer to a level-one cache coupled to the streaming multiprocessor, wherein the streaming multiprocessor is configured to access the tessellation data in the level-one cache when processing the geometric primitives.

### Claim 15 (depends on 11)

The graphics processing unit of claim 11, wherein the at least one system resource comprises a first-in-first-out memory that is included in the streaming multiprocessor and is configured to store the level-of-detail values that define geometric primitives associated with a first surface patch.

### Claim 16 (depends on 11)

The graphics processing unit of claim 11, wherein the work distribution processor is further configured to, after transmitting the first transition bundle, transmit a second transition state bundle to the streaming multiprocessor, and transmit a second set of surface patches to the streaming multiprocessor for processing.

### Claim 17 (depends on 16)

The graphics processing unit of claim 16, wherein, upon receiving the second transition state bundle, the streaming multiprocessor is configured to finish processing the geometric primitives before processing the second set of surface patches.

### Claim 18 (depends on 11)

The graphics processing unit of claim 11, wherein determining that the streaming multiprocessor should begin processing the geometric primitives is further based on a number of state bundles that are transmitted to the streaming multiprocessor, wherein the first transition bundle is transmitted to the streaming multiprocessor when the number of state bundles exceeds a pre-determined threshold.

### Claim 19 (depends on 11)

The graphics processing unit of claim 11, wherein the threshold level reflects a level of buffer consumption within the streaming multiprocessor.

### Claim 20 (depends on 11)

The graphics processing unit of claim 11, wherein the work distribution processor is further configured to determine that a number of state bundles transmitted to the streaming multiprocessor exceeds a second threshold level, and, in response, transmit the first transition state bundle.

### Claim 21 (depends on 11)

The graphics processing unit of claim 11, wherein the first processing cycle comprises executing vertex shaders, and the second processing cycle comprises executing at least one of domain shaders and geometry shaders.

### Claim 22 (depends on 11)

The graphics processing unit of claim 11, wherein the first processing cycle is implemented by a vertex processing unit and a primitive assembler.

### Claim 23

A system, comprising:
a streaming multiprocessor;
at least one system resource; and
a work distribution processor configured to:
transmit one or more surface patches to the streaming multiprocessor during a first processing cycle for the streaming multiprocessor to process the one or more surface patches to produce tessellation data for each of the one or more surface patches, the tessellation data for each surface patch including level-of-detail values that define geometric primitives associated with the surface patch,
determine, based on a consumption level associated with at least one system resource exceeding a threshold level, that the streaming multiprocessor should transition, prior to completion of the first processing cycle, from the first processing cycle to a second processing cycle during which the streaming multiprocessor processes the geometric primitives associated with each of the one or more surface patches, wherein the first processing cycle and the second processing cycle are consecutive processing cycles of a graphics processing pipeline, and
transmit a first transition state bundle to the streaming multiprocessor that causes the streaming multiprocessor to stop the first processing cycle prior to completion of the first processing cycle and start the second processing cycle to process the geometric primitives.

### Claim 24 (depends on 23)

The system of claim 23, wherein the work distribution processor is further configured to estimate the consumption level based on a counter indicating the number of memory spaces that are available in the at least one system resource and on the number of memory spaces that are to be consumed when the first set of surface patches is processed by the streaming multiprocessor.

### Claim 25 (depends on 23)

The system of claim 23, wherein the at least one system resource comprises a circular buffer that is included in a level-two cache coupled to the streaming multiprocessor and is configured to store at least a portion of the tessellation data.

### Claim 26 (depends on 23)

The system of claim 23, wherein the work distribution processor is further configured to determine that a number of state bundles transmitted to the streaming multiprocessor exceeds a second threshold level, and, in response, transmit the first transition state bundle.
