//! \file
//!
//! The public interface for 3D graphics is based on a command buffer.
//!
//! This was chosen because it provides an easy way to separate the process of
//! writing commands from the process of reading those commands without
//! requiring too much overhead to keep the two processes in sync.
//!
//! You can use this info to write commands yourself. Most developers will use
//! the provided OpenGL ES 2.0 implementation that issues these commands for
//! them.
//!
//! Each command starts with a header. The header is 32 bits, where the first 21
//! bits define the number of 32 bit entries, including the header, the command
//! represents. The last 11 bits specify the command.
//!
//! Commands that send a variable amount of data have 1 to 3 ways to send that
//! data.
//!
//! Many commands can send their data in shared memory. The command will take
//! an id of the shared memory and an offset into that shared memory of where
//! the data lives. Commands are executed asynchronously, so the client
//! program must be careful to leave the data available until the command has
//! executed.
//!
//! Some commands have an 'immediate' version where the data appears directly
//! after the command in memory.
//!
//! A 3rd way of passing data is through Buckets. Buckets are identified by
//! number. You create a bucket with the command SetBucketSize, you can then
//! fill the bucket with SetBucketData commands. Once you've sent all your
//! data you can then issue a command that uses the bucket and takes a bucket
//! id for which bucket to use.
//!
//! Receiving data works similarly. Some commands return their data to shared
//! memory. Other commands return their data through buckets which can then be
//! queried with the GetBucketSize and GetBucketData commands. In either case
//! the data will not be available until the command executes.
//!
//! All commands and arguments are validated. If a command fails validation the
//! service will stop processing commands. It is the responsibility of the
//! client to never issue an invalid command.
//!
//! Examples of invalid commands.
//!  - A command's size does not match the command.
//!  - A command's size would address memory outside the command buffer
//!  - A shared memory id is invalid
//!  - A shared memory offset is out of range for the given shared memory
//!  - The size of the data a command would access in shared memory is out of
//!    range for the given shared memory buffer.
//!  - A result (in the transfer buffer) is not initialized to the
//!    failure case. For example, any command that returns a SizedResult
//!    will take a shared memory id and offset to where to store the result.
//!    That size field of the result must be set to 0 before issuing the
//!    the command. That way, if the command buffer service fails the
//!    client will see a 0 size.
//!
//! The docs are a little terse. For any command that corresponds to an OpenGL
//! ES 2.0 function the arguments should be clear by looking at the OpenGL ES
//! 2.0 documentation with minor caveats.
//!
//!  - Client side arrays are not supported at the command buffer level
//!    so DrawArrays and VertexAttribPointer only take offsets into buffers.
//!  - The commands GenBuffers, GetTextures, CreateProgram, CreateShader, etc
//!    take client side ids and register them with the service. It's up to the
//!    client to make up the ids.
//!  - For shared resources, it's still up to the client to make up ids.
//!    but to help keep them in sync with other threads the commands
//!    GenSharedIds, RegisterSharedIds and DeleteSharedIds can be used.
//!

//! The command header.
struct CommandHeader {
  Uint32 size:21;
  Uint32 command:11;
};


//! Used for some glGetXXX commands that return a result through a pointer. We
//! need to know if the command succeeded or not and the size of the result. If
//! the command failed its result size will 0.  You must set the size to 0
//! before issuing the command.
//!
//! To retrieve the data you might do something like this pseudo code:
//!
//!   GetAttachedShaders::Result* result = address-of-shared-memory
//!   int num_results = result->size / sizeof(GLuint);  // the type returned
//!   GLuint* results = &result->data;
//!   for (int ii = 0; ii < num_results; ++ii) {
//!     printf("%d\n", results[ii]);
//!   }
//!
template <typename T>
struct SizedResult {
  uint32 size;  // in bytes.
  T data;  // this is just here to get an offset.
};


//! A Noop command.
struct Noop {
  static const CommandId kCmdId = 0;

  CommandHeader header;
};

//! The SetToken command puts a token in the command stream that you can
//! use to check if that token has been passed in the command stream.
struct SetToken {
  static const CommandId kCmdId = 1;

  CommandHeader header;
  uint32 token;
};

//! The Jump command jumps to another place in the command buffer.
struct Jump {
  static const CommandId kCmdId = 3;

  CommandHeader header;
  uint32 offset;
};

//! The JumpRelative command jumps to another place in the command buffer
//! relative to the end of this command. In other words. JumpRelative with an
//! offset of zero is effectively a no-op.
struct JumpRelative {
  static const CommandId kCmdId = 4;

  CommandHeader header;
  int32 offset;
};

//! The Call command jumps to a subroutine which can be returned from with the
//! Return command.
struct Call {
  static const CommandId kCmdId = 5;

  CommandHeader header;
  uint32 offset;
};

//! The CallRelative command jumps to a subroutine using a relative offset. The
//! offset is relative to the end of this command..
struct CallRelative {
  static const CommandId kCmdId = 6;

  CommandHeader header;
  int32 offset;
};

//! Returns from a subroutine called by the Call or CallRelative commands.
struct Return {
  static const CommandId kCmdId = 7;

  CommandHeader header;
};

//! Sets the size of a bucket for collecting data on the service side.
//! This is a utility for gathering data on the service side so it can be used
//! all at once when some service side API is called. It removes the need to
//! add special commands just to support a particular API. For example, any API
//! command that needs a string needs a way to send that string to the API over
//! the command buffers. While you can require that the command buffer or
//! transfer buffer be large enough to hold the largest string you can send,
//! using this command removes that restriction by letting you send smaller
//! pieces over and build up the data on the service side.
//!
//! You can clear a bucket on the service side and thereby free memory by
//! sending a size of 0.
struct SetBucketSize {
  static const CommandId kCmdId = 8;

  CommandHeader header;
  uint32 bucket_id;
  uint32 size;
};

//! Sets the contents of a portion of a bucket on the service side from data in
//! shared memory.
//! See SetBucketSize.
struct SetBucketData {
  static const CommandId kCmdId = 9;

  CommandHeader header;
  uint32 bucket_id;
  uint32 offset;
  uint32 size;
  uint32 shared_memory_id;
  uint32 shared_memory_offset;
};

//! Sets the contents of a portion of a bucket on the service side from data in
//! the command buffer.
//! See SetBucketSize.
struct SetBucketDataImmediate {
  static const CommandId kCmdId = 10;

  CommandHeader header;
  uint32 bucket_id;
  uint32 offset;
  uint32 size;
};

//! Gets the size of a bucket the service has available. Sending a variable
//! size result back to the client, for example any API that returns a string,
//! is problematic since the largest thing you can send back is the size of
//! your shared memory. This command along with GetBucketData implements a way
//! to get a result a piece at a time to help solve that problem in a generic
//! way.
struct GetBucketSize {
  static const CommandId kCmdId = 11;

  typedef uint32 Result;

  CommandHeader header;
  uint32 bucket_id;
  uint32 shared_memory_id;
  uint32 shared_memory_offset;
};

//! Gets a piece of a result the service has available.
//! See GetBucketSize.
struct GetBucketData {
  static const CommandId kCmdId = 12;

  CommandHeader header;
  uint32 bucket_id;
  uint32 offset;
  uint32 size;
  uint32 shared_memory_id;
  uint32 shared_memory_offset;
};

// OpenGL ES 2.0 related commands.

//! Command that corresponds to glActiveTexture.
struct ActiveTexture {
  static const CommandId kCmdId = 256;

  CommandHeader header;
  uint32 texture;  //!< GLenum
};

//! Command that corresponds to glAttachShader.
struct AttachShader {
  static const CommandId kCmdId = 257;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 shader;  //!< GLuint
};

//! Command that corresponds to glBindAttribLocation.
struct BindAttribLocation {
  static const CommandId kCmdId = 258;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 index;  //!< GLuint
  uint32 name_shm_id;  //!< uint32
  uint32 name_shm_offset;  //!< uint32
  uint32 data_size;  //!< uint32
};

//! Immediate version of command that corresponds to glBindAttribLocation.
struct BindAttribLocationImmediate {
  static const CommandId kCmdId = 259;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 index;  //!< GLuint
  uint32 data_size;  //!< uint32
};

//! Bucket version of command that corresponds to glBindAttribLocation.
struct BindAttribLocationBucket {
  static const CommandId kCmdId = 432;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 index;  //!< GLuint
  uint32 name_bucket_id;  //!< uint32
};

//! Command that corresponds to glBindBuffer.
struct BindBuffer {
  static const CommandId kCmdId = 260;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 buffer;  //!< GLuint
};

//! Command that corresponds to glBindFramebuffer.
struct BindFramebuffer {
  static const CommandId kCmdId = 261;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 framebuffer;  //!< GLuint
};

//! Command that corresponds to glBindRenderbuffer.
struct BindRenderbuffer {
  static const CommandId kCmdId = 262;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 renderbuffer;  //!< GLuint
};

//! Command that corresponds to glBindTexture.
struct BindTexture {
  static const CommandId kCmdId = 263;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 texture;  //!< GLuint
};

//! Command that corresponds to glBlendColor.
struct BlendColor {
  static const CommandId kCmdId = 264;

  CommandHeader header;
  float red;  //!< GLclampf
  float green;  //!< GLclampf
  float blue;  //!< GLclampf
  float alpha;  //!< GLclampf
};

//! Command that corresponds to glBlendEquation.
struct BlendEquation {
  static const CommandId kCmdId = 265;

  CommandHeader header;
  uint32 mode;  //!< GLenum
};

//! Command that corresponds to glBlendEquationSeparate.
struct BlendEquationSeparate {
  static const CommandId kCmdId = 266;

  CommandHeader header;
  uint32 modeRGB;  //!< GLenum
  uint32 modeAlpha;  //!< GLenum
};

//! Command that corresponds to glBlendFunc.
struct BlendFunc {
  static const CommandId kCmdId = 267;

  CommandHeader header;
  uint32 sfactor;  //!< GLenum
  uint32 dfactor;  //!< GLenum
};

//! Command that corresponds to glBlendFuncSeparate.
struct BlendFuncSeparate {
  static const CommandId kCmdId = 268;

  CommandHeader header;
  uint32 srcRGB;  //!< GLenum
  uint32 dstRGB;  //!< GLenum
  uint32 srcAlpha;  //!< GLenum
  uint32 dstAlpha;  //!< GLenum
};

//! Command that corresponds to glBufferData.
struct BufferData {
  static const CommandId kCmdId = 269;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 size;  //!< GLsizeiptr
  uint32 data_shm_id;  //!< uint32
  uint32 data_shm_offset;  //!< uint32
  uint32 usage;  //!< GLenum
};

//! Immediate version of command that corresponds to glBufferData.
struct BufferDataImmediate {
  static const CommandId kCmdId = 270;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 size;  //!< GLsizeiptr
  uint32 usage;  //!< GLenum
};

//! Command that corresponds to glBufferSubData.
struct BufferSubData {
  static const CommandId kCmdId = 271;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 offset;  //!< GLintptr
  int32 size;  //!< GLsizeiptr
  uint32 data_shm_id;  //!< uint32
  uint32 data_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glBufferSubData.
struct BufferSubDataImmediate {
  static const CommandId kCmdId = 272;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 offset;  //!< GLintptr
  int32 size;  //!< GLsizeiptr
};

//! Command that corresponds to glCheckFramebufferStatus.
struct CheckFramebufferStatus {
  static const CommandId kCmdId = 273;

  typedef GLenum Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glClear.
struct Clear {
  static const CommandId kCmdId = 274;

  CommandHeader header;
  uint32 mask;  //!< GLbitfield
};

//! Command that corresponds to glClearColor.
struct ClearColor {
  static const CommandId kCmdId = 275;

  CommandHeader header;
  float red;  //!< GLclampf
  float green;  //!< GLclampf
  float blue;  //!< GLclampf
  float alpha;  //!< GLclampf
};

//! Command that corresponds to glClearDepthf.
struct ClearDepthf {
  static const CommandId kCmdId = 276;

  CommandHeader header;
  float depth;  //!< GLclampf
};

//! Command that corresponds to glClearStencil.
struct ClearStencil {
  static const CommandId kCmdId = 277;

  CommandHeader header;
  int32 s;  //!< GLint
};

//! Command that corresponds to glColorMask.
struct ColorMask {
  static const CommandId kCmdId = 278;

  CommandHeader header;
  uint32 red;  //!< GLboolean
  uint32 green;  //!< GLboolean
  uint32 blue;  //!< GLboolean
  uint32 alpha;  //!< GLboolean
};

//! Command that corresponds to glCompileShader.
struct CompileShader {
  static const CommandId kCmdId = 279;

  CommandHeader header;
  uint32 shader;  //!< GLuint
};

//! Command that corresponds to glCompressedTexImage2D.
struct CompressedTexImage2D {
  static const CommandId kCmdId = 280;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  uint32 internalformat;  //!< GLenum
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
  int32 imageSize;  //!< GLsizei
  uint32 data_shm_id;  //!< uint32
  uint32 data_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glCompressedTexImage2D.
struct CompressedTexImage2DImmediate {
  static const CommandId kCmdId = 281;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  uint32 internalformat;  //!< GLenum
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
  int32 imageSize;  //!< GLsizei
};

//! Bucket version of command that corresponds to glCompressedTexImage2D.
struct CompressedTexImage2DBucket {
  static const CommandId kCmdId = 443;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  uint32 internalformat;  //!< GLenum
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
  uint32 bucket_id;  //!< GLuint
};

//! Command that corresponds to glCompressedTexSubImage2D.
struct CompressedTexSubImage2D {
  static const CommandId kCmdId = 282;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  int32 imageSize;  //!< GLsizei
  uint32 data_shm_id;  //!< uint32
  uint32 data_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glCompressedTexSubImage2D.
struct CompressedTexSubImage2DImmediate {
  static const CommandId kCmdId = 283;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  int32 imageSize;  //!< GLsizei
};

//! Bucket version of command that corresponds to glCompressedTexSubImage2D.
struct CompressedTexSubImage2DBucket {
  static const CommandId kCmdId = 444;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  uint32 bucket_id;  //!< GLuint
};

//! Command that corresponds to glCopyTexImage2D.
struct CopyTexImage2D {
  static const CommandId kCmdId = 284;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  uint32 internalformat;  //!< GLenum
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
};

//! Command that corresponds to glCopyTexSubImage2D.
struct CopyTexSubImage2D {
  static const CommandId kCmdId = 285;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
};

//! Command that corresponds to glCreateProgram.
struct CreateProgram {
  static const CommandId kCmdId = 286;

  CommandHeader header;
  uint32 client_id;  //!< uint32
};

//! Command that corresponds to glCreateShader.
struct CreateShader {
  static const CommandId kCmdId = 287;

  CommandHeader header;
  uint32 type;  //!< GLenum
  uint32 client_id;  //!< uint32
};

//! Command that corresponds to glCullFace.
struct CullFace {
  static const CommandId kCmdId = 288;

  CommandHeader header;
  uint32 mode;  //!< GLenum
};

//! Command that corresponds to glDeleteBuffers.
struct DeleteBuffers {
  static const CommandId kCmdId = 289;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 buffers_shm_id;  //!< uint32
  uint32 buffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glDeleteBuffers.
struct DeleteBuffersImmediate {
  static const CommandId kCmdId = 290;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glDeleteFramebuffers.
struct DeleteFramebuffers {
  static const CommandId kCmdId = 291;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 framebuffers_shm_id;  //!< uint32
  uint32 framebuffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glDeleteFramebuffers.
struct DeleteFramebuffersImmediate {
  static const CommandId kCmdId = 292;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glDeleteProgram.
struct DeleteProgram {
  static const CommandId kCmdId = 293;

  CommandHeader header;
  uint32 program;  //!< GLuint
};

//! Command that corresponds to glDeleteRenderbuffers.
struct DeleteRenderbuffers {
  static const CommandId kCmdId = 294;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 renderbuffers_shm_id;  //!< uint32
  uint32 renderbuffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glDeleteRenderbuffers.
struct DeleteRenderbuffersImmediate {
  static const CommandId kCmdId = 295;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glDeleteShader.
struct DeleteShader {
  static const CommandId kCmdId = 296;

  CommandHeader header;
  uint32 shader;  //!< GLuint
};

//! Command that corresponds to glDeleteTextures.
struct DeleteTextures {
  static const CommandId kCmdId = 297;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 textures_shm_id;  //!< uint32
  uint32 textures_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glDeleteTextures.
struct DeleteTexturesImmediate {
  static const CommandId kCmdId = 298;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glDepthFunc.
struct DepthFunc {
  static const CommandId kCmdId = 299;

  CommandHeader header;
  uint32 func;  //!< GLenum
};

//! Command that corresponds to glDepthMask.
struct DepthMask {
  static const CommandId kCmdId = 300;

  CommandHeader header;
  uint32 flag;  //!< GLboolean
};

//! Command that corresponds to glDepthRangef.
struct DepthRangef {
  static const CommandId kCmdId = 301;

  CommandHeader header;
  float zNear;  //!< GLclampf
  float zFar;  //!< GLclampf
};

//! Command that corresponds to glDetachShader.
struct DetachShader {
  static const CommandId kCmdId = 302;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 shader;  //!< GLuint
};

//! Command that corresponds to glDisable.
struct Disable {
  static const CommandId kCmdId = 303;

  CommandHeader header;
  uint32 cap;  //!< GLenum
};

//! Command that corresponds to glDisableVertexAttribArray.
struct DisableVertexAttribArray {
  static const CommandId kCmdId = 304;

  CommandHeader header;
  uint32 index;  //!< GLuint
};

//! Command that corresponds to glDrawArrays.
struct DrawArrays {
  static const CommandId kCmdId = 305;

  CommandHeader header;
  uint32 mode;  //!< GLenum
  int32 first;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glDrawElements.
struct DrawElements {
  static const CommandId kCmdId = 306;

  CommandHeader header;
  uint32 mode;  //!< GLenum
  int32 count;  //!< GLsizei
  uint32 type;  //!< GLenum
  uint32 index_offset;  //!< GLuint
};

//! Command that corresponds to glEnable.
struct Enable {
  static const CommandId kCmdId = 307;

  CommandHeader header;
  uint32 cap;  //!< GLenum
};

//! Command that corresponds to glEnableVertexAttribArray.
struct EnableVertexAttribArray {
  static const CommandId kCmdId = 308;

  CommandHeader header;
  uint32 index;  //!< GLuint
};

//! Command that corresponds to glFinish.
struct Finish {
  static const CommandId kCmdId = 309;

  CommandHeader header;
};

//! Command that corresponds to glFlush.
struct Flush {
  static const CommandId kCmdId = 310;

  CommandHeader header;
};

//! Command that corresponds to glFramebufferRenderbuffer.
struct FramebufferRenderbuffer {
  static const CommandId kCmdId = 311;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 attachment;  //!< GLenum
  uint32 renderbuffertarget;  //!< GLenum
  uint32 renderbuffer;  //!< GLuint
};

//! Command that corresponds to glFramebufferTexture2D.
struct FramebufferTexture2D {
  static const CommandId kCmdId = 312;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 attachment;  //!< GLenum
  uint32 textarget;  //!< GLenum
  uint32 texture;  //!< GLuint
  int32 level;  //!< GLint
};

//! Command that corresponds to glFrontFace.
struct FrontFace {
  static const CommandId kCmdId = 313;

  CommandHeader header;
  uint32 mode;  //!< GLenum
};

//! Command that corresponds to glGenBuffers.
struct GenBuffers {
  static const CommandId kCmdId = 314;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 buffers_shm_id;  //!< uint32
  uint32 buffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glGenBuffers.
struct GenBuffersImmediate {
  static const CommandId kCmdId = 315;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glGenerateMipmap.
struct GenerateMipmap {
  static const CommandId kCmdId = 316;

  CommandHeader header;
  uint32 target;  //!< GLenum
};

//! Command that corresponds to glGenFramebuffers.
struct GenFramebuffers {
  static const CommandId kCmdId = 317;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 framebuffers_shm_id;  //!< uint32
  uint32 framebuffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glGenFramebuffers.
struct GenFramebuffersImmediate {
  static const CommandId kCmdId = 318;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glGenRenderbuffers.
struct GenRenderbuffers {
  static const CommandId kCmdId = 319;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 renderbuffers_shm_id;  //!< uint32
  uint32 renderbuffers_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glGenRenderbuffers.
struct GenRenderbuffersImmediate {
  static const CommandId kCmdId = 320;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glGenTextures.
struct GenTextures {
  static const CommandId kCmdId = 321;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 textures_shm_id;  //!< uint32
  uint32 textures_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glGenTextures.
struct GenTexturesImmediate {
  static const CommandId kCmdId = 322;

  CommandHeader header;
  int32 n;  //!< GLsizei
};

//! Command that corresponds to glGetActiveAttrib.
struct GetActiveAttrib {
  static const CommandId kCmdId = 323;

  struct Result {
    int32 success;
    int32 size;
    uint32 type;
  };

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 index;  //!< GLuint
  uint32 name_bucket_id;  //!< uint32
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetActiveUniform.
struct GetActiveUniform {
  static const CommandId kCmdId = 324;

  struct Result {
    int32 success;
    int32 size;
    uint32 type;
  };

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 index;  //!< GLuint
  uint32 name_bucket_id;  //!< uint32
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetAttachedShaders.
struct GetAttachedShaders {
  static const CommandId kCmdId = 325;

  typedef SizedResult<GLuint> Result;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
  uint32 result_size;  //!< uint32
};

//! Command that corresponds to glGetAttribLocation.
struct GetAttribLocation {
  static const CommandId kCmdId = 326;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 name_shm_id;
  uint32 name_shm_offset;
  uint32 location_shm_id;
  uint32 location_shm_offset;
  uint32 data_size;
};

//! Immediate version of command that corresponds to glGetAttribLocation.
struct GetAttribLocationImmediate {
  static const CommandId kCmdId = 327;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 location_shm_id;
  uint32 location_shm_offset;
  uint32 data_size;
};

//! Bucket version of command that corresponds to glGetAttribLocation.
struct GetAttribLocationBucket {
  static const CommandId kCmdId = 434;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 name_bucket_id;
  uint32 location_shm_id;
  uint32 location_shm_offset;
};

//! Command that corresponds to glGetBooleanv.
struct GetBooleanv {
  static const CommandId kCmdId = 328;

  typedef SizedResult<GLboolean> Result;

  CommandHeader header;
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetBufferParameteriv.
struct GetBufferParameteriv {
  static const CommandId kCmdId = 329;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetError.
struct GetError {
  static const CommandId kCmdId = 330;

  typedef GLenum Result;

  CommandHeader header;
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetFloatv.
struct GetFloatv {
  static const CommandId kCmdId = 331;

  typedef SizedResult<GLfloat> Result;

  CommandHeader header;
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetFramebufferAttachmentParameteriv.
struct GetFramebufferAttachmentParameteriv {
  static const CommandId kCmdId = 332;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 attachment;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetIntegerv.
struct GetIntegerv {
  static const CommandId kCmdId = 333;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetProgramiv.
struct GetProgramiv {
  static const CommandId kCmdId = 334;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetProgramInfoLog.
struct GetProgramInfoLog {
  static const CommandId kCmdId = 335;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 bucket_id;  //!< uint32
};

//! Command that corresponds to glGetRenderbufferParameteriv.
struct GetRenderbufferParameteriv {
  static const CommandId kCmdId = 336;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetShaderiv.
struct GetShaderiv {
  static const CommandId kCmdId = 337;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetShaderInfoLog.
struct GetShaderInfoLog {
  static const CommandId kCmdId = 338;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 bucket_id;  //!< uint32
};

//! Command that corresponds to glGetShaderPrecisionFormat.
struct GetShaderPrecisionFormat {
  static const CommandId kCmdId = 339;

  struct Result {
    int32 success;
    int32 min_range;
    int32 max_range;
    int32 precision;
  };

  CommandHeader header;
  uint32 shadertype;  //!< GLenum
  uint32 precisiontype;  //!< GLenum
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetShaderSource.
struct GetShaderSource {
  static const CommandId kCmdId = 340;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 bucket_id;  //!< uint32
};

//! Command that corresponds to glGetString.
struct GetString {
  static const CommandId kCmdId = 341;

  CommandHeader header;
  uint32 name;  //!< GLenum
  uint32 bucket_id;  //!< uint32
};

//! Command that corresponds to glGetTexParameterfv.
struct GetTexParameterfv {
  static const CommandId kCmdId = 342;

  typedef SizedResult<GLfloat> Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetTexParameteriv.
struct GetTexParameteriv {
  static const CommandId kCmdId = 343;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetUniformLocation.
struct GetUniformLocation {
  static const CommandId kCmdId = 346;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 name_shm_id;
  uint32 name_shm_offset;
  uint32 location_shm_id;
  uint32 location_shm_offset;
  uint32 data_size;
};

//! Immediate version of command that corresponds to glGetUniformLocation.
struct GetUniformLocationImmediate {
  static const CommandId kCmdId = 347;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 location_shm_id;
  uint32 location_shm_offset;
  uint32 data_size;
};

//! Bucket version of command that corresponds to glGetUniformLocation.
struct GetUniformLocationBucket {
  static const CommandId kCmdId = 433;

  typedef GLint Result;

  CommandHeader header;
  uint32 program;
  uint32 name_bucket_id;
  uint32 location_shm_id;
  uint32 location_shm_offset;
};


//! Command that corresponds to glGetUniformfv.
struct GetUniformfv {
  static const CommandId kCmdId = 344;

  typedef SizedResult<GLfloat> Result;

  CommandHeader header;
  uint32 program;  //!< GLuint
  int32 location;  //!< GLint
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetUniformiv.
struct GetUniformiv {
  static const CommandId kCmdId = 345;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 program;  //!< GLuint
  int32 location;  //!< GLint
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetVertexAttribfv.
struct GetVertexAttribfv {
  static const CommandId kCmdId = 348;

  typedef SizedResult<GLfloat> Result;

  CommandHeader header;
  uint32 index;  //!< GLuint
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetVertexAttribiv.
struct GetVertexAttribiv {
  static const CommandId kCmdId = 349;

  typedef SizedResult<GLint> Result;

  CommandHeader header;
  uint32 index;  //!< GLuint
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Command that corresponds to glGetVertexAttribPointerv.
struct GetVertexAttribPointerv {
  static const CommandId kCmdId = 350;

  typedef SizedResult<GLuint> Result;

  CommandHeader header;
  uint32 index;  //!< GLuint
  uint32 pname;  //!< GLenum
  uint32 pointer_shm_id;  //!< uint32
  uint32 pointer_shm_offset;  //!< uint32
};

//! Command that corresponds to glHint.
struct Hint {
  static const CommandId kCmdId = 351;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 mode;  //!< GLenum
};

//! Command that corresponds to glIsBuffer.
struct IsBuffer {
  static const CommandId kCmdId = 352;

  typedef uint32 Result;

  CommandHeader header;
  uint32 buffer;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsEnabled.
struct IsEnabled {
  static const CommandId kCmdId = 353;

  typedef uint32 Result;

  CommandHeader header;
  uint32 cap;  //!< GLenum
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsFramebuffer.
struct IsFramebuffer {
  static const CommandId kCmdId = 354;

  typedef uint32 Result;

  CommandHeader header;
  uint32 framebuffer;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsProgram.
struct IsProgram {
  static const CommandId kCmdId = 355;

  typedef uint32 Result;

  CommandHeader header;
  uint32 program;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsRenderbuffer.
struct IsRenderbuffer {
  static const CommandId kCmdId = 356;

  typedef uint32 Result;

  CommandHeader header;
  uint32 renderbuffer;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsShader.
struct IsShader {
  static const CommandId kCmdId = 357;

  typedef uint32 Result;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glIsTexture.
struct IsTexture {
  static const CommandId kCmdId = 358;

  typedef uint32 Result;

  CommandHeader header;
  uint32 texture;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glLineWidth.
struct LineWidth {
  static const CommandId kCmdId = 359;

  CommandHeader header;
  float width;  //!< GLfloat
};

//! Command that corresponds to glLinkProgram.
struct LinkProgram {
  static const CommandId kCmdId = 360;

  CommandHeader header;
  uint32 program;  //!< GLuint
};

//! Command that corresponds to glPixelStorei.
struct PixelStorei {
  static const CommandId kCmdId = 361;

  CommandHeader header;
  uint32 pname;  //!< GLenum
  int32 param;  //!< GLint
};

//! Command that corresponds to glPolygonOffset.
struct PolygonOffset {
  static const CommandId kCmdId = 362;

  CommandHeader header;
  float factor;  //!< GLfloat
  float units;  //!< GLfloat
};

//! Command that corresponds to glReadPixels.
//! ReadPixels has the result separated from the pixel buffer so that
//! it is easier to specify the result going to some specific place
//! that exactly fits the rectangle of pixels.
struct ReadPixels {
  static const CommandId kCmdId = 363;

  typedef uint32 Result;

  CommandHeader header;
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  uint32 type;  //!< GLenum
  uint32 pixels_shm_id;  //!< uint32
  uint32 pixels_shm_offset;  //!< uint32
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that corresponds to glReleaseShaderCompiler.
struct ReleaseShaderCompiler {
  static const CommandId kCmdId = 437;

  CommandHeader header;
};

//! Command that corresponds to glRenderbufferStorage.
struct RenderbufferStorage {
  static const CommandId kCmdId = 364;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 internalformat;  //!< GLenum
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
};

//! Command that corresponds to glSampleCoverage.
struct SampleCoverage {
  static const CommandId kCmdId = 365;

  CommandHeader header;
  float value;  //!< GLclampf
  uint32 invert;  //!< GLboolean
};

//! Command that corresponds to glScissor.
struct Scissor {
  static const CommandId kCmdId = 366;

  CommandHeader header;
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
};

//! Command that corresponds to glShaderBinary.
struct ShaderBinary {
  static const CommandId kCmdId = 436;

  CommandHeader header;
  int32 n;  //!< GLsizei
  uint32 shaders_shm_id;  //!< uint32
  uint32 shaders_shm_offset;  //!< uint32
  uint32 binaryformat;  //!< GLenum
  uint32 binary_shm_id;  //!< uint32
  uint32 binary_shm_offset;  //!< uint32
  int32 length;  //!< GLsizei
};

//! Command that corresponds to glShaderSource.
struct ShaderSource {
  static const CommandId kCmdId = 367;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 data_shm_id;  //!< uint32
  uint32 data_shm_offset;  //!< uint32
  uint32 data_size;  //!< uint32
};

//! Immediate version of command that corresponds to glShaderSource.
struct ShaderSourceImmediate {
  static const CommandId kCmdId = 368;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 data_size;  //!< uint32
};

//! Bucket version of command that corresponds to glShaderSource.
struct ShaderSourceBucket {
  static const CommandId kCmdId = 435;

  CommandHeader header;
  uint32 shader;  //!< GLuint
  uint32 data_bucket_id;  //!< uint32
};

//! Command that corresponds to glStencilFunc.
struct StencilFunc {
  static const CommandId kCmdId = 369;

  CommandHeader header;
  uint32 func;  //!< GLenum
  int32 ref;  //!< GLint
  uint32 mask;  //!< GLuint
};

//! Command that corresponds to glStencilFuncSeparate.
struct StencilFuncSeparate {
  static const CommandId kCmdId = 370;

  CommandHeader header;
  uint32 face;  //!< GLenum
  uint32 func;  //!< GLenum
  int32 ref;  //!< GLint
  uint32 mask;  //!< GLuint
};

//! Command that corresponds to glStencilMask.
struct StencilMask {
  static const CommandId kCmdId = 371;

  CommandHeader header;
  uint32 mask;  //!< GLuint
};

//! Command that corresponds to glStencilMaskSeparate.
struct StencilMaskSeparate {
  static const CommandId kCmdId = 372;

  CommandHeader header;
  uint32 face;  //!< GLenum
  uint32 mask;  //!< GLuint
};

//! Command that corresponds to glStencilOp.
struct StencilOp {
  static const CommandId kCmdId = 373;

  CommandHeader header;
  uint32 fail;  //!< GLenum
  uint32 zfail;  //!< GLenum
  uint32 zpass;  //!< GLenum
};

//! Command that corresponds to glStencilOpSeparate.
struct StencilOpSeparate {
  static const CommandId kCmdId = 374;

  CommandHeader header;
  uint32 face;  //!< GLenum
  uint32 fail;  //!< GLenum
  uint32 zfail;  //!< GLenum
  uint32 zpass;  //!< GLenum
};

//! Command that corresponds to glTexImage2D.
struct TexImage2D {
  static const CommandId kCmdId = 375;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 internalformat;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
  uint32 format;  //!< GLenum
  uint32 type;  //!< GLenum
  uint32 pixels_shm_id;  //!< uint32
  uint32 pixels_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glTexImage2D.
struct TexImage2DImmediate {
  static const CommandId kCmdId = 376;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 internalformat;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  int32 border;  //!< GLint
  uint32 format;  //!< GLenum
  uint32 type;  //!< GLenum
};

//! Command that corresponds to glTexParameterf.
struct TexParameterf {
  static const CommandId kCmdId = 377;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  float param;  //!< GLfloat
};

//! Command that corresponds to glTexParameterfv.
struct TexParameterfv {
  static const CommandId kCmdId = 378;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glTexParameterfv.
struct TexParameterfvImmediate {
  static const CommandId kCmdId = 379;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
};

//! Command that corresponds to glTexParameteri.
struct TexParameteri {
  static const CommandId kCmdId = 380;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  int32 param;  //!< GLint
};

//! Command that corresponds to glTexParameteriv.
struct TexParameteriv {
  static const CommandId kCmdId = 381;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
  uint32 params_shm_id;  //!< uint32
  uint32 params_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glTexParameteriv.
struct TexParameterivImmediate {
  static const CommandId kCmdId = 382;

  CommandHeader header;
  uint32 target;  //!< GLenum
  uint32 pname;  //!< GLenum
};

//! Command that corresponds to glTexSubImage2D.
struct TexSubImage2D {
  static const CommandId kCmdId = 383;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  uint32 type;  //!< GLenum
  uint32 pixels_shm_id;  //!< uint32
  uint32 pixels_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glTexSubImage2D.
struct TexSubImage2DImmediate {
  static const CommandId kCmdId = 384;

  CommandHeader header;
  uint32 target;  //!< GLenum
  int32 level;  //!< GLint
  int32 xoffset;  //!< GLint
  int32 yoffset;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
  uint32 format;  //!< GLenum
  uint32 type;  //!< GLenum
};

//! Command that corresponds to glUniform1f.
struct Uniform1f {
  static const CommandId kCmdId = 385;

  CommandHeader header;
  int32 location;  //!< GLint
  float x;  //!< GLfloat
};

//! Command that corresponds to glUniform1fv.
struct Uniform1fv {
  static const CommandId kCmdId = 386;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform1fv.
struct Uniform1fvImmediate {
  static const CommandId kCmdId = 387;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform1i.
struct Uniform1i {
  static const CommandId kCmdId = 388;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 x;  //!< GLint
};

//! Command that corresponds to glUniform1iv.
struct Uniform1iv {
  static const CommandId kCmdId = 389;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform1iv.
struct Uniform1ivImmediate {
  static const CommandId kCmdId = 390;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform2f.
struct Uniform2f {
  static const CommandId kCmdId = 391;

  CommandHeader header;
  int32 location;  //!< GLint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
};

//! Command that corresponds to glUniform2fv.
struct Uniform2fv {
  static const CommandId kCmdId = 392;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform2fv.
struct Uniform2fvImmediate {
  static const CommandId kCmdId = 393;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform2i.
struct Uniform2i {
  static const CommandId kCmdId = 394;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 x;  //!< GLint
  int32 y;  //!< GLint
};

//! Command that corresponds to glUniform2iv.
struct Uniform2iv {
  static const CommandId kCmdId = 395;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform2iv.
struct Uniform2ivImmediate {
  static const CommandId kCmdId = 396;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform3f.
struct Uniform3f {
  static const CommandId kCmdId = 397;

  CommandHeader header;
  int32 location;  //!< GLint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
  float z;  //!< GLfloat
};

//! Command that corresponds to glUniform3fv.
struct Uniform3fv {
  static const CommandId kCmdId = 398;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform3fv.
struct Uniform3fvImmediate {
  static const CommandId kCmdId = 399;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform3i.
struct Uniform3i {
  static const CommandId kCmdId = 400;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 z;  //!< GLint
};

//! Command that corresponds to glUniform3iv.
struct Uniform3iv {
  static const CommandId kCmdId = 401;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform3iv.
struct Uniform3ivImmediate {
  static const CommandId kCmdId = 402;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform4f.
struct Uniform4f {
  static const CommandId kCmdId = 403;

  CommandHeader header;
  int32 location;  //!< GLint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
  float z;  //!< GLfloat
  float w;  //!< GLfloat
};

//! Command that corresponds to glUniform4fv.
struct Uniform4fv {
  static const CommandId kCmdId = 404;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform4fv.
struct Uniform4fvImmediate {
  static const CommandId kCmdId = 405;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniform4i.
struct Uniform4i {
  static const CommandId kCmdId = 406;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 z;  //!< GLint
  int32 w;  //!< GLint
};

//! Command that corresponds to glUniform4iv.
struct Uniform4iv {
  static const CommandId kCmdId = 407;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 v_shm_id;  //!< uint32
  uint32 v_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniform4iv.
struct Uniform4ivImmediate {
  static const CommandId kCmdId = 408;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
};

//! Command that corresponds to glUniformMatrix2fv.
struct UniformMatrix2fv {
  static const CommandId kCmdId = 409;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
  uint32 value_shm_id;  //!< uint32
  uint32 value_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniformMatrix2fv.
struct UniformMatrix2fvImmediate {
  static const CommandId kCmdId = 410;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
};

//! Command that corresponds to glUniformMatrix3fv.
struct UniformMatrix3fv {
  static const CommandId kCmdId = 411;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
  uint32 value_shm_id;  //!< uint32
  uint32 value_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniformMatrix3fv.
struct UniformMatrix3fvImmediate {
  static const CommandId kCmdId = 412;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
};

//! Command that corresponds to glUniformMatrix4fv.
struct UniformMatrix4fv {
  static const CommandId kCmdId = 413;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
  uint32 value_shm_id;  //!< uint32
  uint32 value_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glUniformMatrix4fv.
struct UniformMatrix4fvImmediate {
  static const CommandId kCmdId = 414;

  CommandHeader header;
  int32 location;  //!< GLint
  int32 count;  //!< GLsizei
  uint32 transpose;  //!< GLboolean
};

//! Command that corresponds to glUseProgram.
struct UseProgram {
  static const CommandId kCmdId = 415;

  CommandHeader header;
  uint32 program;  //!< GLuint
};

//! Command that corresponds to glValidateProgram.
struct ValidateProgram {
  static const CommandId kCmdId = 416;

  CommandHeader header;
  uint32 program;  //!< GLuint
};

//! Command that corresponds to glVertexAttrib1f.
struct VertexAttrib1f {
  static const CommandId kCmdId = 417;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  float x;  //!< GLfloat
};

//! Command that corresponds to glVertexAttrib1fv.
struct VertexAttrib1fv {
  static const CommandId kCmdId = 418;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  uint32 values_shm_id;  //!< uint32
  uint32 values_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glVertexAttrib1fv.
struct VertexAttrib1fvImmediate {
  static const CommandId kCmdId = 419;

  CommandHeader header;
  uint32 indx;  //!< GLuint
};

//! Command that corresponds to glVertexAttrib2f.
struct VertexAttrib2f {
  static const CommandId kCmdId = 420;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
};

//! Command that corresponds to glVertexAttrib2fv.
struct VertexAttrib2fv {
  static const CommandId kCmdId = 421;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  uint32 values_shm_id;  //!< uint32
  uint32 values_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glVertexAttrib2fv.
struct VertexAttrib2fvImmediate {
  static const CommandId kCmdId = 422;

  CommandHeader header;
  uint32 indx;  //!< GLuint
};

//! Command that corresponds to glVertexAttrib3f.
struct VertexAttrib3f {
  static const CommandId kCmdId = 423;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
  float z;  //!< GLfloat
};

//! Command that corresponds to glVertexAttrib3fv.
struct VertexAttrib3fv {
  static const CommandId kCmdId = 424;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  uint32 values_shm_id;  //!< uint32
  uint32 values_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glVertexAttrib3fv.
struct VertexAttrib3fvImmediate {
  static const CommandId kCmdId = 425;

  CommandHeader header;
  uint32 indx;  //!< GLuint
};

//! Command that corresponds to glVertexAttrib4f.
struct VertexAttrib4f {
  static const CommandId kCmdId = 426;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  float x;  //!< GLfloat
  float y;  //!< GLfloat
  float z;  //!< GLfloat
  float w;  //!< GLfloat
};

//! Command that corresponds to glVertexAttrib4fv.
struct VertexAttrib4fv {
  static const CommandId kCmdId = 427;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  uint32 values_shm_id;  //!< uint32
  uint32 values_shm_offset;  //!< uint32
};

//! Immediate version of command that corresponds to glVertexAttrib4fv.
struct VertexAttrib4fvImmediate {
  static const CommandId kCmdId = 428;

  CommandHeader header;
  uint32 indx;  //!< GLuint
};

//! Command that corresponds to glVertexAttribPointer.
struct VertexAttribPointer {
  static const CommandId kCmdId = 429;

  CommandHeader header;
  uint32 indx;  //!< GLuint
  int32 size;  //!< GLint
  uint32 type;  //!< GLenum
  uint32 normalized;  //!< GLboolean
  int32 stride;  //!< GLsizei
  uint32 offset;  //!< GLuint
};

//! Command that corresponds to glViewport.
struct Viewport {
  static const CommandId kCmdId = 430;

  CommandHeader header;
  int32 x;  //!< GLint
  int32 y;  //!< GLint
  int32 width;  //!< GLsizei
  int32 height;  //!< GLsizei
};

//! Command that corresponds to SwapBuffers.
struct SwapBuffers {
  static const CommandId kCmdId = 431;

  CommandHeader header;
};

//! Command that corresponds to GetMaxValueInBuffer.
struct GetMaxValueInBuffer {
  static const CommandId kCmdId = 436;

  typedef GLuint Result;

  CommandHeader header;
  uint32 buffer_id;  //!< GLuint
  int32 count;  //!< GLsizei
  uint32 type;  //!< GLenum
  uint32 offset;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};

//! Command that generates shared ids for contexts that share resources.
struct GenSharedIds {
  static const CommandId kCmdId = 439;

  CommandHeader header;
  uint32 namespace_id;  //!< GLuint
  uint32 id_offset;  //!< GLuint
  int32 n;  //!< GLsizei
  uint32 ids_shm_id;  //!< uint32
  uint32 ids_shm_offset;  //!< uint32
};

//! Command that deletes shared ids.
struct DeleteSharedIds {
  static const CommandId kCmdId = 440;

  CommandHeader header;
  uint32 namespace_id;  //!< GLuint
  int32 n;  //!< GLsizei
  uint32 ids_shm_id;  //!< uint32
  uint32 ids_shm_offset;  //!< uint32
};

//! Command that registers shared ids. It is an error to attempt
//! to register an id that is already registered.
struct RegisterSharedIds {
  static const CommandId kCmdId = 441;

  CommandHeader header;
  uint32 namespace_id;  //!< GLuint
  int32 n;  //!< GLsizei
  uint32 ids_shm_id;  //!< uint32
  uint32 ids_shm_offset;  //!< uint32
};

//! Command that enables features. The bucket should contain the feature string.
struct CommandBufferEnable {
  static const CommandId kCmdId = 442;

  typedef GLint Result;

  CommandHeader header;
  uint32 bucket_id;  //!< GLuint
  uint32 result_shm_id;  //!< uint32
  uint32 result_shm_offset;  //!< uint32
};


