Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Side by Side Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 859043005: Add Sync related APIs to GPU command buffer: Part I (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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 2684 matching lines...) Expand 10 before | Expand all | Expand 10 after
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) {
4995 const %(return_type)s kMyNewServiceId =
4996 reinterpret_cast<%(return_type)s>(kNewServiceId);
4949 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) 4997 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
4950 .WillOnce(Return(kNewServiceId)); 4998 .WillOnce(Return(kMyNewServiceId));
4951 SpecializedSetup<cmds::%(name)s, 0>(true); 4999 SpecializedSetup<cmds::%(name)s, 0>(true);
4952 cmds::%(name)s cmd; 5000 cmds::%(name)s cmd;
4953 cmd.Init(%(args)s%(comma)skNewClientId); 5001 cmd.Init(%(args)s%(comma)skNewClientId);"""
5002 if func.IsUnsafe():
5003 valid_test += """
5004 decoder_->set_unsafe_es3_apis_enabled(true);"""
5005 valid_test += """
4954 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5006 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4955 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5007 EXPECT_EQ(GL_NO_ERROR, GetGLError());"""
4956 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); 5008 if func.IsUnsafe():
5009 valid_test += """
5010 %(return_type)s service_id = 0;
5011 EXPECT_TRUE(Get%(resource_type)sServiceId(kNewClientId, &service_id));
5012 EXPECT_EQ(kMyNewServiceId, service_id);
5013 decoder_->set_unsafe_es3_apis_enabled(false);
5014 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
5015 }
5016 """
5017 else:
5018 valid_test += """
5019 EXPECT_TRUE(Get%(resource_type)s(kNewClientId));
4957 } 5020 }
4958 """ 5021 """
4959 comma = "" 5022 comma = ""
4960 if len(func.GetOriginalArgs()): 5023 cmd_arg_count = 0
4961 comma =", " 5024 for arg in func.GetOriginalArgs():
5025 if not arg.IsConstant():
5026 cmd_arg_count += 1
5027 if cmd_arg_count:
5028 comma = ", "
4962 self.WriteValidUnitTest(func, file, valid_test, { 5029 self.WriteValidUnitTest(func, file, valid_test, {
4963 'comma': comma, 5030 'comma': comma,
4964 'resource_type': func.name[6:], 5031 'resource_type': self.__GetResourceType(func),
5032 'return_type': func.return_type,
4965 }, *extras) 5033 }, *extras)
4966 invalid_test = """ 5034 invalid_test = """
4967 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 5035 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); 5036 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
4969 SpecializedSetup<cmds::%(name)s, 0>(false); 5037 SpecializedSetup<cmds::%(name)s, 0>(false);
4970 cmds::%(name)s cmd; 5038 cmds::%(name)s cmd;
4971 cmd.Init(%(args)s%(comma)skNewClientId); 5039 cmd.Init(%(args)s%(comma)skNewClientId);
4972 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s 5040 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s
4973 } 5041 }
4974 """ 5042 """
4975 self.WriteInvalidUnitTest(func, file, invalid_test, { 5043 self.WriteInvalidUnitTest(func, file, invalid_test, {
4976 'comma': comma, 5044 'comma': comma,
4977 }, *extras) 5045 }, *extras)
4978 5046
4979 def WriteHandlerImplementation (self, func, file): 5047 def WriteHandlerImplementation (self, func, file):
4980 """Overrriden from TypeHandler.""" 5048 """Overrriden from TypeHandler."""
4981 file.Write(" uint32_t client_id = c.client_id;\n") 5049 if func.IsUnsafe():
4982 file.Write(" if (!%sHelper(%s)) {\n" % 5050 code = """ uint32_t client_id = c.client_id;
4983 (func.name, func.MakeCmdArgString(""))) 5051 %(return_type)s service_id = 0;
4984 file.Write(" return error::kInvalidArguments;\n") 5052 if (group_->Get%(resource_name)sServiceId(client_id, &service_id)) {
4985 file.Write(" }\n") 5053 return error::kInvalidArguments;
5054 }
5055 service_id = %(gl_func_name)s(%(gl_args)s);
5056 if (service_id) {
5057 group_->Add%(resource_name)sId(client_id, service_id);
5058 }
5059 """
5060 else:
5061 code = """ uint32_t client_id = c.client_id;
5062 if (Get%(resource_name)s(client_id)) {
5063 return error::kInvalidArguments;
5064 }
5065 %(return_type)s service_id = %(gl_func_name)s(%(gl_args)s);
5066 if (service_id) {
5067 Create%(resource_name)s(client_id, service_id%(gl_args_with_comma)s);
5068 }
5069 """
5070 file.Write(code % {
5071 'resource_name': self.__GetResourceType(func),
5072 'return_type': func.return_type,
5073 'gl_func_name': func.GetGLFunctionName(),
5074 'gl_args': func.MakeOriginalArgString(""),
5075 'gl_args_with_comma': func.MakeOriginalArgString("", True) })
4986 5076
4987 def WriteGLES2Implementation(self, func, file): 5077 def WriteGLES2Implementation(self, func, file):
4988 """Overrriden from TypeHandler.""" 5078 """Overrriden from TypeHandler."""
4989 file.Write("%s GLES2Implementation::%s(%s) {\n" % 5079 file.Write("%s GLES2Implementation::%s(%s) {\n" %
4990 (func.return_type, func.original_name, 5080 (func.return_type, func.original_name,
4991 func.MakeTypedOriginalArgString(""))) 5081 func.MakeTypedOriginalArgString("")))
4992 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") 5082 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
4993 func.WriteDestinationInitalizationValidation(file) 5083 func.WriteDestinationInitalizationValidation(file)
4994 self.WriteClientGLCallLog(func, file) 5084 self.WriteClientGLCallLog(func, file)
4995 for arg in func.GetOriginalArgs(): 5085 for arg in func.GetOriginalArgs():
4996 arg.WriteClientSideValidationCode(file, func) 5086 arg.WriteClientSideValidationCode(file, func)
4997 file.Write(" GLuint client_id;\n") 5087 file.Write(" GLuint client_id;\n")
4998 file.Write( 5088 if func.return_type == "GLsync":
4999 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n") 5089 file.Write(
5090 " GetIdHandler(id_namespaces::kSyncs)->\n")
5091 else:
5092 file.Write(
5093 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n")
5000 file.Write(" MakeIds(this, 0, 1, &client_id);\n") 5094 file.Write(" MakeIds(this, 0, 1, &client_id);\n")
5001 file.Write(" helper_->%s(%s);\n" % 5095 file.Write(" helper_->%s(%s);\n" %
5002 (func.name, func.MakeCmdArgString(""))) 5096 (func.name, func.MakeCmdArgString("")))
5003 file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n') 5097 file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n')
5004 file.Write(" CheckGLError();\n") 5098 file.Write(" CheckGLError();\n")
5005 file.Write(" return client_id;\n") 5099 if func.return_type == "GLsync":
5100 file.Write(" return reinterpret_cast<GLsync>(client_id);\n")
5101 else:
5102 file.Write(" return client_id;\n")
5006 file.Write("}\n") 5103 file.Write("}\n")
5007 file.Write("\n") 5104 file.Write("\n")
5008 5105
5009 5106
5010 class DeleteHandler(TypeHandler): 5107 class DeleteHandler(TypeHandler):
5011 """Handler for glDelete___ single resource type functions.""" 5108 """Handler for glDelete___ single resource type functions."""
5012 5109
5013 def __init__(self): 5110 def __init__(self):
5014 TypeHandler.__init__(self) 5111 TypeHandler.__init__(self)
5015 5112
5016 def WriteServiceImplementation(self, func, file): 5113 def WriteServiceImplementation(self, func, file):
5017 """Overrriden from TypeHandler.""" 5114 """Overrriden from TypeHandler."""
5115 if func.IsUnsafe():
5116 TypeHandler.WriteServiceImplementation(self, func, file)
5117 # HandleDeleteShader and HandleDeleteProgram are manually written.
5018 pass 5118 pass
5019 5119
5020 def WriteGLES2Implementation(self, func, file): 5120 def WriteGLES2Implementation(self, func, file):
5021 """Overrriden from TypeHandler.""" 5121 """Overrriden from TypeHandler."""
5022 file.Write("%s GLES2Implementation::%s(%s) {\n" % 5122 file.Write("%s GLES2Implementation::%s(%s) {\n" %
5023 (func.return_type, func.original_name, 5123 (func.return_type, func.original_name,
5024 func.MakeTypedOriginalArgString(""))) 5124 func.MakeTypedOriginalArgString("")))
5025 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") 5125 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
5026 func.WriteDestinationInitalizationValidation(file) 5126 func.WriteDestinationInitalizationValidation(file)
5027 self.WriteClientGLCallLog(func, file) 5127 self.WriteClientGLCallLog(func, file)
5028 for arg in func.GetOriginalArgs(): 5128 for arg in func.GetOriginalArgs():
5029 arg.WriteClientSideValidationCode(file, func) 5129 arg.WriteClientSideValidationCode(file, func)
5030 file.Write( 5130 file.Write(
5031 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name) 5131 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name)
5032 file.Write(" %sHelper(%s);\n" % 5132 file.Write(" %sHelper(%s);\n" %
5033 (func.original_name, func.GetOriginalArgs()[-1].name)) 5133 (func.original_name, func.GetOriginalArgs()[-1].name))
5034 file.Write(" CheckGLError();\n") 5134 file.Write(" CheckGLError();\n")
5035 file.Write("}\n") 5135 file.Write("}\n")
5036 file.Write("\n") 5136 file.Write("\n")
5037 5137
5138 def WriteHandlerImplementation (self, func, file):
5139 """Overrriden from TypeHandler."""
5140 assert len(func.GetOriginalArgs()) == 1
5141 arg = func.GetOriginalArgs()[0]
5142 if func.IsUnsafe():
5143 file.Write(""" %(arg_type)s service_id = 0;
5144 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) {
5145 glDelete%(resource_type)s(service_id);
5146 group_->Remove%(resource_type)sId(%(arg_name)s);
5147 } else {
5148 LOCAL_SET_GL_ERROR(
5149 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s");
5150 }
5151 """ % { 'resource_type': func.GetInfo('resource_type'),
5152 'arg_name': arg.name,
5153 'arg_type': arg.type,
5154 'func_name': func.original_name })
5155 else:
5156 file.Write(" %sHelper(%s);\n" % (func.original_name, arg.name))
5038 5157
5039 class DELnHandler(TypeHandler): 5158 class DELnHandler(TypeHandler):
5040 """Handler for glDelete___ type functions.""" 5159 """Handler for glDelete___ type functions."""
5041 5160
5042 def __init__(self): 5161 def __init__(self):
5043 TypeHandler.__init__(self) 5162 TypeHandler.__init__(self)
5044 5163
5045 def WriteGetDataSizeCode(self, func, file): 5164 def WriteGetDataSizeCode(self, func, file):
5046 """Overrriden from TypeHandler.""" 5165 """Overrriden from TypeHandler."""
5047 code = """ uint32_t data_size; 5166 code = """ uint32_t data_size;
(...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after
6708 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 6827 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
6709 if (!result_dst) { 6828 if (!result_dst) {
6710 return error::kOutOfBounds; 6829 return error::kOutOfBounds;
6711 } 6830 }
6712 """ 6831 """
6713 file.Write(code % {'func_name': func.name}) 6832 file.Write(code % {'func_name': func.name})
6714 func.WriteHandlerValidation(file) 6833 func.WriteHandlerValidation(file)
6715 if func.IsUnsafe(): 6834 if func.IsUnsafe():
6716 assert func.GetInfo('id_mapping') 6835 assert func.GetInfo('id_mapping')
6717 assert len(func.GetInfo('id_mapping')) == 1 6836 assert len(func.GetInfo('id_mapping')) == 1
6837 assert len(args) == 1
6718 id_type = func.GetInfo('id_mapping')[0] 6838 id_type = func.GetInfo('id_mapping')[0]
6719 file.Write(" *result_dst = group_->Get%sServiceId(%s, &%s);\n" % 6839 file.Write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower()))
6840 file.Write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" %
6720 (id_type, id_type.lower(), id_type.lower())) 6841 (id_type, id_type.lower(), id_type.lower()))
6721 else: 6842 else:
6722 file.Write(" *result_dst = %s(%s);\n" % 6843 file.Write(" *result_dst = %s(%s);\n" %
6723 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 6844 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
6724 file.Write(" return error::kNoError;\n") 6845 file.Write(" return error::kNoError;\n")
6725 file.Write("}\n") 6846 file.Write("}\n")
6726 file.Write("\n") 6847 file.Write("\n")
6727 6848
6728 def WriteGLES2Implementation(self, func, file): 6849 def WriteGLES2Implementation(self, func, file):
6729 """Overrriden from TypeHandler.""" 6850 """Overrriden from TypeHandler."""
6730 impl_func = func.GetInfo('impl_func') 6851 impl_func = func.GetInfo('impl_func')
6731 if impl_func == None or impl_func == True: 6852 if impl_func == None or impl_func == True:
6732 error_value = func.GetInfo("error_value") or "GL_FALSE" 6853 error_value = func.GetInfo("error_value") or "GL_FALSE"
6733 file.Write("%s GLES2Implementation::%s(%s) {\n" % 6854 file.Write("%s GLES2Implementation::%s(%s) {\n" %
6734 (func.return_type, func.original_name, 6855 (func.return_type, func.original_name,
6735 func.MakeTypedOriginalArgString(""))) 6856 func.MakeTypedOriginalArgString("")))
6736 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") 6857 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
6737 self.WriteTraceEvent(func, file) 6858 self.WriteTraceEvent(func, file)
6738 func.WriteDestinationInitalizationValidation(file) 6859 func.WriteDestinationInitalizationValidation(file)
6739 self.WriteClientGLCallLog(func, file) 6860 self.WriteClientGLCallLog(func, file)
6740 file.Write(" typedef cmds::%s::Result Result;\n" % func.name) 6861 file.Write(" typedef cmds::%s::Result Result;\n" % func.name)
6741 file.Write(" Result* result = GetResultAs<Result*>();\n") 6862 file.Write(" Result* result = GetResultAs<Result*>();\n")
6742 file.Write(" if (!result) {\n") 6863 file.Write(" if (!result) {\n")
6743 file.Write(" return %s;\n" % error_value) 6864 file.Write(" return %s;\n" % error_value)
6744 file.Write(" }\n") 6865 file.Write(" }\n")
6745 file.Write(" *result = 0;\n") 6866 file.Write(" *result = 0;\n")
6746 arg_string = func.MakeOriginalArgString("") 6867 assert len(func.GetOriginalArgs()) == 1
6747 comma = "" 6868 id_arg = func.GetOriginalArgs()[0]
6748 if len(arg_string) > 0: 6869 if id_arg.type == 'GLsync':
6749 comma = ", " 6870 arg_string = "ToGLuint(%s)" % func.MakeOriginalArgString("")
6871 else:
6872 arg_string = func.MakeOriginalArgString("")
6750 file.Write( 6873 file.Write(
6751 " helper_->%s(%s%sGetResultShmId(), GetResultShmOffset());\n" % 6874 " helper_->%s(%s, GetResultShmId(), GetResultShmOffset());\n" %
6752 (func.name, arg_string, comma)) 6875 (func.name, arg_string))
6753 file.Write(" WaitForCmd();\n") 6876 file.Write(" WaitForCmd();\n")
6754 file.Write(" %s result_value = *result" % func.return_type) 6877 file.Write(" %s result_value = *result" % func.return_type)
6755 if func.return_type == "GLboolean": 6878 if func.return_type == "GLboolean":
6756 file.Write(" != 0") 6879 file.Write(" != 0")
6757 file.Write(';\n GPU_CLIENT_LOG("returned " << result_value);\n') 6880 file.Write(';\n GPU_CLIENT_LOG("returned " << result_value);\n')
6758 file.Write(" CheckGLError();\n") 6881 file.Write(" CheckGLError();\n")
6759 file.Write(" return result_value;\n") 6882 file.Write(" return result_value;\n")
6760 file.Write("}\n") 6883 file.Write("}\n")
6761 file.Write("\n") 6884 file.Write("\n")
6762 6885
6763 def WriteGLES2ImplementationUnitTest(self, func, file): 6886 def WriteGLES2ImplementationUnitTest(self, func, file):
6764 """Overrriden from TypeHandler.""" 6887 """Overrriden from TypeHandler."""
6765 client_test = func.GetInfo('client_test') 6888 client_test = func.GetInfo('client_test')
6766 if client_test == None or client_test == True: 6889 if client_test == None or client_test == True:
6767 code = """ 6890 code = """
6768 TEST_F(GLES2ImplementationTest, %(name)s) { 6891 TEST_F(GLES2ImplementationTest, %(name)s) {
6769 struct Cmds { 6892 struct Cmds {
6770 cmds::%(name)s cmd; 6893 cmds::%(name)s cmd;
6771 }; 6894 };
6772 6895
6773 Cmds expected; 6896 Cmds expected;
6774 ExpectedMemoryInfo result1 = 6897 ExpectedMemoryInfo result1 =
6775 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result)); 6898 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result));
6776 expected.cmd.Init(1, result1.id, result1.offset); 6899 expected.cmd.Init(%(cmd_id_value)s, result1.id, result1.offset);
6777 6900
6778 EXPECT_CALL(*command_buffer(), OnFlush()) 6901 EXPECT_CALL(*command_buffer(), OnFlush())
6779 .WillOnce(SetMemory(result1.ptr, uint32_t(1))) 6902 .WillOnce(SetMemory(result1.ptr, uint32_t(GL_TRUE)))
6780 .RetiresOnSaturation(); 6903 .RetiresOnSaturation();
6781 6904
6782 GLboolean result = gl_->%(name)s(1); 6905 GLboolean result = gl_->%(name)s(%(gl_id_value)s);
6783 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 6906 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6784 EXPECT_TRUE(result); 6907 EXPECT_TRUE(result);
6785 } 6908 }
6786 """ 6909 """
6910 args = func.GetOriginalArgs()
6911 assert len(args) == 1
6787 file.Write(code % { 6912 file.Write(code % {
6788 'name': func.name, 6913 'name': func.name,
6789 }) 6914 'cmd_id_value': args[0].GetValidClientSideCmdArg(func),
6915 'gl_id_value': args[0].GetValidClientSideArg(func) })
6790 6916
6791 6917
6792 class STRnHandler(TypeHandler): 6918 class STRnHandler(TypeHandler):
6793 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and 6919 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and
6794 GetTranslatedShaderSourceANGLE.""" 6920 GetTranslatedShaderSourceANGLE."""
6795 6921
6796 def __init__(self): 6922 def __init__(self):
6797 TypeHandler.__init__(self) 6923 TypeHandler.__init__(self)
6798 6924
6799 def InitFunction(self, func): 6925 def InitFunction(self, func):
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
7004 index = func.GetOriginalArgs().index(self) 7130 index = func.GetOriginalArgs().index(self)
7005 return str(index + 1) 7131 return str(index + 1)
7006 7132
7007 def GetValidClientSideArg(self, func): 7133 def GetValidClientSideArg(self, func):
7008 """Gets a valid value for this argument.""" 7134 """Gets a valid value for this argument."""
7009 valid_arg = func.GetValidArg(self) 7135 valid_arg = func.GetValidArg(self)
7010 if valid_arg != None: 7136 if valid_arg != None:
7011 return valid_arg 7137 return valid_arg
7012 7138
7013 index = func.GetOriginalArgs().index(self) 7139 index = func.GetOriginalArgs().index(self)
7140 if self.type == 'GLsync':
7141 return ("reinterpret_cast<GLsync>(%d)" % (index + 1))
7014 return str(index + 1) 7142 return str(index + 1)
7015 7143
7016 def GetValidClientSideCmdArg(self, func): 7144 def GetValidClientSideCmdArg(self, func):
7017 """Gets a valid value for this argument.""" 7145 """Gets a valid value for this argument."""
7018 valid_arg = func.GetValidArg(self) 7146 valid_arg = func.GetValidArg(self)
7019 if valid_arg != None: 7147 if valid_arg != None:
7020 return valid_arg 7148 return valid_arg
7021 try: 7149 try:
7022 index = func.GetOriginalArgs().index(self) 7150 index = func.GetOriginalArgs().index(self)
7023 return str(index + 1) 7151 return str(index + 1)
7024 except ValueError: 7152 except ValueError:
7025 pass 7153 pass
7026 index = func.GetCmdArgs().index(self) 7154 index = func.GetCmdArgs().index(self)
7027 return str(index + 1) 7155 return str(index + 1)
7028 7156
7029 def GetValidGLArg(self, func): 7157 def GetValidGLArg(self, func):
7030 """Gets a valid GL value for this argument.""" 7158 """Gets a valid GL value for this argument."""
7031 return self.GetValidArg(func) 7159 value = self.GetValidArg(func)
7160 if self.type == 'GLsync':
7161 return ("reinterpret_cast<GLsync>(%s)" % value)
7162 return value
7032 7163
7033 def GetValidNonCachedClientSideArg(self, func): 7164 def GetValidNonCachedClientSideArg(self, func):
7034 """Returns a valid value for this argument in a GL call. 7165 """Returns a valid value for this argument in a GL call.
7035 Using the value will produce a command buffer service invocation. 7166 Using the value will produce a command buffer service invocation.
7036 Returns None if there is no such value.""" 7167 Returns None if there is no such value."""
7037 return '123' 7168 return '123'
7038 7169
7039 def GetValidNonCachedClientSideCmdArg(self, func): 7170 def GetValidNonCachedClientSideCmdArg(self, func):
7040 """Returns a valid value for this argument in a command buffer command. 7171 """Returns a valid value for this argument in a command buffer command.
7041 Calling the GL function with the value returned by 7172 Calling the GL function with the value returned by
(...skipping 12 matching lines...) Expand all
7054 def GetLogArg(self): 7185 def GetLogArg(self):
7055 """Get argument appropriate for LOG macro.""" 7186 """Get argument appropriate for LOG macro."""
7056 if self.type == 'GLboolean': 7187 if self.type == 'GLboolean':
7057 return 'GLES2Util::GetStringBool(%s)' % self.name 7188 return 'GLES2Util::GetStringBool(%s)' % self.name
7058 if self.type == 'GLenum': 7189 if self.type == 'GLenum':
7059 return 'GLES2Util::GetStringEnum(%s)' % self.name 7190 return 'GLES2Util::GetStringEnum(%s)' % self.name
7060 return self.name 7191 return self.name
7061 7192
7062 def WriteGetCode(self, file): 7193 def WriteGetCode(self, file):
7063 """Writes the code to get an argument from a command structure.""" 7194 """Writes the code to get an argument from a command structure."""
7195 if self.type == 'GLsync':
7196 my_type = 'GLuint'
7197 else:
7198 my_type = self.type
7064 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % 7199 file.Write(" %s %s = static_cast<%s>(c.%s);\n" %
7065 (self.type, self.name, self.type, self.name)) 7200 (my_type, self.name, my_type, self.name))
7066 7201
7067 def WriteValidationCode(self, file, func): 7202 def WriteValidationCode(self, file, func):
7068 """Writes the validation code for an argument.""" 7203 """Writes the validation code for an argument."""
7069 pass 7204 pass
7070 7205
7071 def WriteClientSideValidationCode(self, file, func): 7206 def WriteClientSideValidationCode(self, file, func):
7072 """Writes the validation code for an argument.""" 7207 """Writes the validation code for an argument."""
7073 pass 7208 pass
7074 7209
7075 def WriteDestinationInitalizationValidation(self, file, func): 7210 def WriteDestinationInitalizationValidation(self, file, func):
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
7189 def GetInvalidArg(self, index): 7324 def GetInvalidArg(self, index):
7190 """overridden from SizeArgument.""" 7325 """overridden from SizeArgument."""
7191 return ("-1", "kOutOfBounds", "GL_NO_ERROR") 7326 return ("-1", "kOutOfBounds", "GL_NO_ERROR")
7192 7327
7193 def WriteValidationCode(self, file, func): 7328 def WriteValidationCode(self, file, func):
7194 """overridden from SizeArgument.""" 7329 """overridden from SizeArgument."""
7195 pass 7330 pass
7196 7331
7197 7332
7198 class EnumBaseArgument(Argument): 7333 class EnumBaseArgument(Argument):
7199 """Base class for EnumArgument, IntArgument and ValidatedBoolArgument""" 7334 """Base class for EnumArgument, IntArgument, BitfieldArgument, and
7335 ValidatedBoolArgument."""
7200 7336
7201 def __init__(self, name, gl_type, type, gl_error): 7337 def __init__(self, name, gl_type, type, gl_error):
7202 Argument.__init__(self, name, gl_type) 7338 Argument.__init__(self, name, gl_type)
7203 7339
7204 self.local_type = type 7340 self.local_type = type
7205 self.gl_error = gl_error 7341 self.gl_error = gl_error
7206 name = type[len(gl_type):] 7342 name = type[len(gl_type):]
7207 self.type_name = name 7343 self.type_name = name
7208 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) 7344 self.named_type = NamedType(_NAMED_TYPE_INFO[name])
7209 7345
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
7305 def __init__(self, name, type): 7441 def __init__(self, name, type):
7306 EnumBaseArgument.__init__(self, name, "GLenum", type, "GL_INVALID_ENUM") 7442 EnumBaseArgument.__init__(self, name, "GLenum", type, "GL_INVALID_ENUM")
7307 7443
7308 def GetLogArg(self): 7444 def GetLogArg(self):
7309 """Overridden from Argument.""" 7445 """Overridden from Argument."""
7310 return ("GLES2Util::GetString%s(%s)" % 7446 return ("GLES2Util::GetString%s(%s)" %
7311 (self.type_name, self.name)) 7447 (self.type_name, self.name))
7312 7448
7313 7449
7314 class IntArgument(EnumBaseArgument): 7450 class IntArgument(EnumBaseArgument):
7315 """A class for a GLint argument that can only except specific values. 7451 """A class for a GLint argument that can only accept specific values.
7316 7452
7317 For example glTexImage2D takes a GLint for its internalformat 7453 For example glTexImage2D takes a GLint for its internalformat
7318 argument instead of a GLenum. 7454 argument instead of a GLenum.
7319 """ 7455 """
7320 7456
7321 def __init__(self, name, type): 7457 def __init__(self, name, type):
7322 EnumBaseArgument.__init__(self, name, "GLint", type, "GL_INVALID_VALUE") 7458 EnumBaseArgument.__init__(self, name, "GLint", type, "GL_INVALID_VALUE")
7323 7459
7324 7460
7325 class ValidatedBoolArgument(EnumBaseArgument): 7461 class ValidatedBoolArgument(EnumBaseArgument):
7326 """A class for a GLboolean argument that can only except specific values. 7462 """A class for a GLboolean argument that can only accept specific values.
7327 7463
7328 For example glUniformMatrix takes a GLboolean for it's transpose but it 7464 For example glUniformMatrix takes a GLboolean for it's transpose but it
7329 must be false. 7465 must be false.
7330 """ 7466 """
7331 7467
7332 def __init__(self, name, type): 7468 def __init__(self, name, type):
7333 EnumBaseArgument.__init__(self, name, "GLboolean", type, "GL_INVALID_VALUE") 7469 EnumBaseArgument.__init__(self, name, "GLboolean", type, "GL_INVALID_VALUE")
7334 7470
7335 def GetLogArg(self): 7471 def GetLogArg(self):
7336 """Overridden from Argument.""" 7472 """Overridden from Argument."""
7337 return 'GLES2Util::GetStringBool(%s)' % self.name 7473 return 'GLES2Util::GetStringBool(%s)' % self.name
7338 7474
7339 7475
7476 class BitFieldArgument(EnumBaseArgument):
7477 """A class for a GLbitfield argument that can only accept specific values.
7478
7479 For example glFenceSync takes a GLbitfield for its flags argument bit it
7480 must be 0.
7481 """
7482
7483 def __init__(self, name, type):
7484 EnumBaseArgument.__init__(self, name, "GLbitfield", type,
7485 "GL_INVALID_VALUE")
7486
7487
7340 class ImmediatePointerArgument(Argument): 7488 class ImmediatePointerArgument(Argument):
7341 """A class that represents an immediate argument to a function. 7489 """A class that represents an immediate argument to a function.
7342 7490
7343 An immediate argument is one where the data follows the command. 7491 An immediate argument is one where the data follows the command.
7344 """ 7492 """
7345 7493
7346 def __init__(self, name, type): 7494 def __init__(self, name, type):
7347 Argument.__init__(self, name, type) 7495 Argument.__init__(self, name, type)
7348 7496
7349 def IsPointer(self): 7497 def IsPointer(self):
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
7577 def GetValidGLArg(self, func): 7725 def GetValidGLArg(self, func):
7578 return "_" 7726 return "_"
7579 7727
7580 7728
7581 class ResourceIdArgument(Argument): 7729 class ResourceIdArgument(Argument):
7582 """A class that represents a resource id argument to a function.""" 7730 """A class that represents a resource id argument to a function."""
7583 7731
7584 def __init__(self, name, type): 7732 def __init__(self, name, type):
7585 match = re.match("(GLid\w+)", type) 7733 match = re.match("(GLid\w+)", type)
7586 self.resource_type = match.group(1)[4:] 7734 self.resource_type = match.group(1)[4:]
7587 type = type.replace(match.group(1), "GLuint") 7735 if self.resource_type == "Sync":
7736 type = type.replace(match.group(1), "GLsync")
7737 else:
7738 type = type.replace(match.group(1), "GLuint")
7588 Argument.__init__(self, name, type) 7739 Argument.__init__(self, name, type)
7589 7740
7590 def WriteGetCode(self, file): 7741 def WriteGetCode(self, file):
7591 """Overridden from Argument.""" 7742 """Overridden from Argument."""
7592 file.Write(" %s %s = c.%s;\n" % (self.type, self.name, self.name)) 7743 if self.type == "GLsync":
7744 my_type = "GLuint"
7745 else:
7746 my_type = self.type
7747 file.Write(" %s %s = c.%s;\n" % (my_type, self.name, self.name))
7593 7748
7594 def GetValidArg(self, func): 7749 def GetValidArg(self, func):
7595 return "client_%s_id_" % self.resource_type.lower() 7750 return "client_%s_id_" % self.resource_type.lower()
7596 7751
7597 def GetValidGLArg(self, func): 7752 def GetValidGLArg(self, func):
7753 if self.resource_type == "Sync":
7754 return "reinterpret_cast<GLsync>(kService%sId)" % self.resource_type
7598 return "kService%sId" % self.resource_type 7755 return "kService%sId" % self.resource_type
7599 7756
7600 7757
7601 class ResourceIdBindArgument(Argument): 7758 class ResourceIdBindArgument(Argument):
7602 """Represents a resource id argument to a bind function.""" 7759 """Represents a resource id argument to a bind function."""
7603 7760
7604 def __init__(self, name, type): 7761 def __init__(self, name, type):
7605 match = re.match("(GLidBind\w+)", type) 7762 match = re.match("(GLidBind\w+)", type)
7606 self.resource_type = match.group(1)[8:] 7763 self.resource_type = match.group(1)[8:]
7607 type = type.replace(match.group(1), "GLuint") 7764 type = type.replace(match.group(1), "GLuint")
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
8300 " ".join(arg_parts[0:-1])) 8457 " ".join(arg_parts[0:-1]))
8301 # Is this a resource argument? Must come after pointer check. 8458 # Is this a resource argument? Must come after pointer check.
8302 elif arg_parts[0].startswith('GLidBind'): 8459 elif arg_parts[0].startswith('GLidBind'):
8303 return ResourceIdBindArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8460 return ResourceIdBindArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8304 elif arg_parts[0].startswith('GLidZero'): 8461 elif arg_parts[0].startswith('GLidZero'):
8305 return ResourceIdZeroArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8462 return ResourceIdZeroArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8306 elif arg_parts[0].startswith('GLid'): 8463 elif arg_parts[0].startswith('GLid'):
8307 return ResourceIdArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8464 return ResourceIdArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8308 elif arg_parts[0].startswith('GLenum') and len(arg_parts[0]) > 6: 8465 elif arg_parts[0].startswith('GLenum') and len(arg_parts[0]) > 6:
8309 return EnumArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8466 return EnumArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8467 elif arg_parts[0].startswith('GLbitfield') and len(arg_parts[0]) > 10:
8468 return BitFieldArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8310 elif arg_parts[0].startswith('GLboolean') and len(arg_parts[0]) > 9: 8469 elif arg_parts[0].startswith('GLboolean') and len(arg_parts[0]) > 9:
8311 return ValidatedBoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8470 return ValidatedBoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8312 elif arg_parts[0].startswith('GLboolean'): 8471 elif arg_parts[0].startswith('GLboolean'):
8313 return BoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8472 return BoolArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8314 elif arg_parts[0].startswith('GLintUniformLocation'): 8473 elif arg_parts[0].startswith('GLintUniformLocation'):
8315 return UniformLocationArgument(arg_parts[-1]) 8474 return UniformLocationArgument(arg_parts[-1])
8316 elif (arg_parts[0].startswith('GLint') and len(arg_parts[0]) > 5 and 8475 elif (arg_parts[0].startswith('GLint') and len(arg_parts[0]) > 5 and
8317 not arg_parts[0].startswith('GLintptr')): 8476 not arg_parts[0].startswith('GLintptr')):
8318 return IntArgument(arg_parts[-1], " ".join(arg_parts[0:-1])) 8477 return IntArgument(arg_parts[-1], " ".join(arg_parts[0:-1]))
8319 elif (arg_parts[0].startswith('GLsizeiNotNegative') or 8478 elif (arg_parts[0].startswith('GLsizeiNotNegative') or
(...skipping 1304 matching lines...) Expand 10 before | Expand all | Expand 10 after
9624 Format(gen.generated_cpp_filenames) 9783 Format(gen.generated_cpp_filenames)
9625 9784
9626 if gen.errors > 0: 9785 if gen.errors > 0:
9627 print "%d errors" % gen.errors 9786 print "%d errors" % gen.errors
9628 return 1 9787 return 1
9629 return 0 9788 return 0
9630 9789
9631 9790
9632 if __name__ == '__main__': 9791 if __name__ == '__main__':
9633 sys.exit(main(sys.argv[1:])) 9792 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698