gles2_cmd_format_test_autogen.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This file is auto-generated from
6// gpu/command_buffer/build_gles2_cmd_buffer.py
7// DO NOT EDIT!
8
9// This file contains unit tests for gles2 commmands
10// It is included by gles2_cmd_format_test.cc
11
12#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_
13#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_
14
15TEST_F(GLES2FormatTest, ActiveTexture) {
16  cmds::ActiveTexture& cmd = *GetBufferAs<cmds::ActiveTexture>();
17  void* next_cmd = cmd.Set(
18      &cmd,
19      static_cast<GLenum>(11));
20  EXPECT_EQ(static_cast<uint32>(cmds::ActiveTexture::kCmdId),
21            cmd.header.command);
22  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
23  EXPECT_EQ(static_cast<GLenum>(11), cmd.texture);
24  CheckBytesWrittenMatchesExpectedSize(
25      next_cmd, sizeof(cmd));
26}
27
28TEST_F(GLES2FormatTest, AttachShader) {
29  cmds::AttachShader& cmd = *GetBufferAs<cmds::AttachShader>();
30  void* next_cmd = cmd.Set(
31      &cmd,
32      static_cast<GLuint>(11),
33      static_cast<GLuint>(12));
34  EXPECT_EQ(static_cast<uint32>(cmds::AttachShader::kCmdId),
35            cmd.header.command);
36  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
37  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
38  EXPECT_EQ(static_cast<GLuint>(12), cmd.shader);
39  CheckBytesWrittenMatchesExpectedSize(
40      next_cmd, sizeof(cmd));
41}
42
43TEST_F(GLES2FormatTest, BindAttribLocation) {
44  cmds::BindAttribLocation& cmd = *GetBufferAs<cmds::BindAttribLocation>();
45  void* next_cmd = cmd.Set(
46      &cmd,
47      static_cast<GLuint>(11),
48      static_cast<GLuint>(12),
49      static_cast<uint32>(13),
50      static_cast<uint32>(14),
51      static_cast<uint32>(15));
52  EXPECT_EQ(static_cast<uint32>(cmds::BindAttribLocation::kCmdId),
53            cmd.header.command);
54  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
55  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
56  EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
57  EXPECT_EQ(static_cast<uint32>(13), cmd.name_shm_id);
58  EXPECT_EQ(static_cast<uint32>(14), cmd.name_shm_offset);
59  EXPECT_EQ(static_cast<uint32>(15), cmd.data_size);
60  CheckBytesWrittenMatchesExpectedSize(
61      next_cmd, sizeof(cmd));
62}
63
64
65TEST_F(GLES2FormatTest, BindAttribLocationImmediate) {
66  cmds::BindAttribLocationImmediate& cmd =
67      *GetBufferAs<cmds::BindAttribLocationImmediate>();
68  static const char* const test_str = "test string";
69  void* next_cmd = cmd.Set(
70      &cmd,
71      static_cast<GLuint>(11),
72      static_cast<GLuint>(12),
73      test_str,
74      strlen(test_str));
75  EXPECT_EQ(static_cast<uint32>(cmds::BindAttribLocationImmediate::kCmdId),
76            cmd.header.command);
77  EXPECT_EQ(sizeof(cmd) +
78            RoundSizeToMultipleOfEntries(strlen(test_str)),
79            cmd.header.size * 4u);
80  EXPECT_EQ(static_cast<char*>(next_cmd),
81            reinterpret_cast<char*>(&cmd) + sizeof(cmd) +
82                RoundSizeToMultipleOfEntries(strlen(test_str)));
83  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
84  EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
85  EXPECT_EQ(static_cast<uint32>(strlen(test_str)), cmd.data_size);
86  EXPECT_EQ(0, memcmp(test_str, ImmediateDataAddress(&cmd), strlen(test_str)));
87  CheckBytesWritten(
88      next_cmd,
89      sizeof(cmd) + RoundSizeToMultipleOfEntries(strlen(test_str)),
90      sizeof(cmd) + strlen(test_str));
91}
92
93TEST_F(GLES2FormatTest, BindAttribLocationBucket) {
94  cmds::BindAttribLocationBucket& cmd =
95      *GetBufferAs<cmds::BindAttribLocationBucket>();
96  void* next_cmd = cmd.Set(
97      &cmd,
98      static_cast<GLuint>(11),
99      static_cast<GLuint>(12),
100      static_cast<uint32>(13));
101  EXPECT_EQ(static_cast<uint32>(cmds::BindAttribLocationBucket::kCmdId),
102            cmd.header.command);
103  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
104  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
105  EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
106  EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
107  CheckBytesWrittenMatchesExpectedSize(
108      next_cmd, sizeof(cmd));
109}
110
111TEST_F(GLES2FormatTest, BindBuffer) {
112  cmds::BindBuffer& cmd = *GetBufferAs<cmds::BindBuffer>();
113  void* next_cmd = cmd.Set(
114      &cmd,
115      static_cast<GLenum>(11),
116      static_cast<GLuint>(12));
117  EXPECT_EQ(static_cast<uint32>(cmds::BindBuffer::kCmdId),
118            cmd.header.command);
119  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
120  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
121  EXPECT_EQ(static_cast<GLuint>(12), cmd.buffer);
122  CheckBytesWrittenMatchesExpectedSize(
123      next_cmd, sizeof(cmd));
124}
125
126TEST_F(GLES2FormatTest, BindFramebuffer) {
127  cmds::BindFramebuffer& cmd = *GetBufferAs<cmds::BindFramebuffer>();
128  void* next_cmd = cmd.Set(
129      &cmd,
130      static_cast<GLenum>(11),
131      static_cast<GLuint>(12));
132  EXPECT_EQ(static_cast<uint32>(cmds::BindFramebuffer::kCmdId),
133            cmd.header.command);
134  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
135  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
136  EXPECT_EQ(static_cast<GLuint>(12), cmd.framebuffer);
137  CheckBytesWrittenMatchesExpectedSize(
138      next_cmd, sizeof(cmd));
139}
140
141TEST_F(GLES2FormatTest, BindRenderbuffer) {
142  cmds::BindRenderbuffer& cmd = *GetBufferAs<cmds::BindRenderbuffer>();
143  void* next_cmd = cmd.Set(
144      &cmd,
145      static_cast<GLenum>(11),
146      static_cast<GLuint>(12));
147  EXPECT_EQ(static_cast<uint32>(cmds::BindRenderbuffer::kCmdId),
148            cmd.header.command);
149  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
150  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
151  EXPECT_EQ(static_cast<GLuint>(12), cmd.renderbuffer);
152  CheckBytesWrittenMatchesExpectedSize(
153      next_cmd, sizeof(cmd));
154}
155
156TEST_F(GLES2FormatTest, BindTexture) {
157  cmds::BindTexture& cmd = *GetBufferAs<cmds::BindTexture>();
158  void* next_cmd = cmd.Set(
159      &cmd,
160      static_cast<GLenum>(11),
161      static_cast<GLuint>(12));
162  EXPECT_EQ(static_cast<uint32>(cmds::BindTexture::kCmdId),
163            cmd.header.command);
164  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
165  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
166  EXPECT_EQ(static_cast<GLuint>(12), cmd.texture);
167  CheckBytesWrittenMatchesExpectedSize(
168      next_cmd, sizeof(cmd));
169}
170
171TEST_F(GLES2FormatTest, BlendColor) {
172  cmds::BlendColor& cmd = *GetBufferAs<cmds::BlendColor>();
173  void* next_cmd = cmd.Set(
174      &cmd,
175      static_cast<GLclampf>(11),
176      static_cast<GLclampf>(12),
177      static_cast<GLclampf>(13),
178      static_cast<GLclampf>(14));
179  EXPECT_EQ(static_cast<uint32>(cmds::BlendColor::kCmdId),
180            cmd.header.command);
181  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
182  EXPECT_EQ(static_cast<GLclampf>(11), cmd.red);
183  EXPECT_EQ(static_cast<GLclampf>(12), cmd.green);
184  EXPECT_EQ(static_cast<GLclampf>(13), cmd.blue);
185  EXPECT_EQ(static_cast<GLclampf>(14), cmd.alpha);
186  CheckBytesWrittenMatchesExpectedSize(
187      next_cmd, sizeof(cmd));
188}
189
190TEST_F(GLES2FormatTest, BlendEquation) {
191  cmds::BlendEquation& cmd = *GetBufferAs<cmds::BlendEquation>();
192  void* next_cmd = cmd.Set(
193      &cmd,
194      static_cast<GLenum>(11));
195  EXPECT_EQ(static_cast<uint32>(cmds::BlendEquation::kCmdId),
196            cmd.header.command);
197  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
198  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
199  CheckBytesWrittenMatchesExpectedSize(
200      next_cmd, sizeof(cmd));
201}
202
203TEST_F(GLES2FormatTest, BlendEquationSeparate) {
204  cmds::BlendEquationSeparate& cmd =
205      *GetBufferAs<cmds::BlendEquationSeparate>();
206  void* next_cmd = cmd.Set(
207      &cmd,
208      static_cast<GLenum>(11),
209      static_cast<GLenum>(12));
210  EXPECT_EQ(static_cast<uint32>(cmds::BlendEquationSeparate::kCmdId),
211            cmd.header.command);
212  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
213  EXPECT_EQ(static_cast<GLenum>(11), cmd.modeRGB);
214  EXPECT_EQ(static_cast<GLenum>(12), cmd.modeAlpha);
215  CheckBytesWrittenMatchesExpectedSize(
216      next_cmd, sizeof(cmd));
217}
218
219TEST_F(GLES2FormatTest, BlendFunc) {
220  cmds::BlendFunc& cmd = *GetBufferAs<cmds::BlendFunc>();
221  void* next_cmd = cmd.Set(
222      &cmd,
223      static_cast<GLenum>(11),
224      static_cast<GLenum>(12));
225  EXPECT_EQ(static_cast<uint32>(cmds::BlendFunc::kCmdId),
226            cmd.header.command);
227  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
228  EXPECT_EQ(static_cast<GLenum>(11), cmd.sfactor);
229  EXPECT_EQ(static_cast<GLenum>(12), cmd.dfactor);
230  CheckBytesWrittenMatchesExpectedSize(
231      next_cmd, sizeof(cmd));
232}
233
234TEST_F(GLES2FormatTest, BlendFuncSeparate) {
235  cmds::BlendFuncSeparate& cmd = *GetBufferAs<cmds::BlendFuncSeparate>();
236  void* next_cmd = cmd.Set(
237      &cmd,
238      static_cast<GLenum>(11),
239      static_cast<GLenum>(12),
240      static_cast<GLenum>(13),
241      static_cast<GLenum>(14));
242  EXPECT_EQ(static_cast<uint32>(cmds::BlendFuncSeparate::kCmdId),
243            cmd.header.command);
244  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
245  EXPECT_EQ(static_cast<GLenum>(11), cmd.srcRGB);
246  EXPECT_EQ(static_cast<GLenum>(12), cmd.dstRGB);
247  EXPECT_EQ(static_cast<GLenum>(13), cmd.srcAlpha);
248  EXPECT_EQ(static_cast<GLenum>(14), cmd.dstAlpha);
249  CheckBytesWrittenMatchesExpectedSize(
250      next_cmd, sizeof(cmd));
251}
252
253TEST_F(GLES2FormatTest, BufferData) {
254  cmds::BufferData& cmd = *GetBufferAs<cmds::BufferData>();
255  void* next_cmd = cmd.Set(
256      &cmd,
257      static_cast<GLenum>(11),
258      static_cast<GLsizeiptr>(12),
259      static_cast<uint32>(13),
260      static_cast<uint32>(14),
261      static_cast<GLenum>(15));
262  EXPECT_EQ(static_cast<uint32>(cmds::BufferData::kCmdId),
263            cmd.header.command);
264  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
265  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
266  EXPECT_EQ(static_cast<GLsizeiptr>(12), cmd.size);
267  EXPECT_EQ(static_cast<uint32>(13), cmd.data_shm_id);
268  EXPECT_EQ(static_cast<uint32>(14), cmd.data_shm_offset);
269  EXPECT_EQ(static_cast<GLenum>(15), cmd.usage);
270  CheckBytesWrittenMatchesExpectedSize(
271      next_cmd, sizeof(cmd));
272}
273
274TEST_F(GLES2FormatTest, BufferSubData) {
275  cmds::BufferSubData& cmd = *GetBufferAs<cmds::BufferSubData>();
276  void* next_cmd = cmd.Set(
277      &cmd,
278      static_cast<GLenum>(11),
279      static_cast<GLintptr>(12),
280      static_cast<GLsizeiptr>(13),
281      static_cast<uint32>(14),
282      static_cast<uint32>(15));
283  EXPECT_EQ(static_cast<uint32>(cmds::BufferSubData::kCmdId),
284            cmd.header.command);
285  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
286  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
287  EXPECT_EQ(static_cast<GLintptr>(12), cmd.offset);
288  EXPECT_EQ(static_cast<GLsizeiptr>(13), cmd.size);
289  EXPECT_EQ(static_cast<uint32>(14), cmd.data_shm_id);
290  EXPECT_EQ(static_cast<uint32>(15), cmd.data_shm_offset);
291  CheckBytesWrittenMatchesExpectedSize(
292      next_cmd, sizeof(cmd));
293}
294
295// TODO(gman): Implement test for BufferSubDataImmediate
296TEST_F(GLES2FormatTest, CheckFramebufferStatus) {
297  cmds::CheckFramebufferStatus& cmd =
298      *GetBufferAs<cmds::CheckFramebufferStatus>();
299  void* next_cmd = cmd.Set(
300      &cmd,
301      static_cast<GLenum>(11),
302      static_cast<uint32>(12),
303      static_cast<uint32>(13));
304  EXPECT_EQ(static_cast<uint32>(cmds::CheckFramebufferStatus::kCmdId),
305            cmd.header.command);
306  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
307  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
308  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
309  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
310  CheckBytesWrittenMatchesExpectedSize(
311      next_cmd, sizeof(cmd));
312}
313
314TEST_F(GLES2FormatTest, Clear) {
315  cmds::Clear& cmd = *GetBufferAs<cmds::Clear>();
316  void* next_cmd = cmd.Set(
317      &cmd,
318      static_cast<GLbitfield>(11));
319  EXPECT_EQ(static_cast<uint32>(cmds::Clear::kCmdId),
320            cmd.header.command);
321  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
322  EXPECT_EQ(static_cast<GLbitfield>(11), cmd.mask);
323  CheckBytesWrittenMatchesExpectedSize(
324      next_cmd, sizeof(cmd));
325}
326
327TEST_F(GLES2FormatTest, ClearColor) {
328  cmds::ClearColor& cmd = *GetBufferAs<cmds::ClearColor>();
329  void* next_cmd = cmd.Set(
330      &cmd,
331      static_cast<GLclampf>(11),
332      static_cast<GLclampf>(12),
333      static_cast<GLclampf>(13),
334      static_cast<GLclampf>(14));
335  EXPECT_EQ(static_cast<uint32>(cmds::ClearColor::kCmdId),
336            cmd.header.command);
337  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
338  EXPECT_EQ(static_cast<GLclampf>(11), cmd.red);
339  EXPECT_EQ(static_cast<GLclampf>(12), cmd.green);
340  EXPECT_EQ(static_cast<GLclampf>(13), cmd.blue);
341  EXPECT_EQ(static_cast<GLclampf>(14), cmd.alpha);
342  CheckBytesWrittenMatchesExpectedSize(
343      next_cmd, sizeof(cmd));
344}
345
346TEST_F(GLES2FormatTest, ClearDepthf) {
347  cmds::ClearDepthf& cmd = *GetBufferAs<cmds::ClearDepthf>();
348  void* next_cmd = cmd.Set(
349      &cmd,
350      static_cast<GLclampf>(11));
351  EXPECT_EQ(static_cast<uint32>(cmds::ClearDepthf::kCmdId),
352            cmd.header.command);
353  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
354  EXPECT_EQ(static_cast<GLclampf>(11), cmd.depth);
355  CheckBytesWrittenMatchesExpectedSize(
356      next_cmd, sizeof(cmd));
357}
358
359TEST_F(GLES2FormatTest, ClearStencil) {
360  cmds::ClearStencil& cmd = *GetBufferAs<cmds::ClearStencil>();
361  void* next_cmd = cmd.Set(
362      &cmd,
363      static_cast<GLint>(11));
364  EXPECT_EQ(static_cast<uint32>(cmds::ClearStencil::kCmdId),
365            cmd.header.command);
366  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
367  EXPECT_EQ(static_cast<GLint>(11), cmd.s);
368  CheckBytesWrittenMatchesExpectedSize(
369      next_cmd, sizeof(cmd));
370}
371
372TEST_F(GLES2FormatTest, ColorMask) {
373  cmds::ColorMask& cmd = *GetBufferAs<cmds::ColorMask>();
374  void* next_cmd = cmd.Set(
375      &cmd,
376      static_cast<GLboolean>(11),
377      static_cast<GLboolean>(12),
378      static_cast<GLboolean>(13),
379      static_cast<GLboolean>(14));
380  EXPECT_EQ(static_cast<uint32>(cmds::ColorMask::kCmdId),
381            cmd.header.command);
382  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
383  EXPECT_EQ(static_cast<GLboolean>(11), cmd.red);
384  EXPECT_EQ(static_cast<GLboolean>(12), cmd.green);
385  EXPECT_EQ(static_cast<GLboolean>(13), cmd.blue);
386  EXPECT_EQ(static_cast<GLboolean>(14), cmd.alpha);
387  CheckBytesWrittenMatchesExpectedSize(
388      next_cmd, sizeof(cmd));
389}
390
391TEST_F(GLES2FormatTest, CompileShader) {
392  cmds::CompileShader& cmd = *GetBufferAs<cmds::CompileShader>();
393  void* next_cmd = cmd.Set(
394      &cmd,
395      static_cast<GLuint>(11));
396  EXPECT_EQ(static_cast<uint32>(cmds::CompileShader::kCmdId),
397            cmd.header.command);
398  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
399  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
400  CheckBytesWrittenMatchesExpectedSize(
401      next_cmd, sizeof(cmd));
402}
403
404TEST_F(GLES2FormatTest, CompressedTexImage2D) {
405  cmds::CompressedTexImage2D& cmd = *GetBufferAs<cmds::CompressedTexImage2D>();
406  void* next_cmd = cmd.Set(
407      &cmd,
408      static_cast<GLenum>(11),
409      static_cast<GLint>(12),
410      static_cast<GLenum>(13),
411      static_cast<GLsizei>(14),
412      static_cast<GLsizei>(15),
413      static_cast<GLint>(16),
414      static_cast<GLsizei>(17),
415      static_cast<uint32>(18),
416      static_cast<uint32>(19));
417  EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexImage2D::kCmdId),
418            cmd.header.command);
419  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
420  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
421  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
422  EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
423  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
424  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
425  EXPECT_EQ(static_cast<GLint>(16), cmd.border);
426  EXPECT_EQ(static_cast<GLsizei>(17), cmd.imageSize);
427  EXPECT_EQ(static_cast<uint32>(18), cmd.data_shm_id);
428  EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_offset);
429  CheckBytesWrittenMatchesExpectedSize(
430      next_cmd, sizeof(cmd));
431}
432
433TEST_F(GLES2FormatTest, CompressedTexImage2DBucket) {
434  cmds::CompressedTexImage2DBucket& cmd =
435      *GetBufferAs<cmds::CompressedTexImage2DBucket>();
436  void* next_cmd = cmd.Set(
437      &cmd,
438      static_cast<GLenum>(11),
439      static_cast<GLint>(12),
440      static_cast<GLenum>(13),
441      static_cast<GLsizei>(14),
442      static_cast<GLsizei>(15),
443      static_cast<GLint>(16),
444      static_cast<GLuint>(17));
445  EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexImage2DBucket::kCmdId),
446            cmd.header.command);
447  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
448  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
449  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
450  EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
451  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
452  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
453  EXPECT_EQ(static_cast<GLint>(16), cmd.border);
454  EXPECT_EQ(static_cast<GLuint>(17), cmd.bucket_id);
455  CheckBytesWrittenMatchesExpectedSize(
456      next_cmd, sizeof(cmd));
457}
458
459TEST_F(GLES2FormatTest, CompressedTexSubImage2D) {
460  cmds::CompressedTexSubImage2D& cmd =
461      *GetBufferAs<cmds::CompressedTexSubImage2D>();
462  void* next_cmd = cmd.Set(
463      &cmd,
464      static_cast<GLenum>(11),
465      static_cast<GLint>(12),
466      static_cast<GLint>(13),
467      static_cast<GLint>(14),
468      static_cast<GLsizei>(15),
469      static_cast<GLsizei>(16),
470      static_cast<GLenum>(17),
471      static_cast<GLsizei>(18),
472      static_cast<uint32>(19),
473      static_cast<uint32>(20));
474  EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexSubImage2D::kCmdId),
475            cmd.header.command);
476  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
477  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
478  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
479  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
480  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
481  EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
482  EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
483  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
484  EXPECT_EQ(static_cast<GLsizei>(18), cmd.imageSize);
485  EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_id);
486  EXPECT_EQ(static_cast<uint32>(20), cmd.data_shm_offset);
487  CheckBytesWrittenMatchesExpectedSize(
488      next_cmd, sizeof(cmd));
489}
490
491// TODO(gman): Implement test for CompressedTexSubImage2DImmediate
492TEST_F(GLES2FormatTest, CompressedTexSubImage2DBucket) {
493  cmds::CompressedTexSubImage2DBucket& cmd =
494      *GetBufferAs<cmds::CompressedTexSubImage2DBucket>();
495  void* next_cmd = cmd.Set(
496      &cmd,
497      static_cast<GLenum>(11),
498      static_cast<GLint>(12),
499      static_cast<GLint>(13),
500      static_cast<GLint>(14),
501      static_cast<GLsizei>(15),
502      static_cast<GLsizei>(16),
503      static_cast<GLenum>(17),
504      static_cast<GLuint>(18));
505  EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexSubImage2DBucket::kCmdId),
506            cmd.header.command);
507  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
508  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
509  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
510  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
511  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
512  EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
513  EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
514  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
515  EXPECT_EQ(static_cast<GLuint>(18), cmd.bucket_id);
516  CheckBytesWrittenMatchesExpectedSize(
517      next_cmd, sizeof(cmd));
518}
519
520TEST_F(GLES2FormatTest, CopyTexImage2D) {
521  cmds::CopyTexImage2D& cmd = *GetBufferAs<cmds::CopyTexImage2D>();
522  void* next_cmd = cmd.Set(
523      &cmd,
524      static_cast<GLenum>(11),
525      static_cast<GLint>(12),
526      static_cast<GLenum>(13),
527      static_cast<GLint>(14),
528      static_cast<GLint>(15),
529      static_cast<GLsizei>(16),
530      static_cast<GLsizei>(17),
531      static_cast<GLint>(18));
532  EXPECT_EQ(static_cast<uint32>(cmds::CopyTexImage2D::kCmdId),
533            cmd.header.command);
534  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
535  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
536  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
537  EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
538  EXPECT_EQ(static_cast<GLint>(14), cmd.x);
539  EXPECT_EQ(static_cast<GLint>(15), cmd.y);
540  EXPECT_EQ(static_cast<GLsizei>(16), cmd.width);
541  EXPECT_EQ(static_cast<GLsizei>(17), cmd.height);
542  EXPECT_EQ(static_cast<GLint>(18), cmd.border);
543  CheckBytesWrittenMatchesExpectedSize(
544      next_cmd, sizeof(cmd));
545}
546
547TEST_F(GLES2FormatTest, CopyTexSubImage2D) {
548  cmds::CopyTexSubImage2D& cmd = *GetBufferAs<cmds::CopyTexSubImage2D>();
549  void* next_cmd = cmd.Set(
550      &cmd,
551      static_cast<GLenum>(11),
552      static_cast<GLint>(12),
553      static_cast<GLint>(13),
554      static_cast<GLint>(14),
555      static_cast<GLint>(15),
556      static_cast<GLint>(16),
557      static_cast<GLsizei>(17),
558      static_cast<GLsizei>(18));
559  EXPECT_EQ(static_cast<uint32>(cmds::CopyTexSubImage2D::kCmdId),
560            cmd.header.command);
561  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
562  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
563  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
564  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
565  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
566  EXPECT_EQ(static_cast<GLint>(15), cmd.x);
567  EXPECT_EQ(static_cast<GLint>(16), cmd.y);
568  EXPECT_EQ(static_cast<GLsizei>(17), cmd.width);
569  EXPECT_EQ(static_cast<GLsizei>(18), cmd.height);
570  CheckBytesWrittenMatchesExpectedSize(
571      next_cmd, sizeof(cmd));
572}
573
574TEST_F(GLES2FormatTest, CreateProgram) {
575  cmds::CreateProgram& cmd = *GetBufferAs<cmds::CreateProgram>();
576  void* next_cmd = cmd.Set(
577      &cmd,
578      static_cast<uint32>(11));
579  EXPECT_EQ(static_cast<uint32>(cmds::CreateProgram::kCmdId),
580            cmd.header.command);
581  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
582  EXPECT_EQ(static_cast<uint32>(11), cmd.client_id);
583  CheckBytesWrittenMatchesExpectedSize(
584      next_cmd, sizeof(cmd));
585}
586
587TEST_F(GLES2FormatTest, CreateShader) {
588  cmds::CreateShader& cmd = *GetBufferAs<cmds::CreateShader>();
589  void* next_cmd = cmd.Set(
590      &cmd,
591      static_cast<GLenum>(11),
592      static_cast<uint32>(12));
593  EXPECT_EQ(static_cast<uint32>(cmds::CreateShader::kCmdId),
594            cmd.header.command);
595  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
596  EXPECT_EQ(static_cast<GLenum>(11), cmd.type);
597  EXPECT_EQ(static_cast<uint32>(12), cmd.client_id);
598  CheckBytesWrittenMatchesExpectedSize(
599      next_cmd, sizeof(cmd));
600}
601
602TEST_F(GLES2FormatTest, CullFace) {
603  cmds::CullFace& cmd = *GetBufferAs<cmds::CullFace>();
604  void* next_cmd = cmd.Set(
605      &cmd,
606      static_cast<GLenum>(11));
607  EXPECT_EQ(static_cast<uint32>(cmds::CullFace::kCmdId),
608            cmd.header.command);
609  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
610  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
611  CheckBytesWrittenMatchesExpectedSize(
612      next_cmd, sizeof(cmd));
613}
614
615TEST_F(GLES2FormatTest, DeleteBuffers) {
616  cmds::DeleteBuffers& cmd = *GetBufferAs<cmds::DeleteBuffers>();
617  void* next_cmd = cmd.Set(
618      &cmd,
619      static_cast<GLsizei>(11),
620      static_cast<uint32>(12),
621      static_cast<uint32>(13));
622  EXPECT_EQ(static_cast<uint32>(cmds::DeleteBuffers::kCmdId),
623            cmd.header.command);
624  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
625  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
626  EXPECT_EQ(static_cast<uint32>(12), cmd.buffers_shm_id);
627  EXPECT_EQ(static_cast<uint32>(13), cmd.buffers_shm_offset);
628  CheckBytesWrittenMatchesExpectedSize(
629      next_cmd, sizeof(cmd));
630}
631
632TEST_F(GLES2FormatTest, DeleteBuffersImmediate) {
633  static GLuint ids[] = { 12, 23, 34, };
634  cmds::DeleteBuffersImmediate& cmd =
635      *GetBufferAs<cmds::DeleteBuffersImmediate>();
636  void* next_cmd = cmd.Set(
637      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
638  EXPECT_EQ(static_cast<uint32>(cmds::DeleteBuffersImmediate::kCmdId),
639            cmd.header.command);
640  EXPECT_EQ(sizeof(cmd) +
641            RoundSizeToMultipleOfEntries(cmd.n * 4u),
642            cmd.header.size * 4u);
643  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
644  CheckBytesWrittenMatchesExpectedSize(
645      next_cmd, sizeof(cmd) +
646      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
647  // TODO(gman): Check that ids were inserted;
648}
649
650TEST_F(GLES2FormatTest, DeleteFramebuffers) {
651  cmds::DeleteFramebuffers& cmd = *GetBufferAs<cmds::DeleteFramebuffers>();
652  void* next_cmd = cmd.Set(
653      &cmd,
654      static_cast<GLsizei>(11),
655      static_cast<uint32>(12),
656      static_cast<uint32>(13));
657  EXPECT_EQ(static_cast<uint32>(cmds::DeleteFramebuffers::kCmdId),
658            cmd.header.command);
659  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
660  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
661  EXPECT_EQ(static_cast<uint32>(12), cmd.framebuffers_shm_id);
662  EXPECT_EQ(static_cast<uint32>(13), cmd.framebuffers_shm_offset);
663  CheckBytesWrittenMatchesExpectedSize(
664      next_cmd, sizeof(cmd));
665}
666
667TEST_F(GLES2FormatTest, DeleteFramebuffersImmediate) {
668  static GLuint ids[] = { 12, 23, 34, };
669  cmds::DeleteFramebuffersImmediate& cmd =
670      *GetBufferAs<cmds::DeleteFramebuffersImmediate>();
671  void* next_cmd = cmd.Set(
672      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
673  EXPECT_EQ(static_cast<uint32>(cmds::DeleteFramebuffersImmediate::kCmdId),
674            cmd.header.command);
675  EXPECT_EQ(sizeof(cmd) +
676            RoundSizeToMultipleOfEntries(cmd.n * 4u),
677            cmd.header.size * 4u);
678  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
679  CheckBytesWrittenMatchesExpectedSize(
680      next_cmd, sizeof(cmd) +
681      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
682  // TODO(gman): Check that ids were inserted;
683}
684
685TEST_F(GLES2FormatTest, DeleteProgram) {
686  cmds::DeleteProgram& cmd = *GetBufferAs<cmds::DeleteProgram>();
687  void* next_cmd = cmd.Set(
688      &cmd,
689      static_cast<GLuint>(11));
690  EXPECT_EQ(static_cast<uint32>(cmds::DeleteProgram::kCmdId),
691            cmd.header.command);
692  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
693  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
694  CheckBytesWrittenMatchesExpectedSize(
695      next_cmd, sizeof(cmd));
696}
697
698TEST_F(GLES2FormatTest, DeleteRenderbuffers) {
699  cmds::DeleteRenderbuffers& cmd = *GetBufferAs<cmds::DeleteRenderbuffers>();
700  void* next_cmd = cmd.Set(
701      &cmd,
702      static_cast<GLsizei>(11),
703      static_cast<uint32>(12),
704      static_cast<uint32>(13));
705  EXPECT_EQ(static_cast<uint32>(cmds::DeleteRenderbuffers::kCmdId),
706            cmd.header.command);
707  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
708  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
709  EXPECT_EQ(static_cast<uint32>(12), cmd.renderbuffers_shm_id);
710  EXPECT_EQ(static_cast<uint32>(13), cmd.renderbuffers_shm_offset);
711  CheckBytesWrittenMatchesExpectedSize(
712      next_cmd, sizeof(cmd));
713}
714
715TEST_F(GLES2FormatTest, DeleteRenderbuffersImmediate) {
716  static GLuint ids[] = { 12, 23, 34, };
717  cmds::DeleteRenderbuffersImmediate& cmd =
718      *GetBufferAs<cmds::DeleteRenderbuffersImmediate>();
719  void* next_cmd = cmd.Set(
720      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
721  EXPECT_EQ(static_cast<uint32>(cmds::DeleteRenderbuffersImmediate::kCmdId),
722            cmd.header.command);
723  EXPECT_EQ(sizeof(cmd) +
724            RoundSizeToMultipleOfEntries(cmd.n * 4u),
725            cmd.header.size * 4u);
726  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
727  CheckBytesWrittenMatchesExpectedSize(
728      next_cmd, sizeof(cmd) +
729      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
730  // TODO(gman): Check that ids were inserted;
731}
732
733TEST_F(GLES2FormatTest, DeleteShader) {
734  cmds::DeleteShader& cmd = *GetBufferAs<cmds::DeleteShader>();
735  void* next_cmd = cmd.Set(
736      &cmd,
737      static_cast<GLuint>(11));
738  EXPECT_EQ(static_cast<uint32>(cmds::DeleteShader::kCmdId),
739            cmd.header.command);
740  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
741  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
742  CheckBytesWrittenMatchesExpectedSize(
743      next_cmd, sizeof(cmd));
744}
745
746TEST_F(GLES2FormatTest, DeleteTextures) {
747  cmds::DeleteTextures& cmd = *GetBufferAs<cmds::DeleteTextures>();
748  void* next_cmd = cmd.Set(
749      &cmd,
750      static_cast<GLsizei>(11),
751      static_cast<uint32>(12),
752      static_cast<uint32>(13));
753  EXPECT_EQ(static_cast<uint32>(cmds::DeleteTextures::kCmdId),
754            cmd.header.command);
755  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
756  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
757  EXPECT_EQ(static_cast<uint32>(12), cmd.textures_shm_id);
758  EXPECT_EQ(static_cast<uint32>(13), cmd.textures_shm_offset);
759  CheckBytesWrittenMatchesExpectedSize(
760      next_cmd, sizeof(cmd));
761}
762
763TEST_F(GLES2FormatTest, DeleteTexturesImmediate) {
764  static GLuint ids[] = { 12, 23, 34, };
765  cmds::DeleteTexturesImmediate& cmd =
766      *GetBufferAs<cmds::DeleteTexturesImmediate>();
767  void* next_cmd = cmd.Set(
768      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
769  EXPECT_EQ(static_cast<uint32>(cmds::DeleteTexturesImmediate::kCmdId),
770            cmd.header.command);
771  EXPECT_EQ(sizeof(cmd) +
772            RoundSizeToMultipleOfEntries(cmd.n * 4u),
773            cmd.header.size * 4u);
774  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
775  CheckBytesWrittenMatchesExpectedSize(
776      next_cmd, sizeof(cmd) +
777      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
778  // TODO(gman): Check that ids were inserted;
779}
780
781TEST_F(GLES2FormatTest, DepthFunc) {
782  cmds::DepthFunc& cmd = *GetBufferAs<cmds::DepthFunc>();
783  void* next_cmd = cmd.Set(
784      &cmd,
785      static_cast<GLenum>(11));
786  EXPECT_EQ(static_cast<uint32>(cmds::DepthFunc::kCmdId),
787            cmd.header.command);
788  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
789  EXPECT_EQ(static_cast<GLenum>(11), cmd.func);
790  CheckBytesWrittenMatchesExpectedSize(
791      next_cmd, sizeof(cmd));
792}
793
794TEST_F(GLES2FormatTest, DepthMask) {
795  cmds::DepthMask& cmd = *GetBufferAs<cmds::DepthMask>();
796  void* next_cmd = cmd.Set(
797      &cmd,
798      static_cast<GLboolean>(11));
799  EXPECT_EQ(static_cast<uint32>(cmds::DepthMask::kCmdId),
800            cmd.header.command);
801  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
802  EXPECT_EQ(static_cast<GLboolean>(11), cmd.flag);
803  CheckBytesWrittenMatchesExpectedSize(
804      next_cmd, sizeof(cmd));
805}
806
807TEST_F(GLES2FormatTest, DepthRangef) {
808  cmds::DepthRangef& cmd = *GetBufferAs<cmds::DepthRangef>();
809  void* next_cmd = cmd.Set(
810      &cmd,
811      static_cast<GLclampf>(11),
812      static_cast<GLclampf>(12));
813  EXPECT_EQ(static_cast<uint32>(cmds::DepthRangef::kCmdId),
814            cmd.header.command);
815  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
816  EXPECT_EQ(static_cast<GLclampf>(11), cmd.zNear);
817  EXPECT_EQ(static_cast<GLclampf>(12), cmd.zFar);
818  CheckBytesWrittenMatchesExpectedSize(
819      next_cmd, sizeof(cmd));
820}
821
822TEST_F(GLES2FormatTest, DetachShader) {
823  cmds::DetachShader& cmd = *GetBufferAs<cmds::DetachShader>();
824  void* next_cmd = cmd.Set(
825      &cmd,
826      static_cast<GLuint>(11),
827      static_cast<GLuint>(12));
828  EXPECT_EQ(static_cast<uint32>(cmds::DetachShader::kCmdId),
829            cmd.header.command);
830  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
831  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
832  EXPECT_EQ(static_cast<GLuint>(12), cmd.shader);
833  CheckBytesWrittenMatchesExpectedSize(
834      next_cmd, sizeof(cmd));
835}
836
837TEST_F(GLES2FormatTest, Disable) {
838  cmds::Disable& cmd = *GetBufferAs<cmds::Disable>();
839  void* next_cmd = cmd.Set(
840      &cmd,
841      static_cast<GLenum>(11));
842  EXPECT_EQ(static_cast<uint32>(cmds::Disable::kCmdId),
843            cmd.header.command);
844  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
845  EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
846  CheckBytesWrittenMatchesExpectedSize(
847      next_cmd, sizeof(cmd));
848}
849
850TEST_F(GLES2FormatTest, DisableVertexAttribArray) {
851  cmds::DisableVertexAttribArray& cmd =
852      *GetBufferAs<cmds::DisableVertexAttribArray>();
853  void* next_cmd = cmd.Set(
854      &cmd,
855      static_cast<GLuint>(11));
856  EXPECT_EQ(static_cast<uint32>(cmds::DisableVertexAttribArray::kCmdId),
857            cmd.header.command);
858  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
859  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
860  CheckBytesWrittenMatchesExpectedSize(
861      next_cmd, sizeof(cmd));
862}
863
864TEST_F(GLES2FormatTest, DrawArrays) {
865  cmds::DrawArrays& cmd = *GetBufferAs<cmds::DrawArrays>();
866  void* next_cmd = cmd.Set(
867      &cmd,
868      static_cast<GLenum>(11),
869      static_cast<GLint>(12),
870      static_cast<GLsizei>(13));
871  EXPECT_EQ(static_cast<uint32>(cmds::DrawArrays::kCmdId),
872            cmd.header.command);
873  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
874  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
875  EXPECT_EQ(static_cast<GLint>(12), cmd.first);
876  EXPECT_EQ(static_cast<GLsizei>(13), cmd.count);
877  CheckBytesWrittenMatchesExpectedSize(
878      next_cmd, sizeof(cmd));
879}
880
881TEST_F(GLES2FormatTest, DrawElements) {
882  cmds::DrawElements& cmd = *GetBufferAs<cmds::DrawElements>();
883  void* next_cmd = cmd.Set(
884      &cmd,
885      static_cast<GLenum>(11),
886      static_cast<GLsizei>(12),
887      static_cast<GLenum>(13),
888      static_cast<GLuint>(14));
889  EXPECT_EQ(static_cast<uint32>(cmds::DrawElements::kCmdId),
890            cmd.header.command);
891  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
892  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
893  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
894  EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
895  EXPECT_EQ(static_cast<GLuint>(14), cmd.index_offset);
896  CheckBytesWrittenMatchesExpectedSize(
897      next_cmd, sizeof(cmd));
898}
899
900TEST_F(GLES2FormatTest, Enable) {
901  cmds::Enable& cmd = *GetBufferAs<cmds::Enable>();
902  void* next_cmd = cmd.Set(
903      &cmd,
904      static_cast<GLenum>(11));
905  EXPECT_EQ(static_cast<uint32>(cmds::Enable::kCmdId),
906            cmd.header.command);
907  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
908  EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
909  CheckBytesWrittenMatchesExpectedSize(
910      next_cmd, sizeof(cmd));
911}
912
913TEST_F(GLES2FormatTest, EnableVertexAttribArray) {
914  cmds::EnableVertexAttribArray& cmd =
915      *GetBufferAs<cmds::EnableVertexAttribArray>();
916  void* next_cmd = cmd.Set(
917      &cmd,
918      static_cast<GLuint>(11));
919  EXPECT_EQ(static_cast<uint32>(cmds::EnableVertexAttribArray::kCmdId),
920            cmd.header.command);
921  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
922  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
923  CheckBytesWrittenMatchesExpectedSize(
924      next_cmd, sizeof(cmd));
925}
926
927TEST_F(GLES2FormatTest, Finish) {
928  cmds::Finish& cmd = *GetBufferAs<cmds::Finish>();
929  void* next_cmd = cmd.Set(
930      &cmd);
931  EXPECT_EQ(static_cast<uint32>(cmds::Finish::kCmdId),
932            cmd.header.command);
933  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
934  CheckBytesWrittenMatchesExpectedSize(
935      next_cmd, sizeof(cmd));
936}
937
938TEST_F(GLES2FormatTest, Flush) {
939  cmds::Flush& cmd = *GetBufferAs<cmds::Flush>();
940  void* next_cmd = cmd.Set(
941      &cmd);
942  EXPECT_EQ(static_cast<uint32>(cmds::Flush::kCmdId),
943            cmd.header.command);
944  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
945  CheckBytesWrittenMatchesExpectedSize(
946      next_cmd, sizeof(cmd));
947}
948
949TEST_F(GLES2FormatTest, FramebufferRenderbuffer) {
950  cmds::FramebufferRenderbuffer& cmd =
951      *GetBufferAs<cmds::FramebufferRenderbuffer>();
952  void* next_cmd = cmd.Set(
953      &cmd,
954      static_cast<GLenum>(11),
955      static_cast<GLenum>(12),
956      static_cast<GLenum>(13),
957      static_cast<GLuint>(14));
958  EXPECT_EQ(static_cast<uint32>(cmds::FramebufferRenderbuffer::kCmdId),
959            cmd.header.command);
960  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
961  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
962  EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
963  EXPECT_EQ(static_cast<GLenum>(13), cmd.renderbuffertarget);
964  EXPECT_EQ(static_cast<GLuint>(14), cmd.renderbuffer);
965  CheckBytesWrittenMatchesExpectedSize(
966      next_cmd, sizeof(cmd));
967}
968
969TEST_F(GLES2FormatTest, FramebufferTexture2D) {
970  cmds::FramebufferTexture2D& cmd = *GetBufferAs<cmds::FramebufferTexture2D>();
971  void* next_cmd = cmd.Set(
972      &cmd,
973      static_cast<GLenum>(11),
974      static_cast<GLenum>(12),
975      static_cast<GLenum>(13),
976      static_cast<GLuint>(14),
977      static_cast<GLint>(15));
978  EXPECT_EQ(static_cast<uint32>(cmds::FramebufferTexture2D::kCmdId),
979            cmd.header.command);
980  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
981  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
982  EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
983  EXPECT_EQ(static_cast<GLenum>(13), cmd.textarget);
984  EXPECT_EQ(static_cast<GLuint>(14), cmd.texture);
985  EXPECT_EQ(static_cast<GLint>(15), cmd.level);
986  CheckBytesWrittenMatchesExpectedSize(
987      next_cmd, sizeof(cmd));
988}
989
990TEST_F(GLES2FormatTest, FrontFace) {
991  cmds::FrontFace& cmd = *GetBufferAs<cmds::FrontFace>();
992  void* next_cmd = cmd.Set(
993      &cmd,
994      static_cast<GLenum>(11));
995  EXPECT_EQ(static_cast<uint32>(cmds::FrontFace::kCmdId),
996            cmd.header.command);
997  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
998  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
999  CheckBytesWrittenMatchesExpectedSize(
1000      next_cmd, sizeof(cmd));
1001}
1002
1003TEST_F(GLES2FormatTest, GenBuffers) {
1004  cmds::GenBuffers& cmd = *GetBufferAs<cmds::GenBuffers>();
1005  void* next_cmd = cmd.Set(
1006      &cmd,
1007      static_cast<GLsizei>(11),
1008      static_cast<uint32>(12),
1009      static_cast<uint32>(13));
1010  EXPECT_EQ(static_cast<uint32>(cmds::GenBuffers::kCmdId),
1011            cmd.header.command);
1012  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1013  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
1014  EXPECT_EQ(static_cast<uint32>(12), cmd.buffers_shm_id);
1015  EXPECT_EQ(static_cast<uint32>(13), cmd.buffers_shm_offset);
1016  CheckBytesWrittenMatchesExpectedSize(
1017      next_cmd, sizeof(cmd));
1018}
1019
1020TEST_F(GLES2FormatTest, GenBuffersImmediate) {
1021  static GLuint ids[] = { 12, 23, 34, };
1022  cmds::GenBuffersImmediate& cmd = *GetBufferAs<cmds::GenBuffersImmediate>();
1023  void* next_cmd = cmd.Set(
1024      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
1025  EXPECT_EQ(static_cast<uint32>(cmds::GenBuffersImmediate::kCmdId),
1026            cmd.header.command);
1027  EXPECT_EQ(sizeof(cmd) +
1028            RoundSizeToMultipleOfEntries(cmd.n * 4u),
1029            cmd.header.size * 4u);
1030  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
1031  CheckBytesWrittenMatchesExpectedSize(
1032      next_cmd, sizeof(cmd) +
1033      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
1034  // TODO(gman): Check that ids were inserted;
1035}
1036
1037TEST_F(GLES2FormatTest, GenerateMipmap) {
1038  cmds::GenerateMipmap& cmd = *GetBufferAs<cmds::GenerateMipmap>();
1039  void* next_cmd = cmd.Set(
1040      &cmd,
1041      static_cast<GLenum>(11));
1042  EXPECT_EQ(static_cast<uint32>(cmds::GenerateMipmap::kCmdId),
1043            cmd.header.command);
1044  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1045  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1046  CheckBytesWrittenMatchesExpectedSize(
1047      next_cmd, sizeof(cmd));
1048}
1049
1050TEST_F(GLES2FormatTest, GenFramebuffers) {
1051  cmds::GenFramebuffers& cmd = *GetBufferAs<cmds::GenFramebuffers>();
1052  void* next_cmd = cmd.Set(
1053      &cmd,
1054      static_cast<GLsizei>(11),
1055      static_cast<uint32>(12),
1056      static_cast<uint32>(13));
1057  EXPECT_EQ(static_cast<uint32>(cmds::GenFramebuffers::kCmdId),
1058            cmd.header.command);
1059  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1060  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
1061  EXPECT_EQ(static_cast<uint32>(12), cmd.framebuffers_shm_id);
1062  EXPECT_EQ(static_cast<uint32>(13), cmd.framebuffers_shm_offset);
1063  CheckBytesWrittenMatchesExpectedSize(
1064      next_cmd, sizeof(cmd));
1065}
1066
1067TEST_F(GLES2FormatTest, GenFramebuffersImmediate) {
1068  static GLuint ids[] = { 12, 23, 34, };
1069  cmds::GenFramebuffersImmediate& cmd =
1070      *GetBufferAs<cmds::GenFramebuffersImmediate>();
1071  void* next_cmd = cmd.Set(
1072      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
1073  EXPECT_EQ(static_cast<uint32>(cmds::GenFramebuffersImmediate::kCmdId),
1074            cmd.header.command);
1075  EXPECT_EQ(sizeof(cmd) +
1076            RoundSizeToMultipleOfEntries(cmd.n * 4u),
1077            cmd.header.size * 4u);
1078  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
1079  CheckBytesWrittenMatchesExpectedSize(
1080      next_cmd, sizeof(cmd) +
1081      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
1082  // TODO(gman): Check that ids were inserted;
1083}
1084
1085TEST_F(GLES2FormatTest, GenRenderbuffers) {
1086  cmds::GenRenderbuffers& cmd = *GetBufferAs<cmds::GenRenderbuffers>();
1087  void* next_cmd = cmd.Set(
1088      &cmd,
1089      static_cast<GLsizei>(11),
1090      static_cast<uint32>(12),
1091      static_cast<uint32>(13));
1092  EXPECT_EQ(static_cast<uint32>(cmds::GenRenderbuffers::kCmdId),
1093            cmd.header.command);
1094  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1095  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
1096  EXPECT_EQ(static_cast<uint32>(12), cmd.renderbuffers_shm_id);
1097  EXPECT_EQ(static_cast<uint32>(13), cmd.renderbuffers_shm_offset);
1098  CheckBytesWrittenMatchesExpectedSize(
1099      next_cmd, sizeof(cmd));
1100}
1101
1102TEST_F(GLES2FormatTest, GenRenderbuffersImmediate) {
1103  static GLuint ids[] = { 12, 23, 34, };
1104  cmds::GenRenderbuffersImmediate& cmd =
1105      *GetBufferAs<cmds::GenRenderbuffersImmediate>();
1106  void* next_cmd = cmd.Set(
1107      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
1108  EXPECT_EQ(static_cast<uint32>(cmds::GenRenderbuffersImmediate::kCmdId),
1109            cmd.header.command);
1110  EXPECT_EQ(sizeof(cmd) +
1111            RoundSizeToMultipleOfEntries(cmd.n * 4u),
1112            cmd.header.size * 4u);
1113  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
1114  CheckBytesWrittenMatchesExpectedSize(
1115      next_cmd, sizeof(cmd) +
1116      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
1117  // TODO(gman): Check that ids were inserted;
1118}
1119
1120TEST_F(GLES2FormatTest, GenTextures) {
1121  cmds::GenTextures& cmd = *GetBufferAs<cmds::GenTextures>();
1122  void* next_cmd = cmd.Set(
1123      &cmd,
1124      static_cast<GLsizei>(11),
1125      static_cast<uint32>(12),
1126      static_cast<uint32>(13));
1127  EXPECT_EQ(static_cast<uint32>(cmds::GenTextures::kCmdId),
1128            cmd.header.command);
1129  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1130  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
1131  EXPECT_EQ(static_cast<uint32>(12), cmd.textures_shm_id);
1132  EXPECT_EQ(static_cast<uint32>(13), cmd.textures_shm_offset);
1133  CheckBytesWrittenMatchesExpectedSize(
1134      next_cmd, sizeof(cmd));
1135}
1136
1137TEST_F(GLES2FormatTest, GenTexturesImmediate) {
1138  static GLuint ids[] = { 12, 23, 34, };
1139  cmds::GenTexturesImmediate& cmd = *GetBufferAs<cmds::GenTexturesImmediate>();
1140  void* next_cmd = cmd.Set(
1141      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
1142  EXPECT_EQ(static_cast<uint32>(cmds::GenTexturesImmediate::kCmdId),
1143            cmd.header.command);
1144  EXPECT_EQ(sizeof(cmd) +
1145            RoundSizeToMultipleOfEntries(cmd.n * 4u),
1146            cmd.header.size * 4u);
1147  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
1148  CheckBytesWrittenMatchesExpectedSize(
1149      next_cmd, sizeof(cmd) +
1150      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
1151  // TODO(gman): Check that ids were inserted;
1152}
1153
1154TEST_F(GLES2FormatTest, GetActiveAttrib) {
1155  cmds::GetActiveAttrib& cmd = *GetBufferAs<cmds::GetActiveAttrib>();
1156  void* next_cmd = cmd.Set(
1157      &cmd,
1158      static_cast<GLuint>(11),
1159      static_cast<GLuint>(12),
1160      static_cast<uint32>(13),
1161      static_cast<uint32>(14),
1162      static_cast<uint32>(15));
1163  EXPECT_EQ(static_cast<uint32>(cmds::GetActiveAttrib::kCmdId),
1164            cmd.header.command);
1165  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1166  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1167  EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
1168  EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
1169  EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_id);
1170  EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_offset);
1171  CheckBytesWrittenMatchesExpectedSize(
1172      next_cmd, sizeof(cmd));
1173}
1174
1175TEST_F(GLES2FormatTest, GetActiveUniform) {
1176  cmds::GetActiveUniform& cmd = *GetBufferAs<cmds::GetActiveUniform>();
1177  void* next_cmd = cmd.Set(
1178      &cmd,
1179      static_cast<GLuint>(11),
1180      static_cast<GLuint>(12),
1181      static_cast<uint32>(13),
1182      static_cast<uint32>(14),
1183      static_cast<uint32>(15));
1184  EXPECT_EQ(static_cast<uint32>(cmds::GetActiveUniform::kCmdId),
1185            cmd.header.command);
1186  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1187  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1188  EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
1189  EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
1190  EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_id);
1191  EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_offset);
1192  CheckBytesWrittenMatchesExpectedSize(
1193      next_cmd, sizeof(cmd));
1194}
1195
1196TEST_F(GLES2FormatTest, GetAttachedShaders) {
1197  cmds::GetAttachedShaders& cmd = *GetBufferAs<cmds::GetAttachedShaders>();
1198  void* next_cmd = cmd.Set(
1199      &cmd,
1200      static_cast<GLuint>(11),
1201      static_cast<uint32>(12),
1202      static_cast<uint32>(13),
1203      static_cast<uint32>(14));
1204  EXPECT_EQ(static_cast<uint32>(cmds::GetAttachedShaders::kCmdId),
1205            cmd.header.command);
1206  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1207  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1208  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1209  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1210  EXPECT_EQ(static_cast<uint32>(14), cmd.result_size);
1211  CheckBytesWrittenMatchesExpectedSize(
1212      next_cmd, sizeof(cmd));
1213}
1214
1215// TODO(gman): Write test for GetAttribLocation
1216// TODO(gman): Write test for GetAttribLocationBucket
1217TEST_F(GLES2FormatTest, GetBooleanv) {
1218  cmds::GetBooleanv& cmd = *GetBufferAs<cmds::GetBooleanv>();
1219  void* next_cmd = cmd.Set(
1220      &cmd,
1221      static_cast<GLenum>(11),
1222      static_cast<uint32>(12),
1223      static_cast<uint32>(13));
1224  EXPECT_EQ(static_cast<uint32>(cmds::GetBooleanv::kCmdId),
1225            cmd.header.command);
1226  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1227  EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
1228  EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
1229  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
1230  CheckBytesWrittenMatchesExpectedSize(
1231      next_cmd, sizeof(cmd));
1232}
1233
1234TEST_F(GLES2FormatTest, GetBufferParameteriv) {
1235  cmds::GetBufferParameteriv& cmd = *GetBufferAs<cmds::GetBufferParameteriv>();
1236  void* next_cmd = cmd.Set(
1237      &cmd,
1238      static_cast<GLenum>(11),
1239      static_cast<GLenum>(12),
1240      static_cast<uint32>(13),
1241      static_cast<uint32>(14));
1242  EXPECT_EQ(static_cast<uint32>(cmds::GetBufferParameteriv::kCmdId),
1243            cmd.header.command);
1244  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1245  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1246  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1247  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1248  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1249  CheckBytesWrittenMatchesExpectedSize(
1250      next_cmd, sizeof(cmd));
1251}
1252
1253TEST_F(GLES2FormatTest, GetError) {
1254  cmds::GetError& cmd = *GetBufferAs<cmds::GetError>();
1255  void* next_cmd = cmd.Set(
1256      &cmd,
1257      static_cast<uint32>(11),
1258      static_cast<uint32>(12));
1259  EXPECT_EQ(static_cast<uint32>(cmds::GetError::kCmdId),
1260            cmd.header.command);
1261  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1262  EXPECT_EQ(static_cast<uint32>(11), cmd.result_shm_id);
1263  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_offset);
1264  CheckBytesWrittenMatchesExpectedSize(
1265      next_cmd, sizeof(cmd));
1266}
1267
1268TEST_F(GLES2FormatTest, GetFloatv) {
1269  cmds::GetFloatv& cmd = *GetBufferAs<cmds::GetFloatv>();
1270  void* next_cmd = cmd.Set(
1271      &cmd,
1272      static_cast<GLenum>(11),
1273      static_cast<uint32>(12),
1274      static_cast<uint32>(13));
1275  EXPECT_EQ(static_cast<uint32>(cmds::GetFloatv::kCmdId),
1276            cmd.header.command);
1277  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1278  EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
1279  EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
1280  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
1281  CheckBytesWrittenMatchesExpectedSize(
1282      next_cmd, sizeof(cmd));
1283}
1284
1285TEST_F(GLES2FormatTest, GetFramebufferAttachmentParameteriv) {
1286  cmds::GetFramebufferAttachmentParameteriv& cmd =
1287      *GetBufferAs<cmds::GetFramebufferAttachmentParameteriv>();
1288  void* next_cmd = cmd.Set(
1289      &cmd,
1290      static_cast<GLenum>(11),
1291      static_cast<GLenum>(12),
1292      static_cast<GLenum>(13),
1293      static_cast<uint32>(14),
1294      static_cast<uint32>(15));
1295  EXPECT_EQ(
1296      static_cast<uint32>(cmds::GetFramebufferAttachmentParameteriv::kCmdId),
1297            cmd.header.command);
1298  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1299  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1300  EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
1301  EXPECT_EQ(static_cast<GLenum>(13), cmd.pname);
1302  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_id);
1303  EXPECT_EQ(static_cast<uint32>(15), cmd.params_shm_offset);
1304  CheckBytesWrittenMatchesExpectedSize(
1305      next_cmd, sizeof(cmd));
1306}
1307
1308TEST_F(GLES2FormatTest, GetIntegerv) {
1309  cmds::GetIntegerv& cmd = *GetBufferAs<cmds::GetIntegerv>();
1310  void* next_cmd = cmd.Set(
1311      &cmd,
1312      static_cast<GLenum>(11),
1313      static_cast<uint32>(12),
1314      static_cast<uint32>(13));
1315  EXPECT_EQ(static_cast<uint32>(cmds::GetIntegerv::kCmdId),
1316            cmd.header.command);
1317  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1318  EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
1319  EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
1320  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
1321  CheckBytesWrittenMatchesExpectedSize(
1322      next_cmd, sizeof(cmd));
1323}
1324
1325TEST_F(GLES2FormatTest, GetProgramiv) {
1326  cmds::GetProgramiv& cmd = *GetBufferAs<cmds::GetProgramiv>();
1327  void* next_cmd = cmd.Set(
1328      &cmd,
1329      static_cast<GLuint>(11),
1330      static_cast<GLenum>(12),
1331      static_cast<uint32>(13),
1332      static_cast<uint32>(14));
1333  EXPECT_EQ(static_cast<uint32>(cmds::GetProgramiv::kCmdId),
1334            cmd.header.command);
1335  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1336  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1337  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1338  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1339  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1340  CheckBytesWrittenMatchesExpectedSize(
1341      next_cmd, sizeof(cmd));
1342}
1343
1344TEST_F(GLES2FormatTest, GetProgramInfoLog) {
1345  cmds::GetProgramInfoLog& cmd = *GetBufferAs<cmds::GetProgramInfoLog>();
1346  void* next_cmd = cmd.Set(
1347      &cmd,
1348      static_cast<GLuint>(11),
1349      static_cast<uint32>(12));
1350  EXPECT_EQ(static_cast<uint32>(cmds::GetProgramInfoLog::kCmdId),
1351            cmd.header.command);
1352  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1353  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1354  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
1355  CheckBytesWrittenMatchesExpectedSize(
1356      next_cmd, sizeof(cmd));
1357}
1358
1359TEST_F(GLES2FormatTest, GetRenderbufferParameteriv) {
1360  cmds::GetRenderbufferParameteriv& cmd =
1361      *GetBufferAs<cmds::GetRenderbufferParameteriv>();
1362  void* next_cmd = cmd.Set(
1363      &cmd,
1364      static_cast<GLenum>(11),
1365      static_cast<GLenum>(12),
1366      static_cast<uint32>(13),
1367      static_cast<uint32>(14));
1368  EXPECT_EQ(static_cast<uint32>(cmds::GetRenderbufferParameteriv::kCmdId),
1369            cmd.header.command);
1370  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1371  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1372  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1373  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1374  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1375  CheckBytesWrittenMatchesExpectedSize(
1376      next_cmd, sizeof(cmd));
1377}
1378
1379TEST_F(GLES2FormatTest, GetShaderiv) {
1380  cmds::GetShaderiv& cmd = *GetBufferAs<cmds::GetShaderiv>();
1381  void* next_cmd = cmd.Set(
1382      &cmd,
1383      static_cast<GLuint>(11),
1384      static_cast<GLenum>(12),
1385      static_cast<uint32>(13),
1386      static_cast<uint32>(14));
1387  EXPECT_EQ(static_cast<uint32>(cmds::GetShaderiv::kCmdId),
1388            cmd.header.command);
1389  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1390  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1391  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1392  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1393  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1394  CheckBytesWrittenMatchesExpectedSize(
1395      next_cmd, sizeof(cmd));
1396}
1397
1398TEST_F(GLES2FormatTest, GetShaderInfoLog) {
1399  cmds::GetShaderInfoLog& cmd = *GetBufferAs<cmds::GetShaderInfoLog>();
1400  void* next_cmd = cmd.Set(
1401      &cmd,
1402      static_cast<GLuint>(11),
1403      static_cast<uint32>(12));
1404  EXPECT_EQ(static_cast<uint32>(cmds::GetShaderInfoLog::kCmdId),
1405            cmd.header.command);
1406  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1407  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1408  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
1409  CheckBytesWrittenMatchesExpectedSize(
1410      next_cmd, sizeof(cmd));
1411}
1412
1413TEST_F(GLES2FormatTest, GetShaderPrecisionFormat) {
1414  cmds::GetShaderPrecisionFormat& cmd =
1415      *GetBufferAs<cmds::GetShaderPrecisionFormat>();
1416  void* next_cmd = cmd.Set(
1417      &cmd,
1418      static_cast<GLenum>(11),
1419      static_cast<GLenum>(12),
1420      static_cast<uint32>(13),
1421      static_cast<uint32>(14));
1422  EXPECT_EQ(static_cast<uint32>(cmds::GetShaderPrecisionFormat::kCmdId),
1423            cmd.header.command);
1424  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1425  EXPECT_EQ(static_cast<GLenum>(11), cmd.shadertype);
1426  EXPECT_EQ(static_cast<GLenum>(12), cmd.precisiontype);
1427  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_id);
1428  EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_offset);
1429  CheckBytesWrittenMatchesExpectedSize(
1430      next_cmd, sizeof(cmd));
1431}
1432
1433TEST_F(GLES2FormatTest, GetShaderSource) {
1434  cmds::GetShaderSource& cmd = *GetBufferAs<cmds::GetShaderSource>();
1435  void* next_cmd = cmd.Set(
1436      &cmd,
1437      static_cast<GLuint>(11),
1438      static_cast<uint32>(12));
1439  EXPECT_EQ(static_cast<uint32>(cmds::GetShaderSource::kCmdId),
1440            cmd.header.command);
1441  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1442  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1443  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
1444  CheckBytesWrittenMatchesExpectedSize(
1445      next_cmd, sizeof(cmd));
1446}
1447
1448TEST_F(GLES2FormatTest, GetString) {
1449  cmds::GetString& cmd = *GetBufferAs<cmds::GetString>();
1450  void* next_cmd = cmd.Set(
1451      &cmd,
1452      static_cast<GLenum>(11),
1453      static_cast<uint32>(12));
1454  EXPECT_EQ(static_cast<uint32>(cmds::GetString::kCmdId),
1455            cmd.header.command);
1456  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1457  EXPECT_EQ(static_cast<GLenum>(11), cmd.name);
1458  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
1459  CheckBytesWrittenMatchesExpectedSize(
1460      next_cmd, sizeof(cmd));
1461}
1462
1463TEST_F(GLES2FormatTest, GetTexParameterfv) {
1464  cmds::GetTexParameterfv& cmd = *GetBufferAs<cmds::GetTexParameterfv>();
1465  void* next_cmd = cmd.Set(
1466      &cmd,
1467      static_cast<GLenum>(11),
1468      static_cast<GLenum>(12),
1469      static_cast<uint32>(13),
1470      static_cast<uint32>(14));
1471  EXPECT_EQ(static_cast<uint32>(cmds::GetTexParameterfv::kCmdId),
1472            cmd.header.command);
1473  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1474  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1475  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1476  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1477  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1478  CheckBytesWrittenMatchesExpectedSize(
1479      next_cmd, sizeof(cmd));
1480}
1481
1482TEST_F(GLES2FormatTest, GetTexParameteriv) {
1483  cmds::GetTexParameteriv& cmd = *GetBufferAs<cmds::GetTexParameteriv>();
1484  void* next_cmd = cmd.Set(
1485      &cmd,
1486      static_cast<GLenum>(11),
1487      static_cast<GLenum>(12),
1488      static_cast<uint32>(13),
1489      static_cast<uint32>(14));
1490  EXPECT_EQ(static_cast<uint32>(cmds::GetTexParameteriv::kCmdId),
1491            cmd.header.command);
1492  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1493  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1494  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1495  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1496  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1497  CheckBytesWrittenMatchesExpectedSize(
1498      next_cmd, sizeof(cmd));
1499}
1500
1501TEST_F(GLES2FormatTest, GetUniformfv) {
1502  cmds::GetUniformfv& cmd = *GetBufferAs<cmds::GetUniformfv>();
1503  void* next_cmd = cmd.Set(
1504      &cmd,
1505      static_cast<GLuint>(11),
1506      static_cast<GLint>(12),
1507      static_cast<uint32>(13),
1508      static_cast<uint32>(14));
1509  EXPECT_EQ(static_cast<uint32>(cmds::GetUniformfv::kCmdId),
1510            cmd.header.command);
1511  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1512  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1513  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
1514  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1515  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1516  CheckBytesWrittenMatchesExpectedSize(
1517      next_cmd, sizeof(cmd));
1518}
1519
1520TEST_F(GLES2FormatTest, GetUniformiv) {
1521  cmds::GetUniformiv& cmd = *GetBufferAs<cmds::GetUniformiv>();
1522  void* next_cmd = cmd.Set(
1523      &cmd,
1524      static_cast<GLuint>(11),
1525      static_cast<GLint>(12),
1526      static_cast<uint32>(13),
1527      static_cast<uint32>(14));
1528  EXPECT_EQ(static_cast<uint32>(cmds::GetUniformiv::kCmdId),
1529            cmd.header.command);
1530  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1531  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1532  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
1533  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1534  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1535  CheckBytesWrittenMatchesExpectedSize(
1536      next_cmd, sizeof(cmd));
1537}
1538
1539// TODO(gman): Write test for GetUniformLocation
1540// TODO(gman): Write test for GetUniformLocationBucket
1541TEST_F(GLES2FormatTest, GetVertexAttribfv) {
1542  cmds::GetVertexAttribfv& cmd = *GetBufferAs<cmds::GetVertexAttribfv>();
1543  void* next_cmd = cmd.Set(
1544      &cmd,
1545      static_cast<GLuint>(11),
1546      static_cast<GLenum>(12),
1547      static_cast<uint32>(13),
1548      static_cast<uint32>(14));
1549  EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribfv::kCmdId),
1550            cmd.header.command);
1551  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1552  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
1553  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1554  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1555  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1556  CheckBytesWrittenMatchesExpectedSize(
1557      next_cmd, sizeof(cmd));
1558}
1559
1560TEST_F(GLES2FormatTest, GetVertexAttribiv) {
1561  cmds::GetVertexAttribiv& cmd = *GetBufferAs<cmds::GetVertexAttribiv>();
1562  void* next_cmd = cmd.Set(
1563      &cmd,
1564      static_cast<GLuint>(11),
1565      static_cast<GLenum>(12),
1566      static_cast<uint32>(13),
1567      static_cast<uint32>(14));
1568  EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribiv::kCmdId),
1569            cmd.header.command);
1570  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1571  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
1572  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1573  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
1574  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
1575  CheckBytesWrittenMatchesExpectedSize(
1576      next_cmd, sizeof(cmd));
1577}
1578
1579TEST_F(GLES2FormatTest, GetVertexAttribPointerv) {
1580  cmds::GetVertexAttribPointerv& cmd =
1581      *GetBufferAs<cmds::GetVertexAttribPointerv>();
1582  void* next_cmd = cmd.Set(
1583      &cmd,
1584      static_cast<GLuint>(11),
1585      static_cast<GLenum>(12),
1586      static_cast<uint32>(13),
1587      static_cast<uint32>(14));
1588  EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribPointerv::kCmdId),
1589            cmd.header.command);
1590  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1591  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
1592  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
1593  EXPECT_EQ(static_cast<uint32>(13), cmd.pointer_shm_id);
1594  EXPECT_EQ(static_cast<uint32>(14), cmd.pointer_shm_offset);
1595  CheckBytesWrittenMatchesExpectedSize(
1596      next_cmd, sizeof(cmd));
1597}
1598
1599TEST_F(GLES2FormatTest, Hint) {
1600  cmds::Hint& cmd = *GetBufferAs<cmds::Hint>();
1601  void* next_cmd = cmd.Set(
1602      &cmd,
1603      static_cast<GLenum>(11),
1604      static_cast<GLenum>(12));
1605  EXPECT_EQ(static_cast<uint32>(cmds::Hint::kCmdId),
1606            cmd.header.command);
1607  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1608  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1609  EXPECT_EQ(static_cast<GLenum>(12), cmd.mode);
1610  CheckBytesWrittenMatchesExpectedSize(
1611      next_cmd, sizeof(cmd));
1612}
1613
1614TEST_F(GLES2FormatTest, IsBuffer) {
1615  cmds::IsBuffer& cmd = *GetBufferAs<cmds::IsBuffer>();
1616  void* next_cmd = cmd.Set(
1617      &cmd,
1618      static_cast<GLuint>(11),
1619      static_cast<uint32>(12),
1620      static_cast<uint32>(13));
1621  EXPECT_EQ(static_cast<uint32>(cmds::IsBuffer::kCmdId),
1622            cmd.header.command);
1623  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1624  EXPECT_EQ(static_cast<GLuint>(11), cmd.buffer);
1625  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1626  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1627  CheckBytesWrittenMatchesExpectedSize(
1628      next_cmd, sizeof(cmd));
1629}
1630
1631TEST_F(GLES2FormatTest, IsEnabled) {
1632  cmds::IsEnabled& cmd = *GetBufferAs<cmds::IsEnabled>();
1633  void* next_cmd = cmd.Set(
1634      &cmd,
1635      static_cast<GLenum>(11),
1636      static_cast<uint32>(12),
1637      static_cast<uint32>(13));
1638  EXPECT_EQ(static_cast<uint32>(cmds::IsEnabled::kCmdId),
1639            cmd.header.command);
1640  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1641  EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
1642  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1643  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1644  CheckBytesWrittenMatchesExpectedSize(
1645      next_cmd, sizeof(cmd));
1646}
1647
1648TEST_F(GLES2FormatTest, IsFramebuffer) {
1649  cmds::IsFramebuffer& cmd = *GetBufferAs<cmds::IsFramebuffer>();
1650  void* next_cmd = cmd.Set(
1651      &cmd,
1652      static_cast<GLuint>(11),
1653      static_cast<uint32>(12),
1654      static_cast<uint32>(13));
1655  EXPECT_EQ(static_cast<uint32>(cmds::IsFramebuffer::kCmdId),
1656            cmd.header.command);
1657  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1658  EXPECT_EQ(static_cast<GLuint>(11), cmd.framebuffer);
1659  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1660  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1661  CheckBytesWrittenMatchesExpectedSize(
1662      next_cmd, sizeof(cmd));
1663}
1664
1665TEST_F(GLES2FormatTest, IsProgram) {
1666  cmds::IsProgram& cmd = *GetBufferAs<cmds::IsProgram>();
1667  void* next_cmd = cmd.Set(
1668      &cmd,
1669      static_cast<GLuint>(11),
1670      static_cast<uint32>(12),
1671      static_cast<uint32>(13));
1672  EXPECT_EQ(static_cast<uint32>(cmds::IsProgram::kCmdId),
1673            cmd.header.command);
1674  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1675  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1676  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1677  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1678  CheckBytesWrittenMatchesExpectedSize(
1679      next_cmd, sizeof(cmd));
1680}
1681
1682TEST_F(GLES2FormatTest, IsRenderbuffer) {
1683  cmds::IsRenderbuffer& cmd = *GetBufferAs<cmds::IsRenderbuffer>();
1684  void* next_cmd = cmd.Set(
1685      &cmd,
1686      static_cast<GLuint>(11),
1687      static_cast<uint32>(12),
1688      static_cast<uint32>(13));
1689  EXPECT_EQ(static_cast<uint32>(cmds::IsRenderbuffer::kCmdId),
1690            cmd.header.command);
1691  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1692  EXPECT_EQ(static_cast<GLuint>(11), cmd.renderbuffer);
1693  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1694  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1695  CheckBytesWrittenMatchesExpectedSize(
1696      next_cmd, sizeof(cmd));
1697}
1698
1699TEST_F(GLES2FormatTest, IsShader) {
1700  cmds::IsShader& cmd = *GetBufferAs<cmds::IsShader>();
1701  void* next_cmd = cmd.Set(
1702      &cmd,
1703      static_cast<GLuint>(11),
1704      static_cast<uint32>(12),
1705      static_cast<uint32>(13));
1706  EXPECT_EQ(static_cast<uint32>(cmds::IsShader::kCmdId),
1707            cmd.header.command);
1708  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1709  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1710  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1711  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1712  CheckBytesWrittenMatchesExpectedSize(
1713      next_cmd, sizeof(cmd));
1714}
1715
1716TEST_F(GLES2FormatTest, IsTexture) {
1717  cmds::IsTexture& cmd = *GetBufferAs<cmds::IsTexture>();
1718  void* next_cmd = cmd.Set(
1719      &cmd,
1720      static_cast<GLuint>(11),
1721      static_cast<uint32>(12),
1722      static_cast<uint32>(13));
1723  EXPECT_EQ(static_cast<uint32>(cmds::IsTexture::kCmdId),
1724            cmd.header.command);
1725  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1726  EXPECT_EQ(static_cast<GLuint>(11), cmd.texture);
1727  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
1728  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
1729  CheckBytesWrittenMatchesExpectedSize(
1730      next_cmd, sizeof(cmd));
1731}
1732
1733TEST_F(GLES2FormatTest, LineWidth) {
1734  cmds::LineWidth& cmd = *GetBufferAs<cmds::LineWidth>();
1735  void* next_cmd = cmd.Set(
1736      &cmd,
1737      static_cast<GLfloat>(11));
1738  EXPECT_EQ(static_cast<uint32>(cmds::LineWidth::kCmdId),
1739            cmd.header.command);
1740  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1741  EXPECT_EQ(static_cast<GLfloat>(11), cmd.width);
1742  CheckBytesWrittenMatchesExpectedSize(
1743      next_cmd, sizeof(cmd));
1744}
1745
1746TEST_F(GLES2FormatTest, LinkProgram) {
1747  cmds::LinkProgram& cmd = *GetBufferAs<cmds::LinkProgram>();
1748  void* next_cmd = cmd.Set(
1749      &cmd,
1750      static_cast<GLuint>(11));
1751  EXPECT_EQ(static_cast<uint32>(cmds::LinkProgram::kCmdId),
1752            cmd.header.command);
1753  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1754  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
1755  CheckBytesWrittenMatchesExpectedSize(
1756      next_cmd, sizeof(cmd));
1757}
1758
1759TEST_F(GLES2FormatTest, PixelStorei) {
1760  cmds::PixelStorei& cmd = *GetBufferAs<cmds::PixelStorei>();
1761  void* next_cmd = cmd.Set(
1762      &cmd,
1763      static_cast<GLenum>(11),
1764      static_cast<GLint>(12));
1765  EXPECT_EQ(static_cast<uint32>(cmds::PixelStorei::kCmdId),
1766            cmd.header.command);
1767  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1768  EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
1769  EXPECT_EQ(static_cast<GLint>(12), cmd.param);
1770  CheckBytesWrittenMatchesExpectedSize(
1771      next_cmd, sizeof(cmd));
1772}
1773
1774TEST_F(GLES2FormatTest, PolygonOffset) {
1775  cmds::PolygonOffset& cmd = *GetBufferAs<cmds::PolygonOffset>();
1776  void* next_cmd = cmd.Set(
1777      &cmd,
1778      static_cast<GLfloat>(11),
1779      static_cast<GLfloat>(12));
1780  EXPECT_EQ(static_cast<uint32>(cmds::PolygonOffset::kCmdId),
1781            cmd.header.command);
1782  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1783  EXPECT_EQ(static_cast<GLfloat>(11), cmd.factor);
1784  EXPECT_EQ(static_cast<GLfloat>(12), cmd.units);
1785  CheckBytesWrittenMatchesExpectedSize(
1786      next_cmd, sizeof(cmd));
1787}
1788
1789TEST_F(GLES2FormatTest, ReadPixels) {
1790  cmds::ReadPixels& cmd = *GetBufferAs<cmds::ReadPixels>();
1791  void* next_cmd = cmd.Set(
1792      &cmd,
1793      static_cast<GLint>(11),
1794      static_cast<GLint>(12),
1795      static_cast<GLsizei>(13),
1796      static_cast<GLsizei>(14),
1797      static_cast<GLenum>(15),
1798      static_cast<GLenum>(16),
1799      static_cast<uint32>(17),
1800      static_cast<uint32>(18),
1801      static_cast<uint32>(19),
1802      static_cast<uint32>(20),
1803      static_cast<GLboolean>(21));
1804  EXPECT_EQ(static_cast<uint32>(cmds::ReadPixels::kCmdId),
1805            cmd.header.command);
1806  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1807  EXPECT_EQ(static_cast<GLint>(11), cmd.x);
1808  EXPECT_EQ(static_cast<GLint>(12), cmd.y);
1809  EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
1810  EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
1811  EXPECT_EQ(static_cast<GLenum>(15), cmd.format);
1812  EXPECT_EQ(static_cast<GLenum>(16), cmd.type);
1813  EXPECT_EQ(static_cast<uint32>(17), cmd.pixels_shm_id);
1814  EXPECT_EQ(static_cast<uint32>(18), cmd.pixels_shm_offset);
1815  EXPECT_EQ(static_cast<uint32>(19), cmd.result_shm_id);
1816  EXPECT_EQ(static_cast<uint32>(20), cmd.result_shm_offset);
1817  EXPECT_EQ(static_cast<GLboolean>(21), cmd.async);
1818  CheckBytesWrittenMatchesExpectedSize(
1819      next_cmd, sizeof(cmd));
1820}
1821
1822TEST_F(GLES2FormatTest, ReleaseShaderCompiler) {
1823  cmds::ReleaseShaderCompiler& cmd =
1824      *GetBufferAs<cmds::ReleaseShaderCompiler>();
1825  void* next_cmd = cmd.Set(
1826      &cmd);
1827  EXPECT_EQ(static_cast<uint32>(cmds::ReleaseShaderCompiler::kCmdId),
1828            cmd.header.command);
1829  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1830  CheckBytesWrittenMatchesExpectedSize(
1831      next_cmd, sizeof(cmd));
1832}
1833
1834TEST_F(GLES2FormatTest, RenderbufferStorage) {
1835  cmds::RenderbufferStorage& cmd = *GetBufferAs<cmds::RenderbufferStorage>();
1836  void* next_cmd = cmd.Set(
1837      &cmd,
1838      static_cast<GLenum>(11),
1839      static_cast<GLenum>(12),
1840      static_cast<GLsizei>(13),
1841      static_cast<GLsizei>(14));
1842  EXPECT_EQ(static_cast<uint32>(cmds::RenderbufferStorage::kCmdId),
1843            cmd.header.command);
1844  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1845  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
1846  EXPECT_EQ(static_cast<GLenum>(12), cmd.internalformat);
1847  EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
1848  EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
1849  CheckBytesWrittenMatchesExpectedSize(
1850      next_cmd, sizeof(cmd));
1851}
1852
1853TEST_F(GLES2FormatTest, SampleCoverage) {
1854  cmds::SampleCoverage& cmd = *GetBufferAs<cmds::SampleCoverage>();
1855  void* next_cmd = cmd.Set(
1856      &cmd,
1857      static_cast<GLclampf>(11),
1858      static_cast<GLboolean>(12));
1859  EXPECT_EQ(static_cast<uint32>(cmds::SampleCoverage::kCmdId),
1860            cmd.header.command);
1861  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1862  EXPECT_EQ(static_cast<GLclampf>(11), cmd.value);
1863  EXPECT_EQ(static_cast<GLboolean>(12), cmd.invert);
1864  CheckBytesWrittenMatchesExpectedSize(
1865      next_cmd, sizeof(cmd));
1866}
1867
1868TEST_F(GLES2FormatTest, Scissor) {
1869  cmds::Scissor& cmd = *GetBufferAs<cmds::Scissor>();
1870  void* next_cmd = cmd.Set(
1871      &cmd,
1872      static_cast<GLint>(11),
1873      static_cast<GLint>(12),
1874      static_cast<GLsizei>(13),
1875      static_cast<GLsizei>(14));
1876  EXPECT_EQ(static_cast<uint32>(cmds::Scissor::kCmdId),
1877            cmd.header.command);
1878  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1879  EXPECT_EQ(static_cast<GLint>(11), cmd.x);
1880  EXPECT_EQ(static_cast<GLint>(12), cmd.y);
1881  EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
1882  EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
1883  CheckBytesWrittenMatchesExpectedSize(
1884      next_cmd, sizeof(cmd));
1885}
1886
1887TEST_F(GLES2FormatTest, ShaderBinary) {
1888  cmds::ShaderBinary& cmd = *GetBufferAs<cmds::ShaderBinary>();
1889  void* next_cmd = cmd.Set(
1890      &cmd,
1891      static_cast<GLsizei>(11),
1892      static_cast<uint32>(12),
1893      static_cast<uint32>(13),
1894      static_cast<GLenum>(14),
1895      static_cast<uint32>(15),
1896      static_cast<uint32>(16),
1897      static_cast<GLsizei>(17));
1898  EXPECT_EQ(static_cast<uint32>(cmds::ShaderBinary::kCmdId),
1899            cmd.header.command);
1900  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1901  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
1902  EXPECT_EQ(static_cast<uint32>(12), cmd.shaders_shm_id);
1903  EXPECT_EQ(static_cast<uint32>(13), cmd.shaders_shm_offset);
1904  EXPECT_EQ(static_cast<GLenum>(14), cmd.binaryformat);
1905  EXPECT_EQ(static_cast<uint32>(15), cmd.binary_shm_id);
1906  EXPECT_EQ(static_cast<uint32>(16), cmd.binary_shm_offset);
1907  EXPECT_EQ(static_cast<GLsizei>(17), cmd.length);
1908  CheckBytesWrittenMatchesExpectedSize(
1909      next_cmd, sizeof(cmd));
1910}
1911
1912TEST_F(GLES2FormatTest, ShaderSource) {
1913  cmds::ShaderSource& cmd = *GetBufferAs<cmds::ShaderSource>();
1914  void* next_cmd = cmd.Set(
1915      &cmd,
1916      static_cast<GLuint>(11),
1917      static_cast<uint32>(12),
1918      static_cast<uint32>(13),
1919      static_cast<uint32>(14));
1920  EXPECT_EQ(static_cast<uint32>(cmds::ShaderSource::kCmdId),
1921            cmd.header.command);
1922  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1923  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1924  EXPECT_EQ(static_cast<uint32>(12), cmd.data_shm_id);
1925  EXPECT_EQ(static_cast<uint32>(13), cmd.data_shm_offset);
1926  EXPECT_EQ(static_cast<uint32>(14), cmd.data_size);
1927  CheckBytesWrittenMatchesExpectedSize(
1928      next_cmd, sizeof(cmd));
1929}
1930
1931TEST_F(GLES2FormatTest, ShaderSourceBucket) {
1932  cmds::ShaderSourceBucket& cmd = *GetBufferAs<cmds::ShaderSourceBucket>();
1933  void* next_cmd = cmd.Set(
1934      &cmd,
1935      static_cast<GLuint>(11),
1936      static_cast<uint32>(12));
1937  EXPECT_EQ(static_cast<uint32>(cmds::ShaderSourceBucket::kCmdId),
1938            cmd.header.command);
1939  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1940  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
1941  EXPECT_EQ(static_cast<uint32>(12), cmd.data_bucket_id);
1942  CheckBytesWrittenMatchesExpectedSize(
1943      next_cmd, sizeof(cmd));
1944}
1945
1946TEST_F(GLES2FormatTest, StencilFunc) {
1947  cmds::StencilFunc& cmd = *GetBufferAs<cmds::StencilFunc>();
1948  void* next_cmd = cmd.Set(
1949      &cmd,
1950      static_cast<GLenum>(11),
1951      static_cast<GLint>(12),
1952      static_cast<GLuint>(13));
1953  EXPECT_EQ(static_cast<uint32>(cmds::StencilFunc::kCmdId),
1954            cmd.header.command);
1955  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1956  EXPECT_EQ(static_cast<GLenum>(11), cmd.func);
1957  EXPECT_EQ(static_cast<GLint>(12), cmd.ref);
1958  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
1959  CheckBytesWrittenMatchesExpectedSize(
1960      next_cmd, sizeof(cmd));
1961}
1962
1963TEST_F(GLES2FormatTest, StencilFuncSeparate) {
1964  cmds::StencilFuncSeparate& cmd = *GetBufferAs<cmds::StencilFuncSeparate>();
1965  void* next_cmd = cmd.Set(
1966      &cmd,
1967      static_cast<GLenum>(11),
1968      static_cast<GLenum>(12),
1969      static_cast<GLint>(13),
1970      static_cast<GLuint>(14));
1971  EXPECT_EQ(static_cast<uint32>(cmds::StencilFuncSeparate::kCmdId),
1972            cmd.header.command);
1973  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1974  EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
1975  EXPECT_EQ(static_cast<GLenum>(12), cmd.func);
1976  EXPECT_EQ(static_cast<GLint>(13), cmd.ref);
1977  EXPECT_EQ(static_cast<GLuint>(14), cmd.mask);
1978  CheckBytesWrittenMatchesExpectedSize(
1979      next_cmd, sizeof(cmd));
1980}
1981
1982TEST_F(GLES2FormatTest, StencilMask) {
1983  cmds::StencilMask& cmd = *GetBufferAs<cmds::StencilMask>();
1984  void* next_cmd = cmd.Set(
1985      &cmd,
1986      static_cast<GLuint>(11));
1987  EXPECT_EQ(static_cast<uint32>(cmds::StencilMask::kCmdId),
1988            cmd.header.command);
1989  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
1990  EXPECT_EQ(static_cast<GLuint>(11), cmd.mask);
1991  CheckBytesWrittenMatchesExpectedSize(
1992      next_cmd, sizeof(cmd));
1993}
1994
1995TEST_F(GLES2FormatTest, StencilMaskSeparate) {
1996  cmds::StencilMaskSeparate& cmd = *GetBufferAs<cmds::StencilMaskSeparate>();
1997  void* next_cmd = cmd.Set(
1998      &cmd,
1999      static_cast<GLenum>(11),
2000      static_cast<GLuint>(12));
2001  EXPECT_EQ(static_cast<uint32>(cmds::StencilMaskSeparate::kCmdId),
2002            cmd.header.command);
2003  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2004  EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
2005  EXPECT_EQ(static_cast<GLuint>(12), cmd.mask);
2006  CheckBytesWrittenMatchesExpectedSize(
2007      next_cmd, sizeof(cmd));
2008}
2009
2010TEST_F(GLES2FormatTest, StencilOp) {
2011  cmds::StencilOp& cmd = *GetBufferAs<cmds::StencilOp>();
2012  void* next_cmd = cmd.Set(
2013      &cmd,
2014      static_cast<GLenum>(11),
2015      static_cast<GLenum>(12),
2016      static_cast<GLenum>(13));
2017  EXPECT_EQ(static_cast<uint32>(cmds::StencilOp::kCmdId),
2018            cmd.header.command);
2019  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2020  EXPECT_EQ(static_cast<GLenum>(11), cmd.fail);
2021  EXPECT_EQ(static_cast<GLenum>(12), cmd.zfail);
2022  EXPECT_EQ(static_cast<GLenum>(13), cmd.zpass);
2023  CheckBytesWrittenMatchesExpectedSize(
2024      next_cmd, sizeof(cmd));
2025}
2026
2027TEST_F(GLES2FormatTest, StencilOpSeparate) {
2028  cmds::StencilOpSeparate& cmd = *GetBufferAs<cmds::StencilOpSeparate>();
2029  void* next_cmd = cmd.Set(
2030      &cmd,
2031      static_cast<GLenum>(11),
2032      static_cast<GLenum>(12),
2033      static_cast<GLenum>(13),
2034      static_cast<GLenum>(14));
2035  EXPECT_EQ(static_cast<uint32>(cmds::StencilOpSeparate::kCmdId),
2036            cmd.header.command);
2037  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2038  EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
2039  EXPECT_EQ(static_cast<GLenum>(12), cmd.fail);
2040  EXPECT_EQ(static_cast<GLenum>(13), cmd.zfail);
2041  EXPECT_EQ(static_cast<GLenum>(14), cmd.zpass);
2042  CheckBytesWrittenMatchesExpectedSize(
2043      next_cmd, sizeof(cmd));
2044}
2045
2046TEST_F(GLES2FormatTest, TexImage2D) {
2047  cmds::TexImage2D& cmd = *GetBufferAs<cmds::TexImage2D>();
2048  void* next_cmd = cmd.Set(
2049      &cmd,
2050      static_cast<GLenum>(11),
2051      static_cast<GLint>(12),
2052      static_cast<GLint>(13),
2053      static_cast<GLsizei>(14),
2054      static_cast<GLsizei>(15),
2055      static_cast<GLint>(16),
2056      static_cast<GLenum>(17),
2057      static_cast<GLenum>(18),
2058      static_cast<uint32>(19),
2059      static_cast<uint32>(20));
2060  EXPECT_EQ(static_cast<uint32>(cmds::TexImage2D::kCmdId),
2061            cmd.header.command);
2062  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2063  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2064  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
2065  EXPECT_EQ(static_cast<GLint>(13), cmd.internalformat);
2066  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
2067  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
2068  EXPECT_EQ(static_cast<GLint>(16), cmd.border);
2069  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
2070  EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
2071  EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
2072  EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
2073  CheckBytesWrittenMatchesExpectedSize(
2074      next_cmd, sizeof(cmd));
2075}
2076
2077TEST_F(GLES2FormatTest, TexParameterf) {
2078  cmds::TexParameterf& cmd = *GetBufferAs<cmds::TexParameterf>();
2079  void* next_cmd = cmd.Set(
2080      &cmd,
2081      static_cast<GLenum>(11),
2082      static_cast<GLenum>(12),
2083      static_cast<GLfloat>(13));
2084  EXPECT_EQ(static_cast<uint32>(cmds::TexParameterf::kCmdId),
2085            cmd.header.command);
2086  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2087  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2088  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2089  EXPECT_EQ(static_cast<GLfloat>(13), cmd.param);
2090  CheckBytesWrittenMatchesExpectedSize(
2091      next_cmd, sizeof(cmd));
2092}
2093
2094TEST_F(GLES2FormatTest, TexParameterfv) {
2095  cmds::TexParameterfv& cmd = *GetBufferAs<cmds::TexParameterfv>();
2096  void* next_cmd = cmd.Set(
2097      &cmd,
2098      static_cast<GLenum>(11),
2099      static_cast<GLenum>(12),
2100      static_cast<uint32>(13),
2101      static_cast<uint32>(14));
2102  EXPECT_EQ(static_cast<uint32>(cmds::TexParameterfv::kCmdId),
2103            cmd.header.command);
2104  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2105  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2106  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2107  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
2108  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
2109  CheckBytesWrittenMatchesExpectedSize(
2110      next_cmd, sizeof(cmd));
2111}
2112
2113TEST_F(GLES2FormatTest, TexParameterfvImmediate) {
2114  const int kSomeBaseValueToTestWith = 51;
2115  static GLfloat data[] = {
2116    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2117  };
2118  cmds::TexParameterfvImmediate& cmd =
2119      *GetBufferAs<cmds::TexParameterfvImmediate>();
2120  void* next_cmd = cmd.Set(
2121      &cmd,
2122      static_cast<GLenum>(11),
2123      static_cast<GLenum>(12),
2124      data);
2125  EXPECT_EQ(static_cast<uint32>(cmds::TexParameterfvImmediate::kCmdId),
2126            cmd.header.command);
2127  EXPECT_EQ(sizeof(cmd) +
2128            RoundSizeToMultipleOfEntries(sizeof(data)),
2129            cmd.header.size * 4u);
2130  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2131  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2132  CheckBytesWrittenMatchesExpectedSize(
2133      next_cmd, sizeof(cmd) +
2134      RoundSizeToMultipleOfEntries(sizeof(data)));
2135  // TODO(gman): Check that data was inserted;
2136}
2137
2138TEST_F(GLES2FormatTest, TexParameteri) {
2139  cmds::TexParameteri& cmd = *GetBufferAs<cmds::TexParameteri>();
2140  void* next_cmd = cmd.Set(
2141      &cmd,
2142      static_cast<GLenum>(11),
2143      static_cast<GLenum>(12),
2144      static_cast<GLint>(13));
2145  EXPECT_EQ(static_cast<uint32>(cmds::TexParameteri::kCmdId),
2146            cmd.header.command);
2147  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2148  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2149  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2150  EXPECT_EQ(static_cast<GLint>(13), cmd.param);
2151  CheckBytesWrittenMatchesExpectedSize(
2152      next_cmd, sizeof(cmd));
2153}
2154
2155TEST_F(GLES2FormatTest, TexParameteriv) {
2156  cmds::TexParameteriv& cmd = *GetBufferAs<cmds::TexParameteriv>();
2157  void* next_cmd = cmd.Set(
2158      &cmd,
2159      static_cast<GLenum>(11),
2160      static_cast<GLenum>(12),
2161      static_cast<uint32>(13),
2162      static_cast<uint32>(14));
2163  EXPECT_EQ(static_cast<uint32>(cmds::TexParameteriv::kCmdId),
2164            cmd.header.command);
2165  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2166  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2167  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2168  EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
2169  EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
2170  CheckBytesWrittenMatchesExpectedSize(
2171      next_cmd, sizeof(cmd));
2172}
2173
2174TEST_F(GLES2FormatTest, TexParameterivImmediate) {
2175  const int kSomeBaseValueToTestWith = 51;
2176  static GLint data[] = {
2177    static_cast<GLint>(kSomeBaseValueToTestWith + 0),
2178  };
2179  cmds::TexParameterivImmediate& cmd =
2180      *GetBufferAs<cmds::TexParameterivImmediate>();
2181  void* next_cmd = cmd.Set(
2182      &cmd,
2183      static_cast<GLenum>(11),
2184      static_cast<GLenum>(12),
2185      data);
2186  EXPECT_EQ(static_cast<uint32>(cmds::TexParameterivImmediate::kCmdId),
2187            cmd.header.command);
2188  EXPECT_EQ(sizeof(cmd) +
2189            RoundSizeToMultipleOfEntries(sizeof(data)),
2190            cmd.header.size * 4u);
2191  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2192  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
2193  CheckBytesWrittenMatchesExpectedSize(
2194      next_cmd, sizeof(cmd) +
2195      RoundSizeToMultipleOfEntries(sizeof(data)));
2196  // TODO(gman): Check that data was inserted;
2197}
2198
2199TEST_F(GLES2FormatTest, TexSubImage2D) {
2200  cmds::TexSubImage2D& cmd = *GetBufferAs<cmds::TexSubImage2D>();
2201  void* next_cmd = cmd.Set(
2202      &cmd,
2203      static_cast<GLenum>(11),
2204      static_cast<GLint>(12),
2205      static_cast<GLint>(13),
2206      static_cast<GLint>(14),
2207      static_cast<GLsizei>(15),
2208      static_cast<GLsizei>(16),
2209      static_cast<GLenum>(17),
2210      static_cast<GLenum>(18),
2211      static_cast<uint32>(19),
2212      static_cast<uint32>(20),
2213      static_cast<GLboolean>(21));
2214  EXPECT_EQ(static_cast<uint32>(cmds::TexSubImage2D::kCmdId),
2215            cmd.header.command);
2216  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2217  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
2218  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
2219  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
2220  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
2221  EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
2222  EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
2223  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
2224  EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
2225  EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
2226  EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
2227  EXPECT_EQ(static_cast<GLboolean>(21), cmd.internal);
2228  CheckBytesWrittenMatchesExpectedSize(
2229      next_cmd, sizeof(cmd));
2230}
2231
2232TEST_F(GLES2FormatTest, Uniform1f) {
2233  cmds::Uniform1f& cmd = *GetBufferAs<cmds::Uniform1f>();
2234  void* next_cmd = cmd.Set(
2235      &cmd,
2236      static_cast<GLint>(11),
2237      static_cast<GLfloat>(12));
2238  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1f::kCmdId),
2239            cmd.header.command);
2240  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2241  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2242  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
2243  CheckBytesWrittenMatchesExpectedSize(
2244      next_cmd, sizeof(cmd));
2245}
2246
2247TEST_F(GLES2FormatTest, Uniform1fv) {
2248  cmds::Uniform1fv& cmd = *GetBufferAs<cmds::Uniform1fv>();
2249  void* next_cmd = cmd.Set(
2250      &cmd,
2251      static_cast<GLint>(11),
2252      static_cast<GLsizei>(12),
2253      static_cast<uint32>(13),
2254      static_cast<uint32>(14));
2255  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1fv::kCmdId),
2256            cmd.header.command);
2257  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2258  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2259  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2260  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2261  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2262  CheckBytesWrittenMatchesExpectedSize(
2263      next_cmd, sizeof(cmd));
2264}
2265
2266TEST_F(GLES2FormatTest, Uniform1fvImmediate) {
2267  const int kSomeBaseValueToTestWith = 51;
2268  static GLfloat data[] = {
2269    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2270    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2271  };
2272  cmds::Uniform1fvImmediate& cmd = *GetBufferAs<cmds::Uniform1fvImmediate>();
2273  const GLsizei kNumElements = 2;
2274  const size_t kExpectedCmdSize =
2275      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 1;
2276  void* next_cmd = cmd.Set(
2277      &cmd,
2278      static_cast<GLint>(1),
2279      static_cast<GLsizei>(2),
2280      data);
2281  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1fvImmediate::kCmdId),
2282            cmd.header.command);
2283  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2284  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2285  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2286  CheckBytesWrittenMatchesExpectedSize(
2287      next_cmd, sizeof(cmd) +
2288      RoundSizeToMultipleOfEntries(sizeof(data)));
2289  // TODO(gman): Check that data was inserted;
2290}
2291
2292TEST_F(GLES2FormatTest, Uniform1i) {
2293  cmds::Uniform1i& cmd = *GetBufferAs<cmds::Uniform1i>();
2294  void* next_cmd = cmd.Set(
2295      &cmd,
2296      static_cast<GLint>(11),
2297      static_cast<GLint>(12));
2298  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1i::kCmdId),
2299            cmd.header.command);
2300  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2301  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2302  EXPECT_EQ(static_cast<GLint>(12), cmd.x);
2303  CheckBytesWrittenMatchesExpectedSize(
2304      next_cmd, sizeof(cmd));
2305}
2306
2307TEST_F(GLES2FormatTest, Uniform1iv) {
2308  cmds::Uniform1iv& cmd = *GetBufferAs<cmds::Uniform1iv>();
2309  void* next_cmd = cmd.Set(
2310      &cmd,
2311      static_cast<GLint>(11),
2312      static_cast<GLsizei>(12),
2313      static_cast<uint32>(13),
2314      static_cast<uint32>(14));
2315  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1iv::kCmdId),
2316            cmd.header.command);
2317  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2318  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2319  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2320  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2321  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2322  CheckBytesWrittenMatchesExpectedSize(
2323      next_cmd, sizeof(cmd));
2324}
2325
2326TEST_F(GLES2FormatTest, Uniform1ivImmediate) {
2327  const int kSomeBaseValueToTestWith = 51;
2328  static GLint data[] = {
2329    static_cast<GLint>(kSomeBaseValueToTestWith + 0),
2330    static_cast<GLint>(kSomeBaseValueToTestWith + 1),
2331  };
2332  cmds::Uniform1ivImmediate& cmd = *GetBufferAs<cmds::Uniform1ivImmediate>();
2333  const GLsizei kNumElements = 2;
2334  const size_t kExpectedCmdSize =
2335      sizeof(cmd) + kNumElements * sizeof(GLint) * 1;
2336  void* next_cmd = cmd.Set(
2337      &cmd,
2338      static_cast<GLint>(1),
2339      static_cast<GLsizei>(2),
2340      data);
2341  EXPECT_EQ(static_cast<uint32>(cmds::Uniform1ivImmediate::kCmdId),
2342            cmd.header.command);
2343  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2344  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2345  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2346  CheckBytesWrittenMatchesExpectedSize(
2347      next_cmd, sizeof(cmd) +
2348      RoundSizeToMultipleOfEntries(sizeof(data)));
2349  // TODO(gman): Check that data was inserted;
2350}
2351
2352TEST_F(GLES2FormatTest, Uniform2f) {
2353  cmds::Uniform2f& cmd = *GetBufferAs<cmds::Uniform2f>();
2354  void* next_cmd = cmd.Set(
2355      &cmd,
2356      static_cast<GLint>(11),
2357      static_cast<GLfloat>(12),
2358      static_cast<GLfloat>(13));
2359  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2f::kCmdId),
2360            cmd.header.command);
2361  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2362  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2363  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
2364  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
2365  CheckBytesWrittenMatchesExpectedSize(
2366      next_cmd, sizeof(cmd));
2367}
2368
2369TEST_F(GLES2FormatTest, Uniform2fv) {
2370  cmds::Uniform2fv& cmd = *GetBufferAs<cmds::Uniform2fv>();
2371  void* next_cmd = cmd.Set(
2372      &cmd,
2373      static_cast<GLint>(11),
2374      static_cast<GLsizei>(12),
2375      static_cast<uint32>(13),
2376      static_cast<uint32>(14));
2377  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2fv::kCmdId),
2378            cmd.header.command);
2379  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2380  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2381  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2382  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2383  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2384  CheckBytesWrittenMatchesExpectedSize(
2385      next_cmd, sizeof(cmd));
2386}
2387
2388TEST_F(GLES2FormatTest, Uniform2fvImmediate) {
2389  const int kSomeBaseValueToTestWith = 51;
2390  static GLfloat data[] = {
2391    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2392    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2393    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2394    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2395  };
2396  cmds::Uniform2fvImmediate& cmd = *GetBufferAs<cmds::Uniform2fvImmediate>();
2397  const GLsizei kNumElements = 2;
2398  const size_t kExpectedCmdSize =
2399      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 2;
2400  void* next_cmd = cmd.Set(
2401      &cmd,
2402      static_cast<GLint>(1),
2403      static_cast<GLsizei>(2),
2404      data);
2405  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2fvImmediate::kCmdId),
2406            cmd.header.command);
2407  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2408  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2409  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2410  CheckBytesWrittenMatchesExpectedSize(
2411      next_cmd, sizeof(cmd) +
2412      RoundSizeToMultipleOfEntries(sizeof(data)));
2413  // TODO(gman): Check that data was inserted;
2414}
2415
2416TEST_F(GLES2FormatTest, Uniform2i) {
2417  cmds::Uniform2i& cmd = *GetBufferAs<cmds::Uniform2i>();
2418  void* next_cmd = cmd.Set(
2419      &cmd,
2420      static_cast<GLint>(11),
2421      static_cast<GLint>(12),
2422      static_cast<GLint>(13));
2423  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2i::kCmdId),
2424            cmd.header.command);
2425  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2426  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2427  EXPECT_EQ(static_cast<GLint>(12), cmd.x);
2428  EXPECT_EQ(static_cast<GLint>(13), cmd.y);
2429  CheckBytesWrittenMatchesExpectedSize(
2430      next_cmd, sizeof(cmd));
2431}
2432
2433TEST_F(GLES2FormatTest, Uniform2iv) {
2434  cmds::Uniform2iv& cmd = *GetBufferAs<cmds::Uniform2iv>();
2435  void* next_cmd = cmd.Set(
2436      &cmd,
2437      static_cast<GLint>(11),
2438      static_cast<GLsizei>(12),
2439      static_cast<uint32>(13),
2440      static_cast<uint32>(14));
2441  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2iv::kCmdId),
2442            cmd.header.command);
2443  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2444  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2445  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2446  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2447  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2448  CheckBytesWrittenMatchesExpectedSize(
2449      next_cmd, sizeof(cmd));
2450}
2451
2452TEST_F(GLES2FormatTest, Uniform2ivImmediate) {
2453  const int kSomeBaseValueToTestWith = 51;
2454  static GLint data[] = {
2455    static_cast<GLint>(kSomeBaseValueToTestWith + 0),
2456    static_cast<GLint>(kSomeBaseValueToTestWith + 1),
2457    static_cast<GLint>(kSomeBaseValueToTestWith + 2),
2458    static_cast<GLint>(kSomeBaseValueToTestWith + 3),
2459  };
2460  cmds::Uniform2ivImmediate& cmd = *GetBufferAs<cmds::Uniform2ivImmediate>();
2461  const GLsizei kNumElements = 2;
2462  const size_t kExpectedCmdSize =
2463      sizeof(cmd) + kNumElements * sizeof(GLint) * 2;
2464  void* next_cmd = cmd.Set(
2465      &cmd,
2466      static_cast<GLint>(1),
2467      static_cast<GLsizei>(2),
2468      data);
2469  EXPECT_EQ(static_cast<uint32>(cmds::Uniform2ivImmediate::kCmdId),
2470            cmd.header.command);
2471  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2472  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2473  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2474  CheckBytesWrittenMatchesExpectedSize(
2475      next_cmd, sizeof(cmd) +
2476      RoundSizeToMultipleOfEntries(sizeof(data)));
2477  // TODO(gman): Check that data was inserted;
2478}
2479
2480TEST_F(GLES2FormatTest, Uniform3f) {
2481  cmds::Uniform3f& cmd = *GetBufferAs<cmds::Uniform3f>();
2482  void* next_cmd = cmd.Set(
2483      &cmd,
2484      static_cast<GLint>(11),
2485      static_cast<GLfloat>(12),
2486      static_cast<GLfloat>(13),
2487      static_cast<GLfloat>(14));
2488  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3f::kCmdId),
2489            cmd.header.command);
2490  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2491  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2492  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
2493  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
2494  EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
2495  CheckBytesWrittenMatchesExpectedSize(
2496      next_cmd, sizeof(cmd));
2497}
2498
2499TEST_F(GLES2FormatTest, Uniform3fv) {
2500  cmds::Uniform3fv& cmd = *GetBufferAs<cmds::Uniform3fv>();
2501  void* next_cmd = cmd.Set(
2502      &cmd,
2503      static_cast<GLint>(11),
2504      static_cast<GLsizei>(12),
2505      static_cast<uint32>(13),
2506      static_cast<uint32>(14));
2507  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3fv::kCmdId),
2508            cmd.header.command);
2509  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2510  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2511  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2512  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2513  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2514  CheckBytesWrittenMatchesExpectedSize(
2515      next_cmd, sizeof(cmd));
2516}
2517
2518TEST_F(GLES2FormatTest, Uniform3fvImmediate) {
2519  const int kSomeBaseValueToTestWith = 51;
2520  static GLfloat data[] = {
2521    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2522    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2523    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2524    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2525    static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
2526    static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
2527  };
2528  cmds::Uniform3fvImmediate& cmd = *GetBufferAs<cmds::Uniform3fvImmediate>();
2529  const GLsizei kNumElements = 2;
2530  const size_t kExpectedCmdSize =
2531      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 3;
2532  void* next_cmd = cmd.Set(
2533      &cmd,
2534      static_cast<GLint>(1),
2535      static_cast<GLsizei>(2),
2536      data);
2537  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3fvImmediate::kCmdId),
2538            cmd.header.command);
2539  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2540  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2541  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2542  CheckBytesWrittenMatchesExpectedSize(
2543      next_cmd, sizeof(cmd) +
2544      RoundSizeToMultipleOfEntries(sizeof(data)));
2545  // TODO(gman): Check that data was inserted;
2546}
2547
2548TEST_F(GLES2FormatTest, Uniform3i) {
2549  cmds::Uniform3i& cmd = *GetBufferAs<cmds::Uniform3i>();
2550  void* next_cmd = cmd.Set(
2551      &cmd,
2552      static_cast<GLint>(11),
2553      static_cast<GLint>(12),
2554      static_cast<GLint>(13),
2555      static_cast<GLint>(14));
2556  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3i::kCmdId),
2557            cmd.header.command);
2558  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2559  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2560  EXPECT_EQ(static_cast<GLint>(12), cmd.x);
2561  EXPECT_EQ(static_cast<GLint>(13), cmd.y);
2562  EXPECT_EQ(static_cast<GLint>(14), cmd.z);
2563  CheckBytesWrittenMatchesExpectedSize(
2564      next_cmd, sizeof(cmd));
2565}
2566
2567TEST_F(GLES2FormatTest, Uniform3iv) {
2568  cmds::Uniform3iv& cmd = *GetBufferAs<cmds::Uniform3iv>();
2569  void* next_cmd = cmd.Set(
2570      &cmd,
2571      static_cast<GLint>(11),
2572      static_cast<GLsizei>(12),
2573      static_cast<uint32>(13),
2574      static_cast<uint32>(14));
2575  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3iv::kCmdId),
2576            cmd.header.command);
2577  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2578  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2579  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2580  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2581  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2582  CheckBytesWrittenMatchesExpectedSize(
2583      next_cmd, sizeof(cmd));
2584}
2585
2586TEST_F(GLES2FormatTest, Uniform3ivImmediate) {
2587  const int kSomeBaseValueToTestWith = 51;
2588  static GLint data[] = {
2589    static_cast<GLint>(kSomeBaseValueToTestWith + 0),
2590    static_cast<GLint>(kSomeBaseValueToTestWith + 1),
2591    static_cast<GLint>(kSomeBaseValueToTestWith + 2),
2592    static_cast<GLint>(kSomeBaseValueToTestWith + 3),
2593    static_cast<GLint>(kSomeBaseValueToTestWith + 4),
2594    static_cast<GLint>(kSomeBaseValueToTestWith + 5),
2595  };
2596  cmds::Uniform3ivImmediate& cmd = *GetBufferAs<cmds::Uniform3ivImmediate>();
2597  const GLsizei kNumElements = 2;
2598  const size_t kExpectedCmdSize =
2599      sizeof(cmd) + kNumElements * sizeof(GLint) * 3;
2600  void* next_cmd = cmd.Set(
2601      &cmd,
2602      static_cast<GLint>(1),
2603      static_cast<GLsizei>(2),
2604      data);
2605  EXPECT_EQ(static_cast<uint32>(cmds::Uniform3ivImmediate::kCmdId),
2606            cmd.header.command);
2607  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2608  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2609  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2610  CheckBytesWrittenMatchesExpectedSize(
2611      next_cmd, sizeof(cmd) +
2612      RoundSizeToMultipleOfEntries(sizeof(data)));
2613  // TODO(gman): Check that data was inserted;
2614}
2615
2616TEST_F(GLES2FormatTest, Uniform4f) {
2617  cmds::Uniform4f& cmd = *GetBufferAs<cmds::Uniform4f>();
2618  void* next_cmd = cmd.Set(
2619      &cmd,
2620      static_cast<GLint>(11),
2621      static_cast<GLfloat>(12),
2622      static_cast<GLfloat>(13),
2623      static_cast<GLfloat>(14),
2624      static_cast<GLfloat>(15));
2625  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4f::kCmdId),
2626            cmd.header.command);
2627  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2628  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2629  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
2630  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
2631  EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
2632  EXPECT_EQ(static_cast<GLfloat>(15), cmd.w);
2633  CheckBytesWrittenMatchesExpectedSize(
2634      next_cmd, sizeof(cmd));
2635}
2636
2637TEST_F(GLES2FormatTest, Uniform4fv) {
2638  cmds::Uniform4fv& cmd = *GetBufferAs<cmds::Uniform4fv>();
2639  void* next_cmd = cmd.Set(
2640      &cmd,
2641      static_cast<GLint>(11),
2642      static_cast<GLsizei>(12),
2643      static_cast<uint32>(13),
2644      static_cast<uint32>(14));
2645  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4fv::kCmdId),
2646            cmd.header.command);
2647  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2648  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2649  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2650  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2651  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2652  CheckBytesWrittenMatchesExpectedSize(
2653      next_cmd, sizeof(cmd));
2654}
2655
2656TEST_F(GLES2FormatTest, Uniform4fvImmediate) {
2657  const int kSomeBaseValueToTestWith = 51;
2658  static GLfloat data[] = {
2659    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2660    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2661    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2662    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2663    static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
2664    static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
2665    static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
2666    static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
2667  };
2668  cmds::Uniform4fvImmediate& cmd = *GetBufferAs<cmds::Uniform4fvImmediate>();
2669  const GLsizei kNumElements = 2;
2670  const size_t kExpectedCmdSize =
2671      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 4;
2672  void* next_cmd = cmd.Set(
2673      &cmd,
2674      static_cast<GLint>(1),
2675      static_cast<GLsizei>(2),
2676      data);
2677  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4fvImmediate::kCmdId),
2678            cmd.header.command);
2679  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2680  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2681  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2682  CheckBytesWrittenMatchesExpectedSize(
2683      next_cmd, sizeof(cmd) +
2684      RoundSizeToMultipleOfEntries(sizeof(data)));
2685  // TODO(gman): Check that data was inserted;
2686}
2687
2688TEST_F(GLES2FormatTest, Uniform4i) {
2689  cmds::Uniform4i& cmd = *GetBufferAs<cmds::Uniform4i>();
2690  void* next_cmd = cmd.Set(
2691      &cmd,
2692      static_cast<GLint>(11),
2693      static_cast<GLint>(12),
2694      static_cast<GLint>(13),
2695      static_cast<GLint>(14),
2696      static_cast<GLint>(15));
2697  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4i::kCmdId),
2698            cmd.header.command);
2699  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2700  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2701  EXPECT_EQ(static_cast<GLint>(12), cmd.x);
2702  EXPECT_EQ(static_cast<GLint>(13), cmd.y);
2703  EXPECT_EQ(static_cast<GLint>(14), cmd.z);
2704  EXPECT_EQ(static_cast<GLint>(15), cmd.w);
2705  CheckBytesWrittenMatchesExpectedSize(
2706      next_cmd, sizeof(cmd));
2707}
2708
2709TEST_F(GLES2FormatTest, Uniform4iv) {
2710  cmds::Uniform4iv& cmd = *GetBufferAs<cmds::Uniform4iv>();
2711  void* next_cmd = cmd.Set(
2712      &cmd,
2713      static_cast<GLint>(11),
2714      static_cast<GLsizei>(12),
2715      static_cast<uint32>(13),
2716      static_cast<uint32>(14));
2717  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4iv::kCmdId),
2718            cmd.header.command);
2719  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2720  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2721  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2722  EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
2723  EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
2724  CheckBytesWrittenMatchesExpectedSize(
2725      next_cmd, sizeof(cmd));
2726}
2727
2728TEST_F(GLES2FormatTest, Uniform4ivImmediate) {
2729  const int kSomeBaseValueToTestWith = 51;
2730  static GLint data[] = {
2731    static_cast<GLint>(kSomeBaseValueToTestWith + 0),
2732    static_cast<GLint>(kSomeBaseValueToTestWith + 1),
2733    static_cast<GLint>(kSomeBaseValueToTestWith + 2),
2734    static_cast<GLint>(kSomeBaseValueToTestWith + 3),
2735    static_cast<GLint>(kSomeBaseValueToTestWith + 4),
2736    static_cast<GLint>(kSomeBaseValueToTestWith + 5),
2737    static_cast<GLint>(kSomeBaseValueToTestWith + 6),
2738    static_cast<GLint>(kSomeBaseValueToTestWith + 7),
2739  };
2740  cmds::Uniform4ivImmediate& cmd = *GetBufferAs<cmds::Uniform4ivImmediate>();
2741  const GLsizei kNumElements = 2;
2742  const size_t kExpectedCmdSize =
2743      sizeof(cmd) + kNumElements * sizeof(GLint) * 4;
2744  void* next_cmd = cmd.Set(
2745      &cmd,
2746      static_cast<GLint>(1),
2747      static_cast<GLsizei>(2),
2748      data);
2749  EXPECT_EQ(static_cast<uint32>(cmds::Uniform4ivImmediate::kCmdId),
2750            cmd.header.command);
2751  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2752  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2753  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2754  CheckBytesWrittenMatchesExpectedSize(
2755      next_cmd, sizeof(cmd) +
2756      RoundSizeToMultipleOfEntries(sizeof(data)));
2757  // TODO(gman): Check that data was inserted;
2758}
2759
2760TEST_F(GLES2FormatTest, UniformMatrix2fv) {
2761  cmds::UniformMatrix2fv& cmd = *GetBufferAs<cmds::UniformMatrix2fv>();
2762  void* next_cmd = cmd.Set(
2763      &cmd,
2764      static_cast<GLint>(11),
2765      static_cast<GLsizei>(12),
2766      static_cast<GLboolean>(13),
2767      static_cast<uint32>(14),
2768      static_cast<uint32>(15));
2769  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix2fv::kCmdId),
2770            cmd.header.command);
2771  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2772  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2773  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2774  EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
2775  EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
2776  EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
2777  CheckBytesWrittenMatchesExpectedSize(
2778      next_cmd, sizeof(cmd));
2779}
2780
2781TEST_F(GLES2FormatTest, UniformMatrix2fvImmediate) {
2782  const int kSomeBaseValueToTestWith = 51;
2783  static GLfloat data[] = {
2784    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2785    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2786    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2787    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2788    static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
2789    static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
2790    static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
2791    static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
2792  };
2793  cmds::UniformMatrix2fvImmediate& cmd =
2794      *GetBufferAs<cmds::UniformMatrix2fvImmediate>();
2795  const GLsizei kNumElements = 2;
2796  const size_t kExpectedCmdSize =
2797      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 4;
2798  void* next_cmd = cmd.Set(
2799      &cmd,
2800      static_cast<GLint>(1),
2801      static_cast<GLsizei>(2),
2802      static_cast<GLboolean>(3),
2803      data);
2804  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix2fvImmediate::kCmdId),
2805            cmd.header.command);
2806  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2807  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2808  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2809  EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
2810  CheckBytesWrittenMatchesExpectedSize(
2811      next_cmd, sizeof(cmd) +
2812      RoundSizeToMultipleOfEntries(sizeof(data)));
2813  // TODO(gman): Check that data was inserted;
2814}
2815
2816TEST_F(GLES2FormatTest, UniformMatrix3fv) {
2817  cmds::UniformMatrix3fv& cmd = *GetBufferAs<cmds::UniformMatrix3fv>();
2818  void* next_cmd = cmd.Set(
2819      &cmd,
2820      static_cast<GLint>(11),
2821      static_cast<GLsizei>(12),
2822      static_cast<GLboolean>(13),
2823      static_cast<uint32>(14),
2824      static_cast<uint32>(15));
2825  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix3fv::kCmdId),
2826            cmd.header.command);
2827  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2828  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2829  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2830  EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
2831  EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
2832  EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
2833  CheckBytesWrittenMatchesExpectedSize(
2834      next_cmd, sizeof(cmd));
2835}
2836
2837TEST_F(GLES2FormatTest, UniformMatrix3fvImmediate) {
2838  const int kSomeBaseValueToTestWith = 51;
2839  static GLfloat data[] = {
2840    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2841    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2842    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2843    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2844    static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
2845    static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
2846    static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
2847    static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
2848    static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
2849    static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
2850    static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
2851    static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
2852    static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
2853    static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
2854    static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
2855    static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
2856    static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
2857    static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
2858  };
2859  cmds::UniformMatrix3fvImmediate& cmd =
2860      *GetBufferAs<cmds::UniformMatrix3fvImmediate>();
2861  const GLsizei kNumElements = 2;
2862  const size_t kExpectedCmdSize =
2863      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 9;
2864  void* next_cmd = cmd.Set(
2865      &cmd,
2866      static_cast<GLint>(1),
2867      static_cast<GLsizei>(2),
2868      static_cast<GLboolean>(3),
2869      data);
2870  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix3fvImmediate::kCmdId),
2871            cmd.header.command);
2872  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2873  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2874  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2875  EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
2876  CheckBytesWrittenMatchesExpectedSize(
2877      next_cmd, sizeof(cmd) +
2878      RoundSizeToMultipleOfEntries(sizeof(data)));
2879  // TODO(gman): Check that data was inserted;
2880}
2881
2882TEST_F(GLES2FormatTest, UniformMatrix4fv) {
2883  cmds::UniformMatrix4fv& cmd = *GetBufferAs<cmds::UniformMatrix4fv>();
2884  void* next_cmd = cmd.Set(
2885      &cmd,
2886      static_cast<GLint>(11),
2887      static_cast<GLsizei>(12),
2888      static_cast<GLboolean>(13),
2889      static_cast<uint32>(14),
2890      static_cast<uint32>(15));
2891  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix4fv::kCmdId),
2892            cmd.header.command);
2893  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2894  EXPECT_EQ(static_cast<GLint>(11), cmd.location);
2895  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
2896  EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
2897  EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
2898  EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
2899  CheckBytesWrittenMatchesExpectedSize(
2900      next_cmd, sizeof(cmd));
2901}
2902
2903TEST_F(GLES2FormatTest, UniformMatrix4fvImmediate) {
2904  const int kSomeBaseValueToTestWith = 51;
2905  static GLfloat data[] = {
2906    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
2907    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
2908    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
2909    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
2910    static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
2911    static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
2912    static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
2913    static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
2914    static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
2915    static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
2916    static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
2917    static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
2918    static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
2919    static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
2920    static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
2921    static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
2922    static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
2923    static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
2924    static_cast<GLfloat>(kSomeBaseValueToTestWith + 18),
2925    static_cast<GLfloat>(kSomeBaseValueToTestWith + 19),
2926    static_cast<GLfloat>(kSomeBaseValueToTestWith + 20),
2927    static_cast<GLfloat>(kSomeBaseValueToTestWith + 21),
2928    static_cast<GLfloat>(kSomeBaseValueToTestWith + 22),
2929    static_cast<GLfloat>(kSomeBaseValueToTestWith + 23),
2930    static_cast<GLfloat>(kSomeBaseValueToTestWith + 24),
2931    static_cast<GLfloat>(kSomeBaseValueToTestWith + 25),
2932    static_cast<GLfloat>(kSomeBaseValueToTestWith + 26),
2933    static_cast<GLfloat>(kSomeBaseValueToTestWith + 27),
2934    static_cast<GLfloat>(kSomeBaseValueToTestWith + 28),
2935    static_cast<GLfloat>(kSomeBaseValueToTestWith + 29),
2936    static_cast<GLfloat>(kSomeBaseValueToTestWith + 30),
2937    static_cast<GLfloat>(kSomeBaseValueToTestWith + 31),
2938  };
2939  cmds::UniformMatrix4fvImmediate& cmd =
2940      *GetBufferAs<cmds::UniformMatrix4fvImmediate>();
2941  const GLsizei kNumElements = 2;
2942  const size_t kExpectedCmdSize =
2943      sizeof(cmd) + kNumElements * sizeof(GLfloat) * 16;
2944  void* next_cmd = cmd.Set(
2945      &cmd,
2946      static_cast<GLint>(1),
2947      static_cast<GLsizei>(2),
2948      static_cast<GLboolean>(3),
2949      data);
2950  EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix4fvImmediate::kCmdId),
2951            cmd.header.command);
2952  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
2953  EXPECT_EQ(static_cast<GLint>(1), cmd.location);
2954  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
2955  EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
2956  CheckBytesWrittenMatchesExpectedSize(
2957      next_cmd, sizeof(cmd) +
2958      RoundSizeToMultipleOfEntries(sizeof(data)));
2959  // TODO(gman): Check that data was inserted;
2960}
2961
2962TEST_F(GLES2FormatTest, UseProgram) {
2963  cmds::UseProgram& cmd = *GetBufferAs<cmds::UseProgram>();
2964  void* next_cmd = cmd.Set(
2965      &cmd,
2966      static_cast<GLuint>(11));
2967  EXPECT_EQ(static_cast<uint32>(cmds::UseProgram::kCmdId),
2968            cmd.header.command);
2969  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2970  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
2971  CheckBytesWrittenMatchesExpectedSize(
2972      next_cmd, sizeof(cmd));
2973}
2974
2975TEST_F(GLES2FormatTest, ValidateProgram) {
2976  cmds::ValidateProgram& cmd = *GetBufferAs<cmds::ValidateProgram>();
2977  void* next_cmd = cmd.Set(
2978      &cmd,
2979      static_cast<GLuint>(11));
2980  EXPECT_EQ(static_cast<uint32>(cmds::ValidateProgram::kCmdId),
2981            cmd.header.command);
2982  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2983  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
2984  CheckBytesWrittenMatchesExpectedSize(
2985      next_cmd, sizeof(cmd));
2986}
2987
2988TEST_F(GLES2FormatTest, VertexAttrib1f) {
2989  cmds::VertexAttrib1f& cmd = *GetBufferAs<cmds::VertexAttrib1f>();
2990  void* next_cmd = cmd.Set(
2991      &cmd,
2992      static_cast<GLuint>(11),
2993      static_cast<GLfloat>(12));
2994  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1f::kCmdId),
2995            cmd.header.command);
2996  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
2997  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
2998  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
2999  CheckBytesWrittenMatchesExpectedSize(
3000      next_cmd, sizeof(cmd));
3001}
3002
3003TEST_F(GLES2FormatTest, VertexAttrib1fv) {
3004  cmds::VertexAttrib1fv& cmd = *GetBufferAs<cmds::VertexAttrib1fv>();
3005  void* next_cmd = cmd.Set(
3006      &cmd,
3007      static_cast<GLuint>(11),
3008      static_cast<uint32>(12),
3009      static_cast<uint32>(13));
3010  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1fv::kCmdId),
3011            cmd.header.command);
3012  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3013  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3014  EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
3015  EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
3016  CheckBytesWrittenMatchesExpectedSize(
3017      next_cmd, sizeof(cmd));
3018}
3019
3020TEST_F(GLES2FormatTest, VertexAttrib1fvImmediate) {
3021  const int kSomeBaseValueToTestWith = 51;
3022  static GLfloat data[] = {
3023    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
3024  };
3025  cmds::VertexAttrib1fvImmediate& cmd =
3026      *GetBufferAs<cmds::VertexAttrib1fvImmediate>();
3027  void* next_cmd = cmd.Set(
3028      &cmd,
3029      static_cast<GLuint>(11),
3030      data);
3031  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1fvImmediate::kCmdId),
3032            cmd.header.command);
3033  EXPECT_EQ(sizeof(cmd) +
3034            RoundSizeToMultipleOfEntries(sizeof(data)),
3035            cmd.header.size * 4u);
3036  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3037  CheckBytesWrittenMatchesExpectedSize(
3038      next_cmd, sizeof(cmd) +
3039      RoundSizeToMultipleOfEntries(sizeof(data)));
3040  // TODO(gman): Check that data was inserted;
3041}
3042
3043TEST_F(GLES2FormatTest, VertexAttrib2f) {
3044  cmds::VertexAttrib2f& cmd = *GetBufferAs<cmds::VertexAttrib2f>();
3045  void* next_cmd = cmd.Set(
3046      &cmd,
3047      static_cast<GLuint>(11),
3048      static_cast<GLfloat>(12),
3049      static_cast<GLfloat>(13));
3050  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2f::kCmdId),
3051            cmd.header.command);
3052  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3053  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3054  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
3055  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
3056  CheckBytesWrittenMatchesExpectedSize(
3057      next_cmd, sizeof(cmd));
3058}
3059
3060TEST_F(GLES2FormatTest, VertexAttrib2fv) {
3061  cmds::VertexAttrib2fv& cmd = *GetBufferAs<cmds::VertexAttrib2fv>();
3062  void* next_cmd = cmd.Set(
3063      &cmd,
3064      static_cast<GLuint>(11),
3065      static_cast<uint32>(12),
3066      static_cast<uint32>(13));
3067  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2fv::kCmdId),
3068            cmd.header.command);
3069  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3070  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3071  EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
3072  EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
3073  CheckBytesWrittenMatchesExpectedSize(
3074      next_cmd, sizeof(cmd));
3075}
3076
3077TEST_F(GLES2FormatTest, VertexAttrib2fvImmediate) {
3078  const int kSomeBaseValueToTestWith = 51;
3079  static GLfloat data[] = {
3080    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
3081    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
3082  };
3083  cmds::VertexAttrib2fvImmediate& cmd =
3084      *GetBufferAs<cmds::VertexAttrib2fvImmediate>();
3085  void* next_cmd = cmd.Set(
3086      &cmd,
3087      static_cast<GLuint>(11),
3088      data);
3089  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2fvImmediate::kCmdId),
3090            cmd.header.command);
3091  EXPECT_EQ(sizeof(cmd) +
3092            RoundSizeToMultipleOfEntries(sizeof(data)),
3093            cmd.header.size * 4u);
3094  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3095  CheckBytesWrittenMatchesExpectedSize(
3096      next_cmd, sizeof(cmd) +
3097      RoundSizeToMultipleOfEntries(sizeof(data)));
3098  // TODO(gman): Check that data was inserted;
3099}
3100
3101TEST_F(GLES2FormatTest, VertexAttrib3f) {
3102  cmds::VertexAttrib3f& cmd = *GetBufferAs<cmds::VertexAttrib3f>();
3103  void* next_cmd = cmd.Set(
3104      &cmd,
3105      static_cast<GLuint>(11),
3106      static_cast<GLfloat>(12),
3107      static_cast<GLfloat>(13),
3108      static_cast<GLfloat>(14));
3109  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3f::kCmdId),
3110            cmd.header.command);
3111  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3112  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3113  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
3114  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
3115  EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
3116  CheckBytesWrittenMatchesExpectedSize(
3117      next_cmd, sizeof(cmd));
3118}
3119
3120TEST_F(GLES2FormatTest, VertexAttrib3fv) {
3121  cmds::VertexAttrib3fv& cmd = *GetBufferAs<cmds::VertexAttrib3fv>();
3122  void* next_cmd = cmd.Set(
3123      &cmd,
3124      static_cast<GLuint>(11),
3125      static_cast<uint32>(12),
3126      static_cast<uint32>(13));
3127  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3fv::kCmdId),
3128            cmd.header.command);
3129  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3130  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3131  EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
3132  EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
3133  CheckBytesWrittenMatchesExpectedSize(
3134      next_cmd, sizeof(cmd));
3135}
3136
3137TEST_F(GLES2FormatTest, VertexAttrib3fvImmediate) {
3138  const int kSomeBaseValueToTestWith = 51;
3139  static GLfloat data[] = {
3140    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
3141    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
3142    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
3143  };
3144  cmds::VertexAttrib3fvImmediate& cmd =
3145      *GetBufferAs<cmds::VertexAttrib3fvImmediate>();
3146  void* next_cmd = cmd.Set(
3147      &cmd,
3148      static_cast<GLuint>(11),
3149      data);
3150  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3fvImmediate::kCmdId),
3151            cmd.header.command);
3152  EXPECT_EQ(sizeof(cmd) +
3153            RoundSizeToMultipleOfEntries(sizeof(data)),
3154            cmd.header.size * 4u);
3155  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3156  CheckBytesWrittenMatchesExpectedSize(
3157      next_cmd, sizeof(cmd) +
3158      RoundSizeToMultipleOfEntries(sizeof(data)));
3159  // TODO(gman): Check that data was inserted;
3160}
3161
3162TEST_F(GLES2FormatTest, VertexAttrib4f) {
3163  cmds::VertexAttrib4f& cmd = *GetBufferAs<cmds::VertexAttrib4f>();
3164  void* next_cmd = cmd.Set(
3165      &cmd,
3166      static_cast<GLuint>(11),
3167      static_cast<GLfloat>(12),
3168      static_cast<GLfloat>(13),
3169      static_cast<GLfloat>(14),
3170      static_cast<GLfloat>(15));
3171  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4f::kCmdId),
3172            cmd.header.command);
3173  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3174  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3175  EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
3176  EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
3177  EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
3178  EXPECT_EQ(static_cast<GLfloat>(15), cmd.w);
3179  CheckBytesWrittenMatchesExpectedSize(
3180      next_cmd, sizeof(cmd));
3181}
3182
3183TEST_F(GLES2FormatTest, VertexAttrib4fv) {
3184  cmds::VertexAttrib4fv& cmd = *GetBufferAs<cmds::VertexAttrib4fv>();
3185  void* next_cmd = cmd.Set(
3186      &cmd,
3187      static_cast<GLuint>(11),
3188      static_cast<uint32>(12),
3189      static_cast<uint32>(13));
3190  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4fv::kCmdId),
3191            cmd.header.command);
3192  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3193  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3194  EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
3195  EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
3196  CheckBytesWrittenMatchesExpectedSize(
3197      next_cmd, sizeof(cmd));
3198}
3199
3200TEST_F(GLES2FormatTest, VertexAttrib4fvImmediate) {
3201  const int kSomeBaseValueToTestWith = 51;
3202  static GLfloat data[] = {
3203    static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
3204    static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
3205    static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
3206    static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
3207  };
3208  cmds::VertexAttrib4fvImmediate& cmd =
3209      *GetBufferAs<cmds::VertexAttrib4fvImmediate>();
3210  void* next_cmd = cmd.Set(
3211      &cmd,
3212      static_cast<GLuint>(11),
3213      data);
3214  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4fvImmediate::kCmdId),
3215            cmd.header.command);
3216  EXPECT_EQ(sizeof(cmd) +
3217            RoundSizeToMultipleOfEntries(sizeof(data)),
3218            cmd.header.size * 4u);
3219  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3220  CheckBytesWrittenMatchesExpectedSize(
3221      next_cmd, sizeof(cmd) +
3222      RoundSizeToMultipleOfEntries(sizeof(data)));
3223  // TODO(gman): Check that data was inserted;
3224}
3225
3226TEST_F(GLES2FormatTest, VertexAttribPointer) {
3227  cmds::VertexAttribPointer& cmd = *GetBufferAs<cmds::VertexAttribPointer>();
3228  void* next_cmd = cmd.Set(
3229      &cmd,
3230      static_cast<GLuint>(11),
3231      static_cast<GLint>(12),
3232      static_cast<GLenum>(13),
3233      static_cast<GLboolean>(14),
3234      static_cast<GLsizei>(15),
3235      static_cast<GLuint>(16));
3236  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttribPointer::kCmdId),
3237            cmd.header.command);
3238  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3239  EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
3240  EXPECT_EQ(static_cast<GLint>(12), cmd.size);
3241  EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
3242  EXPECT_EQ(static_cast<GLboolean>(14), cmd.normalized);
3243  EXPECT_EQ(static_cast<GLsizei>(15), cmd.stride);
3244  EXPECT_EQ(static_cast<GLuint>(16), cmd.offset);
3245  CheckBytesWrittenMatchesExpectedSize(
3246      next_cmd, sizeof(cmd));
3247}
3248
3249TEST_F(GLES2FormatTest, Viewport) {
3250  cmds::Viewport& cmd = *GetBufferAs<cmds::Viewport>();
3251  void* next_cmd = cmd.Set(
3252      &cmd,
3253      static_cast<GLint>(11),
3254      static_cast<GLint>(12),
3255      static_cast<GLsizei>(13),
3256      static_cast<GLsizei>(14));
3257  EXPECT_EQ(static_cast<uint32>(cmds::Viewport::kCmdId),
3258            cmd.header.command);
3259  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3260  EXPECT_EQ(static_cast<GLint>(11), cmd.x);
3261  EXPECT_EQ(static_cast<GLint>(12), cmd.y);
3262  EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
3263  EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
3264  CheckBytesWrittenMatchesExpectedSize(
3265      next_cmd, sizeof(cmd));
3266}
3267
3268TEST_F(GLES2FormatTest, BlitFramebufferEXT) {
3269  cmds::BlitFramebufferEXT& cmd = *GetBufferAs<cmds::BlitFramebufferEXT>();
3270  void* next_cmd = cmd.Set(
3271      &cmd,
3272      static_cast<GLint>(11),
3273      static_cast<GLint>(12),
3274      static_cast<GLint>(13),
3275      static_cast<GLint>(14),
3276      static_cast<GLint>(15),
3277      static_cast<GLint>(16),
3278      static_cast<GLint>(17),
3279      static_cast<GLint>(18),
3280      static_cast<GLbitfield>(19),
3281      static_cast<GLenum>(20));
3282  EXPECT_EQ(static_cast<uint32>(cmds::BlitFramebufferEXT::kCmdId),
3283            cmd.header.command);
3284  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3285  EXPECT_EQ(static_cast<GLint>(11), cmd.srcX0);
3286  EXPECT_EQ(static_cast<GLint>(12), cmd.srcY0);
3287  EXPECT_EQ(static_cast<GLint>(13), cmd.srcX1);
3288  EXPECT_EQ(static_cast<GLint>(14), cmd.srcY1);
3289  EXPECT_EQ(static_cast<GLint>(15), cmd.dstX0);
3290  EXPECT_EQ(static_cast<GLint>(16), cmd.dstY0);
3291  EXPECT_EQ(static_cast<GLint>(17), cmd.dstX1);
3292  EXPECT_EQ(static_cast<GLint>(18), cmd.dstY1);
3293  EXPECT_EQ(static_cast<GLbitfield>(19), cmd.mask);
3294  EXPECT_EQ(static_cast<GLenum>(20), cmd.filter);
3295  CheckBytesWrittenMatchesExpectedSize(
3296      next_cmd, sizeof(cmd));
3297}
3298
3299TEST_F(GLES2FormatTest, RenderbufferStorageMultisampleEXT) {
3300  cmds::RenderbufferStorageMultisampleEXT& cmd =
3301      *GetBufferAs<cmds::RenderbufferStorageMultisampleEXT>();
3302  void* next_cmd = cmd.Set(
3303      &cmd,
3304      static_cast<GLenum>(11),
3305      static_cast<GLsizei>(12),
3306      static_cast<GLenum>(13),
3307      static_cast<GLsizei>(14),
3308      static_cast<GLsizei>(15));
3309  EXPECT_EQ(
3310      static_cast<uint32>(cmds::RenderbufferStorageMultisampleEXT::kCmdId),
3311            cmd.header.command);
3312  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3313  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3314  EXPECT_EQ(static_cast<GLsizei>(12), cmd.samples);
3315  EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
3316  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
3317  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
3318  CheckBytesWrittenMatchesExpectedSize(
3319      next_cmd, sizeof(cmd));
3320}
3321
3322TEST_F(GLES2FormatTest, FramebufferTexture2DMultisampleEXT) {
3323  cmds::FramebufferTexture2DMultisampleEXT& cmd =
3324      *GetBufferAs<cmds::FramebufferTexture2DMultisampleEXT>();
3325  void* next_cmd = cmd.Set(
3326      &cmd,
3327      static_cast<GLenum>(11),
3328      static_cast<GLenum>(12),
3329      static_cast<GLenum>(13),
3330      static_cast<GLuint>(14),
3331      static_cast<GLint>(15),
3332      static_cast<GLsizei>(16));
3333  EXPECT_EQ(
3334      static_cast<uint32>(cmds::FramebufferTexture2DMultisampleEXT::kCmdId),
3335            cmd.header.command);
3336  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3337  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3338  EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
3339  EXPECT_EQ(static_cast<GLenum>(13), cmd.textarget);
3340  EXPECT_EQ(static_cast<GLuint>(14), cmd.texture);
3341  EXPECT_EQ(static_cast<GLint>(15), cmd.level);
3342  EXPECT_EQ(static_cast<GLsizei>(16), cmd.samples);
3343  CheckBytesWrittenMatchesExpectedSize(
3344      next_cmd, sizeof(cmd));
3345}
3346
3347TEST_F(GLES2FormatTest, TexStorage2DEXT) {
3348  cmds::TexStorage2DEXT& cmd = *GetBufferAs<cmds::TexStorage2DEXT>();
3349  void* next_cmd = cmd.Set(
3350      &cmd,
3351      static_cast<GLenum>(11),
3352      static_cast<GLsizei>(12),
3353      static_cast<GLenum>(13),
3354      static_cast<GLsizei>(14),
3355      static_cast<GLsizei>(15));
3356  EXPECT_EQ(static_cast<uint32>(cmds::TexStorage2DEXT::kCmdId),
3357            cmd.header.command);
3358  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3359  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3360  EXPECT_EQ(static_cast<GLsizei>(12), cmd.levels);
3361  EXPECT_EQ(static_cast<GLenum>(13), cmd.internalFormat);
3362  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
3363  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
3364  CheckBytesWrittenMatchesExpectedSize(
3365      next_cmd, sizeof(cmd));
3366}
3367
3368TEST_F(GLES2FormatTest, GenQueriesEXT) {
3369  cmds::GenQueriesEXT& cmd = *GetBufferAs<cmds::GenQueriesEXT>();
3370  void* next_cmd = cmd.Set(
3371      &cmd,
3372      static_cast<GLsizei>(11),
3373      static_cast<uint32>(12),
3374      static_cast<uint32>(13));
3375  EXPECT_EQ(static_cast<uint32>(cmds::GenQueriesEXT::kCmdId),
3376            cmd.header.command);
3377  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3378  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
3379  EXPECT_EQ(static_cast<uint32>(12), cmd.queries_shm_id);
3380  EXPECT_EQ(static_cast<uint32>(13), cmd.queries_shm_offset);
3381  CheckBytesWrittenMatchesExpectedSize(
3382      next_cmd, sizeof(cmd));
3383}
3384
3385TEST_F(GLES2FormatTest, GenQueriesEXTImmediate) {
3386  static GLuint ids[] = { 12, 23, 34, };
3387  cmds::GenQueriesEXTImmediate& cmd =
3388      *GetBufferAs<cmds::GenQueriesEXTImmediate>();
3389  void* next_cmd = cmd.Set(
3390      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
3391  EXPECT_EQ(static_cast<uint32>(cmds::GenQueriesEXTImmediate::kCmdId),
3392            cmd.header.command);
3393  EXPECT_EQ(sizeof(cmd) +
3394            RoundSizeToMultipleOfEntries(cmd.n * 4u),
3395            cmd.header.size * 4u);
3396  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
3397  CheckBytesWrittenMatchesExpectedSize(
3398      next_cmd, sizeof(cmd) +
3399      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
3400  // TODO(gman): Check that ids were inserted;
3401}
3402
3403TEST_F(GLES2FormatTest, DeleteQueriesEXT) {
3404  cmds::DeleteQueriesEXT& cmd = *GetBufferAs<cmds::DeleteQueriesEXT>();
3405  void* next_cmd = cmd.Set(
3406      &cmd,
3407      static_cast<GLsizei>(11),
3408      static_cast<uint32>(12),
3409      static_cast<uint32>(13));
3410  EXPECT_EQ(static_cast<uint32>(cmds::DeleteQueriesEXT::kCmdId),
3411            cmd.header.command);
3412  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3413  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
3414  EXPECT_EQ(static_cast<uint32>(12), cmd.queries_shm_id);
3415  EXPECT_EQ(static_cast<uint32>(13), cmd.queries_shm_offset);
3416  CheckBytesWrittenMatchesExpectedSize(
3417      next_cmd, sizeof(cmd));
3418}
3419
3420TEST_F(GLES2FormatTest, DeleteQueriesEXTImmediate) {
3421  static GLuint ids[] = { 12, 23, 34, };
3422  cmds::DeleteQueriesEXTImmediate& cmd =
3423      *GetBufferAs<cmds::DeleteQueriesEXTImmediate>();
3424  void* next_cmd = cmd.Set(
3425      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
3426  EXPECT_EQ(static_cast<uint32>(cmds::DeleteQueriesEXTImmediate::kCmdId),
3427            cmd.header.command);
3428  EXPECT_EQ(sizeof(cmd) +
3429            RoundSizeToMultipleOfEntries(cmd.n * 4u),
3430            cmd.header.size * 4u);
3431  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
3432  CheckBytesWrittenMatchesExpectedSize(
3433      next_cmd, sizeof(cmd) +
3434      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
3435  // TODO(gman): Check that ids were inserted;
3436}
3437
3438TEST_F(GLES2FormatTest, BeginQueryEXT) {
3439  cmds::BeginQueryEXT& cmd = *GetBufferAs<cmds::BeginQueryEXT>();
3440  void* next_cmd = cmd.Set(
3441      &cmd,
3442      static_cast<GLenum>(11),
3443      static_cast<GLuint>(12),
3444      static_cast<uint32>(13),
3445      static_cast<uint32>(14));
3446  EXPECT_EQ(static_cast<uint32>(cmds::BeginQueryEXT::kCmdId),
3447            cmd.header.command);
3448  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3449  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3450  EXPECT_EQ(static_cast<GLuint>(12), cmd.id);
3451  EXPECT_EQ(static_cast<uint32>(13), cmd.sync_data_shm_id);
3452  EXPECT_EQ(static_cast<uint32>(14), cmd.sync_data_shm_offset);
3453  CheckBytesWrittenMatchesExpectedSize(
3454      next_cmd, sizeof(cmd));
3455}
3456
3457TEST_F(GLES2FormatTest, EndQueryEXT) {
3458  cmds::EndQueryEXT& cmd = *GetBufferAs<cmds::EndQueryEXT>();
3459  void* next_cmd = cmd.Set(
3460      &cmd,
3461      static_cast<GLenum>(11),
3462      static_cast<GLuint>(12));
3463  EXPECT_EQ(static_cast<uint32>(cmds::EndQueryEXT::kCmdId),
3464            cmd.header.command);
3465  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3466  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3467  EXPECT_EQ(static_cast<GLuint>(12), cmd.submit_count);
3468  CheckBytesWrittenMatchesExpectedSize(
3469      next_cmd, sizeof(cmd));
3470}
3471
3472TEST_F(GLES2FormatTest, InsertEventMarkerEXT) {
3473  cmds::InsertEventMarkerEXT& cmd = *GetBufferAs<cmds::InsertEventMarkerEXT>();
3474  void* next_cmd = cmd.Set(
3475      &cmd,
3476      static_cast<GLuint>(11));
3477  EXPECT_EQ(static_cast<uint32>(cmds::InsertEventMarkerEXT::kCmdId),
3478            cmd.header.command);
3479  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3480  EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
3481  CheckBytesWrittenMatchesExpectedSize(
3482      next_cmd, sizeof(cmd));
3483}
3484
3485TEST_F(GLES2FormatTest, PushGroupMarkerEXT) {
3486  cmds::PushGroupMarkerEXT& cmd = *GetBufferAs<cmds::PushGroupMarkerEXT>();
3487  void* next_cmd = cmd.Set(
3488      &cmd,
3489      static_cast<GLuint>(11));
3490  EXPECT_EQ(static_cast<uint32>(cmds::PushGroupMarkerEXT::kCmdId),
3491            cmd.header.command);
3492  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3493  EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
3494  CheckBytesWrittenMatchesExpectedSize(
3495      next_cmd, sizeof(cmd));
3496}
3497
3498TEST_F(GLES2FormatTest, PopGroupMarkerEXT) {
3499  cmds::PopGroupMarkerEXT& cmd = *GetBufferAs<cmds::PopGroupMarkerEXT>();
3500  void* next_cmd = cmd.Set(
3501      &cmd);
3502  EXPECT_EQ(static_cast<uint32>(cmds::PopGroupMarkerEXT::kCmdId),
3503            cmd.header.command);
3504  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3505  CheckBytesWrittenMatchesExpectedSize(
3506      next_cmd, sizeof(cmd));
3507}
3508
3509TEST_F(GLES2FormatTest, GenVertexArraysOES) {
3510  cmds::GenVertexArraysOES& cmd = *GetBufferAs<cmds::GenVertexArraysOES>();
3511  void* next_cmd = cmd.Set(
3512      &cmd,
3513      static_cast<GLsizei>(11),
3514      static_cast<uint32>(12),
3515      static_cast<uint32>(13));
3516  EXPECT_EQ(static_cast<uint32>(cmds::GenVertexArraysOES::kCmdId),
3517            cmd.header.command);
3518  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3519  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
3520  EXPECT_EQ(static_cast<uint32>(12), cmd.arrays_shm_id);
3521  EXPECT_EQ(static_cast<uint32>(13), cmd.arrays_shm_offset);
3522  CheckBytesWrittenMatchesExpectedSize(
3523      next_cmd, sizeof(cmd));
3524}
3525
3526TEST_F(GLES2FormatTest, GenVertexArraysOESImmediate) {
3527  static GLuint ids[] = { 12, 23, 34, };
3528  cmds::GenVertexArraysOESImmediate& cmd =
3529      *GetBufferAs<cmds::GenVertexArraysOESImmediate>();
3530  void* next_cmd = cmd.Set(
3531      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
3532  EXPECT_EQ(static_cast<uint32>(cmds::GenVertexArraysOESImmediate::kCmdId),
3533            cmd.header.command);
3534  EXPECT_EQ(sizeof(cmd) +
3535            RoundSizeToMultipleOfEntries(cmd.n * 4u),
3536            cmd.header.size * 4u);
3537  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
3538  CheckBytesWrittenMatchesExpectedSize(
3539      next_cmd, sizeof(cmd) +
3540      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
3541  // TODO(gman): Check that ids were inserted;
3542}
3543
3544TEST_F(GLES2FormatTest, DeleteVertexArraysOES) {
3545  cmds::DeleteVertexArraysOES& cmd =
3546      *GetBufferAs<cmds::DeleteVertexArraysOES>();
3547  void* next_cmd = cmd.Set(
3548      &cmd,
3549      static_cast<GLsizei>(11),
3550      static_cast<uint32>(12),
3551      static_cast<uint32>(13));
3552  EXPECT_EQ(static_cast<uint32>(cmds::DeleteVertexArraysOES::kCmdId),
3553            cmd.header.command);
3554  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3555  EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
3556  EXPECT_EQ(static_cast<uint32>(12), cmd.arrays_shm_id);
3557  EXPECT_EQ(static_cast<uint32>(13), cmd.arrays_shm_offset);
3558  CheckBytesWrittenMatchesExpectedSize(
3559      next_cmd, sizeof(cmd));
3560}
3561
3562TEST_F(GLES2FormatTest, DeleteVertexArraysOESImmediate) {
3563  static GLuint ids[] = { 12, 23, 34, };
3564  cmds::DeleteVertexArraysOESImmediate& cmd =
3565      *GetBufferAs<cmds::DeleteVertexArraysOESImmediate>();
3566  void* next_cmd = cmd.Set(
3567      &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
3568  EXPECT_EQ(static_cast<uint32>(cmds::DeleteVertexArraysOESImmediate::kCmdId),
3569            cmd.header.command);
3570  EXPECT_EQ(sizeof(cmd) +
3571            RoundSizeToMultipleOfEntries(cmd.n * 4u),
3572            cmd.header.size * 4u);
3573  EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
3574  CheckBytesWrittenMatchesExpectedSize(
3575      next_cmd, sizeof(cmd) +
3576      RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
3577  // TODO(gman): Check that ids were inserted;
3578}
3579
3580TEST_F(GLES2FormatTest, IsVertexArrayOES) {
3581  cmds::IsVertexArrayOES& cmd = *GetBufferAs<cmds::IsVertexArrayOES>();
3582  void* next_cmd = cmd.Set(
3583      &cmd,
3584      static_cast<GLuint>(11),
3585      static_cast<uint32>(12),
3586      static_cast<uint32>(13));
3587  EXPECT_EQ(static_cast<uint32>(cmds::IsVertexArrayOES::kCmdId),
3588            cmd.header.command);
3589  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3590  EXPECT_EQ(static_cast<GLuint>(11), cmd.array);
3591  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
3592  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
3593  CheckBytesWrittenMatchesExpectedSize(
3594      next_cmd, sizeof(cmd));
3595}
3596
3597TEST_F(GLES2FormatTest, BindVertexArrayOES) {
3598  cmds::BindVertexArrayOES& cmd = *GetBufferAs<cmds::BindVertexArrayOES>();
3599  void* next_cmd = cmd.Set(
3600      &cmd,
3601      static_cast<GLuint>(11));
3602  EXPECT_EQ(static_cast<uint32>(cmds::BindVertexArrayOES::kCmdId),
3603            cmd.header.command);
3604  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3605  EXPECT_EQ(static_cast<GLuint>(11), cmd.array);
3606  CheckBytesWrittenMatchesExpectedSize(
3607      next_cmd, sizeof(cmd));
3608}
3609
3610TEST_F(GLES2FormatTest, SwapBuffers) {
3611  cmds::SwapBuffers& cmd = *GetBufferAs<cmds::SwapBuffers>();
3612  void* next_cmd = cmd.Set(
3613      &cmd);
3614  EXPECT_EQ(static_cast<uint32>(cmds::SwapBuffers::kCmdId),
3615            cmd.header.command);
3616  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3617  CheckBytesWrittenMatchesExpectedSize(
3618      next_cmd, sizeof(cmd));
3619}
3620
3621TEST_F(GLES2FormatTest, GetMaxValueInBufferCHROMIUM) {
3622  cmds::GetMaxValueInBufferCHROMIUM& cmd =
3623      *GetBufferAs<cmds::GetMaxValueInBufferCHROMIUM>();
3624  void* next_cmd = cmd.Set(
3625      &cmd,
3626      static_cast<GLuint>(11),
3627      static_cast<GLsizei>(12),
3628      static_cast<GLenum>(13),
3629      static_cast<GLuint>(14),
3630      static_cast<uint32>(15),
3631      static_cast<uint32>(16));
3632  EXPECT_EQ(static_cast<uint32>(cmds::GetMaxValueInBufferCHROMIUM::kCmdId),
3633            cmd.header.command);
3634  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3635  EXPECT_EQ(static_cast<GLuint>(11), cmd.buffer_id);
3636  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
3637  EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
3638  EXPECT_EQ(static_cast<GLuint>(14), cmd.offset);
3639  EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_id);
3640  EXPECT_EQ(static_cast<uint32>(16), cmd.result_shm_offset);
3641  CheckBytesWrittenMatchesExpectedSize(
3642      next_cmd, sizeof(cmd));
3643}
3644
3645TEST_F(GLES2FormatTest, GenSharedIdsCHROMIUM) {
3646  cmds::GenSharedIdsCHROMIUM& cmd = *GetBufferAs<cmds::GenSharedIdsCHROMIUM>();
3647  void* next_cmd = cmd.Set(
3648      &cmd,
3649      static_cast<GLuint>(11),
3650      static_cast<GLuint>(12),
3651      static_cast<GLsizei>(13),
3652      static_cast<uint32>(14),
3653      static_cast<uint32>(15));
3654  EXPECT_EQ(static_cast<uint32>(cmds::GenSharedIdsCHROMIUM::kCmdId),
3655            cmd.header.command);
3656  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3657  EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
3658  EXPECT_EQ(static_cast<GLuint>(12), cmd.id_offset);
3659  EXPECT_EQ(static_cast<GLsizei>(13), cmd.n);
3660  EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_id);
3661  EXPECT_EQ(static_cast<uint32>(15), cmd.ids_shm_offset);
3662  CheckBytesWrittenMatchesExpectedSize(
3663      next_cmd, sizeof(cmd));
3664}
3665
3666TEST_F(GLES2FormatTest, DeleteSharedIdsCHROMIUM) {
3667  cmds::DeleteSharedIdsCHROMIUM& cmd =
3668      *GetBufferAs<cmds::DeleteSharedIdsCHROMIUM>();
3669  void* next_cmd = cmd.Set(
3670      &cmd,
3671      static_cast<GLuint>(11),
3672      static_cast<GLsizei>(12),
3673      static_cast<uint32>(13),
3674      static_cast<uint32>(14));
3675  EXPECT_EQ(static_cast<uint32>(cmds::DeleteSharedIdsCHROMIUM::kCmdId),
3676            cmd.header.command);
3677  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3678  EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
3679  EXPECT_EQ(static_cast<GLsizei>(12), cmd.n);
3680  EXPECT_EQ(static_cast<uint32>(13), cmd.ids_shm_id);
3681  EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_offset);
3682  CheckBytesWrittenMatchesExpectedSize(
3683      next_cmd, sizeof(cmd));
3684}
3685
3686TEST_F(GLES2FormatTest, RegisterSharedIdsCHROMIUM) {
3687  cmds::RegisterSharedIdsCHROMIUM& cmd =
3688      *GetBufferAs<cmds::RegisterSharedIdsCHROMIUM>();
3689  void* next_cmd = cmd.Set(
3690      &cmd,
3691      static_cast<GLuint>(11),
3692      static_cast<GLsizei>(12),
3693      static_cast<uint32>(13),
3694      static_cast<uint32>(14));
3695  EXPECT_EQ(static_cast<uint32>(cmds::RegisterSharedIdsCHROMIUM::kCmdId),
3696            cmd.header.command);
3697  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3698  EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
3699  EXPECT_EQ(static_cast<GLsizei>(12), cmd.n);
3700  EXPECT_EQ(static_cast<uint32>(13), cmd.ids_shm_id);
3701  EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_offset);
3702  CheckBytesWrittenMatchesExpectedSize(
3703      next_cmd, sizeof(cmd));
3704}
3705
3706TEST_F(GLES2FormatTest, EnableFeatureCHROMIUM) {
3707  cmds::EnableFeatureCHROMIUM& cmd =
3708      *GetBufferAs<cmds::EnableFeatureCHROMIUM>();
3709  void* next_cmd = cmd.Set(
3710      &cmd,
3711      static_cast<GLuint>(11),
3712      static_cast<uint32>(12),
3713      static_cast<uint32>(13));
3714  EXPECT_EQ(static_cast<uint32>(cmds::EnableFeatureCHROMIUM::kCmdId),
3715            cmd.header.command);
3716  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3717  EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
3718  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
3719  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
3720  CheckBytesWrittenMatchesExpectedSize(
3721      next_cmd, sizeof(cmd));
3722}
3723
3724TEST_F(GLES2FormatTest, ResizeCHROMIUM) {
3725  cmds::ResizeCHROMIUM& cmd = *GetBufferAs<cmds::ResizeCHROMIUM>();
3726  void* next_cmd = cmd.Set(
3727      &cmd,
3728      static_cast<GLuint>(11),
3729      static_cast<GLuint>(12),
3730      static_cast<GLfloat>(13));
3731  EXPECT_EQ(static_cast<uint32>(cmds::ResizeCHROMIUM::kCmdId),
3732            cmd.header.command);
3733  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3734  EXPECT_EQ(static_cast<GLuint>(11), cmd.width);
3735  EXPECT_EQ(static_cast<GLuint>(12), cmd.height);
3736  EXPECT_EQ(static_cast<GLfloat>(13), cmd.scale_factor);
3737  CheckBytesWrittenMatchesExpectedSize(
3738      next_cmd, sizeof(cmd));
3739}
3740
3741TEST_F(GLES2FormatTest, GetRequestableExtensionsCHROMIUM) {
3742  cmds::GetRequestableExtensionsCHROMIUM& cmd =
3743      *GetBufferAs<cmds::GetRequestableExtensionsCHROMIUM>();
3744  void* next_cmd = cmd.Set(
3745      &cmd,
3746      static_cast<uint32>(11));
3747  EXPECT_EQ(
3748      static_cast<uint32>(cmds::GetRequestableExtensionsCHROMIUM::kCmdId),
3749            cmd.header.command);
3750  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3751  EXPECT_EQ(static_cast<uint32>(11), cmd.bucket_id);
3752  CheckBytesWrittenMatchesExpectedSize(
3753      next_cmd, sizeof(cmd));
3754}
3755
3756TEST_F(GLES2FormatTest, RequestExtensionCHROMIUM) {
3757  cmds::RequestExtensionCHROMIUM& cmd =
3758      *GetBufferAs<cmds::RequestExtensionCHROMIUM>();
3759  void* next_cmd = cmd.Set(
3760      &cmd,
3761      static_cast<uint32>(11));
3762  EXPECT_EQ(static_cast<uint32>(cmds::RequestExtensionCHROMIUM::kCmdId),
3763            cmd.header.command);
3764  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3765  EXPECT_EQ(static_cast<uint32>(11), cmd.bucket_id);
3766  CheckBytesWrittenMatchesExpectedSize(
3767      next_cmd, sizeof(cmd));
3768}
3769
3770TEST_F(GLES2FormatTest, GetMultipleIntegervCHROMIUM) {
3771  cmds::GetMultipleIntegervCHROMIUM& cmd =
3772      *GetBufferAs<cmds::GetMultipleIntegervCHROMIUM>();
3773  void* next_cmd = cmd.Set(
3774      &cmd,
3775      static_cast<uint32>(11),
3776      static_cast<uint32>(12),
3777      static_cast<GLuint>(13),
3778      static_cast<uint32>(14),
3779      static_cast<uint32>(15),
3780      static_cast<GLsizeiptr>(16));
3781  EXPECT_EQ(static_cast<uint32>(cmds::GetMultipleIntegervCHROMIUM::kCmdId),
3782            cmd.header.command);
3783  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3784  EXPECT_EQ(static_cast<uint32>(11), cmd.pnames_shm_id);
3785  EXPECT_EQ(static_cast<uint32>(12), cmd.pnames_shm_offset);
3786  EXPECT_EQ(static_cast<GLuint>(13), cmd.count);
3787  EXPECT_EQ(static_cast<uint32>(14), cmd.results_shm_id);
3788  EXPECT_EQ(static_cast<uint32>(15), cmd.results_shm_offset);
3789  EXPECT_EQ(static_cast<GLsizeiptr>(16), cmd.size);
3790  CheckBytesWrittenMatchesExpectedSize(
3791      next_cmd, sizeof(cmd));
3792}
3793
3794TEST_F(GLES2FormatTest, GetProgramInfoCHROMIUM) {
3795  cmds::GetProgramInfoCHROMIUM& cmd =
3796      *GetBufferAs<cmds::GetProgramInfoCHROMIUM>();
3797  void* next_cmd = cmd.Set(
3798      &cmd,
3799      static_cast<GLuint>(11),
3800      static_cast<uint32>(12));
3801  EXPECT_EQ(static_cast<uint32>(cmds::GetProgramInfoCHROMIUM::kCmdId),
3802            cmd.header.command);
3803  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3804  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
3805  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
3806  CheckBytesWrittenMatchesExpectedSize(
3807      next_cmd, sizeof(cmd));
3808}
3809
3810TEST_F(GLES2FormatTest, CreateStreamTextureCHROMIUM) {
3811  cmds::CreateStreamTextureCHROMIUM& cmd =
3812      *GetBufferAs<cmds::CreateStreamTextureCHROMIUM>();
3813  void* next_cmd = cmd.Set(
3814      &cmd,
3815      static_cast<GLuint>(11),
3816      static_cast<uint32>(12),
3817      static_cast<uint32>(13));
3818  EXPECT_EQ(static_cast<uint32>(cmds::CreateStreamTextureCHROMIUM::kCmdId),
3819            cmd.header.command);
3820  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3821  EXPECT_EQ(static_cast<GLuint>(11), cmd.client_id);
3822  EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
3823  EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
3824  CheckBytesWrittenMatchesExpectedSize(
3825      next_cmd, sizeof(cmd));
3826}
3827
3828TEST_F(GLES2FormatTest, DestroyStreamTextureCHROMIUM) {
3829  cmds::DestroyStreamTextureCHROMIUM& cmd =
3830      *GetBufferAs<cmds::DestroyStreamTextureCHROMIUM>();
3831  void* next_cmd = cmd.Set(
3832      &cmd,
3833      static_cast<GLuint>(11));
3834  EXPECT_EQ(static_cast<uint32>(cmds::DestroyStreamTextureCHROMIUM::kCmdId),
3835            cmd.header.command);
3836  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3837  EXPECT_EQ(static_cast<GLuint>(11), cmd.texture);
3838  CheckBytesWrittenMatchesExpectedSize(
3839      next_cmd, sizeof(cmd));
3840}
3841
3842TEST_F(GLES2FormatTest, GetTranslatedShaderSourceANGLE) {
3843  cmds::GetTranslatedShaderSourceANGLE& cmd =
3844      *GetBufferAs<cmds::GetTranslatedShaderSourceANGLE>();
3845  void* next_cmd = cmd.Set(
3846      &cmd,
3847      static_cast<GLuint>(11),
3848      static_cast<uint32>(12));
3849  EXPECT_EQ(static_cast<uint32>(cmds::GetTranslatedShaderSourceANGLE::kCmdId),
3850            cmd.header.command);
3851  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3852  EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
3853  EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
3854  CheckBytesWrittenMatchesExpectedSize(
3855      next_cmd, sizeof(cmd));
3856}
3857
3858TEST_F(GLES2FormatTest, PostSubBufferCHROMIUM) {
3859  cmds::PostSubBufferCHROMIUM& cmd =
3860      *GetBufferAs<cmds::PostSubBufferCHROMIUM>();
3861  void* next_cmd = cmd.Set(
3862      &cmd,
3863      static_cast<GLint>(11),
3864      static_cast<GLint>(12),
3865      static_cast<GLint>(13),
3866      static_cast<GLint>(14));
3867  EXPECT_EQ(static_cast<uint32>(cmds::PostSubBufferCHROMIUM::kCmdId),
3868            cmd.header.command);
3869  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3870  EXPECT_EQ(static_cast<GLint>(11), cmd.x);
3871  EXPECT_EQ(static_cast<GLint>(12), cmd.y);
3872  EXPECT_EQ(static_cast<GLint>(13), cmd.width);
3873  EXPECT_EQ(static_cast<GLint>(14), cmd.height);
3874  CheckBytesWrittenMatchesExpectedSize(
3875      next_cmd, sizeof(cmd));
3876}
3877
3878TEST_F(GLES2FormatTest, TexImageIOSurface2DCHROMIUM) {
3879  cmds::TexImageIOSurface2DCHROMIUM& cmd =
3880      *GetBufferAs<cmds::TexImageIOSurface2DCHROMIUM>();
3881  void* next_cmd = cmd.Set(
3882      &cmd,
3883      static_cast<GLenum>(11),
3884      static_cast<GLsizei>(12),
3885      static_cast<GLsizei>(13),
3886      static_cast<GLuint>(14),
3887      static_cast<GLuint>(15));
3888  EXPECT_EQ(static_cast<uint32>(cmds::TexImageIOSurface2DCHROMIUM::kCmdId),
3889            cmd.header.command);
3890  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3891  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3892  EXPECT_EQ(static_cast<GLsizei>(12), cmd.width);
3893  EXPECT_EQ(static_cast<GLsizei>(13), cmd.height);
3894  EXPECT_EQ(static_cast<GLuint>(14), cmd.ioSurfaceId);
3895  EXPECT_EQ(static_cast<GLuint>(15), cmd.plane);
3896  CheckBytesWrittenMatchesExpectedSize(
3897      next_cmd, sizeof(cmd));
3898}
3899
3900TEST_F(GLES2FormatTest, CopyTextureCHROMIUM) {
3901  cmds::CopyTextureCHROMIUM& cmd = *GetBufferAs<cmds::CopyTextureCHROMIUM>();
3902  void* next_cmd = cmd.Set(
3903      &cmd,
3904      static_cast<GLenum>(11),
3905      static_cast<GLenum>(12),
3906      static_cast<GLenum>(13),
3907      static_cast<GLint>(14),
3908      static_cast<GLint>(15),
3909      static_cast<GLenum>(16));
3910  EXPECT_EQ(static_cast<uint32>(cmds::CopyTextureCHROMIUM::kCmdId),
3911            cmd.header.command);
3912  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3913  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3914  EXPECT_EQ(static_cast<GLenum>(12), cmd.source_id);
3915  EXPECT_EQ(static_cast<GLenum>(13), cmd.dest_id);
3916  EXPECT_EQ(static_cast<GLint>(14), cmd.level);
3917  EXPECT_EQ(static_cast<GLint>(15), cmd.internalformat);
3918  EXPECT_EQ(static_cast<GLenum>(16), cmd.dest_type);
3919  CheckBytesWrittenMatchesExpectedSize(
3920      next_cmd, sizeof(cmd));
3921}
3922
3923TEST_F(GLES2FormatTest, DrawArraysInstancedANGLE) {
3924  cmds::DrawArraysInstancedANGLE& cmd =
3925      *GetBufferAs<cmds::DrawArraysInstancedANGLE>();
3926  void* next_cmd = cmd.Set(
3927      &cmd,
3928      static_cast<GLenum>(11),
3929      static_cast<GLint>(12),
3930      static_cast<GLsizei>(13),
3931      static_cast<GLsizei>(14));
3932  EXPECT_EQ(static_cast<uint32>(cmds::DrawArraysInstancedANGLE::kCmdId),
3933            cmd.header.command);
3934  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3935  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
3936  EXPECT_EQ(static_cast<GLint>(12), cmd.first);
3937  EXPECT_EQ(static_cast<GLsizei>(13), cmd.count);
3938  EXPECT_EQ(static_cast<GLsizei>(14), cmd.primcount);
3939  CheckBytesWrittenMatchesExpectedSize(
3940      next_cmd, sizeof(cmd));
3941}
3942
3943TEST_F(GLES2FormatTest, DrawElementsInstancedANGLE) {
3944  cmds::DrawElementsInstancedANGLE& cmd =
3945      *GetBufferAs<cmds::DrawElementsInstancedANGLE>();
3946  void* next_cmd = cmd.Set(
3947      &cmd,
3948      static_cast<GLenum>(11),
3949      static_cast<GLsizei>(12),
3950      static_cast<GLenum>(13),
3951      static_cast<GLuint>(14),
3952      static_cast<GLsizei>(15));
3953  EXPECT_EQ(static_cast<uint32>(cmds::DrawElementsInstancedANGLE::kCmdId),
3954            cmd.header.command);
3955  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3956  EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
3957  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
3958  EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
3959  EXPECT_EQ(static_cast<GLuint>(14), cmd.index_offset);
3960  EXPECT_EQ(static_cast<GLsizei>(15), cmd.primcount);
3961  CheckBytesWrittenMatchesExpectedSize(
3962      next_cmd, sizeof(cmd));
3963}
3964
3965TEST_F(GLES2FormatTest, VertexAttribDivisorANGLE) {
3966  cmds::VertexAttribDivisorANGLE& cmd =
3967      *GetBufferAs<cmds::VertexAttribDivisorANGLE>();
3968  void* next_cmd = cmd.Set(
3969      &cmd,
3970      static_cast<GLuint>(11),
3971      static_cast<GLuint>(12));
3972  EXPECT_EQ(static_cast<uint32>(cmds::VertexAttribDivisorANGLE::kCmdId),
3973            cmd.header.command);
3974  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3975  EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
3976  EXPECT_EQ(static_cast<GLuint>(12), cmd.divisor);
3977  CheckBytesWrittenMatchesExpectedSize(
3978      next_cmd, sizeof(cmd));
3979}
3980
3981// TODO(gman): Write test for GenMailboxCHROMIUM
3982TEST_F(GLES2FormatTest, ProduceTextureCHROMIUM) {
3983  cmds::ProduceTextureCHROMIUM& cmd =
3984      *GetBufferAs<cmds::ProduceTextureCHROMIUM>();
3985  void* next_cmd = cmd.Set(
3986      &cmd,
3987      static_cast<GLenum>(11),
3988      static_cast<uint32>(12),
3989      static_cast<uint32>(13));
3990  EXPECT_EQ(static_cast<uint32>(cmds::ProduceTextureCHROMIUM::kCmdId),
3991            cmd.header.command);
3992  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
3993  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
3994  EXPECT_EQ(static_cast<uint32>(12), cmd.mailbox_shm_id);
3995  EXPECT_EQ(static_cast<uint32>(13), cmd.mailbox_shm_offset);
3996  CheckBytesWrittenMatchesExpectedSize(
3997      next_cmd, sizeof(cmd));
3998}
3999
4000TEST_F(GLES2FormatTest, ProduceTextureCHROMIUMImmediate) {
4001  const int kSomeBaseValueToTestWith = 51;
4002  static GLbyte data[] = {
4003    static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
4004    static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
4005    static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
4006    static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
4007    static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
4008    static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
4009    static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
4010    static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
4011    static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
4012    static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
4013    static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
4014    static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
4015    static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
4016    static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
4017    static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
4018    static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
4019    static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
4020    static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
4021    static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
4022    static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
4023    static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
4024    static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
4025    static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
4026    static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
4027    static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
4028    static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
4029    static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
4030    static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
4031    static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
4032    static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
4033    static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
4034    static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
4035    static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
4036    static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
4037    static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
4038    static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
4039    static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
4040    static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
4041    static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
4042    static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
4043    static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
4044    static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
4045    static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
4046    static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
4047    static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
4048    static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
4049    static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
4050    static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
4051    static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
4052    static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
4053    static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
4054    static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
4055    static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
4056    static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
4057    static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
4058    static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
4059    static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
4060    static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
4061    static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
4062    static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
4063    static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
4064    static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
4065    static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
4066    static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
4067  };
4068  cmds::ProduceTextureCHROMIUMImmediate& cmd =
4069      *GetBufferAs<cmds::ProduceTextureCHROMIUMImmediate>();
4070  void* next_cmd = cmd.Set(
4071      &cmd,
4072      static_cast<GLenum>(11),
4073      data);
4074  EXPECT_EQ(static_cast<uint32>(cmds::ProduceTextureCHROMIUMImmediate::kCmdId),
4075            cmd.header.command);
4076  EXPECT_EQ(sizeof(cmd) +
4077            RoundSizeToMultipleOfEntries(sizeof(data)),
4078            cmd.header.size * 4u);
4079  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4080  CheckBytesWrittenMatchesExpectedSize(
4081      next_cmd, sizeof(cmd) +
4082      RoundSizeToMultipleOfEntries(sizeof(data)));
4083  // TODO(gman): Check that data was inserted;
4084}
4085
4086TEST_F(GLES2FormatTest, ConsumeTextureCHROMIUM) {
4087  cmds::ConsumeTextureCHROMIUM& cmd =
4088      *GetBufferAs<cmds::ConsumeTextureCHROMIUM>();
4089  void* next_cmd = cmd.Set(
4090      &cmd,
4091      static_cast<GLenum>(11),
4092      static_cast<uint32>(12),
4093      static_cast<uint32>(13));
4094  EXPECT_EQ(static_cast<uint32>(cmds::ConsumeTextureCHROMIUM::kCmdId),
4095            cmd.header.command);
4096  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4097  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4098  EXPECT_EQ(static_cast<uint32>(12), cmd.mailbox_shm_id);
4099  EXPECT_EQ(static_cast<uint32>(13), cmd.mailbox_shm_offset);
4100  CheckBytesWrittenMatchesExpectedSize(
4101      next_cmd, sizeof(cmd));
4102}
4103
4104TEST_F(GLES2FormatTest, ConsumeTextureCHROMIUMImmediate) {
4105  const int kSomeBaseValueToTestWith = 51;
4106  static GLbyte data[] = {
4107    static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
4108    static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
4109    static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
4110    static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
4111    static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
4112    static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
4113    static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
4114    static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
4115    static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
4116    static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
4117    static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
4118    static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
4119    static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
4120    static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
4121    static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
4122    static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
4123    static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
4124    static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
4125    static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
4126    static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
4127    static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
4128    static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
4129    static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
4130    static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
4131    static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
4132    static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
4133    static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
4134    static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
4135    static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
4136    static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
4137    static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
4138    static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
4139    static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
4140    static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
4141    static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
4142    static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
4143    static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
4144    static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
4145    static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
4146    static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
4147    static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
4148    static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
4149    static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
4150    static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
4151    static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
4152    static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
4153    static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
4154    static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
4155    static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
4156    static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
4157    static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
4158    static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
4159    static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
4160    static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
4161    static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
4162    static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
4163    static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
4164    static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
4165    static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
4166    static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
4167    static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
4168    static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
4169    static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
4170    static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
4171  };
4172  cmds::ConsumeTextureCHROMIUMImmediate& cmd =
4173      *GetBufferAs<cmds::ConsumeTextureCHROMIUMImmediate>();
4174  void* next_cmd = cmd.Set(
4175      &cmd,
4176      static_cast<GLenum>(11),
4177      data);
4178  EXPECT_EQ(static_cast<uint32>(cmds::ConsumeTextureCHROMIUMImmediate::kCmdId),
4179            cmd.header.command);
4180  EXPECT_EQ(sizeof(cmd) +
4181            RoundSizeToMultipleOfEntries(sizeof(data)),
4182            cmd.header.size * 4u);
4183  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4184  CheckBytesWrittenMatchesExpectedSize(
4185      next_cmd, sizeof(cmd) +
4186      RoundSizeToMultipleOfEntries(sizeof(data)));
4187  // TODO(gman): Check that data was inserted;
4188}
4189
4190TEST_F(GLES2FormatTest, BindUniformLocationCHROMIUM) {
4191  cmds::BindUniformLocationCHROMIUM& cmd =
4192      *GetBufferAs<cmds::BindUniformLocationCHROMIUM>();
4193  void* next_cmd = cmd.Set(
4194      &cmd,
4195      static_cast<GLuint>(11),
4196      static_cast<GLint>(12),
4197      static_cast<uint32>(13),
4198      static_cast<uint32>(14),
4199      static_cast<uint32>(15));
4200  EXPECT_EQ(static_cast<uint32>(cmds::BindUniformLocationCHROMIUM::kCmdId),
4201            cmd.header.command);
4202  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4203  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
4204  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
4205  EXPECT_EQ(static_cast<uint32>(13), cmd.name_shm_id);
4206  EXPECT_EQ(static_cast<uint32>(14), cmd.name_shm_offset);
4207  EXPECT_EQ(static_cast<uint32>(15), cmd.data_size);
4208  CheckBytesWrittenMatchesExpectedSize(
4209      next_cmd, sizeof(cmd));
4210}
4211
4212
4213TEST_F(GLES2FormatTest, BindUniformLocationCHROMIUMImmediate) {
4214  cmds::BindUniformLocationCHROMIUMImmediate& cmd =
4215      *GetBufferAs<cmds::BindUniformLocationCHROMIUMImmediate>();
4216  static const char* const test_str = "test string";
4217  void* next_cmd = cmd.Set(
4218      &cmd,
4219      static_cast<GLuint>(11),
4220      static_cast<GLint>(12),
4221      test_str,
4222      strlen(test_str));
4223  EXPECT_EQ(
4224      static_cast<uint32>(cmds::BindUniformLocationCHROMIUMImmediate::kCmdId),
4225            cmd.header.command);
4226  EXPECT_EQ(sizeof(cmd) +
4227            RoundSizeToMultipleOfEntries(strlen(test_str)),
4228            cmd.header.size * 4u);
4229  EXPECT_EQ(static_cast<char*>(next_cmd),
4230            reinterpret_cast<char*>(&cmd) + sizeof(cmd) +
4231                RoundSizeToMultipleOfEntries(strlen(test_str)));
4232  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
4233  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
4234  EXPECT_EQ(static_cast<uint32>(strlen(test_str)), cmd.data_size);
4235  EXPECT_EQ(0, memcmp(test_str, ImmediateDataAddress(&cmd), strlen(test_str)));
4236  CheckBytesWritten(
4237      next_cmd,
4238      sizeof(cmd) + RoundSizeToMultipleOfEntries(strlen(test_str)),
4239      sizeof(cmd) + strlen(test_str));
4240}
4241
4242TEST_F(GLES2FormatTest, BindUniformLocationCHROMIUMBucket) {
4243  cmds::BindUniformLocationCHROMIUMBucket& cmd =
4244      *GetBufferAs<cmds::BindUniformLocationCHROMIUMBucket>();
4245  void* next_cmd = cmd.Set(
4246      &cmd,
4247      static_cast<GLuint>(11),
4248      static_cast<GLint>(12),
4249      static_cast<uint32>(13));
4250  EXPECT_EQ(
4251      static_cast<uint32>(cmds::BindUniformLocationCHROMIUMBucket::kCmdId),
4252            cmd.header.command);
4253  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4254  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
4255  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
4256  EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
4257  CheckBytesWrittenMatchesExpectedSize(
4258      next_cmd, sizeof(cmd));
4259}
4260
4261TEST_F(GLES2FormatTest, BindTexImage2DCHROMIUM) {
4262  cmds::BindTexImage2DCHROMIUM& cmd =
4263      *GetBufferAs<cmds::BindTexImage2DCHROMIUM>();
4264  void* next_cmd = cmd.Set(
4265      &cmd,
4266      static_cast<GLenum>(11),
4267      static_cast<GLint>(12));
4268  EXPECT_EQ(static_cast<uint32>(cmds::BindTexImage2DCHROMIUM::kCmdId),
4269            cmd.header.command);
4270  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4271  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4272  EXPECT_EQ(static_cast<GLint>(12), cmd.imageId);
4273  CheckBytesWrittenMatchesExpectedSize(
4274      next_cmd, sizeof(cmd));
4275}
4276
4277TEST_F(GLES2FormatTest, ReleaseTexImage2DCHROMIUM) {
4278  cmds::ReleaseTexImage2DCHROMIUM& cmd =
4279      *GetBufferAs<cmds::ReleaseTexImage2DCHROMIUM>();
4280  void* next_cmd = cmd.Set(
4281      &cmd,
4282      static_cast<GLenum>(11),
4283      static_cast<GLint>(12));
4284  EXPECT_EQ(static_cast<uint32>(cmds::ReleaseTexImage2DCHROMIUM::kCmdId),
4285            cmd.header.command);
4286  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4287  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4288  EXPECT_EQ(static_cast<GLint>(12), cmd.imageId);
4289  CheckBytesWrittenMatchesExpectedSize(
4290      next_cmd, sizeof(cmd));
4291}
4292
4293TEST_F(GLES2FormatTest, TraceBeginCHROMIUM) {
4294  cmds::TraceBeginCHROMIUM& cmd = *GetBufferAs<cmds::TraceBeginCHROMIUM>();
4295  void* next_cmd = cmd.Set(
4296      &cmd,
4297      static_cast<GLuint>(11));
4298  EXPECT_EQ(static_cast<uint32>(cmds::TraceBeginCHROMIUM::kCmdId),
4299            cmd.header.command);
4300  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4301  EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
4302  CheckBytesWrittenMatchesExpectedSize(
4303      next_cmd, sizeof(cmd));
4304}
4305
4306TEST_F(GLES2FormatTest, TraceEndCHROMIUM) {
4307  cmds::TraceEndCHROMIUM& cmd = *GetBufferAs<cmds::TraceEndCHROMIUM>();
4308  void* next_cmd = cmd.Set(
4309      &cmd);
4310  EXPECT_EQ(static_cast<uint32>(cmds::TraceEndCHROMIUM::kCmdId),
4311            cmd.header.command);
4312  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4313  CheckBytesWrittenMatchesExpectedSize(
4314      next_cmd, sizeof(cmd));
4315}
4316
4317TEST_F(GLES2FormatTest, AsyncTexSubImage2DCHROMIUM) {
4318  cmds::AsyncTexSubImage2DCHROMIUM& cmd =
4319      *GetBufferAs<cmds::AsyncTexSubImage2DCHROMIUM>();
4320  void* next_cmd = cmd.Set(
4321      &cmd,
4322      static_cast<GLenum>(11),
4323      static_cast<GLint>(12),
4324      static_cast<GLint>(13),
4325      static_cast<GLint>(14),
4326      static_cast<GLsizei>(15),
4327      static_cast<GLsizei>(16),
4328      static_cast<GLenum>(17),
4329      static_cast<GLenum>(18),
4330      static_cast<uint32>(19),
4331      static_cast<uint32>(20));
4332  EXPECT_EQ(static_cast<uint32>(cmds::AsyncTexSubImage2DCHROMIUM::kCmdId),
4333            cmd.header.command);
4334  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4335  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4336  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
4337  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
4338  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
4339  EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
4340  EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
4341  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
4342  EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
4343  EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_id);
4344  EXPECT_EQ(static_cast<uint32>(20), cmd.data_shm_offset);
4345  CheckBytesWrittenMatchesExpectedSize(
4346      next_cmd, sizeof(cmd));
4347}
4348
4349TEST_F(GLES2FormatTest, AsyncTexImage2DCHROMIUM) {
4350  cmds::AsyncTexImage2DCHROMIUM& cmd =
4351      *GetBufferAs<cmds::AsyncTexImage2DCHROMIUM>();
4352  void* next_cmd = cmd.Set(
4353      &cmd,
4354      static_cast<GLenum>(11),
4355      static_cast<GLint>(12),
4356      static_cast<GLint>(13),
4357      static_cast<GLsizei>(14),
4358      static_cast<GLsizei>(15),
4359      static_cast<GLint>(16),
4360      static_cast<GLenum>(17),
4361      static_cast<GLenum>(18),
4362      static_cast<uint32>(19),
4363      static_cast<uint32>(20));
4364  EXPECT_EQ(static_cast<uint32>(cmds::AsyncTexImage2DCHROMIUM::kCmdId),
4365            cmd.header.command);
4366  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4367  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4368  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
4369  EXPECT_EQ(static_cast<GLint>(13), cmd.internalformat);
4370  EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
4371  EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
4372  EXPECT_EQ(static_cast<GLint>(16), cmd.border);
4373  EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
4374  EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
4375  EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
4376  EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
4377  CheckBytesWrittenMatchesExpectedSize(
4378      next_cmd, sizeof(cmd));
4379}
4380
4381TEST_F(GLES2FormatTest, WaitAsyncTexImage2DCHROMIUM) {
4382  cmds::WaitAsyncTexImage2DCHROMIUM& cmd =
4383      *GetBufferAs<cmds::WaitAsyncTexImage2DCHROMIUM>();
4384  void* next_cmd = cmd.Set(
4385      &cmd,
4386      static_cast<GLenum>(11));
4387  EXPECT_EQ(static_cast<uint32>(cmds::WaitAsyncTexImage2DCHROMIUM::kCmdId),
4388            cmd.header.command);
4389  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4390  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4391  CheckBytesWrittenMatchesExpectedSize(
4392      next_cmd, sizeof(cmd));
4393}
4394
4395TEST_F(GLES2FormatTest, DiscardFramebufferEXT) {
4396  cmds::DiscardFramebufferEXT& cmd =
4397      *GetBufferAs<cmds::DiscardFramebufferEXT>();
4398  void* next_cmd = cmd.Set(
4399      &cmd,
4400      static_cast<GLenum>(11),
4401      static_cast<GLsizei>(12),
4402      static_cast<uint32>(13),
4403      static_cast<uint32>(14));
4404  EXPECT_EQ(static_cast<uint32>(cmds::DiscardFramebufferEXT::kCmdId),
4405            cmd.header.command);
4406  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4407  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
4408  EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
4409  EXPECT_EQ(static_cast<uint32>(13), cmd.attachments_shm_id);
4410  EXPECT_EQ(static_cast<uint32>(14), cmd.attachments_shm_offset);
4411  CheckBytesWrittenMatchesExpectedSize(
4412      next_cmd, sizeof(cmd));
4413}
4414
4415TEST_F(GLES2FormatTest, DiscardFramebufferEXTImmediate) {
4416  const int kSomeBaseValueToTestWith = 51;
4417  static GLenum data[] = {
4418    static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
4419    static_cast<GLenum>(kSomeBaseValueToTestWith + 1),
4420  };
4421  cmds::DiscardFramebufferEXTImmediate& cmd =
4422      *GetBufferAs<cmds::DiscardFramebufferEXTImmediate>();
4423  const GLsizei kNumElements = 2;
4424  const size_t kExpectedCmdSize =
4425      sizeof(cmd) + kNumElements * sizeof(GLenum) * 1;
4426  void* next_cmd = cmd.Set(
4427      &cmd,
4428      static_cast<GLenum>(1),
4429      static_cast<GLsizei>(2),
4430      data);
4431  EXPECT_EQ(static_cast<uint32>(cmds::DiscardFramebufferEXTImmediate::kCmdId),
4432            cmd.header.command);
4433  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
4434  EXPECT_EQ(static_cast<GLenum>(1), cmd.target);
4435  EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
4436  CheckBytesWrittenMatchesExpectedSize(
4437      next_cmd, sizeof(cmd) +
4438      RoundSizeToMultipleOfEntries(sizeof(data)));
4439  // TODO(gman): Check that data was inserted;
4440}
4441
4442TEST_F(GLES2FormatTest, LoseContextCHROMIUM) {
4443  cmds::LoseContextCHROMIUM& cmd = *GetBufferAs<cmds::LoseContextCHROMIUM>();
4444  void* next_cmd = cmd.Set(
4445      &cmd,
4446      static_cast<GLenum>(11),
4447      static_cast<GLenum>(12));
4448  EXPECT_EQ(static_cast<uint32>(cmds::LoseContextCHROMIUM::kCmdId),
4449            cmd.header.command);
4450  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4451  EXPECT_EQ(static_cast<GLenum>(11), cmd.current);
4452  EXPECT_EQ(static_cast<GLenum>(12), cmd.other);
4453  CheckBytesWrittenMatchesExpectedSize(
4454      next_cmd, sizeof(cmd));
4455}
4456
4457// TODO(gman): Write test for InsertSyncPointCHROMIUM
4458TEST_F(GLES2FormatTest, WaitSyncPointCHROMIUM) {
4459  cmds::WaitSyncPointCHROMIUM& cmd =
4460      *GetBufferAs<cmds::WaitSyncPointCHROMIUM>();
4461  void* next_cmd = cmd.Set(
4462      &cmd,
4463      static_cast<GLuint>(11));
4464  EXPECT_EQ(static_cast<uint32>(cmds::WaitSyncPointCHROMIUM::kCmdId),
4465            cmd.header.command);
4466  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4467  EXPECT_EQ(static_cast<GLuint>(11), cmd.sync_point);
4468  CheckBytesWrittenMatchesExpectedSize(
4469      next_cmd, sizeof(cmd));
4470}
4471
4472TEST_F(GLES2FormatTest, DrawBuffersEXT) {
4473  cmds::DrawBuffersEXT& cmd = *GetBufferAs<cmds::DrawBuffersEXT>();
4474  void* next_cmd = cmd.Set(
4475      &cmd,
4476      static_cast<GLsizei>(11),
4477      static_cast<uint32>(12),
4478      static_cast<uint32>(13));
4479  EXPECT_EQ(static_cast<uint32>(cmds::DrawBuffersEXT::kCmdId),
4480            cmd.header.command);
4481  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
4482  EXPECT_EQ(static_cast<GLsizei>(11), cmd.count);
4483  EXPECT_EQ(static_cast<uint32>(12), cmd.bufs_shm_id);
4484  EXPECT_EQ(static_cast<uint32>(13), cmd.bufs_shm_offset);
4485  CheckBytesWrittenMatchesExpectedSize(
4486      next_cmd, sizeof(cmd));
4487}
4488
4489TEST_F(GLES2FormatTest, DrawBuffersEXTImmediate) {
4490  const int kSomeBaseValueToTestWith = 51;
4491  static GLenum data[] = {
4492    static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
4493  };
4494  cmds::DrawBuffersEXTImmediate& cmd =
4495      *GetBufferAs<cmds::DrawBuffersEXTImmediate>();
4496  const GLsizei kNumElements = 1;
4497  const size_t kExpectedCmdSize =
4498      sizeof(cmd) + kNumElements * sizeof(GLenum) * 1;
4499  void* next_cmd = cmd.Set(
4500      &cmd,
4501      static_cast<GLsizei>(1),
4502      data);
4503  EXPECT_EQ(static_cast<uint32>(cmds::DrawBuffersEXTImmediate::kCmdId),
4504            cmd.header.command);
4505  EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
4506  EXPECT_EQ(static_cast<GLsizei>(1), cmd.count);
4507  CheckBytesWrittenMatchesExpectedSize(
4508      next_cmd, sizeof(cmd) +
4509      RoundSizeToMultipleOfEntries(sizeof(data)));
4510  // TODO(gman): Check that data was inserted;
4511}
4512
4513#endif  // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_
4514
4515