# US 12,182,926 B1 · Initial object shader run for graphics workload distribution

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

- Number: US 12,182,926 B1
- Document ID: US12182926B1
- Status: Granted
- Kind: B1
- Application number: 18/055,111
- Filed: 2022-11-14
- Granted: 2024-12-31
- Earliest claimed: 2022-09-19
- Assignees: Apple Inc.
- Applicants: Apple Inc.
- Inventors: Jeffrey T. Brady; Jason D. Carroll; Michael A. Mang; Ralph C. Taylor
- Web page: https://patentgrep.com/patent/US12182926B1

## CPC

- G06T 15/005: {General purpose rendering architectures}
- G06T 17/20: Finite element generation, e.g. wire-frame surface description, {tesselation}
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL

## Abstract

Techniques are disclosed relating to using an initial version of an object shader to determine a child count and distribute geometry work based on the child count. In some embodiments, graphics shader circuitry is configured to execute shader programs including object shaders and mesh shaders. Vertex control circuitry is configured to, for a given object shader: launch an initial version of the given object shader to determine a number of meshlets to be generated by the given object shader (e.g., where the initial version of the given object shader does not commit side effects to architectural state of the apparatus) and select shader circuitry to execute a complete version of the given object shader based on the determined number of meshlets.

## Claims

### Claim 1

An apparatus, comprising:
shader circuitry configured to execute shader programs including object shaders and mesh shaders, wherein the shader circuitry includes multiple distributed shader sub-units;
vertex control circuitry configured to, for a given object shader:
launch an initial version of the given object shader to determine a number of meshlets to be generated by the given object shader, wherein the initial version of the given object shader does not commit side effects to architectural state of the apparatus; and
select, based on the determined number of meshlets, a number of the multiple distributed shader sub-units to execute a complete version of the given object shader at least partially in parallel.

### Claim 2 (depends on 1)

The apparatus of claim 1, wherein the vertex control circuitry is configured to distribute the given object shader across multiple shader sub-units in response to determining that the given object shader generates a threshold number of meshlets.

### Claim 3 (depends on 1)

The apparatus of claim 1, wherein the initial and complete versions of the given object shader are received as part of a compiled graphics program.

### Claim 4 (depends on 1)

The apparatus of claim 1, wherein:
the vertex control circuitry is configured to maintain bin information for multiple portions of a set of graphics work to be assigned to different shader sub-units; and
the selection includes assignment of the given object shader to one or more bins based on the determined number of meshlets.

### Claim 5 (depends on 1)

The apparatus of claim 1, wherein the vertex control circuitry is configured to:
determine a number of primitives associated with the given object shader based on the determined number of meshlets and a driver-provided number of primitives per meshlet; and
select the number of the multiple distributed shader sub-units based on the determined number of primitives.

### Claim 6 (depends on 1)

The apparatus of claim 1, wherein the apparatus is a computing device that further includes:
a central processing unit; and
network interface circuitry.

### Claim 7

A method, comprising:
executing, by multiple shader sub-units of a computing device, shader programs including object shaders and mesh shaders;
for a given object shader, the computing device:
launching an initial version of the given object shader to determine a number of meshlets to be generated by the given object shader, wherein the initial version of the given object shader does not commit side effects to architectural state of the computing device; and
selecting, based on the determined number of meshlets, a number of the multiple shader sub-units to execute a complete version of the given object shader at least partially in parallel.

### Claim 8 (depends on 7)

The method of claim 7, wherein the selecting includes distributing the given object shader across multiple shader sub-units in response to determining that the given object shader generates a threshold number of meshlets.

### Claim 9 (depends on 7)

The method of claim 7, wherein the selecting includes assigning meshlets generated by the given object shader to multiple shader sub-units.

### Claim 10 (depends on 7)

The method of claim 7, wherein the initial and complete versions of the given object shader are received as part of a compiled graphics program.

### Claim 11 (depends on 7)

The method of claim 7, further comprising:
maintaining bin information for multiple portions of a set of graphics work to be assigned to different shader sub-units;
wherein the selection includes assignment of the given object shader to one or more bins based on the determined number of meshlets.

### Claim 12 (depends on 7)

The method of claim 7, further comprising:
determining a number of primitives associated with the given object shader based on the determined number of meshlets and a determined number of primitives per meshlet; and
selecting the number of the multiple shader sub-units based on the determined number of primitives.

### Claim 13

A non-transitory computer-readable storage medium having stored thereon design information that specifies a design of at least a portion of a hardware integrated circuit in a format recognized by a semiconductor fabrication system that is configured to use the design information to produce the circuit according to the design, wherein the design information specifies that the circuit includes:
shader circuitry configured to execute shader programs including object shaders and mesh shaders, wherein the shader circuitry includes multiple distributed shader sub-units;
vertex control circuitry configured to, for a given object shader:
launch an initial version of the given object shader to determine a number of meshlets to be generated by the given object shader, wherein the initial version of the given object shader does not commit side effects to architectural state of the circuit; and
select, based on the determined number of meshlets, a number of the multiple distributed shader sub-units to execute a complete version of the given object shader at least partially in parallel.

### Claim 14 (depends on 13)

The non-transitory computer-readable storage medium of claim 13, wherein the vertex control circuitry is configured to distribute the given object shader across multiple shader sub-units in response to determining that the given object shader generates a threshold number of meshlets.

### Claim 15 (depends on 13)

The non-transitory computer-readable storage medium of claim 13, wherein the initial and complete versions of the given object shader are received as part of a compiled graphics program.

### Claim 16 (depends on 13)

The non-transitory computer-readable storage medium of claim 13, wherein:
the vertex control circuitry is configured to maintain bin information for multiple portions of a set of graphics work to be assigned to different shader sub-units; and
the selection includes assignment of the given object shader to one or more bins based on the determined number of meshlets.

### Claim 17 (depends on 13)

The non-transitory computer-readable storage medium of claim 13, wherein the vertex control circuitry is configured to:
determine a number of primitives associated with the given object shader based on the determined number of meshlets and a driver-provided number of primitives per meshlet; and
select the number of the multiple distributed shader sub-units based on the determined number of primitives.
