1 // Copyright 2014 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 // It's formatted by clang-format using chromium coding style:
8 //    clang-format -i -style=chromium filename
9 // DO NOT EDIT!
10 
11 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
12 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
13 
14 static const GLenum valid_attachment_table[] = {
15     GL_COLOR_ATTACHMENT0,
16     GL_DEPTH_ATTACHMENT,
17     GL_STENCIL_ATTACHMENT,
18 };
19 
20 static const GLenum valid_attachment_table_es3[] = {
21     GL_DEPTH_STENCIL_ATTACHMENT,
22 };
23 
24 static const GLenum valid_attachment_query_table[] = {
25     GL_COLOR_ATTACHMENT0,
26     GL_DEPTH_ATTACHMENT,
27     GL_STENCIL_ATTACHMENT,
28 };
29 
30 static const GLenum valid_attachment_query_table_es3[] = {
31     GL_DEPTH_STENCIL_ATTACHMENT,
32     GL_COLOR_EXT,
33     GL_DEPTH_EXT,
34     GL_STENCIL_EXT,
35 };
36 
IsValid(const GLenum value)37 bool Validators::BackbufferAttachmentValidator::IsValid(
38     const GLenum value) const {
39   switch (value) {
40     case GL_COLOR_EXT:
41     case GL_DEPTH_EXT:
42     case GL_STENCIL_EXT:
43       return true;
44   }
45   return false;
46 }
47 
IsValid(const GLenum value)48 bool Validators::BlitFilterValidator::IsValid(const GLenum value) const {
49   switch (value) {
50     case GL_NEAREST:
51     case GL_LINEAR:
52       return true;
53   }
54   return false;
55 }
56 
IsValid(const GLenum value)57 bool Validators::BufferModeValidator::IsValid(const GLenum value) const {
58   switch (value) {
59     case GL_INTERLEAVED_ATTRIBS:
60     case GL_SEPARATE_ATTRIBS:
61       return true;
62   }
63   return false;
64 }
65 
BufferParameterValidator()66 Validators::BufferParameterValidator::BufferParameterValidator()
67     : is_es3_(false) {}
IsValid(const GLenum value)68 bool Validators::BufferParameterValidator::IsValid(const GLenum value) const {
69   switch (value) {
70     case GL_BUFFER_SIZE:
71     case GL_BUFFER_USAGE:
72       return true;
73     case GL_BUFFER_ACCESS_FLAGS:
74     case GL_BUFFER_MAPPED:
75       return is_es3_;
76   }
77   return false;
78 }
79 
IsValid(const GLenum value)80 bool Validators::BufferParameter64Validator::IsValid(const GLenum value) const {
81   switch (value) {
82     case GL_BUFFER_SIZE:
83     case GL_BUFFER_MAP_LENGTH:
84     case GL_BUFFER_MAP_OFFSET:
85       return true;
86   }
87   return false;
88 }
89 
BufferTargetValidator()90 Validators::BufferTargetValidator::BufferTargetValidator() : is_es3_(false) {}
IsValid(const GLenum value)91 bool Validators::BufferTargetValidator::IsValid(const GLenum value) const {
92   switch (value) {
93     case GL_ARRAY_BUFFER:
94     case GL_ELEMENT_ARRAY_BUFFER:
95       return true;
96     case GL_COPY_READ_BUFFER:
97     case GL_COPY_WRITE_BUFFER:
98     case GL_PIXEL_PACK_BUFFER:
99     case GL_PIXEL_UNPACK_BUFFER:
100     case GL_TRANSFORM_FEEDBACK_BUFFER:
101     case GL_UNIFORM_BUFFER:
102       return is_es3_;
103   }
104   return false;
105 }
106 
BufferUsageValidator()107 Validators::BufferUsageValidator::BufferUsageValidator() : is_es3_(false) {}
IsValid(const GLenum value)108 bool Validators::BufferUsageValidator::IsValid(const GLenum value) const {
109   switch (value) {
110     case GL_STREAM_DRAW:
111     case GL_STATIC_DRAW:
112     case GL_DYNAMIC_DRAW:
113       return true;
114     case GL_STREAM_READ:
115     case GL_STREAM_COPY:
116     case GL_STATIC_READ:
117     case GL_STATIC_COPY:
118     case GL_DYNAMIC_READ:
119     case GL_DYNAMIC_COPY:
120       return is_es3_;
121   }
122   return false;
123 }
124 
125 static const GLenum valid_bufferfi_table[] = {
126     GL_DEPTH_STENCIL,
127 };
128 
IsValid(const GLenum value)129 bool Validators::BufferfvValidator::IsValid(const GLenum value) const {
130   switch (value) {
131     case GL_COLOR:
132     case GL_DEPTH:
133       return true;
134   }
135   return false;
136 }
137 
IsValid(const GLenum value)138 bool Validators::BufferivValidator::IsValid(const GLenum value) const {
139   switch (value) {
140     case GL_COLOR:
141     case GL_STENCIL:
142       return true;
143   }
144   return false;
145 }
146 
147 static const GLenum valid_bufferuiv_table[] = {
148     GL_COLOR,
149 };
150 
151 static const GLenum valid_capability_table[] = {
152     GL_BLEND,           GL_CULL_FACE,           GL_DEPTH_TEST,
153     GL_DITHER,          GL_POLYGON_OFFSET_FILL, GL_SAMPLE_ALPHA_TO_COVERAGE,
154     GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST,        GL_STENCIL_TEST,
155 };
156 
157 static const GLenum valid_capability_table_es3[] = {
158     GL_RASTERIZER_DISCARD,
159     GL_PRIMITIVE_RESTART_FIXED_INDEX,
160 };
161 
IsValid(const GLenum value)162 bool Validators::CmpFunctionValidator::IsValid(const GLenum value) const {
163   switch (value) {
164     case GL_NEVER:
165     case GL_LESS:
166     case GL_EQUAL:
167     case GL_LEQUAL:
168     case GL_GREATER:
169     case GL_NOTEQUAL:
170     case GL_GEQUAL:
171     case GL_ALWAYS:
172       return true;
173   }
174   return false;
175 }
176 
177 static const GLenum valid_coverage_modulation_components_table[] = {
178     GL_RGB,
179     GL_RGBA,
180     GL_ALPHA,
181     GL_NONE,
182 };
183 
IsValid(const GLenum value)184 bool Validators::DrawModeValidator::IsValid(const GLenum value) const {
185   switch (value) {
186     case GL_POINTS:
187     case GL_LINE_STRIP:
188     case GL_LINE_LOOP:
189     case GL_LINES:
190     case GL_TRIANGLE_STRIP:
191     case GL_TRIANGLE_FAN:
192     case GL_TRIANGLES:
193       return true;
194   }
195   return false;
196 }
197 
198 static const GLenum valid_dst_blend_factor_table[] = {
199     GL_ZERO,           GL_ONE,
200     GL_SRC_COLOR,      GL_ONE_MINUS_SRC_COLOR,
201     GL_DST_COLOR,      GL_ONE_MINUS_DST_COLOR,
202     GL_SRC_ALPHA,      GL_ONE_MINUS_SRC_ALPHA,
203     GL_DST_ALPHA,      GL_ONE_MINUS_DST_ALPHA,
204     GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR,
205     GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA,
206 };
207 
208 static const GLenum valid_dst_blend_factor_table_es3[] = {
209     GL_SRC_ALPHA_SATURATE,
210 };
211 
212 static const GLenum valid_equation_table[] = {
213     GL_FUNC_ADD,
214     GL_FUNC_SUBTRACT,
215     GL_FUNC_REVERSE_SUBTRACT,
216 };
217 
218 static const GLenum valid_equation_table_es3[] = {
219     GL_MIN,
220     GL_MAX,
221 };
222 
IsValid(const GLenum value)223 bool Validators::FaceModeValidator::IsValid(const GLenum value) const {
224   switch (value) {
225     case GL_CW:
226     case GL_CCW:
227       return true;
228   }
229   return false;
230 }
231 
IsValid(const GLenum value)232 bool Validators::FaceTypeValidator::IsValid(const GLenum value) const {
233   switch (value) {
234     case GL_FRONT:
235     case GL_BACK:
236     case GL_FRONT_AND_BACK:
237       return true;
238   }
239   return false;
240 }
241 
242 static const GLenum valid_framebuffer_attachment_parameter_table[] = {
243     GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
244     GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
245     GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
246     GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
247 };
248 
249 static const GLenum valid_framebuffer_attachment_parameter_table_es3[] = {
250     GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE,
251     GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,
252     GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,
253     GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
254     GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE,
255     GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,
256     GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
257     GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
258     GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER,
259 };
260 
261 static const GLenum valid_framebuffer_target_table[] = {
262     GL_FRAMEBUFFER,
263 };
264 
265 static const GLenum valid_framebuffer_target_table_es3[] = {
266     GL_DRAW_FRAMEBUFFER,
267     GL_READ_FRAMEBUFFER,
268 };
269 
270 static const GLenum valid_g_l_state_table[] = {
271     GL_ACTIVE_TEXTURE,
272     GL_ALIASED_LINE_WIDTH_RANGE,
273     GL_ALIASED_POINT_SIZE_RANGE,
274     GL_ALPHA_BITS,
275     GL_ARRAY_BUFFER_BINDING,
276     GL_BLUE_BITS,
277     GL_COMPRESSED_TEXTURE_FORMATS,
278     GL_CURRENT_PROGRAM,
279     GL_DEPTH_BITS,
280     GL_DEPTH_RANGE,
281     GL_ELEMENT_ARRAY_BUFFER_BINDING,
282     GL_FRAMEBUFFER_BINDING,
283     GL_GENERATE_MIPMAP_HINT,
284     GL_GREEN_BITS,
285     GL_IMPLEMENTATION_COLOR_READ_FORMAT,
286     GL_IMPLEMENTATION_COLOR_READ_TYPE,
287     GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
288     GL_MAX_CUBE_MAP_TEXTURE_SIZE,
289     GL_MAX_FRAGMENT_UNIFORM_VECTORS,
290     GL_MAX_RENDERBUFFER_SIZE,
291     GL_MAX_TEXTURE_IMAGE_UNITS,
292     GL_MAX_TEXTURE_SIZE,
293     GL_MAX_VARYING_VECTORS,
294     GL_MAX_VERTEX_ATTRIBS,
295     GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
296     GL_MAX_VERTEX_UNIFORM_VECTORS,
297     GL_MAX_VIEWPORT_DIMS,
298     GL_NUM_COMPRESSED_TEXTURE_FORMATS,
299     GL_NUM_SHADER_BINARY_FORMATS,
300     GL_PACK_ALIGNMENT,
301     GL_RED_BITS,
302     GL_RENDERBUFFER_BINDING,
303     GL_SAMPLE_BUFFERS,
304     GL_SAMPLE_COVERAGE_INVERT,
305     GL_SAMPLE_COVERAGE_VALUE,
306     GL_SAMPLES,
307     GL_SCISSOR_BOX,
308     GL_SHADER_BINARY_FORMATS,
309     GL_SHADER_COMPILER,
310     GL_SUBPIXEL_BITS,
311     GL_STENCIL_BITS,
312     GL_TEXTURE_BINDING_2D,
313     GL_TEXTURE_BINDING_CUBE_MAP,
314     GL_TEXTURE_FILTERING_HINT_CHROMIUM,
315     GL_UNPACK_ALIGNMENT,
316     GL_BIND_GENERATES_RESOURCE_CHROMIUM,
317     GL_VERTEX_ARRAY_BINDING_OES,
318     GL_VIEWPORT,
319     GL_BLEND_COLOR,
320     GL_BLEND_EQUATION_RGB,
321     GL_BLEND_EQUATION_ALPHA,
322     GL_BLEND_SRC_RGB,
323     GL_BLEND_DST_RGB,
324     GL_BLEND_SRC_ALPHA,
325     GL_BLEND_DST_ALPHA,
326     GL_COLOR_CLEAR_VALUE,
327     GL_DEPTH_CLEAR_VALUE,
328     GL_STENCIL_CLEAR_VALUE,
329     GL_COLOR_WRITEMASK,
330     GL_CULL_FACE_MODE,
331     GL_DEPTH_FUNC,
332     GL_DEPTH_WRITEMASK,
333     GL_FRONT_FACE,
334     GL_LINE_WIDTH,
335     GL_POLYGON_OFFSET_FACTOR,
336     GL_POLYGON_OFFSET_UNITS,
337     GL_STENCIL_FUNC,
338     GL_STENCIL_REF,
339     GL_STENCIL_VALUE_MASK,
340     GL_STENCIL_BACK_FUNC,
341     GL_STENCIL_BACK_REF,
342     GL_STENCIL_BACK_VALUE_MASK,
343     GL_STENCIL_WRITEMASK,
344     GL_STENCIL_BACK_WRITEMASK,
345     GL_STENCIL_FAIL,
346     GL_STENCIL_PASS_DEPTH_FAIL,
347     GL_STENCIL_PASS_DEPTH_PASS,
348     GL_STENCIL_BACK_FAIL,
349     GL_STENCIL_BACK_PASS_DEPTH_FAIL,
350     GL_STENCIL_BACK_PASS_DEPTH_PASS,
351     GL_BLEND,
352     GL_CULL_FACE,
353     GL_DEPTH_TEST,
354     GL_DITHER,
355     GL_POLYGON_OFFSET_FILL,
356     GL_SAMPLE_ALPHA_TO_COVERAGE,
357     GL_SAMPLE_COVERAGE,
358     GL_SCISSOR_TEST,
359     GL_STENCIL_TEST,
360     GL_RASTERIZER_DISCARD,
361     GL_PRIMITIVE_RESTART_FIXED_INDEX,
362 };
363 
364 static const GLenum valid_g_l_state_table_es3[] = {
365     GL_COPY_READ_BUFFER_BINDING,
366     GL_COPY_WRITE_BUFFER_BINDING,
367     GL_DRAW_BUFFER0,
368     GL_DRAW_BUFFER1,
369     GL_DRAW_BUFFER2,
370     GL_DRAW_BUFFER3,
371     GL_DRAW_BUFFER4,
372     GL_DRAW_BUFFER5,
373     GL_DRAW_BUFFER6,
374     GL_DRAW_BUFFER7,
375     GL_DRAW_BUFFER8,
376     GL_DRAW_BUFFER9,
377     GL_DRAW_BUFFER10,
378     GL_DRAW_BUFFER11,
379     GL_DRAW_BUFFER12,
380     GL_DRAW_BUFFER13,
381     GL_DRAW_BUFFER14,
382     GL_DRAW_BUFFER15,
383     GL_DRAW_FRAMEBUFFER_BINDING,
384     GL_FRAGMENT_SHADER_DERIVATIVE_HINT,
385     GL_GPU_DISJOINT_EXT,
386     GL_MAJOR_VERSION,
387     GL_MAX_3D_TEXTURE_SIZE,
388     GL_MAX_ARRAY_TEXTURE_LAYERS,
389     GL_MAX_COLOR_ATTACHMENTS,
390     GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS,
391     GL_MAX_COMBINED_UNIFORM_BLOCKS,
392     GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS,
393     GL_MAX_DRAW_BUFFERS,
394     GL_MAX_ELEMENT_INDEX,
395     GL_MAX_ELEMENTS_INDICES,
396     GL_MAX_ELEMENTS_VERTICES,
397     GL_MAX_FRAGMENT_INPUT_COMPONENTS,
398     GL_MAX_FRAGMENT_UNIFORM_BLOCKS,
399     GL_MAX_FRAGMENT_UNIFORM_COMPONENTS,
400     GL_MAX_PROGRAM_TEXEL_OFFSET,
401     GL_MAX_SAMPLES,
402     GL_MAX_SERVER_WAIT_TIMEOUT,
403     GL_MAX_TEXTURE_LOD_BIAS,
404     GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS,
405     GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,
406     GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS,
407     GL_MAX_UNIFORM_BLOCK_SIZE,
408     GL_MAX_UNIFORM_BUFFER_BINDINGS,
409     GL_MAX_VARYING_COMPONENTS,
410     GL_MAX_VERTEX_OUTPUT_COMPONENTS,
411     GL_MAX_VERTEX_UNIFORM_BLOCKS,
412     GL_MAX_VERTEX_UNIFORM_COMPONENTS,
413     GL_MIN_PROGRAM_TEXEL_OFFSET,
414     GL_MINOR_VERSION,
415     GL_NUM_EXTENSIONS,
416     GL_NUM_PROGRAM_BINARY_FORMATS,
417     GL_PACK_ROW_LENGTH,
418     GL_PACK_SKIP_PIXELS,
419     GL_PACK_SKIP_ROWS,
420     GL_PIXEL_PACK_BUFFER_BINDING,
421     GL_PIXEL_UNPACK_BUFFER_BINDING,
422     GL_PROGRAM_BINARY_FORMATS,
423     GL_READ_BUFFER,
424     GL_READ_FRAMEBUFFER_BINDING,
425     GL_SAMPLER_BINDING,
426     GL_TIMESTAMP_EXT,
427     GL_TEXTURE_BINDING_2D_ARRAY,
428     GL_TEXTURE_BINDING_3D,
429     GL_TRANSFORM_FEEDBACK_BINDING,
430     GL_TRANSFORM_FEEDBACK_ACTIVE,
431     GL_TRANSFORM_FEEDBACK_BUFFER_BINDING,
432     GL_TRANSFORM_FEEDBACK_PAUSED,
433     GL_UNIFORM_BUFFER_BINDING,
434     GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT,
435     GL_UNPACK_IMAGE_HEIGHT,
436     GL_UNPACK_ROW_LENGTH,
437     GL_UNPACK_SKIP_IMAGES,
438     GL_UNPACK_SKIP_PIXELS,
439     GL_UNPACK_SKIP_ROWS,
440     GL_BLEND_EQUATION_RGB,
441     GL_BLEND_EQUATION_ALPHA,
442     GL_BLEND_SRC_RGB,
443     GL_BLEND_SRC_ALPHA,
444     GL_BLEND_DST_RGB,
445     GL_BLEND_DST_ALPHA,
446     GL_COLOR_WRITEMASK,
447 };
448 
IsValid(const GLenum value)449 bool Validators::GetMaxIndexTypeValidator::IsValid(const GLenum value) const {
450   switch (value) {
451     case GL_UNSIGNED_BYTE:
452     case GL_UNSIGNED_SHORT:
453     case GL_UNSIGNED_INT:
454       return true;
455   }
456   return false;
457 }
458 
459 static const GLenum valid_get_tex_param_target_table[] = {
460     GL_TEXTURE_2D,
461     GL_TEXTURE_CUBE_MAP,
462 };
463 
464 static const GLenum valid_get_tex_param_target_table_es3[] = {
465     GL_TEXTURE_2D_ARRAY,
466     GL_TEXTURE_3D,
467 };
468 
IsValid(const GLenum value)469 bool Validators::HintModeValidator::IsValid(const GLenum value) const {
470   switch (value) {
471     case GL_FASTEST:
472     case GL_NICEST:
473     case GL_DONT_CARE:
474       return true;
475   }
476   return false;
477 }
478 
479 static const GLenum valid_hint_target_table[] = {
480     GL_GENERATE_MIPMAP_HINT,
481     GL_TEXTURE_FILTERING_HINT_CHROMIUM,
482 };
483 
484 static const GLenum valid_hint_target_table_es3[] = {
485     GL_FRAGMENT_SHADER_DERIVATIVE_HINT,
486 };
487 
488 static const GLenum valid_image_internal_format_table[] = {
489     GL_RGB,
490     GL_RGB_YCRCB_420_CHROMIUM,
491     GL_RGB_YCBCR_422_CHROMIUM,
492     GL_RGB_YCBCR_420V_CHROMIUM,
493     GL_RGB_YCBCR_P010_CHROMIUM,
494     GL_RGBA,
495 };
496 
497 static const GLenum valid_index_type_table[] = {
498     GL_UNSIGNED_BYTE,
499     GL_UNSIGNED_SHORT,
500 };
501 
502 static const GLenum valid_index_type_table_es3[] = {
503     GL_UNSIGNED_INT,
504 };
505 
IsValid(const GLenum value)506 bool Validators::IndexedBufferTargetValidator::IsValid(
507     const GLenum value) const {
508   switch (value) {
509     case GL_TRANSFORM_FEEDBACK_BUFFER:
510     case GL_UNIFORM_BUFFER:
511       return true;
512   }
513   return false;
514 }
515 
516 static const GLenum valid_indexed_g_l_state_table[] = {
517     GL_TRANSFORM_FEEDBACK_BUFFER_BINDING,
518     GL_TRANSFORM_FEEDBACK_BUFFER_SIZE,
519     GL_TRANSFORM_FEEDBACK_BUFFER_START,
520     GL_UNIFORM_BUFFER_BINDING,
521     GL_UNIFORM_BUFFER_SIZE,
522     GL_UNIFORM_BUFFER_START,
523     GL_BLEND_EQUATION_RGB,
524     GL_BLEND_EQUATION_ALPHA,
525     GL_BLEND_SRC_RGB,
526     GL_BLEND_SRC_ALPHA,
527     GL_BLEND_DST_RGB,
528     GL_BLEND_DST_ALPHA,
529     GL_COLOR_WRITEMASK,
530 };
531 
IsValid(const GLenum value)532 bool Validators::InternalFormatParameterValidator::IsValid(
533     const GLenum value) const {
534   switch (value) {
535     case GL_NUM_SAMPLE_COUNTS:
536     case GL_SAMPLES:
537       return true;
538   }
539   return false;
540 }
541 
IsValid(const GLenum value)542 bool Validators::MapBufferAccessValidator::IsValid(const GLenum value) const {
543   switch (value) {
544     case GL_MAP_READ_BIT:
545     case GL_MAP_WRITE_BIT:
546     case GL_MAP_INVALIDATE_RANGE_BIT:
547     case GL_MAP_INVALIDATE_BUFFER_BIT:
548     case GL_MAP_FLUSH_EXPLICIT_BIT:
549     case GL_MAP_UNSYNCHRONIZED_BIT:
550       return true;
551   }
552   return false;
553 }
554 
555 static const GLenum valid_pixel_store_table[] = {
556     GL_PACK_ALIGNMENT,
557     GL_UNPACK_ALIGNMENT,
558 };
559 
560 static const GLenum valid_pixel_store_table_es3[] = {
561     GL_PACK_ROW_LENGTH,   GL_PACK_SKIP_PIXELS,    GL_PACK_SKIP_ROWS,
562     GL_UNPACK_ROW_LENGTH, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_SKIP_PIXELS,
563     GL_UNPACK_SKIP_ROWS,  GL_UNPACK_SKIP_IMAGES,
564 };
565 
IsValid(const GLint value)566 bool Validators::PixelStoreAlignmentValidator::IsValid(
567     const GLint value) const {
568   switch (value) {
569     case 1:
570     case 2:
571     case 4:
572     case 8:
573       return true;
574   }
575   return false;
576 }
577 
578 static const GLenum valid_pixel_type_table[] = {
579     GL_UNSIGNED_BYTE,
580     GL_UNSIGNED_SHORT_5_6_5,
581     GL_UNSIGNED_SHORT_4_4_4_4,
582     GL_UNSIGNED_SHORT_5_5_5_1,
583 };
584 
585 static const GLenum valid_pixel_type_table_es3[] = {
586     GL_BYTE,
587     GL_UNSIGNED_SHORT,
588     GL_SHORT,
589     GL_UNSIGNED_INT,
590     GL_INT,
591     GL_HALF_FLOAT,
592     GL_FLOAT,
593     GL_UNSIGNED_INT_2_10_10_10_REV,
594     GL_UNSIGNED_INT_10F_11F_11F_REV,
595     GL_UNSIGNED_INT_5_9_9_9_REV,
596     GL_UNSIGNED_INT_24_8,
597     GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
598 };
599 
600 static const GLenum valid_program_parameter_table[] = {
601     GL_DELETE_STATUS,
602     GL_LINK_STATUS,
603     GL_VALIDATE_STATUS,
604     GL_INFO_LOG_LENGTH,
605     GL_ATTACHED_SHADERS,
606     GL_ACTIVE_ATTRIBUTES,
607     GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,
608     GL_ACTIVE_UNIFORMS,
609     GL_ACTIVE_UNIFORM_MAX_LENGTH,
610 };
611 
612 static const GLenum valid_program_parameter_table_es3[] = {
613     GL_ACTIVE_UNIFORM_BLOCKS,
614     GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH,
615     GL_TRANSFORM_FEEDBACK_BUFFER_MODE,
616     GL_TRANSFORM_FEEDBACK_VARYINGS,
617     GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH,
618 };
619 
IsValid(const GLenum value)620 bool Validators::QueryObjectParameterValidator::IsValid(
621     const GLenum value) const {
622   switch (value) {
623     case GL_QUERY_RESULT_EXT:
624     case GL_QUERY_RESULT_AVAILABLE_EXT:
625     case GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT:
626       return true;
627   }
628   return false;
629 }
630 
IsValid(const GLenum value)631 bool Validators::QueryTargetValidator::IsValid(const GLenum value) const {
632   switch (value) {
633     case GL_SAMPLES_PASSED_ARB:
634     case GL_ANY_SAMPLES_PASSED_EXT:
635     case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
636     case GL_COMMANDS_ISSUED_CHROMIUM:
637     case GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM:
638     case GL_LATENCY_QUERY_CHROMIUM:
639     case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
640     case GL_COMMANDS_COMPLETED_CHROMIUM:
641     case GL_READBACK_SHADOW_COPIES_UPDATED_CHROMIUM:
642     case GL_PROGRAM_COMPLETION_QUERY_CHROMIUM:
643       return true;
644   }
645   return false;
646 }
647 
648 static const GLenum valid_read_buffer_table[] = {
649     GL_NONE,
650     GL_BACK,
651     GL_COLOR_ATTACHMENT0,
652     GL_COLOR_ATTACHMENT1,
653     GL_COLOR_ATTACHMENT2,
654     GL_COLOR_ATTACHMENT3,
655     GL_COLOR_ATTACHMENT4,
656     GL_COLOR_ATTACHMENT5,
657     GL_COLOR_ATTACHMENT6,
658     GL_COLOR_ATTACHMENT7,
659     GL_COLOR_ATTACHMENT8,
660     GL_COLOR_ATTACHMENT9,
661     GL_COLOR_ATTACHMENT10,
662     GL_COLOR_ATTACHMENT11,
663     GL_COLOR_ATTACHMENT12,
664     GL_COLOR_ATTACHMENT13,
665     GL_COLOR_ATTACHMENT14,
666     GL_COLOR_ATTACHMENT15,
667 };
668 
669 static const GLenum valid_read_pixel_format_table[] = {
670     GL_ALPHA,
671     GL_RGB,
672     GL_RGBA,
673 };
674 
675 static const GLenum valid_read_pixel_format_table_es3[] = {
676     GL_RED,        GL_RED_INTEGER, GL_RG,
677     GL_RG_INTEGER, GL_RGB_INTEGER, GL_RGBA_INTEGER,
678 };
679 
680 static const GLenum valid_read_pixel_type_table[] = {
681     GL_UNSIGNED_BYTE,
682     GL_UNSIGNED_SHORT_5_6_5,
683     GL_UNSIGNED_SHORT_4_4_4_4,
684     GL_UNSIGNED_SHORT_5_5_5_1,
685 };
686 
687 static const GLenum valid_read_pixel_type_table_es3[] = {
688     GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT,
689     GL_INT,  GL_HALF_FLOAT,     GL_FLOAT, GL_UNSIGNED_INT_2_10_10_10_REV,
690 };
691 
692 static const GLenum valid_render_buffer_format_table[] = {
693     GL_RGBA4, GL_RGB565, GL_RGB5_A1, GL_DEPTH_COMPONENT16, GL_STENCIL_INDEX8,
694 };
695 
696 static const GLenum valid_render_buffer_format_table_es3[] = {
697     GL_R8,
698     GL_R8UI,
699     GL_R8I,
700     GL_R16UI,
701     GL_R16I,
702     GL_R32UI,
703     GL_R32I,
704     GL_RG8,
705     GL_RG8UI,
706     GL_RG8I,
707     GL_RG16UI,
708     GL_RG16I,
709     GL_RG32UI,
710     GL_RG32I,
711     GL_RGB8,
712     GL_RGBA8,
713     GL_SRGB8_ALPHA8,
714     GL_RGB10_A2,
715     GL_RGBA8UI,
716     GL_RGBA8I,
717     GL_RGB10_A2UI,
718     GL_RGBA16UI,
719     GL_RGBA16I,
720     GL_RGBA32UI,
721     GL_RGBA32I,
722     GL_DEPTH_COMPONENT24,
723     GL_DEPTH_COMPONENT32F,
724     GL_DEPTH24_STENCIL8,
725     GL_DEPTH32F_STENCIL8,
726 };
727 
728 static const GLenum valid_render_buffer_parameter_table[] = {
729     GL_RENDERBUFFER_RED_SIZE,        GL_RENDERBUFFER_GREEN_SIZE,
730     GL_RENDERBUFFER_BLUE_SIZE,       GL_RENDERBUFFER_ALPHA_SIZE,
731     GL_RENDERBUFFER_DEPTH_SIZE,      GL_RENDERBUFFER_STENCIL_SIZE,
732     GL_RENDERBUFFER_WIDTH,           GL_RENDERBUFFER_HEIGHT,
733     GL_RENDERBUFFER_INTERNAL_FORMAT,
734 };
735 
736 static const GLenum valid_render_buffer_parameter_table_es3[] = {
737     GL_RENDERBUFFER_SAMPLES,
738 };
739 
740 static const GLenum valid_render_buffer_target_table[] = {
741     GL_RENDERBUFFER,
742 };
743 
IsValid(const GLenum value)744 bool Validators::ResetStatusValidator::IsValid(const GLenum value) const {
745   switch (value) {
746     case GL_GUILTY_CONTEXT_RESET_ARB:
747     case GL_INNOCENT_CONTEXT_RESET_ARB:
748     case GL_UNKNOWN_CONTEXT_RESET_ARB:
749       return true;
750   }
751   return false;
752 }
753 
754 static const GLenum valid_sampler_parameter_table[] = {
755     GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER,   GL_TEXTURE_MIN_LOD,
756     GL_TEXTURE_MAX_LOD,    GL_TEXTURE_WRAP_S,       GL_TEXTURE_WRAP_T,
757     GL_TEXTURE_WRAP_R,     GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_COMPARE_FUNC,
758 };
759 
760 static const GLenum valid_shader_parameter_table[] = {
761     GL_SHADER_TYPE,          GL_DELETE_STATUS,
762     GL_COMPILE_STATUS,       GL_INFO_LOG_LENGTH,
763     GL_SHADER_SOURCE_LENGTH, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
764 };
765 
IsValid(const GLenum value)766 bool Validators::ShaderPrecisionValidator::IsValid(const GLenum value) const {
767   switch (value) {
768     case GL_LOW_FLOAT:
769     case GL_MEDIUM_FLOAT:
770     case GL_HIGH_FLOAT:
771     case GL_LOW_INT:
772     case GL_MEDIUM_INT:
773     case GL_HIGH_INT:
774       return true;
775   }
776   return false;
777 }
778 
IsValid(const GLenum value)779 bool Validators::ShaderTypeValidator::IsValid(const GLenum value) const {
780   switch (value) {
781     case GL_VERTEX_SHADER:
782     case GL_FRAGMENT_SHADER:
783       return true;
784   }
785   return false;
786 }
787 
IsValid(const GLenum value)788 bool Validators::SharedImageAccessModeValidator::IsValid(
789     const GLenum value) const {
790   switch (value) {
791     case GL_SHARED_IMAGE_ACCESS_MODE_OVERLAY_CHROMIUM:
792     case GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM:
793     case GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM:
794       return true;
795   }
796   return false;
797 }
798 
799 static const GLenum valid_src_blend_factor_table[] = {
800     GL_ZERO,
801     GL_ONE,
802     GL_SRC_COLOR,
803     GL_ONE_MINUS_SRC_COLOR,
804     GL_DST_COLOR,
805     GL_ONE_MINUS_DST_COLOR,
806     GL_SRC_ALPHA,
807     GL_ONE_MINUS_SRC_ALPHA,
808     GL_DST_ALPHA,
809     GL_ONE_MINUS_DST_ALPHA,
810     GL_CONSTANT_COLOR,
811     GL_ONE_MINUS_CONSTANT_COLOR,
812     GL_CONSTANT_ALPHA,
813     GL_ONE_MINUS_CONSTANT_ALPHA,
814     GL_SRC_ALPHA_SATURATE,
815 };
816 
IsValid(const GLenum value)817 bool Validators::StencilOpValidator::IsValid(const GLenum value) const {
818   switch (value) {
819     case GL_KEEP:
820     case GL_ZERO:
821     case GL_REPLACE:
822     case GL_INCR:
823     case GL_INCR_WRAP:
824     case GL_DECR:
825     case GL_DECR_WRAP:
826     case GL_INVERT:
827       return true;
828   }
829   return false;
830 }
831 
IsValid(const GLenum value)832 bool Validators::StringTypeValidator::IsValid(const GLenum value) const {
833   switch (value) {
834     case GL_VENDOR:
835     case GL_RENDERER:
836     case GL_VERSION:
837     case GL_SHADING_LANGUAGE_VERSION:
838     case GL_EXTENSIONS:
839       return true;
840   }
841   return false;
842 }
843 
IsValid(const GLbitfield value)844 bool Validators::SwapBuffersFlagsValidator::IsValid(
845     const GLbitfield value) const {
846   switch (value) {
847     case 0:
848     case gpu::SwapBuffersFlags::kVSyncParams:
849       return true;
850   }
851   return false;
852 }
853 
854 static const GLbitfield valid_sync_flush_flags_table[] = {
855     GL_SYNC_FLUSH_COMMANDS_BIT,
856     0,
857 };
858 
IsValid(const GLenum value)859 bool Validators::SyncParameterValidator::IsValid(const GLenum value) const {
860   switch (value) {
861     case GL_SYNC_STATUS:
862     case GL_OBJECT_TYPE:
863     case GL_SYNC_CONDITION:
864     case GL_SYNC_FLAGS:
865       return true;
866   }
867   return false;
868 }
869 
IsValid(const GLenum value)870 bool Validators::Texture3DTargetValidator::IsValid(const GLenum value) const {
871   switch (value) {
872     case GL_TEXTURE_3D:
873     case GL_TEXTURE_2D_ARRAY:
874       return true;
875   }
876   return false;
877 }
878 
879 static const GLenum valid_texture_bind_target_table[] = {
880     GL_TEXTURE_2D,
881     GL_TEXTURE_CUBE_MAP,
882 };
883 
884 static const GLenum valid_texture_bind_target_table_es3[] = {
885     GL_TEXTURE_3D,
886     GL_TEXTURE_2D_ARRAY,
887 };
888 
IsValid(const GLenum value)889 bool Validators::TextureCompareFuncValidator::IsValid(
890     const GLenum value) const {
891   switch (value) {
892     case GL_LEQUAL:
893     case GL_GEQUAL:
894     case GL_LESS:
895     case GL_GREATER:
896     case GL_EQUAL:
897     case GL_NOTEQUAL:
898     case GL_ALWAYS:
899     case GL_NEVER:
900       return true;
901   }
902   return false;
903 }
904 
905 static const GLenum valid_texture_compare_mode_table[] = {
906     GL_NONE,
907     GL_COMPARE_REF_TO_TEXTURE,
908 };
909 
910 static const GLenum valid_texture_depth_renderable_internal_format_table_es3[] =
911     {
912         GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F,
913         GL_DEPTH24_STENCIL8,  GL_DEPTH32F_STENCIL8,
914 };
915 
916 static const GLenum valid_texture_fbo_target_table[] = {
917     GL_TEXTURE_2D,
918     GL_TEXTURE_CUBE_MAP_POSITIVE_X,
919     GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
920     GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
921     GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
922     GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
923     GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
924 };
925 
926 static const GLenum valid_texture_format_table[] = {
927     GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
928 };
929 
930 static const GLenum valid_texture_format_table_es3[] = {
931     GL_RED,
932     GL_RED_INTEGER,
933     GL_RG,
934     GL_RG_INTEGER,
935     GL_RGB_INTEGER,
936     GL_RGBA_INTEGER,
937     GL_DEPTH_COMPONENT,
938     GL_DEPTH_STENCIL,
939 };
940 
941 static const GLenum valid_texture_internal_format_table[] = {
942     GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
943 };
944 
945 static const GLenum valid_texture_internal_format_table_es3[] = {
946     GL_R8,
947     GL_R8_SNORM,
948     GL_R16F,
949     GL_R32F,
950     GL_R8UI,
951     GL_R8I,
952     GL_R16UI,
953     GL_R16I,
954     GL_R32UI,
955     GL_R32I,
956     GL_RG8,
957     GL_RG8_SNORM,
958     GL_RG16F,
959     GL_RG32F,
960     GL_RG8UI,
961     GL_RG8I,
962     GL_RG16UI,
963     GL_RG16I,
964     GL_RG32UI,
965     GL_RG32I,
966     GL_RGB8,
967     GL_SRGB8,
968     GL_RGB565,
969     GL_RGB8_SNORM,
970     GL_R11F_G11F_B10F,
971     GL_RGB9_E5,
972     GL_RGB16F,
973     GL_RGB32F,
974     GL_RGB8UI,
975     GL_RGB8I,
976     GL_RGB16UI,
977     GL_RGB16I,
978     GL_RGB32UI,
979     GL_RGB32I,
980     GL_RGBA8,
981     GL_SRGB8_ALPHA8,
982     GL_RGBA8_SNORM,
983     GL_RGB5_A1,
984     GL_RGBA4,
985     GL_RGB10_A2,
986     GL_RGBA16F,
987     GL_RGBA32F,
988     GL_RGBA8UI,
989     GL_RGBA8I,
990     GL_RGB10_A2UI,
991     GL_RGBA16UI,
992     GL_RGBA16I,
993     GL_RGBA32UI,
994     GL_RGBA32I,
995     GL_DEPTH_COMPONENT16,
996     GL_DEPTH_COMPONENT24,
997     GL_DEPTH_COMPONENT32F,
998     GL_DEPTH24_STENCIL8,
999     GL_DEPTH32F_STENCIL8,
1000 };
1001 
1002 static const GLenum valid_texture_internal_format_storage_table[] = {
1003     GL_RGB565,     GL_RGBA4,          GL_RGB5_A1,
1004     GL_ALPHA8_EXT, GL_LUMINANCE8_EXT, GL_LUMINANCE8_ALPHA8_EXT,
1005     GL_RGB8_OES,   GL_RGBA8_OES,
1006 };
1007 
1008 static const GLenum valid_texture_internal_format_storage_table_es3[] = {
1009     GL_R8,
1010     GL_R8_SNORM,
1011     GL_R16F,
1012     GL_R32F,
1013     GL_R8UI,
1014     GL_R8I,
1015     GL_R16UI,
1016     GL_R16I,
1017     GL_R32UI,
1018     GL_R32I,
1019     GL_RG8,
1020     GL_RG8_SNORM,
1021     GL_RG16F,
1022     GL_RG32F,
1023     GL_RG8UI,
1024     GL_RG8I,
1025     GL_RG16UI,
1026     GL_RG16I,
1027     GL_RG32UI,
1028     GL_RG32I,
1029     GL_RGB8,
1030     GL_SRGB8,
1031     GL_RGB8_SNORM,
1032     GL_R11F_G11F_B10F,
1033     GL_RGB9_E5,
1034     GL_RGB16F,
1035     GL_RGB32F,
1036     GL_RGB8UI,
1037     GL_RGB8I,
1038     GL_RGB16UI,
1039     GL_RGB16I,
1040     GL_RGB32UI,
1041     GL_RGB32I,
1042     GL_RGBA8,
1043     GL_SRGB8_ALPHA8,
1044     GL_RGBA8_SNORM,
1045     GL_RGB10_A2,
1046     GL_RGBA16F,
1047     GL_RGBA32F,
1048     GL_RGBA8UI,
1049     GL_RGBA8I,
1050     GL_RGB10_A2UI,
1051     GL_RGBA16UI,
1052     GL_RGBA16I,
1053     GL_RGBA32UI,
1054     GL_RGBA32I,
1055     GL_DEPTH_COMPONENT16,
1056     GL_DEPTH_COMPONENT24,
1057     GL_DEPTH_COMPONENT32F,
1058     GL_DEPTH24_STENCIL8,
1059     GL_DEPTH32F_STENCIL8,
1060 };
1061 
1062 static const GLenum deprecated_texture_internal_format_storage_table_es3[] = {
1063     GL_ALPHA8_EXT,   GL_LUMINANCE8_EXT,   GL_LUMINANCE8_ALPHA8_EXT,
1064     GL_ALPHA16F_EXT, GL_LUMINANCE16F_EXT, GL_LUMINANCE_ALPHA16F_EXT,
1065     GL_ALPHA32F_EXT, GL_LUMINANCE32F_EXT, GL_LUMINANCE_ALPHA32F_EXT,
1066 };
1067 
IsValid(const GLenum value)1068 bool Validators::TextureMagFilterModeValidator::IsValid(
1069     const GLenum value) const {
1070   switch (value) {
1071     case GL_NEAREST:
1072     case GL_LINEAR:
1073       return true;
1074   }
1075   return false;
1076 }
1077 
IsValid(const GLenum value)1078 bool Validators::TextureMinFilterModeValidator::IsValid(
1079     const GLenum value) const {
1080   switch (value) {
1081     case GL_NEAREST:
1082     case GL_LINEAR:
1083     case GL_NEAREST_MIPMAP_NEAREST:
1084     case GL_LINEAR_MIPMAP_NEAREST:
1085     case GL_NEAREST_MIPMAP_LINEAR:
1086     case GL_LINEAR_MIPMAP_LINEAR:
1087       return true;
1088   }
1089   return false;
1090 }
1091 
1092 static const GLenum valid_texture_parameter_table[] = {
1093     GL_TEXTURE_MAG_FILTER,
1094     GL_TEXTURE_MIN_FILTER,
1095     GL_TEXTURE_WRAP_S,
1096     GL_TEXTURE_WRAP_T,
1097 };
1098 
1099 static const GLenum valid_texture_parameter_table_es3[] = {
1100     GL_TEXTURE_BASE_LEVEL,       GL_TEXTURE_COMPARE_FUNC,
1101     GL_TEXTURE_COMPARE_MODE,     GL_TEXTURE_IMMUTABLE_FORMAT,
1102     GL_TEXTURE_IMMUTABLE_LEVELS, GL_TEXTURE_MAX_LEVEL,
1103     GL_TEXTURE_MAX_LOD,          GL_TEXTURE_MIN_LOD,
1104     GL_TEXTURE_WRAP_R,
1105 };
1106 
1107 static const GLenum
1108     valid_texture_sized_color_renderable_internal_format_table[] = {
1109         GL_R8,       GL_R8UI,     GL_R8I,          GL_R16UI,      GL_R16I,
1110         GL_R32UI,    GL_R32I,     GL_RG8,          GL_RG8UI,      GL_RG8I,
1111         GL_RG16UI,   GL_RG16I,    GL_RG32UI,       GL_RG32I,      GL_RGB8,
1112         GL_RGB565,   GL_RGBA8,    GL_SRGB8_ALPHA8, GL_RGB5_A1,    GL_RGBA4,
1113         GL_RGB10_A2, GL_RGBA8UI,  GL_RGBA8I,       GL_RGB10_A2UI, GL_RGBA16UI,
1114         GL_RGBA16I,  GL_RGBA32UI, GL_RGBA32I,
1115 };
1116 
1117 static const GLenum
1118     valid_texture_sized_texture_filterable_internal_format_table[] = {
1119         GL_R8,
1120         GL_R8_SNORM,
1121         GL_R16F,
1122         GL_RG8,
1123         GL_RG8_SNORM,
1124         GL_RG16F,
1125         GL_RGB8,
1126         GL_SRGB8,
1127         GL_RGB565,
1128         GL_RGB8_SNORM,
1129         GL_R11F_G11F_B10F,
1130         GL_RGB9_E5,
1131         GL_RGB16F,
1132         GL_RGBA8,
1133         GL_SRGB8_ALPHA8,
1134         GL_RGBA8_SNORM,
1135         GL_RGB5_A1,
1136         GL_RGBA4,
1137         GL_RGB10_A2,
1138         GL_RGBA16F,
1139         GL_RGB_YCRCB_420_CHROMIUM,
1140         GL_RGB_YCBCR_422_CHROMIUM,
1141         GL_RGB_YCBCR_420V_CHROMIUM,
1142         GL_RGB_YCBCR_P010_CHROMIUM,
1143         GL_R16_EXT,
1144 };
1145 
IsValid(const GLenum value)1146 bool Validators::TextureSrgbDecodeExtValidator::IsValid(
1147     const GLenum value) const {
1148   switch (value) {
1149     case GL_DECODE_EXT:
1150     case GL_SKIP_DECODE_EXT:
1151       return true;
1152   }
1153   return false;
1154 }
1155 
1156 static const GLenum
1157     valid_texture_stencil_renderable_internal_format_table_es3[] = {
1158         GL_STENCIL_INDEX8,
1159         GL_DEPTH24_STENCIL8,
1160         GL_DEPTH32F_STENCIL8,
1161 };
1162 
IsValid(const GLenum value)1163 bool Validators::TextureSwizzleValidator::IsValid(const GLenum value) const {
1164   switch (value) {
1165     case GL_RED:
1166     case GL_GREEN:
1167     case GL_BLUE:
1168     case GL_ALPHA:
1169     case GL_ZERO:
1170     case GL_ONE:
1171       return true;
1172   }
1173   return false;
1174 }
1175 
1176 static const GLenum valid_texture_target_table[] = {
1177     GL_TEXTURE_2D,
1178     GL_TEXTURE_CUBE_MAP_POSITIVE_X,
1179     GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
1180     GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
1181     GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
1182     GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
1183     GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
1184 };
1185 
1186 static const GLenum valid_texture_unsized_internal_format_table[] = {
1187     GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
1188 };
1189 
IsValid(const GLenum value)1190 bool Validators::TextureUsageValidator::IsValid(const GLenum value) const {
1191   switch (value) {
1192     case GL_NONE:
1193     case GL_FRAMEBUFFER_ATTACHMENT_ANGLE:
1194       return true;
1195   }
1196   return false;
1197 }
1198 
IsValid(const GLenum value)1199 bool Validators::TextureWrapModeValidator::IsValid(const GLenum value) const {
1200   switch (value) {
1201     case GL_CLAMP_TO_EDGE:
1202     case GL_MIRRORED_REPEAT:
1203     case GL_REPEAT:
1204       return true;
1205   }
1206   return false;
1207 }
1208 
1209 static const GLenum valid_transform_feedback_bind_target_table[] = {
1210     GL_TRANSFORM_FEEDBACK,
1211 };
1212 
IsValid(const GLenum value)1213 bool Validators::TransformFeedbackPrimitiveModeValidator::IsValid(
1214     const GLenum value) const {
1215   switch (value) {
1216     case GL_POINTS:
1217     case GL_LINES:
1218     case GL_TRIANGLES:
1219       return true;
1220   }
1221   return false;
1222 }
1223 
IsValid(const GLenum value)1224 bool Validators::UniformBlockParameterValidator::IsValid(
1225     const GLenum value) const {
1226   switch (value) {
1227     case GL_UNIFORM_BLOCK_BINDING:
1228     case GL_UNIFORM_BLOCK_DATA_SIZE:
1229     case GL_UNIFORM_BLOCK_NAME_LENGTH:
1230     case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
1231     case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
1232     case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
1233     case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
1234       return true;
1235   }
1236   return false;
1237 }
1238 
IsValid(const GLenum value)1239 bool Validators::UniformParameterValidator::IsValid(const GLenum value) const {
1240   switch (value) {
1241     case GL_UNIFORM_SIZE:
1242     case GL_UNIFORM_TYPE:
1243     case GL_UNIFORM_NAME_LENGTH:
1244     case GL_UNIFORM_BLOCK_INDEX:
1245     case GL_UNIFORM_OFFSET:
1246     case GL_UNIFORM_ARRAY_STRIDE:
1247     case GL_UNIFORM_MATRIX_STRIDE:
1248     case GL_UNIFORM_IS_ROW_MAJOR:
1249       return true;
1250   }
1251   return false;
1252 }
1253 
IsValid(const GLenum value)1254 bool Validators::VertexAttribITypeValidator::IsValid(const GLenum value) const {
1255   switch (value) {
1256     case GL_BYTE:
1257     case GL_UNSIGNED_BYTE:
1258     case GL_SHORT:
1259     case GL_UNSIGNED_SHORT:
1260     case GL_INT:
1261     case GL_UNSIGNED_INT:
1262       return true;
1263   }
1264   return false;
1265 }
1266 
1267 static const GLenum valid_vertex_attrib_type_table[] = {
1268     GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_FLOAT,
1269 };
1270 
1271 static const GLenum valid_vertex_attrib_type_table_es3[] = {
1272     GL_INT,
1273     GL_UNSIGNED_INT,
1274     GL_HALF_FLOAT,
1275     GL_INT_2_10_10_10_REV,
1276     GL_UNSIGNED_INT_2_10_10_10_REV,
1277 };
1278 
1279 static const GLenum valid_vertex_attribute_table[] = {
1280     GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
1281     GL_VERTEX_ATTRIB_ARRAY_ENABLED,    GL_VERTEX_ATTRIB_ARRAY_SIZE,
1282     GL_VERTEX_ATTRIB_ARRAY_STRIDE,     GL_VERTEX_ATTRIB_ARRAY_TYPE,
1283     GL_CURRENT_VERTEX_ATTRIB,
1284 };
1285 
1286 static const GLenum valid_vertex_attribute_table_es3[] = {
1287     GL_VERTEX_ATTRIB_ARRAY_INTEGER,
1288     GL_VERTEX_ATTRIB_ARRAY_DIVISOR,
1289 };
1290 
1291 static const GLenum valid_vertex_pointer_table[] = {
1292     GL_VERTEX_ATTRIB_ARRAY_POINTER,
1293 };
1294 
IsValid(const GLenum value)1295 bool Validators::WindowRectanglesModeValidator::IsValid(
1296     const GLenum value) const {
1297   switch (value) {
1298     case GL_INCLUSIVE_EXT:
1299     case GL_EXCLUSIVE_EXT:
1300       return true;
1301   }
1302   return false;
1303 }
1304 
Validators()1305 Validators::Validators()
1306     : attachment(valid_attachment_table, base::size(valid_attachment_table)),
1307       attachment_query(valid_attachment_query_table,
1308                        base::size(valid_attachment_query_table)),
1309       bufferfi(valid_bufferfi_table, base::size(valid_bufferfi_table)),
1310       bufferuiv(valid_bufferuiv_table, base::size(valid_bufferuiv_table)),
1311       capability(valid_capability_table, base::size(valid_capability_table)),
1312       compressed_texture_format(),
1313       coverage_modulation_components(
1314           valid_coverage_modulation_components_table,
1315           base::size(valid_coverage_modulation_components_table)),
1316       dst_blend_factor(valid_dst_blend_factor_table,
1317                        base::size(valid_dst_blend_factor_table)),
1318       equation(valid_equation_table, base::size(valid_equation_table)),
1319       framebuffer_attachment_parameter(
1320           valid_framebuffer_attachment_parameter_table,
1321           base::size(valid_framebuffer_attachment_parameter_table)),
1322       framebuffer_parameter(),
1323       framebuffer_target(valid_framebuffer_target_table,
1324                          base::size(valid_framebuffer_target_table)),
1325       g_l_state(valid_g_l_state_table, base::size(valid_g_l_state_table)),
1326       get_tex_param_target(valid_get_tex_param_target_table,
1327                            base::size(valid_get_tex_param_target_table)),
1328       hint_target(valid_hint_target_table, base::size(valid_hint_target_table)),
1329       image_internal_format(valid_image_internal_format_table,
1330                             base::size(valid_image_internal_format_table)),
1331       index_type(valid_index_type_table, base::size(valid_index_type_table)),
1332       indexed_g_l_state(valid_indexed_g_l_state_table,
1333                         base::size(valid_indexed_g_l_state_table)),
1334       pixel_store(valid_pixel_store_table, base::size(valid_pixel_store_table)),
1335       pixel_type(valid_pixel_type_table, base::size(valid_pixel_type_table)),
1336       program_parameter(valid_program_parameter_table,
1337                         base::size(valid_program_parameter_table)),
1338       read_buffer(valid_read_buffer_table, base::size(valid_read_buffer_table)),
1339       read_pixel_format(valid_read_pixel_format_table,
1340                         base::size(valid_read_pixel_format_table)),
1341       read_pixel_type(valid_read_pixel_type_table,
1342                       base::size(valid_read_pixel_type_table)),
1343       render_buffer_format(valid_render_buffer_format_table,
1344                            base::size(valid_render_buffer_format_table)),
1345       render_buffer_parameter(valid_render_buffer_parameter_table,
1346                               base::size(valid_render_buffer_parameter_table)),
1347       render_buffer_target(valid_render_buffer_target_table,
1348                            base::size(valid_render_buffer_target_table)),
1349       sampler_parameter(valid_sampler_parameter_table,
1350                         base::size(valid_sampler_parameter_table)),
1351       shader_binary_format(),
1352       shader_parameter(valid_shader_parameter_table,
1353                        base::size(valid_shader_parameter_table)),
1354       src_blend_factor(valid_src_blend_factor_table,
1355                        base::size(valid_src_blend_factor_table)),
1356       sync_flush_flags(valid_sync_flush_flags_table,
1357                        base::size(valid_sync_flush_flags_table)),
1358       texture_bind_target(valid_texture_bind_target_table,
1359                           base::size(valid_texture_bind_target_table)),
1360       texture_compare_mode(valid_texture_compare_mode_table,
1361                            base::size(valid_texture_compare_mode_table)),
1362       texture_depth_renderable_internal_format(),
1363       texture_fbo_target(valid_texture_fbo_target_table,
1364                          base::size(valid_texture_fbo_target_table)),
1365       texture_format(valid_texture_format_table,
1366                      base::size(valid_texture_format_table)),
1367       texture_internal_format(valid_texture_internal_format_table,
1368                               base::size(valid_texture_internal_format_table)),
1369       texture_internal_format_storage(
1370           valid_texture_internal_format_storage_table,
1371           base::size(valid_texture_internal_format_storage_table)),
1372       texture_parameter(valid_texture_parameter_table,
1373                         base::size(valid_texture_parameter_table)),
1374       texture_sized_color_renderable_internal_format(
1375           valid_texture_sized_color_renderable_internal_format_table,
1376           base::size(
1377               valid_texture_sized_color_renderable_internal_format_table)),
1378       texture_sized_texture_filterable_internal_format(
1379           valid_texture_sized_texture_filterable_internal_format_table,
1380           base::size(
1381               valid_texture_sized_texture_filterable_internal_format_table)),
1382       texture_stencil_renderable_internal_format(),
1383       texture_target(valid_texture_target_table,
1384                      base::size(valid_texture_target_table)),
1385       texture_unsized_internal_format(
1386           valid_texture_unsized_internal_format_table,
1387           base::size(valid_texture_unsized_internal_format_table)),
1388       transform_feedback_bind_target(
1389           valid_transform_feedback_bind_target_table,
1390           base::size(valid_transform_feedback_bind_target_table)),
1391       vertex_attrib_type(valid_vertex_attrib_type_table,
1392                          base::size(valid_vertex_attrib_type_table)),
1393       vertex_attribute(valid_vertex_attribute_table,
1394                        base::size(valid_vertex_attribute_table)),
1395       vertex_pointer(valid_vertex_pointer_table,
1396                      base::size(valid_vertex_pointer_table)) {}
1397 
UpdateValuesES3()1398 void Validators::UpdateValuesES3() {
1399   attachment.AddValues(valid_attachment_table_es3,
1400                        base::size(valid_attachment_table_es3));
1401   attachment_query.AddValues(valid_attachment_query_table_es3,
1402                              base::size(valid_attachment_query_table_es3));
1403   buffer_parameter.SetIsES3(true);
1404   buffer_target.SetIsES3(true);
1405   buffer_usage.SetIsES3(true);
1406   capability.AddValues(valid_capability_table_es3,
1407                        base::size(valid_capability_table_es3));
1408   dst_blend_factor.AddValues(valid_dst_blend_factor_table_es3,
1409                              base::size(valid_dst_blend_factor_table_es3));
1410   equation.AddValues(valid_equation_table_es3,
1411                      base::size(valid_equation_table_es3));
1412   framebuffer_attachment_parameter.AddValues(
1413       valid_framebuffer_attachment_parameter_table_es3,
1414       base::size(valid_framebuffer_attachment_parameter_table_es3));
1415   framebuffer_target.AddValues(valid_framebuffer_target_table_es3,
1416                                base::size(valid_framebuffer_target_table_es3));
1417   g_l_state.AddValues(valid_g_l_state_table_es3,
1418                       base::size(valid_g_l_state_table_es3));
1419   get_tex_param_target.AddValues(
1420       valid_get_tex_param_target_table_es3,
1421       base::size(valid_get_tex_param_target_table_es3));
1422   hint_target.AddValues(valid_hint_target_table_es3,
1423                         base::size(valid_hint_target_table_es3));
1424   index_type.AddValues(valid_index_type_table_es3,
1425                        base::size(valid_index_type_table_es3));
1426   pixel_store.AddValues(valid_pixel_store_table_es3,
1427                         base::size(valid_pixel_store_table_es3));
1428   pixel_type.AddValues(valid_pixel_type_table_es3,
1429                        base::size(valid_pixel_type_table_es3));
1430   program_parameter.AddValues(valid_program_parameter_table_es3,
1431                               base::size(valid_program_parameter_table_es3));
1432   read_pixel_format.AddValues(valid_read_pixel_format_table_es3,
1433                               base::size(valid_read_pixel_format_table_es3));
1434   read_pixel_type.AddValues(valid_read_pixel_type_table_es3,
1435                             base::size(valid_read_pixel_type_table_es3));
1436   render_buffer_format.AddValues(
1437       valid_render_buffer_format_table_es3,
1438       base::size(valid_render_buffer_format_table_es3));
1439   render_buffer_parameter.AddValues(
1440       valid_render_buffer_parameter_table_es3,
1441       base::size(valid_render_buffer_parameter_table_es3));
1442   texture_bind_target.AddValues(
1443       valid_texture_bind_target_table_es3,
1444       base::size(valid_texture_bind_target_table_es3));
1445   texture_depth_renderable_internal_format.AddValues(
1446       valid_texture_depth_renderable_internal_format_table_es3,
1447       base::size(valid_texture_depth_renderable_internal_format_table_es3));
1448   texture_format.AddValues(valid_texture_format_table_es3,
1449                            base::size(valid_texture_format_table_es3));
1450   texture_internal_format.AddValues(
1451       valid_texture_internal_format_table_es3,
1452       base::size(valid_texture_internal_format_table_es3));
1453   texture_internal_format_storage.RemoveValues(
1454       deprecated_texture_internal_format_storage_table_es3,
1455       base::size(deprecated_texture_internal_format_storage_table_es3));
1456   texture_internal_format_storage.AddValues(
1457       valid_texture_internal_format_storage_table_es3,
1458       base::size(valid_texture_internal_format_storage_table_es3));
1459   texture_parameter.AddValues(valid_texture_parameter_table_es3,
1460                               base::size(valid_texture_parameter_table_es3));
1461   texture_stencil_renderable_internal_format.AddValues(
1462       valid_texture_stencil_renderable_internal_format_table_es3,
1463       base::size(valid_texture_stencil_renderable_internal_format_table_es3));
1464   vertex_attrib_type.AddValues(valid_vertex_attrib_type_table_es3,
1465                                base::size(valid_vertex_attrib_type_table_es3));
1466   vertex_attribute.AddValues(valid_vertex_attribute_table_es3,
1467                              base::size(valid_vertex_attribute_table_es3));
1468 }
1469 
UpdateETCCompressedTextureFormats()1470 void Validators::UpdateETCCompressedTextureFormats() {
1471   compressed_texture_format.AddValue(GL_COMPRESSED_R11_EAC);
1472   compressed_texture_format.AddValue(GL_COMPRESSED_SIGNED_R11_EAC);
1473   compressed_texture_format.AddValue(GL_COMPRESSED_RG11_EAC);
1474   compressed_texture_format.AddValue(GL_COMPRESSED_SIGNED_RG11_EAC);
1475   compressed_texture_format.AddValue(GL_COMPRESSED_RGB8_ETC2);
1476   compressed_texture_format.AddValue(GL_COMPRESSED_SRGB8_ETC2);
1477   compressed_texture_format.AddValue(
1478       GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2);
1479   compressed_texture_format.AddValue(
1480       GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2);
1481   compressed_texture_format.AddValue(GL_COMPRESSED_RGBA8_ETC2_EAC);
1482   compressed_texture_format.AddValue(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC);
1483   texture_internal_format_storage.AddValue(GL_COMPRESSED_R11_EAC);
1484   texture_internal_format_storage.AddValue(GL_COMPRESSED_SIGNED_R11_EAC);
1485   texture_internal_format_storage.AddValue(GL_COMPRESSED_RG11_EAC);
1486   texture_internal_format_storage.AddValue(GL_COMPRESSED_SIGNED_RG11_EAC);
1487   texture_internal_format_storage.AddValue(GL_COMPRESSED_RGB8_ETC2);
1488   texture_internal_format_storage.AddValue(GL_COMPRESSED_SRGB8_ETC2);
1489   texture_internal_format_storage.AddValue(
1490       GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2);
1491   texture_internal_format_storage.AddValue(
1492       GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2);
1493   texture_internal_format_storage.AddValue(GL_COMPRESSED_RGBA8_ETC2_EAC);
1494   texture_internal_format_storage.AddValue(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC);
1495 }
1496 
1497 #endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
1498