gles2_cmd_format.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file defines the GLES2 command buffer commands.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_H_
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <KHR/khrplatform.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/safe_numerics.h"
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/bitfield_helpers.h"
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/cmd_buffer_common.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_ids.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/types.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GL types are forward declared to avoid including the GL headers. The problem
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is determining which GL headers to include from code that is common to the
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// client and service sides (GLES2 or one of several GL implementations).
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int GLenum;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int GLbitfield;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int GLuint;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int GLint;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int GLsizei;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char GLboolean;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed char GLbyte;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef short GLshort;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char GLubyte;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned short GLushort;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long GLulong;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef float GLfloat;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef float GLclampf;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef double GLdouble;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef double GLclampd;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void GLvoid;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef khronos_intptr_t GLintptr;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef khronos_ssize_t  GLsizeiptr;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma pack(push, 1)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace id_namespaces {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are used when contexts share resources.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum IdNamespaces {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kBuffers,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kFramebuffers,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kProgramsAndShaders,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kRenderbuffers,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kTextures,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kQueries,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kVertexArrays,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kNumIdNamespaces
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These numbers must not change
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(kBuffers == 0, kBuffers_is_not_0);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(kFramebuffers == 1, kFramebuffers_is_not_1);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(kProgramsAndShaders == 2, kProgramsAndShaders_is_not_2);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(kRenderbuffers == 3, kRenderbuffers_is_not_3);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(kTextures == 4, kTextures_is_not_4);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace id_namespaces
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for some glGetXXX commands that return a result through a pointer. We
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// need to know if the command succeeded or not and the size of the result. If
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the command failed its result size will 0.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T>
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SizedResult {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef T Type;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T* GetData() {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<T*>(static_cast<void*>(&data));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the total size in bytes of the SizedResult for a given number of
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // results including the size field.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static size_t ComputeSize(size_t num_results) {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return sizeof(T) * num_results + sizeof(uint32);  // NOLINT
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the total size in bytes of the SizedResult for a given size of
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // results.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static size_t ComputeSizeFromBytes(size_t size_of_result_in_bytes) {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return size_of_result_in_bytes + sizeof(uint32);  // NOLINT
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the maximum number of results for a given buffer size.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static uint32 ComputeMaxResults(size_t size_of_buffer) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return (size_of_buffer >= sizeof(uint32)) ?
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ((size_of_buffer - sizeof(uint32)) / sizeof(T)) : 0;  // NOLINT
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the size for a given number of results.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetNumResults(size_t num_results) {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size = sizeof(T) * num_results;  // NOLINT
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the number of elements in the result
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 GetNumResults() const {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return size / sizeof(T);  // NOLINT
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Copy the result.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CopyResult(void* dst) const {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    memcpy(dst, &data, size);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 size;  // in bytes.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 data;  // this is just here to get an offset.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(SizedResult<int8>) == 8, SizedResult_size_not_8);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(SizedResult<int8>, size) == 0,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_SizedResult_size_not_0);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(SizedResult<int8>, data) == 4,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_SizedResult_data_not_4);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The data for one attrib or uniform from GetProgramInfoCHROMIUM.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ProgramInput {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 type;             // The type (GL_VEC3, GL_MAT3, GL_SAMPLER_2D, etc.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 size;              // The size (how big the array is for uniforms)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_offset;  // offset from ProgramInfoHeader to 'size' locations
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           // for uniforms, 1 for attribs.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_offset;      // offset from ProgrmaInfoHeader to start of name.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_length;      // length of the name.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The format of the bucket filled out by GetProgramInfoCHROMIUM
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ProgramInfoHeader {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 link_status;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 num_attribs;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 num_uniforms;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ProgramInput inputs[num_attribs + num_uniforms];
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The format of QuerySync used by EXT_occlusion_query_boolean
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct QuerySync {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Reset() {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    process_count = 0;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    result = 0;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 process_count;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64 result;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(ProgramInput) == 20, ProgramInput_size_not_20);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInput, type) == 0,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInput_type_not_0);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInput, size) == 4,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInput_size_not_4);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInput, location_offset) == 8,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInput_location_offset_not_8);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInput, name_offset) == 12,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInput_name_offset_not_12);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInput, name_length) == 16,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInput_name_length_not_16);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(ProgramInfoHeader) == 12, ProgramInfoHeader_size_not_12);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInfoHeader, link_status) == 0,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInfoHeader_link_status_not_0);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInfoHeader, num_attribs) == 4,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInfoHeader_num_attribs_not_4);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(ProgramInfoHeader, num_uniforms) == 8,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_ProgramInfoHeader_num_uniforms_not_8);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cmds {
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../common/gles2_cmd_format_autogen.h"
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are hand written commands.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): Attempt to make these auto-generated.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GetAttribLocation {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GetAttribLocation ValueType;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const CommandId kCmdId = kGetAttribLocation;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GLint Result;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static uint32 ComputeSize() {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<uint32>(sizeof(ValueType));  // NOLINT
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetHeader() {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header.SetCmd<ValueType>();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _data_size) {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetHeader();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    program = _program;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_shm_id = _name_shm_id;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_shm_offset = _name_shm_offset;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_id = _location_shm_id;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_offset = _location_shm_offset;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data_size = _data_size;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void* Set(
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* cmd, GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _data_size) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<ValueType*>(
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cmd)->Init(
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _program, _name_shm_id, _name_shm_offset, _location_shm_id,
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _location_shm_offset, _data_size);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NextCmdAddress<ValueType>(cmd);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandHeader header;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 program;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_shm_id;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_shm_offset;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_id;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_offset;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 data_size;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(GetAttribLocation) == 28,
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               Sizeof_GetAttribLocation_is_not_28);
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, header) == 0,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_header_not_0);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, program) == 4,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_program_not_4);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, name_shm_id) == 8,
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_name_shm_id_not_8);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, name_shm_offset) == 12,
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_name_shm_offset_not_12);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_id) == 16,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_location_shm_id_not_16);
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_offset) == 20,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_location_shm_offset_not_20);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocation, data_size) == 24,
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocation_data_size_not_24);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GetAttribLocationBucket {
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GetAttribLocationBucket ValueType;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const CommandId kCmdId = kGetAttribLocationBucket;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GLint Result;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static uint32 ComputeSize() {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<uint32>(sizeof(ValueType));  // NOLINT
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetHeader() {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header.SetCmd<ValueType>();
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GLuint _program, uint32 _name_bucket_id,
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset) {
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetHeader();
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    program = _program;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_bucket_id = _name_bucket_id;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_id = _location_shm_id;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_offset = _location_shm_offset;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void* Set(
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* cmd, GLuint _program, uint32 _name_bucket_id,
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset) {
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<ValueType*>(
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cmd)->Init(
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _program, _name_bucket_id, _location_shm_id,
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _location_shm_offset);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NextCmdAddress<ValueType>(cmd);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandHeader header;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 program;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_bucket_id;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_id;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_offset;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(GetAttribLocationBucket) == 20,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               Sizeof_GetAttribLocationBucket_is_not_24);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocationBucket, header) == 0,
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocationBucket_header_not_0);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocationBucket, program) == 4,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocationBucket_program_not_4);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocationBucket, name_bucket_id) == 8,
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocationBucket_name_bucket_id_not_8);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocationBucket, location_shm_id) == 12,
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocationBucket_location_shm_id_not_12);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetAttribLocationBucket, location_shm_offset) == 16,
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetAttribLocationBucket_location_shm_offset_not_16);
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GetUniformLocation {
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GetUniformLocation ValueType;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const CommandId kCmdId = kGetUniformLocation;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GLint Result;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static uint32 ComputeSize() {
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<uint32>(sizeof(ValueType));  // NOLINT
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetHeader() {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header.SetCmd<ValueType>();
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset,
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _data_size) {
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetHeader();
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    program = _program;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_shm_id = _name_shm_id;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_shm_offset = _name_shm_offset;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_id = _location_shm_id;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_offset = _location_shm_offset;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data_size = _data_size;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void* Set(
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* cmd, GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset,
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _data_size) {
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<ValueType*>(
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cmd)->Init(
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _program, _name_shm_id, _name_shm_offset, _location_shm_id,
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _location_shm_offset, _data_size);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NextCmdAddress<ValueType>(cmd);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandHeader header;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 program;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_shm_id;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_shm_offset;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_id;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_offset;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 data_size;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(GetUniformLocation) == 28,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               Sizeof_GetUniformLocation_is_not_28);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, header) == 0,
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_header_not_0);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, program) == 4,
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_program_not_4);
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, name_shm_id) == 8,
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_name_shm_id_not_8);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, name_shm_offset) == 12,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_name_shm_offset_not_12);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_id) == 16,
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_location_shm_id_not_16);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_offset) == 20,
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_location_shm_offset_not_20);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocation, data_size) == 24,
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocation_data_size_not_24);
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GetUniformLocationBucket {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GetUniformLocationBucket ValueType;
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const CommandId kCmdId = kGetUniformLocationBucket;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef GLint Result;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static uint32 ComputeSize() {
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<uint32>(sizeof(ValueType));  // NOLINT
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetHeader() {
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header.SetCmd<ValueType>();
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GLuint _program, uint32 _name_bucket_id,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset) {
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetHeader();
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    program = _program;
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    name_bucket_id = _name_bucket_id;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_id = _location_shm_id;
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    location_shm_offset = _location_shm_offset;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void* Set(
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* cmd, GLuint _program, uint32 _name_bucket_id,
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32 _location_shm_id, uint32 _location_shm_offset) {
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<ValueType*>(
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cmd)->Init(
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _program, _name_bucket_id, _location_shm_id,
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _location_shm_offset);
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NextCmdAddress<ValueType>(cmd);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandHeader header;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 program;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 name_bucket_id;
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_id;
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 location_shm_offset;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(sizeof(GetUniformLocationBucket) == 20,
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               Sizeof_GetUniformLocationBucket_is_not_24);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocationBucket, header) == 0,
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocationBucket_header_not_0);
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocationBucket, program) == 4,
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocationBucket_program_not_4);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocationBucket, name_bucket_id) == 8,
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocationBucket_name_bucket_id_not_8);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocationBucket, location_shm_id) == 12,
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocationBucket_location_shm_id_not_12);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(offsetof(GetUniformLocationBucket, location_shm_offset) == 16,
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               OffsetOf_GetUniformLocationBucket_location_shm_offset_not_16);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)struct GenMailboxCHROMIUM {
4234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef GenMailboxCHROMIUM ValueType;
4244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static const CommandId kCmdId = kGenMailboxCHROMIUM;
4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
4264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CommandHeader header;
4274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
4284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct InsertSyncPointCHROMIUM {
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef InsertSyncPointCHROMIUM ValueType;
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const CommandId kCmdId = kInsertSyncPointCHROMIUM;
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandHeader header;
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma pack(pop)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cmd
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_H_
443