Input Data and Graph Descriptions
Input Data
The modified graphics driver can log all calls made to the S3 Toolkit. We
trapped the following calls:
- Frame boundaries
- Triangles consisting of vertices with (X,Y,Z,A,R,G,B,U,V,W,D)
- Changes in and out of textured triangle Mode
- Changes in the active texture
- Texture Resolution (width x height x colors)
The file is output in the *.tri format, which is human readable and fairly
self explanatory. We then parse this data using the parse
program, available on the web site.
Output Data - Statistics Generated
Nineteen different graphs which give information about the triangles being
rendered can be generated from any given sequence. Six of these generate
results which are further broken down into untextured (gouraud shaded),
textured, and overall categories. We will now give a brief description of
each graph, which will include the name of the statistics file output by the
parse
program, as well as the name of the generated graphs. In
general graphs are available in .gif and PostScript forms, with the same
prefix. Graphs all have the same prefix as their related data file, and some
may have a <u,t,o> appended which indicates the graph contains
untextured, textured or overall statistics.
Histograms
Triangle Size Data
This is perhaps the most discussed statistic. This graph shows the number of
triangles falling in any given triangle size. It shows any clustering around
particular size, and indicates what sort of demand the application is putting
on the graphics sub-system.
- Stored by the
parse
program in "tri_size.data"
- Graph is titled "tri_size_<u,t,o>{c}.<gif,ps>".
The {c} is unique to this graph and shows a region without the anomalous
spikes at the tail of the triangle size distribution
Aspect Ratio Data
This graph shows a histogram of the number of triangles drawn at various
aspect ratios across the entire sequence. We define aspect ratio as the
height of the bounding box divided by the width, inverted if it is less than
one.
- Stored by the
parse
program in "asp_ratio.data"
- Graph is titled "asp_ratio_<u,t,o>.<gif,ps>"
Horizontal and Vertical Extents
Aspect ratio alone does not show the whole picture, since triangles may be
tall or wide. The horizontal and vertical extent graphs show a histogram of
the number of triangles at a given width or height across the duration of the
sequence being analyzed.
- Stored by the
parse
program in "horizontal.data" and "vertical.data"
- Graph is titled "horizontal_<u,t,o>.<gif,ps>" and
"vertical_<u,t,o>.<gif,ps>"
W Ratios
This graph shows a histogram of the distribution of w-ratios by displaying the
number of triangles at each ratio. This measures the depth extent of
triangles and is important to know for doing perspective corrected texturing
of triangles. It only applies to textured triangles for the data we have.
- Stored by the
parse
program in "w_ratio.data"
- Graph is titled "w_ratio.<gif,ps>"
Per Frame Data
Depth Complexity
This graph gives a good measure of how likely triangles are to overlap, or
how much of the screen is covered with triangles. It also tells you how many
triangles you would be likely to encounter if you went straight back through
the scene to infinite distance. The depth complexity was measured as the
total amount of filled triangle space in the frame divided by the area of the
frame. Note that games like Terminal Velocity have depth complexity of less
than one when a portion of the screen is filled with a bitmap of the sky. The
graph shows the depth complexity for each frame in the sequence.
- Stored by the
parse
program in "depth_complexity.data"
- Graph is titled "depth_complexity_<u,t,o>.<gif,ps>"
Triangles Per Frame
This graphs the number of triangles on a frame by frame basis across the
sequence, and is an indicator of how variable the number of triangles per frame
are.
- Stored by the
parse
program in "tri_frame.data"
- Graph is titled "tri_frame_<u,t,o>.<gif,ps>"
Texture Changes Per Frame
In this graph, the number of switches of the active texture is measured for
each frame in the sequence. This number is good global indicator of the
texture temporal locality that is (or is not) achieved. Clearly it only
relates to textured triangles.
- Stored by the
parse
program in "tex_changes.data"
- Graph is titled "tex_changes.<gif,ps>"
Per Texture Statistics
These statistics relate to the use of individual textures. The structure of
the driver is such, however, that the application does its own management of
textures in memory. The only data that is available to the driver is when the
application changes the address the board uses to texture from. Thus, it is
possible that an application never change the texture address but just
continually swap a new texture to one address which the board uses. For our
texture statistics we just look at when the board is told to use a new
address. Obviously all these statistics only apply to textured triangles.
Average Triangles Per Texture
This gives the average number of triangles per frame that are drawn with any
of the given textures.
- Stored by the
parse
program in "tri_tex.data"
- Graph is titled "tri_tex.<gif,ps>"
Average Pixels Per Texture
This shows the average number of pixels drawn using a particular texture
averaged over all frames. It is a measure of which texture gets the most use.
- Stored by the
parse
program in "pix_tex.data"
- Graph is titled "pix_tex.<gif,ps>"
Average Number of Consecutive Hits
This is perhaps the most interesting of the per texture statistics, since it
indicates how effective caching of textures can be. The number of consecutive
hits to the texture says how many time in a row a given texture is addressed,
this along with texture color depth and size gives a decent idea of the memory
access pattern that these games cause in the graphics sub-system.
- Stored by the
parse
program in "local_tex.data"
- Graph is titled "local_tex.<gif,ps>"
Dot Statistics
Dot statistics are what we call statistics that are taken in direct relation
to the order in which the triangles are sent to the graphics sub-system. For
each of them, a measure is made of the triangle, stored, followed by a
measurement of the next triangle sent to the system. The plots generated
yield a lot of valuable information about the ordering of triangles being sent
to the graphics sub-system.
Average W
This is measured only for textured triangles, and tells what the average depth
of the triangle is (average of nearest and furthest w). In many of the games
which use Painters Algorithm, the dot statistics show clearly the far textures
being drawn at the beginning of the frame, followed by closer and closer ones.
- Stored by the
parse
program in "w_average.dot"
- Graph is titled "w_average_dot.<gif,ps>"
Horizontal and Vertical Extent
This is a time based look at what the horizontal and vertical extents of
triangles are.
- Stored by the
parse
program in "horizontal.dot" and "vertical.dot"
- Graph is titled "horizontal_dot.<gif,ps>" and "vertical_dot.<gif,ps>"
Triangle Area
This shows how how triangle sizes vary during the sequence of triangles being
sent to the graphics sub-system.
- Stored by the
parse
program in "tri_area.dot"
- Graph is titled "tri_area_dot.<gif,ps>"
W-Ratio
This is the time based analog of the w-ratio, and shows ordering effects among
wide w range triangles.
- Stored by the
parse
program in "w_ratio.dot"
- Graph is titled "w_ratio_dot.<gif,ps>"
Aspect Ratio
This is a time based look at the aspect ratio.
- Stored by the
parse
program in "asp_ratio.dot"
- Graph is titled "asp_ratio_dot.<gif,ps>"
Texture Used
This plots the number of the texture being used for each triangle (with
numbers for textures chosen based on which is used earliest in a given
sequence). It is interesting because it gives a good visual idea of the
texture access pattern.
- Stored by the
parse
program in "tex_used.dot"
- Graph is titled "tex_used_dot.<gif,ps>"
Triangle Type
This is boolean graph, where you see all black (or red for the .gif) when a
textured triangle is drawn, and white when a untextured triangle is gone. It
shows how the games order their triangles based on whether or not they are
textured.
- Stored by the
parse
program in "tri_type.dot"
- Graph is titled "tri_type_dot.<gif,ps>"