gallium: add new query types and missing documentation
This commit is contained in:
@@ -235,8 +235,7 @@ Queries
|
||||
^^^^^^^
|
||||
|
||||
Queries gather some statistic from the 3D pipeline over one or more
|
||||
draws. Queries may be nested, though no state tracker currently
|
||||
exercises this.
|
||||
draws. Queries may be nested, though only d3d1x currently exercises this.
|
||||
|
||||
Queries can be created with ``create_query`` and deleted with
|
||||
``destroy_query``. To start a query, use ``begin_query``, and when finished,
|
||||
@@ -249,21 +248,73 @@ returned). Otherwise, if the ``wait`` parameter is FALSE, the call
|
||||
will not block and the return value will be TRUE if the query has
|
||||
completed or FALSE otherwise.
|
||||
|
||||
The most common type of query is the occlusion query,
|
||||
``PIPE_QUERY_OCCLUSION_COUNTER``, which counts the number of fragments which
|
||||
The interface currently includes the following types of queries:
|
||||
|
||||
``PIPE_QUERY_OCCLUSION_COUNTER`` counts the number of fragments which
|
||||
are written to the framebuffer without being culled by
|
||||
:ref:`Depth, Stencil, & Alpha` testing or shader KILL instructions.
|
||||
The result is an unsigned 64-bit integer.
|
||||
This query can be used with ``render_condition``.
|
||||
|
||||
In cases where a boolean result of an occlusion query is enough,
|
||||
``PIPE_QUERY_OCCLUSION_PREDICATE`` should be used. It is just like
|
||||
``PIPE_QUERY_OCCLUSION_COUNTER`` except that the result is a boolean
|
||||
value of FALSE for cases where COUNTER would result in 0 and TRUE
|
||||
for all other cases.
|
||||
This query can be used with ``render_condition``.
|
||||
|
||||
Another type of query, ``PIPE_QUERY_TIME_ELAPSED``, returns the amount of
|
||||
time, in nanoseconds, the context takes to perform operations.
|
||||
``PIPE_QUERY_TIME_ELAPSED`` returns the amount of time, in nanoseconds,
|
||||
the context takes to perform operations.
|
||||
The result is an unsigned 64-bit integer.
|
||||
|
||||
``PIPE_QUERY_TIMESTAMP`` returns a device/driver internal timestamp,
|
||||
scaled to nanoseconds, recorded after all commands issued prior to
|
||||
``end_query`` have been processed.
|
||||
This query does not require a call to ``begin_query``.
|
||||
The result is an unsigned 64-bit integer.
|
||||
|
||||
``PIPE_QUERY_TIMESTAMP_DISJOINT`` can be used to check whether the
|
||||
internal timer resolution is good enough to distinguish between the
|
||||
events at ``begin_query`` and ``end_query``.
|
||||
The result is a 64-bit integer specifying the timer resolution in Hz,
|
||||
followed by a boolean value indicating whether the timer has incremented.
|
||||
|
||||
``PIPE_QUERY_PRIMITIVES_GENERATED`` returns a 64-bit integer indicating
|
||||
the number of primitives processed by the pipeline.
|
||||
|
||||
``PIPE_QUERY_PRIMITIVES_EMITTED`` returns a 64-bit integer indicating
|
||||
the number of primitives written to stream output buffers.
|
||||
|
||||
``PIPE_QUERY_SO_STATISTICS`` returns 2 64-bit integers corresponding to
|
||||
the results of
|
||||
``PIPE_QUERY_PRIMITIVES_EMITTED`` and
|
||||
``PIPE_QUERY_PRIMITIVES_GENERATED``, in this order.
|
||||
|
||||
``PIPE_QUERY_SO_OVERFLOW_PREDICATE`` returns a boolean value indicating
|
||||
whether the stream output targets have overflowed as a result of the
|
||||
commands issued between ``begin_query`` and ``end_query``.
|
||||
This query can be used with ``render_condition``.
|
||||
|
||||
``PIPE_QUERY_GPU_FINISHED`` returns a boolean value indicating whether
|
||||
all commands issued before ``end_query`` have completed. However, this
|
||||
does not imply serialization.
|
||||
This query does not require a call to ``begin_query``.
|
||||
|
||||
``PIPE_QUERY_PIPELINE_STATISTICS`` returns an array of the following
|
||||
64-bit integers:
|
||||
Number of vertices read from vertex buffers.
|
||||
Number of primitives read from vertex buffers.
|
||||
Number of vertex shader threads launched.
|
||||
Number of geometry shader threads launched.
|
||||
Number of primitives generated by geometry shaders.
|
||||
Number of primitives forwarded to the rasterizer.
|
||||
Number of primitives rasterized.
|
||||
Number of fragment shader threads launched.
|
||||
Number of tessellation control shader threads launched.
|
||||
Number of tessellation evaluation shader threads launched.
|
||||
If a shader type is not supported by the device/driver,
|
||||
the corresponding values should be set to 0.
|
||||
|
||||
Gallium does not guarantee the availability of any query types; one must
|
||||
always check the capabilities of the :ref:`Screen` first.
|
||||
|
||||
|
Reference in New Issue
Block a user