| 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 |