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

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

Issue 434063: Merged in recent changes to command buffer code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """code generator for GL command buffers.""" 7 """code generator for GL command buffers."""
8 8
9 import os 9 import os
10 import os.path 10 import os.path
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenu m attachment, GLenum textarget, GLResourceId texture, GLint level); 88 GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenu m attachment, GLenum textarget, GLResourceId texture, GLint level);
89 GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); 89 GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
90 GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); 90 GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers);
91 GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); 91 GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
92 GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* frameb uffers); 92 GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* frameb uffers);
93 GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* rende rbuffers); 93 GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* rende rbuffers);
94 GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); 94 GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures);
95 GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLResourceId program, GLu int index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* na me); 95 GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLResourceId program, GLu int index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* na me);
96 GL_APICALL void GL_APIENTRY glGetActiveUniform (GLResourceId program, GL uint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* n ame); 96 GL_APICALL void GL_APIENTRY glGetActiveUniform (GLResourceId program, GL uint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* n ame);
97 GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLResourceId program, GLsizei maxcount, GLsizei* count, GLuint* shaders); 97 GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLResourceId program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
98 GL_APICALL int GL_APIENTRY glGetAttribLocation (GLResourceId program, c onst char* name); 98 GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLResourceId program, c onst char* name);
99 GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* para ms); 99 GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* para ms);
100 GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenu m pname, GLint* params); 100 GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenu m pname, GLint* params);
101 GL_APICALL GLenum GL_APIENTRY glGetError (void); 101 GL_APICALL GLenum GL_APIENTRY glGetError (void);
102 GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); 102 GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params);
103 GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenu m target, GLenum attachment, GLenum pname, GLint* params); 103 GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenu m target, GLenum attachment, GLenum pname, GLint* params);
104 GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); 104 GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params);
105 GL_APICALL void GL_APIENTRY glGetProgramiv (GLResourceId program, GLenum pname, GLint* params); 105 GL_APICALL void GL_APIENTRY glGetProgramiv (GLResourceId program, GLenum pname, GLint* params);
106 GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLResourceId program, G Lsizei bufsize, GLsizei* length, char* infolog); 106 GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLResourceId program, G Lsizei bufsize, GLsizei* length, char* infolog);
107 GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); 107 GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params);
108 GL_APICALL void GL_APIENTRY glGetShaderiv (GLResourceId shader, GLenum p name, GLint* params); 108 GL_APICALL void GL_APIENTRY glGetShaderiv (GLResourceId shader, GLenum p name, GLint* params);
109 GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLResourceId shader, GLs izei bufsize, GLsizei* length, char* infolog); 109 GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLResourceId shader, GLs izei bufsize, GLsizei* length, char* infolog);
110 GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertyp e, GLenum precisiontype, GLint* range, GLint* precision); 110 GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertyp e, GLenum precisiontype, GLint* range, GLint* precision);
111 GL_APICALL void GL_APIENTRY glGetShaderSource (GLResourceId shader, GLsi zei bufsize, GLsizei* length, char* source); 111 GL_APICALL void GL_APIENTRY glGetShaderSource (GLResourceId shader, GLsi zei bufsize, GLsizei* length, char* source);
112 GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); 112 GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name);
113 GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum p name, GLfloat* params); 113 GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum p name, GLfloat* params);
114 GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum p name, GLint* params); 114 GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum p name, GLint* params);
115 GL_APICALL void GL_APIENTRY glGetUniformfv (GLResourceId program, GLint location, GLfloat* params); 115 GL_APICALL void GL_APIENTRY glGetUniformfv (GLResourceId program, GLint location, GLfloat* params);
116 GL_APICALL void GL_APIENTRY glGetUniformiv (GLResourceId program, GLint location, GLint* params); 116 GL_APICALL void GL_APIENTRY glGetUniformiv (GLResourceId program, GLint location, GLint* params);
117 GL_APICALL int GL_APIENTRY glGetUniformLocation (GLResourceId program, const char* name); 117 GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLResourceId program, const char* name);
118 GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pn ame, GLfloat* params); 118 GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pn ame, GLfloat* params);
119 GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pn ame, GLint* params); 119 GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pn ame, GLint* params);
120 GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLe num pname, void** pointer); 120 GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLe num pname, void** pointer);
121 GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); 121 GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
122 GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLResourceId buffer); 122 GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLResourceId buffer);
123 GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); 123 GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
124 GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLResourceId framebuffer); 124 GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLResourceId framebuffer);
125 GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLResourceId program); 125 GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLResourceId program);
126 GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLResourceId renderbuffer) ; 126 GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLResourceId renderbuffer) ;
127 GL_APICALL GLboolean GL_APIENTRY glIsShader (GLResourceId shader); 127 GL_APICALL GLboolean GL_APIENTRY glIsShader (GLResourceId shader);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 186
187 # This table specifies types and other special data for the commands that 187 # This table specifies types and other special data for the commands that
188 # will be generated. 188 # will be generated.
189 # 189 #
190 # type: defines which handler will be used to generate code. 190 # type: defines which handler will be used to generate code.
191 # DecoderFunc: defines which function to call in the decoder to execute the 191 # DecoderFunc: defines which function to call in the decoder to execute the
192 # corresponding GL command. If not specified the GL command will 192 # corresponding GL command. If not specified the GL command will
193 # be called directly. 193 # be called directly.
194 # cmd_args: The arguments to use for the command. This overrides generating 194 # cmd_args: The arguments to use for the command. This overrides generating
195 # them based on the GL function arguments. 195 # them based on the GL function arguments.
196 # a NonImmediate type is a type that stays a pointer even in
197 # and immediate version of acommand.
196 # immediate: Whether or not to generate an immediate command for the GL 198 # immediate: Whether or not to generate an immediate command for the GL
197 # function. The default is if there is exactly 1 pointer argument 199 # function. The default is if there is exactly 1 pointer argument
198 # in the GL function an immediate command is generated. 200 # in the GL function an immediate command is generated.
199 # needs_size: If true a data_size field is added to the command. 201 # needs_size: If true a data_size field is added to the command.
200 # data_type: The type of data the command uses. For PUTn or PUT types. 202 # data_type: The type of data the command uses. For PUTn or PUT types.
201 # count: The number of units per element. For PUTn or PUT types. 203 # count: The number of units per element. For PUTn or PUT types.
202 204
203 _FUNCTION_INFO = { 205 _FUNCTION_INFO = {
204 'BindAttribLocation': {'type': 'GLchar'}, 206 'BindAttribLocation': {'type': 'GLchar'},
205 'BindBuffer': {'DecoderFunc': 'DoBindBuffer'}, 207 'BindBuffer': {'DecoderFunc': 'DoBindBuffer'},
206 'BindFramebuffer': {'DecoderFunc': 'glBindFramebufferEXT'}, 208 'BindFramebuffer': {'DecoderFunc': 'glBindFramebufferEXT'},
207 'BindRenderbuffer': {'DecoderFunc': 'glBindRenderbufferEXT'}, 209 'BindRenderbuffer': {'DecoderFunc': 'glBindRenderbufferEXT'},
208 'BufferData': {'type': 'Data'}, 210 'BufferData': {'type': 'Manual', 'immediate': True,},
209 'BufferSubData': {'type': 'Data'}, 211 'BufferSubData': {'type': 'Data'},
210 'CheckFramebufferStatus': {'DecoderFunc': 'glCheckFramebufferStatusEXT'}, 212 'CheckFramebufferStatus': {'DecoderFunc': 'glCheckFramebufferStatusEXT'},
211 'ClearDepthf': {'DecoderFunc': 'glClearDepth'}, 213 'ClearDepthf': {'DecoderFunc': 'glClearDepth'},
212 'CompressedTexImage2D': {'type': 'Data'}, 214 'CompressedTexImage2D': {'type': 'Manual', 'immediate': True,},
213 'CompressedTexSubImage2D': {'type': 'Data'}, 215 'CompressedTexSubImage2D': {'type': 'Data'},
214 'CreateProgram': {'type': 'Create'}, 216 'CreateProgram': {'type': 'Create'},
215 'CreateShader': {'type': 'Create'}, 217 'CreateShader': {'type': 'Create'},
216 'DeleteBuffers': {'type': 'DELn'}, 218 'DeleteBuffers': {'type': 'DELn'},
217 'DeleteFramebuffers': {'type': 'DELn'}, 219 'DeleteFramebuffers': {'type': 'DELn'},
218 'DeleteProgram': {'DecoderFunc': 'DoDeleteProgram'}, 220 'DeleteProgram': {'DecoderFunc': 'DoDeleteProgram'},
219 'DeleteRenderbuffers': {'type': 'DELn'}, 221 'DeleteRenderbuffers': {'type': 'DELn'},
220 'DeleteShader': {'DecoderFunc': 'DoDeleteShader'}, 222 'DeleteShader': {'DecoderFunc': 'DoDeleteShader'},
221 'DeleteTextures': {'type': 'DELn'}, 223 'DeleteTextures': {'type': 'DELn'},
222 'DepthRangef': {'DecoderFunc': 'glDepthRange'}, 224 'DepthRangef': {'DecoderFunc': 'glDepthRange'},
223 'DrawElements': { 225 'DrawElements': {
224 'type': 'Manual', 226 'type': 'Manual',
225 'cmd_args': 'GLenum mode, GLsizei count, GLenum type, GLuint index_offset', 227 'cmd_args': 'GLenum mode, GLsizei count, GLenum type, GLuint index_offset',
226 }, 228 },
227 'FramebufferRenderbuffer': {'DecoderFunc': 'glFramebufferRenderbufferEXT'}, 229 'FramebufferRenderbuffer': {'DecoderFunc': 'glFramebufferRenderbufferEXT'},
228 'FramebufferTexture2D': {'DecoderFunc': 'glFramebufferTexture2DEXT'}, 230 'FramebufferTexture2D': {'DecoderFunc': 'glFramebufferTexture2DEXT'},
229 'GenerateMipmap': {'DecoderFunc': 'glGenerateMipmapEXT'}, 231 'GenerateMipmap': {'DecoderFunc': 'glGenerateMipmapEXT'},
230 'GenBuffers': {'type': 'GENn'}, 232 'GenBuffers': {'type': 'GENn'},
231 'GenFramebuffers': {'type': 'GENn'}, 233 'GenFramebuffers': {'type': 'GENn'},
232 'GenRenderbuffers': {'type': 'GENn'}, 234 'GenRenderbuffers': {'type': 'GENn'},
233 'GenTextures': {'type': 'GENn'}, 235 'GenTextures': {'type': 'GENn'},
234 'GetActiveAttrib': {'type': 'Custom'}, 236 'GetActiveAttrib': {'type': 'Custom'},
235 'GetActiveUniform': {'type': 'Custom'}, 237 'GetActiveUniform': {'type': 'Custom'},
236 'GetAttachedShaders': {'type': 'Custom'}, 238 'GetAttachedShaders': {'type': 'Custom'},
237 'GetAttribLocation': {'type': 'GetGLchar'}, 239 'GetAttribLocation': {
240 'type': 'HandWritten',
241 'immediate': True,
242 'needs_size': True,
243 'cmd_args':
244 'GLResourceId program, const char* name, NonImmediate GLint* location',
245 },
238 'GetBooleanv': {'type': 'GETn'}, 246 'GetBooleanv': {'type': 'GETn'},
239 'GetBufferParameteriv': {'type': 'GETn'}, 247 'GetBufferParameteriv': {'type': 'GETn'},
240 'GetError': {'type': 'Is'}, 248 'GetError': {'type': 'Is', 'DecoderFunc': 'GetGLError'},
241 'GetFloatv': {'type': 'GETn'}, 249 'GetFloatv': {'type': 'GETn'},
242 'GetFramebufferAttachmentParameteriv': { 250 'GetFramebufferAttachmentParameteriv': {
243 'type': 'GETn', 251 'type': 'GETn',
244 'DecoderFunc': 'glGetFramebufferAttachmentParameterivEXT', 252 'DecoderFunc': 'glGetFramebufferAttachmentParameterivEXT',
245 }, 253 },
246 'GetIntegerv': {'type': 'GETn'}, 254 'GetIntegerv': {'type': 'GETn'},
247 'GetProgramiv': {'type': 'GETn'}, 255 'GetProgramiv': {'type': 'GETn'},
248 'GetProgramInfoLog': {'type': 'STRn'}, 256 'GetProgramInfoLog': {'type': 'STRn'},
249 'GetRenderbufferParameteriv': { 257 'GetRenderbufferParameteriv': {
250 'type': 'GETn', 258 'type': 'GETn',
251 'DecoderFunc': 'glGetRenderbufferParameterivEXT', 259 'DecoderFunc': 'glGetRenderbufferParameterivEXT',
252 }, 260 },
253 'GetShaderiv': {'type': 'GETn'}, 261 'GetShaderiv': {'type': 'GETn'},
254 'GetShaderInfoLog': {'type': 'STRn'}, 262 'GetShaderInfoLog': {'type': 'STRn'},
255 'GetShaderPrecisionFormat': {'type': 'Custom'}, 263 'GetShaderPrecisionFormat': {'type': 'Custom'},
256 'GetShaderSource': {'type': 'STRn'}, 264 'GetShaderSource': {'type': 'STRn'},
257 'GetTexParameterfv': {'type': 'GETn'}, 265 'GetTexParameterfv': {'type': 'GETn'},
258 'GetTexParameteriv': {'type': 'GETn'}, 266 'GetTexParameteriv': {'type': 'GETn'},
259 'GetUniformfv': {'type': 'Custom', 'immediate': False}, 267 'GetUniformfv': {'type': 'Custom', 'immediate': False},
260 'GetUniformiv': {'type': 'Custom', 'immediate': False}, 268 'GetUniformiv': {'type': 'Custom', 'immediate': False},
261 'GetUniformLocation': {'type': 'GetGLchar'}, 269 'GetUniformLocation': {
270 'type': 'HandWritten',
271 'immediate': True,
272 'needs_size': True,
273 'cmd_args':
274 'GLResourceId program, const char* name, NonImmediate GLint* location',
275 },
262 'GetVertexAttribfv': {'type': 'GETn'}, 276 'GetVertexAttribfv': {'type': 'GETn'},
263 'GetVertexAttribiv': {'type': 'GETn'}, 277 'GetVertexAttribiv': {'type': 'GETn'},
264 'GetVertexAttribPointerv': {'type': 'Custom', 'immediate': False}, 278 'GetVertexAttribPointerv': {'type': 'Custom', 'immediate': False},
265 'IsBuffer': {'type': 'Is'}, 279 'IsBuffer': {'type': 'Is'},
266 'IsEnabled': {'type': 'Is'}, 280 'IsEnabled': {'type': 'Is'},
267 'IsFramebuffer': {'type': 'Is', 'DecoderFunc': 'glIsFramebufferEXT'}, 281 'IsFramebuffer': {'type': 'Is', 'DecoderFunc': 'glIsFramebufferEXT'},
268 'IsProgram': {'type': 'Is'}, 282 'IsProgram': {'type': 'Is'},
269 'IsRenderbuffer': {'type': 'Is', 'DecoderFunc': 'glIsRenderbufferEXT'}, 283 'IsRenderbuffer': {'type': 'Is', 'DecoderFunc': 'glIsRenderbufferEXT'},
270 'IsShader': {'type': 'Is'}, 284 'IsShader': {'type': 'Is'},
271 'IsTexture': {'type': 'Is'}, 285 'IsTexture': {'type': 'Is'},
272 'PixelStorei': {'type': 'Custom'}, 286 'PixelStorei': {'type': 'Manual'},
273 'RenderbufferStorage': {'DecoderFunc': 'glRenderbufferStorageEXT'}, 287 'RenderbufferStorage': {'DecoderFunc': 'glRenderbufferStorageEXT'},
274 'ReadPixels': {'type': 'Custom', 'immediate': False}, 288 'ReadPixels': {'type': 'Custom', 'immediate': False},
275 'ReleaseShaderCompiler': {'type': 'Noop'}, 289 'ReleaseShaderCompiler': {'type': 'Noop'},
276 'ShaderBinary': {'type': 'Noop'}, 290 'ShaderBinary': {'type': 'Noop'},
277 'ShaderSource': { 291 'ShaderSource': {
278 'type': 'Manual', 292 'type': 'Manual',
279 'immediate': True, 293 'immediate': True,
280 'needs_size': True, 294 'needs_size': True,
281 'cmd_args': 295 'cmd_args':
282 'GLuint shader, GLsizei count, const char* data', 296 'GLuint shader, GLsizei count, const char* data',
283 }, 297 },
284 'TexImage2D': {'type': 'Data'}, 298 'TexImage2D': {'type': 'Manual', 'immediate': True},
285 'TexParameterfv': {'type': 'PUT', 'data_type': 'GLfloat', 'count': 1}, 299 'TexParameterfv': {'type': 'PUT', 'data_type': 'GLfloat', 'count': 1},
286 'TexParameteriv': {'type': 'PUT', 'data_type': 'GLint', 'count': 1}, 300 'TexParameteriv': {'type': 'PUT', 'data_type': 'GLint', 'count': 1},
287 'TexSubImage2D': {'type': 'Data'}, 301 'TexSubImage2D': {'type': 'Data'},
288 'Uniform1fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 1}, 302 'Uniform1fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 1},
289 'Uniform1iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 1}, 303 'Uniform1iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 1},
290 'Uniform2fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 2}, 304 'Uniform2fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 2},
291 'Uniform2iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 2}, 305 'Uniform2iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 2},
292 'Uniform3fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 3}, 306 'Uniform3fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 3},
293 'Uniform3iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 3}, 307 'Uniform3iv': {'type': 'PUTn', 'data_type': 'GLint', 'count': 3},
294 'Uniform4fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 4}, 308 'Uniform4fv': {'type': 'PUTn', 'data_type': 'GLfloat', 'count': 4},
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 388
375 class TypeHandler(object): 389 class TypeHandler(object):
376 """This class emits code for a particular type of function.""" 390 """This class emits code for a particular type of function."""
377 391
378 def __init__(self): 392 def __init__(self):
379 pass 393 pass
380 394
381 def InitFunction(self, func): 395 def InitFunction(self, func):
382 """Add or adjust anything type specific for this function.""" 396 """Add or adjust anything type specific for this function."""
383 if func.GetInfo('needs_size'): 397 if func.GetInfo('needs_size'):
384 func.AddCmdArg(CmdArg('data_size', 'uint32')) 398 func.AddCmdArg(Argument('data_size', 'uint32'))
385 399
386 def AddImmediateFunction(self, generator, func): 400 def AddImmediateFunction(self, generator, func):
387 """Adds an immediate version of a function.""" 401 """Adds an immediate version of a function."""
388 # Generate an immediate command if there is only 1 pointer arg. 402 # Generate an immediate command if there is only 1 pointer arg.
389 immediate = func.GetInfo('immediate') # can be True, False or None 403 immediate = func.GetInfo('immediate') # can be True, False or None
390 if immediate == True or immediate == None: 404 if immediate == True or immediate == None:
391 if func.num_pointer_args == 1 or immediate: 405 if func.num_pointer_args == 1 or immediate:
392 generator.AddFunction(ImmediateFunction(func)) 406 generator.AddFunction(ImmediateFunction(func))
393 407
408 def WriteStruct(self, func, file):
409 """Writes a structure that matches the arguments to a function."""
410 file.Write("struct %s {\n" % func.name)
411 file.Write(" typedef %s ValueType;\n" % func.name)
412 file.Write(" static const CommandId kCmdId = k%s;\n" % func.name)
413 func.WriteCmdArgFlag(file)
414 file.Write("\n")
415
416 func.WriteCmdComputeSize(file)
417 func.WriteCmdSetHeader(file)
418 func.WriteCmdInit(file)
419 func.WriteCmdSet(file)
420
421 file.Write(" command_buffer::CommandHeader header;\n")
422 args = func.GetCmdArgs()
423 for arg in args:
424 file.Write(" %s %s;\n" % (arg.cmd_type, arg.name))
425 file.Write("};\n")
426 file.Write("\n")
427
428 size = len(args) * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER
429 file.Write("COMPILE_ASSERT(sizeof(%s) == %d,\n" % (func.name, size))
430 file.Write(" Sizeof_%s_is_not_%d);\n" % (func.name, size))
431 file.Write("COMPILE_ASSERT(offsetof(%s, header) == 0,\n" % func.name)
432 file.Write(" OffsetOf_%s_header_not_0);\n" % func.name)
433 offset = _SIZE_OF_COMMAND_HEADER
434 for arg in args:
435 file.Write("COMPILE_ASSERT(offsetof(%s, %s) == %d,\n" %
436 (func.name, arg.name, offset))
437 file.Write(" OffsetOf_%s_%s_not_%d);\n" %
438 (func.name, arg.name, offset))
439 offset += _SIZE_OF_UINT32
440 file.Write("\n")
441
394 def WriteHandlerImplementation(self, func, file): 442 def WriteHandlerImplementation(self, func, file):
395 """Writes the handler implementation for this command.""" 443 """Writes the handler implementation for this command."""
396 file.Write(" parse_error::ParseError result =\n") 444 file.Write(" parse_error::ParseError result =\n")
397 file.Write(" Validate%s(this, arg_count%s);\n" % 445 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
398 (func.name, func.MakeOriginalArgString("", True))) 446 (func.name, func.MakeOriginalArgString("", True)))
399 file.Write(" if (result != parse_error::kParseNoError) {\n") 447 file.Write(" if (result != parse_error::kParseNoError) {\n")
400 file.Write(" return result;\n") 448 file.Write(" return result;\n")
401 file.Write(" }\n") 449 file.Write(" }\n")
402 file.Write(" %s(%s);\n" % 450 file.Write(" %s(%s);\n" %
403 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 451 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
404 452
405 def WriteCmdSizeTest(self, func, file): 453 def WriteCmdSizeTest(self, func, file):
406 """Writes the size test for a command.""" 454 """Writes the size test for a command."""
407 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4); // NOLINT\n") 455 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4); // NOLINT\n")
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 502
455 def WriteImmediateCmdSizeTest(self, func, file): 503 def WriteImmediateCmdSizeTest(self, func, file):
456 """Writes a size test for an immediate version of a command.""" 504 """Writes a size test for an immediate version of a command."""
457 file.Write(" // TODO(gman): Compute correct size.\n") 505 file.Write(" // TODO(gman): Compute correct size.\n")
458 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4);\n") 506 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4);\n")
459 507
460 def WriteImmediateHandlerImplementation (self, func, file): 508 def WriteImmediateHandlerImplementation (self, func, file):
461 """Writes the handler impl for the immediate version of a command.""" 509 """Writes the handler impl for the immediate version of a command."""
462 file.Write(" // Immediate version.\n") 510 file.Write(" // Immediate version.\n")
463 file.Write(" parse_error::ParseError result =\n") 511 file.Write(" parse_error::ParseError result =\n")
464 file.Write(" Validate%s(this, arg_count%s);\n" % 512 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
465 (func.name, func.MakeOriginalArgString("", True))) 513 (func.name, func.MakeOriginalArgString("", True)))
466 file.Write(" if (result != parse_error::kParseNoError) {\n") 514 file.Write(" if (result != parse_error::kParseNoError) {\n")
467 file.Write(" return result;\n") 515 file.Write(" return result;\n")
468 file.Write(" }\n") 516 file.Write(" }\n")
469 file.Write(" %s(%s);\n" % 517 file.Write(" %s(%s);\n" %
470 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 518 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
471 519
472 def WriteServiceImplementation(self, func, file): 520 def WriteServiceImplementation(self, func, file):
473 """Writes the service implementation for a command.""" 521 """Writes the service implementation for a command."""
474 file.Write( 522 file.Write(
475 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 523 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
476 file.Write( 524 file.Write(
477 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 525 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
478 for arg in func.GetOriginalArgs(): 526 for arg in func.GetOriginalArgs():
479 arg.WriteGetCode(file) 527 arg.WriteGetCode(file)
480 func.WriteHandlerImplementation(file) 528 func.WriteHandlerImplementation(file)
481 file.Write(" return parse_error::kParseNoError;\n") 529 file.Write(" return parse_error::kParseNoError;\n")
482 file.Write("}\n") 530 file.Write("}\n")
483 file.Write("\n") 531 file.Write("\n")
484 532
485 def WriteImmediateServiceImplementation(self, func, file): 533 def WriteImmediateServiceImplementation(self, func, file):
486 """Writes the service implementation for an immediate version of command.""" 534 """Writes the service implementation for an immediate version of command."""
487 file.Write( 535 file.Write(
488 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 536 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
489 file.Write( 537 file.Write(
490 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 538 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
491 for arg in func.GetOriginalArgs(): 539 for arg in func.GetOriginalArgs():
492 arg.WriteGetCode(file) 540 arg.WriteGetCode(file)
493 func.WriteHandlerImplementation(file) 541 func.WriteHandlerImplementation(file)
494 file.Write(" return parse_error::kParseNoError;\n") 542 file.Write(" return parse_error::kParseNoError;\n")
495 file.Write("}\n") 543 file.Write("}\n")
496 file.Write("\n") 544 file.Write("\n")
497 545
498 def WriteImmediateValidationCode(self, func, file): 546 def WriteImmediateValidationCode(self, func, file):
499 """Writes the validation code for an immediate version of a command.""" 547 """Writes the validation code for an immediate version of a command."""
500 pass 548 pass
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 file.Write(" void* Set(void* cmd%s) {\n" % 606 file.Write(" void* Set(void* cmd%s) {\n" %
559 func.MakeTypedCmdArgString("_", True)) 607 func.MakeTypedCmdArgString("_", True))
560 file.Write(" // TODO(gman): compute correct size.\n") 608 file.Write(" // TODO(gman): compute correct size.\n")
561 file.Write(" const uint32 size = ComputeSize(0);\n") 609 file.Write(" const uint32 size = ComputeSize(0);\n")
562 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) 610 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args)
563 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" 611 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
564 "cmd, size);\n") 612 "cmd, size);\n")
565 file.Write(" }\n") 613 file.Write(" }\n")
566 file.Write("\n") 614 file.Write("\n")
567 615
616 def WriteCmdHelper(self, func, file):
617 """Writes the cmd helper definition for a cmd."""
618 args = func.MakeCmdArgString("")
619 file.Write(" void %s(%s) {\n" %
620 (func.name, func.MakeTypedCmdArgString("")))
621 file.Write(" gles2::%s& c = GetCmdSpace<gles2::%s>();\n" %
622 (func.name, func.name))
623 file.Write(" c.Init(%s);\n" % args)
624 file.Write(" }\n\n")
625
568 def WriteImmediateCmdHelper(self, func, file): 626 def WriteImmediateCmdHelper(self, func, file):
569 """Writes the cmd helper definition for the immediate version of a cmd.""" 627 """Writes the cmd helper definition for the immediate version of a cmd."""
570 args = func.MakeCmdArgString("") 628 args = func.MakeCmdArgString("")
571 file.Write(" void %s(%s) {\n" % 629 file.Write(" void %s(%s) {\n" %
572 (func.name, func.MakeTypedCmdArgString(""))) 630 (func.name, func.MakeTypedCmdArgString("")))
573 file.Write(" const uint32 s = 0; // TODO(gman): compute correct size\n") 631 file.Write(" const uint32 s = 0; // TODO(gman): compute correct size\n")
574 file.Write(" gles2::%s& c = " 632 file.Write(" gles2::%s& c = "
575 "GetImmediateCmdSpaceTotalSize<gles2::%s>(s);\n" % 633 "GetImmediateCmdSpaceTotalSize<gles2::%s>(s);\n" %
576 (func.name, func.name)) 634 (func.name, func.name))
577 file.Write(" c.Init(%s);\n" % args) 635 file.Write(" c.Init(%s);\n" % args)
578 file.Write(" }\n\n") 636 file.Write(" }\n\n")
579 637
580 638
581 class CustomHandler(TypeHandler): 639 class CustomHandler(TypeHandler):
582 """Handler for commands that are auto-generated but require minor tweaks.""" 640 """Handler for commands that are auto-generated but require minor tweaks."""
583 641
584 def __init__(self): 642 def __init__(self):
585 TypeHandler.__init__(self) 643 TypeHandler.__init__(self)
586 644
587 def WriteServiceImplementation(self, func, file): 645 def WriteServiceImplementation(self, func, file):
588 """Overrriden from TypeHandler.""" 646 """Overrriden from TypeHandler."""
589 pass 647 pass
590 648
591 def WriteImmediateCmdGetTotalSize(self, func, file): 649 def WriteImmediateCmdGetTotalSize(self, func, file):
592 """Overrriden from TypeHandler.""" 650 """Overrriden from TypeHandler."""
593 file.Write(" uint32 total_size = 0; // TODO(gman): get correct size.") 651 file.Write(" uint32 total_size = 0; // TODO(gman): get correct size.\n")
594 652
595 def WriteImmediateCmdInit(self, func, file): 653 def WriteImmediateCmdInit(self, func, file):
596 """Overrriden from TypeHandler.""" 654 """Overrriden from TypeHandler."""
597 file.Write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_")) 655 file.Write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_"))
598 self.WriteImmediateCmdGetTotalSize(func, file) 656 self.WriteImmediateCmdGetTotalSize(func, file)
599 file.Write(" SetHeader(total_size);\n") 657 file.Write(" SetHeader(total_size);\n")
600 args = func.GetCmdArgs() 658 args = func.GetCmdArgs()
601 for arg in args: 659 for arg in args:
602 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) 660 file.Write(" %s = _%s;\n" % (arg.name, arg.name))
603 file.Write(" }\n") 661 file.Write(" }\n")
(...skipping 13 matching lines...) Expand all
617 675
618 676
619 class TodoHandler(CustomHandler): 677 class TodoHandler(CustomHandler):
620 """Handle for commands that are not yet implemented.""" 678 """Handle for commands that are not yet implemented."""
621 679
622 def WriteImmediateFormatTest(self, func, file): 680 def WriteImmediateFormatTest(self, func, file):
623 """Overrriden from TypeHandler.""" 681 """Overrriden from TypeHandler."""
624 pass 682 pass
625 683
626 684
685 class HandWrittenHandler(CustomHandler):
686 """Handler for comands where everything must be written by hand."""
687
688 def InitFunction(self, func):
689 """Add or adjust anything type specific for this function."""
690 CustomHandler.InitFunction(self, func)
691 func.can_auto_generate = False
692
693 def WriteStruct(self, func, file):
694 """Overrriden from TypeHandler."""
695 pass
696
697 def WriteServiceImplementation(self, func, file):
698 """Overrriden from TypeHandler."""
699 pass
700
701 def WriteImmediateServiceImplementation(self, func, file):
702 """Overrriden from TypeHandler."""
703 pass
704
705 def WriteGLES2ImplementationImpl(self, func, file):
706 """Overrriden from TypeHandler."""
707 pass
708
709 def WriteImmediateCmdHelper(self, func, file):
710 """Overrriden from TypeHandler."""
711 pass
712
713 def WriteCmdHelper(self, func, file):
714 """Overrriden from TypeHandler."""
715 pass
716
717 def WriteFormatTest(self, func, file):
718 """Overrriden from TypeHandler."""
719 file.Write("// TODO(gman): Write test for %s\n" % func.name)
720
721 def WriteImmediateFormatTest(self, func, file):
722 """Overrriden from TypeHandler."""
723 file.Write("// TODO(gman): Write test for %s\n" % func.name)
724
725
627 class ManualHandler(CustomHandler): 726 class ManualHandler(CustomHandler):
628 """Handler for commands that must be written by hand.""" 727 """Handler for commands who's handlers must be written by hand."""
629 728
630 def __init__(self): 729 def __init__(self):
631 CustomHandler.__init__(self) 730 CustomHandler.__init__(self)
632 731
633 def WriteServiceImplementation(self, func, file): 732 def WriteServiceImplementation(self, func, file):
634 """Overrriden from TypeHandler.""" 733 """Overrriden from TypeHandler."""
635 pass 734 pass
636 735
637 def WriteImmediateServiceImplementation(self, func, file): 736 def WriteImmediateServiceImplementation(self, func, file):
638 """Overrriden from TypeHandler.""" 737 """Overrriden from TypeHandler."""
(...skipping 27 matching lines...) Expand all
666 """Handler for glBufferData, glBufferSubData, glTexImage2D, glTexSubImage2D, 765 """Handler for glBufferData, glBufferSubData, glTexImage2D, glTexSubImage2D,
667 glCompressedTexImage2D, glCompressedTexImageSub2D.""" 766 glCompressedTexImage2D, glCompressedTexImageSub2D."""
668 def __init__(self): 767 def __init__(self):
669 CustomHandler.__init__(self) 768 CustomHandler.__init__(self)
670 769
671 def WriteServiceImplementation(self, func, file): 770 def WriteServiceImplementation(self, func, file):
672 """Overrriden from TypeHandler.""" 771 """Overrriden from TypeHandler."""
673 file.Write( 772 file.Write(
674 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 773 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
675 file.Write( 774 file.Write(
676 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 775 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
677 for arg in func.GetCmdArgs(): 776 for arg in func.GetCmdArgs():
678 arg.WriteGetCode(file) 777 arg.WriteGetCode(file)
679 778
680 # TODO(gman): Move this data to _FUNCTION_INFO? 779 # TODO(gman): Move this data to _FUNCTION_INFO?
681 if func.name == 'BufferData': 780 if func.name == 'BufferData':
682 file.Write(" uint32 data_size = size;\n") 781 file.Write(" uint32 data_size = size;\n")
683 elif func.name == 'BufferSubData': 782 elif func.name == 'BufferSubData':
684 file.Write(" uint32 data_size = size;\n") 783 file.Write(" uint32 data_size = size;\n")
685 elif func.name == 'CompressedTexImage2D': 784 elif func.name == 'CompressedTexImage2D':
686 file.Write(" uint32 data_size = imageSize;\n") 785 file.Write(" uint32 data_size = imageSize;\n")
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 def __init__(self): 855 def __init__(self):
757 TypeHandler.__init__(self) 856 TypeHandler.__init__(self)
758 857
759 def InitFunction(self, func): 858 def InitFunction(self, func):
760 """Overrriden from TypeHandler.""" 859 """Overrriden from TypeHandler."""
761 pass 860 pass
762 861
763 def WriteHandlerImplementation (self, func, file): 862 def WriteHandlerImplementation (self, func, file):
764 """Overrriden from TypeHandler.""" 863 """Overrriden from TypeHandler."""
765 file.Write(" parse_error::ParseError result =\n") 864 file.Write(" parse_error::ParseError result =\n")
766 file.Write(" Validate%s(this, arg_count%s);\n" % 865 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
767 (func.name, func.MakeOriginalArgString("", True))) 866 (func.name, func.MakeOriginalArgString("", True)))
768 file.Write(" if (result != parse_error::kParseNoError) {\n") 867 file.Write(" if (result != parse_error::kParseNoError) {\n")
769 file.Write(" return result;\n") 868 file.Write(" return result;\n")
770 file.Write(" }\n") 869 file.Write(" }\n")
771 file.Write(" GenGLObjects<GL%sHelper>(n, %s);\n" % 870 file.Write(" GenGLObjects<GL%sHelper>(n, %s);\n" %
772 (func.name, func.GetLastOriginalArg().name)) 871 (func.name, func.GetLastOriginalArg().name))
773 872
774 def WriteImmediateHandlerImplementation(self, func, file): 873 def WriteImmediateHandlerImplementation(self, func, file):
775 """Overrriden from TypeHandler.""" 874 """Overrriden from TypeHandler."""
776 file.Write(" parse_error::ParseError result =\n") 875 file.Write(" parse_error::ParseError result =\n")
777 file.Write(" Validate%s(this, arg_count%s);\n" % 876 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
778 (func.name, func.MakeOriginalArgString("", True))) 877 (func.name, func.MakeOriginalArgString("", True)))
779 file.Write(" if (result != parse_error::kParseNoError) {\n") 878 file.Write(" if (result != parse_error::kParseNoError) {\n")
780 file.Write(" return result;\n") 879 file.Write(" return result;\n")
781 file.Write(" }\n") 880 file.Write(" }\n")
782 file.Write(" GenGLObjects<GL%sHelper>(n, %s);\n" % 881 file.Write(" GenGLObjects<GL%sHelper>(n, %s);\n" %
783 (func.original_name, func.GetLastOriginalArg().name)) 882 (func.original_name, func.GetLastOriginalArg().name))
784 883
785 def WriteGLES2ImplementationHeader(self, func, file): 884 def WriteGLES2ImplementationHeader(self, func, file):
786 """Overrriden from TypeHandler.""" 885 """Overrriden from TypeHandler."""
787 file.Write("%s %s(%s) {\n" % 886 file.Write("%s %s(%s) {\n" %
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 990
892 991
893 class CreateHandler(TypeHandler): 992 class CreateHandler(TypeHandler):
894 """Handler for glCreate___ type functions.""" 993 """Handler for glCreate___ type functions."""
895 994
896 def __init__(self): 995 def __init__(self):
897 TypeHandler.__init__(self) 996 TypeHandler.__init__(self)
898 997
899 def InitFunction(self, func): 998 def InitFunction(self, func):
900 """Overrriden from TypeHandler.""" 999 """Overrriden from TypeHandler."""
901 func.AddCmdArg(CmdArg("client_id", 'uint32')) 1000 func.AddCmdArg(Argument("client_id", 'uint32'))
902 1001
903 def WriteHandlerImplementation (self, func, file): 1002 def WriteHandlerImplementation (self, func, file):
904 """Overrriden from TypeHandler.""" 1003 """Overrriden from TypeHandler."""
905 file.Write(" uint32 client_id = c.client_id;\n") 1004 file.Write(" uint32 client_id = c.client_id;\n")
906 file.Write(" parse_error::ParseError result =\n") 1005 file.Write(" parse_error::ParseError result =\n")
907 file.Write(" Validate%s(this, arg_count%s);\n" % 1006 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
908 (func.name, func.MakeOriginalArgString("", True))) 1007 (func.name, func.MakeOriginalArgString("", True)))
909 file.Write(" if (result != parse_error::kParseNoError) {\n") 1008 file.Write(" if (result != parse_error::kParseNoError) {\n")
910 file.Write(" return result;\n") 1009 file.Write(" return result;\n")
911 file.Write(" }\n") 1010 file.Write(" }\n")
912 file.Write(" %sHelper(%s);\n" % 1011 file.Write(" %sHelper(%s);\n" %
913 (func.name, func.MakeCmdArgString(""))) 1012 (func.name, func.MakeCmdArgString("")))
914 1013
915 def WriteGLES2ImplementationHeader(self, func, file): 1014 def WriteGLES2ImplementationHeader(self, func, file):
916 """Overrriden from TypeHandler.""" 1015 """Overrriden from TypeHandler."""
917 file.Write("%s %s(%s) {\n" % 1016 file.Write("%s %s(%s) {\n" %
(...skipping 14 matching lines...) Expand all
932 1031
933 class DELnHandler(TypeHandler): 1032 class DELnHandler(TypeHandler):
934 """Handler for glDelete___ type functions.""" 1033 """Handler for glDelete___ type functions."""
935 1034
936 def __init__(self): 1035 def __init__(self):
937 TypeHandler.__init__(self) 1036 TypeHandler.__init__(self)
938 1037
939 def WriteHandlerImplementation (self, func, file): 1038 def WriteHandlerImplementation (self, func, file):
940 """Overrriden from TypeHandler.""" 1039 """Overrriden from TypeHandler."""
941 file.Write(" parse_error::ParseError result =\n") 1040 file.Write(" parse_error::ParseError result =\n")
942 file.Write(" Validate%s(this, arg_count%s);\n" % 1041 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
943 (func.name, func.MakeOriginalArgString("", True))) 1042 (func.name, func.MakeOriginalArgString("", True)))
944 file.Write(" if (result != parse_error::kParseNoError) {\n") 1043 file.Write(" if (result != parse_error::kParseNoError) {\n")
945 file.Write(" return result;\n") 1044 file.Write(" return result;\n")
946 file.Write(" }\n") 1045 file.Write(" }\n")
947 file.Write(" DeleteGLObjects<GL%sHelper>(n, %s);\n" % 1046 file.Write(" DeleteGLObjects<GL%sHelper>(n, %s);\n" %
948 (func.name, func.GetLastOriginalArg().name)) 1047 (func.name, func.GetLastOriginalArg().name))
949 1048
950 def WriteImmediateHandlerImplementation (self, func, file): 1049 def WriteImmediateHandlerImplementation (self, func, file):
951 """Overrriden from TypeHandler.""" 1050 """Overrriden from TypeHandler."""
952 file.Write(" parse_error::ParseError result =\n") 1051 file.Write(" parse_error::ParseError result =\n")
953 file.Write(" Validate%s(this, arg_count%s);\n" % 1052 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
954 (func.name, func.MakeOriginalArgString("", True))) 1053 (func.name, func.MakeOriginalArgString("", True)))
955 file.Write(" if (result != parse_error::kParseNoError) {\n") 1054 file.Write(" if (result != parse_error::kParseNoError) {\n")
956 file.Write(" return result;\n") 1055 file.Write(" return result;\n")
957 file.Write(" }\n") 1056 file.Write(" }\n")
958 file.Write(" DeleteGLObjects<GL%sHelper>(n, %s);\n" % 1057 file.Write(" DeleteGLObjects<GL%sHelper>(n, %s);\n" %
959 (func.original_name, func.GetLastOriginalArg().name)) 1058 (func.original_name, func.GetLastOriginalArg().name))
960 1059
961 def WriteGLES2ImplementationHeader(self, func, file): 1060 def WriteGLES2ImplementationHeader(self, func, file):
962 """Overrriden from TypeHandler.""" 1061 """Overrriden from TypeHandler."""
963 file.Write("%s %s(%s) {\n" % 1062 file.Write("%s %s(%s) {\n" %
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 1173
1075 def AddImmediateFunction(self, generator, func): 1174 def AddImmediateFunction(self, generator, func):
1076 """Overrriden from TypeHandler.""" 1175 """Overrriden from TypeHandler."""
1077 pass 1176 pass
1078 1177
1079 def WriteServiceImplementation(self, func, file): 1178 def WriteServiceImplementation(self, func, file):
1080 """Overrriden from TypeHandler.""" 1179 """Overrriden from TypeHandler."""
1081 file.Write( 1180 file.Write(
1082 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1181 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1083 file.Write( 1182 file.Write(
1084 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1183 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1085 last_arg = func.GetLastOriginalArg() 1184 last_arg = func.GetLastOriginalArg()
1086 1185
1087 all_but_last_args = func.GetOriginalArgs()[:-1] 1186 all_but_last_args = func.GetOriginalArgs()[:-1]
1088 for arg in all_but_last_args: 1187 for arg in all_but_last_args:
1089 arg.WriteGetCode(file) 1188 arg.WriteGetCode(file)
1090 1189
1091 file.Write(" %s params;\n" % last_arg.type) 1190 file.Write(" %s params;\n" % last_arg.type)
1092 file.Write(" GLsizei num_values = util_.GLGetNumValuesReturned(pname);\n") 1191 file.Write(" GLsizei num_values = util_.GLGetNumValuesReturned(pname);\n")
1093 file.Write(" uint32 params_size = num_values * sizeof(*params);\n") 1192 file.Write(" uint32 params_size = num_values * sizeof(*params);\n")
1094 file.Write(" params = GetSharedMemoryAs<%s>(\n" % last_arg.type) 1193 file.Write(" params = GetSharedMemoryAs<%s>(\n" % last_arg.type)
1095 file.Write(" c.params_shm_id, c.params_shm_offset, params_size);\n") 1194 file.Write(" c.params_shm_id, c.params_shm_offset, params_size);\n")
1096 func.WriteHandlerImplementation(file) 1195 func.WriteHandlerImplementation(file)
1097 file.Write(" return parse_error::kParseNoError;\n") 1196 file.Write(" return parse_error::kParseNoError;\n")
1098 file.Write("}\n") 1197 file.Write("}\n")
1099 file.Write("\n") 1198 file.Write("\n")
1100 1199
1101 def WriteGLES2ImplementationHeader(self, func, file): 1200 def WriteGLES2ImplementationHeader(self, func, file):
1102 """Overrriden from TypeHandler.""" 1201 """Overrriden from TypeHandler."""
1103 file.Write("%s %s(%s) {\n" % 1202 file.Write("%s %s(%s) {\n" %
1104 (func.return_type, func.original_name, 1203 (func.return_type, func.original_name,
1105 func.MakeTypedOriginalArgString(""))) 1204 func.MakeTypedOriginalArgString("")))
1106 all_but_last_args = func.GetOriginalArgs()[:-1] 1205 all_but_last_args = func.GetOriginalArgs()[:-1]
1107 arg_string = ( 1206 arg_string = (
1108 ", ".join(["%s" % arg.name for arg in all_but_last_args])) 1207 ", ".join(["%s" % arg.name for arg in all_but_last_args]))
1109 file.Write(" helper_->%s(%s, shared_memory_.GetId(), 0);\n" % 1208 file.Write(" helper_->%s(%s, result_shm_id(), result_shm_offset());\n" %
1110 (func.name, arg_string)) 1209 (func.name, arg_string))
1111 file.Write(" int32 token = helper_->InsertToken();\n") 1210 file.Write(" WaitForCmd();\n")
1112 file.Write(" helper_->WaitForToken(token);\n")
1113 file.Write(" GLsizei num_values = util_.GLGetNumValuesReturned(pname);\n") 1211 file.Write(" GLsizei num_values = util_.GLGetNumValuesReturned(pname);\n")
1114 file.Write(" memcpy(params, shared_memory_.GetAddress(0),\n") 1212 file.Write(
1115 file.Write(" num_values * sizeof(*params));\n") 1213 " DCHECK_LE(num_values * sizeof(*params), kMaxSizeOfSimpleResult);\n")
1214 file.Write(
1215 " memcpy(params, result_buffer_, num_values * sizeof(*params));\n")
1116 file.Write("}\n") 1216 file.Write("}\n")
1117 file.Write("\n") 1217 file.Write("\n")
1118 1218
1119 def WriteGLES2ImplementationImpl(self, func, file): 1219 def WriteGLES2ImplementationImpl(self, func, file):
1120 """Overrriden from TypeHandler.""" 1220 """Overrriden from TypeHandler."""
1121 pass 1221 pass
1122 1222
1123 1223
1124 class PUTHandler(TypeHandler): 1224 class PUTHandler(TypeHandler):
1125 """Handler for glTexParameter_v, glVertexAttrib_v functions.""" 1225 """Handler for glTexParameter_v, glVertexAttrib_v functions."""
1126 1226
1127 def __init__(self): 1227 def __init__(self):
1128 TypeHandler.__init__(self) 1228 TypeHandler.__init__(self)
1129 1229
1130 def WriteImmediateValidationCode(self, func, file): 1230 def WriteImmediateValidationCode(self, func, file):
1131 """Overrriden from TypeHandler.""" 1231 """Overrriden from TypeHandler."""
1132 file.Write(" if (!CheckImmediateDataSize<%s>(" 1232 file.Write(" if (!CheckImmediateDataSize<%s>("
1133 "arg_count, 1, sizeof(%s), %d)) {\n" % 1233 "immediate_data_size, 1, sizeof(%s), %d)) {\n" %
1134 (func.name, func.info.data_type, func.info.count)) 1234 (func.name, func.info.data_type, func.info.count))
1135 file.Write(" return parse_error::kParseOutOfBounds;\n") 1235 file.Write(" return parse_error::kParseOutOfBounds;\n")
1136 file.Write(" }\n") 1236 file.Write(" }\n")
1137 1237
1138 def WriteGLES2ImplementationHeader(self, func, file): 1238 def WriteGLES2ImplementationHeader(self, func, file):
1139 """Overrriden from TypeHandler.""" 1239 """Overrriden from TypeHandler."""
1140 file.Write("%s %s(%s) {\n" % 1240 file.Write("%s %s(%s) {\n" %
1141 (func.return_type, func.original_name, 1241 (func.return_type, func.original_name,
1142 func.MakeTypedOriginalArgString(""))) 1242 func.MakeTypedOriginalArgString("")))
1143 file.Write(" helper_->%sImmediate(%s);\n" % 1243 file.Write(" helper_->%sImmediate(%s);\n" %
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 1352
1253 class PUTnHandler(TypeHandler): 1353 class PUTnHandler(TypeHandler):
1254 """Handler for PUTn 'glUniform__v' type functions.""" 1354 """Handler for PUTn 'glUniform__v' type functions."""
1255 1355
1256 def __init__(self): 1356 def __init__(self):
1257 TypeHandler.__init__(self) 1357 TypeHandler.__init__(self)
1258 1358
1259 def WriteImmediateValidationCode(self, func, file): 1359 def WriteImmediateValidationCode(self, func, file):
1260 """Overrriden from TypeHandler.""" 1360 """Overrriden from TypeHandler."""
1261 file.Write(" if (!CheckImmediateDataSize<%s>(" 1361 file.Write(" if (!CheckImmediateDataSize<%s>("
1262 "arg_count, count, sizeof(%s), %d)) {\n" % 1362 "immediate_data_size, count, sizeof(%s), %d)) {\n" %
1263 (func.name, func.info.data_type, func.info.count)) 1363 (func.name, func.info.data_type, func.info.count))
1264 file.Write(" return parse_error::kParseOutOfBounds;\n") 1364 file.Write(" return parse_error::kParseOutOfBounds;\n")
1265 file.Write(" }\n") 1365 file.Write(" }\n")
1266 1366
1267 def WriteGLES2ImplementationHeader(self, func, file): 1367 def WriteGLES2ImplementationHeader(self, func, file):
1268 """Overrriden from TypeHandler.""" 1368 """Overrriden from TypeHandler."""
1269 file.Write("%s %s(%s) {\n" % 1369 file.Write("%s %s(%s) {\n" %
1270 (func.return_type, func.original_name, 1370 (func.return_type, func.original_name,
1271 func.MakeTypedOriginalArgString(""))) 1371 func.MakeTypedOriginalArgString("")))
1272 file.Write(" helper_->%sImmediate(%s);\n" % 1372 file.Write(" helper_->%sImmediate(%s);\n" %
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 1480
1381 1481
1382 class GLcharHandler(TypeHandler): 1482 class GLcharHandler(TypeHandler):
1383 """Handler for functions that pass a single string .""" 1483 """Handler for functions that pass a single string ."""
1384 1484
1385 def __init__(self): 1485 def __init__(self):
1386 TypeHandler.__init__(self) 1486 TypeHandler.__init__(self)
1387 1487
1388 def InitFunction(self, func): 1488 def InitFunction(self, func):
1389 """Overrriden from TypeHandler.""" 1489 """Overrriden from TypeHandler."""
1390 func.AddCmdArg(CmdArg('data_size', 'uint32')) 1490 func.AddCmdArg(Argument('data_size', 'uint32'))
1391 1491
1392 def WriteServiceImplementation(self, func, file): 1492 def WriteServiceImplementation(self, func, file):
1393 """Overrriden from TypeHandler.""" 1493 """Overrriden from TypeHandler."""
1394 file.Write( 1494 file.Write(
1395 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1495 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1396 file.Write( 1496 file.Write(
1397 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1497 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1398 last_arg = func.GetLastOriginalArg() 1498 last_arg = func.GetLastOriginalArg()
1399 1499
1400 all_but_last_arg = func.GetOriginalArgs()[:-1] 1500 all_but_last_arg = func.GetOriginalArgs()[:-1]
1401 for arg in all_but_last_arg: 1501 for arg in all_but_last_arg:
1402 arg.WriteGetCode(file) 1502 arg.WriteGetCode(file)
1403 1503
1404 file.Write(" uint32 name_size = c.data_size;\n") 1504 file.Write(" uint32 name_size = c.data_size;\n")
1405 file.Write(" const char* name = GetSharedMemoryAs<%s>(\n" % 1505 file.Write(" const char* name = GetSharedMemoryAs<%s>(\n" %
1406 last_arg.type) 1506 last_arg.type)
1407 file.Write(" c.%s_shm_id, c.%s_shm_offset, name_size);\n" % 1507 file.Write(" c.%s_shm_id, c.%s_shm_offset, name_size);\n" %
1408 (last_arg.name, last_arg.name)) 1508 (last_arg.name, last_arg.name))
1409 file.Write(" parse_error::ParseError result =\n") 1509 file.Write(" parse_error::ParseError result =\n")
1410 file.Write(" Validate%s(this, arg_count%s);\n" % 1510 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
1411 (func.name, func.MakeOriginalArgString("", True))) 1511 (func.name, func.MakeOriginalArgString("", True)))
1412 file.Write(" if (result != parse_error::kParseNoError) {\n") 1512 file.Write(" if (result != parse_error::kParseNoError) {\n")
1413 file.Write(" return result;\n") 1513 file.Write(" return result;\n")
1414 file.Write(" }\n") 1514 file.Write(" }\n")
1415 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg]) 1515 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg])
1416 file.Write(" String name_str(name, name_size);\n") 1516 file.Write(" String name_str(name, name_size);\n")
1417 file.Write(" %s(%s, name_str.c_str());\n" % 1517 file.Write(" %s(%s, name_str.c_str());\n" %
1418 (func.GetGLFunctionName(), arg_string)) 1518 (func.GetGLFunctionName(), arg_string))
1419 file.Write(" return parse_error::kParseNoError;\n") 1519 file.Write(" return parse_error::kParseNoError;\n")
1420 file.Write("}\n") 1520 file.Write("}\n")
1421 file.Write("\n") 1521 file.Write("\n")
1422 1522
1423 def WriteImmediateServiceImplementation(self, func, file): 1523 def WriteImmediateServiceImplementation(self, func, file):
1424 """Overrriden from TypeHandler.""" 1524 """Overrriden from TypeHandler."""
1425 file.Write( 1525 file.Write(
1426 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1526 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1427 file.Write( 1527 file.Write(
1428 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1528 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1429 last_arg = func.GetLastOriginalArg() 1529 last_arg = func.GetLastOriginalArg()
1430 1530
1431 all_but_last_arg = func.GetOriginalArgs()[:-1] 1531 all_but_last_arg = func.GetOriginalArgs()[:-1]
1432 for arg in all_but_last_arg: 1532 for arg in all_but_last_arg:
1433 arg.WriteGetCode(file) 1533 arg.WriteGetCode(file)
1434 1534
1435 file.Write(" uint32 name_size = c.data_size;\n") 1535 file.Write(" uint32 name_size = c.data_size;\n")
1436 file.Write( 1536 file.Write(
1437 " const char* name = GetImmediateDataAs<const char*>(c);\n") 1537 " const char* name = GetImmediateDataAs<const char*>(c);\n")
1438 file.Write(" // TODO(gman): Make sure validate checks arg_count\n") 1538 file.Write(" // TODO(gman): Make sure validate checks\n")
1439 file.Write(" // covers data_size.\n") 1539 file.Write(" // immediate_data_size covers data_size.\n")
1440 file.Write(" parse_error::ParseError result =\n") 1540 file.Write(" parse_error::ParseError result =\n")
1441 file.Write(" Validate%s(this, arg_count%s);\n" % 1541 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
1442 (func.name, func.MakeOriginalArgString("", True))) 1542 (func.name, func.MakeOriginalArgString("", True)))
1443 file.Write(" if (result != parse_error::kParseNoError) {\n") 1543 file.Write(" if (result != parse_error::kParseNoError) {\n")
1444 file.Write(" return result;\n") 1544 file.Write(" return result;\n")
1445 file.Write(" }\n") 1545 file.Write(" }\n")
1446 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg]) 1546 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg])
1447 file.Write(" String name_str(name, name_size);\n") 1547 file.Write(" String name_str(name, name_size);\n")
1448 file.Write(" %s(%s, name_str.c_str());\n" % 1548 file.Write(" %s(%s, name_str.c_str());\n" %
1449 (func.GetGLFunctionName(), arg_string)) 1549 (func.GetGLFunctionName(), arg_string))
1450 file.Write(" return parse_error::kParseNoError;\n") 1550 file.Write(" return parse_error::kParseNoError;\n")
1451 file.Write("}\n") 1551 file.Write("}\n")
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 """Handler for glGetAttibLoc, glGetUniformLoc.""" 1658 """Handler for glGetAttibLoc, glGetUniformLoc."""
1559 1659
1560 def __init__(self): 1660 def __init__(self):
1561 GLcharHandler.__init__(self) 1661 GLcharHandler.__init__(self)
1562 1662
1563 def WriteServiceImplementation(self, func, file): 1663 def WriteServiceImplementation(self, func, file):
1564 """Overrriden from TypeHandler.""" 1664 """Overrriden from TypeHandler."""
1565 file.Write( 1665 file.Write(
1566 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1666 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1567 file.Write( 1667 file.Write(
1568 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1668 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1569 last_arg = func.GetLastOriginalArg() 1669 last_arg = func.GetLastOriginalArg()
1570 1670
1571 all_but_last_arg = func.GetOriginalArgs()[:-1] 1671 all_but_last_arg = func.GetOriginalArgs()
1572 for arg in all_but_last_arg: 1672 for arg in all_but_last_arg:
1573 arg.WriteGetCode(file) 1673 arg.WriteGetCode(file)
1574 1674
1575 file.Write(" uint32 name_size = c.data_size;\n") 1675 file.Write(" uint32 name_size = c.data_size;\n")
1576 file.Write(" const char* name = GetSharedMemoryAs<%s>(\n" % 1676 file.Write(" const char* name = GetSharedMemoryAs<%s>(\n" %
1577 last_arg.type) 1677 last_arg.type)
1578 file.Write(" c.%s_shm_id, c.%s_shm_offset, name_size);\n" % 1678 file.Write(" c.%s_shm_id, c.%s_shm_offset, name_size);\n" %
1579 (last_arg.name, last_arg.name)) 1679 (last_arg.name, last_arg.name))
1680 file.Write(" GLint* location = GetSharedMemoryAs<GLint*>(\n")
1681 file.Write(
1682 " c.location_shm_id, c.location_shm_offset, sizeof(*location));\n")
1683 file.Write(" // TODO(gman): Validate location.\n")
1580 file.Write(" parse_error::ParseError result =\n") 1684 file.Write(" parse_error::ParseError result =\n")
1581 file.Write(" Validate%s(this, arg_count%s);\n" % 1685 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
1582 (func.name, func.MakeOriginalArgString("", True))) 1686 (func.name, func.MakeOriginalArgString("", True)))
1583 file.Write(" if (result != parse_error::kParseNoError) {\n") 1687 file.Write(" if (result != parse_error::kParseNoError) {\n")
1584 file.Write(" return result;\n") 1688 file.Write(" return result;\n")
1585 file.Write(" }\n") 1689 file.Write(" }\n")
1586 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg]) 1690 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg])
1587 file.Write(" String name_str(name, name_size);\n") 1691 file.Write(" String name_str(name, name_size);\n")
1588 file.Write(" GLint location = %s(%s, name_str.c_str());\n" % 1692 file.Write(" *location = %s(%s, name_str.c_str());\n" %
1589 (func.GetGLFunctionName(), arg_string)) 1693 (func.GetGLFunctionName(), arg_string))
1590 file.Write(" DCHECK(false); // TODO: return result.\n")
1591 file.Write(" return parse_error::kParseNoError;\n") 1694 file.Write(" return parse_error::kParseNoError;\n")
1592 file.Write("}\n") 1695 file.Write("}\n")
1593 file.Write("\n") 1696 file.Write("\n")
1594 1697
1595 def WriteImmediateServiceImplementation(self, func, file): 1698 def WriteImmediateServiceImplementation(self, func, file):
1596 """Overrriden from TypeHandler.""" 1699 """Overrriden from TypeHandler."""
1597 file.Write( 1700 file.Write(
1598 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1701 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1599 file.Write( 1702 file.Write(
1600 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1703 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1601 last_arg = func.GetLastOriginalArg() 1704 last_arg = func.GetLastOriginalArg()
1602 1705
1603 all_but_last_arg = func.GetOriginalArgs()[:-1] 1706 all_but_last_arg = func.GetOriginalArgs()[:-1]
1604 for arg in all_but_last_arg: 1707 for arg in all_but_last_arg:
1605 arg.WriteGetCode(file) 1708 arg.WriteGetCode(file)
1606 1709
1607 file.Write(" uint32 name_size = c.data_size;\n") 1710 file.Write(" uint32 name_size = c.data_size;\n")
1608 file.Write( 1711 file.Write(
1609 " const char* name = GetImmediateDataAs<const char*>(c);\n") 1712 " const char* name = GetImmediateDataAs<const char*>(c);\n")
1610 file.Write(" // TODO(gman): Make sure validate checks arg_count\n") 1713 file.Write(" // TODO(gman): Make sure validate checks\n")
1611 file.Write(" // covers data_size.\n") 1714 file.Write(" // immediate_data_size covers data_size.\n")
1715 file.Write(" GLint* location = GetSharedMemoryAs<GLint*>(\n")
1716 file.Write(
1717 " c.location_shm_id, c.location_shm_offset, sizeof(*location));\n")
1718 file.Write(" // TODO(gman): Validate location.\n")
1612 file.Write(" parse_error::ParseError result =\n") 1719 file.Write(" parse_error::ParseError result =\n")
1613 file.Write(" Validate%s(this, arg_count%s);\n" % 1720 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
1614 (func.name, func.MakeOriginalArgString("", True))) 1721 (func.name, func.MakeOriginalArgString("", True)))
1615 file.Write(" if (result != parse_error::kParseNoError) {\n") 1722 file.Write(" if (result != parse_error::kParseNoError) {\n")
1616 file.Write(" return result;\n") 1723 file.Write(" return result;\n")
1617 file.Write(" }\n") 1724 file.Write(" }\n")
1618 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg]) 1725 arg_string = ", ".join(["%s" % arg.name for arg in all_but_last_arg])
1619 file.Write(" String name_str(name, name_size);\n") 1726 file.Write(" String name_str(name, name_size);\n")
1620 file.Write(" GLint location = %s(%s, name_str.c_str());\n" % 1727 file.Write(" *location = %s(%s, name_str.c_str());\n" %
1621 (func.GetGLFunctionName(), arg_string)) 1728 (func.GetGLFunctionName(), arg_string))
1622 file.Write(" DCHECK(false); // TODO: return result.\n")
1623 file.Write(" return parse_error::kParseNoError;\n") 1729 file.Write(" return parse_error::kParseNoError;\n")
1624 file.Write("}\n") 1730 file.Write("}\n")
1625 file.Write("\n") 1731 file.Write("\n")
1626 1732
1627 def WriteGLES2ImplementationHeader(self, func, file): 1733 def WriteGLES2ImplementationHeader(self, func, file):
1628 """Overrriden from TypeHandler.""" 1734 """Overrriden from TypeHandler."""
1629 file.Write("%s %s(%s) {\n" % 1735 file.Write("%s %s(%s) {\n" %
1630 (func.return_type, func.original_name, 1736 (func.return_type, func.original_name,
1631 func.MakeTypedOriginalArgString(""))) 1737 func.MakeTypedOriginalArgString("")))
1632 file.Write(" // TODO(gman): This needs to change to use SendString.\n") 1738 file.Write(" // TODO(gman): This needs to change to use SendString.\n")
(...skipping 25 matching lines...) Expand all
1658 1764
1659 def WriteImmediateCmdSetHeader(self, func, file): 1765 def WriteImmediateCmdSetHeader(self, func, file):
1660 """Overrriden from TypeHandler.""" 1766 """Overrriden from TypeHandler."""
1661 file.Write(" void SetHeader(const char* s) {\n") 1767 file.Write(" void SetHeader(const char* s) {\n")
1662 file.Write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(s));\n") 1768 file.Write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(s));\n")
1663 file.Write(" }\n") 1769 file.Write(" }\n")
1664 file.Write("\n") 1770 file.Write("\n")
1665 1771
1666 def WriteImmediateCmdInit(self, func, file): 1772 def WriteImmediateCmdInit(self, func, file):
1667 """Overrriden from TypeHandler.""" 1773 """Overrriden from TypeHandler."""
1668 last_arg = func.GetLastOriginalArg() 1774 file.Write(" void Init(%s) {\n" % func.MakeTypedInitString("_"))
1669 file.Write(" void Init(%s) {\n" % func.MakeTypedOriginalArgString("_")) 1775 file.Write(" SetHeader(_name);\n")
1670 file.Write(" SetHeader(_%s);\n" % last_arg.name) 1776 args = func.GetInitArgs()
1671 args = func.GetCmdArgs()[:-1]
1672 for arg in args: 1777 for arg in args:
1673 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) 1778 file.Write(" %s = _%s;\n" % (arg.name, arg.name))
1674 file.Write(" data_size = strlen(_%s);\n" % last_arg.name) 1779 file.Write(" data_size = ComputeDataSize(_name);\n")
1675 file.Write(" memcpy(ImmediateDataAddress(this), _%s, data_size);\n" % 1780 file.Write(" memcpy(ImmediateDataAddress(this), _name, data_size);\n")
1676 last_arg.name)
1677 file.Write(" }\n") 1781 file.Write(" }\n")
1678 file.Write("\n") 1782 file.Write("\n")
1679 1783
1680 def WriteImmediateCmdSet(self, func, file): 1784 def WriteImmediateCmdSet(self, func, file):
1681 """Overrriden from TypeHandler.""" 1785 """Overrriden from TypeHandler."""
1682 last_arg = func.GetLastOriginalArg()
1683 file.Write(" void* Set(void* cmd%s) {\n" % 1786 file.Write(" void* Set(void* cmd%s) {\n" %
1684 func.MakeTypedOriginalArgString("_", True)) 1787 func.MakeTypedInitString("_", True))
1685 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % 1788 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" %
1686 func.MakeOriginalArgString("_")) 1789 func.MakeInitString("_"))
1687 file.Write(" const uint32 size = ComputeSize(_%s);\n" % last_arg.name) 1790 file.Write(" const uint32 size = ComputeSize(_name);\n")
1688 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" 1791 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
1689 "cmd, size);\n") 1792 "cmd, size);\n")
1690 file.Write(" }\n") 1793 file.Write(" }\n")
1691 file.Write("\n") 1794 file.Write("\n")
1692 1795
1693 def WriteImmediateCmdHelper(self, func, file): 1796 def WriteImmediateCmdHelper(self, func, file):
1694 """Overrriden from TypeHandler.""" 1797 """Overrriden from TypeHandler."""
1695 args = func.MakeOriginalArgString("")
1696 last_arg = func.GetLastOriginalArg()
1697 file.Write(" void %s(%s) {\n" % 1798 file.Write(" void %s(%s) {\n" %
1698 (func.name, func.MakeTypedOriginalArgString(""))) 1799 (func.name, func.MakeTypedCmdArgString("")))
1699 file.Write(" const uint32 size = gles2::%s::ComputeSize(%s);\n" % 1800 file.Write(" const uint32 size = gles2::%s::ComputeSize(name);\n" %
1700 (func.name, last_arg.name)) 1801 func.name)
1701 file.Write(" gles2::%s& c = GetImmediateCmdSpaceTotalSize<gles2::%s>(" 1802 file.Write(" gles2::%s& c = GetImmediateCmdSpaceTotalSize<gles2::%s>("
1702 "size);\n" % 1803 "size);\n" %
1703 (func.name, func.name)) 1804 (func.name, func.name))
1704 file.Write(" c.Init(%s);\n" % args) 1805 file.Write(" c.Init(%s);\n" % func.MakeCmdArgString(""))
1705 file.Write(" }\n\n") 1806 file.Write(" }\n\n")
1706 1807
1707 def WriteImmediateFormatTest(self, func, file): 1808 def WriteImmediateFormatTest(self, func, file):
1708 """Overrriden from TypeHandler.""" 1809 """Overrriden from TypeHandler."""
1709 file.Write("TEST(GLES2FormatTest, %s) {\n" % func.name) 1810 file.Write("TEST(GLES2FormatTest, %s) {\n" % func.name)
1710 file.Write(" int8 buf[256] = { 0, };\n") 1811 file.Write(" int8 buf[256] = { 0, };\n")
1711 file.Write(" %s& cmd = *static_cast<%s*>(static_cast<void*>(&buf));\n" % 1812 file.Write(" %s& cmd = *static_cast<%s*>(static_cast<void*>(&buf));\n" %
1712 (func.name, func.name)) 1813 (func.name, func.name))
1713 file.Write(" static const char* const test_str = \"test string\";\n") 1814 file.Write(" static const char* const test_str = \"test string\";\n")
1714 file.Write(" void* next_cmd = cmd.Set(\n") 1815 file.Write(" void* next_cmd = cmd.Set(\n")
(...skipping 19 matching lines...) Expand all
1734 1835
1735 1836
1736 class IsHandler(TypeHandler): 1837 class IsHandler(TypeHandler):
1737 """Handler for glIs____ type and glGetError functions.""" 1838 """Handler for glIs____ type and glGetError functions."""
1738 1839
1739 def __init__(self): 1840 def __init__(self):
1740 TypeHandler.__init__(self) 1841 TypeHandler.__init__(self)
1741 1842
1742 def InitFunction(self, func): 1843 def InitFunction(self, func):
1743 """Overrriden from TypeHandler.""" 1844 """Overrriden from TypeHandler."""
1744 func.AddCmdArg(CmdArg("result_shm_id", 'uint32')) 1845 func.AddCmdArg(Argument("result_shm_id", 'uint32'))
1745 func.AddCmdArg(CmdArg("result_shm_offset", 'uint32')) 1846 func.AddCmdArg(Argument("result_shm_offset", 'uint32'))
1746 1847
1747 def WriteServiceImplementation(self, func, file): 1848 def WriteServiceImplementation(self, func, file):
1748 """Overrriden from TypeHandler.""" 1849 """Overrriden from TypeHandler."""
1749 file.Write( 1850 file.Write(
1750 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name) 1851 "parse_error::ParseError GLES2DecoderImpl::Handle%s(\n" % func.name)
1751 file.Write( 1852 file.Write(
1752 " unsigned int arg_count, const gles2::%s& c) {\n" % func.name) 1853 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
1753 args = func.GetOriginalArgs() 1854 args = func.GetOriginalArgs()
1754 for arg in args: 1855 for arg in args:
1755 arg.WriteGetCode(file) 1856 arg.WriteGetCode(file)
1756 1857
1757 file.Write(" %s* result_dst = GetSharedMemoryAs<%s*>(\n" % 1858 file.Write(" %s* result_dst = GetSharedMemoryAs<%s*>(\n" %
1758 (func.return_type, func.return_type)) 1859 (func.return_type, func.return_type))
1759 file.Write( 1860 file.Write(
1760 " c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));\n") 1861 " c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));\n")
1761 file.Write(" parse_error::ParseError result =\n") 1862 file.Write(" parse_error::ParseError result =\n")
1762 file.Write(" Validate%s(this, arg_count%s);\n" % 1863 file.Write(" Validate%s(this, immediate_data_size%s);\n" %
1763 (func.name, func.MakeOriginalArgString("", True))) 1864 (func.name, func.MakeOriginalArgString("", True)))
1764 file.Write(" if (result != parse_error::kParseNoError) {\n") 1865 file.Write(" if (result != parse_error::kParseNoError) {\n")
1765 file.Write(" return result;\n") 1866 file.Write(" return result;\n")
1766 file.Write(" }\n") 1867 file.Write(" }\n")
1767 file.Write(" *result_dst = %s(%s);\n" % 1868 file.Write(" *result_dst = %s(%s);\n" %
1768 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 1869 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
1769 file.Write(" return parse_error::kParseNoError;\n") 1870 file.Write(" return parse_error::kParseNoError;\n")
1770 file.Write("}\n") 1871 file.Write("}\n")
1771 file.Write("\n") 1872 file.Write("\n")
1772 1873
1773 def WriteGLES2ImplementationHeader(self, func, file): 1874 def WriteGLES2ImplementationHeader(self, func, file):
1774 """Overrriden from TypeHandler.""" 1875 """Overrriden from TypeHandler."""
1775 file.Write("%s %s(%s) {\n" % 1876 file.Write("%s %s(%s) {\n" %
1776 (func.return_type, func.original_name, 1877 (func.return_type, func.original_name,
1777 func.MakeTypedOriginalArgString(""))) 1878 func.MakeTypedOriginalArgString("")))
1778 arg_string = func.MakeOriginalArgString("") 1879 arg_string = func.MakeOriginalArgString("")
1779 comma = "" 1880 comma = ""
1780 if len(arg_string) > 0: 1881 if len(arg_string) > 0:
1781 comma = ", " 1882 comma = ", "
1782 file.Write(" helper_->%s(%s%sshared_memory_.GetId(), 0);\n" % 1883 file.Write(" helper_->%s(%s%sresult_shm_id(), result_shm_offset());\n" %
1783 (func.name, arg_string, comma)) 1884 (func.name, arg_string, comma))
1784 file.Write(" int32 token = helper_->InsertToken();\n") 1885 file.Write(" WaitForCmd();\n")
1785 file.Write(" helper_->WaitForToken(token);\n") 1886 file.Write(" return GetResultAs<%s>();\n" %
1786 file.Write(" return *shared_memory_.GetAddressAs<%s*>(0);\n" %
1787 func.return_type) 1887 func.return_type)
1788 file.Write("}\n") 1888 file.Write("}\n")
1789 file.Write("\n") 1889 file.Write("\n")
1790 1890
1791 def WriteGLES2ImplementationImpl(self, func, file): 1891 def WriteGLES2ImplementationImpl(self, func, file):
1792 """Overrriden from TypeHandler.""" 1892 """Overrriden from TypeHandler."""
1793 pass 1893 pass
1794 1894
1795 1895
1796 class STRnHandler(TypeHandler): 1896 class STRnHandler(TypeHandler):
(...skipping 12 matching lines...) Expand all
1809 """Holds info about a function.""" 1909 """Holds info about a function."""
1810 1910
1811 def __init__(self, info, type_handler): 1911 def __init__(self, info, type_handler):
1812 for key in info: 1912 for key in info:
1813 setattr(self, key, info[key]) 1913 setattr(self, key, info[key])
1814 self.type_handler = type_handler 1914 self.type_handler = type_handler
1815 if not 'type' in info: 1915 if not 'type' in info:
1816 self.type = '' 1916 self.type = ''
1817 1917
1818 1918
1819 class CmdArg(object): 1919 class Argument(object):
1820 """A class used to represent arguments at the command buffer level.""" 1920 """A class that represents a function argument."""
1921
1821 cmd_type_map_ = { 1922 cmd_type_map_ = {
1822 'GLfloat': 'float', 1923 'GLfloat': 'float',
1823 'GLclampf': 'float', 1924 'GLclampf': 'float',
1824 } 1925 }
1825 1926
1826 def __init__(self, name, type): 1927 def __init__(self, name, type):
1827 self.name = name 1928 self.name = name
1828 self.type = type 1929 self.type = type
1829 1930
1830 if type in self.cmd_type_map_: 1931 if type in self.cmd_type_map_:
1831 self.cmd_type = self.cmd_type_map_[type] 1932 self.cmd_type = self.cmd_type_map_[type]
1832 else: 1933 else:
1833 self.cmd_type = 'uint32' 1934 self.cmd_type = 'uint32'
1834 1935
1835 def WriteGetCode(self, file): 1936 def IsPointer(self):
1836 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % 1937 """Returns true if argument is a pointer."""
1837 (self.type, self.name, self.type, self.name)) 1938 return False
1838
1839
1840 class Argument(object):
1841 """A class that represents a function argument."""
1842
1843 def __init__(self, name, type):
1844 self.name = name
1845 self.type = type
1846 1939
1847 def AddCmdArgs(self, args): 1940 def AddCmdArgs(self, args):
1848 """Adds command arguments for this argument to the given list.""" 1941 """Adds command arguments for this argument to the given list."""
1849 return args.append(CmdArg(self.name, self.type)) 1942 return args.append(self)
1943
1944 def AddInitArgs(self, args):
1945 """Adds init arguments for this argument to the given list."""
1946 return args.append(self)
1850 1947
1851 def WriteGetCode(self, file): 1948 def WriteGetCode(self, file):
1852 """Writes the code to get an argument from a command structure.""" 1949 """Writes the code to get an argument from a command structure."""
1853 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % 1950 file.Write(" %s %s = static_cast<%s>(c.%s);\n" %
1854 (self.type, self.name, self.type, self.name)) 1951 (self.type, self.name, self.type, self.name))
1855 1952
1856 def WriteValidationCode(self, file): 1953 def WriteValidationCode(self, file):
1857 """Writes the validation code for an argument.""" 1954 """Writes the validation code for an argument."""
1858 pass 1955 pass
1859 1956
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1895 """Overridden from Argument.""" 1992 """Overridden from Argument."""
1896 return None 1993 return None
1897 1994
1898 1995
1899 class PointerArgument(Argument): 1996 class PointerArgument(Argument):
1900 """A class that represents a pointer argument to a function.""" 1997 """A class that represents a pointer argument to a function."""
1901 1998
1902 def __init__(self, name, type): 1999 def __init__(self, name, type):
1903 Argument.__init__(self, name, type) 2000 Argument.__init__(self, name, type)
1904 2001
2002 def IsPointer(self):
2003 """Returns true if argument is a pointer."""
2004 return True
2005
1905 def AddCmdArgs(self, args): 2006 def AddCmdArgs(self, args):
1906 """Overridden from Argument.""" 2007 """Overridden from Argument."""
1907 args.append(CmdArg("%s_shm_id" % self.name, 'uint32')) 2008 args.append(Argument("%s_shm_id" % self.name, 'uint32'))
1908 args.append(CmdArg("%s_shm_offset" % self.name, 'uint32')) 2009 args.append(Argument("%s_shm_offset" % self.name, 'uint32'))
1909 2010
1910 def WriteGetCode(self, file): 2011 def WriteGetCode(self, file):
1911 """Overridden from Argument.""" 2012 """Overridden from Argument."""
1912 file.Write( 2013 file.Write(
1913 " %s %s = GetSharedMemoryAs<%s>(\n" % 2014 " %s %s = GetSharedMemoryAs<%s>(\n" %
1914 (self.type, self.name, self.type)) 2015 (self.type, self.name, self.type))
1915 file.Write( 2016 file.Write(
1916 " c.%s_shm_id, c.%s_shm_offset, 0 /* TODO(gman): size */);\n" % 2017 " c.%s_shm_id, c.%s_shm_offset, 0 /* TODO(gman): size */);\n" %
1917 (self.name, self.name)) 2018 (self.name, self.name))
1918 2019
(...skipping 10 matching lines...) Expand all
1929 """Overridden from Argument.""" 2030 """Overridden from Argument."""
1930 file.Write(" if (%s == NULL) {\n" % self.name) 2031 file.Write(" if (%s == NULL) {\n" % self.name)
1931 file.Write(" return parse_error::kParseOutOfBounds;\n") 2032 file.Write(" return parse_error::kParseOutOfBounds;\n")
1932 file.Write(" }\n") 2033 file.Write(" }\n")
1933 2034
1934 def GetImmediateVersion(self): 2035 def GetImmediateVersion(self):
1935 """Overridden from Argument.""" 2036 """Overridden from Argument."""
1936 return ImmediatePointerArgument(self.name, self.type) 2037 return ImmediatePointerArgument(self.name, self.type)
1937 2038
1938 2039
2040 class NonImmediatePointerArgument(PointerArgument):
2041 """A pointer argument that stays a pointer even in an immediate cmd."""
2042
2043 def __init__(self, name, type):
2044 PointerArgument.__init__(self, name, type)
2045
2046 def IsPointer(self):
2047 """Returns true if argument is a pointer."""
2048 return False
2049
2050 def GetImmediateVersion(self):
2051 """Overridden from Argument."""
2052 return self
2053
2054
1939 class ResourceIdArgument(Argument): 2055 class ResourceIdArgument(Argument):
1940 """A class that represents a resource id argument to a function.""" 2056 """A class that represents a resource id argument to a function."""
1941 2057
1942 def __init__(self, name, type): 2058 def __init__(self, name, type):
1943 type = type.replace("GLResourceId", "GLuint") 2059 type = type.replace("GLResourceId", "GLuint")
1944 Argument.__init__(self, name, type) 2060 Argument.__init__(self, name, type)
1945 2061
1946 def WriteGetCode(self, file): 2062 def WriteGetCode(self, file):
1947 """Overridden from Argument.""" 2063 """Overridden from Argument."""
1948 file.Write(" %s %s;\n" % (self.type, self.name)) 2064 file.Write(" %s %s;\n" % (self.type, self.name))
1949 file.Write(" if (!id_map_.GetServiceId(c.%s, &%s)) {\n" % 2065 file.Write(" if (!id_map_.GetServiceId(c.%s, &%s)) {\n" %
1950 (self.name, self.name)) 2066 (self.name, self.name))
1951 file.Write(" SetGLError(GL_INVALID_VALUE);\n") 2067 file.Write(" SetGLError(GL_INVALID_VALUE);\n")
1952 file.Write(" return parse_error::kParseNoError;\n") 2068 file.Write(" return parse_error::kParseNoError;\n")
1953 file.Write(" }\n") 2069 file.Write(" }\n")
1954 2070
1955 2071
1956 class Function(object): 2072 class Function(object):
1957 """A class that represents a function.""" 2073 """A class that represents a function."""
1958 2074
1959 def __init__(self, name, info, return_type, original_args, args_for_cmds, 2075 def __init__(self, name, info, return_type, original_args, args_for_cmds,
1960 cmd_args, num_pointer_args): 2076 cmd_args, init_args, num_pointer_args):
1961 self.name = name 2077 self.name = name
1962 self.original_name = name 2078 self.original_name = name
1963 self.info = info 2079 self.info = info
1964 self.type_handler = info.type_handler 2080 self.type_handler = info.type_handler
1965 self.return_type = return_type 2081 self.return_type = return_type
1966 self.original_args = original_args 2082 self.original_args = original_args
1967 self.num_pointer_args = num_pointer_args 2083 self.num_pointer_args = num_pointer_args
1968 self.can_auto_generate = num_pointer_args == 0 and return_type == "void" 2084 self.can_auto_generate = num_pointer_args == 0 and return_type == "void"
1969 self.cmd_args = cmd_args 2085 self.cmd_args = cmd_args
2086 self.init_args = init_args
1970 self.args_for_cmds = args_for_cmds 2087 self.args_for_cmds = args_for_cmds
1971 self.type_handler.InitFunction(self) 2088 self.type_handler.InitFunction(self)
1972 2089
1973 def IsType(self, type_name): 2090 def IsType(self, type_name):
1974 """Returns true if function is a certain type.""" 2091 """Returns true if function is a certain type."""
1975 return self.info.type == type_name 2092 return self.info.type == type_name
1976 2093
1977 def GetInfo(self, name): 2094 def GetInfo(self, name):
1978 """Returns a value from the function info for this function.""" 2095 """Returns a value from the function info for this function."""
1979 if hasattr(self.info, name): 2096 if hasattr(self.info, name):
1980 return getattr(self.info, name) 2097 return getattr(self.info, name)
1981 return None 2098 return None
1982 2099
1983 def GetGLFunctionName(self): 2100 def GetGLFunctionName(self):
1984 """Gets the function to call to execute GL for this command.""" 2101 """Gets the function to call to execute GL for this command."""
1985 if self.GetInfo('DecoderFunc'): 2102 if self.GetInfo('DecoderFunc'):
1986 return self.GetInfo('DecoderFunc') 2103 return self.GetInfo('DecoderFunc')
1987 return "gl%s" % self.original_name 2104 return "gl%s" % self.original_name
1988 2105
1989 def AddCmdArg(self, arg): 2106 def AddCmdArg(self, arg):
1990 """Adds a cmd argument to this function.""" 2107 """Adds a cmd argument to this function."""
1991 self.cmd_args.append(arg) 2108 self.cmd_args.append(arg)
1992 2109
1993 def GetCmdArgs(self): 2110 def GetCmdArgs(self):
1994 """Gets the command args for this function.""" 2111 """Gets the command args for this function."""
1995 return self.cmd_args 2112 return self.cmd_args
1996 2113
2114 def GetInitArgs(self):
2115 """Gets the init args for this function."""
2116 return self.init_args
2117
1997 def GetOriginalArgs(self): 2118 def GetOriginalArgs(self):
1998 """Gets the original arguments to this function.""" 2119 """Gets the original arguments to this function."""
1999 return self.original_args 2120 return self.original_args
2000 2121
2001 def GetLastOriginalArg(self): 2122 def GetLastOriginalArg(self):
2002 """Gets the last original argument to this function.""" 2123 """Gets the last original argument to this function."""
2003 return self.original_args[len(self.original_args) - 1] 2124 return self.original_args[len(self.original_args) - 1]
2004 2125
2005 def __GetArgList(self, arg_string, add_comma): 2126 def __GetArgList(self, arg_string, add_comma):
2006 """Adds a comma if arg_string is not empty and add_comma is true.""" 2127 """Adds a comma if arg_string is not empty and add_comma is true."""
(...skipping 23 matching lines...) Expand all
2030 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) 2151 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args])
2031 return self.__GetArgList(arg_string, add_comma) 2152 return self.__GetArgList(arg_string, add_comma)
2032 2153
2033 def MakeCmdArgString(self, prefix, add_comma = False): 2154 def MakeCmdArgString(self, prefix, add_comma = False):
2034 """Gets the list of arguments as they need to be for command buffers.""" 2155 """Gets the list of arguments as they need to be for command buffers."""
2035 args = self.GetCmdArgs() 2156 args = self.GetCmdArgs()
2036 arg_string = ", ".join( 2157 arg_string = ", ".join(
2037 ["%s%s" % (prefix, arg.name) for arg in args]) 2158 ["%s%s" % (prefix, arg.name) for arg in args])
2038 return self.__GetArgList(arg_string, add_comma) 2159 return self.__GetArgList(arg_string, add_comma)
2039 2160
2161 def MakeTypedInitString(self, prefix, add_comma = False):
2162 """Gets a typed list of arguments as they need to be for cmd Init/Set."""
2163 args = self.GetInitArgs()
2164 arg_string = ", ".join(
2165 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args])
2166 return self.__GetArgList(arg_string, add_comma)
2167
2168 def MakeInitString(self, prefix, add_comma = False):
2169 """Gets the list of arguments as they need to be for cmd Init/Set."""
2170 args = self.GetInitArgs()
2171 arg_string = ", ".join(
2172 ["%s%s" % (prefix, arg.name) for arg in args])
2173 return self.__GetArgList(arg_string, add_comma)
2174
2040 def WriteHandlerImplementation(self, file): 2175 def WriteHandlerImplementation(self, file):
2041 """Writes the handler implementation for this command.""" 2176 """Writes the handler implementation for this command."""
2042 self.type_handler.WriteHandlerImplementation(self, file) 2177 self.type_handler.WriteHandlerImplementation(self, file)
2043 2178
2044 def WriteValidationCode(self, file): 2179 def WriteValidationCode(self, file):
2045 """Writes the validation code for a command.""" 2180 """Writes the validation code for a command."""
2046 pass 2181 pass
2047 2182
2048 def WriteCmdArgFlag(self, file): 2183 def WriteCmdArgFlag(self, file):
2049 """Writes the cmd kArgFlags constant.""" 2184 """Writes the cmd kArgFlags constant."""
(...skipping 28 matching lines...) Expand all
2078 """Writes the cmd's Set function.""" 2213 """Writes the cmd's Set function."""
2079 copy_args = self.MakeCmdArgString("_", False) 2214 copy_args = self.MakeCmdArgString("_", False)
2080 file.Write(" void* Set(void* cmd%s) {\n" % 2215 file.Write(" void* Set(void* cmd%s) {\n" %
2081 self.MakeTypedCmdArgString("_", True)) 2216 self.MakeTypedCmdArgString("_", True))
2082 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) 2217 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args)
2083 file.Write(" return NextCmdAddress<ValueType>(cmd);\n") 2218 file.Write(" return NextCmdAddress<ValueType>(cmd);\n")
2084 file.Write(" }\n") 2219 file.Write(" }\n")
2085 file.Write("\n") 2220 file.Write("\n")
2086 2221
2087 def WriteStruct(self, file): 2222 def WriteStruct(self, file):
2088 """Writes a structure that matched the arguments to the function.""" 2223 self.type_handler.WriteStruct(self, file)
2089 file.Write("struct %s {\n" % self.name)
2090 file.Write(" typedef %s ValueType;\n" % self.name)
2091 file.Write(" static const CommandId kCmdId = k%s;\n" % self.name)
2092 self.WriteCmdArgFlag(file)
2093 file.Write("\n")
2094
2095 self.WriteCmdComputeSize(file)
2096 self.WriteCmdSetHeader(file)
2097 self.WriteCmdInit(file)
2098 self.WriteCmdSet(file)
2099
2100 file.Write(" command_buffer::CommandHeader header;\n")
2101 args = self.GetCmdArgs()
2102 for arg in args:
2103 file.Write(" %s %s;\n" % (arg.cmd_type, arg.name))
2104 file.Write("};\n")
2105 file.Write("\n")
2106
2107 size = len(args) * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER
2108 file.Write("COMPILE_ASSERT(sizeof(%s) == %d,\n" % (self.name, size))
2109 file.Write(" Sizeof_%s_is_not_%d);\n" % (self.name, size))
2110 file.Write("COMPILE_ASSERT(offsetof(%s, header) == 0,\n" % self.name)
2111 file.Write(" OffsetOf_%s_header_not_0);\n" % self.name)
2112 offset = _SIZE_OF_COMMAND_HEADER
2113 for arg in args:
2114 file.Write("COMPILE_ASSERT(offsetof(%s, %s) == %d,\n" %
2115 (self.name, arg.name, offset))
2116 file.Write(" OffsetOf_%s_%s_not_%d);\n" %
2117 (self.name, arg.name, offset))
2118 offset += _SIZE_OF_UINT32
2119 file.Write("\n")
2120 2224
2121 def WriteCmdHelper(self, file): 2225 def WriteCmdHelper(self, file):
2122 """Writes the cmd's helper.""" 2226 """Writes the cmd's helper."""
2123 args = self.MakeCmdArgString("") 2227 self.type_handler.WriteCmdHelper(self, file)
2124 file.Write(" void %s(%s) {\n" %
2125 (self.name, self.MakeTypedCmdArgString("")))
2126 file.Write(" gles2::%s& c = GetCmdSpace<gles2::%s>();\n" %
2127 (self.name, self.name))
2128 file.Write(" c.Init(%s);\n" % args)
2129 file.Write(" }\n\n")
2130 2228
2131 def WriteServiceImplementation(self, file): 2229 def WriteServiceImplementation(self, file):
2132 """Writes the service implementation for a command.""" 2230 """Writes the service implementation for a command."""
2133 self.type_handler.WriteServiceImplementation(self, file) 2231 self.type_handler.WriteServiceImplementation(self, file)
2134 2232
2135 def WriteGLES2ImplementationHeader(self, file): 2233 def WriteGLES2ImplementationHeader(self, file):
2136 """Writes the GLES2 Implemention declaration.""" 2234 """Writes the GLES2 Implemention declaration."""
2137 self.type_handler.WriteGLES2ImplementationHeader(self, file) 2235 self.type_handler.WriteGLES2ImplementationHeader(self, file)
2138 2236
2139 def WriteGLES2ImplementationImpl(self, file): 2237 def WriteGLES2ImplementationImpl(self, file):
(...skipping 16 matching lines...) Expand all
2156 new_args.append(new_arg) 2254 new_args.append(new_arg)
2157 2255
2158 cmd_args = [] 2256 cmd_args = []
2159 new_args_for_cmds = [] 2257 new_args_for_cmds = []
2160 for arg in func.args_for_cmds: 2258 for arg in func.args_for_cmds:
2161 new_arg = arg.GetImmediateVersion() 2259 new_arg = arg.GetImmediateVersion()
2162 if new_arg: 2260 if new_arg:
2163 new_args_for_cmds.append(new_arg) 2261 new_args_for_cmds.append(new_arg)
2164 new_arg.AddCmdArgs(cmd_args) 2262 new_arg.AddCmdArgs(cmd_args)
2165 2263
2264 new_init_args = []
2265 for arg in new_args_for_cmds:
2266 arg.AddInitArgs(new_init_args)
2267
2166 Function.__init__( 2268 Function.__init__(
2167 self, 2269 self,
2168 "%sImmediate" % func.name, 2270 "%sImmediate" % func.name,
2169 func.info, 2271 func.info,
2170 func.return_type, 2272 func.return_type,
2171 new_args, 2273 new_args,
2172 new_args_for_cmds, 2274 new_args_for_cmds,
2173 cmd_args, 2275 cmd_args,
2276 new_init_args,
2174 0) 2277 0)
2175 self.original_name = func.name 2278 self.original_name = func.name
2176 2279
2177 def WriteServiceImplementation(self, file): 2280 def WriteServiceImplementation(self, file):
2178 """Overridden from Function""" 2281 """Overridden from Function"""
2179 self.type_handler.WriteImmediateServiceImplementation(self, file) 2282 self.type_handler.WriteImmediateServiceImplementation(self, file)
2180 2283
2181 def WriteHandlerImplementation(self, file): 2284 def WriteHandlerImplementation(self, file):
2182 """Overridden from Function""" 2285 """Overridden from Function"""
2183 self.type_handler.WriteImmediateHandlerImplementation(self, file) 2286 self.type_handler.WriteImmediateHandlerImplementation(self, file)
(...skipping 24 matching lines...) Expand all
2208 2311
2209 def WriteCmdHelper(self, file): 2312 def WriteCmdHelper(self, file):
2210 """Overridden from Function""" 2313 """Overridden from Function"""
2211 self.type_handler.WriteImmediateCmdHelper(self, file) 2314 self.type_handler.WriteImmediateCmdHelper(self, file)
2212 2315
2213 def WriteFormatTest(self, file): 2316 def WriteFormatTest(self, file):
2214 """Overridden from Function""" 2317 """Overridden from Function"""
2215 self.type_handler.WriteImmediateFormatTest(self, file) 2318 self.type_handler.WriteImmediateFormatTest(self, file)
2216 2319
2217 2320
2321 def CreateArg(arg_string):
2322 """Creates an Argument."""
2323 arg_parts = arg_string.split()
2324 if len(arg_parts) == 1 and arg_parts[0] == 'void':
2325 return None
2326 # Is this a pointer argument?
2327 elif arg_string.find('*') >= 0:
2328 if arg_parts[0] == 'NonImmediate':
2329 return NonImmediatePointerArgument(
2330 arg_parts[-1],
2331 " ".join(arg_parts[1:-1]))
2332 else:
2333 return PointerArgument(
2334 arg_parts[-1],
2335 " ".join(arg_parts[0:-1]))
2336 # Is this a resource argument? Must come after pointer check.
2337 elif arg_parts[0] == 'GLResourceId':
2338 return ResourceIdArgument(
2339 arg_parts[-1],
2340 " ".join(arg_parts[0:-1]))
2341 else:
2342 return Argument(
2343 arg_parts[-1],
2344 " ".join(arg_parts[0:-1]))
2345
2346
2218 class GLGenerator(object): 2347 class GLGenerator(object):
2219 """A class to generate GL command buffers.""" 2348 """A class to generate GL command buffers."""
2220 2349
2221 _function_re = re.compile(r'GL_APICALL(.*?)GL_APIENTRY (.*?) \((.*?)\);') 2350 _function_re = re.compile(r'GL_APICALL(.*?)GL_APIENTRY (.*?) \((.*?)\);')
2222 _non_alnum_re = re.compile(r'[^a-zA-Z0-9]') 2351 _non_alnum_re = re.compile(r'[^a-zA-Z0-9]')
2223 2352
2224 def __init__(self, verbose): 2353 def __init__(self, verbose):
2225 self.original_functions = [] 2354 self.original_functions = []
2226 self.functions = [] 2355 self.functions = []
2227 self.verbose = verbose 2356 self.verbose = verbose
2228 self._function_info = {} 2357 self._function_info = {}
2229 self._empty_type_handler = TypeHandler() 2358 self._empty_type_handler = TypeHandler()
2230 self._empty_function_info = FunctionInfo({}, self._empty_type_handler) 2359 self._empty_function_info = FunctionInfo({}, self._empty_type_handler)
2231 2360
2232 self._type_handlers = { 2361 self._type_handlers = {
2233 'Create': CreateHandler(), 2362 'Create': CreateHandler(),
2234 'Custom': CustomHandler(), 2363 'Custom': CustomHandler(),
2235 'Data': DataHandler(), 2364 'Data': DataHandler(),
2236 'DELn': DELnHandler(), 2365 'DELn': DELnHandler(),
2237 'GENn': GENnHandler(), 2366 'GENn': GENnHandler(),
2238 'GETn': GETnHandler(), 2367 'GETn': GETnHandler(),
2239 'GetGLchar': GetGLcharHandler(), 2368 'GetGLchar': GetGLcharHandler(),
2240 'GLchar': GLcharHandler(), 2369 'GLchar': GLcharHandler(),
2370 'HandWritten': HandWrittenHandler(),
2241 'Is': IsHandler(), 2371 'Is': IsHandler(),
2242 'Manual': ManualHandler(), 2372 'Manual': ManualHandler(),
2243 'PUT': PUTHandler(), 2373 'PUT': PUTHandler(),
2244 'PUTn': PUTnHandler(), 2374 'PUTn': PUTnHandler(),
2245 'STRn': STRnHandler(), 2375 'STRn': STRnHandler(),
2246 'Todo': TodoHandler(), 2376 'Todo': TodoHandler(),
2247 } 2377 }
2248 2378
2249 for func_name in _FUNCTION_INFO: 2379 for func_name in _FUNCTION_INFO:
2250 info = _FUNCTION_INFO[func_name] 2380 info = _FUNCTION_INFO[func_name]
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2302 base = os.path.dirname(os.path.dirname(os.path.dirname( 2432 base = os.path.dirname(os.path.dirname(os.path.dirname(
2303 os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) 2433 os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
2304 hpath = os.path.abspath(filename)[len(base) + 1:] 2434 hpath = os.path.abspath(filename)[len(base) + 1:]
2305 return self._non_alnum_re.sub('_', hpath).upper() 2435 return self._non_alnum_re.sub('_', hpath).upper()
2306 2436
2307 def ParseArgs(self, arg_string): 2437 def ParseArgs(self, arg_string):
2308 """Parses a function arg string.""" 2438 """Parses a function arg string."""
2309 args = [] 2439 args = []
2310 num_pointer_args = 0 2440 num_pointer_args = 0
2311 parts = arg_string.split(',') 2441 parts = arg_string.split(',')
2312 for arg in parts: 2442 for arg_string in parts:
2313 arg_parts = arg.split() 2443 arg = CreateArg(arg_string)
2314 if len(arg_parts) == 1 and arg_parts[0] == 'void': 2444 if arg:
2315 pass 2445 args.append(arg)
2316 # Is this a pointer argument? 2446 if arg.IsPointer():
2317 elif arg.find('*') >= 0: 2447 num_pointer_args += 1
2318 num_pointer_args += 1
2319 args.append(PointerArgument(
2320 arg_parts[-1],
2321 " ".join(arg_parts[0:-1])))
2322 # Is this a resource argument? Must come after pointer check.
2323 elif arg_parts[0] == 'GLResourceId':
2324 args.append(ResourceIdArgument(
2325 arg_parts[-1],
2326 " ".join(arg_parts[0:-1])))
2327 else:
2328 args.append(Argument(
2329 arg_parts[-1],
2330 " ".join(arg_parts[0:-1])))
2331 return (args, num_pointer_args) 2448 return (args, num_pointer_args)
2332 2449
2333 def ParseGLH(self, filename): 2450 def ParseGLH(self, filename):
2334 """Parses the GL2.h file and extracts the functions""" 2451 """Parses the GL2.h file and extracts the functions"""
2335 for line in _GL_FUNCTIONS.splitlines(): 2452 for line in _GL_FUNCTIONS.splitlines():
2336 match = self._function_re.match(line) 2453 match = self._function_re.match(line)
2337 if match: 2454 if match:
2338 func_name = match.group(2)[2:] 2455 func_name = match.group(2)[2:]
2339 func_info = self.GetFunctionInfo(func_name) 2456 func_info = self.GetFunctionInfo(func_name)
2340 if func_info.type != 'Noop': 2457 if func_info.type != 'Noop':
2341 return_type = match.group(1).strip() 2458 return_type = match.group(1).strip()
2342 arg_string = match.group(3) 2459 arg_string = match.group(3)
2343 (args, num_pointer_args) = self.ParseArgs(arg_string) 2460 (args, num_pointer_args) = self.ParseArgs(arg_string)
2344 args_for_cmds = args 2461 args_for_cmds = args
2345 if hasattr(func_info, 'cmd_args'): 2462 if hasattr(func_info, 'cmd_args'):
2346 (args_for_cmds, num_pointer_args) = ( 2463 (args_for_cmds, num_pointer_args) = (
2347 self.ParseArgs(getattr(func_info, 'cmd_args'))) 2464 self.ParseArgs(getattr(func_info, 'cmd_args')))
2348 cmd_args = [] 2465 cmd_args = []
2349 for arg in args_for_cmds: 2466 for arg in args_for_cmds:
2350 arg.AddCmdArgs(cmd_args) 2467 arg.AddCmdArgs(cmd_args)
2468 init_args = []
2469 for arg in args_for_cmds:
2470 arg.AddInitArgs(init_args)
2471 return_arg = CreateArg(return_type + " result")
2472 if return_arg:
2473 init_args.append(return_arg)
2351 f = Function(func_name, func_info, return_type, args, args_for_cmds, 2474 f = Function(func_name, func_info, return_type, args, args_for_cmds,
2352 cmd_args, num_pointer_args) 2475 cmd_args, init_args, num_pointer_args)
2353 self.original_functions.append(f) 2476 self.original_functions.append(f)
2354 self.AddFunction(f) 2477 self.AddFunction(f)
2355 f.type_handler.AddImmediateFunction(self, f) 2478 f.type_handler.AddImmediateFunction(self, f)
2356 2479
2357 self.Log("Auto Generated Functions : %d" % 2480 self.Log("Auto Generated Functions : %d" %
2358 len([f for f in self.functions if f.can_auto_generate or 2481 len([f for f in self.functions if f.can_auto_generate or
2359 (not f.IsType('') and not f.IsType('Custom') and 2482 (not f.IsType('') and not f.IsType('Custom') and
2360 not f.IsType('Todo'))])) 2483 not f.IsType('Todo'))]))
2361 2484
2362 funcs = [f for f in self.functions if not f.can_auto_generate and 2485 funcs = [f for f in self.functions if not f.can_auto_generate and
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2466 2589
2467 def WriteServiceValidation(self, filename): 2590 def WriteServiceValidation(self, filename):
2468 file = CWriter(filename) 2591 file = CWriter(filename)
2469 self.WriteLicense(file) 2592 self.WriteLicense(file)
2470 file.Write("\n") 2593 file.Write("\n")
2471 self.WriteNamespaceOpen(file) 2594 self.WriteNamespaceOpen(file)
2472 file.Write("namespace {\n") 2595 file.Write("namespace {\n")
2473 file.Write("\n") 2596 file.Write("\n")
2474 for func in self.functions: 2597 for func in self.functions:
2475 file.Write("parse_error::ParseError Validate%s(\n" % func.name) 2598 file.Write("parse_error::ParseError Validate%s(\n" % func.name)
2476 file.Write(" GLES2Decoder* decoder, unsigned int arg_count%s) {\n" % 2599 file.Write(
2477 func.MakeTypedOriginalArgString("", True)) 2600 " GLES2Decoder* decoder, uint32 immediate_data_size%s) {\n" %
2601 func.MakeTypedOriginalArgString("", True))
2478 for arg in func.GetOriginalArgs(): 2602 for arg in func.GetOriginalArgs():
2479 arg.WriteValidationCode(file) 2603 arg.WriteValidationCode(file)
2480 func.WriteValidationCode(file) 2604 func.WriteValidationCode(file)
2481 file.Write(" return parse_error::kParseNoError;\n") 2605 file.Write(" return parse_error::kParseNoError;\n")
2482 file.Write("}\n") 2606 file.Write("}\n")
2483 file.Write("} // anonymous namespace\n") 2607 file.Write("} // anonymous namespace\n")
2484 self.WriteNamespaceClose(file) 2608 self.WriteNamespaceClose(file)
2485 file.Close() 2609 file.Close()
2486 2610
2487 def WriteGLES2CLibImplementation(self, filename): 2611 def WriteGLES2CLibImplementation(self, filename):
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2568 gen.WriteGLES2ImplementationImpl("client/gles2_implementation_gen.h") 2692 gen.WriteGLES2ImplementationImpl("client/gles2_implementation_gen.h")
2569 gen.WriteServiceValidation("service/gles2_cmd_decoder_validate.h") 2693 gen.WriteServiceValidation("service/gles2_cmd_decoder_validate.h")
2570 2694
2571 if options.generate_command_id_tests: 2695 if options.generate_command_id_tests:
2572 gen.WriteCommandIdTest("common/gles2_cmd_id_test.cc") 2696 gen.WriteCommandIdTest("common/gles2_cmd_id_test.cc")
2573 2697
2574 2698
2575 if __name__ == '__main__': 2699 if __name__ == '__main__':
2576 main(sys.argv[1:]) 2700 main(sys.argv[1:])
2577 2701
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698