Primitive culling using automatically compiled compute shaders
US-2018033184-A1 · Feb 1, 2018 · US
US10991127B2 · US · B2
| Field | Value |
|---|---|
| Publication number | US-10991127-B2 |
| Application number | US-201916572252-A |
| Country | US |
| Kind code | B2 |
| Filing date | Sep 16, 2019 |
| Priority date | Feb 15, 2017 |
| Publication date | Apr 27, 2021 |
| Grant date | Apr 27, 2021 |
A practical reading order for non-experts. Skip the full description unless you need deep technical detail.
What the patent document calls the invention.
A short plain-language summary of the technical disclosure.
Who owns or filed the patent and who is credited as inventor.
Filing, priority, publication, and grant dates set the timeline.
The legal scope of protection — read this for what is actually claimed.
Technology tags used to group this patent with similar filings.
Prior art links and similar publications in this corpus.
Official abstract text for this publication.
Methods and devices for index buffer block compression in a computer system include a compressor in communication with a graphical processing unit (GPU). The methods and devices include selecting one or more primitives of at least a portion of a mesh formed by a total number of primitives for inclusion within a compressed index buffer block, the one or more primitives each associated with a number of indices each corresponding to a vertex within the mesh. The methods and devices may identify at least one redundant index in the number of indices associated with the one or more primitives of the compressed index buffer block. The methods and devices removing the at least one redundant index from the number of indices associated with the one or more primitives of the compressed index buffer block to form the compressed index buffer block as a set of one or more unique indices.
Opening claim text (preview).
What is claimed is: 1. A method of index buffer block compression at an application program interface (API), comprising: determining whether at least one redundant index has been detected in a number of indices associated with a one or more primitives of a compressed index buffer block; in accordance with a determination that at least one redundant index has been detected in the number of indices, removing the at least one redundant index from the number of indices associated with the one or more primitives to form the compressed index buffer block as a set of one or more unique indices; storing, in an index buffer, the compressed index buffer block; and selecting a compression scheme corresponding to a number of bits per index based at least on the one or more indices within the index buffer, wherein selecting the compression scheme includes: determining a minimum index, a maximum index, and a difference value between the minimum index and the maximum index for each of the one or more primitives of at least a portion of a mesh formed by a total number of primitives for inclusion within the compressed index buffer block; selecting a maximum difference value from the difference values for each of the one or more primitives; and determining a minimum number of bits used for representing the maximum difference value, the minimum number of bits corresponding to the number of bits per index of the compression scheme. 2. The method of claim 1 , further comprising selecting one or more primitives of at least the portion of the mesh formed by the total number of primitives for inclusion within the compressed index buffer block, the one or more primitives each associated with a number of indices each corresponding to a vertex within the mesh, wherein storing the compressed index buffer block includes storing at least one of: a value corresponding to the one or more selected primitives, the one or more unique indices, a minimum index representing a smallest index value of the one or more unique indices, one or more unique indices adjusted by the minimum index, or connectivity information indicating a sequential order of the one or more unique indices for each of the one or more primitives within at least one array. 3. The method of claim 2 , further comprising: determining a block value representing a block size of primitives falling within a block size range; and arranging the number of indices within an index buffer in an increasing order, each of the one or more indices associated with a vertex of at least a portion of a mesh formed by a number of primitives. 4. The method of claim 3 , further comprising: selecting, for a data block, one or more primitives from the number of primitives, the one or more selected primitives each associated with three indices from the one or more indices; determining that the one or more selected primitives correspond to the block value; and omitting, from the data block, at least one redundant index associated with at least one of the one or more primitives. 5. The method of claim 4 , wherein determining whether at least one redundant index has been detected in the number of indices associated with the one or more primitives of the compressed index buffer block includes: reading, from the index buffer, one or more indices associated with a first primitive of the one or more primitives; reading, from the index buffer, one or more indices associated with a second primitive of the one or more primitives; determining that at least one index from the one or more indices associated with the second primitive corresponds to the at least one index from the one or more indices associated with the first primitive; omitting, from the data block, the at least one index associated with the second primitive based on determining that the at least one index from the one or more indices associated with the second primitive corresponds to the at least one index from the one or more indices associated with the first primitive, the at least one index associated with the second primitive corresponding to the at least one redundant index; and identifying one or more unique indices following omission of the at least one index associated with the second primitive. 6. The method of claim 5 , further comprising: determining connectivity information for the one or more selected primitives, the connectivity information including a distinct array for each of the one or more selected primitives having three values each corresponding to a location of at least one unique index of the one or more unique indices along a sequential order; and identifying a minimum index from each of the one or more primitives of at least the portion of the mesh. 7. The method of claim 6 , wherein the compressed index buffer block is stored according to an index compression scheme. 8. The method of claim 1 , further comprising: reading, from the compressed index buffer block in the index buffer, each of the one or more unique indices into a corresponding one or more shader lanes; determining each of the number of indices based on reading each of the one or more unique indices into the corresponding one or more shader lanes; transforming a vertex position associated with each of the one or more unique indices in the one or more shader lanes according to a first transform function; and storing each of the transformed vertex positions in groupshared memory. 9. The method of claim 3 , further comprising: reading an array of connectivity information per shader lane; reading one or more transformed vertex positions from the groupshared memory per shader lane based on the connectivity information; performing a cull procedure to omit at least a portion of the one or more primitives from the mesh; and providing the number of indices associated with one or more non-omitted primitives. 10. The method of claim 3 , further comprising: reading an array of connectivity information per shader lane; reading one or more transformed vertex positions from the groupshared memory; performing a cull procedure to omit at least a portion of the one or more primitives from the mesh, the cull procedure resulting in one or more non-omitted primitives; and indicating at least one of one or more non-omitted primitives or at least one vertex associated with the one or more non-omitted primitives as non-omitted. 11. The method of claim 10 , further comprising: providing a position of each vertex associated with the one or more non-omitted primitives; reading at least one attribute for each vertex associated with the one or more non-omitted primitives, the at least one attribute representing one or more input values to a vertex shader from a vertex buffer; and transforming each of the at least one attribute according to a second transform function. 12. The method of claim 1 , wherein the API includes a mesh shader having at least two grouped shader stages including a vertex shader stage and a geometry shader stage. 13. The method of claim 1 , wherein the number of primitives correspond to a number of triangles. 14. A computer device, comprising: a memory; and at an application program interface (API) in communication with a graphics processing unit (GPU) in communication with the memory, wherein the GPU is configured to: determine whether at least one redundant index has been detected in a number of indices associated with a one or more primitives of a compressed index buffer block; in accordance with a determination that at least one redundant index has been detected in the number of indices, remove the at least one redundant index
Memory management · CPC title
Parallel processing · CPC title
Processor architectures; Processor configuration, e.g. pipelining · CPC title
Level of detail · CPC title
Model-based coding, e.g. wire frame · CPC title
Related publications grouped by family.
Answers are generated from the same data shown on this page.