14ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is auto-generated from
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gpu/command_buffer/build_gles2_cmd_buffer.py
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// It's formatted by clang-format using chromium coding style:
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//    clang-format -i -style=chromium filename
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DO NOT EDIT!
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is included by context_state.cc
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContextState::EnableFlags::EnableFlags()
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : blend(false),
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_blend(false),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cull_face(false),
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_cull_face(false),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      depth_test(false),
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_depth_test(false),
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dither(true),
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_dither(true),
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      polygon_offset_fill(false),
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_polygon_offset_fill(false),
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sample_alpha_to_coverage(false),
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_sample_alpha_to_coverage(false),
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sample_coverage(false),
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_sample_coverage(false),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scissor_test(false),
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_scissor_test(false),
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      stencil_test(false),
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      cached_stencil_test(false) {
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContextState::Initialize() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_color_red = 0.0f;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_color_green = 0.0f;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_color_blue = 0.0f;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_color_alpha = 0.0f;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_equation_rgb = GL_FUNC_ADD;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_equation_alpha = GL_FUNC_ADD;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_source_rgb = GL_ONE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_dest_rgb = GL_ZERO;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_source_alpha = GL_ONE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blend_dest_alpha = GL_ZERO;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_clear_red = 0.0f;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_clear_green = 0.0f;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_clear_blue = 0.0f;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_clear_alpha = 0.0f;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  depth_clear = 1.0f;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_clear = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_mask_red = true;
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_color_mask_red = true;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_mask_green = true;
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_color_mask_green = true;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_mask_blue = true;
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_color_mask_blue = true;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_mask_alpha = true;
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_color_mask_alpha = true;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cull_mode = GL_BACK;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  depth_func = GL_LESS;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  depth_mask = true;
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_depth_mask = true;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  z_near = 0.0f;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  z_far = 1.0f;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  front_face = GL_CCW;
68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  hint_generate_mipmap = GL_DONT_CARE;
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  hint_fragment_shader_derivative = GL_DONT_CARE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  line_width = 1.0f;
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[0] = 1.0f;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[1] = 0.0f;
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[2] = 0.0f;
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[3] = 0.0f;
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[4] = 0.0f;
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[5] = 1.0f;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[6] = 0.0f;
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[7] = 0.0f;
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[8] = 0.0f;
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[9] = 0.0f;
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[10] = 1.0f;
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[11] = 0.0f;
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[12] = 0.0f;
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[13] = 0.0f;
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[14] = 0.0f;
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  modelview_matrix[15] = 1.0f;
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[0] = 1.0f;
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[1] = 0.0f;
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[2] = 0.0f;
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[3] = 0.0f;
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[4] = 0.0f;
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[5] = 1.0f;
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[6] = 0.0f;
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[7] = 0.0f;
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[8] = 0.0f;
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[9] = 0.0f;
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[10] = 1.0f;
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[11] = 0.0f;
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[12] = 0.0f;
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[13] = 0.0f;
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[14] = 0.0f;
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  projection_matrix[15] = 1.0f;
103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  pack_alignment = 4;
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  unpack_alignment = 4;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  polygon_offset_factor = 0.0f;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  polygon_offset_units = 0.0f;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sample_coverage_value = 1.0f;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sample_coverage_invert = false;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scissor_x = 0;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scissor_y = 0;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scissor_width = 1;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scissor_height = 1;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_func = GL_ALWAYS;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_ref = 0;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_mask = 0xFFFFFFFFU;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_func = GL_ALWAYS;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_ref = 0;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_mask = 0xFFFFFFFFU;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_writemask = 0xFFFFFFFFU;
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_stencil_front_writemask = 0xFFFFFFFFU;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_writemask = 0xFFFFFFFFU;
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  cached_stencil_back_writemask = 0xFFFFFFFFU;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_fail_op = GL_KEEP;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_z_fail_op = GL_KEEP;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_front_z_pass_op = GL_KEEP;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_fail_op = GL_KEEP;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_z_fail_op = GL_KEEP;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stencil_back_z_pass_op = GL_KEEP;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  viewport_x = 0;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  viewport_y = 0;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  viewport_width = 1;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  viewport_height = 1;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ContextState::InitCapabilities(const ContextState* prev_state) const {
136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (prev_state) {
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_blend != enable_flags.cached_blend)
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_BLEND, enable_flags.cached_blend);
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_cull_face !=
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_cull_face)
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_depth_test !=
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_depth_test)
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_dither != enable_flags.cached_dither)
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_DITHER, enable_flags.cached_dither);
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_polygon_offset_fill !=
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_polygon_offset_fill)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_POLYGON_OFFSET_FILL,
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    enable_flags.cached_polygon_offset_fill);
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_sample_alpha_to_coverage !=
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_sample_alpha_to_coverage)
153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    enable_flags.cached_sample_alpha_to_coverage);
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_sample_coverage !=
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_sample_coverage)
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_scissor_test !=
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_scissor_test)
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (prev_state->enable_flags.cached_stencil_test !=
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        enable_flags.cached_stencil_test)
163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_BLEND, enable_flags.cached_blend);
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_DITHER, enable_flags.cached_dither);
169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_POLYGON_OFFSET_FILL,
170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                  enable_flags.cached_polygon_offset_fill);
171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                  enable_flags.cached_sample_alpha_to_coverage);
173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ContextState::InitState(const ContextState* prev_state) const {
180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (prev_state) {
181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((blend_color_red != prev_state->blend_color_red) ||
182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_color_green != prev_state->blend_color_green) ||
183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_color_blue != prev_state->blend_color_blue) ||
184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_color_alpha != prev_state->blend_color_alpha))
185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glBlendColor(blend_color_red,
186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   blend_color_green,
187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   blend_color_blue,
188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   blend_color_alpha);
189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((blend_equation_rgb != prev_state->blend_equation_rgb) ||
190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_equation_alpha != prev_state->blend_equation_alpha))
191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((blend_source_rgb != prev_state->blend_source_rgb) ||
193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_dest_rgb != prev_state->blend_dest_rgb) ||
194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_source_alpha != prev_state->blend_source_alpha) ||
195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (blend_dest_alpha != prev_state->blend_dest_alpha))
196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glBlendFuncSeparate(blend_source_rgb,
197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          blend_dest_rgb,
198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          blend_source_alpha,
199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          blend_dest_alpha);
200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((color_clear_red != prev_state->color_clear_red) ||
201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (color_clear_green != prev_state->color_clear_green) ||
202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (color_clear_blue != prev_state->color_clear_blue) ||
203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (color_clear_alpha != prev_state->color_clear_alpha))
204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glClearColor(color_clear_red,
205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   color_clear_green,
206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   color_clear_blue,
207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   color_clear_alpha);
208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((depth_clear != prev_state->depth_clear))
209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glClearDepth(depth_clear);
210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((stencil_clear != prev_state->stencil_clear))
211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glClearStencil(stencil_clear);
212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if ((cached_color_mask_red != prev_state->cached_color_mask_red) ||
213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        (cached_color_mask_green != prev_state->cached_color_mask_green) ||
214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        (cached_color_mask_blue != prev_state->cached_color_mask_blue) ||
215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        (cached_color_mask_alpha != prev_state->cached_color_mask_alpha))
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      glColorMask(cached_color_mask_red,
217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                  cached_color_mask_green,
218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                  cached_color_mask_blue,
219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                  cached_color_mask_alpha);
220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((cull_mode != prev_state->cull_mode))
221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glCullFace(cull_mode);
222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((depth_func != prev_state->depth_func))
223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glDepthFunc(depth_func);
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if ((cached_depth_mask != prev_state->cached_depth_mask))
225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      glDepthMask(cached_depth_mask);
226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((z_near != prev_state->z_near) || (z_far != prev_state->z_far))
227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glDepthRange(z_near, z_far);
228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((front_face != prev_state->front_face))
229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glFrontFace(front_face);
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (prev_state->hint_generate_mipmap != hint_generate_mipmap) {
231c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().oes_standard_derivatives) {
234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      if (prev_state->hint_fragment_shader_derivative !=
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          hint_fragment_shader_derivative) {
236c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch               hint_fragment_shader_derivative);
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((line_width != prev_state->line_width))
241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glLineWidth(line_width);
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().chromium_path_rendering) {
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (memcmp(prev_state->modelview_matrix,
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 modelview_matrix,
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 sizeof(GLfloat) * 16)) {
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        glMatrixLoadfEXT(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().chromium_path_rendering) {
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (memcmp(prev_state->projection_matrix,
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 projection_matrix,
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 sizeof(GLfloat) * 16)) {
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        glMatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM, projection_matrix);
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (prev_state->pack_alignment != pack_alignment) {
257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (prev_state->unpack_alignment != unpack_alignment) {
260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((polygon_offset_factor != prev_state->polygon_offset_factor) ||
263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (polygon_offset_units != prev_state->polygon_offset_units))
264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glPolygonOffset(polygon_offset_factor, polygon_offset_units);
265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((sample_coverage_value != prev_state->sample_coverage_value) ||
266c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (sample_coverage_invert != prev_state->sample_coverage_invert))
267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glSampleCoverage(sample_coverage_value, sample_coverage_invert);
268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((scissor_x != prev_state->scissor_x) ||
269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (scissor_y != prev_state->scissor_y) ||
270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (scissor_width != prev_state->scissor_width) ||
271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (scissor_height != prev_state->scissor_height))
272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((stencil_front_func != prev_state->stencil_front_func) ||
274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_front_ref != prev_state->stencil_front_ref) ||
275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_front_mask != prev_state->stencil_front_mask))
276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glStencilFuncSeparate(
277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((stencil_back_func != prev_state->stencil_back_func) ||
279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_back_ref != prev_state->stencil_back_ref) ||
280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_back_mask != prev_state->stencil_back_mask))
281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glStencilFuncSeparate(
282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
283010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if ((cached_stencil_front_writemask !=
284010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)         prev_state->cached_stencil_front_writemask))
285010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
286010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if ((cached_stencil_back_writemask !=
287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)         prev_state->cached_stencil_back_writemask))
288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
289c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((stencil_front_fail_op != prev_state->stencil_front_fail_op) ||
290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_front_z_fail_op != prev_state->stencil_front_z_fail_op) ||
291c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_front_z_pass_op != prev_state->stencil_front_z_pass_op))
292c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glStencilOpSeparate(GL_FRONT,
293c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_front_fail_op,
294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_front_z_fail_op,
295c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_front_z_pass_op);
296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((stencil_back_fail_op != prev_state->stencil_back_fail_op) ||
297c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_back_z_fail_op != prev_state->stencil_back_z_fail_op) ||
298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (stencil_back_z_pass_op != prev_state->stencil_back_z_pass_op))
299c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glStencilOpSeparate(GL_BACK,
300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_back_fail_op,
301c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_back_z_fail_op,
302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          stencil_back_z_pass_op);
303c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if ((viewport_x != prev_state->viewport_x) ||
304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (viewport_y != prev_state->viewport_y) ||
305c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (viewport_width != prev_state->viewport_width) ||
306c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        (viewport_height != prev_state->viewport_height))
307c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
308c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
309c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glBlendColor(blend_color_red,
310c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 blend_color_green,
311c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 blend_color_blue,
312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 blend_color_alpha);
313c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
314c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glBlendFuncSeparate(
315c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        blend_source_rgb, blend_dest_rgb, blend_source_alpha, blend_dest_alpha);
316c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glClearColor(color_clear_red,
317c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 color_clear_green,
318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 color_clear_blue,
319c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                 color_clear_alpha);
320c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glClearDepth(depth_clear);
321c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glClearStencil(stencil_clear);
322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    glColorMask(cached_color_mask_red,
323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                cached_color_mask_green,
324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                cached_color_mask_blue,
325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                cached_color_mask_alpha);
326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glCullFace(cull_mode);
327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glDepthFunc(depth_func);
328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    glDepthMask(cached_depth_mask);
329c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glDepthRange(z_near, z_far);
330c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glFrontFace(front_face);
331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().oes_standard_derivatives) {
333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
334c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch             hint_fragment_shader_derivative);
3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glLineWidth(line_width);
3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().chromium_path_rendering) {
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      glMatrixLoadfEXT(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (feature_info_->feature_flags().chromium_path_rendering) {
3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      glMatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM, projection_matrix);
3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
343c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
344c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
345c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glPolygonOffset(polygon_offset_factor, polygon_offset_units);
346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glSampleCoverage(sample_coverage_value, sample_coverage_invert);
347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glStencilFuncSeparate(
349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glStencilFuncSeparate(
351c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glStencilOpSeparate(GL_FRONT,
355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_front_fail_op,
356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_front_z_fail_op,
357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_front_z_pass_op);
358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glStencilOpSeparate(GL_BACK,
359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_back_fail_op,
360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_back_z_fail_op,
361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        stencil_back_z_pass_op);
362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ContextState::GetEnabled(GLenum cap) const {
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (cap) {
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND:
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.blend;
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_CULL_FACE:
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.cull_face;
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DEPTH_TEST:
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.depth_test;
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DITHER:
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.dither;
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_FILL:
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.polygon_offset_fill;
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_ALPHA_TO_COVERAGE:
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.sample_alpha_to_coverage;
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_COVERAGE:
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.sample_coverage;
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SCISSOR_TEST:
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.scissor_test;
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_TEST:
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return enable_flags.stencil_test;
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default:
386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      NOTREACHED();
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return false;
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool ContextState::GetStateAsGLint(GLenum pname,
392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   GLint* params,
393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   GLsizei* num_written) const {
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (pname) {
395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_COLOR:
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 4;
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(blend_color_red);
399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLint>(blend_color_green);
400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLint>(blend_color_blue);
401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLint>(blend_color_alpha);
402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_EQUATION_RGB:
405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(blend_equation_rgb);
408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
409868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
410868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_EQUATION_ALPHA:
411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(blend_equation_alpha);
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_SRC_RGB:
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(blend_source_rgb);
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_DST_RGB:
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(blend_dest_rgb);
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_SRC_ALPHA:
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(blend_source_alpha);
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_DST_ALPHA:
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(blend_dest_alpha);
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
440868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_COLOR_CLEAR_VALUE:
441868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
443868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(color_clear_red);
444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLint>(color_clear_green);
445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLint>(color_clear_blue);
446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLint>(color_clear_alpha);
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
449868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_CLEAR_VALUE:
450868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
452868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(depth_clear);
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_CLEAR_VALUE:
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_clear);
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_COLOR_WRITEMASK:
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 4;
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(color_mask_red);
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[1] = static_cast<GLint>(color_mask_green);
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[2] = static_cast<GLint>(color_mask_blue);
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[3] = static_cast<GLint>(color_mask_alpha);
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
470868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_CULL_FACE_MODE:
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
473868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(cull_mode);
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
476868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_FUNC:
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
479868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(depth_func);
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
482868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_WRITEMASK:
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
485868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(depth_mask);
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
488868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_RANGE:
489868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 2;
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
491868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(z_near);
492868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLint>(z_far);
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
495868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_FRONT_FACE:
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(front_face);
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
501868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_GENERATE_MIPMAP_HINT:
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
504868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(hint_generate_mipmap);
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
507868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
510868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(hint_fragment_shader_derivative);
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_LINE_WIDTH:
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
516868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(line_width);
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *num_written = 16;
5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (params) {
5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        for (size_t i = 0; i < 16; ++i) {
5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          params[i] = static_cast<GLint>(round(modelview_matrix[i]));
5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return true;
5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *num_written = 16;
5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (params) {
5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        for (size_t i = 0; i < 16; ++i) {
5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          params[i] = static_cast<GLint>(round(projection_matrix[i]));
5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return true;
535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_PACK_ALIGNMENT:
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(pack_alignment);
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
541868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_UNPACK_ALIGNMENT:
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
544868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(unpack_alignment);
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_FACTOR:
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        params[0] = static_cast<GLint>(round(polygon_offset_factor));
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_UNITS:
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        params[0] = static_cast<GLint>(round(polygon_offset_units));
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SAMPLE_COVERAGE_VALUE:
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(sample_coverage_value);
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SAMPLE_COVERAGE_INVERT:
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(sample_coverage_invert);
569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SCISSOR_BOX:
572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
573868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
574868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(scissor_x);
575868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLint>(scissor_y);
576868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLint>(scissor_width);
577868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLint>(scissor_height);
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_FUNC:
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_func);
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_REF:
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_ref);
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_VALUE_MASK:
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_mask);
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_FUNC:
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_func);
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_REF:
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_ref);
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_VALUE_MASK:
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_mask);
6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
616868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_WRITEMASK:
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
619868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_writemask);
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
622868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_WRITEMASK:
6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
625868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_writemask);
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
628868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_FAIL:
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
631868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_fail_op);
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
634868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_PASS_DEPTH_FAIL:
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
637868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_z_fail_op);
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
640868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_PASS_DEPTH_PASS:
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
643868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_front_z_pass_op);
644868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
645868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
646868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_FAIL:
647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
648868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
649868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_fail_op);
650868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
651868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
652868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_z_fail_op);
656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_PASS_DEPTH_PASS:
659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
660868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
661868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(stencil_back_z_pass_op);
662868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_VIEWPORT:
665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
667868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLint>(viewport_x);
668868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLint>(viewport_y);
669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLint>(viewport_width);
670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLint>(viewport_height);
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND:
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.blend);
6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_CULL_FACE:
6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.cull_face);
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DEPTH_TEST:
6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.depth_test);
6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DITHER:
6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.dither);
6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_FILL:
6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.polygon_offset_fill);
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_ALPHA_TO_COVERAGE:
7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.sample_alpha_to_coverage);
7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_COVERAGE:
7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.sample_coverage);
7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SCISSOR_TEST:
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.scissor_test);
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_TEST:
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLint>(enable_flags.stencil_test);
7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default:
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return false;
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool ContextState::GetStateAsGLfloat(GLenum pname,
733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                     GLfloat* params,
734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                     GLsizei* num_written) const {
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (pname) {
736868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_COLOR:
7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 4;
7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
739868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_color_red);
740868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLfloat>(blend_color_green);
741868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLfloat>(blend_color_blue);
742868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLfloat>(blend_color_alpha);
743868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
744868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
745868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_EQUATION_RGB:
746868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
747868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
748868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_equation_rgb);
749868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
750868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
751868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_BLEND_EQUATION_ALPHA:
752868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
753868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
754868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_equation_alpha);
7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_SRC_RGB:
7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_source_rgb);
7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_DST_RGB:
7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_dest_rgb);
7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_SRC_ALPHA:
7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_source_alpha);
7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND_DST_ALPHA:
7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(blend_dest_alpha);
7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
781868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_COLOR_CLEAR_VALUE:
782868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
784868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(color_clear_red);
785868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLfloat>(color_clear_green);
786868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLfloat>(color_clear_blue);
787868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLfloat>(color_clear_alpha);
7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
790868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_CLEAR_VALUE:
791868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
793868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(depth_clear);
7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_CLEAR_VALUE:
7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_clear);
8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_COLOR_WRITEMASK:
8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 4;
8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(color_mask_red);
8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[1] = static_cast<GLfloat>(color_mask_green);
8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[2] = static_cast<GLfloat>(color_mask_blue);
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[3] = static_cast<GLfloat>(color_mask_alpha);
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
811868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_CULL_FACE_MODE:
8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
814868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(cull_mode);
8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
817868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_FUNC:
8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
820868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(depth_func);
8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
823868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_WRITEMASK:
8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
826868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(depth_mask);
8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
829868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_DEPTH_RANGE:
830868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 2;
8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
832868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(z_near);
833868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLfloat>(z_far);
8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
836868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_FRONT_FACE:
8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
839868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(front_face);
8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
842868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_GENERATE_MIPMAP_HINT:
8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
845868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(hint_generate_mipmap);
8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
848868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
851868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(hint_fragment_shader_derivative);
8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
854868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_LINE_WIDTH:
8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
857868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(line_width);
8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
8611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *num_written = 16;
8621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (params) {
8631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        memcpy(params, modelview_matrix, sizeof(GLfloat) * 16);
8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return true;
8661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
8671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *num_written = 16;
8681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (params) {
8691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        memcpy(params, projection_matrix, sizeof(GLfloat) * 16);
8701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
8711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return true;
872868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_PACK_ALIGNMENT:
8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
875868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(pack_alignment);
8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
878868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_UNPACK_ALIGNMENT:
8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
881868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(unpack_alignment);
8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_FACTOR:
8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(polygon_offset_factor);
8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_UNITS:
8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(polygon_offset_units);
8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
896868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SAMPLE_COVERAGE_VALUE:
8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
899868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(sample_coverage_value);
9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
902868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SAMPLE_COVERAGE_INVERT:
9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
905868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(sample_coverage_invert);
906868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
907868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
908868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_SCISSOR_BOX:
909868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
910868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
911868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(scissor_x);
912868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLfloat>(scissor_y);
913868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLfloat>(scissor_width);
914868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLfloat>(scissor_height);
9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_FUNC:
9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_func);
9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_REF:
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_ref);
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_VALUE_MASK:
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_mask);
9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_FUNC:
9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_func);
9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_REF:
9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_ref);
9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_BACK_VALUE_MASK:
9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_mask);
9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
953868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_WRITEMASK:
9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
956868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_writemask);
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
959868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_WRITEMASK:
9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
962868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_writemask);
9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
965868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_FAIL:
9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
968868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_fail_op);
9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
971868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_PASS_DEPTH_FAIL:
9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
974868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_z_fail_op);
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
977868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_PASS_DEPTH_PASS:
9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
980868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_front_z_pass_op);
981868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
982868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
983868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_FAIL:
984868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
985868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
986868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_fail_op);
987868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
988868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
989868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
990868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
991868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
992868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_z_fail_op);
993868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
994868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
995868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_STENCIL_BACK_PASS_DEPTH_PASS:
996868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 1;
997868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
998868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(stencil_back_z_pass_op);
999868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
1000868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      return true;
1001868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    case GL_VIEWPORT:
1002868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      *num_written = 4;
1003868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (params) {
1004868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[0] = static_cast<GLfloat>(viewport_x);
1005868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[1] = static_cast<GLfloat>(viewport_y);
1006868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[2] = static_cast<GLfloat>(viewport_width);
1007868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        params[3] = static_cast<GLfloat>(viewport_height);
10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_BLEND:
10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.blend);
10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_CULL_FACE:
10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.cull_face);
10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DEPTH_TEST:
10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.depth_test);
10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_DITHER:
10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.dither);
10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_POLYGON_OFFSET_FILL:
10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.polygon_offset_fill);
10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_ALPHA_TO_COVERAGE:
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
1043a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.sample_alpha_to_coverage);
10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SAMPLE_COVERAGE:
10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.sample_coverage);
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_SCISSOR_TEST:
10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.scissor_test);
10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case GL_STENCIL_TEST:
10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *num_written = 1;
10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (params) {
10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        params[0] = static_cast<GLfloat>(enable_flags.stencil_test);
10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default:
10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return false;
10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
1069