Graphics processors are widely used to render two-dimensional (2D) and three-dimensional (3D) images for various applications, such as video games, graphics programs, computer-aided design (CAD) applications, simulation and visualization tools, and imaging. Display processors may be used to display the rendered output of the graphics processor for presentation to a user via a display device.
Graphics applications, such as 3D graphics applications, may describe or define contents of a scene by invoking application programming interface (API) calls, or instructions, which in turn use the underlying graphics hardware, such as one or more processors in a graphics device, to generate an image. The graphics hardware may undergo a series of state transitions that are exercised through the invocation of these APIs. A full set of states or state transitions for each API call, such as a draw call or instruction, may describe the process with which the image is rendered by the hardware.
In the development of an embedded, hardware-accelerated graphics application, it is often difficult to quantify many aspects of how individual graphics elements (e.g., meshes, polygons, or other graphical primitives) are processed by a graphics processing unit (GPU) hardware device. Such aspects of GPU processing, such as the number of clock cycles devoted to the element, stalls incurred in its rendering, memory bandwidth consumed, etc., constitute highly valuable information for an application developer.