| 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 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X', | 681 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X', |
| 682 'GL_TEXTURE_CUBE_MAP_POSITIVE_Y', | 682 'GL_TEXTURE_CUBE_MAP_POSITIVE_Y', |
| 683 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', | 683 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', |
| 684 'GL_TEXTURE_CUBE_MAP_POSITIVE_Z', | 684 'GL_TEXTURE_CUBE_MAP_POSITIVE_Z', |
| 685 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', | 685 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', |
| 686 ], | 686 ], |
| 687 'invalid': [ | 687 'invalid': [ |
| 688 'GL_PROXY_TEXTURE_CUBE_MAP', | 688 'GL_PROXY_TEXTURE_CUBE_MAP', |
| 689 ] | 689 ] |
| 690 }, | 690 }, |
| 691 'Texture3DTarget': { |
| 692 'type': 'GLenum', |
| 693 'valid': [ |
| 694 'GL_TEXTURE_3D', |
| 695 'GL_TEXTURE_2D_ARRAY', |
| 696 ], |
| 697 'invalid': [ |
| 698 'GL_TEXTURE_2D', |
| 699 ] |
| 700 }, |
| 691 'TextureBindTarget': { | 701 'TextureBindTarget': { |
| 692 'type': 'GLenum', | 702 'type': 'GLenum', |
| 693 'valid': [ | 703 'valid': [ |
| 694 'GL_TEXTURE_2D', | 704 'GL_TEXTURE_2D', |
| 695 'GL_TEXTURE_CUBE_MAP', | 705 'GL_TEXTURE_CUBE_MAP', |
| 696 ], | 706 ], |
| 697 'invalid': [ | 707 'invalid': [ |
| 698 'GL_TEXTURE_1D', | 708 'GL_TEXTURE_1D', |
| 699 'GL_TEXTURE_3D', | 709 'GL_TEXTURE_3D', |
| 700 ], | 710 ], |
| (...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 # shadowed: True = the value is shadowed so no glGetXXX call will be made. | 1350 # shadowed: True = the value is shadowed so no glGetXXX call will be made. |
| 1341 # first_element_only: For PUT types, True if only the first element of an | 1351 # first_element_only: For PUT types, True if only the first element of an |
| 1342 # array is used and we end up calling the single value | 1352 # array is used and we end up calling the single value |
| 1343 # corresponding function. eg. TexParameteriv -> TexParameteri | 1353 # corresponding function. eg. TexParameteriv -> TexParameteri |
| 1344 # extension: Function is an extension to GL and should not be exposed to | 1354 # extension: Function is an extension to GL and should not be exposed to |
| 1345 # pepper unless pepper_interface is defined. | 1355 # pepper unless pepper_interface is defined. |
| 1346 # extension_flag: Function is an extension and should be enabled only when | 1356 # extension_flag: Function is an extension and should be enabled only when |
| 1347 # the corresponding feature info flag is enabled. Implies | 1357 # the corresponding feature info flag is enabled. Implies |
| 1348 # 'extension': True. | 1358 # 'extension': True. |
| 1349 # not_shared: For GENn types, True if objects can't be shared between contexts | 1359 # not_shared: For GENn types, True if objects can't be shared between contexts |
| 1360 # unsafe: True = no validation is implemented on the service side and the |
| 1361 # command is only available with --enable-unsafe-es3-apis. |
| 1350 | 1362 |
| 1351 _FUNCTION_INFO = { | 1363 _FUNCTION_INFO = { |
| 1352 'ActiveTexture': { | 1364 'ActiveTexture': { |
| 1353 'decoder_func': 'DoActiveTexture', | 1365 'decoder_func': 'DoActiveTexture', |
| 1354 'unit_test': False, | 1366 'unit_test': False, |
| 1355 'impl_func': False, | 1367 'impl_func': False, |
| 1356 'client_test': False, | 1368 'client_test': False, |
| 1357 }, | 1369 }, |
| 1358 'AttachShader': {'decoder_func': 'DoAttachShader'}, | 1370 'AttachShader': {'decoder_func': 'DoAttachShader'}, |
| 1359 'BindAttribLocation': { | 1371 'BindAttribLocation': { |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 'decoder_func': 'DoConsumeTextureCHROMIUM', | 1455 'decoder_func': 'DoConsumeTextureCHROMIUM', |
| 1444 'impl_func': False, | 1456 'impl_func': False, |
| 1445 'type': 'PUT', | 1457 'type': 'PUT', |
| 1446 'count': 64, # GL_MAILBOX_SIZE_CHROMIUM | 1458 'count': 64, # GL_MAILBOX_SIZE_CHROMIUM |
| 1447 'unit_test': False, | 1459 'unit_test': False, |
| 1448 'client_test': False, | 1460 'client_test': False, |
| 1449 'extension': "CHROMIUM_texture_mailbox", | 1461 'extension': "CHROMIUM_texture_mailbox", |
| 1450 'chromium': True, | 1462 'chromium': True, |
| 1451 'trace_level': 1, | 1463 'trace_level': 1, |
| 1452 }, | 1464 }, |
| 1465 'CopyBufferSubData': { |
| 1466 'unsafe': True, |
| 1467 }, |
| 1453 'CreateAndConsumeTextureCHROMIUM': { | 1468 'CreateAndConsumeTextureCHROMIUM': { |
| 1454 'decoder_func': 'DoCreateAndConsumeTextureCHROMIUM', | 1469 'decoder_func': 'DoCreateAndConsumeTextureCHROMIUM', |
| 1455 'impl_func': False, | 1470 'impl_func': False, |
| 1456 'type': 'HandWritten', | 1471 'type': 'HandWritten', |
| 1457 'data_transfer_methods': ['immediate'], | 1472 'data_transfer_methods': ['immediate'], |
| 1458 'unit_test': False, | 1473 'unit_test': False, |
| 1459 'client_test': False, | 1474 'client_test': False, |
| 1460 'extension': "CHROMIUM_texture_mailbox", | 1475 'extension': "CHROMIUM_texture_mailbox", |
| 1461 'chromium': True, | 1476 'chromium': True, |
| 1462 }, | 1477 }, |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1744 'trace_level': 1, | 1759 'trace_level': 1, |
| 1745 }, | 1760 }, |
| 1746 'FramebufferTexture2DMultisampleEXT': { | 1761 'FramebufferTexture2DMultisampleEXT': { |
| 1747 'decoder_func': 'DoFramebufferTexture2DMultisample', | 1762 'decoder_func': 'DoFramebufferTexture2DMultisample', |
| 1748 'gl_test_func': 'glFramebufferTexture2DMultisampleEXT', | 1763 'gl_test_func': 'glFramebufferTexture2DMultisampleEXT', |
| 1749 'expectation': False, | 1764 'expectation': False, |
| 1750 'unit_test': False, | 1765 'unit_test': False, |
| 1751 'extension_flag': 'multisampled_render_to_texture', | 1766 'extension_flag': 'multisampled_render_to_texture', |
| 1752 'trace_level': 1, | 1767 'trace_level': 1, |
| 1753 }, | 1768 }, |
| 1769 'FramebufferTextureLayer': { |
| 1770 'decoder_func': 'DoFramebufferTextureLayer', |
| 1771 'unsafe': True, |
| 1772 }, |
| 1754 'GenerateMipmap': { | 1773 'GenerateMipmap': { |
| 1755 'decoder_func': 'DoGenerateMipmap', | 1774 'decoder_func': 'DoGenerateMipmap', |
| 1756 'gl_test_func': 'glGenerateMipmapEXT', | 1775 'gl_test_func': 'glGenerateMipmapEXT', |
| 1757 }, | 1776 }, |
| 1758 'GenBuffers': { | 1777 'GenBuffers': { |
| 1759 'type': 'GENn', | 1778 'type': 'GENn', |
| 1760 'gl_test_func': 'glGenBuffersARB', | 1779 'gl_test_func': 'glGenBuffersARB', |
| 1761 'resource_type': 'Buffer', | 1780 'resource_type': 'Buffer', |
| 1762 'resource_types': 'Buffers', | 1781 'resource_types': 'Buffers', |
| 1763 }, | 1782 }, |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1853 'decoder_func': 'DoGetFramebufferAttachmentParameteriv', | 1872 'decoder_func': 'DoGetFramebufferAttachmentParameteriv', |
| 1854 'gl_test_func': 'glGetFramebufferAttachmentParameterivEXT', | 1873 'gl_test_func': 'glGetFramebufferAttachmentParameterivEXT', |
| 1855 'result': ['SizedResult<GLint>'], | 1874 'result': ['SizedResult<GLint>'], |
| 1856 }, | 1875 }, |
| 1857 'GetIntegerv': { | 1876 'GetIntegerv': { |
| 1858 'type': 'GETn', | 1877 'type': 'GETn', |
| 1859 'result': ['SizedResult<GLint>'], | 1878 'result': ['SizedResult<GLint>'], |
| 1860 'decoder_func': 'DoGetIntegerv', | 1879 'decoder_func': 'DoGetIntegerv', |
| 1861 'client_test': False, | 1880 'client_test': False, |
| 1862 }, | 1881 }, |
| 1882 'GetInternalformativ': { |
| 1883 'type': 'GETn', |
| 1884 'result': ['SizedResult<GLint>'], |
| 1885 'unsafe': True, |
| 1886 }, |
| 1863 'GetMaxValueInBufferCHROMIUM': { | 1887 'GetMaxValueInBufferCHROMIUM': { |
| 1864 'type': 'Is', | 1888 'type': 'Is', |
| 1865 'decoder_func': 'DoGetMaxValueInBufferCHROMIUM', | 1889 'decoder_func': 'DoGetMaxValueInBufferCHROMIUM', |
| 1866 'result': ['GLuint'], | 1890 'result': ['GLuint'], |
| 1867 'unit_test': False, | 1891 'unit_test': False, |
| 1868 'client_test': False, | 1892 'client_test': False, |
| 1869 'extension': True, | 1893 'extension': True, |
| 1870 'chromium': True, | 1894 'chromium': True, |
| 1871 'impl_func': False, | 1895 'impl_func': False, |
| 1872 }, | 1896 }, |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2191 'first_element_only': True, | 2215 'first_element_only': True, |
| 2192 }, | 2216 }, |
| 2193 'TexParameteriv': { | 2217 'TexParameteriv': { |
| 2194 'type': 'PUT', | 2218 'type': 'PUT', |
| 2195 'data_value': 'GL_NEAREST', | 2219 'data_value': 'GL_NEAREST', |
| 2196 'count': 1, | 2220 'count': 1, |
| 2197 'decoder_func': 'DoTexParameteriv', | 2221 'decoder_func': 'DoTexParameteriv', |
| 2198 'gl_test_func': 'glTexParameteri', | 2222 'gl_test_func': 'glTexParameteri', |
| 2199 'first_element_only': True, | 2223 'first_element_only': True, |
| 2200 }, | 2224 }, |
| 2225 'TexStorage3D': { |
| 2226 'unsafe': True, |
| 2227 }, |
| 2201 'TexSubImage2D': { | 2228 'TexSubImage2D': { |
| 2202 'type': 'Manual', | 2229 'type': 'Manual', |
| 2203 'data_transfer_methods': ['shm'], | 2230 'data_transfer_methods': ['shm'], |
| 2204 'client_test': False, | 2231 'client_test': False, |
| 2205 'cmd_args': 'GLenumTextureTarget target, GLint level, ' | 2232 'cmd_args': 'GLenumTextureTarget target, GLint level, ' |
| 2206 'GLint xoffset, GLint yoffset, ' | 2233 'GLint xoffset, GLint yoffset, ' |
| 2207 'GLsizei width, GLsizei height, ' | 2234 'GLsizei width, GLsizei height, ' |
| 2208 'GLenumTextureFormat format, GLenumPixelType type, ' | 2235 'GLenumTextureFormat format, GLenumPixelType type, ' |
| 2209 'const void* pixels, GLboolean internal' | 2236 'const void* pixels, GLboolean internal' |
| 2210 }, | 2237 }, |
| 2211 'Uniform1f': {'type': 'PUTXn', 'count': 1}, | 2238 'Uniform1f': {'type': 'PUTXn', 'count': 1}, |
| 2212 'Uniform1fv': { | 2239 'Uniform1fv': { |
| 2213 'type': 'PUTn', | 2240 'type': 'PUTn', |
| 2214 'count': 1, | 2241 'count': 1, |
| 2215 'decoder_func': 'DoUniform1fv', | 2242 'decoder_func': 'DoUniform1fv', |
| 2216 }, | 2243 }, |
| 2217 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False}, | 2244 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False}, |
| 2218 'Uniform1iv': { | 2245 'Uniform1iv': { |
| 2219 'type': 'PUTn', | 2246 'type': 'PUTn', |
| 2220 'count': 1, | 2247 'count': 1, |
| 2221 'decoder_func': 'DoUniform1iv', | 2248 'decoder_func': 'DoUniform1iv', |
| 2222 'unit_test': False, | 2249 'unit_test': False, |
| 2223 }, | 2250 }, |
| 2251 'Uniform1ui': { |
| 2252 'type': 'PUTXn', |
| 2253 'count': 1, |
| 2254 'unsafe': True, |
| 2255 }, |
| 2256 'Uniform1uiv': { |
| 2257 'type': 'PUTn', |
| 2258 'count': 1, |
| 2259 'unsafe': True, |
| 2260 }, |
| 2224 'Uniform2i': {'type': 'PUTXn', 'count': 2}, | 2261 'Uniform2i': {'type': 'PUTXn', 'count': 2}, |
| 2225 'Uniform2f': {'type': 'PUTXn', 'count': 2}, | 2262 'Uniform2f': {'type': 'PUTXn', 'count': 2}, |
| 2226 'Uniform2fv': { | 2263 'Uniform2fv': { |
| 2227 'type': 'PUTn', | 2264 'type': 'PUTn', |
| 2228 'count': 2, | 2265 'count': 2, |
| 2229 'decoder_func': 'DoUniform2fv', | 2266 'decoder_func': 'DoUniform2fv', |
| 2230 }, | 2267 }, |
| 2231 'Uniform2iv': { | 2268 'Uniform2iv': { |
| 2232 'type': 'PUTn', | 2269 'type': 'PUTn', |
| 2233 'count': 2, | 2270 'count': 2, |
| 2234 'decoder_func': 'DoUniform2iv', | 2271 'decoder_func': 'DoUniform2iv', |
| 2235 }, | 2272 }, |
| 2273 'Uniform2ui': { |
| 2274 'type': 'PUTXn', |
| 2275 'count': 2, |
| 2276 'unsafe': True, |
| 2277 }, |
| 2278 'Uniform2uiv': { |
| 2279 'type': 'PUTn', |
| 2280 'count': 2, |
| 2281 'unsafe': True, |
| 2282 }, |
| 2236 'Uniform3i': {'type': 'PUTXn', 'count': 3}, | 2283 'Uniform3i': {'type': 'PUTXn', 'count': 3}, |
| 2237 'Uniform3f': {'type': 'PUTXn', 'count': 3}, | 2284 'Uniform3f': {'type': 'PUTXn', 'count': 3}, |
| 2238 'Uniform3fv': { | 2285 'Uniform3fv': { |
| 2239 'type': 'PUTn', | 2286 'type': 'PUTn', |
| 2240 'count': 3, | 2287 'count': 3, |
| 2241 'decoder_func': 'DoUniform3fv', | 2288 'decoder_func': 'DoUniform3fv', |
| 2242 }, | 2289 }, |
| 2243 'Uniform3iv': { | 2290 'Uniform3iv': { |
| 2244 'type': 'PUTn', | 2291 'type': 'PUTn', |
| 2245 'count': 3, | 2292 'count': 3, |
| 2246 'decoder_func': 'DoUniform3iv', | 2293 'decoder_func': 'DoUniform3iv', |
| 2247 }, | 2294 }, |
| 2295 'Uniform3ui': { |
| 2296 'type': 'PUTXn', |
| 2297 'count': 3, |
| 2298 'unsafe': True, |
| 2299 }, |
| 2300 'Uniform3uiv': { |
| 2301 'type': 'PUTn', |
| 2302 'count': 3, |
| 2303 'unsafe': True, |
| 2304 }, |
| 2248 'Uniform4i': {'type': 'PUTXn', 'count': 4}, | 2305 'Uniform4i': {'type': 'PUTXn', 'count': 4}, |
| 2249 'Uniform4f': {'type': 'PUTXn', 'count': 4}, | 2306 'Uniform4f': {'type': 'PUTXn', 'count': 4}, |
| 2250 'Uniform4fv': { | 2307 'Uniform4fv': { |
| 2251 'type': 'PUTn', | 2308 'type': 'PUTn', |
| 2252 'count': 4, | 2309 'count': 4, |
| 2253 'decoder_func': 'DoUniform4fv', | 2310 'decoder_func': 'DoUniform4fv', |
| 2254 }, | 2311 }, |
| 2255 'Uniform4iv': { | 2312 'Uniform4iv': { |
| 2256 'type': 'PUTn', | 2313 'type': 'PUTn', |
| 2257 'count': 4, | 2314 'count': 4, |
| 2258 'decoder_func': 'DoUniform4iv', | 2315 'decoder_func': 'DoUniform4iv', |
| 2259 }, | 2316 }, |
| 2317 'Uniform4ui': { |
| 2318 'type': 'PUTXn', |
| 2319 'count': 4, |
| 2320 'unsafe': True, |
| 2321 }, |
| 2322 'Uniform4uiv': { |
| 2323 'type': 'PUTn', |
| 2324 'count': 4, |
| 2325 'unsafe': True, |
| 2326 }, |
| 2260 'UniformMatrix2fv': { | 2327 'UniformMatrix2fv': { |
| 2261 'type': 'PUTn', | 2328 'type': 'PUTn', |
| 2262 'count': 4, | 2329 'count': 4, |
| 2263 'decoder_func': 'DoUniformMatrix2fv', | 2330 'decoder_func': 'DoUniformMatrix2fv', |
| 2264 }, | 2331 }, |
| 2332 'UniformMatrix2x3fv': { |
| 2333 'type': 'PUTn', |
| 2334 'count': 6, |
| 2335 'unsafe': True, |
| 2336 }, |
| 2337 'UniformMatrix2x4fv': { |
| 2338 'type': 'PUTn', |
| 2339 'count': 8, |
| 2340 'unsafe': True, |
| 2341 }, |
| 2265 'UniformMatrix3fv': { | 2342 'UniformMatrix3fv': { |
| 2266 'type': 'PUTn', | 2343 'type': 'PUTn', |
| 2267 'count': 9, | 2344 'count': 9, |
| 2268 'decoder_func': 'DoUniformMatrix3fv', | 2345 'decoder_func': 'DoUniformMatrix3fv', |
| 2269 }, | 2346 }, |
| 2347 'UniformMatrix3x2fv': { |
| 2348 'type': 'PUTn', |
| 2349 'count': 6, |
| 2350 'unsafe': True, |
| 2351 }, |
| 2352 'UniformMatrix3x4fv': { |
| 2353 'type': 'PUTn', |
| 2354 'count': 12, |
| 2355 'unsafe': True, |
| 2356 }, |
| 2270 'UniformMatrix4fv': { | 2357 'UniformMatrix4fv': { |
| 2271 'type': 'PUTn', | 2358 'type': 'PUTn', |
| 2272 'count': 16, | 2359 'count': 16, |
| 2273 'decoder_func': 'DoUniformMatrix4fv', | 2360 'decoder_func': 'DoUniformMatrix4fv', |
| 2274 }, | 2361 }, |
| 2362 'UniformMatrix4x2fv': { |
| 2363 'type': 'PUTn', |
| 2364 'count': 8, |
| 2365 'unsafe': True, |
| 2366 }, |
| 2367 'UniformMatrix4x3fv': { |
| 2368 'type': 'PUTn', |
| 2369 'count': 12, |
| 2370 'unsafe': True, |
| 2371 }, |
| 2275 'UnmapBufferCHROMIUM': { | 2372 'UnmapBufferCHROMIUM': { |
| 2276 'gen_cmd': False, | 2373 'gen_cmd': False, |
| 2277 'extension': True, | 2374 'extension': True, |
| 2278 'chromium': True, | 2375 'chromium': True, |
| 2279 'client_test': False, | 2376 'client_test': False, |
| 2280 }, | 2377 }, |
| 2281 'UnmapBufferSubDataCHROMIUM': { | 2378 'UnmapBufferSubDataCHROMIUM': { |
| 2282 'gen_cmd': False, | 2379 'gen_cmd': False, |
| 2283 'extension': True, | 2380 'extension': True, |
| 2284 'chromium': True, | 2381 'chromium': True, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2314 'type': 'PUT', | 2411 'type': 'PUT', |
| 2315 'count': 3, | 2412 'count': 3, |
| 2316 'decoder_func': 'DoVertexAttrib3fv', | 2413 'decoder_func': 'DoVertexAttrib3fv', |
| 2317 }, | 2414 }, |
| 2318 'VertexAttrib4f': {'decoder_func': 'DoVertexAttrib4f'}, | 2415 'VertexAttrib4f': {'decoder_func': 'DoVertexAttrib4f'}, |
| 2319 'VertexAttrib4fv': { | 2416 'VertexAttrib4fv': { |
| 2320 'type': 'PUT', | 2417 'type': 'PUT', |
| 2321 'count': 4, | 2418 'count': 4, |
| 2322 'decoder_func': 'DoVertexAttrib4fv', | 2419 'decoder_func': 'DoVertexAttrib4fv', |
| 2323 }, | 2420 }, |
| 2421 'VertexAttribI4i': { |
| 2422 'unsafe': True, |
| 2423 }, |
| 2424 'VertexAttribI4iv': { |
| 2425 'type': 'PUT', |
| 2426 'count': 4, |
| 2427 'unsafe': True, |
| 2428 }, |
| 2429 'VertexAttribI4ui': { |
| 2430 'unsafe': True, |
| 2431 }, |
| 2432 'VertexAttribI4uiv': { |
| 2433 'type': 'PUT', |
| 2434 'count': 4, |
| 2435 'unsafe': True, |
| 2436 }, |
| 2437 'VertexAttribIPointer': { |
| 2438 'type': 'Manual', |
| 2439 'cmd_args': 'GLuint indx, GLintVertexAttribSize size, ' |
| 2440 'GLenumVertexAttribType type, GLsizei stride, ' |
| 2441 'GLuint offset', |
| 2442 'client_test': False, |
| 2443 'unsafe': True, |
| 2444 }, |
| 2324 'VertexAttribPointer': { | 2445 'VertexAttribPointer': { |
| 2325 'type': 'Manual', | 2446 'type': 'Manual', |
| 2326 'cmd_args': 'GLuint indx, GLintVertexAttribSize size, ' | 2447 'cmd_args': 'GLuint indx, GLintVertexAttribSize size, ' |
| 2327 'GLenumVertexAttribType type, GLboolean normalized, ' | 2448 'GLenumVertexAttribType type, GLboolean normalized, ' |
| 2328 'GLsizei stride, GLuint offset', | 2449 'GLsizei stride, GLuint offset', |
| 2329 'client_test': False, | 2450 'client_test': False, |
| 2330 }, | 2451 }, |
| 2331 'Scissor': { | 2452 'Scissor': { |
| 2332 'type': 'StateSet', | 2453 'type': 'StateSet', |
| 2333 'state': 'Scissor', | 2454 'state': 'Scissor', |
| 2334 }, | 2455 }, |
| 2335 'Viewport': { | 2456 'Viewport': { |
| 2336 'decoder_func': 'DoViewport', | 2457 'decoder_func': 'DoViewport', |
| 2337 }, | 2458 }, |
| 2338 'ResizeCHROMIUM': { | 2459 'ResizeCHROMIUM': { |
| 2339 'type': 'Custom', | 2460 'type': 'Custom', |
| 2340 'impl_func': False, | 2461 'impl_func': False, |
| 2341 'unit_test': False, | 2462 'unit_test': False, |
| 2342 'extension': True, | 2463 'extension': True, |
| 2343 'chromium': True, | 2464 'chromium': True, |
| 2344 }, | 2465 }, |
| 2345 'GetRequestableExtensionsCHROMIUM': { | 2466 'GetRequestableExtensionsCHROMIUM': { |
| 2346 'type': 'Custom', | 2467 'type': 'Custom', |
| 2347 'impl_func': False, | 2468 'impl_func': False, |
| 2348 'cmd_args': 'uint32_t bucket_id', | 2469 'cmd_args': 'uint32_t bucket_id', |
| 2349 'extension': True, | 2470 'extension': True, |
| 2350 'chromium': True, | 2471 'chromium': True, |
| 2351 }, | 2472 }, |
| 2352 'RequestExtensionCHROMIUM': { | 2473 'RequestExtensionCHROMIUM': { |
| 2353 'type': 'Custom', | 2474 'type': 'Custom', |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2971 | 3092 |
| 2972 def WriteBucketHandlerImplementation (self, func, file): | 3093 def WriteBucketHandlerImplementation (self, func, file): |
| 2973 """Writes the handler impl for the bucket version of a command.""" | 3094 """Writes the handler impl for the bucket version of a command.""" |
| 2974 file.Write(" %s(%s);\n" % | 3095 file.Write(" %s(%s);\n" % |
| 2975 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 3096 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
| 2976 | 3097 |
| 2977 def WriteServiceHandlerFunctionHeader(self, func, file): | 3098 def WriteServiceHandlerFunctionHeader(self, func, file): |
| 2978 """Writes function header for service implementation handlers.""" | 3099 """Writes function header for service implementation handlers.""" |
| 2979 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( | 3100 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( |
| 2980 uint32_t immediate_data_size, const void* cmd_data) { | 3101 uint32_t immediate_data_size, const void* cmd_data) { |
| 2981 const gles2::cmds::%(name)s& c = | 3102 """ % {'name': func.name}) |
| 3103 if func.IsUnsafe(): |
| 3104 file.Write("""if (!unsafe_es3_apis_enabled()) |
| 3105 return error::kUnknownCommand; |
| 3106 """) |
| 3107 file.Write("""const gles2::cmds::%(name)s& c = |
| 2982 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); | 3108 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); |
| 2983 (void)c; | 3109 (void)c; |
| 2984 """ % {'name': func.name}) | 3110 """ % {'name': func.name}) |
| 2985 | 3111 |
| 2986 def WriteServiceImplementation(self, func, file): | 3112 def WriteServiceImplementation(self, func, file): |
| 2987 """Writes the service implementation for a command.""" | 3113 """Writes the service implementation for a command.""" |
| 2988 self.WriteServiceHandlerFunctionHeader(func, file) | 3114 self.WriteServiceHandlerFunctionHeader(func, file) |
| 2989 self.WriteHandlerExtensionCheck(func, file) | 3115 self.WriteHandlerExtensionCheck(func, file) |
| 2990 self.WriteHandlerDeferReadWrite(func, file); | 3116 self.WriteHandlerDeferReadWrite(func, file); |
| 2991 if len(func.GetOriginalArgs()) > 0: | 3117 if len(func.GetOriginalArgs()) > 0: |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3133 | 3259 |
| 3134 def WriteServiceUnitTest(self, func, file, *extras): | 3260 def WriteServiceUnitTest(self, func, file, *extras): |
| 3135 """Writes the service unit test for a command.""" | 3261 """Writes the service unit test for a command.""" |
| 3136 | 3262 |
| 3137 if func.name == 'Enable': | 3263 if func.name == 'Enable': |
| 3138 valid_test = """ | 3264 valid_test = """ |
| 3139 TEST_P(%(test_name)s, %(name)sValidArgs) { | 3265 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 3140 SetupExpectationsForEnableDisable(%(gl_args)s, true); | 3266 SetupExpectationsForEnableDisable(%(gl_args)s, true); |
| 3141 SpecializedSetup<cmds::%(name)s, 0>(true); | 3267 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 3142 cmds::%(name)s cmd; | 3268 cmds::%(name)s cmd; |
| 3143 cmd.Init(%(args)s); | 3269 cmd.Init(%(args)s);""" |
| 3144 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 3145 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 3146 } | |
| 3147 """ | |
| 3148 elif func.name == 'Disable': | 3270 elif func.name == 'Disable': |
| 3149 valid_test = """ | 3271 valid_test = """ |
| 3150 TEST_P(%(test_name)s, %(name)sValidArgs) { | 3272 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 3151 SetupExpectationsForEnableDisable(%(gl_args)s, false); | 3273 SetupExpectationsForEnableDisable(%(gl_args)s, false); |
| 3152 SpecializedSetup<cmds::%(name)s, 0>(true); | 3274 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 3153 cmds::%(name)s cmd; | 3275 cmds::%(name)s cmd; |
| 3154 cmd.Init(%(args)s); | 3276 cmd.Init(%(args)s);""" |
| 3155 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 3156 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 3157 } | |
| 3158 """ | |
| 3159 else: | 3277 else: |
| 3160 valid_test = """ | 3278 valid_test = """ |
| 3161 TEST_P(%(test_name)s, %(name)sValidArgs) { | 3279 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 3162 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); | 3280 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); |
| 3163 SpecializedSetup<cmds::%(name)s, 0>(true); | 3281 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 3164 cmds::%(name)s cmd; | 3282 cmds::%(name)s cmd; |
| 3165 cmd.Init(%(args)s); | 3283 cmd.Init(%(args)s);""" |
| 3284 if func.IsUnsafe(): |
| 3285 valid_test += """ |
| 3286 decoder_->set_unsafe_es3_apis_enabled(true); |
| 3287 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 3288 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 3289 decoder_->set_unsafe_es3_apis_enabled(false); |
| 3290 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 3291 } |
| 3292 """ |
| 3293 else: |
| 3294 valid_test += """ |
| 3166 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 3295 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 3167 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 3296 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 3168 } | 3297 } |
| 3169 """ | 3298 """ |
| 3170 self.WriteValidUnitTest(func, file, valid_test, *extras) | 3299 self.WriteValidUnitTest(func, file, valid_test, *extras) |
| 3171 | 3300 |
| 3172 invalid_test = """ | 3301 if not func.IsUnsafe(): |
| 3302 invalid_test = """ |
| 3173 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 3303 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
| 3174 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 3304 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
| 3175 SpecializedSetup<cmds::%(name)s, 0>(false); | 3305 SpecializedSetup<cmds::%(name)s, 0>(false); |
| 3176 cmds::%(name)s cmd; | 3306 cmds::%(name)s cmd; |
| 3177 cmd.Init(%(args)s); | 3307 cmd.Init(%(args)s); |
| 3178 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 3308 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
| 3179 } | 3309 } |
| 3180 """ | 3310 """ |
| 3181 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) | 3311 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) |
| 3182 | 3312 |
| 3183 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 3313 def WriteImmediateServiceUnitTest(self, func, file, *extras): |
| 3184 """Writes the service unit test for an immediate command.""" | 3314 """Writes the service unit test for an immediate command.""" |
| 3185 file.Write("// TODO(gman): %s\n" % func.name) | 3315 file.Write("// TODO(gman): %s\n" % func.name) |
| 3186 | 3316 |
| 3187 def WriteImmediateValidationCode(self, func, file): | 3317 def WriteImmediateValidationCode(self, func, file): |
| 3188 """Writes the validation code for an immediate version of a command.""" | 3318 """Writes the validation code for an immediate version of a command.""" |
| 3189 pass | 3319 pass |
| 3190 | 3320 |
| 3191 def WriteBucketServiceUnitTest(self, func, file, *extras): | 3321 def WriteBucketServiceUnitTest(self, func, file, *extras): |
| (...skipping 1720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4912 EXPECT_CALL(*gl_, GetError()) | 5042 EXPECT_CALL(*gl_, GetError()) |
| 4913 .WillOnce(Return(GL_NO_ERROR)) | 5043 .WillOnce(Return(GL_NO_ERROR)) |
| 4914 .WillOnce(Return(GL_NO_ERROR)) | 5044 .WillOnce(Return(GL_NO_ERROR)) |
| 4915 .RetiresOnSaturation(); | 5045 .RetiresOnSaturation(); |
| 4916 SpecializedSetup<cmds::%(name)s, 0>(true); | 5046 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 4917 typedef cmds::%(name)s::Result Result; | 5047 typedef cmds::%(name)s::Result Result; |
| 4918 Result* result = static_cast<Result*>(shared_memory_address_); | 5048 Result* result = static_cast<Result*>(shared_memory_address_); |
| 4919 EXPECT_CALL(*gl_, %(gl_func_name)s(%(local_gl_args)s)); | 5049 EXPECT_CALL(*gl_, %(gl_func_name)s(%(local_gl_args)s)); |
| 4920 result->size = 0; | 5050 result->size = 0; |
| 4921 cmds::%(name)s cmd; | 5051 cmds::%(name)s cmd; |
| 4922 cmd.Init(%(args)s); | 5052 cmd.Init(%(args)s);""" |
| 5053 if func.IsUnsafe(): |
| 5054 valid_test += """ |
| 5055 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 5056 valid_test += """ |
| 4923 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5057 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 4924 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( | 5058 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( |
| 4925 %(valid_pname)s), | 5059 %(valid_pname)s), |
| 4926 result->GetNumResults()); | 5060 result->GetNumResults()); |
| 4927 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5061 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 5062 if func.IsUnsafe(): |
| 5063 valid_test += """ |
| 5064 decoder_->set_unsafe_es3_apis_enabled(false); |
| 5065 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" |
| 5066 valid_test += """ |
| 4928 } | 5067 } |
| 4929 """ | 5068 """ |
| 4930 gl_arg_strings = [] | 5069 gl_arg_strings = [] |
| 4931 valid_pname = '' | 5070 valid_pname = '' |
| 4932 for arg in func.GetOriginalArgs()[:-1]: | 5071 for arg in func.GetOriginalArgs()[:-1]: |
| 4933 arg_value = arg.GetValidGLArg(func) | 5072 arg_value = arg.GetValidGLArg(func) |
| 4934 gl_arg_strings.append(arg_value) | 5073 gl_arg_strings.append(arg_value) |
| 4935 if arg.name == 'pname': | 5074 if arg.name == 'pname': |
| 4936 valid_pname = arg_value | 5075 valid_pname = arg_value |
| 4937 if func.GetInfo('gl_test_func') == 'glGetIntegerv': | 5076 if func.GetInfo('gl_test_func') == 'glGetIntegerv': |
| 4938 gl_arg_strings.append("_") | 5077 gl_arg_strings.append("_") |
| 4939 else: | 5078 else: |
| 4940 gl_arg_strings.append("result->GetData()") | 5079 gl_arg_strings.append("result->GetData()") |
| 4941 | 5080 |
| 4942 self.WriteValidUnitTest(func, file, valid_test, { | 5081 self.WriteValidUnitTest(func, file, valid_test, { |
| 4943 'local_gl_args': ", ".join(gl_arg_strings), | 5082 'local_gl_args': ", ".join(gl_arg_strings), |
| 4944 'valid_pname': valid_pname, | 5083 'valid_pname': valid_pname, |
| 4945 }, *extras) | 5084 }, *extras) |
| 4946 | 5085 |
| 4947 invalid_test = """ | 5086 if not func.IsUnsafe(): |
| 5087 invalid_test = """ |
| 4948 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 5088 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
| 4949 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 5089 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
| 4950 SpecializedSetup<cmds::%(name)s, 0>(false); | 5090 SpecializedSetup<cmds::%(name)s, 0>(false); |
| 4951 cmds::%(name)s::Result* result = | 5091 cmds::%(name)s::Result* result = |
| 4952 static_cast<cmds::%(name)s::Result*>(shared_memory_address_); | 5092 static_cast<cmds::%(name)s::Result*>(shared_memory_address_); |
| 4953 result->size = 0; | 5093 result->size = 0; |
| 4954 cmds::%(name)s cmd; | 5094 cmds::%(name)s cmd; |
| 4955 cmd.Init(%(args)s); | 5095 cmd.Init(%(args)s); |
| 4956 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd)); | 5096 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd)); |
| 4957 EXPECT_EQ(0u, result->size);%(gl_error_test)s | 5097 EXPECT_EQ(0u, result->size);%(gl_error_test)s |
| 4958 } | 5098 } |
| 4959 """ | 5099 """ |
| 4960 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) | 5100 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) |
| 4961 | 5101 |
| 4962 class ArrayArgTypeHandler(TypeHandler): | 5102 class ArrayArgTypeHandler(TypeHandler): |
| 4963 """Base class for type handlers that handle args that are arrays""" | 5103 """Base class for type handlers that handle args that are arrays""" |
| 4964 | 5104 |
| 4965 def __init__(self): | 5105 def __init__(self): |
| 4966 TypeHandler.__init__(self) | 5106 TypeHandler.__init__(self) |
| 4967 | 5107 |
| 4968 def GetArrayType(self, func): | 5108 def GetArrayType(self, func): |
| 4969 """Returns the type of the element in the element array being PUT to.""" | 5109 """Returns the type of the element in the element array being PUT to.""" |
| 4970 for arg in func.GetOriginalArgs(): | 5110 for arg in func.GetOriginalArgs(): |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5033 """Writes the service unit test for a command.""" | 5173 """Writes the service unit test for a command.""" |
| 5034 valid_test = """ | 5174 valid_test = """ |
| 5035 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5175 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 5036 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 5176 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
| 5037 SpecializedSetup<cmds::%(name)s, 0>(true); | 5177 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 5038 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; | 5178 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; |
| 5039 cmd.Init(%(gl_args)s, &temp[0]); | 5179 cmd.Init(%(gl_args)s, &temp[0]); |
| 5040 EXPECT_CALL( | 5180 EXPECT_CALL( |
| 5041 *gl_, | 5181 *gl_, |
| 5042 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< | 5182 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< |
| 5043 %(data_type)s*>(ImmediateDataAddress(&cmd)))); | 5183 %(data_type)s*>(ImmediateDataAddress(&cmd))));""" |
| 5184 if func.IsUnsafe(): |
| 5185 valid_test += """ |
| 5186 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 5187 valid_test += """ |
| 5044 EXPECT_EQ(error::kNoError, | 5188 EXPECT_EQ(error::kNoError, |
| 5045 ExecuteImmediateCmd(cmd, sizeof(temp))); | 5189 ExecuteImmediateCmd(cmd, sizeof(temp))); |
| 5046 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5190 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 5191 if func.IsUnsafe(): |
| 5192 valid_test += """ |
| 5193 decoder_->set_unsafe_es3_apis_enabled(false); |
| 5194 EXPECT_EQ(error::kUnknownCommand, |
| 5195 ExecuteImmediateCmd(cmd, sizeof(temp)));""" |
| 5196 valid_test += """ |
| 5047 } | 5197 } |
| 5048 """ | 5198 """ |
| 5049 gl_arg_strings = [ | 5199 gl_arg_strings = [ |
| 5050 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] | 5200 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] |
| 5051 ] | 5201 ] |
| 5052 gl_any_strings = ["_"] * len(gl_arg_strings) | 5202 gl_any_strings = ["_"] * len(gl_arg_strings) |
| 5053 | 5203 |
| 5054 extra = { | 5204 extra = { |
| 5055 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), | 5205 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), |
| 5056 'data_type': self.GetArrayType(func), | 5206 'data_type': self.GetArrayType(func), |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5302 """Overridden from TypeHandler.""" | 5452 """Overridden from TypeHandler.""" |
| 5303 valid_test = """ | 5453 valid_test = """ |
| 5304 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5454 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 5305 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 5455 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
| 5306 EXPECT_CALL( | 5456 EXPECT_CALL( |
| 5307 *gl_, | 5457 *gl_, |
| 5308 %(gl_func_name)s(%(gl_args)s, | 5458 %(gl_func_name)s(%(gl_args)s, |
| 5309 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd)))); | 5459 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd)))); |
| 5310 SpecializedSetup<cmds::%(name)s, 0>(true); | 5460 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 5311 %(data_type)s temp[%(data_count)s * 2] = { 0, }; | 5461 %(data_type)s temp[%(data_count)s * 2] = { 0, }; |
| 5312 cmd.Init(%(args)s, &temp[0]); | 5462 cmd.Init(%(args)s, &temp[0]);""" |
| 5463 if func.IsUnsafe(): |
| 5464 valid_test += """ |
| 5465 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 5466 valid_test += """ |
| 5313 EXPECT_EQ(error::kNoError, | 5467 EXPECT_EQ(error::kNoError, |
| 5314 ExecuteImmediateCmd(cmd, sizeof(temp))); | 5468 ExecuteImmediateCmd(cmd, sizeof(temp))); |
| 5315 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5469 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 5470 if func.IsUnsafe(): |
| 5471 valid_test += """ |
| 5472 decoder_->set_unsafe_es3_apis_enabled(false); |
| 5473 EXPECT_EQ(error::kUnknownCommand, |
| 5474 ExecuteImmediateCmd(cmd, sizeof(temp)));""" |
| 5475 valid_test += """ |
| 5316 } | 5476 } |
| 5317 """ | 5477 """ |
| 5318 gl_arg_strings = [] | 5478 gl_arg_strings = [] |
| 5319 gl_any_strings = [] | 5479 gl_any_strings = [] |
| 5320 arg_strings = [] | 5480 arg_strings = [] |
| 5321 for arg in func.GetOriginalArgs()[0:-1]: | 5481 for arg in func.GetOriginalArgs()[0:-1]: |
| 5322 gl_arg_strings.append(arg.GetValidGLArg(func)) | 5482 gl_arg_strings.append(arg.GetValidGLArg(func)) |
| 5323 gl_any_strings.append("_") | 5483 gl_any_strings.append("_") |
| 5324 if not arg.IsConstant(): | 5484 if not arg.IsConstant(): |
| 5325 arg_strings.append(arg.GetValidArg(func)) | 5485 arg_strings.append(arg.GetValidArg(func)) |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5579 file.Write("\n") | 5739 file.Write("\n") |
| 5580 | 5740 |
| 5581 | 5741 |
| 5582 class PUTXnHandler(ArrayArgTypeHandler): | 5742 class PUTXnHandler(ArrayArgTypeHandler): |
| 5583 """Handler for glUniform?f functions.""" | 5743 """Handler for glUniform?f functions.""" |
| 5584 def __init__(self): | 5744 def __init__(self): |
| 5585 ArrayArgTypeHandler.__init__(self) | 5745 ArrayArgTypeHandler.__init__(self) |
| 5586 | 5746 |
| 5587 def WriteHandlerImplementation(self, func, file): | 5747 def WriteHandlerImplementation(self, func, file): |
| 5588 """Overrriden from TypeHandler.""" | 5748 """Overrriden from TypeHandler.""" |
| 5589 code = """ %(type)s temp[%(count)s] = { %(values)s}; | 5749 code = """ %(type)s temp[%(count)s] = { %(values)s};""" |
| 5750 if func.IsUnsafe(): |
| 5751 code += """ |
| 5752 gl%(name)sv(%(location)s, 1, &temp[0]); |
| 5753 """ |
| 5754 else: |
| 5755 code += """ |
| 5590 Do%(name)sv(%(location)s, 1, &temp[0]); | 5756 Do%(name)sv(%(location)s, 1, &temp[0]); |
| 5591 """ | 5757 """ |
| 5592 values = "" | 5758 values = "" |
| 5593 args = func.GetOriginalArgs() | 5759 args = func.GetOriginalArgs() |
| 5594 count = int(self.GetArrayCount(func)) | 5760 count = int(self.GetArrayCount(func)) |
| 5595 num_args = len(args) | 5761 num_args = len(args) |
| 5596 for ii in range(count): | 5762 for ii in range(count): |
| 5597 values += "%s, " % args[len(args) - count + ii].name | 5763 values += "%s, " % args[len(args) - count + ii].name |
| 5598 | 5764 |
| 5599 file.Write(code % { | 5765 file.Write(code % { |
| 5600 'name': func.name, | 5766 'name': func.name, |
| 5601 'count': self.GetArrayCount(func), | 5767 'count': self.GetArrayCount(func), |
| 5602 'type': self.GetArrayType(func), | 5768 'type': self.GetArrayType(func), |
| 5603 'location': args[0].name, | 5769 'location': args[0].name, |
| 5604 'args': func.MakeOriginalArgString(""), | 5770 'args': func.MakeOriginalArgString(""), |
| 5605 'values': values, | 5771 'values': values, |
| 5606 }) | 5772 }) |
| 5607 | 5773 |
| 5608 def WriteServiceUnitTest(self, func, file, *extras): | 5774 def WriteServiceUnitTest(self, func, file, *extras): |
| 5609 """Overrriden from TypeHandler.""" | 5775 """Overrriden from TypeHandler.""" |
| 5610 valid_test = """ | 5776 valid_test = """ |
| 5611 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5777 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 5612 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s)); | 5778 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s)); |
| 5613 SpecializedSetup<cmds::%(name)s, 0>(true); | 5779 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 5614 cmds::%(name)s cmd; | 5780 cmds::%(name)s cmd; |
| 5615 cmd.Init(%(args)s); | 5781 cmd.Init(%(args)s);""" |
| 5782 if func.IsUnsafe(): |
| 5783 valid_test += """ |
| 5784 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 5785 valid_test += """ |
| 5616 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5786 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5617 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5787 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 5788 if func.IsUnsafe(): |
| 5789 valid_test += """ |
| 5790 decoder_->set_unsafe_es3_apis_enabled(false); |
| 5791 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" |
| 5792 valid_test += """ |
| 5618 } | 5793 } |
| 5619 """ | 5794 """ |
| 5620 args = func.GetOriginalArgs() | 5795 args = func.GetOriginalArgs() |
| 5621 local_args = "%s, 1, _" % args[0].GetValidGLArg(func) | 5796 local_args = "%s, 1, _" % args[0].GetValidGLArg(func) |
| 5622 self.WriteValidUnitTest(func, file, valid_test, { | 5797 self.WriteValidUnitTest(func, file, valid_test, { |
| 5623 'name': func.name, | 5798 'name': func.name, |
| 5624 'count': self.GetArrayCount(func), | 5799 'count': self.GetArrayCount(func), |
| 5625 'local_args': local_args, | 5800 'local_args': local_args, |
| 5626 }, *extras) | 5801 }, *extras) |
| 5627 | 5802 |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6361 self.type_name = name | 6536 self.type_name = name |
| 6362 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) | 6537 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 6363 | 6538 |
| 6364 def IsConstant(self): | 6539 def IsConstant(self): |
| 6365 return self.named_type.IsConstant() | 6540 return self.named_type.IsConstant() |
| 6366 | 6541 |
| 6367 def GetConstantValue(self): | 6542 def GetConstantValue(self): |
| 6368 return self.named_type.GetConstantValue() | 6543 return self.named_type.GetConstantValue() |
| 6369 | 6544 |
| 6370 def WriteValidationCode(self, file, func): | 6545 def WriteValidationCode(self, file, func): |
| 6546 if func.IsUnsafe(): |
| 6547 return |
| 6371 if self.named_type.IsConstant(): | 6548 if self.named_type.IsConstant(): |
| 6372 return | 6549 return |
| 6373 file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % | 6550 file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % |
| 6374 (ToUnderscore(self.type_name), self.name)) | 6551 (ToUnderscore(self.type_name), self.name)) |
| 6375 if self.gl_error == "GL_INVALID_ENUM": | 6552 if self.gl_error == "GL_INVALID_ENUM": |
| 6376 file.Write( | 6553 file.Write( |
| 6377 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % | 6554 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % |
| 6378 (func.original_name, self.name, self.name)) | 6555 (func.original_name, self.name, self.name)) |
| 6379 else: | 6556 else: |
| 6380 file.Write( | 6557 file.Write( |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6839 | 7016 |
| 6840 if self.return_arg: | 7017 if self.return_arg: |
| 6841 self.init_args.append(self.return_arg) | 7018 self.init_args.append(self.return_arg) |
| 6842 | 7019 |
| 6843 self.type_handler.InitFunction(self) | 7020 self.type_handler.InitFunction(self) |
| 6844 | 7021 |
| 6845 def IsImmediate(self): | 7022 def IsImmediate(self): |
| 6846 """Returns whether the function is immediate data function or not.""" | 7023 """Returns whether the function is immediate data function or not.""" |
| 6847 return False | 7024 return False |
| 6848 | 7025 |
| 7026 def IsUnsafe(self): |
| 7027 """Returns whether the function has service side validation or not.""" |
| 7028 return self.GetInfo('unsafe', False) |
| 7029 |
| 6849 def GetInfo(self, name, default = None): | 7030 def GetInfo(self, name, default = None): |
| 6850 """Returns a value from the function info for this function.""" | 7031 """Returns a value from the function info for this function.""" |
| 6851 if name in self.info: | 7032 if name in self.info: |
| 6852 return self.info[name] | 7033 return self.info[name] |
| 6853 return default | 7034 return default |
| 6854 | 7035 |
| 6855 def GetValidArg(self, arg): | 7036 def GetValidArg(self, arg): |
| 6856 """Gets a valid argument value for the parameter arg from the function info | 7037 """Gets a valid argument value for the parameter arg from the function info |
| 6857 if one exists.""" | 7038 if one exists.""" |
| 6858 try: | 7039 try: |
| 6859 index = self.GetOriginalArgs().index(arg) | 7040 index = self.GetOriginalArgs().index(arg) |
| 6860 except ValueError: | 7041 except ValueError: |
| 6861 return None | 7042 return None |
| 6862 | 7043 |
| 6863 valid_args = self.GetInfo('valid_args') | 7044 valid_args = self.GetInfo('valid_args') |
| 6864 if valid_args and str(index) in valid_args: | 7045 if valid_args and str(index) in valid_args: |
| 6865 return valid_args[str(index)] | 7046 return valid_args[str(index)] |
| 6866 return None | 7047 return None |
| 6867 | 7048 |
| 6868 def AddInfo(self, name, value): | 7049 def AddInfo(self, name, value): |
| 6869 """Adds an info.""" | 7050 """Adds an info.""" |
| 6870 self.info[name] = value | 7051 self.info[name] = value |
| 6871 | 7052 |
| 6872 def IsExtension(self): | 7053 def IsExtension(self): |
| 6873 return self.GetInfo('extension') or self.GetInfo('extension_flag') | 7054 return self.GetInfo('extension') or self.GetInfo('extension_flag') |
| 6874 | 7055 |
| 6875 def IsCoreGLFunction(self): | 7056 def IsCoreGLFunction(self): |
| 6876 return (not self.IsExtension() and | 7057 return (not self.IsExtension() and |
| 6877 not self.GetInfo('pepper_interface')) | 7058 not self.GetInfo('pepper_interface') and |
| 7059 not self.IsUnsafe()) |
| 6878 | 7060 |
| 6879 def InPepperInterface(self, interface): | 7061 def InPepperInterface(self, interface): |
| 6880 ext = self.GetInfo('pepper_interface') | 7062 ext = self.GetInfo('pepper_interface') |
| 6881 if not interface.GetName(): | 7063 if not interface.GetName(): |
| 6882 return self.IsCoreGLFunction() | 7064 return self.IsCoreGLFunction() |
| 6883 return ext == interface.GetName() | 7065 return ext == interface.GetName() |
| 6884 | 7066 |
| 6885 def InAnyPepperExtension(self): | 7067 def InAnyPepperExtension(self): |
| 6886 return self.IsCoreGLFunction() or self.GetInfo('pepper_interface') | 7068 return self.IsCoreGLFunction() or self.GetInfo('pepper_interface') |
| 6887 | 7069 |
| (...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8294 file.Write("\n") | 8476 file.Write("\n") |
| 8295 file.Close() | 8477 file.Close() |
| 8296 self.generated_cpp_filenames.append(file.filename) | 8478 self.generated_cpp_filenames.append(file.filename) |
| 8297 | 8479 |
| 8298 def WriteCommonUtilsImpl(self, filename): | 8480 def WriteCommonUtilsImpl(self, filename): |
| 8299 """Writes the gles2 common utility header.""" | 8481 """Writes the gles2 common utility header.""" |
| 8300 enum_re = re.compile(r'\#define\s+(GL_[a-zA-Z0-9_]+)\s+([0-9A-Fa-fx]+)') | 8482 enum_re = re.compile(r'\#define\s+(GL_[a-zA-Z0-9_]+)\s+([0-9A-Fa-fx]+)') |
| 8301 dict = {} | 8483 dict = {} |
| 8302 for fname in ['third_party/khronos/GLES2/gl2.h', | 8484 for fname in ['third_party/khronos/GLES2/gl2.h', |
| 8303 'third_party/khronos/GLES2/gl2ext.h', | 8485 'third_party/khronos/GLES2/gl2ext.h', |
| 8486 'third_party/khronos/GLES3/gl3.h', |
| 8304 'gpu/GLES2/gl2chromium.h', | 8487 'gpu/GLES2/gl2chromium.h', |
| 8305 'gpu/GLES2/gl2extchromium.h']: | 8488 'gpu/GLES2/gl2extchromium.h']: |
| 8306 lines = open(fname).readlines() | 8489 lines = open(fname).readlines() |
| 8307 for line in lines: | 8490 for line in lines: |
| 8308 m = enum_re.match(line) | 8491 m = enum_re.match(line) |
| 8309 if m: | 8492 if m: |
| 8310 name = m.group(1) | 8493 name = m.group(1) |
| 8311 value = m.group(2) | 8494 value = m.group(2) |
| 8312 if len(value) <= 10: | 8495 if len(value) <= 10: |
| 8313 if not value in dict: | 8496 if not value in dict: |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8693 Format(gen.generated_cpp_filenames) | 8876 Format(gen.generated_cpp_filenames) |
| 8694 | 8877 |
| 8695 if gen.errors > 0: | 8878 if gen.errors > 0: |
| 8696 print "%d errors" % gen.errors | 8879 print "%d errors" % gen.errors |
| 8697 return 1 | 8880 return 1 |
| 8698 return 0 | 8881 return 0 |
| 8699 | 8882 |
| 8700 | 8883 |
| 8701 if __name__ == '__main__': | 8884 if __name__ == '__main__': |
| 8702 sys.exit(main(sys.argv[1:])) | 8885 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |