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// It is included by context_state.cc
12#ifndef GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
13#define GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
14
15ContextState::EnableFlags::EnableFlags()
16    : blend(false),
17      cached_blend(false),
18      cull_face(false),
19      cached_cull_face(false),
20      depth_test(false),
21      cached_depth_test(false),
22      dither(true),
23      cached_dither(true),
24      polygon_offset_fill(false),
25      cached_polygon_offset_fill(false),
26      sample_alpha_to_coverage(false),
27      cached_sample_alpha_to_coverage(false),
28      sample_coverage(false),
29      cached_sample_coverage(false),
30      scissor_test(false),
31      cached_scissor_test(false),
32      stencil_test(false),
33      cached_stencil_test(false) {
34}
35
36void ContextState::Initialize() {
37  blend_color_red = 0.0f;
38  blend_color_green = 0.0f;
39  blend_color_blue = 0.0f;
40  blend_color_alpha = 0.0f;
41  blend_equation_rgb = GL_FUNC_ADD;
42  blend_equation_alpha = GL_FUNC_ADD;
43  blend_source_rgb = GL_ONE;
44  blend_dest_rgb = GL_ZERO;
45  blend_source_alpha = GL_ONE;
46  blend_dest_alpha = GL_ZERO;
47  color_clear_red = 0.0f;
48  color_clear_green = 0.0f;
49  color_clear_blue = 0.0f;
50  color_clear_alpha = 0.0f;
51  depth_clear = 1.0f;
52  stencil_clear = 0;
53  color_mask_red = true;
54  cached_color_mask_red = true;
55  color_mask_green = true;
56  cached_color_mask_green = true;
57  color_mask_blue = true;
58  cached_color_mask_blue = true;
59  color_mask_alpha = true;
60  cached_color_mask_alpha = true;
61  cull_mode = GL_BACK;
62  depth_func = GL_LESS;
63  depth_mask = true;
64  cached_depth_mask = true;
65  z_near = 0.0f;
66  z_far = 1.0f;
67  front_face = GL_CCW;
68  hint_generate_mipmap = GL_DONT_CARE;
69  hint_fragment_shader_derivative = GL_DONT_CARE;
70  line_width = 1.0f;
71  modelview_matrix[0] = 1.0f;
72  modelview_matrix[1] = 0.0f;
73  modelview_matrix[2] = 0.0f;
74  modelview_matrix[3] = 0.0f;
75  modelview_matrix[4] = 0.0f;
76  modelview_matrix[5] = 1.0f;
77  modelview_matrix[6] = 0.0f;
78  modelview_matrix[7] = 0.0f;
79  modelview_matrix[8] = 0.0f;
80  modelview_matrix[9] = 0.0f;
81  modelview_matrix[10] = 1.0f;
82  modelview_matrix[11] = 0.0f;
83  modelview_matrix[12] = 0.0f;
84  modelview_matrix[13] = 0.0f;
85  modelview_matrix[14] = 0.0f;
86  modelview_matrix[15] = 1.0f;
87  projection_matrix[0] = 1.0f;
88  projection_matrix[1] = 0.0f;
89  projection_matrix[2] = 0.0f;
90  projection_matrix[3] = 0.0f;
91  projection_matrix[4] = 0.0f;
92  projection_matrix[5] = 1.0f;
93  projection_matrix[6] = 0.0f;
94  projection_matrix[7] = 0.0f;
95  projection_matrix[8] = 0.0f;
96  projection_matrix[9] = 0.0f;
97  projection_matrix[10] = 1.0f;
98  projection_matrix[11] = 0.0f;
99  projection_matrix[12] = 0.0f;
100  projection_matrix[13] = 0.0f;
101  projection_matrix[14] = 0.0f;
102  projection_matrix[15] = 1.0f;
103  pack_alignment = 4;
104  unpack_alignment = 4;
105  polygon_offset_factor = 0.0f;
106  polygon_offset_units = 0.0f;
107  sample_coverage_value = 1.0f;
108  sample_coverage_invert = false;
109  scissor_x = 0;
110  scissor_y = 0;
111  scissor_width = 1;
112  scissor_height = 1;
113  stencil_front_func = GL_ALWAYS;
114  stencil_front_ref = 0;
115  stencil_front_mask = 0xFFFFFFFFU;
116  stencil_back_func = GL_ALWAYS;
117  stencil_back_ref = 0;
118  stencil_back_mask = 0xFFFFFFFFU;
119  stencil_front_writemask = 0xFFFFFFFFU;
120  cached_stencil_front_writemask = 0xFFFFFFFFU;
121  stencil_back_writemask = 0xFFFFFFFFU;
122  cached_stencil_back_writemask = 0xFFFFFFFFU;
123  stencil_front_fail_op = GL_KEEP;
124  stencil_front_z_fail_op = GL_KEEP;
125  stencil_front_z_pass_op = GL_KEEP;
126  stencil_back_fail_op = GL_KEEP;
127  stencil_back_z_fail_op = GL_KEEP;
128  stencil_back_z_pass_op = GL_KEEP;
129  viewport_x = 0;
130  viewport_y = 0;
131  viewport_width = 1;
132  viewport_height = 1;
133}
134
135void ContextState::InitCapabilities(const ContextState* prev_state) const {
136  if (prev_state) {
137    if (prev_state->enable_flags.cached_blend != enable_flags.cached_blend)
138      EnableDisable(GL_BLEND, enable_flags.cached_blend);
139    if (prev_state->enable_flags.cached_cull_face !=
140        enable_flags.cached_cull_face)
141      EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
142    if (prev_state->enable_flags.cached_depth_test !=
143        enable_flags.cached_depth_test)
144      EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
145    if (prev_state->enable_flags.cached_dither != enable_flags.cached_dither)
146      EnableDisable(GL_DITHER, enable_flags.cached_dither);
147    if (prev_state->enable_flags.cached_polygon_offset_fill !=
148        enable_flags.cached_polygon_offset_fill)
149      EnableDisable(GL_POLYGON_OFFSET_FILL,
150                    enable_flags.cached_polygon_offset_fill);
151    if (prev_state->enable_flags.cached_sample_alpha_to_coverage !=
152        enable_flags.cached_sample_alpha_to_coverage)
153      EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
154                    enable_flags.cached_sample_alpha_to_coverage);
155    if (prev_state->enable_flags.cached_sample_coverage !=
156        enable_flags.cached_sample_coverage)
157      EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
158    if (prev_state->enable_flags.cached_scissor_test !=
159        enable_flags.cached_scissor_test)
160      EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
161    if (prev_state->enable_flags.cached_stencil_test !=
162        enable_flags.cached_stencil_test)
163      EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
164  } else {
165    EnableDisable(GL_BLEND, enable_flags.cached_blend);
166    EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
167    EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
168    EnableDisable(GL_DITHER, enable_flags.cached_dither);
169    EnableDisable(GL_POLYGON_OFFSET_FILL,
170                  enable_flags.cached_polygon_offset_fill);
171    EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
172                  enable_flags.cached_sample_alpha_to_coverage);
173    EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
174    EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
175    EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
176  }
177}
178
179void ContextState::InitState(const ContextState* prev_state) const {
180  if (prev_state) {
181    if ((blend_color_red != prev_state->blend_color_red) ||
182        (blend_color_green != prev_state->blend_color_green) ||
183        (blend_color_blue != prev_state->blend_color_blue) ||
184        (blend_color_alpha != prev_state->blend_color_alpha))
185      glBlendColor(blend_color_red,
186                   blend_color_green,
187                   blend_color_blue,
188                   blend_color_alpha);
189    if ((blend_equation_rgb != prev_state->blend_equation_rgb) ||
190        (blend_equation_alpha != prev_state->blend_equation_alpha))
191      glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
192    if ((blend_source_rgb != prev_state->blend_source_rgb) ||
193        (blend_dest_rgb != prev_state->blend_dest_rgb) ||
194        (blend_source_alpha != prev_state->blend_source_alpha) ||
195        (blend_dest_alpha != prev_state->blend_dest_alpha))
196      glBlendFuncSeparate(blend_source_rgb,
197                          blend_dest_rgb,
198                          blend_source_alpha,
199                          blend_dest_alpha);
200    if ((color_clear_red != prev_state->color_clear_red) ||
201        (color_clear_green != prev_state->color_clear_green) ||
202        (color_clear_blue != prev_state->color_clear_blue) ||
203        (color_clear_alpha != prev_state->color_clear_alpha))
204      glClearColor(color_clear_red,
205                   color_clear_green,
206                   color_clear_blue,
207                   color_clear_alpha);
208    if ((depth_clear != prev_state->depth_clear))
209      glClearDepth(depth_clear);
210    if ((stencil_clear != prev_state->stencil_clear))
211      glClearStencil(stencil_clear);
212    if ((cached_color_mask_red != prev_state->cached_color_mask_red) ||
213        (cached_color_mask_green != prev_state->cached_color_mask_green) ||
214        (cached_color_mask_blue != prev_state->cached_color_mask_blue) ||
215        (cached_color_mask_alpha != prev_state->cached_color_mask_alpha))
216      glColorMask(cached_color_mask_red,
217                  cached_color_mask_green,
218                  cached_color_mask_blue,
219                  cached_color_mask_alpha);
220    if ((cull_mode != prev_state->cull_mode))
221      glCullFace(cull_mode);
222    if ((depth_func != prev_state->depth_func))
223      glDepthFunc(depth_func);
224    if ((cached_depth_mask != prev_state->cached_depth_mask))
225      glDepthMask(cached_depth_mask);
226    if ((z_near != prev_state->z_near) || (z_far != prev_state->z_far))
227      glDepthRange(z_near, z_far);
228    if ((front_face != prev_state->front_face))
229      glFrontFace(front_face);
230    if (prev_state->hint_generate_mipmap != hint_generate_mipmap) {
231      glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
232    }
233    if (feature_info_->feature_flags().oes_standard_derivatives) {
234      if (prev_state->hint_fragment_shader_derivative !=
235          hint_fragment_shader_derivative) {
236        glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
237               hint_fragment_shader_derivative);
238      }
239    }
240    if ((line_width != prev_state->line_width))
241      glLineWidth(line_width);
242    if (feature_info_->feature_flags().chromium_path_rendering) {
243      if (memcmp(prev_state->modelview_matrix,
244                 modelview_matrix,
245                 sizeof(GLfloat) * 16)) {
246        glMatrixLoadfEXT(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
247      }
248    }
249    if (feature_info_->feature_flags().chromium_path_rendering) {
250      if (memcmp(prev_state->projection_matrix,
251                 projection_matrix,
252                 sizeof(GLfloat) * 16)) {
253        glMatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM, projection_matrix);
254      }
255    }
256    if (prev_state->pack_alignment != pack_alignment) {
257      glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
258    }
259    if (prev_state->unpack_alignment != unpack_alignment) {
260      glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
261    }
262    if ((polygon_offset_factor != prev_state->polygon_offset_factor) ||
263        (polygon_offset_units != prev_state->polygon_offset_units))
264      glPolygonOffset(polygon_offset_factor, polygon_offset_units);
265    if ((sample_coverage_value != prev_state->sample_coverage_value) ||
266        (sample_coverage_invert != prev_state->sample_coverage_invert))
267      glSampleCoverage(sample_coverage_value, sample_coverage_invert);
268    if ((scissor_x != prev_state->scissor_x) ||
269        (scissor_y != prev_state->scissor_y) ||
270        (scissor_width != prev_state->scissor_width) ||
271        (scissor_height != prev_state->scissor_height))
272      glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
273    if ((stencil_front_func != prev_state->stencil_front_func) ||
274        (stencil_front_ref != prev_state->stencil_front_ref) ||
275        (stencil_front_mask != prev_state->stencil_front_mask))
276      glStencilFuncSeparate(
277          GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
278    if ((stencil_back_func != prev_state->stencil_back_func) ||
279        (stencil_back_ref != prev_state->stencil_back_ref) ||
280        (stencil_back_mask != prev_state->stencil_back_mask))
281      glStencilFuncSeparate(
282          GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
283    if ((cached_stencil_front_writemask !=
284         prev_state->cached_stencil_front_writemask))
285      glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
286    if ((cached_stencil_back_writemask !=
287         prev_state->cached_stencil_back_writemask))
288      glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
289    if ((stencil_front_fail_op != prev_state->stencil_front_fail_op) ||
290        (stencil_front_z_fail_op != prev_state->stencil_front_z_fail_op) ||
291        (stencil_front_z_pass_op != prev_state->stencil_front_z_pass_op))
292      glStencilOpSeparate(GL_FRONT,
293                          stencil_front_fail_op,
294                          stencil_front_z_fail_op,
295                          stencil_front_z_pass_op);
296    if ((stencil_back_fail_op != prev_state->stencil_back_fail_op) ||
297        (stencil_back_z_fail_op != prev_state->stencil_back_z_fail_op) ||
298        (stencil_back_z_pass_op != prev_state->stencil_back_z_pass_op))
299      glStencilOpSeparate(GL_BACK,
300                          stencil_back_fail_op,
301                          stencil_back_z_fail_op,
302                          stencil_back_z_pass_op);
303    if ((viewport_x != prev_state->viewport_x) ||
304        (viewport_y != prev_state->viewport_y) ||
305        (viewport_width != prev_state->viewport_width) ||
306        (viewport_height != prev_state->viewport_height))
307      glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
308  } else {
309    glBlendColor(blend_color_red,
310                 blend_color_green,
311                 blend_color_blue,
312                 blend_color_alpha);
313    glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
314    glBlendFuncSeparate(
315        blend_source_rgb, blend_dest_rgb, blend_source_alpha, blend_dest_alpha);
316    glClearColor(color_clear_red,
317                 color_clear_green,
318                 color_clear_blue,
319                 color_clear_alpha);
320    glClearDepth(depth_clear);
321    glClearStencil(stencil_clear);
322    glColorMask(cached_color_mask_red,
323                cached_color_mask_green,
324                cached_color_mask_blue,
325                cached_color_mask_alpha);
326    glCullFace(cull_mode);
327    glDepthFunc(depth_func);
328    glDepthMask(cached_depth_mask);
329    glDepthRange(z_near, z_far);
330    glFrontFace(front_face);
331    glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
332    if (feature_info_->feature_flags().oes_standard_derivatives) {
333      glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
334             hint_fragment_shader_derivative);
335    }
336    glLineWidth(line_width);
337    if (feature_info_->feature_flags().chromium_path_rendering) {
338      glMatrixLoadfEXT(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
339    }
340    if (feature_info_->feature_flags().chromium_path_rendering) {
341      glMatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM, projection_matrix);
342    }
343    glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
344    glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
345    glPolygonOffset(polygon_offset_factor, polygon_offset_units);
346    glSampleCoverage(sample_coverage_value, sample_coverage_invert);
347    glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
348    glStencilFuncSeparate(
349        GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
350    glStencilFuncSeparate(
351        GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
352    glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
353    glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
354    glStencilOpSeparate(GL_FRONT,
355                        stencil_front_fail_op,
356                        stencil_front_z_fail_op,
357                        stencil_front_z_pass_op);
358    glStencilOpSeparate(GL_BACK,
359                        stencil_back_fail_op,
360                        stencil_back_z_fail_op,
361                        stencil_back_z_pass_op);
362    glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
363  }
364}
365bool ContextState::GetEnabled(GLenum cap) const {
366  switch (cap) {
367    case GL_BLEND:
368      return enable_flags.blend;
369    case GL_CULL_FACE:
370      return enable_flags.cull_face;
371    case GL_DEPTH_TEST:
372      return enable_flags.depth_test;
373    case GL_DITHER:
374      return enable_flags.dither;
375    case GL_POLYGON_OFFSET_FILL:
376      return enable_flags.polygon_offset_fill;
377    case GL_SAMPLE_ALPHA_TO_COVERAGE:
378      return enable_flags.sample_alpha_to_coverage;
379    case GL_SAMPLE_COVERAGE:
380      return enable_flags.sample_coverage;
381    case GL_SCISSOR_TEST:
382      return enable_flags.scissor_test;
383    case GL_STENCIL_TEST:
384      return enable_flags.stencil_test;
385    default:
386      NOTREACHED();
387      return false;
388  }
389}
390
391bool ContextState::GetStateAsGLint(GLenum pname,
392                                   GLint* params,
393                                   GLsizei* num_written) const {
394  switch (pname) {
395    case GL_BLEND_COLOR:
396      *num_written = 4;
397      if (params) {
398        params[0] = static_cast<GLint>(blend_color_red);
399        params[1] = static_cast<GLint>(blend_color_green);
400        params[2] = static_cast<GLint>(blend_color_blue);
401        params[3] = static_cast<GLint>(blend_color_alpha);
402      }
403      return true;
404    case GL_BLEND_EQUATION_RGB:
405      *num_written = 1;
406      if (params) {
407        params[0] = static_cast<GLint>(blend_equation_rgb);
408      }
409      return true;
410    case GL_BLEND_EQUATION_ALPHA:
411      *num_written = 1;
412      if (params) {
413        params[0] = static_cast<GLint>(blend_equation_alpha);
414      }
415      return true;
416    case GL_BLEND_SRC_RGB:
417      *num_written = 1;
418      if (params) {
419        params[0] = static_cast<GLint>(blend_source_rgb);
420      }
421      return true;
422    case GL_BLEND_DST_RGB:
423      *num_written = 1;
424      if (params) {
425        params[0] = static_cast<GLint>(blend_dest_rgb);
426      }
427      return true;
428    case GL_BLEND_SRC_ALPHA:
429      *num_written = 1;
430      if (params) {
431        params[0] = static_cast<GLint>(blend_source_alpha);
432      }
433      return true;
434    case GL_BLEND_DST_ALPHA:
435      *num_written = 1;
436      if (params) {
437        params[0] = static_cast<GLint>(blend_dest_alpha);
438      }
439      return true;
440    case GL_COLOR_CLEAR_VALUE:
441      *num_written = 4;
442      if (params) {
443        params[0] = static_cast<GLint>(color_clear_red);
444        params[1] = static_cast<GLint>(color_clear_green);
445        params[2] = static_cast<GLint>(color_clear_blue);
446        params[3] = static_cast<GLint>(color_clear_alpha);
447      }
448      return true;
449    case GL_DEPTH_CLEAR_VALUE:
450      *num_written = 1;
451      if (params) {
452        params[0] = static_cast<GLint>(depth_clear);
453      }
454      return true;
455    case GL_STENCIL_CLEAR_VALUE:
456      *num_written = 1;
457      if (params) {
458        params[0] = static_cast<GLint>(stencil_clear);
459      }
460      return true;
461    case GL_COLOR_WRITEMASK:
462      *num_written = 4;
463      if (params) {
464        params[0] = static_cast<GLint>(color_mask_red);
465        params[1] = static_cast<GLint>(color_mask_green);
466        params[2] = static_cast<GLint>(color_mask_blue);
467        params[3] = static_cast<GLint>(color_mask_alpha);
468      }
469      return true;
470    case GL_CULL_FACE_MODE:
471      *num_written = 1;
472      if (params) {
473        params[0] = static_cast<GLint>(cull_mode);
474      }
475      return true;
476    case GL_DEPTH_FUNC:
477      *num_written = 1;
478      if (params) {
479        params[0] = static_cast<GLint>(depth_func);
480      }
481      return true;
482    case GL_DEPTH_WRITEMASK:
483      *num_written = 1;
484      if (params) {
485        params[0] = static_cast<GLint>(depth_mask);
486      }
487      return true;
488    case GL_DEPTH_RANGE:
489      *num_written = 2;
490      if (params) {
491        params[0] = static_cast<GLint>(z_near);
492        params[1] = static_cast<GLint>(z_far);
493      }
494      return true;
495    case GL_FRONT_FACE:
496      *num_written = 1;
497      if (params) {
498        params[0] = static_cast<GLint>(front_face);
499      }
500      return true;
501    case GL_GENERATE_MIPMAP_HINT:
502      *num_written = 1;
503      if (params) {
504        params[0] = static_cast<GLint>(hint_generate_mipmap);
505      }
506      return true;
507    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
508      *num_written = 1;
509      if (params) {
510        params[0] = static_cast<GLint>(hint_fragment_shader_derivative);
511      }
512      return true;
513    case GL_LINE_WIDTH:
514      *num_written = 1;
515      if (params) {
516        params[0] = static_cast<GLint>(line_width);
517      }
518      return true;
519    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
520      *num_written = 16;
521      if (params) {
522        for (size_t i = 0; i < 16; ++i) {
523          params[i] = static_cast<GLint>(round(modelview_matrix[i]));
524        }
525      }
526      return true;
527    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
528      *num_written = 16;
529      if (params) {
530        for (size_t i = 0; i < 16; ++i) {
531          params[i] = static_cast<GLint>(round(projection_matrix[i]));
532        }
533      }
534      return true;
535    case GL_PACK_ALIGNMENT:
536      *num_written = 1;
537      if (params) {
538        params[0] = static_cast<GLint>(pack_alignment);
539      }
540      return true;
541    case GL_UNPACK_ALIGNMENT:
542      *num_written = 1;
543      if (params) {
544        params[0] = static_cast<GLint>(unpack_alignment);
545      }
546      return true;
547    case GL_POLYGON_OFFSET_FACTOR:
548      *num_written = 1;
549      if (params) {
550        params[0] = static_cast<GLint>(round(polygon_offset_factor));
551      }
552      return true;
553    case GL_POLYGON_OFFSET_UNITS:
554      *num_written = 1;
555      if (params) {
556        params[0] = static_cast<GLint>(round(polygon_offset_units));
557      }
558      return true;
559    case GL_SAMPLE_COVERAGE_VALUE:
560      *num_written = 1;
561      if (params) {
562        params[0] = static_cast<GLint>(sample_coverage_value);
563      }
564      return true;
565    case GL_SAMPLE_COVERAGE_INVERT:
566      *num_written = 1;
567      if (params) {
568        params[0] = static_cast<GLint>(sample_coverage_invert);
569      }
570      return true;
571    case GL_SCISSOR_BOX:
572      *num_written = 4;
573      if (params) {
574        params[0] = static_cast<GLint>(scissor_x);
575        params[1] = static_cast<GLint>(scissor_y);
576        params[2] = static_cast<GLint>(scissor_width);
577        params[3] = static_cast<GLint>(scissor_height);
578      }
579      return true;
580    case GL_STENCIL_FUNC:
581      *num_written = 1;
582      if (params) {
583        params[0] = static_cast<GLint>(stencil_front_func);
584      }
585      return true;
586    case GL_STENCIL_REF:
587      *num_written = 1;
588      if (params) {
589        params[0] = static_cast<GLint>(stencil_front_ref);
590      }
591      return true;
592    case GL_STENCIL_VALUE_MASK:
593      *num_written = 1;
594      if (params) {
595        params[0] = static_cast<GLint>(stencil_front_mask);
596      }
597      return true;
598    case GL_STENCIL_BACK_FUNC:
599      *num_written = 1;
600      if (params) {
601        params[0] = static_cast<GLint>(stencil_back_func);
602      }
603      return true;
604    case GL_STENCIL_BACK_REF:
605      *num_written = 1;
606      if (params) {
607        params[0] = static_cast<GLint>(stencil_back_ref);
608      }
609      return true;
610    case GL_STENCIL_BACK_VALUE_MASK:
611      *num_written = 1;
612      if (params) {
613        params[0] = static_cast<GLint>(stencil_back_mask);
614      }
615      return true;
616    case GL_STENCIL_WRITEMASK:
617      *num_written = 1;
618      if (params) {
619        params[0] = static_cast<GLint>(stencil_front_writemask);
620      }
621      return true;
622    case GL_STENCIL_BACK_WRITEMASK:
623      *num_written = 1;
624      if (params) {
625        params[0] = static_cast<GLint>(stencil_back_writemask);
626      }
627      return true;
628    case GL_STENCIL_FAIL:
629      *num_written = 1;
630      if (params) {
631        params[0] = static_cast<GLint>(stencil_front_fail_op);
632      }
633      return true;
634    case GL_STENCIL_PASS_DEPTH_FAIL:
635      *num_written = 1;
636      if (params) {
637        params[0] = static_cast<GLint>(stencil_front_z_fail_op);
638      }
639      return true;
640    case GL_STENCIL_PASS_DEPTH_PASS:
641      *num_written = 1;
642      if (params) {
643        params[0] = static_cast<GLint>(stencil_front_z_pass_op);
644      }
645      return true;
646    case GL_STENCIL_BACK_FAIL:
647      *num_written = 1;
648      if (params) {
649        params[0] = static_cast<GLint>(stencil_back_fail_op);
650      }
651      return true;
652    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
653      *num_written = 1;
654      if (params) {
655        params[0] = static_cast<GLint>(stencil_back_z_fail_op);
656      }
657      return true;
658    case GL_STENCIL_BACK_PASS_DEPTH_PASS:
659      *num_written = 1;
660      if (params) {
661        params[0] = static_cast<GLint>(stencil_back_z_pass_op);
662      }
663      return true;
664    case GL_VIEWPORT:
665      *num_written = 4;
666      if (params) {
667        params[0] = static_cast<GLint>(viewport_x);
668        params[1] = static_cast<GLint>(viewport_y);
669        params[2] = static_cast<GLint>(viewport_width);
670        params[3] = static_cast<GLint>(viewport_height);
671      }
672      return true;
673    case GL_BLEND:
674      *num_written = 1;
675      if (params) {
676        params[0] = static_cast<GLint>(enable_flags.blend);
677      }
678      return true;
679    case GL_CULL_FACE:
680      *num_written = 1;
681      if (params) {
682        params[0] = static_cast<GLint>(enable_flags.cull_face);
683      }
684      return true;
685    case GL_DEPTH_TEST:
686      *num_written = 1;
687      if (params) {
688        params[0] = static_cast<GLint>(enable_flags.depth_test);
689      }
690      return true;
691    case GL_DITHER:
692      *num_written = 1;
693      if (params) {
694        params[0] = static_cast<GLint>(enable_flags.dither);
695      }
696      return true;
697    case GL_POLYGON_OFFSET_FILL:
698      *num_written = 1;
699      if (params) {
700        params[0] = static_cast<GLint>(enable_flags.polygon_offset_fill);
701      }
702      return true;
703    case GL_SAMPLE_ALPHA_TO_COVERAGE:
704      *num_written = 1;
705      if (params) {
706        params[0] = static_cast<GLint>(enable_flags.sample_alpha_to_coverage);
707      }
708      return true;
709    case GL_SAMPLE_COVERAGE:
710      *num_written = 1;
711      if (params) {
712        params[0] = static_cast<GLint>(enable_flags.sample_coverage);
713      }
714      return true;
715    case GL_SCISSOR_TEST:
716      *num_written = 1;
717      if (params) {
718        params[0] = static_cast<GLint>(enable_flags.scissor_test);
719      }
720      return true;
721    case GL_STENCIL_TEST:
722      *num_written = 1;
723      if (params) {
724        params[0] = static_cast<GLint>(enable_flags.stencil_test);
725      }
726      return true;
727    default:
728      return false;
729  }
730}
731
732bool ContextState::GetStateAsGLfloat(GLenum pname,
733                                     GLfloat* params,
734                                     GLsizei* num_written) const {
735  switch (pname) {
736    case GL_BLEND_COLOR:
737      *num_written = 4;
738      if (params) {
739        params[0] = static_cast<GLfloat>(blend_color_red);
740        params[1] = static_cast<GLfloat>(blend_color_green);
741        params[2] = static_cast<GLfloat>(blend_color_blue);
742        params[3] = static_cast<GLfloat>(blend_color_alpha);
743      }
744      return true;
745    case GL_BLEND_EQUATION_RGB:
746      *num_written = 1;
747      if (params) {
748        params[0] = static_cast<GLfloat>(blend_equation_rgb);
749      }
750      return true;
751    case GL_BLEND_EQUATION_ALPHA:
752      *num_written = 1;
753      if (params) {
754        params[0] = static_cast<GLfloat>(blend_equation_alpha);
755      }
756      return true;
757    case GL_BLEND_SRC_RGB:
758      *num_written = 1;
759      if (params) {
760        params[0] = static_cast<GLfloat>(blend_source_rgb);
761      }
762      return true;
763    case GL_BLEND_DST_RGB:
764      *num_written = 1;
765      if (params) {
766        params[0] = static_cast<GLfloat>(blend_dest_rgb);
767      }
768      return true;
769    case GL_BLEND_SRC_ALPHA:
770      *num_written = 1;
771      if (params) {
772        params[0] = static_cast<GLfloat>(blend_source_alpha);
773      }
774      return true;
775    case GL_BLEND_DST_ALPHA:
776      *num_written = 1;
777      if (params) {
778        params[0] = static_cast<GLfloat>(blend_dest_alpha);
779      }
780      return true;
781    case GL_COLOR_CLEAR_VALUE:
782      *num_written = 4;
783      if (params) {
784        params[0] = static_cast<GLfloat>(color_clear_red);
785        params[1] = static_cast<GLfloat>(color_clear_green);
786        params[2] = static_cast<GLfloat>(color_clear_blue);
787        params[3] = static_cast<GLfloat>(color_clear_alpha);
788      }
789      return true;
790    case GL_DEPTH_CLEAR_VALUE:
791      *num_written = 1;
792      if (params) {
793        params[0] = static_cast<GLfloat>(depth_clear);
794      }
795      return true;
796    case GL_STENCIL_CLEAR_VALUE:
797      *num_written = 1;
798      if (params) {
799        params[0] = static_cast<GLfloat>(stencil_clear);
800      }
801      return true;
802    case GL_COLOR_WRITEMASK:
803      *num_written = 4;
804      if (params) {
805        params[0] = static_cast<GLfloat>(color_mask_red);
806        params[1] = static_cast<GLfloat>(color_mask_green);
807        params[2] = static_cast<GLfloat>(color_mask_blue);
808        params[3] = static_cast<GLfloat>(color_mask_alpha);
809      }
810      return true;
811    case GL_CULL_FACE_MODE:
812      *num_written = 1;
813      if (params) {
814        params[0] = static_cast<GLfloat>(cull_mode);
815      }
816      return true;
817    case GL_DEPTH_FUNC:
818      *num_written = 1;
819      if (params) {
820        params[0] = static_cast<GLfloat>(depth_func);
821      }
822      return true;
823    case GL_DEPTH_WRITEMASK:
824      *num_written = 1;
825      if (params) {
826        params[0] = static_cast<GLfloat>(depth_mask);
827      }
828      return true;
829    case GL_DEPTH_RANGE:
830      *num_written = 2;
831      if (params) {
832        params[0] = static_cast<GLfloat>(z_near);
833        params[1] = static_cast<GLfloat>(z_far);
834      }
835      return true;
836    case GL_FRONT_FACE:
837      *num_written = 1;
838      if (params) {
839        params[0] = static_cast<GLfloat>(front_face);
840      }
841      return true;
842    case GL_GENERATE_MIPMAP_HINT:
843      *num_written = 1;
844      if (params) {
845        params[0] = static_cast<GLfloat>(hint_generate_mipmap);
846      }
847      return true;
848    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
849      *num_written = 1;
850      if (params) {
851        params[0] = static_cast<GLfloat>(hint_fragment_shader_derivative);
852      }
853      return true;
854    case GL_LINE_WIDTH:
855      *num_written = 1;
856      if (params) {
857        params[0] = static_cast<GLfloat>(line_width);
858      }
859      return true;
860    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
861      *num_written = 16;
862      if (params) {
863        memcpy(params, modelview_matrix, sizeof(GLfloat) * 16);
864      }
865      return true;
866    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
867      *num_written = 16;
868      if (params) {
869        memcpy(params, projection_matrix, sizeof(GLfloat) * 16);
870      }
871      return true;
872    case GL_PACK_ALIGNMENT:
873      *num_written = 1;
874      if (params) {
875        params[0] = static_cast<GLfloat>(pack_alignment);
876      }
877      return true;
878    case GL_UNPACK_ALIGNMENT:
879      *num_written = 1;
880      if (params) {
881        params[0] = static_cast<GLfloat>(unpack_alignment);
882      }
883      return true;
884    case GL_POLYGON_OFFSET_FACTOR:
885      *num_written = 1;
886      if (params) {
887        params[0] = static_cast<GLfloat>(polygon_offset_factor);
888      }
889      return true;
890    case GL_POLYGON_OFFSET_UNITS:
891      *num_written = 1;
892      if (params) {
893        params[0] = static_cast<GLfloat>(polygon_offset_units);
894      }
895      return true;
896    case GL_SAMPLE_COVERAGE_VALUE:
897      *num_written = 1;
898      if (params) {
899        params[0] = static_cast<GLfloat>(sample_coverage_value);
900      }
901      return true;
902    case GL_SAMPLE_COVERAGE_INVERT:
903      *num_written = 1;
904      if (params) {
905        params[0] = static_cast<GLfloat>(sample_coverage_invert);
906      }
907      return true;
908    case GL_SCISSOR_BOX:
909      *num_written = 4;
910      if (params) {
911        params[0] = static_cast<GLfloat>(scissor_x);
912        params[1] = static_cast<GLfloat>(scissor_y);
913        params[2] = static_cast<GLfloat>(scissor_width);
914        params[3] = static_cast<GLfloat>(scissor_height);
915      }
916      return true;
917    case GL_STENCIL_FUNC:
918      *num_written = 1;
919      if (params) {
920        params[0] = static_cast<GLfloat>(stencil_front_func);
921      }
922      return true;
923    case GL_STENCIL_REF:
924      *num_written = 1;
925      if (params) {
926        params[0] = static_cast<GLfloat>(stencil_front_ref);
927      }
928      return true;
929    case GL_STENCIL_VALUE_MASK:
930      *num_written = 1;
931      if (params) {
932        params[0] = static_cast<GLfloat>(stencil_front_mask);
933      }
934      return true;
935    case GL_STENCIL_BACK_FUNC:
936      *num_written = 1;
937      if (params) {
938        params[0] = static_cast<GLfloat>(stencil_back_func);
939      }
940      return true;
941    case GL_STENCIL_BACK_REF:
942      *num_written = 1;
943      if (params) {
944        params[0] = static_cast<GLfloat>(stencil_back_ref);
945      }
946      return true;
947    case GL_STENCIL_BACK_VALUE_MASK:
948      *num_written = 1;
949      if (params) {
950        params[0] = static_cast<GLfloat>(stencil_back_mask);
951      }
952      return true;
953    case GL_STENCIL_WRITEMASK:
954      *num_written = 1;
955      if (params) {
956        params[0] = static_cast<GLfloat>(stencil_front_writemask);
957      }
958      return true;
959    case GL_STENCIL_BACK_WRITEMASK:
960      *num_written = 1;
961      if (params) {
962        params[0] = static_cast<GLfloat>(stencil_back_writemask);
963      }
964      return true;
965    case GL_STENCIL_FAIL:
966      *num_written = 1;
967      if (params) {
968        params[0] = static_cast<GLfloat>(stencil_front_fail_op);
969      }
970      return true;
971    case GL_STENCIL_PASS_DEPTH_FAIL:
972      *num_written = 1;
973      if (params) {
974        params[0] = static_cast<GLfloat>(stencil_front_z_fail_op);
975      }
976      return true;
977    case GL_STENCIL_PASS_DEPTH_PASS:
978      *num_written = 1;
979      if (params) {
980        params[0] = static_cast<GLfloat>(stencil_front_z_pass_op);
981      }
982      return true;
983    case GL_STENCIL_BACK_FAIL:
984      *num_written = 1;
985      if (params) {
986        params[0] = static_cast<GLfloat>(stencil_back_fail_op);
987      }
988      return true;
989    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
990      *num_written = 1;
991      if (params) {
992        params[0] = static_cast<GLfloat>(stencil_back_z_fail_op);
993      }
994      return true;
995    case GL_STENCIL_BACK_PASS_DEPTH_PASS:
996      *num_written = 1;
997      if (params) {
998        params[0] = static_cast<GLfloat>(stencil_back_z_pass_op);
999      }
1000      return true;
1001    case GL_VIEWPORT:
1002      *num_written = 4;
1003      if (params) {
1004        params[0] = static_cast<GLfloat>(viewport_x);
1005        params[1] = static_cast<GLfloat>(viewport_y);
1006        params[2] = static_cast<GLfloat>(viewport_width);
1007        params[3] = static_cast<GLfloat>(viewport_height);
1008      }
1009      return true;
1010    case GL_BLEND:
1011      *num_written = 1;
1012      if (params) {
1013        params[0] = static_cast<GLfloat>(enable_flags.blend);
1014      }
1015      return true;
1016    case GL_CULL_FACE:
1017      *num_written = 1;
1018      if (params) {
1019        params[0] = static_cast<GLfloat>(enable_flags.cull_face);
1020      }
1021      return true;
1022    case GL_DEPTH_TEST:
1023      *num_written = 1;
1024      if (params) {
1025        params[0] = static_cast<GLfloat>(enable_flags.depth_test);
1026      }
1027      return true;
1028    case GL_DITHER:
1029      *num_written = 1;
1030      if (params) {
1031        params[0] = static_cast<GLfloat>(enable_flags.dither);
1032      }
1033      return true;
1034    case GL_POLYGON_OFFSET_FILL:
1035      *num_written = 1;
1036      if (params) {
1037        params[0] = static_cast<GLfloat>(enable_flags.polygon_offset_fill);
1038      }
1039      return true;
1040    case GL_SAMPLE_ALPHA_TO_COVERAGE:
1041      *num_written = 1;
1042      if (params) {
1043        params[0] = static_cast<GLfloat>(enable_flags.sample_alpha_to_coverage);
1044      }
1045      return true;
1046    case GL_SAMPLE_COVERAGE:
1047      *num_written = 1;
1048      if (params) {
1049        params[0] = static_cast<GLfloat>(enable_flags.sample_coverage);
1050      }
1051      return true;
1052    case GL_SCISSOR_TEST:
1053      *num_written = 1;
1054      if (params) {
1055        params[0] = static_cast<GLfloat>(enable_flags.scissor_test);
1056      }
1057      return true;
1058    case GL_STENCIL_TEST:
1059      *num_written = 1;
1060      if (params) {
1061        params[0] = static_cast<GLfloat>(enable_flags.stencil_test);
1062      }
1063      return true;
1064    default:
1065      return false;
1066  }
1067}
1068#endif  // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
1069