-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdebuggingandprofiling.html
219 lines (210 loc) · 8.43 KB
/
debuggingandprofiling.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpenGL Insights</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<style type="text/css">
hr {
width: 630px;
margin-left: 0;
}
td.sectionName a,
td.sectionName a:active,
td.sectionName a:visited {
text-decoration: none;
color: #5482AB;
}
td.sectionName a:hover {
text-decoration: underline;
}
td.sectionName span {
font-family: serif;
}
</style>
</head>
<body>
<div class="page">
<a href="index.html"><img class="title" src="http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/images/strip.png" width="639" height="140" alt="OpenGL Insights" /></a>
<table summary="" border="0" width="630">
<tr align="center" class="sitemap">
<td><a href="cover.html">Cover</a></td>
<td><a href="toc.html">Table of Contents</a></td>
<td><a href="pipeline.html">Pipeline Map</a></td>
<td><a href="tips.html">Tips</a></td>
<td><a href="contributors.html">Contributors</a></td>
<td><a href="reviews.html">Reviews</a></td>
<!--
<td><a href="figures.html">Figures</a></td>
<td><a href="bibliography.html">Bibliography</a></td>
-->
<td><a href="bibtex.html">BibTeX</a></td>
<td><a href="errata.html">Errata</a></td>
<td><a href="https://github.com/OpenGLInsights/OpenGLInsightsCode">Code</a></td>
<td><a href="http://blog.openglinsights.com/">Blog</a></td>
<td><a href="http://www.amazon.com/gp/product/1439893764/ref=as_li_tf_il?ie=UTF8&camp=1789&creative=9325&creativeASIN=1439893764&linkCode=as2&tag=opeins-20">Buy</a></td>
</tr>
</table>
<h1>VI Debugging and Profiling</h1>
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td colspan="2">
<p>
We probably often underestimate how powerful the OpenGL API can be. However, programming is less about the result than the process to reach this result. The most impressive rendering is nothing but the end of a path that is, in a large part, debugging and profiling. Unfortunately, OpenGL doesn't have a great reputation on that side. Who really enjoys using glGetError?
</p>
<p>
This part of the OpenGL experience is now history since the release at SIGGRAPH 2010 of the GL ARB debug ouput extension that revolutionizes every day of an OpenGL programmer's life. This revolution is captured by António Ramires and Bruno Oliveira in their chapter "ARB debug output: OpenGL's Solutions for Desperate Developers," which shows every aspect of this extension, how to break the program when an OpenGL error occurs, and even opens on interesting debugging perspectives.
</p>
<p>
Profiling knew an earlier take-off in the world of OpenGL programming thanks to the release of GL EXT timer query in 2006, then standardized within OpenGL 3.3. Thanks to Christopher Lux and his chapter, "The OpenGL Timer Query," this primitive of OpenGL profiling won't hide any secrets any longer.
</p>
<p>
There are two kinds of profiler: the built-in and the external tools, which provide two different approaches to picture profiling. On one side, a profiler tightly connected to application designs and specific use-cases, on other side more generic tools that can embrace all sorts of scenarios and software. The first approach is perfectly reflected by Lionel Fuentes in his chapter "A Real-Time Profiling Tool," which deals with how a built-in real-time profiler can help the game programmer and also the artist creating game assets. Chris Dirks and Omar A. Rodriguez expose the second approach through their chapter "Browser Graphics Analysis and Optimizations," which discuss the utilization of Intel GPA to study WebGL performance.
</p>
<p>
Finally, Aleksandar Dimitrijević offers us two innovative profiling chapters, first introducing us to GPU P-States in his chapter "Performance State Tracking," where he calls our attention to how GPUs reach full speed and how this may affect our performance measurements. He backs his discussion with AMD and NVIDIA proprietary libraries. In his second chapter, he deals with the problem of GPU memory limits. OpenGL doesn't provide functionalities to determine the actual memory usage, but proprietary extensions provide the required information, and Dimitrijević helps us to go through them in his chapter "Monitoring Graphics Memory Usage."
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="ARBdebugoutputAHelpingHandforDesperateDevelopers">
33. <em>ARB_debug_output: A Helping Hand for Desperate Developers</em></a>
<br />
<a href="contributors.html#AntonioRamiresFernandes">António Ramires Fernandes</a> and <a href="contributors.html#BrunoOliveira">Bruno Oliveira</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2033%20ARB_debug_output%20A%20Helping%20Hand%20for%20Desperate%20Developers">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="TheOpenGLTimerQuery">
34. <em>The OpenGL Timer Query</em></a>
<br />
<a href="contributors.html#ChristopherLux">Christopher Lux</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="ARealTimeProfilingTool">
35. <em>A Real-Time Profiling Tool</em></a>
<br />
<a href="contributors.html#LionelFuentes">Lionel Fuentes</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2035%20A%20Real-Time%20Profiling%20Tool">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="BrowserGraphicsAnalysisandOptimizations">
36. <em>Browser Graphics Analysis and Optimizations</em></a>
<br />
<a href="contributors.html#ChrisDirks">Chris Dirks</a> and <a href="contributors.html#OmarARodriguez">Omar A. Rodriguez</a>
</td>
<td width="15%" align="right" class="tipsAPI">WebGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="PerformanceStateTracking">
37. <em>Performance State Tracking</em></a>
<br />
<a href="contributors.html#AleksandarDimitrijevic">Aleksandar Dimitrijevic</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2037%20Performance%20State%20Tracking">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="MonitoringGraphicsMemoryUsage">
38. <em>Monitoring Graphics Memory Usage</em></a>
<br />
<a href="contributors.html#AleksandarDimitrijevic">Aleksandar Dimitrijevic</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2038%20Monitoring%20Graphics%20Memory%20Usage">code</a>
</p>
</td>
</tr>
</table>
<hr />
<h1>Sections</h1>
<ul>
<li><a href="discovering.html">I Discovering</a></li>
<li><a href="renderingtechniques.html">II Rendering Techniques</a></li>
<li><a href="bendingthepipeline.html">III Bending the Pipeline</a></li>
<li><a href="performance.html">IV Performance</a></li>
<li><a href="transfers.html">V Transfers</a></li>
<li>VI Debugging and Profiling</li>
<li><a href="softwaredesign.html">VII Software Design</a></li>
</ul>
</div>
</body>
</html>