| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """code generator for GLES2 command buffers.""" | 6 """code generator for GLES2 command buffers.""" |
| 7 | 7 |
| 8 import itertools | 8 import itertools |
| 9 import os | 9 import os |
| 10 import os.path | 10 import os.path |
| (...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1361 ], | 1361 ], |
| 1362 }, | 1362 }, |
| 1363 'ResetStatus': { | 1363 'ResetStatus': { |
| 1364 'type': 'GLenum', | 1364 'type': 'GLenum', |
| 1365 'valid': [ | 1365 'valid': [ |
| 1366 'GL_GUILTY_CONTEXT_RESET_ARB', | 1366 'GL_GUILTY_CONTEXT_RESET_ARB', |
| 1367 'GL_INNOCENT_CONTEXT_RESET_ARB', | 1367 'GL_INNOCENT_CONTEXT_RESET_ARB', |
| 1368 'GL_UNKNOWN_CONTEXT_RESET_ARB', | 1368 'GL_UNKNOWN_CONTEXT_RESET_ARB', |
| 1369 ], | 1369 ], |
| 1370 }, | 1370 }, |
| 1371 'SyncCondition': { |
| 1372 'type': 'GLenum', |
| 1373 'is_complete': True, |
| 1374 'valid': [ |
| 1375 #TODO(zmo): avoid using the direct number. |
| 1376 '0x9117', # GL_SYNC_GPU_COMMANDS_COMPLETE |
| 1377 ], |
| 1378 'invalid': [ |
| 1379 '0', |
| 1380 ], |
| 1381 }, |
| 1382 'SyncFlags': { |
| 1383 'type': 'GLbitfield', |
| 1384 'is_complete': True, |
| 1385 'valid': [ |
| 1386 '0', |
| 1387 ], |
| 1388 'invalid': [ |
| 1389 '1', |
| 1390 ], |
| 1391 }, |
| 1371 } | 1392 } |
| 1372 | 1393 |
| 1373 # This table specifies the different pepper interfaces that are supported for | 1394 # This table specifies the different pepper interfaces that are supported for |
| 1374 # GL commands. 'dev' is true if it's a dev interface. | 1395 # GL commands. 'dev' is true if it's a dev interface. |
| 1375 _PEPPER_INTERFACES = [ | 1396 _PEPPER_INTERFACES = [ |
| 1376 {'name': '', 'dev': False}, | 1397 {'name': '', 'dev': False}, |
| 1377 {'name': 'InstancedArrays', 'dev': False}, | 1398 {'name': 'InstancedArrays', 'dev': False}, |
| 1378 {'name': 'FramebufferBlit', 'dev': False}, | 1399 {'name': 'FramebufferBlit', 'dev': False}, |
| 1379 {'name': 'FramebufferMultisample', 'dev': False}, | 1400 {'name': 'FramebufferMultisample', 'dev': False}, |
| 1380 {'name': 'ChromiumEnableFeature', 'dev': False}, | 1401 {'name': 'ChromiumEnableFeature', 'dev': False}, |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1808 'gl_test_func': 'glDeleteBuffersARB', | 1829 'gl_test_func': 'glDeleteBuffersARB', |
| 1809 'resource_type': 'Buffer', | 1830 'resource_type': 'Buffer', |
| 1810 'resource_types': 'Buffers', | 1831 'resource_types': 'Buffers', |
| 1811 }, | 1832 }, |
| 1812 'DeleteFramebuffers': { | 1833 'DeleteFramebuffers': { |
| 1813 'type': 'DELn', | 1834 'type': 'DELn', |
| 1814 'gl_test_func': 'glDeleteFramebuffersEXT', | 1835 'gl_test_func': 'glDeleteFramebuffersEXT', |
| 1815 'resource_type': 'Framebuffer', | 1836 'resource_type': 'Framebuffer', |
| 1816 'resource_types': 'Framebuffers', | 1837 'resource_types': 'Framebuffers', |
| 1817 }, | 1838 }, |
| 1818 'DeleteProgram': {'type': 'Delete', 'decoder_func': 'DoDeleteProgram'}, | 1839 'DeleteProgram': { 'type': 'Delete' }, |
| 1819 'DeleteRenderbuffers': { | 1840 'DeleteRenderbuffers': { |
| 1820 'type': 'DELn', | 1841 'type': 'DELn', |
| 1821 'gl_test_func': 'glDeleteRenderbuffersEXT', | 1842 'gl_test_func': 'glDeleteRenderbuffersEXT', |
| 1822 'resource_type': 'Renderbuffer', | 1843 'resource_type': 'Renderbuffer', |
| 1823 'resource_types': 'Renderbuffers', | 1844 'resource_types': 'Renderbuffers', |
| 1824 }, | 1845 }, |
| 1825 'DeleteSamplers': { | 1846 'DeleteSamplers': { |
| 1826 'type': 'DELn', | 1847 'type': 'DELn', |
| 1827 'resource_type': 'Sampler', | 1848 'resource_type': 'Sampler', |
| 1828 'resource_types': 'Samplers', | 1849 'resource_types': 'Samplers', |
| 1829 'unsafe': True, | 1850 'unsafe': True, |
| 1830 }, | 1851 }, |
| 1831 'DeleteShader': {'type': 'Delete', 'decoder_func': 'DoDeleteShader'}, | 1852 'DeleteShader': { 'type': 'Delete' }, |
| 1853 'DeleteSync': { |
| 1854 'type': 'Delete', |
| 1855 'cmd_args': 'GLuint sync', |
| 1856 'resource_type': 'Sync', |
| 1857 'unsafe': True, |
| 1858 }, |
| 1832 'DeleteTextures': { | 1859 'DeleteTextures': { |
| 1833 'type': 'DELn', | 1860 'type': 'DELn', |
| 1834 'resource_type': 'Texture', | 1861 'resource_type': 'Texture', |
| 1835 'resource_types': 'Textures', | 1862 'resource_types': 'Textures', |
| 1836 }, | 1863 }, |
| 1837 'DeleteTransformFeedbacks': { | 1864 'DeleteTransformFeedbacks': { |
| 1838 'type': 'DELn', | 1865 'type': 'DELn', |
| 1839 'resource_type': 'TransformFeedback', | 1866 'resource_type': 'TransformFeedback', |
| 1840 'resource_types': 'TransformFeedbacks', | 1867 'resource_types': 'TransformFeedbacks', |
| 1841 'unsafe': True, | 1868 'unsafe': True, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1876 }, | 1903 }, |
| 1877 'Enable': { | 1904 'Enable': { |
| 1878 'decoder_func': 'DoEnable', | 1905 'decoder_func': 'DoEnable', |
| 1879 'impl_func': False, | 1906 'impl_func': False, |
| 1880 'client_test': False, | 1907 'client_test': False, |
| 1881 }, | 1908 }, |
| 1882 'EnableVertexAttribArray': { | 1909 'EnableVertexAttribArray': { |
| 1883 'decoder_func': 'DoEnableVertexAttribArray', | 1910 'decoder_func': 'DoEnableVertexAttribArray', |
| 1884 'impl_decl': False, | 1911 'impl_decl': False, |
| 1885 }, | 1912 }, |
| 1913 'FenceSync': { |
| 1914 'type': 'Create', |
| 1915 'client_test': False, |
| 1916 'unsafe': True, |
| 1917 }, |
| 1886 'Finish': { | 1918 'Finish': { |
| 1887 'impl_func': False, | 1919 'impl_func': False, |
| 1888 'client_test': False, | 1920 'client_test': False, |
| 1889 'decoder_func': 'DoFinish', | 1921 'decoder_func': 'DoFinish', |
| 1890 'defer_reads': True, | 1922 'defer_reads': True, |
| 1891 }, | 1923 }, |
| 1892 'Flush': { | 1924 'Flush': { |
| 1893 'impl_func': False, | 1925 'impl_func': False, |
| 1894 'decoder_func': 'DoFlush', | 1926 'decoder_func': 'DoFlush', |
| 1895 }, | 1927 }, |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2202 'unsafe': True, | 2234 'unsafe': True, |
| 2203 }, | 2235 }, |
| 2204 'IsBuffer': { | 2236 'IsBuffer': { |
| 2205 'type': 'Is', | 2237 'type': 'Is', |
| 2206 'decoder_func': 'DoIsBuffer', | 2238 'decoder_func': 'DoIsBuffer', |
| 2207 'expectation': False, | 2239 'expectation': False, |
| 2208 }, | 2240 }, |
| 2209 'IsEnabled': { | 2241 'IsEnabled': { |
| 2210 'type': 'Is', | 2242 'type': 'Is', |
| 2211 'decoder_func': 'DoIsEnabled', | 2243 'decoder_func': 'DoIsEnabled', |
| 2244 'client_test': False, |
| 2212 'impl_func': False, | 2245 'impl_func': False, |
| 2213 'expectation': False, | 2246 'expectation': False, |
| 2214 }, | 2247 }, |
| 2215 'IsFramebuffer': { | 2248 'IsFramebuffer': { |
| 2216 'type': 'Is', | 2249 'type': 'Is', |
| 2217 'decoder_func': 'DoIsFramebuffer', | 2250 'decoder_func': 'DoIsFramebuffer', |
| 2218 'expectation': False, | 2251 'expectation': False, |
| 2219 }, | 2252 }, |
| 2220 'IsProgram': { | 2253 'IsProgram': { |
| 2221 'type': 'Is', | 2254 'type': 'Is', |
| 2222 'decoder_func': 'DoIsProgram', | 2255 'decoder_func': 'DoIsProgram', |
| 2223 'expectation': False, | 2256 'expectation': False, |
| 2224 }, | 2257 }, |
| 2225 'IsRenderbuffer': { | 2258 'IsRenderbuffer': { |
| 2226 'type': 'Is', | 2259 'type': 'Is', |
| 2227 'decoder_func': 'DoIsRenderbuffer', | 2260 'decoder_func': 'DoIsRenderbuffer', |
| 2228 'expectation': False, | 2261 'expectation': False, |
| 2229 }, | 2262 }, |
| 2230 'IsShader': { | 2263 'IsShader': { |
| 2231 'type': 'Is', | 2264 'type': 'Is', |
| 2232 'decoder_func': 'DoIsShader', | 2265 'decoder_func': 'DoIsShader', |
| 2233 'expectation': False, | 2266 'expectation': False, |
| 2234 }, | 2267 }, |
| 2235 'IsSampler': { | 2268 'IsSampler': { |
| 2236 'type': 'Is', | 2269 'type': 'Is', |
| 2237 'id_mapping': [ 'Sampler' ], | 2270 'id_mapping': [ 'Sampler' ], |
| 2238 'expectation': False, | 2271 'expectation': False, |
| 2239 'unsafe': True, | 2272 'unsafe': True, |
| 2240 }, | 2273 }, |
| 2274 'IsSync': { |
| 2275 'type': 'Is', |
| 2276 'id_mapping': [ 'Sync' ], |
| 2277 'cmd_args': 'GLuint sync', |
| 2278 'expectation': False, |
| 2279 'unsafe': True, |
| 2280 }, |
| 2241 'IsTexture': { | 2281 'IsTexture': { |
| 2242 'type': 'Is', | 2282 'type': 'Is', |
| 2243 'decoder_func': 'DoIsTexture', | 2283 'decoder_func': 'DoIsTexture', |
| 2244 'expectation': False, | 2284 'expectation': False, |
| 2245 }, | 2285 }, |
| 2246 'IsTransformFeedback': { | 2286 'IsTransformFeedback': { |
| 2247 'type': 'Is', | 2287 'type': 'Is', |
| 2248 'id_mapping': [ 'TransformFeedback' ], | 2288 'id_mapping': [ 'TransformFeedback' ], |
| 2249 'expectation': False, | 2289 'expectation': False, |
| 2250 'unsafe': True, | 2290 'unsafe': True, |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2391 'gl_test_func': 'glSamplerParameteri', | 2431 'gl_test_func': 'glSamplerParameteri', |
| 2392 'decoder_func': 'DoSamplerParameteriv', | 2432 'decoder_func': 'DoSamplerParameteriv', |
| 2393 'first_element_only': True, | 2433 'first_element_only': True, |
| 2394 'unsafe': True, | 2434 'unsafe': True, |
| 2395 }, | 2435 }, |
| 2396 'ShaderBinary': { | 2436 'ShaderBinary': { |
| 2397 'type': 'Custom', | 2437 'type': 'Custom', |
| 2398 'client_test': False, | 2438 'client_test': False, |
| 2399 }, | 2439 }, |
| 2400 'ShaderSource': { | 2440 'ShaderSource': { |
| 2401 'type': 'Manual', | 2441 'type': 'PUTSTR', |
| 2442 'decoder_func': 'DoShaderSource', |
| 2402 'data_transfer_methods': ['bucket'], | 2443 'data_transfer_methods': ['bucket'], |
| 2403 'needs_size': True, | |
| 2404 'client_test': False, | 2444 'client_test': False, |
| 2405 'cmd_args': | 2445 'cmd_args': |
| 2406 'GLuint shader, const char* data', | 2446 'GLuint shader, const char** str', |
| 2407 'pepper_args': | 2447 'pepper_args': |
| 2408 'GLuint shader, GLsizei count, const char** str, const GLint* length', | 2448 'GLuint shader, GLsizei count, const char** str, const GLint* length', |
| 2409 }, | 2449 }, |
| 2410 'StencilMask': { | 2450 'StencilMask': { |
| 2411 'type': 'StateSetFrontBack', | 2451 'type': 'StateSetFrontBack', |
| 2412 'state': 'StencilMask', | 2452 'state': 'StencilMask', |
| 2413 'no_gl': True, | 2453 'no_gl': True, |
| 2414 'expectation': False, | 2454 'expectation': False, |
| 2415 }, | 2455 }, |
| 2416 'StencilMaskSeparate': { | 2456 'StencilMaskSeparate': { |
| (...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3376 | 3416 |
| 3377 def WriteGetDataSizeCode(self, func, file): | 3417 def WriteGetDataSizeCode(self, func, file): |
| 3378 """Writes the code to set data_size used in validation""" | 3418 """Writes the code to set data_size used in validation""" |
| 3379 pass | 3419 pass |
| 3380 | 3420 |
| 3381 def WriteImmediateCmdSizeTest(self, func, file): | 3421 def WriteImmediateCmdSizeTest(self, func, file): |
| 3382 """Writes a size test for an immediate version of a command.""" | 3422 """Writes a size test for an immediate version of a command.""" |
| 3383 file.Write(" // TODO(gman): Compute correct size.\n") | 3423 file.Write(" // TODO(gman): Compute correct size.\n") |
| 3384 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") | 3424 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") |
| 3385 | 3425 |
| 3426 def __WriteIdMapping(self, func, file): |
| 3427 """Writes client side / service side ID mapping.""" |
| 3428 if not func.IsUnsafe() or not func.GetInfo('id_mapping'): |
| 3429 return |
| 3430 for id_type in func.GetInfo('id_mapping'): |
| 3431 file.Write(" group_->Get%sServiceId(%s, &%s);\n" % |
| 3432 (id_type, id_type.lower(), id_type.lower())) |
| 3433 |
| 3386 def WriteImmediateHandlerImplementation (self, func, file): | 3434 def WriteImmediateHandlerImplementation (self, func, file): |
| 3387 """Writes the handler impl for the immediate version of a command.""" | 3435 """Writes the handler impl for the immediate version of a command.""" |
| 3388 if func.IsUnsafe() and func.GetInfo('id_mapping'): | 3436 self.__WriteIdMapping(func, file) |
| 3389 for id_type in func.GetInfo('id_mapping'): | |
| 3390 file.Write(" group_->Get%sServiceId(%s, &%s);\n" % | |
| 3391 (id_type, id_type.lower(), id_type.lower())) | |
| 3392 file.Write(" %s(%s);\n" % | 3437 file.Write(" %s(%s);\n" % |
| 3393 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 3438 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
| 3394 | 3439 |
| 3395 def WriteBucketHandlerImplementation (self, func, file): | 3440 def WriteBucketHandlerImplementation (self, func, file): |
| 3396 """Writes the handler impl for the bucket version of a command.""" | 3441 """Writes the handler impl for the bucket version of a command.""" |
| 3442 self.__WriteIdMapping(func, file) |
| 3397 file.Write(" %s(%s);\n" % | 3443 file.Write(" %s(%s);\n" % |
| 3398 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 3444 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
| 3399 | 3445 |
| 3400 def WriteServiceHandlerFunctionHeader(self, func, file): | 3446 def WriteServiceHandlerFunctionHeader(self, func, file): |
| 3401 """Writes function header for service implementation handlers.""" | 3447 """Writes function header for service implementation handlers.""" |
| 3402 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( | 3448 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( |
| 3403 uint32_t immediate_data_size, const void* cmd_data) { | 3449 uint32_t immediate_data_size, const void* cmd_data) { |
| 3404 """ % {'name': func.name}) | 3450 """ % {'name': func.name}) |
| 3405 if func.IsUnsafe(): | 3451 if func.IsUnsafe(): |
| 3406 file.Write("""if (!unsafe_es3_apis_enabled()) | 3452 file.Write("""if (!unsafe_es3_apis_enabled()) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3442 func.WriteHandlerImplementation(file) | 3488 func.WriteHandlerImplementation(file) |
| 3443 file.Write(" return error::kNoError;\n") | 3489 file.Write(" return error::kNoError;\n") |
| 3444 file.Write("}\n") | 3490 file.Write("}\n") |
| 3445 file.Write("\n") | 3491 file.Write("\n") |
| 3446 | 3492 |
| 3447 def WriteBucketServiceImplementation(self, func, file): | 3493 def WriteBucketServiceImplementation(self, func, file): |
| 3448 """Writes the service implementation for a bucket version of command.""" | 3494 """Writes the service implementation for a bucket version of command.""" |
| 3449 self.WriteServiceHandlerFunctionHeader(func, file) | 3495 self.WriteServiceHandlerFunctionHeader(func, file) |
| 3450 self.WriteHandlerExtensionCheck(func, file) | 3496 self.WriteHandlerExtensionCheck(func, file) |
| 3451 self.WriteHandlerDeferReadWrite(func, file); | 3497 self.WriteHandlerDeferReadWrite(func, file); |
| 3452 for arg in func.GetOriginalArgs(): | 3498 for arg in func.GetCmdArgs(): |
| 3453 if arg.IsPointer(): | |
| 3454 self.WriteGetDataSizeCode(func, file) | |
| 3455 arg.WriteGetCode(file) | 3499 arg.WriteGetCode(file) |
| 3456 func.WriteHandlerValidation(file) | 3500 func.WriteHandlerValidation(file) |
| 3457 func.WriteHandlerImplementation(file) | 3501 func.WriteHandlerImplementation(file) |
| 3458 file.Write(" return error::kNoError;\n") | 3502 file.Write(" return error::kNoError;\n") |
| 3459 file.Write("}\n") | 3503 file.Write("}\n") |
| 3460 file.Write("\n") | 3504 file.Write("\n") |
| 3461 | 3505 |
| 3462 def WriteHandlerExtensionCheck(self, func, file): | 3506 def WriteHandlerExtensionCheck(self, func, file): |
| 3463 if func.GetInfo('extension_flag'): | 3507 if func.GetInfo('extension_flag'): |
| 3464 file.Write(" if (!features().%s) {\n" % func.GetInfo('extension_flag')) | 3508 file.Write(" if (!features().%s) {\n" % func.GetInfo('extension_flag')) |
| (...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4245 pass | 4289 pass |
| 4246 | 4290 |
| 4247 def WriteBucketServiceImplementation(self, func, file): | 4291 def WriteBucketServiceImplementation(self, func, file): |
| 4248 """Overrriden from TypeHandler.""" | 4292 """Overrriden from TypeHandler.""" |
| 4249 pass | 4293 pass |
| 4250 | 4294 |
| 4251 def WriteImmediateCmdHelper(self, func, file): | 4295 def WriteImmediateCmdHelper(self, func, file): |
| 4252 """Overrriden from TypeHandler.""" | 4296 """Overrriden from TypeHandler.""" |
| 4253 pass | 4297 pass |
| 4254 | 4298 |
| 4255 def WriteBucketCmdHelper(self, func, file): | |
| 4256 """Overrriden from TypeHandler.""" | |
| 4257 pass | |
| 4258 | |
| 4259 def WriteCmdHelper(self, func, file): | 4299 def WriteCmdHelper(self, func, file): |
| 4260 """Overrriden from TypeHandler.""" | 4300 """Overrriden from TypeHandler.""" |
| 4261 pass | 4301 pass |
| 4262 | 4302 |
| 4263 def WriteFormatTest(self, func, file): | 4303 def WriteFormatTest(self, func, file): |
| 4264 """Overrriden from TypeHandler.""" | 4304 """Overrriden from TypeHandler.""" |
| 4265 file.Write("// TODO(gman): Write test for %s\n" % func.name) | 4305 file.Write("// TODO(gman): Write test for %s\n" % func.name) |
| 4266 | 4306 |
| 4267 def WriteImmediateFormatTest(self, func, file): | 4307 def WriteImmediateFormatTest(self, func, file): |
| 4268 """Overrriden from TypeHandler.""" | 4308 """Overrriden from TypeHandler.""" |
| (...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4935 class CreateHandler(TypeHandler): | 4975 class CreateHandler(TypeHandler): |
| 4936 """Handler for glCreate___ type functions.""" | 4976 """Handler for glCreate___ type functions.""" |
| 4937 | 4977 |
| 4938 def __init__(self): | 4978 def __init__(self): |
| 4939 TypeHandler.__init__(self) | 4979 TypeHandler.__init__(self) |
| 4940 | 4980 |
| 4941 def InitFunction(self, func): | 4981 def InitFunction(self, func): |
| 4942 """Overrriden from TypeHandler.""" | 4982 """Overrriden from TypeHandler.""" |
| 4943 func.AddCmdArg(Argument("client_id", 'uint32_t')) | 4983 func.AddCmdArg(Argument("client_id", 'uint32_t')) |
| 4944 | 4984 |
| 4985 def __GetResourceType(self, func): |
| 4986 if func.return_type == "GLsync": |
| 4987 return "Sync" |
| 4988 else: |
| 4989 return func.name[6:] # Create* |
| 4990 |
| 4945 def WriteServiceUnitTest(self, func, file, *extras): | 4991 def WriteServiceUnitTest(self, func, file, *extras): |
| 4946 """Overrriden from TypeHandler.""" | 4992 """Overrriden from TypeHandler.""" |
| 4947 valid_test = """ | 4993 valid_test = """ |
| 4948 TEST_P(%(test_name)s, %(name)sValidArgs) { | 4994 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 4949 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) | 4995 %(id_type_cast)sEXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) |
| 4950 .WillOnce(Return(kNewServiceId)); | 4996 .WillOnce(Return(%(const_service_id)s)); |
| 4951 SpecializedSetup<cmds::%(name)s, 0>(true); | 4997 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 4952 cmds::%(name)s cmd; | 4998 cmds::%(name)s cmd; |
| 4953 cmd.Init(%(args)s%(comma)skNewClientId); | 4999 cmd.Init(%(args)s%(comma)skNewClientId);""" |
| 5000 if func.IsUnsafe(): |
| 5001 valid_test += """ |
| 5002 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 5003 valid_test += """ |
| 4954 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5004 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 4955 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5005 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 4956 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); | 5006 if func.IsUnsafe(): |
| 5007 valid_test += """ |
| 5008 %(return_type)s service_id = 0; |
| 5009 EXPECT_TRUE(Get%(resource_type)sServiceId(kNewClientId, &service_id)); |
| 5010 EXPECT_EQ(%(const_service_id)s, service_id); |
| 5011 decoder_->set_unsafe_es3_apis_enabled(false); |
| 5012 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 5013 } |
| 5014 """ |
| 5015 else: |
| 5016 valid_test += """ |
| 5017 EXPECT_TRUE(Get%(resource_type)s(kNewClientId)); |
| 4957 } | 5018 } |
| 4958 """ | 5019 """ |
| 4959 comma = "" | 5020 comma = "" |
| 4960 if len(func.GetOriginalArgs()): | 5021 cmd_arg_count = 0 |
| 4961 comma =", " | 5022 for arg in func.GetOriginalArgs(): |
| 5023 if not arg.IsConstant(): |
| 5024 cmd_arg_count += 1 |
| 5025 if cmd_arg_count: |
| 5026 comma = ", " |
| 5027 if func.return_type == 'GLsync': |
| 5028 id_type_cast = ("const GLsync kNewServiceIdGLuint = reinterpret_cast" |
| 5029 "<GLsync>(kNewServiceId);\n ") |
| 5030 const_service_id = "kNewServiceIdGLuint" |
| 5031 else: |
| 5032 id_type_cast = "" |
| 5033 const_service_id = "kNewServiceId" |
| 4962 self.WriteValidUnitTest(func, file, valid_test, { | 5034 self.WriteValidUnitTest(func, file, valid_test, { |
| 4963 'comma': comma, | 5035 'comma': comma, |
| 4964 'resource_type': func.name[6:], | 5036 'resource_type': self.__GetResourceType(func), |
| 5037 'return_type': func.return_type, |
| 5038 'id_type_cast': id_type_cast, |
| 5039 'const_service_id': const_service_id, |
| 4965 }, *extras) | 5040 }, *extras) |
| 4966 invalid_test = """ | 5041 invalid_test = """ |
| 4967 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 5042 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
| 4968 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 5043 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
| 4969 SpecializedSetup<cmds::%(name)s, 0>(false); | 5044 SpecializedSetup<cmds::%(name)s, 0>(false); |
| 4970 cmds::%(name)s cmd; | 5045 cmds::%(name)s cmd; |
| 4971 cmd.Init(%(args)s%(comma)skNewClientId); | 5046 cmd.Init(%(args)s%(comma)skNewClientId); |
| 4972 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s | 5047 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s |
| 4973 } | 5048 } |
| 4974 """ | 5049 """ |
| 4975 self.WriteInvalidUnitTest(func, file, invalid_test, { | 5050 self.WriteInvalidUnitTest(func, file, invalid_test, { |
| 4976 'comma': comma, | 5051 'comma': comma, |
| 4977 }, *extras) | 5052 }, *extras) |
| 4978 | 5053 |
| 4979 def WriteHandlerImplementation (self, func, file): | 5054 def WriteHandlerImplementation (self, func, file): |
| 4980 """Overrriden from TypeHandler.""" | 5055 """Overrriden from TypeHandler.""" |
| 4981 file.Write(" uint32_t client_id = c.client_id;\n") | 5056 if func.IsUnsafe(): |
| 4982 file.Write(" if (!%sHelper(%s)) {\n" % | 5057 code = """ uint32_t client_id = c.client_id; |
| 4983 (func.name, func.MakeCmdArgString(""))) | 5058 %(return_type)s service_id = 0; |
| 4984 file.Write(" return error::kInvalidArguments;\n") | 5059 if (group_->Get%(resource_name)sServiceId(client_id, &service_id)) { |
| 4985 file.Write(" }\n") | 5060 return error::kInvalidArguments; |
| 5061 } |
| 5062 service_id = %(gl_func_name)s(%(gl_args)s); |
| 5063 if (service_id) { |
| 5064 group_->Add%(resource_name)sId(client_id, service_id); |
| 5065 } |
| 5066 """ |
| 5067 else: |
| 5068 code = """ uint32_t client_id = c.client_id; |
| 5069 if (Get%(resource_name)s(client_id)) { |
| 5070 return error::kInvalidArguments; |
| 5071 } |
| 5072 %(return_type)s service_id = %(gl_func_name)s(%(gl_args)s); |
| 5073 if (service_id) { |
| 5074 Create%(resource_name)s(client_id, service_id%(gl_args_with_comma)s); |
| 5075 } |
| 5076 """ |
| 5077 file.Write(code % { |
| 5078 'resource_name': self.__GetResourceType(func), |
| 5079 'return_type': func.return_type, |
| 5080 'gl_func_name': func.GetGLFunctionName(), |
| 5081 'gl_args': func.MakeOriginalArgString(""), |
| 5082 'gl_args_with_comma': func.MakeOriginalArgString("", True) }) |
| 4986 | 5083 |
| 4987 def WriteGLES2Implementation(self, func, file): | 5084 def WriteGLES2Implementation(self, func, file): |
| 4988 """Overrriden from TypeHandler.""" | 5085 """Overrriden from TypeHandler.""" |
| 4989 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 5086 file.Write("%s GLES2Implementation::%s(%s) {\n" % |
| 4990 (func.return_type, func.original_name, | 5087 (func.return_type, func.original_name, |
| 4991 func.MakeTypedOriginalArgString(""))) | 5088 func.MakeTypedOriginalArgString(""))) |
| 4992 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 5089 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
| 4993 func.WriteDestinationInitalizationValidation(file) | 5090 func.WriteDestinationInitalizationValidation(file) |
| 4994 self.WriteClientGLCallLog(func, file) | 5091 self.WriteClientGLCallLog(func, file) |
| 4995 for arg in func.GetOriginalArgs(): | 5092 for arg in func.GetOriginalArgs(): |
| 4996 arg.WriteClientSideValidationCode(file, func) | 5093 arg.WriteClientSideValidationCode(file, func) |
| 4997 file.Write(" GLuint client_id;\n") | 5094 file.Write(" GLuint client_id;\n") |
| 4998 file.Write( | 5095 if func.return_type == "GLsync": |
| 4999 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n") | 5096 file.Write( |
| 5097 " GetIdHandler(id_namespaces::kSyncs)->\n") |
| 5098 else: |
| 5099 file.Write( |
| 5100 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n") |
| 5000 file.Write(" MakeIds(this, 0, 1, &client_id);\n") | 5101 file.Write(" MakeIds(this, 0, 1, &client_id);\n") |
| 5001 file.Write(" helper_->%s(%s);\n" % | 5102 file.Write(" helper_->%s(%s);\n" % |
| 5002 (func.name, func.MakeCmdArgString(""))) | 5103 (func.name, func.MakeCmdArgString(""))) |
| 5003 file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n') | 5104 file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n') |
| 5004 file.Write(" CheckGLError();\n") | 5105 file.Write(" CheckGLError();\n") |
| 5005 file.Write(" return client_id;\n") | 5106 if func.return_type == "GLsync": |
| 5107 file.Write(" return reinterpret_cast<GLsync>(client_id);\n") |
| 5108 else: |
| 5109 file.Write(" return client_id;\n") |
| 5006 file.Write("}\n") | 5110 file.Write("}\n") |
| 5007 file.Write("\n") | 5111 file.Write("\n") |
| 5008 | 5112 |
| 5009 | 5113 |
| 5010 class DeleteHandler(TypeHandler): | 5114 class DeleteHandler(TypeHandler): |
| 5011 """Handler for glDelete___ single resource type functions.""" | 5115 """Handler for glDelete___ single resource type functions.""" |
| 5012 | 5116 |
| 5013 def __init__(self): | 5117 def __init__(self): |
| 5014 TypeHandler.__init__(self) | 5118 TypeHandler.__init__(self) |
| 5015 | 5119 |
| 5016 def WriteServiceImplementation(self, func, file): | 5120 def WriteServiceImplementation(self, func, file): |
| 5017 """Overrriden from TypeHandler.""" | 5121 """Overrriden from TypeHandler.""" |
| 5122 if func.IsUnsafe(): |
| 5123 TypeHandler.WriteServiceImplementation(self, func, file) |
| 5124 # HandleDeleteShader and HandleDeleteProgram are manually written. |
| 5018 pass | 5125 pass |
| 5019 | 5126 |
| 5020 def WriteGLES2Implementation(self, func, file): | 5127 def WriteGLES2Implementation(self, func, file): |
| 5021 """Overrriden from TypeHandler.""" | 5128 """Overrriden from TypeHandler.""" |
| 5022 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 5129 file.Write("%s GLES2Implementation::%s(%s) {\n" % |
| 5023 (func.return_type, func.original_name, | 5130 (func.return_type, func.original_name, |
| 5024 func.MakeTypedOriginalArgString(""))) | 5131 func.MakeTypedOriginalArgString(""))) |
| 5025 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 5132 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
| 5026 func.WriteDestinationInitalizationValidation(file) | 5133 func.WriteDestinationInitalizationValidation(file) |
| 5027 self.WriteClientGLCallLog(func, file) | 5134 self.WriteClientGLCallLog(func, file) |
| 5028 for arg in func.GetOriginalArgs(): | 5135 for arg in func.GetOriginalArgs(): |
| 5029 arg.WriteClientSideValidationCode(file, func) | 5136 arg.WriteClientSideValidationCode(file, func) |
| 5030 file.Write( | 5137 file.Write( |
| 5031 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name) | 5138 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name) |
| 5032 file.Write(" %sHelper(%s);\n" % | 5139 file.Write(" %sHelper(%s);\n" % |
| 5033 (func.original_name, func.GetOriginalArgs()[-1].name)) | 5140 (func.original_name, func.GetOriginalArgs()[-1].name)) |
| 5034 file.Write(" CheckGLError();\n") | 5141 file.Write(" CheckGLError();\n") |
| 5035 file.Write("}\n") | 5142 file.Write("}\n") |
| 5036 file.Write("\n") | 5143 file.Write("\n") |
| 5037 | 5144 |
| 5145 def WriteHandlerImplementation (self, func, file): |
| 5146 """Overrriden from TypeHandler.""" |
| 5147 assert len(func.GetOriginalArgs()) == 1 |
| 5148 arg = func.GetOriginalArgs()[0] |
| 5149 if func.IsUnsafe(): |
| 5150 file.Write(""" %(arg_type)s service_id = 0; |
| 5151 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { |
| 5152 glDelete%(resource_type)s(service_id); |
| 5153 group_->Remove%(resource_type)sId(%(arg_name)s); |
| 5154 } else { |
| 5155 LOCAL_SET_GL_ERROR( |
| 5156 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); |
| 5157 } |
| 5158 """ % { 'resource_type': func.GetInfo('resource_type'), |
| 5159 'arg_name': arg.name, |
| 5160 'arg_type': arg.type, |
| 5161 'func_name': func.original_name }) |
| 5162 else: |
| 5163 file.Write(" %sHelper(%s);\n" % (func.original_name, arg.name)) |
| 5038 | 5164 |
| 5039 class DELnHandler(TypeHandler): | 5165 class DELnHandler(TypeHandler): |
| 5040 """Handler for glDelete___ type functions.""" | 5166 """Handler for glDelete___ type functions.""" |
| 5041 | 5167 |
| 5042 def __init__(self): | 5168 def __init__(self): |
| 5043 TypeHandler.__init__(self) | 5169 TypeHandler.__init__(self) |
| 5044 | 5170 |
| 5045 def WriteGetDataSizeCode(self, func, file): | 5171 def WriteGetDataSizeCode(self, func, file): |
| 5046 """Overrriden from TypeHandler.""" | 5172 """Overrriden from TypeHandler.""" |
| 5047 code = """ uint32_t data_size; | 5173 code = """ uint32_t data_size; |
| (...skipping 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6220 continue | 6346 continue |
| 6221 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 6347 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
| 6222 (arg.type, value + 1, arg.name)) | 6348 (arg.type, value + 1, arg.name)) |
| 6223 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 6349 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") |
| 6224 file.Write(" next_cmd, sizeof(cmd) +\n") | 6350 file.Write(" next_cmd, sizeof(cmd) +\n") |
| 6225 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") | 6351 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") |
| 6226 file.Write(" // TODO(gman): Check that data was inserted;\n") | 6352 file.Write(" // TODO(gman): Check that data was inserted;\n") |
| 6227 file.Write("}\n") | 6353 file.Write("}\n") |
| 6228 file.Write("\n") | 6354 file.Write("\n") |
| 6229 | 6355 |
| 6356 class PUTSTRHandler(ArrayArgTypeHandler): |
| 6357 """Handler for functions that pass a string array.""" |
| 6358 |
| 6359 def __init__(self): |
| 6360 ArrayArgTypeHandler.__init__(self) |
| 6361 |
| 6362 def __GetDataArg(self, func): |
| 6363 """Return the argument that points to the 2D char arrays""" |
| 6364 for arg in func.GetOriginalArgs(): |
| 6365 if arg.IsPointer2D(): |
| 6366 return arg |
| 6367 return None |
| 6368 |
| 6369 def __GetLengthArg(self, func): |
| 6370 """Return the argument that holds length for each char array""" |
| 6371 for arg in func.GetOriginalArgs(): |
| 6372 if arg.IsPointer() and not arg.IsPointer2D(): |
| 6373 return arg |
| 6374 return None |
| 6375 |
| 6376 def WriteGLES2Implementation(self, func, file): |
| 6377 """Overrriden from TypeHandler.""" |
| 6378 file.Write("%s GLES2Implementation::%s(%s) {\n" % |
| 6379 (func.return_type, func.original_name, |
| 6380 func.MakeTypedOriginalArgString(""))) |
| 6381 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
| 6382 func.WriteDestinationInitalizationValidation(file) |
| 6383 self.WriteClientGLCallLog(func, file) |
| 6384 data_arg = self.__GetDataArg(func) |
| 6385 length_arg = self.__GetLengthArg(func) |
| 6386 log_code_block = """ GPU_CLIENT_LOG_CODE_BLOCK({ |
| 6387 for (GLsizei ii = 0; ii < count; ++ii) { |
| 6388 if (%(data)s[ii]) {""" |
| 6389 if length_arg == None: |
| 6390 log_code_block += """ |
| 6391 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---");""" |
| 6392 else: |
| 6393 log_code_block += """ |
| 6394 if (%(length)s && %(length)s[ii] >= 0) { |
| 6395 const std::string my_str(%(data)s[ii], %(length)s[ii]); |
| 6396 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << my_str << "\\n---"); |
| 6397 } else { |
| 6398 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---"); |
| 6399 }""" |
| 6400 log_code_block += """ |
| 6401 } else { |
| 6402 GPU_CLIENT_LOG(" " << ii << ": NULL"); |
| 6403 } |
| 6404 } |
| 6405 }); |
| 6406 """ |
| 6407 file.Write(log_code_block % { |
| 6408 'data': data_arg.name, |
| 6409 'length': length_arg.name if not length_arg == None else '' |
| 6410 }) |
| 6411 for arg in func.GetOriginalArgs(): |
| 6412 arg.WriteClientSideValidationCode(file, func) |
| 6413 size_code_block = """ // Compute the total size. |
| 6414 base::CheckedNumeric<size_t> total_size = count; |
| 6415 total_size += 1; |
| 6416 total_size *= sizeof(GLint); |
| 6417 if (!total_size.IsValid()) { |
| 6418 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); |
| 6419 return; |
| 6420 } |
| 6421 size_t header_size = total_size.ValueOrDefault(0); |
| 6422 std::vector<GLint> header(count + 1); |
| 6423 header[0] = static_cast<GLint>(count); |
| 6424 for (GLsizei ii = 0; ii < count; ++ii) { |
| 6425 GLint len = 0; |
| 6426 if (%(data)s[ii]) {""" |
| 6427 if length_arg == None: |
| 6428 size_code_block += """ |
| 6429 len = base::static_cast<GLint>(strlen(%(data)s[ii]));""" |
| 6430 else: |
| 6431 size_code_block += """ |
| 6432 len = (%(length)s && %(length)s[ii] >= 0) ? |
| 6433 %(length)s[ii] : base::checked_cast<GLint>(strlen(%(data)s[ii]));""" |
| 6434 size_code_block += """ |
| 6435 } |
| 6436 total_size += len; |
| 6437 total_size += 1; // NULL at the end of each char array. |
| 6438 if (!total_size.IsValid()) { |
| 6439 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); |
| 6440 return; |
| 6441 } |
| 6442 header[ii + 1] = len; |
| 6443 } |
| 6444 """ |
| 6445 file.Write(size_code_block % { |
| 6446 'data': data_arg.name, |
| 6447 'length': length_arg.name if not length_arg == None else '' |
| 6448 }) |
| 6449 data_code_block = """ // Pack data into a bucket on the service. |
| 6450 helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0)); |
| 6451 size_t offset = 0; |
| 6452 for (GLsizei ii = 0; ii <= count; ++ii) { |
| 6453 const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0]) : |
| 6454 %(data)s[ii - 1]; |
| 6455 base::CheckedNumeric<size_t> checked_size = (ii == 0) ? header_size : |
| 6456 static_cast<size_t>(header[ii]); |
| 6457 if (ii > 0) { |
| 6458 checked_size += 1; // NULL in the end. |
| 6459 } |
| 6460 if (!checked_size.IsValid()) { |
| 6461 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); |
| 6462 return; |
| 6463 } |
| 6464 size_t size = checked_size.ValueOrDefault(0); |
| 6465 while (size) { |
| 6466 ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_); |
| 6467 if (!buffer.valid() || buffer.size() == 0) { |
| 6468 SetGLError(GL_OUT_OF_MEMORY, "glShaderSource", "too large"); |
| 6469 return; |
| 6470 } |
| 6471 size_t copy_size = buffer.size(); |
| 6472 if (ii > 0 && buffer.size() == size) |
| 6473 --copy_size; |
| 6474 if (copy_size) |
| 6475 memcpy(buffer.address(), src, copy_size); |
| 6476 if (copy_size < buffer.size()) { |
| 6477 // Append NULL in the end. |
| 6478 DCHECK(copy_size + 1 == buffer.size()); |
| 6479 char* str = reinterpret_cast<char*>(buffer.address()); |
| 6480 str[copy_size] = 0; |
| 6481 } |
| 6482 helper_->SetBucketData(kResultBucketId, offset, buffer.size(), |
| 6483 buffer.shm_id(), buffer.offset()); |
| 6484 offset += buffer.size(); |
| 6485 src += buffer.size(); |
| 6486 size -= buffer.size(); |
| 6487 } |
| 6488 } |
| 6489 DCHECK_EQ(total_size.ValueOrDefault(0), offset); |
| 6490 """ |
| 6491 file.Write(data_code_block % { |
| 6492 'data': data_arg.name, |
| 6493 'length': length_arg.name if not length_arg == None else '' |
| 6494 }) |
| 6495 bucket_cmd_arg_string = "" |
| 6496 for arg in func.GetCmdArgs()[0:-2]: |
| 6497 if bucket_cmd_arg_string: |
| 6498 bucket_cmd_arg_string += ", " |
| 6499 bucket_cmd_arg_string += arg.name |
| 6500 if bucket_cmd_arg_string: |
| 6501 bucket_cmd_arg_string += ", " |
| 6502 bucket_cmd_arg_string += 'kResultBucketId' |
| 6503 file.Write(" helper_->%sBucket(%s);\n" % |
| 6504 (func.name, bucket_cmd_arg_string)) |
| 6505 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);"); |
| 6506 file.Write(" CheckGLError();\n") |
| 6507 file.Write("}\n") |
| 6508 file.Write("\n") |
| 6509 |
| 6230 | 6510 |
| 6231 class PUTXnHandler(ArrayArgTypeHandler): | 6511 class PUTXnHandler(ArrayArgTypeHandler): |
| 6232 """Handler for glUniform?f functions.""" | 6512 """Handler for glUniform?f functions.""" |
| 6233 def __init__(self): | 6513 def __init__(self): |
| 6234 ArrayArgTypeHandler.__init__(self) | 6514 ArrayArgTypeHandler.__init__(self) |
| 6235 | 6515 |
| 6236 def WriteHandlerImplementation(self, func, file): | 6516 def WriteHandlerImplementation(self, func, file): |
| 6237 """Overrriden from TypeHandler.""" | 6517 """Overrriden from TypeHandler.""" |
| 6238 code = """ %(type)s temp[%(count)s] = { %(values)s};""" | 6518 code = """ %(type)s temp[%(count)s] = { %(values)s};""" |
| 6239 if func.IsUnsafe(): | 6519 if func.IsUnsafe(): |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6554 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 6834 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 6555 if (!result_dst) { | 6835 if (!result_dst) { |
| 6556 return error::kOutOfBounds; | 6836 return error::kOutOfBounds; |
| 6557 } | 6837 } |
| 6558 """ | 6838 """ |
| 6559 file.Write(code % {'func_name': func.name}) | 6839 file.Write(code % {'func_name': func.name}) |
| 6560 func.WriteHandlerValidation(file) | 6840 func.WriteHandlerValidation(file) |
| 6561 if func.IsUnsafe(): | 6841 if func.IsUnsafe(): |
| 6562 assert func.GetInfo('id_mapping') | 6842 assert func.GetInfo('id_mapping') |
| 6563 assert len(func.GetInfo('id_mapping')) == 1 | 6843 assert len(func.GetInfo('id_mapping')) == 1 |
| 6844 assert len(args) == 1 |
| 6564 id_type = func.GetInfo('id_mapping')[0] | 6845 id_type = func.GetInfo('id_mapping')[0] |
| 6565 file.Write(" *result_dst = group_->Get%sServiceId(%s, &%s);\n" % | 6846 file.Write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) |
| 6847 file.Write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % |
| 6566 (id_type, id_type.lower(), id_type.lower())) | 6848 (id_type, id_type.lower(), id_type.lower())) |
| 6567 else: | 6849 else: |
| 6568 file.Write(" *result_dst = %s(%s);\n" % | 6850 file.Write(" *result_dst = %s(%s);\n" % |
| 6569 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 6851 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
| 6570 file.Write(" return error::kNoError;\n") | 6852 file.Write(" return error::kNoError;\n") |
| 6571 file.Write("}\n") | 6853 file.Write("}\n") |
| 6572 file.Write("\n") | 6854 file.Write("\n") |
| 6573 | 6855 |
| 6574 def WriteGLES2Implementation(self, func, file): | 6856 def WriteGLES2Implementation(self, func, file): |
| 6575 """Overrriden from TypeHandler.""" | 6857 """Overrriden from TypeHandler.""" |
| 6576 impl_func = func.GetInfo('impl_func') | 6858 impl_func = func.GetInfo('impl_func') |
| 6577 if impl_func == None or impl_func == True: | 6859 if impl_func == None or impl_func == True: |
| 6578 error_value = func.GetInfo("error_value") or "GL_FALSE" | 6860 error_value = func.GetInfo("error_value") or "GL_FALSE" |
| 6579 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 6861 file.Write("%s GLES2Implementation::%s(%s) {\n" % |
| 6580 (func.return_type, func.original_name, | 6862 (func.return_type, func.original_name, |
| 6581 func.MakeTypedOriginalArgString(""))) | 6863 func.MakeTypedOriginalArgString(""))) |
| 6582 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6864 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
| 6583 self.WriteTraceEvent(func, file) | 6865 self.WriteTraceEvent(func, file) |
| 6584 func.WriteDestinationInitalizationValidation(file) | 6866 func.WriteDestinationInitalizationValidation(file) |
| 6585 self.WriteClientGLCallLog(func, file) | 6867 self.WriteClientGLCallLog(func, file) |
| 6586 file.Write(" typedef cmds::%s::Result Result;\n" % func.name) | 6868 file.Write(" typedef cmds::%s::Result Result;\n" % func.name) |
| 6587 file.Write(" Result* result = GetResultAs<Result*>();\n") | 6869 file.Write(" Result* result = GetResultAs<Result*>();\n") |
| 6588 file.Write(" if (!result) {\n") | 6870 file.Write(" if (!result) {\n") |
| 6589 file.Write(" return %s;\n" % error_value) | 6871 file.Write(" return %s;\n" % error_value) |
| 6590 file.Write(" }\n") | 6872 file.Write(" }\n") |
| 6591 file.Write(" *result = 0;\n") | 6873 file.Write(" *result = 0;\n") |
| 6592 arg_string = func.MakeOriginalArgString("") | 6874 assert len(func.GetOriginalArgs()) == 1 |
| 6593 comma = "" | 6875 id_arg = func.GetOriginalArgs()[0] |
| 6594 if len(arg_string) > 0: | 6876 if id_arg.type == 'GLsync': |
| 6595 comma = ", " | 6877 arg_string = "ToGLuint(%s)" % func.MakeOriginalArgString("") |
| 6878 else: |
| 6879 arg_string = func.MakeOriginalArgString("") |
| 6596 file.Write( | 6880 file.Write( |
| 6597 " helper_->%s(%s%sGetResultShmId(), GetResultShmOffset());\n" % | 6881 " helper_->%s(%s, GetResultShmId(), GetResultShmOffset());\n" % |
| 6598 (func.name, arg_string, comma)) | 6882 (func.name, arg_string)) |
| 6599 file.Write(" WaitForCmd();\n") | 6883 file.Write(" WaitForCmd();\n") |
| 6600 file.Write(" %s result_value = *result" % func.return_type) | 6884 file.Write(" %s result_value = *result" % func.return_type) |
| 6601 if func.return_type == "GLboolean": | 6885 if func.return_type == "GLboolean": |
| 6602 file.Write(" != 0") | 6886 file.Write(" != 0") |
| 6603 file.Write(';\n GPU_CLIENT_LOG("returned " << result_value);\n') | 6887 file.Write(';\n GPU_CLIENT_LOG("returned " << result_value);\n') |
| 6604 file.Write(" CheckGLError();\n") | 6888 file.Write(" CheckGLError();\n") |
| 6605 file.Write(" return result_value;\n") | 6889 file.Write(" return result_value;\n") |
| 6606 file.Write("}\n") | 6890 file.Write("}\n") |
| 6607 file.Write("\n") | 6891 file.Write("\n") |
| 6608 | 6892 |
| 6609 def WriteGLES2ImplementationUnitTest(self, func, file): | 6893 def WriteGLES2ImplementationUnitTest(self, func, file): |
| 6610 """Overrriden from TypeHandler.""" | 6894 """Overrriden from TypeHandler.""" |
| 6611 client_test = func.GetInfo('client_test') | 6895 client_test = func.GetInfo('client_test') |
| 6612 if client_test == None or client_test == True: | 6896 if client_test == None or client_test == True: |
| 6613 code = """ | 6897 code = """ |
| 6614 TEST_F(GLES2ImplementationTest, %(name)s) { | 6898 TEST_F(GLES2ImplementationTest, %(name)s) { |
| 6615 struct Cmds { | 6899 struct Cmds { |
| 6616 cmds::%(name)s cmd; | 6900 cmds::%(name)s cmd; |
| 6617 }; | 6901 }; |
| 6618 | 6902 |
| 6619 Cmds expected; | 6903 Cmds expected; |
| 6620 ExpectedMemoryInfo result1 = | 6904 ExpectedMemoryInfo result1 = |
| 6621 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result)); | 6905 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result)); |
| 6622 expected.cmd.Init(1, result1.id, result1.offset); | 6906 expected.cmd.Init(%(cmd_id_value)s, result1.id, result1.offset); |
| 6623 | 6907 |
| 6624 EXPECT_CALL(*command_buffer(), OnFlush()) | 6908 EXPECT_CALL(*command_buffer(), OnFlush()) |
| 6625 .WillOnce(SetMemory(result1.ptr, uint32_t(1))) | 6909 .WillOnce(SetMemory(result1.ptr, uint32_t(GL_TRUE))) |
| 6626 .RetiresOnSaturation(); | 6910 .RetiresOnSaturation(); |
| 6627 | 6911 |
| 6628 GLboolean result = gl_->%(name)s(1); | 6912 GLboolean result = gl_->%(name)s(%(gl_id_value)s); |
| 6629 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 6913 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
| 6630 EXPECT_TRUE(result); | 6914 EXPECT_TRUE(result); |
| 6631 } | 6915 } |
| 6632 """ | 6916 """ |
| 6917 args = func.GetOriginalArgs() |
| 6918 assert len(args) == 1 |
| 6633 file.Write(code % { | 6919 file.Write(code % { |
| 6634 'name': func.name, | 6920 'name': func.name, |
| 6635 }) | 6921 'cmd_id_value': args[0].GetValidClientSideCmdArg(func), |
| 6922 'gl_id_value': args[0].GetValidClientSideArg(func) }) |
| 6636 | 6923 |
| 6637 | 6924 |
| 6638 class STRnHandler(TypeHandler): | 6925 class STRnHandler(TypeHandler): |
| 6639 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and | 6926 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and |
| 6640 GetTranslatedShaderSourceANGLE.""" | 6927 GetTranslatedShaderSourceANGLE.""" |
| 6641 | 6928 |
| 6642 def __init__(self): | 6929 def __init__(self): |
| 6643 TypeHandler.__init__(self) | 6930 TypeHandler.__init__(self) |
| 6644 | 6931 |
| 6645 def InitFunction(self, func): | 6932 def InitFunction(self, func): |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6816 | 7103 |
| 6817 if type in self.cmd_type_map_: | 7104 if type in self.cmd_type_map_: |
| 6818 self.cmd_type = self.cmd_type_map_[type] | 7105 self.cmd_type = self.cmd_type_map_[type] |
| 6819 else: | 7106 else: |
| 6820 self.cmd_type = 'uint32_t' | 7107 self.cmd_type = 'uint32_t' |
| 6821 | 7108 |
| 6822 def IsPointer(self): | 7109 def IsPointer(self): |
| 6823 """Returns true if argument is a pointer.""" | 7110 """Returns true if argument is a pointer.""" |
| 6824 return False | 7111 return False |
| 6825 | 7112 |
| 7113 def IsPointer2D(self): |
| 7114 """Returns true if argument is a 2D pointer.""" |
| 7115 return False |
| 7116 |
| 6826 def IsConstant(self): | 7117 def IsConstant(self): |
| 6827 """Returns true if the argument has only one valid value.""" | 7118 """Returns true if the argument has only one valid value.""" |
| 6828 return False | 7119 return False |
| 6829 | 7120 |
| 6830 def AddCmdArgs(self, args): | 7121 def AddCmdArgs(self, args): |
| 6831 """Adds command arguments for this argument to the given list.""" | 7122 """Adds command arguments for this argument to the given list.""" |
| 6832 if not self.IsConstant(): | 7123 if not self.IsConstant(): |
| 6833 return args.append(self) | 7124 return args.append(self) |
| 6834 | 7125 |
| 6835 def AddInitArgs(self, args): | 7126 def AddInitArgs(self, args): |
| (...skipping 10 matching lines...) Expand all Loading... |
| 6846 index = func.GetOriginalArgs().index(self) | 7137 index = func.GetOriginalArgs().index(self) |
| 6847 return str(index + 1) | 7138 return str(index + 1) |
| 6848 | 7139 |
| 6849 def GetValidClientSideArg(self, func): | 7140 def GetValidClientSideArg(self, func): |
| 6850 """Gets a valid value for this argument.""" | 7141 """Gets a valid value for this argument.""" |
| 6851 valid_arg = func.GetValidArg(self) | 7142 valid_arg = func.GetValidArg(self) |
| 6852 if valid_arg != None: | 7143 if valid_arg != None: |
| 6853 return valid_arg | 7144 return valid_arg |
| 6854 | 7145 |
| 6855 index = func.GetOriginalArgs().index(self) | 7146 index = func.GetOriginalArgs().index(self) |
| 7147 if self.type == 'GLsync': |
| 7148 return ("reinterpret_cast<GLsync>(%d)" % (index + 1)) |
| 6856 return str(index + 1) | 7149 return str(index + 1) |
| 6857 | 7150 |
| 6858 def GetValidClientSideCmdArg(self, func): | 7151 def GetValidClientSideCmdArg(self, func): |
| 6859 """Gets a valid value for this argument.""" | 7152 """Gets a valid value for this argument.""" |
| 6860 valid_arg = func.GetValidArg(self) | 7153 valid_arg = func.GetValidArg(self) |
| 6861 if valid_arg != None: | 7154 if valid_arg != None: |
| 6862 return valid_arg | 7155 return valid_arg |
| 6863 try: | 7156 try: |
| 6864 index = func.GetOriginalArgs().index(self) | 7157 index = func.GetOriginalArgs().index(self) |
| 6865 return str(index + 1) | 7158 return str(index + 1) |
| 6866 except ValueError: | 7159 except ValueError: |
| 6867 pass | 7160 pass |
| 6868 index = func.GetCmdArgs().index(self) | 7161 index = func.GetCmdArgs().index(self) |
| 6869 return str(index + 1) | 7162 return str(index + 1) |
| 6870 | 7163 |
| 6871 def GetValidGLArg(self, func): | 7164 def GetValidGLArg(self, func): |
| 6872 """Gets a valid GL value for this argument.""" | 7165 """Gets a valid GL value for this argument.""" |
| 6873 return self.GetValidArg(func) | 7166 value = self.GetValidArg(func) |
| 7167 if self.type == 'GLsync': |
| 7168 return ("reinterpret_cast<GLsync>(%s)" % value) |
| 7169 return value |
| 6874 | 7170 |
| 6875 def GetValidNonCachedClientSideArg(self, func): | 7171 def GetValidNonCachedClientSideArg(self, func): |
| 6876 """Returns a valid value for this argument in a GL call. | 7172 """Returns a valid value for this argument in a GL call. |
| 6877 Using the value will produce a command buffer service invocation. | 7173 Using the value will produce a command buffer service invocation. |
| 6878 Returns None if there is no such value.""" | 7174 Returns None if there is no such value.""" |
| 6879 return '123' | 7175 return '123' |
| 6880 | 7176 |
| 6881 def GetValidNonCachedClientSideCmdArg(self, func): | 7177 def GetValidNonCachedClientSideCmdArg(self, func): |
| 6882 """Returns a valid value for this argument in a command buffer command. | 7178 """Returns a valid value for this argument in a command buffer command. |
| 6883 Calling the GL function with the value returned by | 7179 Calling the GL function with the value returned by |
| (...skipping 12 matching lines...) Expand all Loading... |
| 6896 def GetLogArg(self): | 7192 def GetLogArg(self): |
| 6897 """Get argument appropriate for LOG macro.""" | 7193 """Get argument appropriate for LOG macro.""" |
| 6898 if self.type == 'GLboolean': | 7194 if self.type == 'GLboolean': |
| 6899 return 'GLES2Util::GetStringBool(%s)' % self.name | 7195 return 'GLES2Util::GetStringBool(%s)' % self.name |
| 6900 if self.type == 'GLenum': | 7196 if self.type == 'GLenum': |
| 6901 return 'GLES2Util::GetStringEnum(%s)' % self.name | 7197 return 'GLES2Util::GetStringEnum(%s)' % self.name |
| 6902 return self.name | 7198 return self.name |
| 6903 | 7199 |
| 6904 def WriteGetCode(self, file): | 7200 def WriteGetCode(self, file): |
| 6905 """Writes the code to get an argument from a command structure.""" | 7201 """Writes the code to get an argument from a command structure.""" |
| 7202 if self.type == 'GLsync': |
| 7203 my_type = 'GLuint' |
| 7204 else: |
| 7205 my_type = self.type |
| 6906 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % | 7206 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % |
| 6907 (self.type, self.name, self.type, self.name)) | 7207 (my_type, self.name, my_type, self.name)) |
| 6908 | 7208 |
| 6909 def WriteValidationCode(self, file, func): | 7209 def WriteValidationCode(self, file, func): |
| 6910 """Writes the validation code for an argument.""" | 7210 """Writes the validation code for an argument.""" |
| 6911 pass | 7211 pass |
| 6912 | 7212 |
| 6913 def WriteClientSideValidationCode(self, file, func): | 7213 def WriteClientSideValidationCode(self, file, func): |
| 6914 """Writes the validation code for an argument.""" | 7214 """Writes the validation code for an argument.""" |
| 6915 pass | 7215 pass |
| 6916 | 7216 |
| 6917 def WriteDestinationInitalizationValidation(self, file, func): | 7217 def WriteDestinationInitalizationValidation(self, file, func): |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7031 def GetInvalidArg(self, index): | 7331 def GetInvalidArg(self, index): |
| 7032 """overridden from SizeArgument.""" | 7332 """overridden from SizeArgument.""" |
| 7033 return ("-1", "kOutOfBounds", "GL_NO_ERROR") | 7333 return ("-1", "kOutOfBounds", "GL_NO_ERROR") |
| 7034 | 7334 |
| 7035 def WriteValidationCode(self, file, func): | 7335 def WriteValidationCode(self, file, func): |
| 7036 """overridden from SizeArgument.""" | 7336 """overridden from SizeArgument.""" |
| 7037 pass | 7337 pass |
| 7038 | 7338 |
| 7039 | 7339 |
| 7040 class EnumBaseArgument(Argument): | 7340 class EnumBaseArgument(Argument): |
| 7041 """Base class for EnumArgument, IntArgument and ValidatedBoolArgument""" | 7341 """Base class for EnumArgument, IntArgument, BitfieldArgument, and |
| 7342 ValidatedBoolArgument.""" |
| 7042 | 7343 |
| 7043 def __init__(self, name, gl_type, type, gl_error): | 7344 def __init__(self, name, gl_type, type, gl_error): |
| 7044 Argument.__init__(self, name, gl_type) | 7345 Argument.__init__(self, name, gl_type) |
| 7045 | 7346 |
| 7046 self.local_type = type | 7347 self.local_type = type |
| 7047 self.gl_error = gl_error | 7348 self.gl_error = gl_error |
| 7048 name = type[len(gl_type):] | 7349 name = type[len(gl_type):] |
| 7049 self.type_name = name | 7350 self.type_name = name |
| 7050 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) | 7351 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 7051 | 7352 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7147 def __init__(self, name, type): | 7448 def __init__(self, name, type): |
| 7148 EnumBaseArgument.__init__(self, name, "GLenum", type, "GL_INVALID_ENUM") | 7449 EnumBaseArgument.__init__(self, name, "GLenum", type, "GL_INVALID_ENUM") |
| 7149 | 7450 |
| 7150 def GetLogArg(self): | 7451 def GetLogArg(self): |
| 7151 """Overridden from Argument.""" | 7452 """Overridden from Argument.""" |
| 7152 return ("GLES2Util::GetString%s(%s)" % | 7453 return ("GLES2Util::GetString%s(%s)" % |
| 7153 (self.type_name, self.name)) | 7454 (self.type_name, self.name)) |
| 7154 | 7455 |
| 7155 | 7456 |
| 7156 class IntArgument(EnumBaseArgument): | 7457 class IntArgument(EnumBaseArgument): |
| 7157 """A class for a GLint argument that can only except specific values. | 7458 """A class for a GLint argument that can only accept specific values. |
| 7158 | 7459 |
| 7159 For example glTexImage2D takes a GLint for its internalformat | 7460 For example glTexImage2D takes a GLint for its internalformat |
| 7160 argument instead of a GLenum. | 7461 argument instead of a GLenum. |
| 7161 """ | 7462 """ |
| 7162 | 7463 |
| 7163 def __init__(self, name, type): | 7464 def __init__(self, name, type): |
| 7164 EnumBaseArgument.__init__(self, name, "GLint", type, "GL_INVALID_VALUE") | 7465 EnumBaseArgument.__init__(self, name, "GLint", type, "GL_INVALID_VALUE") |
| 7165 | 7466 |
| 7166 | 7467 |
| 7167 class ValidatedBoolArgument(EnumBaseArgument): | 7468 class ValidatedBoolArgument(EnumBaseArgument): |
| 7168 """A class for a GLboolean argument that can only except specific values. | 7469 """A class for a GLboolean argument that can only accept specific values. |
| 7169 | 7470 |
| 7170 For example glUniformMatrix takes a GLboolean for it's transpose but it | 7471 For example glUniformMatrix takes a GLboolean for it's transpose but it |
| 7171 must be false. | 7472 must be false. |
| 7172 """ | 7473 """ |
| 7173 | 7474 |
| 7174 def __init__(self, name, type): | 7475 def __init__(self, name, type): |
| 7175 EnumBaseArgument.__init__(self, name, "GLboolean", type, "GL_INVALID_VALUE") | 7476 EnumBaseArgument.__init__(self, name, "GLboolean", type, "GL_INVALID_VALUE") |
| 7176 | 7477 |
| 7177 def GetLogArg(self): | 7478 def GetLogArg(self): |
| 7178 """Overridden from Argument.""" | 7479 """Overridden from Argument.""" |
| 7179 return 'GLES2Util::GetStringBool(%s)' % self.name | 7480 return 'GLES2Util::GetStringBool(%s)' % self.name |
| 7180 | 7481 |
| 7181 | 7482 |
| 7483 class BitFieldArgument(EnumBaseArgument): |
| 7484 """A class for a GLbitfield argument that can only accept specific values. |
| 7485 |
| 7486 For example glFenceSync takes a GLbitfield for its flags argument bit it |
| 7487 must be 0. |
| 7488 """ |
| 7489 |
| 7490 def __init__(self, name, type): |
| 7491 EnumBaseArgument.__init__(self, name, "GLbitfield", type, |
| 7492 "GL_INVALID_VALUE") |
| 7493 |
| 7494 |
| 7182 class ImmediatePointerArgument(Argument): | 7495 class ImmediatePointerArgument(Argument): |
| 7183 """A class that represents an immediate argument to a function. | 7496 """A class that represents an immediate argument to a function. |
| 7184 | 7497 |
| 7185 An immediate argument is one where the data follows the command. | 7498 An immediate argument is one where the data follows the command. |
| 7186 """ | 7499 """ |
| 7187 | 7500 |
| 7188 def __init__(self, name, type): | 7501 def __init__(self, name, type): |
| 7189 Argument.__init__(self, name, type) | 7502 Argument.__init__(self, name, type) |
| 7190 | 7503 |
| 7191 def IsPointer(self): | 7504 def IsPointer(self): |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7262 class PointerArgument(Argument): | 7575 class PointerArgument(Argument): |
| 7263 """A class that represents a pointer argument to a function.""" | 7576 """A class that represents a pointer argument to a function.""" |
| 7264 | 7577 |
| 7265 def __init__(self, name, type): | 7578 def __init__(self, name, type): |
| 7266 Argument.__init__(self, name, type) | 7579 Argument.__init__(self, name, type) |
| 7267 | 7580 |
| 7268 def IsPointer(self): | 7581 def IsPointer(self): |
| 7269 """Returns true if argument is a pointer.""" | 7582 """Returns true if argument is a pointer.""" |
| 7270 return True | 7583 return True |
| 7271 | 7584 |
| 7585 def IsPointer2D(self): |
| 7586 """Returns true if argument is a 2D pointer.""" |
| 7587 return self.type.count('*') == 2 |
| 7588 |
| 7272 def GetPointedType(self): | 7589 def GetPointedType(self): |
| 7273 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type) | 7590 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type) |
| 7274 assert match | 7591 assert match |
| 7275 return match.groupdict()['element_type'] | 7592 return match.groupdict()['element_type'] |
| 7276 | 7593 |
| 7277 def GetValidArg(self, func): | 7594 def GetValidArg(self, func): |
| 7278 """Overridden from Argument.""" | 7595 """Overridden from Argument.""" |
| 7279 return "shared_memory_id_, shared_memory_offset_" | 7596 return "shared_memory_id_, shared_memory_offset_" |
| 7280 | 7597 |
| 7281 def GetValidGLArg(self, func): | 7598 def GetValidGLArg(self, func): |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7326 file.Write(" if (%s == NULL) {\n" % self.name) | 7643 file.Write(" if (%s == NULL) {\n" % self.name) |
| 7327 file.Write(" return error::kOutOfBounds;\n") | 7644 file.Write(" return error::kOutOfBounds;\n") |
| 7328 file.Write(" }\n") | 7645 file.Write(" }\n") |
| 7329 | 7646 |
| 7330 def GetImmediateVersion(self): | 7647 def GetImmediateVersion(self): |
| 7331 """Overridden from Argument.""" | 7648 """Overridden from Argument.""" |
| 7332 return ImmediatePointerArgument(self.name, self.type) | 7649 return ImmediatePointerArgument(self.name, self.type) |
| 7333 | 7650 |
| 7334 def GetBucketVersion(self): | 7651 def GetBucketVersion(self): |
| 7335 """Overridden from Argument.""" | 7652 """Overridden from Argument.""" |
| 7336 if self.type == "const char*": | 7653 if self.type.find('char') >= 0: |
| 7654 if self.IsPointer2D(): |
| 7655 return InputStringArrayBucketArgument(self.name, self.type) |
| 7337 return InputStringBucketArgument(self.name, self.type) | 7656 return InputStringBucketArgument(self.name, self.type) |
| 7338 return BucketPointerArgument(self.name, self.type) | 7657 return BucketPointerArgument(self.name, self.type) |
| 7339 | 7658 |
| 7340 def WriteDestinationInitalizationValidation(self, file, func): | 7659 def WriteDestinationInitalizationValidation(self, file, func): |
| 7341 """Overridden from Argument.""" | 7660 """Overridden from Argument.""" |
| 7342 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) | 7661 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) |
| 7343 | 7662 |
| 7344 | 7663 |
| 7345 class InputStringBucketArgument(Argument): | 7664 class InputStringBucketArgument(Argument): |
| 7346 """An string input argument where the string is passed in a bucket.""" | 7665 """A string input argument where the string is passed in a bucket.""" |
| 7347 | 7666 |
| 7348 def __init__(self, name, type): | 7667 def __init__(self, name, type): |
| 7349 Argument.__init__(self, name + "_bucket_id", "uint32_t") | 7668 Argument.__init__(self, name + "_bucket_id", "uint32_t") |
| 7350 | 7669 |
| 7670 |
| 7671 class InputStringArrayBucketArgument(Argument): |
| 7672 """A string array input argument where the strings are passed in a bucket.""" |
| 7673 |
| 7674 def __init__(self, name, type): |
| 7675 Argument.__init__(self, name + "_bucket_id", "uint32_t") |
| 7676 self._original_name = name |
| 7677 |
| 7351 def WriteGetCode(self, file): | 7678 def WriteGetCode(self, file): |
| 7352 """Overridden from Argument.""" | 7679 """Overridden from Argument.""" |
| 7353 code = """ | 7680 code = """ |
| 7354 Bucket* %(name)s_bucket = GetBucket(c.%(name)s); | 7681 const size_t kMinBucketSize = sizeof(GLint); |
| 7355 if (!%(name)s_bucket) { | 7682 // Each string has at least |length| in the header and a NUL character. |
| 7683 const size_t kMinStringSize = sizeof(GLint) + 1; |
| 7684 Bucket* bucket = GetBucket(c.%(name)s); |
| 7685 if (!bucket) { |
| 7356 return error::kInvalidArguments; | 7686 return error::kInvalidArguments; |
| 7357 } | 7687 } |
| 7358 std::string %(name)s_str; | 7688 const size_t bucket_size = bucket->size(); |
| 7359 if (!%(name)s_bucket->GetAsString(&%(name)s_str)) { | 7689 if (bucket_size < kMinBucketSize) { |
| 7360 return error::kInvalidArguments; | 7690 return error::kInvalidArguments; |
| 7361 } | 7691 } |
| 7362 const char* %(name)s = %(name)s_str.c_str(); | 7692 const char* bucket_data = bucket->GetDataAs<const char*>(0, bucket_size); |
| 7693 const GLint* header = reinterpret_cast<const GLint*>(bucket_data); |
| 7694 GLsizei count = static_cast<GLsizei>(header[0]); |
| 7695 if (count < 0) { |
| 7696 return error::kInvalidArguments; |
| 7697 } |
| 7698 const size_t max_count = (bucket_size - kMinBucketSize) / kMinStringSize; |
| 7699 if (max_count < static_cast<size_t>(count)) { |
| 7700 return error::kInvalidArguments; |
| 7701 } |
| 7702 const GLint* length = header + 1; |
| 7703 scoped_ptr<const char*[]> strs; |
| 7704 if (count > 0) |
| 7705 strs.reset(new const char*[count]); |
| 7706 const char** %(original_name)s = strs.get(); |
| 7707 base::CheckedNumeric<size_t> total_size = sizeof(GLint); |
| 7708 total_size *= count + 1; // Header size. |
| 7709 if (!total_size.IsValid()) |
| 7710 return error::kInvalidArguments; |
| 7711 for (GLsizei ii = 0; ii < count; ++ii) { |
| 7712 %(original_name)s[ii] = bucket_data + total_size.ValueOrDefault(0); |
| 7713 total_size += length[ii]; |
| 7714 total_size += 1; // NUL char at the end of each char array. |
| 7715 if (!total_size.IsValid() || total_size.ValueOrDefault(0) > bucket_size || |
| 7716 %(original_name)s[ii][length[ii]] != 0) { |
| 7717 return error::kInvalidArguments; |
| 7718 } |
| 7719 } |
| 7720 if (total_size.ValueOrDefault(0) != bucket_size) { |
| 7721 return error::kInvalidArguments; |
| 7722 } |
| 7363 """ | 7723 """ |
| 7364 file.Write(code % { | 7724 file.Write(code % { |
| 7365 'name': self.name, | 7725 'name': self.name, |
| 7726 'original_name': self._original_name, |
| 7366 }) | 7727 }) |
| 7367 | 7728 |
| 7368 def GetValidArg(self, func): | 7729 def GetValidArg(self, func): |
| 7369 return "kNameBucketId" | 7730 return "kNameBucketId" |
| 7370 | 7731 |
| 7371 def GetValidGLArg(self, func): | 7732 def GetValidGLArg(self, func): |
| 7372 return "_" | 7733 return "_" |
| 7373 | 7734 |
| 7374 | 7735 |
| 7375 class ResourceIdArgument(Argument): | 7736 class ResourceIdArgument(Argument): |
| 7376 """A class that represents a resource id argument to a function.""" | 7737 """A class that represents a resource id argument to a function.""" |
| 7377 | 7738 |
| 7378 def __init__(self, name, type): | 7739 def __init__(self, name, type): |
| 7379 match = re.match("(GLid\w+)", type) | 7740 match = re.match("(GLid\w+)", type) |
| 7380 self.resource_type = match.group(1)[4:] | 7741 self.resource_type = match.group(1)[4:] |
| 7381 type = type.replace(match.group(1), "GLuint") | 7742 if self.resource_type == "Sync": |
| 7743 type = type.replace(match.group(1), "GLsync") |
| 7744 else: |
| 7745 type = type.replace(match.group(1), "GLuint") |
| 7382 Argument.__init__(self, name, type) | 7746 Argument.__init__(self, name, type) |
| 7383 | 7747 |
| 7384 def WriteGetCode(self, file): | 7748 def WriteGetCode(self, file): |
| 7385 """Overridden from Argument.""" | 7749 """Overridden from Argument.""" |
| 7386 file.Write(" %s %s = c.%s;\n" % (self.type, self.name, self.name)) | 7750 if self.type == "GLsync": |
| 7751 my_type = "GLuint" |
| 7752 else: |
| 7753 my_type = self.type |
| 7754 file.Write(" %s %s = c.%s;\n" % (my_type, self.name, self.name)) |
| 7387 | 7755 |
| 7388 def GetValidArg(self, func): | 7756 def GetValidArg(self, func): |
| 7389 return "client_%s_id_" % self.resource_type.lower() | 7757 return "client_%s_id_" % self.resource_type.lower() |
| 7390 | 7758 |
| 7391 def GetValidGLArg(self, func): | 7759 def GetValidGLArg(self, func): |
| 7760 if self.resource_type == "Sync": |
| 7761 return "reinterpret_cast<GLsync>(kService%sId)" % self.resource_type |
| 7392 return "kService%sId" % self.resource_type | 7762 return "kService%sId" % self.resource_type |
| 7393 | 7763 |
| 7394 | 7764 |
| 7395 class ResourceIdBindArgument(Argument): | 7765 class ResourceIdBindArgument(Argument): |
| 7396 """Represents a resource id argument to a bind function.""" | 7766 """Represents a resource id argument to a bind function.""" |
| 7397 | 7767 |
| 7398 def __init__(self, name, type): | 7768 def __init__(self, name, type): |
| 7399 match = re.match("(GLidBind\w+)", type) | 7769 match = re.match("(GLidBind\w+)", type) |
| 7400 self.resource_type = match.group(1)[8:] | 7770 self.resource_type = match.group(1)[8:] |
| 7401 type = type.replace(match.group(1), "GLuint") | 7771 type = type.replace(match.group(1), "GLuint") |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7455 'DELn': DELnHandler(), | 7825 'DELn': DELnHandler(), |
| 7456 'GENn': GENnHandler(), | 7826 'GENn': GENnHandler(), |
| 7457 'GETn': GETnHandler(), | 7827 'GETn': GETnHandler(), |
| 7458 'GLchar': GLcharHandler(), | 7828 'GLchar': GLcharHandler(), |
| 7459 'GLcharN': GLcharNHandler(), | 7829 'GLcharN': GLcharNHandler(), |
| 7460 'HandWritten': HandWrittenHandler(), | 7830 'HandWritten': HandWrittenHandler(), |
| 7461 'Is': IsHandler(), | 7831 'Is': IsHandler(), |
| 7462 'Manual': ManualHandler(), | 7832 'Manual': ManualHandler(), |
| 7463 'PUT': PUTHandler(), | 7833 'PUT': PUTHandler(), |
| 7464 'PUTn': PUTnHandler(), | 7834 'PUTn': PUTnHandler(), |
| 7835 'PUTSTR': PUTSTRHandler(), |
| 7465 'PUTXn': PUTXnHandler(), | 7836 'PUTXn': PUTXnHandler(), |
| 7466 'StateSet': StateSetHandler(), | 7837 'StateSet': StateSetHandler(), |
| 7467 'StateSetRGBAlpha': StateSetRGBAlphaHandler(), | 7838 'StateSetRGBAlpha': StateSetRGBAlphaHandler(), |
| 7468 'StateSetFrontBack': StateSetFrontBackHandler(), | 7839 'StateSetFrontBack': StateSetFrontBackHandler(), |
| 7469 'StateSetFrontBackSeparate': StateSetFrontBackSeparateHandler(), | 7840 'StateSetFrontBackSeparate': StateSetFrontBackSeparateHandler(), |
| 7470 'StateSetNamedParameter': StateSetNamedParameter(), | 7841 'StateSetNamedParameter': StateSetNamedParameter(), |
| 7471 'STRn': STRnHandler(), | 7842 'STRn': STRnHandler(), |
| 7472 'Todo': TodoHandler(), | 7843 'Todo': TodoHandler(), |
| 7473 } | 7844 } |
| 7474 | 7845 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7646 | 8017 |
| 7647 def GetLastOriginalPointerArg(self): | 8018 def GetLastOriginalPointerArg(self): |
| 7648 return self.last_original_pointer_arg | 8019 return self.last_original_pointer_arg |
| 7649 | 8020 |
| 7650 def GetResourceIdArg(self): | 8021 def GetResourceIdArg(self): |
| 7651 for arg in self.original_args: | 8022 for arg in self.original_args: |
| 7652 if hasattr(arg, 'resource_type'): | 8023 if hasattr(arg, 'resource_type'): |
| 7653 return arg | 8024 return arg |
| 7654 return None | 8025 return None |
| 7655 | 8026 |
| 7656 def __MaybePrependComma(self, arg_string, add_comma): | 8027 def _MaybePrependComma(self, arg_string, add_comma): |
| 7657 """Adds a comma if arg_string is not empty and add_comma is true.""" | 8028 """Adds a comma if arg_string is not empty and add_comma is true.""" |
| 7658 comma = "" | 8029 comma = "" |
| 7659 if add_comma and len(arg_string): | 8030 if add_comma and len(arg_string): |
| 7660 comma = ", " | 8031 comma = ", " |
| 7661 return "%s%s" % (comma, arg_string) | 8032 return "%s%s" % (comma, arg_string) |
| 7662 | 8033 |
| 7663 def MakeTypedOriginalArgString(self, prefix, add_comma = False): | 8034 def MakeTypedOriginalArgString(self, prefix, add_comma = False): |
| 7664 """Gets a list of arguments as they are in GL.""" | 8035 """Gets a list of arguments as they are in GL.""" |
| 7665 args = self.GetOriginalArgs() | 8036 args = self.GetOriginalArgs() |
| 7666 arg_string = ", ".join( | 8037 arg_string = ", ".join( |
| 7667 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) | 8038 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) |
| 7668 return self.__MaybePrependComma(arg_string, add_comma) | 8039 return self._MaybePrependComma(arg_string, add_comma) |
| 7669 | 8040 |
| 7670 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): | 8041 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): |
| 7671 """Gets the list of arguments as they are in GL.""" | 8042 """Gets the list of arguments as they are in GL.""" |
| 7672 args = self.GetOriginalArgs() | 8043 args = self.GetOriginalArgs() |
| 7673 arg_string = separator.join( | 8044 arg_string = separator.join( |
| 7674 ["%s%s" % (prefix, arg.name) for arg in args]) | 8045 ["%s%s" % (prefix, arg.name) for arg in args]) |
| 7675 return self.__MaybePrependComma(arg_string, add_comma) | 8046 return self._MaybePrependComma(arg_string, add_comma) |
| 7676 | 8047 |
| 7677 def MakeTypedHelperArgString(self, prefix, add_comma = False): | 8048 def MakeTypedHelperArgString(self, prefix, add_comma = False): |
| 7678 """Gets a list of typed GL arguments after removing unneeded arguments.""" | 8049 """Gets a list of typed GL arguments after removing unneeded arguments.""" |
| 7679 args = self.GetOriginalArgs() | 8050 args = self.GetOriginalArgs() |
| 7680 arg_string = ", ".join( | 8051 arg_string = ", ".join( |
| 7681 ["%s %s%s" % ( | 8052 ["%s %s%s" % ( |
| 7682 arg.type, | 8053 arg.type, |
| 7683 prefix, | 8054 prefix, |
| 7684 arg.name, | 8055 arg.name, |
| 7685 ) for arg in args if not arg.IsConstant()]) | 8056 ) for arg in args if not arg.IsConstant()]) |
| 7686 return self.__MaybePrependComma(arg_string, add_comma) | 8057 return self._MaybePrependComma(arg_string, add_comma) |
| 7687 | 8058 |
| 7688 def MakeHelperArgString(self, prefix, add_comma = False, separator = ", "): | 8059 def MakeHelperArgString(self, prefix, add_comma = False, separator = ", "): |
| 7689 """Gets a list of GL arguments after removing unneeded arguments.""" | 8060 """Gets a list of GL arguments after removing unneeded arguments.""" |
| 7690 args = self.GetOriginalArgs() | 8061 args = self.GetOriginalArgs() |
| 7691 arg_string = separator.join( | 8062 arg_string = separator.join( |
| 7692 ["%s%s" % (prefix, arg.name) | 8063 ["%s%s" % (prefix, arg.name) |
| 7693 for arg in args if not arg.IsConstant()]) | 8064 for arg in args if not arg.IsConstant()]) |
| 7694 return self.__MaybePrependComma(arg_string, add_comma) | 8065 return self._MaybePrependComma(arg_string, add_comma) |
| 7695 | 8066 |
| 7696 def MakeTypedPepperArgString(self, prefix): | 8067 def MakeTypedPepperArgString(self, prefix): |
| 7697 """Gets a list of arguments as they need to be for Pepper.""" | 8068 """Gets a list of arguments as they need to be for Pepper.""" |
| 7698 if self.GetInfo("pepper_args"): | 8069 if self.GetInfo("pepper_args"): |
| 7699 return self.GetInfo("pepper_args") | 8070 return self.GetInfo("pepper_args") |
| 7700 else: | 8071 else: |
| 7701 return self.MakeTypedOriginalArgString(prefix, False) | 8072 return self.MakeTypedOriginalArgString(prefix, False) |
| 7702 | 8073 |
| 7703 def MapCTypeToPepperIdlType(self, ctype, is_for_return_type=False): | 8074 def MapCTypeToPepperIdlType(self, ctype, is_for_return_type=False): |
| 7704 """Converts a C type name to the corresponding Pepper IDL type.""" | 8075 """Converts a C type name to the corresponding Pepper IDL type.""" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 7733 def GetPepperName(self): | 8104 def GetPepperName(self): |
| 7734 if self.GetInfo("pepper_name"): | 8105 if self.GetInfo("pepper_name"): |
| 7735 return self.GetInfo("pepper_name") | 8106 return self.GetInfo("pepper_name") |
| 7736 return self.name | 8107 return self.name |
| 7737 | 8108 |
| 7738 def MakeTypedCmdArgString(self, prefix, add_comma = False): | 8109 def MakeTypedCmdArgString(self, prefix, add_comma = False): |
| 7739 """Gets a typed list of arguments as they need to be for command buffers.""" | 8110 """Gets a typed list of arguments as they need to be for command buffers.""" |
| 7740 args = self.GetCmdArgs() | 8111 args = self.GetCmdArgs() |
| 7741 arg_string = ", ".join( | 8112 arg_string = ", ".join( |
| 7742 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) | 8113 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) |
| 7743 return self.__MaybePrependComma(arg_string, add_comma) | 8114 return self._MaybePrependComma(arg_string, add_comma) |
| 7744 | 8115 |
| 7745 def MakeCmdArgString(self, prefix, add_comma = False): | 8116 def MakeCmdArgString(self, prefix, add_comma = False): |
| 7746 """Gets the list of arguments as they need to be for command buffers.""" | 8117 """Gets the list of arguments as they need to be for command buffers.""" |
| 7747 args = self.GetCmdArgs() | 8118 args = self.GetCmdArgs() |
| 7748 arg_string = ", ".join( | 8119 arg_string = ", ".join( |
| 7749 ["%s%s" % (prefix, arg.name) for arg in args]) | 8120 ["%s%s" % (prefix, arg.name) for arg in args]) |
| 7750 return self.__MaybePrependComma(arg_string, add_comma) | 8121 return self._MaybePrependComma(arg_string, add_comma) |
| 7751 | 8122 |
| 7752 def MakeTypedInitString(self, prefix, add_comma = False): | 8123 def MakeTypedInitString(self, prefix, add_comma = False): |
| 7753 """Gets a typed list of arguments as they need to be for cmd Init/Set.""" | 8124 """Gets a typed list of arguments as they need to be for cmd Init/Set.""" |
| 7754 args = self.GetInitArgs() | 8125 args = self.GetInitArgs() |
| 7755 arg_string = ", ".join( | 8126 arg_string = ", ".join( |
| 7756 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) | 8127 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) |
| 7757 return self.__MaybePrependComma(arg_string, add_comma) | 8128 return self._MaybePrependComma(arg_string, add_comma) |
| 7758 | 8129 |
| 7759 def MakeInitString(self, prefix, add_comma = False): | 8130 def MakeInitString(self, prefix, add_comma = False): |
| 7760 """Gets the list of arguments as they need to be for cmd Init/Set.""" | 8131 """Gets the list of arguments as they need to be for cmd Init/Set.""" |
| 7761 args = self.GetInitArgs() | 8132 args = self.GetInitArgs() |
| 7762 arg_string = ", ".join( | 8133 arg_string = ", ".join( |
| 7763 ["%s%s" % (prefix, arg.name) for arg in args]) | 8134 ["%s%s" % (prefix, arg.name) for arg in args]) |
| 7764 return self.__MaybePrependComma(arg_string, add_comma) | 8135 return self._MaybePrependComma(arg_string, add_comma) |
| 7765 | 8136 |
| 7766 def MakeLogArgString(self): | 8137 def MakeLogArgString(self): |
| 7767 """Makes a string of the arguments for the LOG macros""" | 8138 """Makes a string of the arguments for the LOG macros""" |
| 7768 args = self.GetOriginalArgs() | 8139 args = self.GetOriginalArgs() |
| 7769 return ' << ", " << '.join([arg.GetLogArg() for arg in args]) | 8140 return ' << ", " << '.join([arg.GetLogArg() for arg in args]) |
| 7770 | 8141 |
| 7771 def WriteCommandDescription(self, file): | 8142 def WriteCommandDescription(self, file): |
| 7772 """Writes a description of the command.""" | 8143 """Writes a description of the command.""" |
| 7773 file.Write("//! Command that corresponds to gl%s.\n" % self.original_name) | 8144 file.Write("//! Command that corresponds to gl%s.\n" % self.original_name) |
| 7774 | 8145 |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8062 | 8433 |
| 8063 def WriteServiceImplementation(self, file): | 8434 def WriteServiceImplementation(self, file): |
| 8064 """Overridden from Function""" | 8435 """Overridden from Function""" |
| 8065 self.type_handler.WriteBucketServiceImplementation(self, file) | 8436 self.type_handler.WriteBucketServiceImplementation(self, file) |
| 8066 | 8437 |
| 8067 def WriteHandlerImplementation(self, file): | 8438 def WriteHandlerImplementation(self, file): |
| 8068 """Overridden from Function""" | 8439 """Overridden from Function""" |
| 8069 self.type_handler.WriteBucketHandlerImplementation(self, file) | 8440 self.type_handler.WriteBucketHandlerImplementation(self, file) |
| 8070 | 8441 |
| 8071 def WriteServiceUnitTest(self, file, *extras): | 8442 def WriteServiceUnitTest(self, file, *extras): |
| 8072 """Writes the service implementation for a command.""" | 8443 """Overridden from Function""" |
| 8073 self.type_handler.WriteBucketServiceUnitTest(self, file, *extras) | 8444 self.type_handler.WriteBucketServiceUnitTest(self, file, *extras) |
| 8074 | 8445 |
| 8446 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): |
| 8447 """Overridden from Function""" |
| 8448 args = self.GetOriginalArgs() |
| 8449 arg_string = separator.join( |
| 8450 ["%s%s" % (prefix, arg.name[0:-10] if arg.name.endswith("_bucket_id") |
| 8451 else arg.name) for arg in args]) |
| 8452 return super(BucketFunction, self)._MaybePrependComma(arg_string, add_comma) |
| 8453 |
| 8075 | 8454 |
| 8076 def CreateArg(arg_string): | 8455 def CreateArg(arg_string): |
| 8077 """Creates an Argument.""" | 8456 """Creates an Argument.""" |
| 8078 arg_parts = arg_string.split() | 8457 arg_parts = arg_string.split() |
| 8079 if len(arg_parts) == 1 and arg_parts[0] == 'void': | 8458 if len(arg_parts) == 1 and arg_parts[0] == 'void': |
| 8080 return None | 8459 return None |
| 8081 # Is this a pointer argument? | 8460 # Is this a pointer argument? |
| 8082 elif arg_string.find('*') >= 0: | 8461 elif arg_string.find('*') >= 0: |
| 8083 return PointerArgument( | 8462 return PointerArgument( |
| 8084 arg_parts[-1], | 8463 arg_parts[-1], |
| 8085 " ".join(arg_parts[0:-1])) | 8464 " ".join(arg_parts[0:-1])) |
| 8086 # Is this a resource argument? Must come after pointer check. | 8465 # Is this a resource argument? Must come after pointer check. |
| 8087 elif arg_parts[0].startswith('GLidBind'): | 8466 elif arg_parts[0].startswith('GLidBind'): |
| 8088 return ResourceIdBindArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8467 return ResourceIdBindArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8089 elif arg_parts[0].startswith('GLidZero'): | 8468 elif arg_parts[0].startswith('GLidZero'): |
| 8090 return ResourceIdZeroArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8469 return ResourceIdZeroArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8091 elif arg_parts[0].startswith('GLid'): | 8470 elif arg_parts[0].startswith('GLid'): |
| 8092 return ResourceIdArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8471 return ResourceIdArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8093 elif arg_parts[0].startswith('GLenum') and len(arg_parts[0]) > 6: | 8472 elif arg_parts[0].startswith('GLenum') and len(arg_parts[0]) > 6: |
| 8094 return EnumArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8473 return EnumArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8474 elif arg_parts[0].startswith('GLbitfield') and len(arg_parts[0]) > 10: |
| 8475 return BitFieldArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8095 elif arg_parts[0].startswith('GLboolean') and len(arg_parts[0]) > 9: | 8476 elif arg_parts[0].startswith('GLboolean') and len(arg_parts[0]) > 9: |
| 8096 return ValidatedBoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8477 return ValidatedBoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8097 elif arg_parts[0].startswith('GLboolean'): | 8478 elif arg_parts[0].startswith('GLboolean'): |
| 8098 return BoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8479 return BoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8099 elif arg_parts[0].startswith('GLintUniformLocation'): | 8480 elif arg_parts[0].startswith('GLintUniformLocation'): |
| 8100 return UniformLocationArgument(arg_parts[-1]) | 8481 return UniformLocationArgument(arg_parts[-1]) |
| 8101 elif (arg_parts[0].startswith('GLint') and len(arg_parts[0]) > 5 and | 8482 elif (arg_parts[0].startswith('GLint') and len(arg_parts[0]) > 5 and |
| 8102 not arg_parts[0].startswith('GLintptr')): | 8483 not arg_parts[0].startswith('GLintptr')): |
| 8103 return IntArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) | 8484 return IntArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) |
| 8104 elif (arg_parts[0].startswith('GLsizeiNotNegative') or | 8485 elif (arg_parts[0].startswith('GLsizeiNotNegative') or |
| (...skipping 1304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9409 Format(gen.generated_cpp_filenames) | 9790 Format(gen.generated_cpp_filenames) |
| 9410 | 9791 |
| 9411 if gen.errors > 0: | 9792 if gen.errors > 0: |
| 9412 print "%d errors" % gen.errors | 9793 print "%d errors" % gen.errors |
| 9413 return 1 | 9794 return 1 |
| 9414 return 0 | 9795 return 0 |
| 9415 | 9796 |
| 9416 | 9797 |
| 9417 if __name__ == '__main__': | 9798 if __name__ == '__main__': |
| 9418 sys.exit(main(sys.argv[1:])) | 9799 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |