OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |