1 /**************************************************************************
2 *
3 * Copyright 2015 VMware, Inc.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 **************************************************************************/
25
26
27 #include "trace_parser.hpp"
28
29 #include "gtest/gtest.h"
30
31 #include "trace_lookup.hpp"
32
33 using namespace trace;
34
35
36 /**
37 * Shortcut for SwapBuffers, which terminate and swap bound render buffer.
38 */
39 #define CALL_FLAG_SWAPBUFFERS (CALL_FLAG_END_FRAME | CALL_FLAG_SWAP_RENDERTARGET)
40
41
42
43 /**
44 * Call flags lookup table.
45 */
46 static const Entry<CallFlags>
47 entries[] = {
48 { "CGLFlushDrawable", CALL_FLAG_END_FRAME },
49 { "CGLGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
50 { "D3DPERF_BeginEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH },
51 { "D3DPERF_EndEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP },
52 { "D3DPERF_SetMarker", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER },
53 { "ID3D10Device1::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
54 { "ID3D10Device1::Draw", CALL_FLAG_RENDER },
55 { "ID3D10Device1::DrawAuto", CALL_FLAG_RENDER },
56 { "ID3D10Device1::DrawIndexed", CALL_FLAG_RENDER },
57 { "ID3D10Device1::DrawIndexedInstanced", CALL_FLAG_RENDER },
58 { "ID3D10Device1::DrawInstanced", CALL_FLAG_RENDER },
59 { "ID3D10Device1::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET },
60 { "ID3D10Device::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
61 { "ID3D10Device::Draw", CALL_FLAG_RENDER },
62 { "ID3D10Device::DrawAuto", CALL_FLAG_RENDER },
63 { "ID3D10Device::DrawIndexed", CALL_FLAG_RENDER },
64 { "ID3D10Device::DrawIndexedInstanced", CALL_FLAG_RENDER },
65 { "ID3D10Device::DrawInstanced", CALL_FLAG_RENDER },
66 { "ID3D10Device::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET },
67 { "ID3D11Device::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
68 { "ID3D11DeviceContext1::Draw", CALL_FLAG_RENDER },
69 { "ID3D11DeviceContext1::DrawAuto", CALL_FLAG_RENDER },
70 { "ID3D11DeviceContext1::DrawIndexed", CALL_FLAG_RENDER },
71 { "ID3D11DeviceContext1::DrawIndexedInstanced", CALL_FLAG_RENDER },
72 { "ID3D11DeviceContext1::DrawIndexedInstancedIndirect", CALL_FLAG_RENDER },
73 { "ID3D11DeviceContext1::DrawInstanced", CALL_FLAG_RENDER },
74 { "ID3D11DeviceContext1::DrawInstancedIndirect", CALL_FLAG_RENDER },
75 { "ID3D11DeviceContext1::ExecuteCommandList", CALL_FLAG_RENDER },
76 { "ID3D11DeviceContext1::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET },
77 { "ID3D11DeviceContext1::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET },
78 { "ID3D11DeviceContext::Draw", CALL_FLAG_RENDER },
79 { "ID3D11DeviceContext::DrawAuto", CALL_FLAG_RENDER },
80 { "ID3D11DeviceContext::DrawIndexed", CALL_FLAG_RENDER },
81 { "ID3D11DeviceContext::DrawIndexedInstanced", CALL_FLAG_RENDER },
82 { "ID3D11DeviceContext::DrawIndexedInstancedIndirect", CALL_FLAG_RENDER },
83 { "ID3D11DeviceContext::DrawInstanced", CALL_FLAG_RENDER },
84 { "ID3D11DeviceContext::DrawInstancedIndirect", CALL_FLAG_RENDER },
85 { "ID3D11DeviceContext::ExecuteCommandList", CALL_FLAG_RENDER },
86 { "ID3D11DeviceContext::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET },
87 { "ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET },
88 { "ID3DUserDefinedAnnotation::BeginEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH },
89 { "ID3DUserDefinedAnnotation::EndEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP },
90 { "ID3DUserDefinedAnnotation::SetMarker", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER },
91 { "IDXGIDecodeSwapChain::PresentBuffer", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
92 { "IDXGISwapChain1::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
93 { "IDXGISwapChain1::Present1", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
94 { "IDXGISwapChain2::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
95 { "IDXGISwapChain2::Present1", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
96 { "IDXGISwapChain::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
97 { "IDXGISwapChainDWM::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ },
98 { "IDirect3D8::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
99 { "IDirect3D8::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
100 { "IDirect3D8::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
101 { "IDirect3D8::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
102 { "IDirect3D9::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
103 { "IDirect3D9::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
104 { "IDirect3D9::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
105 { "IDirect3D9::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
106 { "IDirect3D9Ex::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
107 { "IDirect3D9Ex::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
108 { "IDirect3D9Ex::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
109 { "IDirect3D9Ex::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
110 { "IDirect3DDevice2::DrawIndexedPrimitive", CALL_FLAG_RENDER },
111 { "IDirect3DDevice2::DrawPrimitive", CALL_FLAG_RENDER },
112 { "IDirect3DDevice3::DrawIndexedPrimitive", CALL_FLAG_RENDER },
113 { "IDirect3DDevice3::DrawIndexedPrimitiveStrided", CALL_FLAG_RENDER },
114 { "IDirect3DDevice3::DrawIndexedPrimitiveVB", CALL_FLAG_RENDER },
115 { "IDirect3DDevice3::DrawPrimitive", CALL_FLAG_RENDER },
116 { "IDirect3DDevice3::DrawPrimitiveStrided", CALL_FLAG_RENDER },
117 { "IDirect3DDevice3::DrawPrimitiveVB", CALL_FLAG_RENDER },
118 { "IDirect3DDevice7::Clear", CALL_FLAG_RENDER },
119 { "IDirect3DDevice7::DrawIndexedPrimitive", CALL_FLAG_RENDER },
120 { "IDirect3DDevice7::DrawIndexedPrimitiveStrided", CALL_FLAG_RENDER },
121 { "IDirect3DDevice7::DrawIndexedPrimitiveVB", CALL_FLAG_RENDER },
122 { "IDirect3DDevice7::DrawPrimitive", CALL_FLAG_RENDER },
123 { "IDirect3DDevice7::DrawPrimitiveStrided", CALL_FLAG_RENDER },
124 { "IDirect3DDevice7::DrawPrimitiveVB", CALL_FLAG_RENDER },
125 { "IDirect3DDevice8::Clear", CALL_FLAG_RENDER },
126 { "IDirect3DDevice8::DrawIndexedPrimitive", CALL_FLAG_RENDER },
127 { "IDirect3DDevice8::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER },
128 { "IDirect3DDevice8::DrawPrimitive", CALL_FLAG_RENDER },
129 { "IDirect3DDevice8::DrawPrimitiveUP", CALL_FLAG_RENDER },
130 { "IDirect3DDevice8::DrawRectPatch", CALL_FLAG_RENDER },
131 { "IDirect3DDevice8::DrawTriPatch", CALL_FLAG_RENDER },
132 { "IDirect3DDevice8::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
133 { "IDirect3DDevice8::Present", CALL_FLAG_SWAPBUFFERS },
134 { "IDirect3DDevice8::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET },
135 { "IDirect3DDevice9::Clear", CALL_FLAG_RENDER },
136 { "IDirect3DDevice9::DrawIndexedPrimitive", CALL_FLAG_RENDER },
137 { "IDirect3DDevice9::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER },
138 { "IDirect3DDevice9::DrawPrimitive", CALL_FLAG_RENDER },
139 { "IDirect3DDevice9::DrawPrimitiveUP", CALL_FLAG_RENDER },
140 { "IDirect3DDevice9::DrawRectPatch", CALL_FLAG_RENDER },
141 { "IDirect3DDevice9::DrawTriPatch", CALL_FLAG_RENDER },
142 { "IDirect3DDevice9::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
143 { "IDirect3DDevice9::GetRenderTargetData", CALL_FLAG_END_FRAME },
144 { "IDirect3DDevice9::Present", CALL_FLAG_SWAPBUFFERS },
145 { "IDirect3DDevice9::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET },
146 { "IDirect3DDevice9Ex::Clear", CALL_FLAG_RENDER },
147 { "IDirect3DDevice9Ex::DrawIndexedPrimitive", CALL_FLAG_RENDER },
148 { "IDirect3DDevice9Ex::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER },
149 { "IDirect3DDevice9Ex::DrawPrimitive", CALL_FLAG_RENDER },
150 { "IDirect3DDevice9Ex::DrawPrimitiveUP", CALL_FLAG_RENDER },
151 { "IDirect3DDevice9Ex::DrawRectPatch", CALL_FLAG_RENDER },
152 { "IDirect3DDevice9Ex::DrawTriPatch", CALL_FLAG_RENDER },
153 { "IDirect3DDevice9Ex::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
154 { "IDirect3DDevice9Ex::GetRenderTargetData", CALL_FLAG_END_FRAME },
155 { "IDirect3DDevice9Ex::Present", CALL_FLAG_SWAPBUFFERS },
156 { "IDirect3DDevice9Ex::PresentEx", CALL_FLAG_SWAPBUFFERS },
157 { "IDirect3DDevice9Ex::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET },
158 { "IDirect3DSwapChain9::Present", CALL_FLAG_SWAPBUFFERS },
159 { "IDirect3DSwapChain9Ex::Present", CALL_FLAG_SWAPBUFFERS },
160 { "IDirect3DViewport2::Clear", CALL_FLAG_RENDER },
161 { "IDirect3DViewport3::Clear", CALL_FLAG_RENDER },
162 { "IDirect3DViewport3::Clear2", CALL_FLAG_RENDER },
163 { "IDirect3DViewport::Clear", CALL_FLAG_RENDER },
164 { "eglGetConfigAttrib", CALL_FLAG_VERBOSE },
165 { "eglGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
166 { "eglQueryString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
167 { "eglSwapBuffers", CALL_FLAG_SWAPBUFFERS },
168 { "glAreProgramsResidentNV", CALL_FLAG_NO_SIDE_EFFECTS },
169 { "glAreTexturesResident", CALL_FLAG_NO_SIDE_EFFECTS },
170 { "glAreTexturesResidentEXT", CALL_FLAG_NO_SIDE_EFFECTS },
171 { "glBindFramebuffer", CALL_FLAG_SWAP_RENDERTARGET },
172 { "glBindFramebufferEXT", CALL_FLAG_SWAP_RENDERTARGET },
173 { "glBindFramebufferOES", CALL_FLAG_SWAP_RENDERTARGET },
174 { "glBlitFramebuffer", CALL_FLAG_RENDER },
175 { "glBlitFramebufferANGLE", CALL_FLAG_RENDER },
176 { "glBlitFramebufferEXT", CALL_FLAG_RENDER },
177 { "glBlitFramebufferNV", CALL_FLAG_RENDER },
178 { "glBufferRegionEnabled", CALL_FLAG_NO_SIDE_EFFECTS },
179 { "glCallList", CALL_FLAG_RENDER },
180 { "glCallLists", CALL_FLAG_RENDER },
181 { "glClear", CALL_FLAG_RENDER },
182 { "glDebugMessageControl", CALL_FLAG_NO_SIDE_EFFECTS },
183 { "glDebugMessageControlARB", CALL_FLAG_NO_SIDE_EFFECTS },
184 { "glDebugMessageEnableAMD", CALL_FLAG_NO_SIDE_EFFECTS },
185 { "glDebugMessageInsert", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER },
186 { "glDebugMessageInsertAMD", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER },
187 { "glDebugMessageInsertARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER },
188 { "glDebugMessageInsertKHR", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER },
189 { "glDrawArrays", CALL_FLAG_RENDER },
190 { "glDrawArraysEXT", CALL_FLAG_RENDER },
191 { "glDrawArraysIndirect", CALL_FLAG_RENDER },
192 { "glDrawArraysInstanced", CALL_FLAG_RENDER },
193 { "glDrawArraysInstancedANGLE", CALL_FLAG_RENDER },
194 { "glDrawArraysInstancedARB", CALL_FLAG_RENDER },
195 { "glDrawArraysInstancedBaseInstance", CALL_FLAG_RENDER },
196 { "glDrawArraysInstancedEXT", CALL_FLAG_RENDER },
197 { "glDrawElements", CALL_FLAG_RENDER },
198 { "glDrawElementsBaseVertex", CALL_FLAG_RENDER },
199 { "glDrawElementsIndirect", CALL_FLAG_RENDER },
200 { "glDrawElementsInstanced", CALL_FLAG_RENDER },
201 { "glDrawElementsInstancedANGLE", CALL_FLAG_RENDER },
202 { "glDrawElementsInstancedARB", CALL_FLAG_RENDER },
203 { "glDrawElementsInstancedBaseInstance", CALL_FLAG_RENDER },
204 { "glDrawElementsInstancedBaseVertex", CALL_FLAG_RENDER },
205 { "glDrawElementsInstancedBaseVertexBaseInstance", CALL_FLAG_RENDER },
206 { "glDrawElementsInstancedEXT", CALL_FLAG_RENDER },
207 { "glDrawMeshArraysSUN", CALL_FLAG_RENDER },
208 { "glDrawPixels", CALL_FLAG_RENDER },
209 { "glDrawRangeElementArrayAPPLE", 0 },
210 { "glDrawRangeElementArrayATI", 0 },
211 { "glDrawRangeElements", CALL_FLAG_RENDER },
212 { "glDrawRangeElementsBaseVertex", CALL_FLAG_RENDER },
213 { "glDrawRangeElementsEXT", CALL_FLAG_RENDER },
214 { "glDrawTransformFeedback", CALL_FLAG_RENDER },
215 { "glDrawTransformFeedbackInstanced", CALL_FLAG_RENDER },
216 { "glDrawTransformFeedbackNV", CALL_FLAG_RENDER },
217 { "glDrawTransformFeedbackStream", CALL_FLAG_RENDER },
218 { "glDrawTransformFeedbackStreamInstanced", CALL_FLAG_RENDER },
219 { "glEnd", CALL_FLAG_RENDER },
220 { "glEvalMesh1", CALL_FLAG_RENDER },
221 { "glEvalMesh2", CALL_FLAG_RENDER },
222 { "glFrameTerminatorGREMEDY", CALL_FLAG_END_FRAME },
223 { "glGetActiveAtomicCounterBufferiv", CALL_FLAG_NO_SIDE_EFFECTS },
224 { "glGetActiveAttrib", CALL_FLAG_NO_SIDE_EFFECTS },
225 { "glGetActiveAttribARB", CALL_FLAG_NO_SIDE_EFFECTS },
226 { "glGetActiveSubroutineName", CALL_FLAG_NO_SIDE_EFFECTS },
227 { "glGetActiveSubroutineUniformName", CALL_FLAG_NO_SIDE_EFFECTS },
228 { "glGetActiveSubroutineUniformiv", CALL_FLAG_NO_SIDE_EFFECTS },
229 { "glGetActiveUniform", CALL_FLAG_NO_SIDE_EFFECTS },
230 { "glGetActiveUniformARB", CALL_FLAG_NO_SIDE_EFFECTS },
231 { "glGetActiveUniformBlockName", CALL_FLAG_NO_SIDE_EFFECTS },
232 { "glGetActiveUniformBlockiv", CALL_FLAG_NO_SIDE_EFFECTS },
233 { "glGetActiveUniformName", CALL_FLAG_NO_SIDE_EFFECTS },
234 { "glGetActiveUniformsiv", CALL_FLAG_NO_SIDE_EFFECTS },
235 { "glGetActiveVaryingNV", CALL_FLAG_NO_SIDE_EFFECTS },
236 { "glGetArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS },
237 { "glGetArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS },
238 { "glGetAttachedObjectsARB", CALL_FLAG_NO_SIDE_EFFECTS },
239 { "glGetAttachedShaders", CALL_FLAG_NO_SIDE_EFFECTS },
240 { "glGetBooleanIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
241 { "glGetBooleani_v", CALL_FLAG_NO_SIDE_EFFECTS },
242 { "glGetBooleanv", CALL_FLAG_NO_SIDE_EFFECTS },
243 { "glGetBufferParameteri64v", CALL_FLAG_NO_SIDE_EFFECTS },
244 { "glGetBufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
245 { "glGetBufferParameterivARB", CALL_FLAG_NO_SIDE_EFFECTS },
246 { "glGetBufferParameterui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
247 { "glGetBufferPointerv", CALL_FLAG_NO_SIDE_EFFECTS },
248 { "glGetBufferPointervARB", CALL_FLAG_NO_SIDE_EFFECTS },
249 { "glGetBufferSubData", CALL_FLAG_NO_SIDE_EFFECTS },
250 { "glGetBufferSubDataARB", CALL_FLAG_NO_SIDE_EFFECTS },
251 { "glGetClipPlane", CALL_FLAG_NO_SIDE_EFFECTS },
252 { "glGetColorTable", CALL_FLAG_NO_SIDE_EFFECTS },
253 { "glGetColorTableEXT", CALL_FLAG_NO_SIDE_EFFECTS },
254 { "glGetColorTableParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
255 { "glGetColorTableParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
256 { "glGetColorTableParameterfvSGI", CALL_FLAG_NO_SIDE_EFFECTS },
257 { "glGetColorTableParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
258 { "glGetColorTableParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
259 { "glGetColorTableParameterivSGI", CALL_FLAG_NO_SIDE_EFFECTS },
260 { "glGetColorTableSGI", CALL_FLAG_NO_SIDE_EFFECTS },
261 { "glGetCombinerInputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
262 { "glGetCombinerInputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS },
263 { "glGetCombinerOutputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
264 { "glGetCombinerOutputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS },
265 { "glGetCombinerStageParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
266 { "glGetConvolutionFilterEXT", CALL_FLAG_NO_SIDE_EFFECTS },
267 { "glGetConvolutionParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
268 { "glGetConvolutionParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
269 { "glGetConvolutionParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
270 { "glGetConvolutionParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
271 { "glGetDetailTexFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
272 { "glGetDoubleIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
273 { "glGetDoublei_v", CALL_FLAG_NO_SIDE_EFFECTS },
274 { "glGetDoublev", CALL_FLAG_NO_SIDE_EFFECTS },
275 { "glGetError", CALL_FLAG_NO_SIDE_EFFECTS }, // verbose will be set later for GL_NO_ERROR
276 { "glGetFenceivNV", CALL_FLAG_NO_SIDE_EFFECTS },
277 { "glGetFinalCombinerInputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
278 { "glGetFinalCombinerInputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS },
279 { "glGetFloatIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
280 { "glGetFloati_v", CALL_FLAG_NO_SIDE_EFFECTS },
281 { "glGetFloatv", CALL_FLAG_NO_SIDE_EFFECTS },
282 { "glGetFogFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
283 { "glGetFragDataIndex", CALL_FLAG_NO_SIDE_EFFECTS },
284 { "glGetFragmentLightfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
285 { "glGetFragmentLightivSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
286 { "glGetFragmentMaterialfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
287 { "glGetFragmentMaterialivSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
288 { "glGetFramebufferAttachmentParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
289 { "glGetFramebufferAttachmentParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
290 { "glGetFramebufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
291 { "glGetFramebufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
292 { "glGetGraphicsResetStatusARB", CALL_FLAG_NO_SIDE_EFFECTS },
293 { "glGetHandleARB", CALL_FLAG_NO_SIDE_EFFECTS },
294 { "glGetHistogramEXT", CALL_FLAG_NO_SIDE_EFFECTS },
295 { "glGetHistogramParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
296 { "glGetHistogramParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
297 { "glGetHistogramParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
298 { "glGetHistogramParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
299 { "glGetImageTransformParameterfvHP", CALL_FLAG_NO_SIDE_EFFECTS },
300 { "glGetImageTransformParameterivHP", CALL_FLAG_NO_SIDE_EFFECTS },
301 { "glGetInfoLogARB", CALL_FLAG_NO_SIDE_EFFECTS },
302 { "glGetInstrumentsSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
303 { "glGetInteger64i_v", CALL_FLAG_NO_SIDE_EFFECTS },
304 { "glGetInteger64v", CALL_FLAG_NO_SIDE_EFFECTS },
305 { "glGetIntegerIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
306 { "glGetIntegeri_v", CALL_FLAG_NO_SIDE_EFFECTS },
307 { "glGetIntegerui64i_vNV", CALL_FLAG_NO_SIDE_EFFECTS },
308 { "glGetIntegerui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
309 { "glGetIntegerv", CALL_FLAG_NO_SIDE_EFFECTS },
310 { "glGetInternalformati64v", CALL_FLAG_NO_SIDE_EFFECTS },
311 { "glGetInternalformativ", CALL_FLAG_NO_SIDE_EFFECTS },
312 { "glGetInvariantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
313 { "glGetInvariantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
314 { "glGetInvariantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
315 { "glGetLightfv", CALL_FLAG_NO_SIDE_EFFECTS },
316 { "glGetLightiv", CALL_FLAG_NO_SIDE_EFFECTS },
317 { "glGetListParameterfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
318 { "glGetListParameterivSGIX", CALL_FLAG_NO_SIDE_EFFECTS },
319 { "glGetLocalConstantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
320 { "glGetLocalConstantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
321 { "glGetLocalConstantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
322 { "glGetMapAttribParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
323 { "glGetMapAttribParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS },
324 { "glGetMapControlPointsNV", CALL_FLAG_NO_SIDE_EFFECTS },
325 { "glGetMapParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
326 { "glGetMapParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS },
327 { "glGetMapdv", CALL_FLAG_NO_SIDE_EFFECTS },
328 { "glGetMapfv", CALL_FLAG_NO_SIDE_EFFECTS },
329 { "glGetMapiv", CALL_FLAG_NO_SIDE_EFFECTS },
330 { "glGetMaterialfv", CALL_FLAG_NO_SIDE_EFFECTS },
331 { "glGetMaterialiv", CALL_FLAG_NO_SIDE_EFFECTS },
332 { "glGetMinmaxEXT", CALL_FLAG_NO_SIDE_EFFECTS },
333 { "glGetMinmaxParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
334 { "glGetMinmaxParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
335 { "glGetMinmaxParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
336 { "glGetMinmaxParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
337 { "glGetMultiTexEnvfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
338 { "glGetMultiTexEnvivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
339 { "glGetMultiTexGendvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
340 { "glGetMultiTexGenfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
341 { "glGetMultiTexGenivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
342 { "glGetMultiTexLevelParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
343 { "glGetMultiTexLevelParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
344 { "glGetMultiTexParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
345 { "glGetMultiTexParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
346 { "glGetMultiTexParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
347 { "glGetMultiTexParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
348 { "glGetMultisamplefv", CALL_FLAG_NO_SIDE_EFFECTS },
349 { "glGetMultisamplefvNV", CALL_FLAG_NO_SIDE_EFFECTS },
350 { "glGetNamedBufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
351 { "glGetNamedBufferParameterui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
352 { "glGetNamedBufferPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
353 { "glGetNamedBufferSubDataEXT", CALL_FLAG_NO_SIDE_EFFECTS },
354 { "glGetNamedFramebufferAttachmentParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
355 { "glGetNamedFramebufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
356 { "glGetNamedProgramLocalParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
357 { "glGetNamedProgramLocalParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
358 { "glGetNamedProgramLocalParameterdvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
359 { "glGetNamedProgramLocalParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
360 { "glGetNamedProgramStringEXT", CALL_FLAG_NO_SIDE_EFFECTS },
361 { "glGetNamedProgramivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
362 { "glGetNamedRenderbufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
363 { "glGetNamedStringARB", CALL_FLAG_NO_SIDE_EFFECTS },
364 { "glGetNamedStringivARB", CALL_FLAG_NO_SIDE_EFFECTS },
365 { "glGetObjectBufferfvATI", CALL_FLAG_NO_SIDE_EFFECTS },
366 { "glGetObjectBufferivATI", CALL_FLAG_NO_SIDE_EFFECTS },
367 { "glGetObjectLabel", CALL_FLAG_NO_SIDE_EFFECTS },
368 { "glGetObjectParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
369 { "glGetObjectParameterivAPPLE", CALL_FLAG_NO_SIDE_EFFECTS },
370 { "glGetObjectParameterivARB", CALL_FLAG_NO_SIDE_EFFECTS },
371 { "glGetObjectPtrLabel", CALL_FLAG_NO_SIDE_EFFECTS },
372 { "glGetOcclusionQueryivNV", CALL_FLAG_NO_SIDE_EFFECTS },
373 { "glGetOcclusionQueryuivNV", CALL_FLAG_NO_SIDE_EFFECTS },
374 { "glGetPerfMonitorCounterDataAMD", CALL_FLAG_NO_SIDE_EFFECTS },
375 { "glGetPerfMonitorCounterInfoAMD", CALL_FLAG_NO_SIDE_EFFECTS },
376 { "glGetPerfMonitorCounterStringAMD", CALL_FLAG_NO_SIDE_EFFECTS },
377 { "glGetPerfMonitorCountersAMD", CALL_FLAG_NO_SIDE_EFFECTS },
378 { "glGetPerfMonitorGroupStringAMD", CALL_FLAG_NO_SIDE_EFFECTS },
379 { "glGetPerfMonitorGroupsAMD", CALL_FLAG_NO_SIDE_EFFECTS },
380 { "glGetPixelTexGenParameterfvSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
381 { "glGetPixelTexGenParameterivSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
382 { "glGetPointerIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
383 { "glGetPointerv", CALL_FLAG_NO_SIDE_EFFECTS },
384 { "glGetPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
385 { "glGetProgramBinary", CALL_FLAG_NO_SIDE_EFFECTS },
386 { "glGetProgramEnvParameterIivNV", CALL_FLAG_NO_SIDE_EFFECTS },
387 { "glGetProgramEnvParameterIuivNV", CALL_FLAG_NO_SIDE_EFFECTS },
388 { "glGetProgramEnvParameterdvARB", CALL_FLAG_NO_SIDE_EFFECTS },
389 { "glGetProgramEnvParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
390 { "glGetProgramInfoLog", CALL_FLAG_NO_SIDE_EFFECTS },
391 { "glGetProgramInterfaceiv", CALL_FLAG_NO_SIDE_EFFECTS },
392 { "glGetProgramLocalParameterIivNV", CALL_FLAG_NO_SIDE_EFFECTS },
393 { "glGetProgramLocalParameterIuivNV", CALL_FLAG_NO_SIDE_EFFECTS },
394 { "glGetProgramLocalParameterdvARB", CALL_FLAG_NO_SIDE_EFFECTS },
395 { "glGetProgramLocalParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
396 { "glGetProgramNamedParameterdvNV", CALL_FLAG_NO_SIDE_EFFECTS },
397 { "glGetProgramNamedParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
398 { "glGetProgramParameterdvNV", CALL_FLAG_NO_SIDE_EFFECTS },
399 { "glGetProgramParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
400 { "glGetProgramPipelineInfoLog", CALL_FLAG_NO_SIDE_EFFECTS },
401 { "glGetProgramPipelineiv", CALL_FLAG_NO_SIDE_EFFECTS },
402 { "glGetProgramResourceIndex", CALL_FLAG_NO_SIDE_EFFECTS },
403 { "glGetProgramResourceLocation", CALL_FLAG_NO_SIDE_EFFECTS },
404 { "glGetProgramResourceLocationIndex", CALL_FLAG_NO_SIDE_EFFECTS },
405 { "glGetProgramResourceName", CALL_FLAG_NO_SIDE_EFFECTS },
406 { "glGetProgramResourceiv", CALL_FLAG_NO_SIDE_EFFECTS },
407 { "glGetProgramStageiv", CALL_FLAG_NO_SIDE_EFFECTS },
408 { "glGetProgramStringARB", CALL_FLAG_NO_SIDE_EFFECTS },
409 { "glGetProgramStringNV", CALL_FLAG_NO_SIDE_EFFECTS },
410 { "glGetProgramSubroutineParameteruivNV", CALL_FLAG_NO_SIDE_EFFECTS },
411 { "glGetProgramiv", CALL_FLAG_NO_SIDE_EFFECTS },
412 { "glGetProgramivARB", CALL_FLAG_NO_SIDE_EFFECTS },
413 { "glGetProgramivNV", CALL_FLAG_NO_SIDE_EFFECTS },
414 { "glGetQueryIndexediv", CALL_FLAG_NO_SIDE_EFFECTS },
415 { "glGetQueryiv", CALL_FLAG_NO_SIDE_EFFECTS },
416 { "glGetQueryivARB", CALL_FLAG_NO_SIDE_EFFECTS },
417 { "glGetRenderbufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
418 { "glGetRenderbufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
419 { "glGetSamplerParameterIiv", CALL_FLAG_NO_SIDE_EFFECTS },
420 { "glGetSamplerParameterIuiv", CALL_FLAG_NO_SIDE_EFFECTS },
421 { "glGetSamplerParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
422 { "glGetSamplerParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
423 { "glGetSeparableFilterEXT", CALL_FLAG_NO_SIDE_EFFECTS },
424 { "glGetShaderInfoLog", CALL_FLAG_NO_SIDE_EFFECTS },
425 { "glGetShaderPrecisionFormat", CALL_FLAG_NO_SIDE_EFFECTS },
426 { "glGetShaderSource", CALL_FLAG_NO_SIDE_EFFECTS },
427 { "glGetShaderSourceARB", CALL_FLAG_NO_SIDE_EFFECTS },
428 { "glGetShaderiv", CALL_FLAG_NO_SIDE_EFFECTS },
429 { "glGetSharpenTexFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
430 { "glGetString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
431 { "glGetStringi", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
432 { "glGetSynciv", CALL_FLAG_NO_SIDE_EFFECTS },
433 { "glGetTexBumpParameterfvATI", CALL_FLAG_NO_SIDE_EFFECTS },
434 { "glGetTexBumpParameterivATI", CALL_FLAG_NO_SIDE_EFFECTS },
435 { "glGetTexEnvfv", CALL_FLAG_NO_SIDE_EFFECTS },
436 { "glGetTexEnviv", CALL_FLAG_NO_SIDE_EFFECTS },
437 { "glGetTexFilterFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS },
438 { "glGetTexGendv", CALL_FLAG_NO_SIDE_EFFECTS },
439 { "glGetTexGenfv", CALL_FLAG_NO_SIDE_EFFECTS },
440 { "glGetTexGeniv", CALL_FLAG_NO_SIDE_EFFECTS },
441 { "glGetTexLevelParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
442 { "glGetTexLevelParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
443 { "glGetTexParameterIiv", CALL_FLAG_NO_SIDE_EFFECTS },
444 { "glGetTexParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
445 { "glGetTexParameterIuiv", CALL_FLAG_NO_SIDE_EFFECTS },
446 { "glGetTexParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
447 { "glGetTexParameterPointervAPPLE", CALL_FLAG_NO_SIDE_EFFECTS },
448 { "glGetTexParameterfv", CALL_FLAG_NO_SIDE_EFFECTS },
449 { "glGetTexParameteriv", CALL_FLAG_NO_SIDE_EFFECTS },
450 { "glGetTextureLevelParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
451 { "glGetTextureLevelParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
452 { "glGetTextureParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
453 { "glGetTextureParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
454 { "glGetTextureParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
455 { "glGetTextureParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
456 { "glGetTrackMatrixivNV", CALL_FLAG_NO_SIDE_EFFECTS },
457 { "glGetTransformFeedbackVarying", CALL_FLAG_NO_SIDE_EFFECTS },
458 { "glGetTransformFeedbackVaryingEXT", CALL_FLAG_NO_SIDE_EFFECTS },
459 { "glGetTransformFeedbackVaryingNV", CALL_FLAG_NO_SIDE_EFFECTS },
460 { "glGetUniformIndices", CALL_FLAG_NO_SIDE_EFFECTS },
461 { "glGetUniformSubroutineuiv", CALL_FLAG_NO_SIDE_EFFECTS },
462 { "glGetUniformdv", CALL_FLAG_NO_SIDE_EFFECTS },
463 { "glGetUniformfv", CALL_FLAG_NO_SIDE_EFFECTS },
464 { "glGetUniformfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
465 { "glGetUniformi64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
466 { "glGetUniformiv", CALL_FLAG_NO_SIDE_EFFECTS },
467 { "glGetUniformivARB", CALL_FLAG_NO_SIDE_EFFECTS },
468 { "glGetUniformui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
469 { "glGetUniformuiv", CALL_FLAG_NO_SIDE_EFFECTS },
470 { "glGetUniformuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
471 { "glGetVariantArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS },
472 { "glGetVariantArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS },
473 { "glGetVariantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
474 { "glGetVariantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
475 { "glGetVariantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
476 { "glGetVariantPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
477 { "glGetVertexArrayIntegeri_vEXT", CALL_FLAG_NO_SIDE_EFFECTS },
478 { "glGetVertexArrayIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
479 { "glGetVertexArrayPointeri_vEXT", CALL_FLAG_NO_SIDE_EFFECTS },
480 { "glGetVertexArrayPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS },
481 { "glGetVertexAttribArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS },
482 { "glGetVertexAttribArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS },
483 { "glGetVertexAttribIiv", CALL_FLAG_NO_SIDE_EFFECTS },
484 { "glGetVertexAttribIivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
485 { "glGetVertexAttribIuiv", CALL_FLAG_NO_SIDE_EFFECTS },
486 { "glGetVertexAttribIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS },
487 { "glGetVertexAttribLdv", CALL_FLAG_NO_SIDE_EFFECTS },
488 { "glGetVertexAttribLdvEXT", CALL_FLAG_NO_SIDE_EFFECTS },
489 { "glGetVertexAttribLi64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
490 { "glGetVertexAttribLui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
491 { "glGetVertexAttribPointerv", CALL_FLAG_NO_SIDE_EFFECTS },
492 { "glGetVertexAttribPointervARB", CALL_FLAG_NO_SIDE_EFFECTS },
493 { "glGetVertexAttribPointervNV", CALL_FLAG_NO_SIDE_EFFECTS },
494 { "glGetVertexAttribdv", CALL_FLAG_NO_SIDE_EFFECTS },
495 { "glGetVertexAttribdvARB", CALL_FLAG_NO_SIDE_EFFECTS },
496 { "glGetVertexAttribdvNV", CALL_FLAG_NO_SIDE_EFFECTS },
497 { "glGetVertexAttribfv", CALL_FLAG_NO_SIDE_EFFECTS },
498 { "glGetVertexAttribfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
499 { "glGetVertexAttribfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
500 { "glGetVertexAttribiv", CALL_FLAG_NO_SIDE_EFFECTS },
501 { "glGetVertexAttribivARB", CALL_FLAG_NO_SIDE_EFFECTS },
502 { "glGetVertexAttribivNV", CALL_FLAG_NO_SIDE_EFFECTS },
503 { "glGetVideoCaptureStreamdvNV", CALL_FLAG_NO_SIDE_EFFECTS },
504 { "glGetVideoCaptureStreamfvNV", CALL_FLAG_NO_SIDE_EFFECTS },
505 { "glGetVideoCaptureStreamivNV", CALL_FLAG_NO_SIDE_EFFECTS },
506 { "glGetVideoCaptureivNV", CALL_FLAG_NO_SIDE_EFFECTS },
507 { "glGetVideoi64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
508 { "glGetVideoivNV", CALL_FLAG_NO_SIDE_EFFECTS },
509 { "glGetVideoui64vNV", CALL_FLAG_NO_SIDE_EFFECTS },
510 { "glGetVideouivNV", CALL_FLAG_NO_SIDE_EFFECTS },
511 { "glGetnMapdvARB", CALL_FLAG_NO_SIDE_EFFECTS },
512 { "glGetnMapfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
513 { "glGetnMapivARB", CALL_FLAG_NO_SIDE_EFFECTS },
514 { "glGetnUniformdvARB", CALL_FLAG_NO_SIDE_EFFECTS },
515 { "glGetnUniformfvARB", CALL_FLAG_NO_SIDE_EFFECTS },
516 { "glGetnUniformivARB", CALL_FLAG_NO_SIDE_EFFECTS },
517 { "glGetnUniformuivARB", CALL_FLAG_NO_SIDE_EFFECTS },
518 { "glInsertEventMarkerEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER },
519 { "glIsAsyncMarkerSGIX", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
520 { "glIsBuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
521 { "glIsBufferARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
522 { "glIsBufferResidentNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
523 { "glIsEnabled", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
524 { "glIsEnabledIndexedEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
525 { "glIsEnabledi", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
526 { "glIsFenceAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
527 { "glIsFenceNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
528 { "glIsFramebuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
529 { "glIsFramebufferEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
530 { "glIsList", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
531 { "glIsNameAMD", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
532 { "glIsNamedBufferResidentNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
533 { "glIsNamedStringARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
534 { "glIsObjectBufferATI", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
535 { "glIsOcclusionQueryNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
536 { "glIsProgram", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
537 { "glIsProgramARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
538 { "glIsProgramNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
539 { "glIsProgramPipeline", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
540 { "glIsQuery", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
541 { "glIsQueryARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
542 { "glIsRenderbuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
543 { "glIsRenderbufferEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
544 { "glIsSampler", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
545 { "glIsShader", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
546 { "glIsSync", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
547 { "glIsTexture", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
548 { "glIsTextureEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
549 { "glIsTransformFeedback", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
550 { "glIsTransformFeedbackNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
551 { "glIsVariantEnabledEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
552 { "glIsVertexArray", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
553 { "glIsVertexArrayAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
554 { "glIsVertexAttribEnabledAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
555 { "glMultiDrawArrays", CALL_FLAG_RENDER },
556 { "glMultiDrawArraysEXT", CALL_FLAG_RENDER },
557 { "glMultiDrawArraysIndirect", CALL_FLAG_RENDER },
558 { "glMultiDrawArraysIndirectAMD", CALL_FLAG_RENDER },
559 { "glMultiDrawArraysIndirectBindlessNV", CALL_FLAG_RENDER },
560 { "glMultiDrawArraysIndirectCountARB", CALL_FLAG_RENDER },
561 { "glMultiDrawElementArrayAPPLE", 0 },
562 { "glMultiDrawElements", CALL_FLAG_RENDER },
563 { "glMultiDrawElementsBaseVertex", CALL_FLAG_RENDER },
564 { "glMultiDrawElementsEXT", CALL_FLAG_RENDER },
565 { "glMultiDrawElementsIndirect", CALL_FLAG_RENDER },
566 { "glMultiDrawElementsIndirectAMD", CALL_FLAG_RENDER },
567 { "glMultiDrawElementsIndirectBindlessNV", CALL_FLAG_RENDER },
568 { "glMultiDrawElementsIndirectCountARB", CALL_FLAG_RENDER },
569 { "glMultiDrawRangeElementArrayAPPLE", 0 },
570 { "glMultiModeDrawArraysIBM", CALL_FLAG_RENDER },
571 { "glMultiModeDrawElementsIBM", CALL_FLAG_RENDER },
572 { "glObjectLabel", CALL_FLAG_NO_SIDE_EFFECTS },
573 { "glObjectLabelKHR", CALL_FLAG_NO_SIDE_EFFECTS },
574 { "glObjectPtrLabel", CALL_FLAG_NO_SIDE_EFFECTS },
575 { "glObjectPtrLabelKHR", CALL_FLAG_NO_SIDE_EFFECTS },
576 { "glPopDebugGroup", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP},
577 { "glPopDebugGroupKHR", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP},
578 { "glPopGroupMarkerEXT", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP},
579 { "glPushDebugGroup", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH },
580 { "glPushDebugGroupKHR", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH },
581 { "glPushGroupMarkerEXT", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH },
582 { "glRectd", CALL_FLAG_RENDER },
583 { "glRectdv", CALL_FLAG_RENDER },
584 { "glRectf", CALL_FLAG_RENDER },
585 { "glRectfv", CALL_FLAG_RENDER },
586 { "glRecti", CALL_FLAG_RENDER },
587 { "glRectiv", CALL_FLAG_RENDER },
588 { "glRects", CALL_FLAG_RENDER },
589 { "glRectsv", CALL_FLAG_RENDER },
590 { "glStringMarkerGREMEDY", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER },
591 { "glXGetClientString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
592 { "glXGetConfig", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
593 { "glXGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
594 { "glXGetCurrentDisplay", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
595 { "glXGetCurrentDisplayEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
596 { "glXGetCurrentDrawable", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
597 { "glXGetCurrentReadDrawable", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
598 { "glXGetCurrentReadDrawableSGI", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
599 { "glXGetFBConfigAttrib", CALL_FLAG_VERBOSE },
600 { "glXGetFBConfigAttribSGIX", CALL_FLAG_VERBOSE },
601 { "glXGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
602 { "glXGetProcAddressARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
603 { "glXIsDirect", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
604 { "glXQueryExtension", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
605 { "glXQueryExtensionsString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
606 { "glXQueryVersion", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
607 { "glXSwapBuffers", CALL_FLAG_SWAPBUFFERS },
608 { "wglDescribePixelFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
609 { "wglGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
610 { "wglGetCurrentDC", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
611 { "wglGetDefaultProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
612 { "wglGetExtensionsStringARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
613 { "wglGetExtensionsStringEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
614 { "wglGetPixelFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
615 { "wglGetPixelFormatAttribivARB", CALL_FLAG_VERBOSE },
616 { "wglGetPixelFormatAttribivEXT", CALL_FLAG_VERBOSE },
617 { "wglGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
618 { "wglSwapBuffers", CALL_FLAG_SWAPBUFFERS },
619 { "wglSwapLayerBuffers", CALL_FLAG_SWAPBUFFERS },
620 { "wglSwapMultipleBuffers", CALL_FLAG_SWAPBUFFERS },
621 };
622
623
TEST(common_parser,lookupCallFlags)624 TEST(common_parser, lookupCallFlags)
625 {
626 typedef const Entry<CallFlags> * ConstIterator;
627
628 ConstIterator first = &entries[0];
629 ConstIterator last = &entries[sizeof entries / sizeof entries[0]];
630
631 for (ConstIterator it = first; it != last; ++it) {
632 CallFlags flags = Parser::lookupCallFlags(it->name);
633
634 EXPECT_EQ(it->value, flags) << "flags differ for " << it->name;
635 }
636 }
637
638
639 int
main(int argc,char ** argv)640 main(int argc, char **argv)
641 {
642 ::testing::InitGoogleTest(&argc, argv);
643 return RUN_ALL_TESTS();
644 }
645