Indirect Argument Buffer for GPU Task Execution

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

The overhead cost and resource inefficiency associated with passing multiple API calls to graphics processing units (GPUs) for repetitive sets of resources, particularly when these resources are used frame after frame, hinder efficient task execution on graphics processors.

Innovation Solution

The implementation of an indirect argument buffer (IAB) that groups multiple data resources into a single data structure, allowing them to be collectively sent to the GPU using a single lightweight API call, with the option to re-index the structure based on GPU characteristics for optimized performance.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If multiple API calls are used to pass resources to the GPU, then resource transfer completeness is ensured, but overhead cost and time consumption increase significantly

Engineering Contradiction:
Improveresource transfer completenessVSAvoidAPI call overhead time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent combines multiple API calls into a single unified indirect argument buffer that passes multiple data resources (vertex buffers, index buffers, textures) to the GPU in one operation. This merging eliminates the overhead of multiple separate API calls while ensuring all necessary resources are transferred complete to the GPU for rendering.

Inventive Principle:
Principle #5Merging (Combining)

2Reliability

If resources are passed repeatedly for multiple API calls across frames, then resource availability is maintained, but resource efficiency deteriorates

Engineering Contradiction:
Improveresource availabilityVSAvoidresource efficiency
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The indirect argument buffer is constructed in advance on the CPU side, pre-assembling all necessary data resources (vertex buffers, index buffers, textures) before GPU submission. This preliminary preparation ensures resources are ready for immediate use across multiple frames without requiring repeated API calls, thereby maintaining resource availability while significantly improving resource efficiency and reducing CPU-GPU synchronization overhead.

Inventive Principle:
Principle #10Preliminary action

3Productivity

If data resources are organized in a grouped data structure, then resource management efficiency is improved, but data structure complexity increases

Engineering Contradiction:
Improveresource management efficiencyVSAvoiddata structure complexity
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The patent introduces an indirect argument buffer as an intermediary data structure that sits between the CPU application and GPU rendering pipeline. This buffer acts as a mediator that groups and organizes multiple data resources (vertex buffers, index buffers, textures) in a unified structure, improving resource management efficiency by reducing the number of API calls while the encoding object handles the complexity of translating this grouped structure into GPU-compatible formats.

Inventive Principle:
Principle #24Intermediary (Mediator)

Data Source

PatentUS11094036B2Task execution on a graphics processor using indirect argument buffers
Publication Date: 2021.08.17 APPLE INC
  • US11094036B2 patent drawing
  • US11094036B2 patent drawing
  • US11094036B2 patent drawing

AI summary

The disclosure pertains to techniques for operation of graphics systems and task execution on a graphics processor. One such technique comprises a computer-implemented method for task execution on a graphics processor, the method comprising creating a data structure for grouping data resources, populating the data structure with two or more data resources for encoding into a graphics processing language by an encoding object, passing the data structure to a first programming interface command, the first programming interface command configured to access the data structure's data resources, triggering execution of a first function on a graphics processer in response to passing the data structure to the first programming interface command, passing the data structure to a second programming interface command, the second programming interface command configured to access the data structure's data resources, and triggering execution of a second function on the graphics processer in response to passing the data structure to the second programming interface command.