Two-Stage Vertex Shading for Tile-Based Graphics Processing
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Existing graphics processing pipelines that employ vertex shading often perform redundant vertex shading computations, as not all vertices defined for a draw call contribute to the final graphics output.
Innovation Solution
The proposed solution involves dividing the vertex shading operation into two stages: a first vertex shading operation that generates vertex shaded position data, and a second vertex shading operation that generates vertex shaded data for non-position attributes, with the second operation being deferred until rasterization and controlled based on culling testing results.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Productivity
If all vertices are subjected to complete vertex shading operations, then comprehensive vertex attribute data is available for processing, but redundant computations occur for vertices that do not contribute to the final output
Solution Approach 1:
The patent applies preliminary action by performing a first vertex shading operation that generates vertex shaded position data before rasterization, enabling early determination of which vertices will contribute to the final output. This preliminary computation allows the system to identify and avoid redundant second vertex shading operations for vertices that are culled during rasterization, thereby reducing overall power consumption while maintaining processing efficiency.
Solution Approach 2:
The patent segments the vertex shading operation into two distinct stages: a first vertex shading operation that computes position data for all vertices, and a second vertex shading operation that computes non-position attributes only for vertices that survive rasterization and culling. This segmentation eliminates redundant computations and reduces power consumption by avoiding unnecessary processing of vertices that will not contribute to the final rendered output.
2Reliability
If all vertices are subjected to complete vertex shading operations, then comprehensive vertex attribute data is available for processing, but the computation load increases unnecessarily
Solution Approach 1:
The patent applies partial action by performing complete vertex shading operations only on vertices that are determined to contribute to the final output, rather than processing all vertices uniformly. The first vertex shading operation processes all vertices for position data, while the second vertex shading operation processes only the subset of vertices that survive rasterization and culling, thereby reducing computation load while maintaining reliability for vertices that matter.
Solution Approach 2:
The patent segments vertex shading into two phases: initial position-based shading for all vertices, followed by attribute-based shading only for surviving vertices. This segmentation reduces the overall computation load by avoiding redundant processing of vertices that will be culled, while ensuring that all necessary computations are performed for vertices that contribute to the final output.
3Reliability
If all vertices are subjected to complete vertex shading operations, then all vertex attributes are processed, but memory bandwidth is wasted due to redundant data transfer
Solution Approach 1:
The patent uses preliminary vertex shaded position data computed in the first vertex shading operation to determine which vertices will contribute to the final output before initiating the second vertex shading operation. This preliminary determination allows the system to avoid transferring and processing vertex attribute data for vertices that will be culled, thereby reducing memory bandwidth consumption while ensuring complete processing of relevant vertices.
Solution Approach 2:
The patent applies partial processing by computing and transferring vertex attribute data only for vertices that are determined to contribute to the final output, rather than processing all vertices. The second vertex shading operation is triggered only for surviving vertices, reducing memory bandwidth usage by avoiding redundant data transfer and processing of culled vertices while maintaining completeness for relevant data.
4Productivity
If vertex shading is performed before rasterization for all vertices, then vertex attributes are available for primitive processing, but redundant processing occurs for primitives not present in the final output
Solution Approach 1:
The patent segments vertex shading into two distinct operations: a first operation that shades position attributes for all vertices to enable primitive assembly and rasterization, and a second operation that shades non-position attributes only for vertices belonging to primitives that survive rasterization and culling. This segmentation eliminates redundant computation for primitives not present in the final output while maintaining efficiency for primitive processing.
Solution Approach 2:
The patent applies partial vertex shading by performing complete vertex shading operations only on vertices that contribute to primitives present in the final output. The second vertex shading operation is conditionally triggered based on rasterization and culling results, reducing computation load by avoiding redundant processing of primitives that will not be rendered while maintaining productivity for relevant primitive processing.
Data Source
AI summary
When performing tile-based graphics processing, a first vertex shading operation to generate vertex shaded position data for vertices is performed, and the vertex shaded position data used to prepare primitive lists indicating which primitives should be rendered for respective rendering tiles. Then, when processing a tile, a second vertex shading operation is performed for vertices of primitives for the tile for which fragments have been generated by a rasteriser prior to rendering the graphics fragments, to generate vertex shaded non-position attribute data for the vertices, based on the results of early depth testing before the fragments are rendered.


