]> git.cworth.org Git - apitrace/blob - common/trace_parser_flags.cpp
bad9f5ec41afa16055697b11ffb577917b560287
[apitrace] / common / trace_parser_flags.cpp
1 /**************************************************************************
2  *
3  * Copyright 2011 Jose Fonseca
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 /**
28  * Label functions based on their name.
29  */
30
31
32 #include "trace_lookup.hpp"
33 #include "trace_parser.hpp"
34
35
36 using namespace trace;
37
38
39 /**
40  * Shortcut for SwapBuffers, which terminate and swap bound render buffer.
41  */
42 #define CALL_FLAG_SWAPBUFFERS (CALL_FLAG_END_FRAME | CALL_FLAG_SWAP_RENDERTARGET)
43
44
45
46 /** 
47  * Default call flags.
48  */
49 const CallFlags
50 defaultCallFlags = 0;
51
52
53 /**
54  * Call flags lookup table.
55  */
56 const Entry<CallFlags>
57 callFlagTable[] = {
58     { "CGLFlushDrawable",                              CALL_FLAG_END_FRAME },
59     { "CGLGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
60     { "ID3D10Device1::CheckMultisampleQualityLevels",  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
61     { "ID3D10Device1::Draw",                           CALL_FLAG_RENDER },
62     { "ID3D10Device1::DrawAuto",                       CALL_FLAG_RENDER },
63     { "ID3D10Device1::DrawIndexed",                    CALL_FLAG_RENDER },
64     { "ID3D10Device1::DrawIndexedInstanced",           CALL_FLAG_RENDER },
65     { "ID3D10Device1::DrawInstanced",                  CALL_FLAG_RENDER },
66     { "ID3D10Device1::OMSetRenderTargets",             CALL_FLAG_SWAP_RENDERTARGET },
67     { "ID3D10Device::CheckMultisampleQualityLevels",   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
68     { "ID3D10Device::Draw",                            CALL_FLAG_RENDER },
69     { "ID3D10Device::DrawAuto",                        CALL_FLAG_RENDER },
70     { "ID3D10Device::DrawIndexed",                     CALL_FLAG_RENDER },
71     { "ID3D10Device::DrawIndexedInstanced",            CALL_FLAG_RENDER },
72     { "ID3D10Device::DrawInstanced",                   CALL_FLAG_RENDER },
73     { "ID3D10Device::OMSetRenderTargets",              CALL_FLAG_SWAP_RENDERTARGET },
74     { "ID3D11Device::CheckMultisampleQualityLevels",   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
75     { "ID3D11DeviceContext::Draw",                          CALL_FLAG_RENDER },
76     { "ID3D11DeviceContext::DrawAuto",                      CALL_FLAG_RENDER },
77     { "ID3D11DeviceContext::DrawIndexed",                   CALL_FLAG_RENDER },
78     { "ID3D11DeviceContext::DrawIndexedInstanced",          CALL_FLAG_RENDER },
79     { "ID3D11DeviceContext::DrawIndexedInstancedIndirect",  CALL_FLAG_RENDER },
80     { "ID3D11DeviceContext::DrawInstanced",                 CALL_FLAG_RENDER },
81     { "ID3D11DeviceContext::DrawInstancedIndirect",         CALL_FLAG_RENDER },
82     { "ID3D11DeviceContext::OMSetRenderTargets",       CALL_FLAG_SWAP_RENDERTARGET },
83     { "ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET },
84     { "IDXGISwapChain::Present",                       CALL_FLAG_SWAPBUFFERS },
85     { "IDXGISwapChainDWM::Present",                    CALL_FLAG_SWAPBUFFERS },
86     { "IDirect3D9::CheckDeviceFormat",                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
87     { "IDirect3D9::EnumAdapterModes",                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
88     { "IDirect3D9::GetAdapterModeCount",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
89     { "IDirect3D9::GetDeviceCaps",                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
90     { "IDirect3D9Ex::CheckDeviceFormat",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
91     { "IDirect3D9Ex::EnumAdapterModes",                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
92     { "IDirect3D9Ex::GetAdapterModeCount",             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
93     { "IDirect3D9Ex::GetDeviceCaps",                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
94     { "IDirect3DDevice9::Clear",                       CALL_FLAG_RENDER },
95     { "IDirect3DDevice9::DrawIndexedPrimitive",        CALL_FLAG_RENDER },
96     { "IDirect3DDevice9::DrawIndexedPrimitiveUP",      CALL_FLAG_RENDER },
97     { "IDirect3DDevice9::DrawPrimitive",               CALL_FLAG_RENDER },
98     { "IDirect3DDevice9::DrawPrimitiveUP",             CALL_FLAG_RENDER },
99     { "IDirect3DDevice9::DrawRectPatch",               CALL_FLAG_RENDER },
100     { "IDirect3DDevice9::DrawTriPatch",                CALL_FLAG_RENDER },
101     { "IDirect3DDevice9::GetDeviceCaps",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
102     { "IDirect3DDevice9::GetRenderTargetData",         CALL_FLAG_END_FRAME },
103     { "IDirect3DDevice9::Present",                     CALL_FLAG_SWAPBUFFERS },
104     { "IDirect3DDevice9::SetRenderTarget",             CALL_FLAG_SWAP_RENDERTARGET },
105     { "IDirect3DDevice9Ex::Clear",                     CALL_FLAG_RENDER },
106     { "IDirect3DDevice9Ex::DrawIndexedPrimitive",      CALL_FLAG_RENDER },
107     { "IDirect3DDevice9Ex::DrawIndexedPrimitiveUP",    CALL_FLAG_RENDER },
108     { "IDirect3DDevice9Ex::DrawPrimitive",             CALL_FLAG_RENDER },
109     { "IDirect3DDevice9Ex::DrawPrimitiveUP",           CALL_FLAG_RENDER },
110     { "IDirect3DDevice9Ex::DrawRectPatch",             CALL_FLAG_RENDER },
111     { "IDirect3DDevice9Ex::DrawTriPatch",              CALL_FLAG_RENDER },
112     { "IDirect3DDevice9Ex::GetDeviceCaps",             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
113     { "IDirect3DDevice9Ex::GetRenderTargetData",       CALL_FLAG_END_FRAME },
114     { "IDirect3DDevice9Ex::Present",                   CALL_FLAG_SWAPBUFFERS },
115     { "IDirect3DDevice9Ex::PresentEx",                 CALL_FLAG_SWAPBUFFERS },
116     { "IDirect3DDevice9Ex::SetRenderTarget",           CALL_FLAG_SWAP_RENDERTARGET },
117     { "IDirect3DSwapChain9::Present",                  CALL_FLAG_SWAPBUFFERS },
118     { "IDirect3DSwapChain9Ex::Present",                CALL_FLAG_SWAPBUFFERS },
119     { "eglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
120     { "eglQueryString",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
121     { "eglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
122     { "glBindFramebuffer",                             CALL_FLAG_SWAP_RENDERTARGET },
123     { "glBindFramebufferEXT",                          CALL_FLAG_SWAP_RENDERTARGET },
124     { "glBindFramebufferOES",                          CALL_FLAG_SWAP_RENDERTARGET },
125     { "glBlitFramebuffer",                             CALL_FLAG_RENDER },
126     { "glBlitFramebufferEXT",                          CALL_FLAG_RENDER },
127     { "glCallList",                                    CALL_FLAG_RENDER },
128     { "glCallLists",                                   CALL_FLAG_RENDER },
129     { "glClear",                                       CALL_FLAG_RENDER },
130     { "glDrawArrays",                                  CALL_FLAG_RENDER },
131     { "glDrawArraysEXT",                               CALL_FLAG_RENDER },
132     { "glDrawArraysIndirect",                          CALL_FLAG_RENDER },
133     { "glDrawArraysInstanced",                         CALL_FLAG_RENDER },
134     { "glDrawArraysInstancedARB",                      CALL_FLAG_RENDER },
135     { "glDrawArraysInstancedBaseInstance",             CALL_FLAG_RENDER },
136     { "glDrawArraysInstancedEXT",                      CALL_FLAG_RENDER },
137     { "glDrawElements",                                CALL_FLAG_RENDER },
138     { "glDrawElementsBaseVertex",                      CALL_FLAG_RENDER },
139     { "glDrawElementsIndirect",                        CALL_FLAG_RENDER },
140     { "glDrawElementsInstanced",                       CALL_FLAG_RENDER },
141     { "glDrawElementsInstancedARB",                    CALL_FLAG_RENDER },
142     { "glDrawElementsInstancedBaseInstance",           CALL_FLAG_RENDER },
143     { "glDrawElementsInstancedBaseVertex",             CALL_FLAG_RENDER },
144     { "glDrawElementsInstancedBaseVertexBaseInstance", CALL_FLAG_RENDER },
145     { "glDrawElementsInstancedEXT",                    CALL_FLAG_RENDER },
146     { "glDrawMeshArraysSUN",                           CALL_FLAG_RENDER },
147     { "glDrawPixels",                                  CALL_FLAG_RENDER },
148     { "glDrawRangeElements",                           CALL_FLAG_RENDER },
149     { "glDrawRangeElementsBaseVertex",                 CALL_FLAG_RENDER },
150     { "glDrawRangeElementsEXT",                        CALL_FLAG_RENDER },
151     { "glEnd",                                         CALL_FLAG_RENDER },
152     { "glFrameTerminatorGREMEDY",                      CALL_FLAG_END_FRAME },
153     { "glGetError",                                    CALL_FLAG_NO_SIDE_EFFECTS }, // verbose will be set later for GL_NO_ERROR 
154     { "glGetString",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
155     { "glGetStringi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
156     { "glIsAsyncMarkerSGIX",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
157     { "glIsBuffer",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
158     { "glIsBufferARB",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
159     { "glIsBufferResidentNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
160     { "glIsEnabled",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
161     { "glIsEnabledIndexedEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
162     { "glIsEnabledi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
163     { "glIsFenceAPPLE",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
164     { "glIsFenceNV",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
165     { "glIsFramebuffer",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
166     { "glIsFramebufferEXT",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
167     { "glIsList",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
168     { "glIsNameAMD",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
169     { "glIsNamedBufferResidentNV",                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
170     { "glIsNamedStringARB",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
171     { "glIsObjectBufferATI",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
172     { "glIsOcclusionQueryNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
173     { "glIsProgram",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
174     { "glIsProgramARB",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
175     { "glIsProgramNV",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
176     { "glIsProgramPipeline",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
177     { "glIsQuery",                                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
178     { "glIsQueryARB",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
179     { "glIsRenderbuffer",                              CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
180     { "glIsRenderbufferEXT",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
181     { "glIsSampler",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
182     { "glIsShader",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
183     { "glIsSync",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
184     { "glIsTexture",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
185     { "glIsTextureEXT",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
186     { "glIsTransformFeedback",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
187     { "glIsTransformFeedbackNV",                       CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
188     { "glIsVariantEnabledEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
189     { "glIsVertexArray",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
190     { "glIsVertexArrayAPPLE",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
191     { "glIsVertexAttribEnabledAPPLE",                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
192     { "glMultiDrawArrays",                             CALL_FLAG_RENDER },
193     { "glMultiDrawArraysEXT",                          CALL_FLAG_RENDER },
194     { "glMultiDrawElements",                           CALL_FLAG_RENDER },
195     { "glMultiDrawElementsBaseVertex",                 CALL_FLAG_RENDER },
196     { "glMultiDrawElementsEXT",                        CALL_FLAG_RENDER },
197     { "glMultiModeDrawArraysIBM",                      CALL_FLAG_RENDER },
198     { "glMultiModeDrawElementsIBM",                    CALL_FLAG_RENDER },
199     { "glXGetClientString",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
200     { "glXGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
201     { "glXGetCurrentDisplay",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
202     { "glXGetCurrentDrawable",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
203     { "glXGetFBConfigAttrib",                          CALL_FLAG_VERBOSE },
204     { "glXGetFBConfigAttribSGIX",                      CALL_FLAG_VERBOSE },
205     { "glXGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
206     { "glXGetProcAddressARB",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
207     { "glXIsDirect",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
208     { "glXQueryExtension",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
209     { "glXQueryExtensionsString",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
210     { "glXQueryVersion",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
211     { "glXSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
212     { "wglGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
213     { "wglGetCurrentDC",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
214     { "wglGetDefaultProcAddress",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
215     { "wglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
216     { "wglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
217     { "wglSwapLayerBuffers",                           CALL_FLAG_SWAPBUFFERS },
218     { "wglSwapMultipleBuffers",                        CALL_FLAG_SWAPBUFFERS },
219     // NOTE: New entries must be sorted alphabetically
220 };
221
222
223 /**
224  * Lookup call flags by name.
225  */
226 CallFlags
227 Parser::lookupCallFlags(const char *name) {
228     return entryLookup(name, callFlagTable, defaultCallFlags);
229 }