]> git.cworth.org Git - apitrace/blob - common/trace_parser_flags.cpp
Merge branch 'master' into d2d
[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     { "eglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
60     { "eglQueryString",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
61     { "eglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
62     { "glBindFramebuffer",                             CALL_FLAG_SWAP_RENDERTARGET },
63     { "glBindFramebufferEXT",                          CALL_FLAG_SWAP_RENDERTARGET },
64     { "glBindFramebufferOES",                          CALL_FLAG_SWAP_RENDERTARGET },
65     { "glBlitFramebuffer",                             CALL_FLAG_RENDER },
66     { "glBlitFramebufferEXT",                          CALL_FLAG_RENDER },
67     { "glClear",                                       CALL_FLAG_RENDER },
68     { "glDrawArrays",                                  CALL_FLAG_RENDER },
69     { "glDrawArraysEXT",                               CALL_FLAG_RENDER },
70     { "glDrawArraysIndirect",                          CALL_FLAG_RENDER },
71     { "glDrawArraysInstanced",                         CALL_FLAG_RENDER },
72     { "glDrawArraysInstancedARB",                      CALL_FLAG_RENDER },
73     { "glDrawArraysInstancedBaseInstance",             CALL_FLAG_RENDER },
74     { "glDrawArraysInstancedEXT",                      CALL_FLAG_RENDER },
75     { "glDrawElements",                                CALL_FLAG_RENDER },
76     { "glDrawElementsBaseVertex",                      CALL_FLAG_RENDER },
77     { "glDrawElementsIndirect",                        CALL_FLAG_RENDER },
78     { "glDrawElementsInstanced",                       CALL_FLAG_RENDER },
79     { "glDrawElementsInstancedARB",                    CALL_FLAG_RENDER },
80     { "glDrawElementsInstancedBaseInstance",           CALL_FLAG_RENDER },
81     { "glDrawElementsInstancedBaseVertex",             CALL_FLAG_RENDER },
82     { "glDrawElementsInstancedBaseVertexBaseInstance", CALL_FLAG_RENDER },
83     { "glDrawElementsInstancedEXT",                    CALL_FLAG_RENDER },
84     { "glDrawMeshArraysSUN",                           CALL_FLAG_RENDER },
85     { "glDrawPixels",                                  CALL_FLAG_RENDER },
86     { "glDrawRangeElements",                           CALL_FLAG_RENDER },
87     { "glDrawRangeElementsBaseVertex",                 CALL_FLAG_RENDER },
88     { "glDrawRangeElementsEXT",                        CALL_FLAG_RENDER },
89     { "glEnd",                                         CALL_FLAG_RENDER },
90     { "glFrameTerminatorGREMEDY",                      CALL_FLAG_END_FRAME },
91     { "glGetError",                                    CALL_FLAG_NO_SIDE_EFFECTS }, // verbose will be set later for GL_NO_ERROR 
92     { "glGetString",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
93     { "glGetStringi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
94     { "glIsAsyncMarkerSGIX",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
95     { "glIsBuffer",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
96     { "glIsBufferARB",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
97     { "glIsBufferResidentNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
98     { "glIsEnabled",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
99     { "glIsEnabledIndexedEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
100     { "glIsEnabledi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
101     { "glIsFenceAPPLE",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
102     { "glIsFenceNV",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
103     { "glIsFramebuffer",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
104     { "glIsFramebufferEXT",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
105     { "glIsList",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
106     { "glIsNameAMD",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
107     { "glIsNamedBufferResidentNV",                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
108     { "glIsNamedStringARB",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
109     { "glIsObjectBufferATI",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
110     { "glIsOcclusionQueryNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
111     { "glIsProgram",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
112     { "glIsProgramARB",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
113     { "glIsProgramNV",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
114     { "glIsProgramPipeline",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
115     { "glIsQuery",                                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
116     { "glIsQueryARB",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
117     { "glIsRenderbuffer",                              CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
118     { "glIsRenderbufferEXT",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
119     { "glIsSampler",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
120     { "glIsShader",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
121     { "glIsSync",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
122     { "glIsTexture",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
123     { "glIsTextureEXT",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
124     { "glIsTransformFeedback",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
125     { "glIsTransformFeedbackNV",                       CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
126     { "glIsVariantEnabledEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
127     { "glIsVertexArray",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
128     { "glIsVertexArrayAPPLE",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
129     { "glIsVertexAttribEnabledAPPLE",                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
130     { "glMultiDrawArrays",                             CALL_FLAG_RENDER },
131     { "glMultiDrawArraysEXT",                          CALL_FLAG_RENDER },
132     { "glMultiDrawElements",                           CALL_FLAG_RENDER },
133     { "glMultiDrawElementsBaseVertex",                 CALL_FLAG_RENDER },
134     { "glMultiDrawElementsEXT",                        CALL_FLAG_RENDER },
135     { "glMultiModeDrawArraysIBM",                      CALL_FLAG_RENDER },
136     { "glMultiModeDrawElementsIBM",                    CALL_FLAG_RENDER },
137     { "glXGetClientString",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
138     { "glXGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
139     { "glXGetCurrentDisplay",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
140     { "glXGetCurrentDrawable",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
141     { "glXGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
142     { "glXGetProcAddressARB",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
143     { "glXIsDirect",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
144     { "glXQueryExtension",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
145     { "glXQueryExtensionsString",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
146     { "glXQueryVersion",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
147     { "glXSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
148     { "wglGetDefaultProcAddress",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
149     { "wglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
150     { "wglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
151     { "wglSwapLayerBuffers",                           CALL_FLAG_SWAPBUFFERS },
152     { "wglSwapMultipleBuffers",                        CALL_FLAG_SWAPBUFFERS },
153     // NOTE: New entries must be sorted alphabetically
154 };
155
156
157 /**
158  * Lookup call flags by name.
159  */
160 CallFlags
161 Parser::lookupCallFlags(const char *name) {
162     return entryLookup(name, callFlagTable, defaultCallFlags);
163 }