]> git.cworth.org Git - apitrace/blob - common/trace_parser_flags.cpp
common: Set flags for D3D11.1 calls too.
[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     { "ID3D11DeviceContext1::Draw",                          CALL_FLAG_RENDER },
76     { "ID3D11DeviceContext1::DrawAuto",                      CALL_FLAG_RENDER },
77     { "ID3D11DeviceContext1::DrawIndexed",                   CALL_FLAG_RENDER },
78     { "ID3D11DeviceContext1::DrawIndexedInstanced",          CALL_FLAG_RENDER },
79     { "ID3D11DeviceContext1::DrawIndexedInstancedIndirect",  CALL_FLAG_RENDER },
80     { "ID3D11DeviceContext1::DrawInstanced",                 CALL_FLAG_RENDER },
81     { "ID3D11DeviceContext1::DrawInstancedIndirect",         CALL_FLAG_RENDER },
82     { "ID3D11DeviceContext1::OMSetRenderTargets",       CALL_FLAG_SWAP_RENDERTARGET },
83     { "ID3D11DeviceContext1::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET },
84     { "ID3D11DeviceContext::Draw",                          CALL_FLAG_RENDER },
85     { "ID3D11DeviceContext::DrawAuto",                      CALL_FLAG_RENDER },
86     { "ID3D11DeviceContext::DrawIndexed",                   CALL_FLAG_RENDER },
87     { "ID3D11DeviceContext::DrawIndexedInstanced",          CALL_FLAG_RENDER },
88     { "ID3D11DeviceContext::DrawIndexedInstancedIndirect",  CALL_FLAG_RENDER },
89     { "ID3D11DeviceContext::DrawInstanced",                 CALL_FLAG_RENDER },
90     { "ID3D11DeviceContext::DrawInstancedIndirect",         CALL_FLAG_RENDER },
91     { "ID3D11DeviceContext::OMSetRenderTargets",       CALL_FLAG_SWAP_RENDERTARGET },
92     { "ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET },
93     { "IDXGISwapChain::Present",                       CALL_FLAG_SWAPBUFFERS },
94     { "IDXGISwapChainDWM::Present",                    CALL_FLAG_SWAPBUFFERS },
95     { "IDirect3D9::CheckDeviceFormat",                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
96     { "IDirect3D9::EnumAdapterModes",                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
97     { "IDirect3D9::GetAdapterModeCount",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
98     { "IDirect3D9::GetDeviceCaps",                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
99     { "IDirect3D9Ex::CheckDeviceFormat",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
100     { "IDirect3D9Ex::EnumAdapterModes",                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
101     { "IDirect3D9Ex::GetAdapterModeCount",             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
102     { "IDirect3D9Ex::GetDeviceCaps",                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
103     { "IDirect3DDevice9::Clear",                       CALL_FLAG_RENDER },
104     { "IDirect3DDevice9::DrawIndexedPrimitive",        CALL_FLAG_RENDER },
105     { "IDirect3DDevice9::DrawIndexedPrimitiveUP",      CALL_FLAG_RENDER },
106     { "IDirect3DDevice9::DrawPrimitive",               CALL_FLAG_RENDER },
107     { "IDirect3DDevice9::DrawPrimitiveUP",             CALL_FLAG_RENDER },
108     { "IDirect3DDevice9::DrawRectPatch",               CALL_FLAG_RENDER },
109     { "IDirect3DDevice9::DrawTriPatch",                CALL_FLAG_RENDER },
110     { "IDirect3DDevice9::GetDeviceCaps",               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
111     { "IDirect3DDevice9::GetRenderTargetData",         CALL_FLAG_END_FRAME },
112     { "IDirect3DDevice9::Present",                     CALL_FLAG_SWAPBUFFERS },
113     { "IDirect3DDevice9::SetRenderTarget",             CALL_FLAG_SWAP_RENDERTARGET },
114     { "IDirect3DDevice9Ex::Clear",                     CALL_FLAG_RENDER },
115     { "IDirect3DDevice9Ex::DrawIndexedPrimitive",      CALL_FLAG_RENDER },
116     { "IDirect3DDevice9Ex::DrawIndexedPrimitiveUP",    CALL_FLAG_RENDER },
117     { "IDirect3DDevice9Ex::DrawPrimitive",             CALL_FLAG_RENDER },
118     { "IDirect3DDevice9Ex::DrawPrimitiveUP",           CALL_FLAG_RENDER },
119     { "IDirect3DDevice9Ex::DrawRectPatch",             CALL_FLAG_RENDER },
120     { "IDirect3DDevice9Ex::DrawTriPatch",              CALL_FLAG_RENDER },
121     { "IDirect3DDevice9Ex::GetDeviceCaps",             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
122     { "IDirect3DDevice9Ex::GetRenderTargetData",       CALL_FLAG_END_FRAME },
123     { "IDirect3DDevice9Ex::Present",                   CALL_FLAG_SWAPBUFFERS },
124     { "IDirect3DDevice9Ex::PresentEx",                 CALL_FLAG_SWAPBUFFERS },
125     { "IDirect3DDevice9Ex::SetRenderTarget",           CALL_FLAG_SWAP_RENDERTARGET },
126     { "IDirect3DSwapChain9::Present",                  CALL_FLAG_SWAPBUFFERS },
127     { "IDirect3DSwapChain9Ex::Present",                CALL_FLAG_SWAPBUFFERS },
128     { "eglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
129     { "eglQueryString",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
130     { "eglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
131     { "glBindFramebuffer",                             CALL_FLAG_SWAP_RENDERTARGET },
132     { "glBindFramebufferEXT",                          CALL_FLAG_SWAP_RENDERTARGET },
133     { "glBindFramebufferOES",                          CALL_FLAG_SWAP_RENDERTARGET },
134     { "glBlitFramebuffer",                             CALL_FLAG_RENDER },
135     { "glBlitFramebufferEXT",                          CALL_FLAG_RENDER },
136     { "glCallList",                                    CALL_FLAG_RENDER },
137     { "glCallLists",                                   CALL_FLAG_RENDER },
138     { "glClear",                                       CALL_FLAG_RENDER },
139     { "glDrawArrays",                                  CALL_FLAG_RENDER },
140     { "glDrawArraysEXT",                               CALL_FLAG_RENDER },
141     { "glDrawArraysIndirect",                          CALL_FLAG_RENDER },
142     { "glDrawArraysInstanced",                         CALL_FLAG_RENDER },
143     { "glDrawArraysInstancedARB",                      CALL_FLAG_RENDER },
144     { "glDrawArraysInstancedBaseInstance",             CALL_FLAG_RENDER },
145     { "glDrawArraysInstancedEXT",                      CALL_FLAG_RENDER },
146     { "glDrawElements",                                CALL_FLAG_RENDER },
147     { "glDrawElementsBaseVertex",                      CALL_FLAG_RENDER },
148     { "glDrawElementsIndirect",                        CALL_FLAG_RENDER },
149     { "glDrawElementsInstanced",                       CALL_FLAG_RENDER },
150     { "glDrawElementsInstancedARB",                    CALL_FLAG_RENDER },
151     { "glDrawElementsInstancedBaseInstance",           CALL_FLAG_RENDER },
152     { "glDrawElementsInstancedBaseVertex",             CALL_FLAG_RENDER },
153     { "glDrawElementsInstancedBaseVertexBaseInstance", CALL_FLAG_RENDER },
154     { "glDrawElementsInstancedEXT",                    CALL_FLAG_RENDER },
155     { "glDrawMeshArraysSUN",                           CALL_FLAG_RENDER },
156     { "glDrawPixels",                                  CALL_FLAG_RENDER },
157     { "glDrawRangeElements",                           CALL_FLAG_RENDER },
158     { "glDrawRangeElementsBaseVertex",                 CALL_FLAG_RENDER },
159     { "glDrawRangeElementsEXT",                        CALL_FLAG_RENDER },
160     { "glEnd",                                         CALL_FLAG_RENDER },
161     { "glFrameTerminatorGREMEDY",                      CALL_FLAG_END_FRAME },
162     { "glGetError",                                    CALL_FLAG_NO_SIDE_EFFECTS }, // verbose will be set later for GL_NO_ERROR 
163     { "glGetString",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
164     { "glGetStringi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
165     { "glIsAsyncMarkerSGIX",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
166     { "glIsBuffer",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
167     { "glIsBufferARB",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
168     { "glIsBufferResidentNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
169     { "glIsEnabled",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
170     { "glIsEnabledIndexedEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
171     { "glIsEnabledi",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
172     { "glIsFenceAPPLE",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
173     { "glIsFenceNV",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
174     { "glIsFramebuffer",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
175     { "glIsFramebufferEXT",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
176     { "glIsList",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
177     { "glIsNameAMD",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
178     { "glIsNamedBufferResidentNV",                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
179     { "glIsNamedStringARB",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
180     { "glIsObjectBufferATI",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
181     { "glIsOcclusionQueryNV",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
182     { "glIsProgram",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
183     { "glIsProgramARB",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
184     { "glIsProgramNV",                                 CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
185     { "glIsProgramPipeline",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
186     { "glIsQuery",                                     CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
187     { "glIsQueryARB",                                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
188     { "glIsRenderbuffer",                              CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
189     { "glIsRenderbufferEXT",                           CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
190     { "glIsSampler",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
191     { "glIsShader",                                    CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
192     { "glIsSync",                                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
193     { "glIsTexture",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
194     { "glIsTextureEXT",                                CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
195     { "glIsTransformFeedback",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
196     { "glIsTransformFeedbackNV",                       CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
197     { "glIsVariantEnabledEXT",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
198     { "glIsVertexArray",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
199     { "glIsVertexArrayAPPLE",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
200     { "glIsVertexAttribEnabledAPPLE",                  CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
201     { "glMultiDrawArrays",                             CALL_FLAG_RENDER },
202     { "glMultiDrawArraysEXT",                          CALL_FLAG_RENDER },
203     { "glMultiDrawElements",                           CALL_FLAG_RENDER },
204     { "glMultiDrawElementsBaseVertex",                 CALL_FLAG_RENDER },
205     { "glMultiDrawElementsEXT",                        CALL_FLAG_RENDER },
206     { "glMultiModeDrawArraysIBM",                      CALL_FLAG_RENDER },
207     { "glMultiModeDrawElementsIBM",                    CALL_FLAG_RENDER },
208     { "glXGetClientString",                            CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
209     { "glXGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
210     { "glXGetCurrentDisplay",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
211     { "glXGetCurrentDrawable",                         CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
212     { "glXGetFBConfigAttrib",                          CALL_FLAG_VERBOSE },
213     { "glXGetFBConfigAttribSGIX",                      CALL_FLAG_VERBOSE },
214     { "glXGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
215     { "glXGetProcAddressARB",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
216     { "glXIsDirect",                                   CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
217     { "glXQueryExtension",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
218     { "glXQueryExtensionsString",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
219     { "glXQueryVersion",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
220     { "glXSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
221     { "wglGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
222     { "wglGetCurrentDC",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
223     { "wglGetDefaultProcAddress",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
224     { "wglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
225     { "wglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
226     { "wglSwapLayerBuffers",                           CALL_FLAG_SWAPBUFFERS },
227     { "wglSwapMultipleBuffers",                        CALL_FLAG_SWAPBUFFERS },
228     // NOTE: New entries must be sorted alphabetically
229 };
230
231
232 /**
233  * Lookup call flags by name.
234  */
235 CallFlags
236 Parser::lookupCallFlags(const char *name) {
237     return entryLookup(name, callFlagTable, defaultCallFlags);
238 }