Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_autogen.h

Issue 11363191: Cache more GL state both service and client side. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file is auto-generated from 5 // This file is auto-generated from
6 // gpu/command_buffer/build_gles2_cmd_buffer.py 6 // gpu/command_buffer/build_gles2_cmd_buffer.py
7 // DO NOT EDIT! 7 // DO NOT EDIT!
8 8
9 // It is included by gles2_cmd_decoder.cc 9 // It is included by gles2_cmd_decoder.cc
10 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 10 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 DoBindTexture(target, texture); 72 DoBindTexture(target, texture);
73 return error::kNoError; 73 return error::kNoError;
74 } 74 }
75 75
76 error::Error GLES2DecoderImpl::HandleBlendColor( 76 error::Error GLES2DecoderImpl::HandleBlendColor(
77 uint32 immediate_data_size, const gles2::BlendColor& c) { 77 uint32 immediate_data_size, const gles2::BlendColor& c) {
78 GLclampf red = static_cast<GLclampf>(c.red); 78 GLclampf red = static_cast<GLclampf>(c.red);
79 GLclampf green = static_cast<GLclampf>(c.green); 79 GLclampf green = static_cast<GLclampf>(c.green);
80 GLclampf blue = static_cast<GLclampf>(c.blue); 80 GLclampf blue = static_cast<GLclampf>(c.blue);
81 GLclampf alpha = static_cast<GLclampf>(c.alpha); 81 GLclampf alpha = static_cast<GLclampf>(c.alpha);
82 state_.blend_color_red = red; 82 if (state_.blend_color_red != red ||
83 state_.blend_color_green = green; 83 state_.blend_color_green != green ||
84 state_.blend_color_blue = blue; 84 state_.blend_color_blue != blue ||
85 state_.blend_color_alpha = alpha; 85 state_.blend_color_alpha != alpha) {
86 glBlendColor(red, green, blue, alpha); 86 state_.blend_color_red = red;
87 state_.blend_color_green = green;
88 state_.blend_color_blue = blue;
89 state_.blend_color_alpha = alpha;
90 glBlendColor(red, green, blue, alpha);
91 }
87 return error::kNoError; 92 return error::kNoError;
88 } 93 }
89 94
90 error::Error GLES2DecoderImpl::HandleBlendEquation( 95 error::Error GLES2DecoderImpl::HandleBlendEquation(
91 uint32 immediate_data_size, const gles2::BlendEquation& c) { 96 uint32 immediate_data_size, const gles2::BlendEquation& c) {
92 GLenum mode = static_cast<GLenum>(c.mode); 97 GLenum mode = static_cast<GLenum>(c.mode);
93 if (!validators_->equation.IsValid(mode)) { 98 if (!validators_->equation.IsValid(mode)) {
94 SetGLErrorInvalidEnum("glBlendEquation", mode, "mode"); 99 SetGLErrorInvalidEnum("glBlendEquation", mode, "mode");
95 return error::kNoError; 100 return error::kNoError;
96 } 101 }
97 state_.blend_equation_rgb = mode; 102 if (state_.blend_equation_rgb != mode ||
98 state_.blend_equation_alpha = mode; 103 state_.blend_equation_alpha != mode) {
99 glBlendEquation(mode); 104 state_.blend_equation_rgb = mode;
105 state_.blend_equation_alpha = mode;
106 glBlendEquation(mode);
107 }
100 return error::kNoError; 108 return error::kNoError;
101 } 109 }
102 110
103 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( 111 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate(
104 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) { 112 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) {
105 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); 113 GLenum modeRGB = static_cast<GLenum>(c.modeRGB);
106 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); 114 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha);
107 if (!validators_->equation.IsValid(modeRGB)) { 115 if (!validators_->equation.IsValid(modeRGB)) {
108 SetGLErrorInvalidEnum("glBlendEquationSeparate", modeRGB, "modeRGB"); 116 SetGLErrorInvalidEnum("glBlendEquationSeparate", modeRGB, "modeRGB");
109 return error::kNoError; 117 return error::kNoError;
110 } 118 }
111 if (!validators_->equation.IsValid(modeAlpha)) { 119 if (!validators_->equation.IsValid(modeAlpha)) {
112 SetGLErrorInvalidEnum("glBlendEquationSeparate", modeAlpha, "modeAlpha"); 120 SetGLErrorInvalidEnum("glBlendEquationSeparate", modeAlpha, "modeAlpha");
113 return error::kNoError; 121 return error::kNoError;
114 } 122 }
115 state_.blend_equation_rgb = modeRGB; 123 if (state_.blend_equation_rgb != modeRGB ||
116 state_.blend_equation_alpha = modeAlpha; 124 state_.blend_equation_alpha != modeAlpha) {
117 glBlendEquationSeparate(modeRGB, modeAlpha); 125 state_.blend_equation_rgb = modeRGB;
126 state_.blend_equation_alpha = modeAlpha;
127 glBlendEquationSeparate(modeRGB, modeAlpha);
128 }
118 return error::kNoError; 129 return error::kNoError;
119 } 130 }
120 131
121 error::Error GLES2DecoderImpl::HandleBlendFunc( 132 error::Error GLES2DecoderImpl::HandleBlendFunc(
122 uint32 immediate_data_size, const gles2::BlendFunc& c) { 133 uint32 immediate_data_size, const gles2::BlendFunc& c) {
123 GLenum sfactor = static_cast<GLenum>(c.sfactor); 134 GLenum sfactor = static_cast<GLenum>(c.sfactor);
124 GLenum dfactor = static_cast<GLenum>(c.dfactor); 135 GLenum dfactor = static_cast<GLenum>(c.dfactor);
125 if (!validators_->src_blend_factor.IsValid(sfactor)) { 136 if (!validators_->src_blend_factor.IsValid(sfactor)) {
126 SetGLErrorInvalidEnum("glBlendFunc", sfactor, "sfactor"); 137 SetGLErrorInvalidEnum("glBlendFunc", sfactor, "sfactor");
127 return error::kNoError; 138 return error::kNoError;
128 } 139 }
129 if (!validators_->dst_blend_factor.IsValid(dfactor)) { 140 if (!validators_->dst_blend_factor.IsValid(dfactor)) {
130 SetGLErrorInvalidEnum("glBlendFunc", dfactor, "dfactor"); 141 SetGLErrorInvalidEnum("glBlendFunc", dfactor, "dfactor");
131 return error::kNoError; 142 return error::kNoError;
132 } 143 }
133 state_.blend_source_rgb = sfactor; 144 if (state_.blend_source_rgb != sfactor ||
134 state_.blend_dest_rgb = dfactor; 145 state_.blend_dest_rgb != dfactor ||
135 state_.blend_source_alpha = sfactor; 146 state_.blend_source_alpha != sfactor ||
136 state_.blend_dest_alpha = dfactor; 147 state_.blend_dest_alpha != dfactor) {
137 glBlendFunc(sfactor, dfactor); 148 state_.blend_source_rgb = sfactor;
149 state_.blend_dest_rgb = dfactor;
150 state_.blend_source_alpha = sfactor;
151 state_.blend_dest_alpha = dfactor;
152 glBlendFunc(sfactor, dfactor);
153 }
138 return error::kNoError; 154 return error::kNoError;
139 } 155 }
140 156
141 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( 157 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
142 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) { 158 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) {
143 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); 159 GLenum srcRGB = static_cast<GLenum>(c.srcRGB);
144 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); 160 GLenum dstRGB = static_cast<GLenum>(c.dstRGB);
145 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); 161 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha);
146 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); 162 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha);
147 if (!validators_->src_blend_factor.IsValid(srcRGB)) { 163 if (!validators_->src_blend_factor.IsValid(srcRGB)) {
148 SetGLErrorInvalidEnum("glBlendFuncSeparate", srcRGB, "srcRGB"); 164 SetGLErrorInvalidEnum("glBlendFuncSeparate", srcRGB, "srcRGB");
149 return error::kNoError; 165 return error::kNoError;
150 } 166 }
151 if (!validators_->dst_blend_factor.IsValid(dstRGB)) { 167 if (!validators_->dst_blend_factor.IsValid(dstRGB)) {
152 SetGLErrorInvalidEnum("glBlendFuncSeparate", dstRGB, "dstRGB"); 168 SetGLErrorInvalidEnum("glBlendFuncSeparate", dstRGB, "dstRGB");
153 return error::kNoError; 169 return error::kNoError;
154 } 170 }
155 if (!validators_->src_blend_factor.IsValid(srcAlpha)) { 171 if (!validators_->src_blend_factor.IsValid(srcAlpha)) {
156 SetGLErrorInvalidEnum("glBlendFuncSeparate", srcAlpha, "srcAlpha"); 172 SetGLErrorInvalidEnum("glBlendFuncSeparate", srcAlpha, "srcAlpha");
157 return error::kNoError; 173 return error::kNoError;
158 } 174 }
159 if (!validators_->dst_blend_factor.IsValid(dstAlpha)) { 175 if (!validators_->dst_blend_factor.IsValid(dstAlpha)) {
160 SetGLErrorInvalidEnum("glBlendFuncSeparate", dstAlpha, "dstAlpha"); 176 SetGLErrorInvalidEnum("glBlendFuncSeparate", dstAlpha, "dstAlpha");
161 return error::kNoError; 177 return error::kNoError;
162 } 178 }
163 state_.blend_source_rgb = srcRGB; 179 if (state_.blend_source_rgb != srcRGB ||
164 state_.blend_dest_rgb = dstRGB; 180 state_.blend_dest_rgb != dstRGB ||
165 state_.blend_source_alpha = srcAlpha; 181 state_.blend_source_alpha != srcAlpha ||
166 state_.blend_dest_alpha = dstAlpha; 182 state_.blend_dest_alpha != dstAlpha) {
167 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 183 state_.blend_source_rgb = srcRGB;
184 state_.blend_dest_rgb = dstRGB;
185 state_.blend_source_alpha = srcAlpha;
186 state_.blend_dest_alpha = dstAlpha;
187 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
188 }
168 return error::kNoError; 189 return error::kNoError;
169 } 190 }
170 191
171 error::Error GLES2DecoderImpl::HandleBufferSubData( 192 error::Error GLES2DecoderImpl::HandleBufferSubData(
172 uint32 immediate_data_size, const gles2::BufferSubData& c) { 193 uint32 immediate_data_size, const gles2::BufferSubData& c) {
173 GLenum target = static_cast<GLenum>(c.target); 194 GLenum target = static_cast<GLenum>(c.target);
174 GLintptr offset = static_cast<GLintptr>(c.offset); 195 GLintptr offset = static_cast<GLintptr>(c.offset);
175 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 196 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
176 uint32 data_size = size; 197 uint32 data_size = size;
177 const void* data = GetSharedMemoryAs<const void*>( 198 const void* data = GetSharedMemoryAs<const void*>(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 *result_dst = DoCheckFramebufferStatus(target); 251 *result_dst = DoCheckFramebufferStatus(target);
231 return error::kNoError; 252 return error::kNoError;
232 } 253 }
233 254
234 error::Error GLES2DecoderImpl::HandleClearColor( 255 error::Error GLES2DecoderImpl::HandleClearColor(
235 uint32 immediate_data_size, const gles2::ClearColor& c) { 256 uint32 immediate_data_size, const gles2::ClearColor& c) {
236 GLclampf red = static_cast<GLclampf>(c.red); 257 GLclampf red = static_cast<GLclampf>(c.red);
237 GLclampf green = static_cast<GLclampf>(c.green); 258 GLclampf green = static_cast<GLclampf>(c.green);
238 GLclampf blue = static_cast<GLclampf>(c.blue); 259 GLclampf blue = static_cast<GLclampf>(c.blue);
239 GLclampf alpha = static_cast<GLclampf>(c.alpha); 260 GLclampf alpha = static_cast<GLclampf>(c.alpha);
240 state_.color_clear_red = red; 261 if (state_.color_clear_red != red ||
241 state_.color_clear_green = green; 262 state_.color_clear_green != green ||
242 state_.color_clear_blue = blue; 263 state_.color_clear_blue != blue ||
243 state_.color_clear_alpha = alpha; 264 state_.color_clear_alpha != alpha) {
244 glClearColor(red, green, blue, alpha); 265 state_.color_clear_red = red;
266 state_.color_clear_green = green;
267 state_.color_clear_blue = blue;
268 state_.color_clear_alpha = alpha;
269 glClearColor(red, green, blue, alpha);
270 }
245 return error::kNoError; 271 return error::kNoError;
246 } 272 }
247 273
248 error::Error GLES2DecoderImpl::HandleClearDepthf( 274 error::Error GLES2DecoderImpl::HandleClearDepthf(
249 uint32 immediate_data_size, const gles2::ClearDepthf& c) { 275 uint32 immediate_data_size, const gles2::ClearDepthf& c) {
250 GLclampf depth = static_cast<GLclampf>(c.depth); 276 GLclampf depth = static_cast<GLclampf>(c.depth);
251 state_.depth_clear = depth; 277 if (state_.depth_clear != depth) {
252 glClearDepth(depth); 278 state_.depth_clear = depth;
279 glClearDepth(depth);
280 }
253 return error::kNoError; 281 return error::kNoError;
254 } 282 }
255 283
256 error::Error GLES2DecoderImpl::HandleClearStencil( 284 error::Error GLES2DecoderImpl::HandleClearStencil(
257 uint32 immediate_data_size, const gles2::ClearStencil& c) { 285 uint32 immediate_data_size, const gles2::ClearStencil& c) {
258 GLint s = static_cast<GLint>(c.s); 286 GLint s = static_cast<GLint>(c.s);
259 state_.stencil_clear = s; 287 if (state_.stencil_clear != s) {
260 glClearStencil(s); 288 state_.stencil_clear = s;
289 glClearStencil(s);
290 }
261 return error::kNoError; 291 return error::kNoError;
262 } 292 }
263 293
264 error::Error GLES2DecoderImpl::HandleColorMask( 294 error::Error GLES2DecoderImpl::HandleColorMask(
265 uint32 immediate_data_size, const gles2::ColorMask& c) { 295 uint32 immediate_data_size, const gles2::ColorMask& c) {
266 GLboolean red = static_cast<GLboolean>(c.red); 296 GLboolean red = static_cast<GLboolean>(c.red);
267 GLboolean green = static_cast<GLboolean>(c.green); 297 GLboolean green = static_cast<GLboolean>(c.green);
268 GLboolean blue = static_cast<GLboolean>(c.blue); 298 GLboolean blue = static_cast<GLboolean>(c.blue);
269 GLboolean alpha = static_cast<GLboolean>(c.alpha); 299 GLboolean alpha = static_cast<GLboolean>(c.alpha);
270 state_.color_mask_red = red; 300 if (state_.color_mask_red != red ||
271 state_.color_mask_green = green; 301 state_.color_mask_green != green ||
272 state_.color_mask_blue = blue; 302 state_.color_mask_blue != blue ||
273 state_.color_mask_alpha = alpha; 303 state_.color_mask_alpha != alpha) {
274 clear_state_dirty_ = true; 304 state_.color_mask_red = red;
305 state_.color_mask_green = green;
306 state_.color_mask_blue = blue;
307 state_.color_mask_alpha = alpha;
308 clear_state_dirty_ = true;
309 }
275 return error::kNoError; 310 return error::kNoError;
276 } 311 }
277 312
278 error::Error GLES2DecoderImpl::HandleCompileShader( 313 error::Error GLES2DecoderImpl::HandleCompileShader(
279 uint32 immediate_data_size, const gles2::CompileShader& c) { 314 uint32 immediate_data_size, const gles2::CompileShader& c) {
280 GLuint shader = c.shader; 315 GLuint shader = c.shader;
281 DoCompileShader(shader); 316 DoCompileShader(shader);
282 return error::kNoError; 317 return error::kNoError;
283 } 318 }
284 319
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 return error::kNoError; 485 return error::kNoError;
451 } 486 }
452 487
453 error::Error GLES2DecoderImpl::HandleCullFace( 488 error::Error GLES2DecoderImpl::HandleCullFace(
454 uint32 immediate_data_size, const gles2::CullFace& c) { 489 uint32 immediate_data_size, const gles2::CullFace& c) {
455 GLenum mode = static_cast<GLenum>(c.mode); 490 GLenum mode = static_cast<GLenum>(c.mode);
456 if (!validators_->face_type.IsValid(mode)) { 491 if (!validators_->face_type.IsValid(mode)) {
457 SetGLErrorInvalidEnum("glCullFace", mode, "mode"); 492 SetGLErrorInvalidEnum("glCullFace", mode, "mode");
458 return error::kNoError; 493 return error::kNoError;
459 } 494 }
460 state_.cull_mode = mode; 495 if (state_.cull_mode != mode) {
461 glCullFace(mode); 496 state_.cull_mode = mode;
497 glCullFace(mode);
498 }
462 return error::kNoError; 499 return error::kNoError;
463 } 500 }
464 501
465 error::Error GLES2DecoderImpl::HandleDeleteBuffers( 502 error::Error GLES2DecoderImpl::HandleDeleteBuffers(
466 uint32 immediate_data_size, const gles2::DeleteBuffers& c) { 503 uint32 immediate_data_size, const gles2::DeleteBuffers& c) {
467 GLsizei n = static_cast<GLsizei>(c.n); 504 GLsizei n = static_cast<GLsizei>(c.n);
468 uint32 data_size; 505 uint32 data_size;
469 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 506 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
470 return error::kOutOfBounds; 507 return error::kOutOfBounds;
471 } 508 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 return error::kNoError; 627 return error::kNoError;
591 } 628 }
592 629
593 error::Error GLES2DecoderImpl::HandleDepthFunc( 630 error::Error GLES2DecoderImpl::HandleDepthFunc(
594 uint32 immediate_data_size, const gles2::DepthFunc& c) { 631 uint32 immediate_data_size, const gles2::DepthFunc& c) {
595 GLenum func = static_cast<GLenum>(c.func); 632 GLenum func = static_cast<GLenum>(c.func);
596 if (!validators_->cmp_function.IsValid(func)) { 633 if (!validators_->cmp_function.IsValid(func)) {
597 SetGLErrorInvalidEnum("glDepthFunc", func, "func"); 634 SetGLErrorInvalidEnum("glDepthFunc", func, "func");
598 return error::kNoError; 635 return error::kNoError;
599 } 636 }
600 state_.depth_func = func; 637 if (state_.depth_func != func) {
601 glDepthFunc(func); 638 state_.depth_func = func;
639 glDepthFunc(func);
640 }
602 return error::kNoError; 641 return error::kNoError;
603 } 642 }
604 643
605 error::Error GLES2DecoderImpl::HandleDepthMask( 644 error::Error GLES2DecoderImpl::HandleDepthMask(
606 uint32 immediate_data_size, const gles2::DepthMask& c) { 645 uint32 immediate_data_size, const gles2::DepthMask& c) {
607 GLboolean flag = static_cast<GLboolean>(c.flag); 646 GLboolean flag = static_cast<GLboolean>(c.flag);
608 state_.depth_mask = flag; 647 if (state_.depth_mask != flag) {
609 clear_state_dirty_ = true; 648 state_.depth_mask = flag;
649 clear_state_dirty_ = true;
650 }
610 return error::kNoError; 651 return error::kNoError;
611 } 652 }
612 653
613 error::Error GLES2DecoderImpl::HandleDepthRangef( 654 error::Error GLES2DecoderImpl::HandleDepthRangef(
614 uint32 immediate_data_size, const gles2::DepthRangef& c) { 655 uint32 immediate_data_size, const gles2::DepthRangef& c) {
615 GLclampf zNear = static_cast<GLclampf>(c.zNear); 656 GLclampf zNear = static_cast<GLclampf>(c.zNear);
616 GLclampf zFar = static_cast<GLclampf>(c.zFar); 657 GLclampf zFar = static_cast<GLclampf>(c.zFar);
617 DoDepthRangef(zNear, zFar); 658 DoDepthRangef(zNear, zFar);
618 return error::kNoError; 659 return error::kNoError;
619 } 660 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 return error::kNoError; 768 return error::kNoError;
728 } 769 }
729 770
730 error::Error GLES2DecoderImpl::HandleFrontFace( 771 error::Error GLES2DecoderImpl::HandleFrontFace(
731 uint32 immediate_data_size, const gles2::FrontFace& c) { 772 uint32 immediate_data_size, const gles2::FrontFace& c) {
732 GLenum mode = static_cast<GLenum>(c.mode); 773 GLenum mode = static_cast<GLenum>(c.mode);
733 if (!validators_->face_mode.IsValid(mode)) { 774 if (!validators_->face_mode.IsValid(mode)) {
734 SetGLErrorInvalidEnum("glFrontFace", mode, "mode"); 775 SetGLErrorInvalidEnum("glFrontFace", mode, "mode");
735 return error::kNoError; 776 return error::kNoError;
736 } 777 }
737 state_.front_face = mode; 778 if (state_.front_face != mode) {
738 glFrontFace(mode); 779 state_.front_face = mode;
780 glFrontFace(mode);
781 }
739 return error::kNoError; 782 return error::kNoError;
740 } 783 }
741 784
742 error::Error GLES2DecoderImpl::HandleGenBuffers( 785 error::Error GLES2DecoderImpl::HandleGenBuffers(
743 uint32 immediate_data_size, const gles2::GenBuffers& c) { 786 uint32 immediate_data_size, const gles2::GenBuffers& c) {
744 GLsizei n = static_cast<GLsizei>(c.n); 787 GLsizei n = static_cast<GLsizei>(c.n);
745 uint32 data_size; 788 uint32 data_size;
746 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 789 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
747 return error::kOutOfBounds; 790 return error::kOutOfBounds;
748 } 791 }
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 if (!result_dst) { 1466 if (!result_dst) {
1424 return error::kOutOfBounds; 1467 return error::kOutOfBounds;
1425 } 1468 }
1426 *result_dst = DoIsTexture(texture); 1469 *result_dst = DoIsTexture(texture);
1427 return error::kNoError; 1470 return error::kNoError;
1428 } 1471 }
1429 1472
1430 error::Error GLES2DecoderImpl::HandleLineWidth( 1473 error::Error GLES2DecoderImpl::HandleLineWidth(
1431 uint32 immediate_data_size, const gles2::LineWidth& c) { 1474 uint32 immediate_data_size, const gles2::LineWidth& c) {
1432 GLfloat width = static_cast<GLfloat>(c.width); 1475 GLfloat width = static_cast<GLfloat>(c.width);
1433 state_.line_width = width; 1476 if (state_.line_width != width) {
1434 glLineWidth(width); 1477 state_.line_width = width;
1478 glLineWidth(width);
1479 }
1435 return error::kNoError; 1480 return error::kNoError;
1436 } 1481 }
1437 1482
1438 error::Error GLES2DecoderImpl::HandleLinkProgram( 1483 error::Error GLES2DecoderImpl::HandleLinkProgram(
1439 uint32 immediate_data_size, const gles2::LinkProgram& c) { 1484 uint32 immediate_data_size, const gles2::LinkProgram& c) {
1440 GLuint program = c.program; 1485 GLuint program = c.program;
1441 DoLinkProgram(program); 1486 DoLinkProgram(program);
1442 return error::kNoError; 1487 return error::kNoError;
1443 } 1488 }
1444 1489
1445 error::Error GLES2DecoderImpl::HandlePolygonOffset( 1490 error::Error GLES2DecoderImpl::HandlePolygonOffset(
1446 uint32 immediate_data_size, const gles2::PolygonOffset& c) { 1491 uint32 immediate_data_size, const gles2::PolygonOffset& c) {
1447 GLfloat factor = static_cast<GLfloat>(c.factor); 1492 GLfloat factor = static_cast<GLfloat>(c.factor);
1448 GLfloat units = static_cast<GLfloat>(c.units); 1493 GLfloat units = static_cast<GLfloat>(c.units);
1449 state_.polygon_offset_factor = factor; 1494 if (state_.polygon_offset_factor != factor ||
1450 state_.polygon_offset_units = units; 1495 state_.polygon_offset_units != units) {
1451 glPolygonOffset(factor, units); 1496 state_.polygon_offset_factor = factor;
1497 state_.polygon_offset_units = units;
1498 glPolygonOffset(factor, units);
1499 }
1452 return error::kNoError; 1500 return error::kNoError;
1453 } 1501 }
1454 1502
1455 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( 1503 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler(
1456 uint32 immediate_data_size, const gles2::ReleaseShaderCompiler& c) { 1504 uint32 immediate_data_size, const gles2::ReleaseShaderCompiler& c) {
1457 DoReleaseShaderCompiler(); 1505 DoReleaseShaderCompiler();
1458 return error::kNoError; 1506 return error::kNoError;
1459 } 1507 }
1460 1508
1461 error::Error GLES2DecoderImpl::HandleRenderbufferStorage( 1509 error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 GLsizei width = static_cast<GLsizei>(c.width); 1548 GLsizei width = static_cast<GLsizei>(c.width);
1501 GLsizei height = static_cast<GLsizei>(c.height); 1549 GLsizei height = static_cast<GLsizei>(c.height);
1502 if (width < 0) { 1550 if (width < 0) {
1503 SetGLError(GL_INVALID_VALUE, "glScissor", "width < 0"); 1551 SetGLError(GL_INVALID_VALUE, "glScissor", "width < 0");
1504 return error::kNoError; 1552 return error::kNoError;
1505 } 1553 }
1506 if (height < 0) { 1554 if (height < 0) {
1507 SetGLError(GL_INVALID_VALUE, "glScissor", "height < 0"); 1555 SetGLError(GL_INVALID_VALUE, "glScissor", "height < 0");
1508 return error::kNoError; 1556 return error::kNoError;
1509 } 1557 }
1510 state_.scissor_x = x; 1558 if (state_.scissor_x != x ||
1511 state_.scissor_y = y; 1559 state_.scissor_y != y ||
1512 state_.scissor_width = width; 1560 state_.scissor_width != width ||
1513 state_.scissor_height = height; 1561 state_.scissor_height != height) {
1514 glScissor(x, y, width, height); 1562 state_.scissor_x = x;
1563 state_.scissor_y = y;
1564 state_.scissor_width = width;
1565 state_.scissor_height = height;
1566 glScissor(x, y, width, height);
1567 }
1515 return error::kNoError; 1568 return error::kNoError;
1516 } 1569 }
1517 1570
1518 error::Error GLES2DecoderImpl::HandleStencilFunc( 1571 error::Error GLES2DecoderImpl::HandleStencilFunc(
1519 uint32 immediate_data_size, const gles2::StencilFunc& c) { 1572 uint32 immediate_data_size, const gles2::StencilFunc& c) {
1520 GLenum func = static_cast<GLenum>(c.func); 1573 GLenum func = static_cast<GLenum>(c.func);
1521 GLint ref = static_cast<GLint>(c.ref); 1574 GLint ref = static_cast<GLint>(c.ref);
1522 GLuint mask = static_cast<GLuint>(c.mask); 1575 GLuint mask = static_cast<GLuint>(c.mask);
1523 if (!validators_->cmp_function.IsValid(func)) { 1576 if (!validators_->cmp_function.IsValid(func)) {
1524 SetGLErrorInvalidEnum("glStencilFunc", func, "func"); 1577 SetGLErrorInvalidEnum("glStencilFunc", func, "func");
1525 return error::kNoError; 1578 return error::kNoError;
1526 } 1579 }
1527 glStencilFunc(func, ref, mask); 1580 if (state_.stencil_front_func != func ||
1581 state_.stencil_front_ref != ref ||
1582 state_.stencil_front_mask != mask ||
1583 state_.stencil_back_func != func ||
1584 state_.stencil_back_ref != ref ||
1585 state_.stencil_back_mask != mask) {
1586 state_.stencil_front_func = func;
1587 state_.stencil_front_ref = ref;
1588 state_.stencil_front_mask = mask;
1589 state_.stencil_back_func = func;
1590 state_.stencil_back_ref = ref;
1591 state_.stencil_back_mask = mask;
1592 glStencilFunc(func, ref, mask);
1593 }
1528 return error::kNoError; 1594 return error::kNoError;
1529 } 1595 }
1530 1596
1531 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( 1597 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
1532 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) { 1598 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) {
1533 GLenum face = static_cast<GLenum>(c.face); 1599 GLenum face = static_cast<GLenum>(c.face);
1534 GLenum func = static_cast<GLenum>(c.func); 1600 GLenum func = static_cast<GLenum>(c.func);
1535 GLint ref = static_cast<GLint>(c.ref); 1601 GLint ref = static_cast<GLint>(c.ref);
1536 GLuint mask = static_cast<GLuint>(c.mask); 1602 GLuint mask = static_cast<GLuint>(c.mask);
1537 if (!validators_->face_type.IsValid(face)) { 1603 if (!validators_->face_type.IsValid(face)) {
1538 SetGLErrorInvalidEnum("glStencilFuncSeparate", face, "face"); 1604 SetGLErrorInvalidEnum("glStencilFuncSeparate", face, "face");
1539 return error::kNoError; 1605 return error::kNoError;
1540 } 1606 }
1541 if (!validators_->cmp_function.IsValid(func)) { 1607 if (!validators_->cmp_function.IsValid(func)) {
1542 SetGLErrorInvalidEnum("glStencilFuncSeparate", func, "func"); 1608 SetGLErrorInvalidEnum("glStencilFuncSeparate", func, "func");
1543 return error::kNoError; 1609 return error::kNoError;
1544 } 1610 }
1545 glStencilFuncSeparate(face, func, ref, mask); 1611 bool changed = false;
1612 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1613 changed |= state_.stencil_front_func != func ||
1614 state_.stencil_front_ref != ref ||
1615 state_.stencil_front_mask != mask;
1616 }
1617 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1618 changed |= state_.stencil_back_func != func ||
1619 state_.stencil_back_ref != ref ||
1620 state_.stencil_back_mask != mask;
1621 }
1622 if (changed) {
1623 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1624 state_.stencil_front_func = func;
1625 state_.stencil_front_ref = ref;
1626 state_.stencil_front_mask = mask;
1627 }
1628 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1629 state_.stencil_back_func = func;
1630 state_.stencil_back_ref = ref;
1631 state_.stencil_back_mask = mask;
1632 }
1633 glStencilFuncSeparate(face, func, ref, mask);
1634 }
1546 return error::kNoError; 1635 return error::kNoError;
1547 } 1636 }
1548 1637
1549 error::Error GLES2DecoderImpl::HandleStencilMask( 1638 error::Error GLES2DecoderImpl::HandleStencilMask(
1550 uint32 immediate_data_size, const gles2::StencilMask& c) { 1639 uint32 immediate_data_size, const gles2::StencilMask& c) {
1551 GLuint mask = static_cast<GLuint>(c.mask); 1640 GLuint mask = static_cast<GLuint>(c.mask);
1552 state_.stencil_front_writemask = mask; 1641 if (state_.stencil_front_writemask != mask ||
1553 state_.stencil_back_writemask = mask; 1642 state_.stencil_back_writemask != mask) {
1554 clear_state_dirty_ = true; 1643 state_.stencil_front_writemask = mask;
1644 state_.stencil_back_writemask = mask;
1645 clear_state_dirty_ = true;
1646 }
1555 return error::kNoError; 1647 return error::kNoError;
1556 } 1648 }
1557 1649
1558 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( 1650 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate(
1559 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) { 1651 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) {
1560 GLenum face = static_cast<GLenum>(c.face); 1652 GLenum face = static_cast<GLenum>(c.face);
1561 GLuint mask = static_cast<GLuint>(c.mask); 1653 GLuint mask = static_cast<GLuint>(c.mask);
1562 if (!validators_->face_type.IsValid(face)) { 1654 if (!validators_->face_type.IsValid(face)) {
1563 SetGLErrorInvalidEnum("glStencilMaskSeparate", face, "face"); 1655 SetGLErrorInvalidEnum("glStencilMaskSeparate", face, "face");
1564 return error::kNoError; 1656 return error::kNoError;
1565 } 1657 }
1658 bool changed = false;
1566 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 1659 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1567 state_.stencil_front_writemask = mask; 1660 changed |= state_.stencil_front_writemask != mask;
1568 } 1661 }
1569 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 1662 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1570 state_.stencil_back_writemask = mask; 1663 changed |= state_.stencil_back_writemask != mask;
1571 } 1664 }
1572 clear_state_dirty_ = true; 1665 if (changed) {
1666 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1667 state_.stencil_front_writemask = mask;
1668 }
1669 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1670 state_.stencil_back_writemask = mask;
1671 }
1672 clear_state_dirty_ = true;
1673 }
1573 return error::kNoError; 1674 return error::kNoError;
1574 } 1675 }
1575 1676
1576 error::Error GLES2DecoderImpl::HandleStencilOp( 1677 error::Error GLES2DecoderImpl::HandleStencilOp(
1577 uint32 immediate_data_size, const gles2::StencilOp& c) { 1678 uint32 immediate_data_size, const gles2::StencilOp& c) {
1578 GLenum fail = static_cast<GLenum>(c.fail); 1679 GLenum fail = static_cast<GLenum>(c.fail);
1579 GLenum zfail = static_cast<GLenum>(c.zfail); 1680 GLenum zfail = static_cast<GLenum>(c.zfail);
1580 GLenum zpass = static_cast<GLenum>(c.zpass); 1681 GLenum zpass = static_cast<GLenum>(c.zpass);
1581 if (!validators_->stencil_op.IsValid(fail)) { 1682 if (!validators_->stencil_op.IsValid(fail)) {
1582 SetGLErrorInvalidEnum("glStencilOp", fail, "fail"); 1683 SetGLErrorInvalidEnum("glStencilOp", fail, "fail");
1583 return error::kNoError; 1684 return error::kNoError;
1584 } 1685 }
1585 if (!validators_->stencil_op.IsValid(zfail)) { 1686 if (!validators_->stencil_op.IsValid(zfail)) {
1586 SetGLErrorInvalidEnum("glStencilOp", zfail, "zfail"); 1687 SetGLErrorInvalidEnum("glStencilOp", zfail, "zfail");
1587 return error::kNoError; 1688 return error::kNoError;
1588 } 1689 }
1589 if (!validators_->stencil_op.IsValid(zpass)) { 1690 if (!validators_->stencil_op.IsValid(zpass)) {
1590 SetGLErrorInvalidEnum("glStencilOp", zpass, "zpass"); 1691 SetGLErrorInvalidEnum("glStencilOp", zpass, "zpass");
1591 return error::kNoError; 1692 return error::kNoError;
1592 } 1693 }
1593 state_.stencil_front_fail_op = fail; 1694 if (state_.stencil_front_fail_op != fail ||
1594 state_.stencil_front_z_fail_op = zfail; 1695 state_.stencil_front_z_fail_op != zfail ||
1595 state_.stencil_front_z_pass_op = zpass; 1696 state_.stencil_front_z_pass_op != zpass ||
1596 state_.stencil_back_fail_op = fail; 1697 state_.stencil_back_fail_op != fail ||
1597 state_.stencil_back_z_fail_op = zfail; 1698 state_.stencil_back_z_fail_op != zfail ||
1598 state_.stencil_back_z_pass_op = zpass; 1699 state_.stencil_back_z_pass_op != zpass) {
1599 glStencilOp(fail, zfail, zpass); 1700 state_.stencil_front_fail_op = fail;
1701 state_.stencil_front_z_fail_op = zfail;
1702 state_.stencil_front_z_pass_op = zpass;
1703 state_.stencil_back_fail_op = fail;
1704 state_.stencil_back_z_fail_op = zfail;
1705 state_.stencil_back_z_pass_op = zpass;
1706 glStencilOp(fail, zfail, zpass);
1707 }
1600 return error::kNoError; 1708 return error::kNoError;
1601 } 1709 }
1602 1710
1603 error::Error GLES2DecoderImpl::HandleStencilOpSeparate( 1711 error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
1604 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) { 1712 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) {
1605 GLenum face = static_cast<GLenum>(c.face); 1713 GLenum face = static_cast<GLenum>(c.face);
1606 GLenum fail = static_cast<GLenum>(c.fail); 1714 GLenum fail = static_cast<GLenum>(c.fail);
1607 GLenum zfail = static_cast<GLenum>(c.zfail); 1715 GLenum zfail = static_cast<GLenum>(c.zfail);
1608 GLenum zpass = static_cast<GLenum>(c.zpass); 1716 GLenum zpass = static_cast<GLenum>(c.zpass);
1609 if (!validators_->face_type.IsValid(face)) { 1717 if (!validators_->face_type.IsValid(face)) {
1610 SetGLErrorInvalidEnum("glStencilOpSeparate", face, "face"); 1718 SetGLErrorInvalidEnum("glStencilOpSeparate", face, "face");
1611 return error::kNoError; 1719 return error::kNoError;
1612 } 1720 }
1613 if (!validators_->stencil_op.IsValid(fail)) { 1721 if (!validators_->stencil_op.IsValid(fail)) {
1614 SetGLErrorInvalidEnum("glStencilOpSeparate", fail, "fail"); 1722 SetGLErrorInvalidEnum("glStencilOpSeparate", fail, "fail");
1615 return error::kNoError; 1723 return error::kNoError;
1616 } 1724 }
1617 if (!validators_->stencil_op.IsValid(zfail)) { 1725 if (!validators_->stencil_op.IsValid(zfail)) {
1618 SetGLErrorInvalidEnum("glStencilOpSeparate", zfail, "zfail"); 1726 SetGLErrorInvalidEnum("glStencilOpSeparate", zfail, "zfail");
1619 return error::kNoError; 1727 return error::kNoError;
1620 } 1728 }
1621 if (!validators_->stencil_op.IsValid(zpass)) { 1729 if (!validators_->stencil_op.IsValid(zpass)) {
1622 SetGLErrorInvalidEnum("glStencilOpSeparate", zpass, "zpass"); 1730 SetGLErrorInvalidEnum("glStencilOpSeparate", zpass, "zpass");
1623 return error::kNoError; 1731 return error::kNoError;
1624 } 1732 }
1733 bool changed = false;
1625 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 1734 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1626 state_.stencil_front_fail_op = fail; 1735 changed |= state_.stencil_front_fail_op != fail ||
1627 state_.stencil_front_z_fail_op = zfail; 1736 state_.stencil_front_z_fail_op != zfail ||
1628 state_.stencil_front_z_pass_op = zpass; 1737 state_.stencil_front_z_pass_op != zpass;
1629 } 1738 }
1630 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 1739 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1631 state_.stencil_back_fail_op = fail; 1740 changed |= state_.stencil_back_fail_op != fail ||
1632 state_.stencil_back_z_fail_op = zfail; 1741 state_.stencil_back_z_fail_op != zfail ||
1633 state_.stencil_back_z_pass_op = zpass; 1742 state_.stencil_back_z_pass_op != zpass;
1634 } 1743 }
1635 glStencilOpSeparate(face, fail, zfail, zpass); 1744 if (changed) {
1745 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
1746 state_.stencil_front_fail_op = fail;
1747 state_.stencil_front_z_fail_op = zfail;
1748 state_.stencil_front_z_pass_op = zpass;
1749 }
1750 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
1751 state_.stencil_back_fail_op = fail;
1752 state_.stencil_back_z_fail_op = zfail;
1753 state_.stencil_back_z_pass_op = zpass;
1754 }
1755 glStencilOpSeparate(face, fail, zfail, zpass);
1756 }
1636 return error::kNoError; 1757 return error::kNoError;
1637 } 1758 }
1638 1759
1639 error::Error GLES2DecoderImpl::HandleTexParameterf( 1760 error::Error GLES2DecoderImpl::HandleTexParameterf(
1640 uint32 immediate_data_size, const gles2::TexParameterf& c) { 1761 uint32 immediate_data_size, const gles2::TexParameterf& c) {
1641 GLenum target = static_cast<GLenum>(c.target); 1762 GLenum target = static_cast<GLenum>(c.target);
1642 GLenum pname = static_cast<GLenum>(c.pname); 1763 GLenum pname = static_cast<GLenum>(c.pname);
1643 GLfloat param = static_cast<GLfloat>(c.param); 1764 GLfloat param = static_cast<GLfloat>(c.param);
1644 if (!validators_->texture_bind_target.IsValid(target)) { 1765 if (!validators_->texture_bind_target.IsValid(target)) {
1645 SetGLErrorInvalidEnum("glTexParameterf", target, "target"); 1766 SetGLErrorInvalidEnum("glTexParameterf", target, "target");
(...skipping 1347 matching lines...) Expand 10 before | Expand all | Expand 10 after
2993 case GL_POLYGON_OFFSET_FILL: 3114 case GL_POLYGON_OFFSET_FILL:
2994 state_.enable_flags.polygon_offset_fill = enabled; 3115 state_.enable_flags.polygon_offset_fill = enabled;
2995 return true; 3116 return true;
2996 case GL_SAMPLE_ALPHA_TO_COVERAGE: 3117 case GL_SAMPLE_ALPHA_TO_COVERAGE:
2997 state_.enable_flags.sample_alpha_to_coverage = enabled; 3118 state_.enable_flags.sample_alpha_to_coverage = enabled;
2998 return true; 3119 return true;
2999 case GL_SAMPLE_COVERAGE: 3120 case GL_SAMPLE_COVERAGE:
3000 state_.enable_flags.sample_coverage = enabled; 3121 state_.enable_flags.sample_coverage = enabled;
3001 return true; 3122 return true;
3002 case GL_SCISSOR_TEST: 3123 case GL_SCISSOR_TEST:
3003 state_.enable_flags.scissor_test = enabled; 3124 if (state_.enable_flags.scissor_test != enabled) {
3004 return true; 3125 state_.enable_flags.scissor_test = enabled;
3126 clear_state_dirty_ = true;
3127 }
3128 return false;
3005 case GL_STENCIL_TEST: 3129 case GL_STENCIL_TEST:
3006 if (state_.enable_flags.stencil_test != enabled) { 3130 if (state_.enable_flags.stencil_test != enabled) {
3007 state_.enable_flags.stencil_test = enabled; 3131 state_.enable_flags.stencil_test = enabled;
3008 clear_state_dirty_ = true; 3132 clear_state_dirty_ = true;
3009 } 3133 }
3010 return false; 3134 return false;
3011 default: 3135 default:
3012 NOTREACHED(); 3136 NOTREACHED();
3013 return false; 3137 return false;
3014 } 3138 }
3015 } 3139 }
3016
3017 bool GLES2DecoderImpl::DoIsEnabled(GLenum cap) {
3018 switch (cap) {
3019 case GL_BLEND:
3020 return state_.enable_flags.blend;
3021 case GL_CULL_FACE:
3022 return state_.enable_flags.cull_face;
3023 case GL_DEPTH_TEST:
3024 return state_.enable_flags.depth_test;
3025 case GL_DITHER:
3026 return state_.enable_flags.dither;
3027 case GL_POLYGON_OFFSET_FILL:
3028 return state_.enable_flags.polygon_offset_fill;
3029 case GL_SAMPLE_ALPHA_TO_COVERAGE:
3030 return state_.enable_flags.sample_alpha_to_coverage;
3031 case GL_SAMPLE_COVERAGE:
3032 return state_.enable_flags.sample_coverage;
3033 case GL_SCISSOR_TEST:
3034 return state_.enable_flags.scissor_test;
3035 case GL_STENCIL_TEST:
3036 return state_.enable_flags.stencil_test;
3037 default:
3038 NOTREACHED();
3039 return false;
3040 }
3041 }
3042
3043 bool GLES2DecoderImpl::GetStateAsGLint(
3044 GLenum pname, GLint* params, GLsizei* num_written) {
3045 switch (pname) {
3046 case GL_VIEWPORT:
3047 *num_written = 4;
3048 if (params) {
3049 params[0] = static_cast<GLint>(state_.viewport_x);
3050 params[1] = static_cast<GLint>(state_.viewport_y);
3051 params[2] = static_cast<GLint>(state_.viewport_width);
3052 params[3] = static_cast<GLint>(state_.viewport_height);
3053 }
3054 return true;
3055 case GL_BLEND_SRC_RGB:
3056 *num_written = 1;
3057 if (params) {
3058 params[0] = static_cast<GLint>(state_.blend_source_rgb);
3059 }
3060 return true;
3061 case GL_BLEND_DST_RGB:
3062 *num_written = 1;
3063 if (params) {
3064 params[0] = static_cast<GLint>(state_.blend_dest_rgb);
3065 }
3066 return true;
3067 case GL_BLEND_SRC_ALPHA:
3068 *num_written = 1;
3069 if (params) {
3070 params[0] = static_cast<GLint>(state_.blend_source_alpha);
3071 }
3072 return true;
3073 case GL_BLEND_DST_ALPHA:
3074 *num_written = 1;
3075 if (params) {
3076 params[0] = static_cast<GLint>(state_.blend_dest_alpha);
3077 }
3078 return true;
3079 case GL_LINE_WIDTH:
3080 *num_written = 1;
3081 if (params) {
3082 params[0] = static_cast<GLint>(state_.line_width);
3083 }
3084 return true;
3085 case GL_BLEND_COLOR:
3086 *num_written = 4;
3087 if (params) {
3088 params[0] = static_cast<GLint>(state_.blend_color_red);
3089 params[1] = static_cast<GLint>(state_.blend_color_green);
3090 params[2] = static_cast<GLint>(state_.blend_color_blue);
3091 params[3] = static_cast<GLint>(state_.blend_color_alpha);
3092 }
3093 return true;
3094 case GL_STENCIL_CLEAR_VALUE:
3095 *num_written = 1;
3096 if (params) {
3097 params[0] = static_cast<GLint>(state_.stencil_clear);
3098 }
3099 return true;
3100 case GL_COLOR_WRITEMASK:
3101 *num_written = 4;
3102 if (params) {
3103 params[0] = static_cast<GLint>(state_.color_mask_red);
3104 params[1] = static_cast<GLint>(state_.color_mask_green);
3105 params[2] = static_cast<GLint>(state_.color_mask_blue);
3106 params[3] = static_cast<GLint>(state_.color_mask_alpha);
3107 }
3108 return true;
3109 case GL_COLOR_CLEAR_VALUE:
3110 *num_written = 4;
3111 if (params) {
3112 params[0] = static_cast<GLint>(state_.color_clear_red);
3113 params[1] = static_cast<GLint>(state_.color_clear_green);
3114 params[2] = static_cast<GLint>(state_.color_clear_blue);
3115 params[3] = static_cast<GLint>(state_.color_clear_alpha);
3116 }
3117 return true;
3118 case GL_DEPTH_RANGE:
3119 *num_written = 2;
3120 if (params) {
3121 params[0] = static_cast<GLint>(state_.z_near);
3122 params[1] = static_cast<GLint>(state_.z_far);
3123 }
3124 return true;
3125 case GL_DEPTH_CLEAR_VALUE:
3126 *num_written = 1;
3127 if (params) {
3128 params[0] = static_cast<GLint>(state_.depth_clear);
3129 }
3130 return true;
3131 case GL_STENCIL_FAIL:
3132 *num_written = 1;
3133 if (params) {
3134 params[0] = static_cast<GLint>(state_.stencil_front_fail_op);
3135 }
3136 return true;
3137 case GL_STENCIL_PASS_DEPTH_FAIL:
3138 *num_written = 1;
3139 if (params) {
3140 params[0] = static_cast<GLint>(state_.stencil_front_z_fail_op);
3141 }
3142 return true;
3143 case GL_STENCIL_PASS_DEPTH_PASS:
3144 *num_written = 1;
3145 if (params) {
3146 params[0] = static_cast<GLint>(state_.stencil_front_z_pass_op);
3147 }
3148 return true;
3149 case GL_STENCIL_BACK_FAIL:
3150 *num_written = 1;
3151 if (params) {
3152 params[0] = static_cast<GLint>(state_.stencil_back_fail_op);
3153 }
3154 return true;
3155 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
3156 *num_written = 1;
3157 if (params) {
3158 params[0] = static_cast<GLint>(state_.stencil_back_z_fail_op);
3159 }
3160 return true;
3161 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
3162 *num_written = 1;
3163 if (params) {
3164 params[0] = static_cast<GLint>(state_.stencil_back_z_pass_op);
3165 }
3166 return true;
3167 case GL_SCISSOR_BOX:
3168 *num_written = 4;
3169 if (params) {
3170 params[0] = static_cast<GLint>(state_.scissor_x);
3171 params[1] = static_cast<GLint>(state_.scissor_y);
3172 params[2] = static_cast<GLint>(state_.scissor_width);
3173 params[3] = static_cast<GLint>(state_.scissor_height);
3174 }
3175 return true;
3176 case GL_FRONT_FACE:
3177 *num_written = 1;
3178 if (params) {
3179 params[0] = static_cast<GLint>(state_.front_face);
3180 }
3181 return true;
3182 case GL_SAMPLE_COVERAGE_VALUE:
3183 *num_written = 1;
3184 if (params) {
3185 params[0] = static_cast<GLint>(state_.sample_coverage_value);
3186 }
3187 return true;
3188 case GL_SAMPLE_COVERAGE_INVERT:
3189 *num_written = 1;
3190 if (params) {
3191 params[0] = static_cast<GLint>(state_.sample_coverage_invert);
3192 }
3193 return true;
3194 case GL_POLYGON_OFFSET_FACTOR:
3195 *num_written = 1;
3196 if (params) {
3197 params[0] = static_cast<GLint>(state_.polygon_offset_factor);
3198 }
3199 return true;
3200 case GL_POLYGON_OFFSET_UNITS:
3201 *num_written = 1;
3202 if (params) {
3203 params[0] = static_cast<GLint>(state_.polygon_offset_units);
3204 }
3205 return true;
3206 case GL_CULL_FACE_MODE:
3207 *num_written = 1;
3208 if (params) {
3209 params[0] = static_cast<GLint>(state_.cull_mode);
3210 }
3211 return true;
3212 case GL_DEPTH_FUNC:
3213 *num_written = 1;
3214 if (params) {
3215 params[0] = static_cast<GLint>(state_.depth_func);
3216 }
3217 return true;
3218 case GL_STENCIL_FUNC:
3219 *num_written = 1;
3220 if (params) {
3221 params[0] = static_cast<GLint>(state_.stencil_front_func);
3222 }
3223 return true;
3224 case GL_STENCIL_REF:
3225 *num_written = 1;
3226 if (params) {
3227 params[0] = static_cast<GLint>(state_.stencil_front_ref);
3228 }
3229 return true;
3230 case GL_STENCIL_VALUE_MASK:
3231 *num_written = 1;
3232 if (params) {
3233 params[0] = static_cast<GLint>(state_.stencil_front_mask);
3234 }
3235 return true;
3236 case GL_STENCIL_BACK_FUNC:
3237 *num_written = 1;
3238 if (params) {
3239 params[0] = static_cast<GLint>(state_.stencil_back_func);
3240 }
3241 return true;
3242 case GL_STENCIL_BACK_REF:
3243 *num_written = 1;
3244 if (params) {
3245 params[0] = static_cast<GLint>(state_.stencil_back_ref);
3246 }
3247 return true;
3248 case GL_STENCIL_BACK_VALUE_MASK:
3249 *num_written = 1;
3250 if (params) {
3251 params[0] = static_cast<GLint>(state_.stencil_back_mask);
3252 }
3253 return true;
3254 case GL_DEPTH_WRITEMASK:
3255 *num_written = 1;
3256 if (params) {
3257 params[0] = static_cast<GLint>(state_.depth_mask);
3258 }
3259 return true;
3260 case GL_BLEND_EQUATION_RGB:
3261 *num_written = 1;
3262 if (params) {
3263 params[0] = static_cast<GLint>(state_.blend_equation_rgb);
3264 }
3265 return true;
3266 case GL_BLEND_EQUATION_ALPHA:
3267 *num_written = 1;
3268 if (params) {
3269 params[0] = static_cast<GLint>(state_.blend_equation_alpha);
3270 }
3271 return true;
3272 case GL_STENCIL_WRITEMASK:
3273 *num_written = 1;
3274 if (params) {
3275 params[0] = static_cast<GLint>(state_.stencil_front_writemask);
3276 }
3277 return true;
3278 case GL_STENCIL_BACK_WRITEMASK:
3279 *num_written = 1;
3280 if (params) {
3281 params[0] = static_cast<GLint>(state_.stencil_back_writemask);
3282 }
3283 return true;
3284 case GL_BLEND:
3285 *num_written = 1;
3286 if (params) {
3287 params[0] = static_cast<GLint>(state_.enable_flags.blend);
3288 }
3289 return true;
3290 case GL_CULL_FACE:
3291 *num_written = 1;
3292 if (params) {
3293 params[0] = static_cast<GLint>(state_.enable_flags.cull_face);
3294 }
3295 return true;
3296 case GL_DEPTH_TEST:
3297 *num_written = 1;
3298 if (params) {
3299 params[0] = static_cast<GLint>(state_.enable_flags.depth_test);
3300 }
3301 return true;
3302 case GL_DITHER:
3303 *num_written = 1;
3304 if (params) {
3305 params[0] = static_cast<GLint>(state_.enable_flags.dither);
3306 }
3307 return true;
3308 case GL_POLYGON_OFFSET_FILL:
3309 *num_written = 1;
3310 if (params) {
3311 params[0] =
3312 static_cast<GLint>(state_.enable_flags.polygon_offset_fill);
3313 }
3314 return true;
3315 case GL_SAMPLE_ALPHA_TO_COVERAGE:
3316 *num_written = 1;
3317 if (params) {
3318 params[0] =
3319 static_cast<GLint>(state_.enable_flags.sample_alpha_to_coverage);
3320 }
3321 return true;
3322 case GL_SAMPLE_COVERAGE:
3323 *num_written = 1;
3324 if (params) {
3325 params[0] = static_cast<GLint>(state_.enable_flags.sample_coverage);
3326 }
3327 return true;
3328 case GL_SCISSOR_TEST:
3329 *num_written = 1;
3330 if (params) {
3331 params[0] = static_cast<GLint>(state_.enable_flags.scissor_test);
3332 }
3333 return true;
3334 case GL_STENCIL_TEST:
3335 *num_written = 1;
3336 if (params) {
3337 params[0] = static_cast<GLint>(state_.enable_flags.stencil_test);
3338 }
3339 return true;
3340 default:
3341 return false;
3342 }
3343 }
3344
3345 bool GLES2DecoderImpl::GetStateAsGLfloat(
3346 GLenum pname, GLfloat* params, GLsizei* num_written) {
3347 switch (pname) {
3348 case GL_VIEWPORT:
3349 *num_written = 4;
3350 if (params) {
3351 params[0] = static_cast<GLfloat>(state_.viewport_x);
3352 params[1] = static_cast<GLfloat>(state_.viewport_y);
3353 params[2] = static_cast<GLfloat>(state_.viewport_width);
3354 params[3] = static_cast<GLfloat>(state_.viewport_height);
3355 }
3356 return true;
3357 case GL_BLEND_SRC_RGB:
3358 *num_written = 1;
3359 if (params) {
3360 params[0] = static_cast<GLfloat>(state_.blend_source_rgb);
3361 }
3362 return true;
3363 case GL_BLEND_DST_RGB:
3364 *num_written = 1;
3365 if (params) {
3366 params[0] = static_cast<GLfloat>(state_.blend_dest_rgb);
3367 }
3368 return true;
3369 case GL_BLEND_SRC_ALPHA:
3370 *num_written = 1;
3371 if (params) {
3372 params[0] = static_cast<GLfloat>(state_.blend_source_alpha);
3373 }
3374 return true;
3375 case GL_BLEND_DST_ALPHA:
3376 *num_written = 1;
3377 if (params) {
3378 params[0] = static_cast<GLfloat>(state_.blend_dest_alpha);
3379 }
3380 return true;
3381 case GL_LINE_WIDTH:
3382 *num_written = 1;
3383 if (params) {
3384 params[0] = static_cast<GLfloat>(state_.line_width);
3385 }
3386 return true;
3387 case GL_BLEND_COLOR:
3388 *num_written = 4;
3389 if (params) {
3390 params[0] = static_cast<GLfloat>(state_.blend_color_red);
3391 params[1] = static_cast<GLfloat>(state_.blend_color_green);
3392 params[2] = static_cast<GLfloat>(state_.blend_color_blue);
3393 params[3] = static_cast<GLfloat>(state_.blend_color_alpha);
3394 }
3395 return true;
3396 case GL_STENCIL_CLEAR_VALUE:
3397 *num_written = 1;
3398 if (params) {
3399 params[0] = static_cast<GLfloat>(state_.stencil_clear);
3400 }
3401 return true;
3402 case GL_COLOR_WRITEMASK:
3403 *num_written = 4;
3404 if (params) {
3405 params[0] = static_cast<GLfloat>(state_.color_mask_red);
3406 params[1] = static_cast<GLfloat>(state_.color_mask_green);
3407 params[2] = static_cast<GLfloat>(state_.color_mask_blue);
3408 params[3] = static_cast<GLfloat>(state_.color_mask_alpha);
3409 }
3410 return true;
3411 case GL_COLOR_CLEAR_VALUE:
3412 *num_written = 4;
3413 if (params) {
3414 params[0] = static_cast<GLfloat>(state_.color_clear_red);
3415 params[1] = static_cast<GLfloat>(state_.color_clear_green);
3416 params[2] = static_cast<GLfloat>(state_.color_clear_blue);
3417 params[3] = static_cast<GLfloat>(state_.color_clear_alpha);
3418 }
3419 return true;
3420 case GL_DEPTH_RANGE:
3421 *num_written = 2;
3422 if (params) {
3423 params[0] = static_cast<GLfloat>(state_.z_near);
3424 params[1] = static_cast<GLfloat>(state_.z_far);
3425 }
3426 return true;
3427 case GL_DEPTH_CLEAR_VALUE:
3428 *num_written = 1;
3429 if (params) {
3430 params[0] = static_cast<GLfloat>(state_.depth_clear);
3431 }
3432 return true;
3433 case GL_STENCIL_FAIL:
3434 *num_written = 1;
3435 if (params) {
3436 params[0] = static_cast<GLfloat>(state_.stencil_front_fail_op);
3437 }
3438 return true;
3439 case GL_STENCIL_PASS_DEPTH_FAIL:
3440 *num_written = 1;
3441 if (params) {
3442 params[0] = static_cast<GLfloat>(state_.stencil_front_z_fail_op);
3443 }
3444 return true;
3445 case GL_STENCIL_PASS_DEPTH_PASS:
3446 *num_written = 1;
3447 if (params) {
3448 params[0] = static_cast<GLfloat>(state_.stencil_front_z_pass_op);
3449 }
3450 return true;
3451 case GL_STENCIL_BACK_FAIL:
3452 *num_written = 1;
3453 if (params) {
3454 params[0] = static_cast<GLfloat>(state_.stencil_back_fail_op);
3455 }
3456 return true;
3457 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
3458 *num_written = 1;
3459 if (params) {
3460 params[0] = static_cast<GLfloat>(state_.stencil_back_z_fail_op);
3461 }
3462 return true;
3463 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
3464 *num_written = 1;
3465 if (params) {
3466 params[0] = static_cast<GLfloat>(state_.stencil_back_z_pass_op);
3467 }
3468 return true;
3469 case GL_SCISSOR_BOX:
3470 *num_written = 4;
3471 if (params) {
3472 params[0] = static_cast<GLfloat>(state_.scissor_x);
3473 params[1] = static_cast<GLfloat>(state_.scissor_y);
3474 params[2] = static_cast<GLfloat>(state_.scissor_width);
3475 params[3] = static_cast<GLfloat>(state_.scissor_height);
3476 }
3477 return true;
3478 case GL_FRONT_FACE:
3479 *num_written = 1;
3480 if (params) {
3481 params[0] = static_cast<GLfloat>(state_.front_face);
3482 }
3483 return true;
3484 case GL_SAMPLE_COVERAGE_VALUE:
3485 *num_written = 1;
3486 if (params) {
3487 params[0] = static_cast<GLfloat>(state_.sample_coverage_value);
3488 }
3489 return true;
3490 case GL_SAMPLE_COVERAGE_INVERT:
3491 *num_written = 1;
3492 if (params) {
3493 params[0] = static_cast<GLfloat>(state_.sample_coverage_invert);
3494 }
3495 return true;
3496 case GL_POLYGON_OFFSET_FACTOR:
3497 *num_written = 1;
3498 if (params) {
3499 params[0] = static_cast<GLfloat>(state_.polygon_offset_factor);
3500 }
3501 return true;
3502 case GL_POLYGON_OFFSET_UNITS:
3503 *num_written = 1;
3504 if (params) {
3505 params[0] = static_cast<GLfloat>(state_.polygon_offset_units);
3506 }
3507 return true;
3508 case GL_CULL_FACE_MODE:
3509 *num_written = 1;
3510 if (params) {
3511 params[0] = static_cast<GLfloat>(state_.cull_mode);
3512 }
3513 return true;
3514 case GL_DEPTH_FUNC:
3515 *num_written = 1;
3516 if (params) {
3517 params[0] = static_cast<GLfloat>(state_.depth_func);
3518 }
3519 return true;
3520 case GL_STENCIL_FUNC:
3521 *num_written = 1;
3522 if (params) {
3523 params[0] = static_cast<GLfloat>(state_.stencil_front_func);
3524 }
3525 return true;
3526 case GL_STENCIL_REF:
3527 *num_written = 1;
3528 if (params) {
3529 params[0] = static_cast<GLfloat>(state_.stencil_front_ref);
3530 }
3531 return true;
3532 case GL_STENCIL_VALUE_MASK:
3533 *num_written = 1;
3534 if (params) {
3535 params[0] = static_cast<GLfloat>(state_.stencil_front_mask);
3536 }
3537 return true;
3538 case GL_STENCIL_BACK_FUNC:
3539 *num_written = 1;
3540 if (params) {
3541 params[0] = static_cast<GLfloat>(state_.stencil_back_func);
3542 }
3543 return true;
3544 case GL_STENCIL_BACK_REF:
3545 *num_written = 1;
3546 if (params) {
3547 params[0] = static_cast<GLfloat>(state_.stencil_back_ref);
3548 }
3549 return true;
3550 case GL_STENCIL_BACK_VALUE_MASK:
3551 *num_written = 1;
3552 if (params) {
3553 params[0] = static_cast<GLfloat>(state_.stencil_back_mask);
3554 }
3555 return true;
3556 case GL_DEPTH_WRITEMASK:
3557 *num_written = 1;
3558 if (params) {
3559 params[0] = static_cast<GLfloat>(state_.depth_mask);
3560 }
3561 return true;
3562 case GL_BLEND_EQUATION_RGB:
3563 *num_written = 1;
3564 if (params) {
3565 params[0] = static_cast<GLfloat>(state_.blend_equation_rgb);
3566 }
3567 return true;
3568 case GL_BLEND_EQUATION_ALPHA:
3569 *num_written = 1;
3570 if (params) {
3571 params[0] = static_cast<GLfloat>(state_.blend_equation_alpha);
3572 }
3573 return true;
3574 case GL_STENCIL_WRITEMASK:
3575 *num_written = 1;
3576 if (params) {
3577 params[0] = static_cast<GLfloat>(state_.stencil_front_writemask);
3578 }
3579 return true;
3580 case GL_STENCIL_BACK_WRITEMASK:
3581 *num_written = 1;
3582 if (params) {
3583 params[0] = static_cast<GLfloat>(state_.stencil_back_writemask);
3584 }
3585 return true;
3586 case GL_BLEND:
3587 *num_written = 1;
3588 if (params) {
3589 params[0] = static_cast<GLfloat>(state_.enable_flags.blend);
3590 }
3591 return true;
3592 case GL_CULL_FACE:
3593 *num_written = 1;
3594 if (params) {
3595 params[0] = static_cast<GLfloat>(state_.enable_flags.cull_face);
3596 }
3597 return true;
3598 case GL_DEPTH_TEST:
3599 *num_written = 1;
3600 if (params) {
3601 params[0] = static_cast<GLfloat>(state_.enable_flags.depth_test);
3602 }
3603 return true;
3604 case GL_DITHER:
3605 *num_written = 1;
3606 if (params) {
3607 params[0] = static_cast<GLfloat>(state_.enable_flags.dither);
3608 }
3609 return true;
3610 case GL_POLYGON_OFFSET_FILL:
3611 *num_written = 1;
3612 if (params) {
3613 params[0] =
3614 static_cast<GLfloat>(state_.enable_flags.polygon_offset_fill);
3615 }
3616 return true;
3617 case GL_SAMPLE_ALPHA_TO_COVERAGE:
3618 *num_written = 1;
3619 if (params) {
3620 params[0] =
3621 static_cast<GLfloat>(state_.enable_flags.sample_alpha_to_coverage);
3622 }
3623 return true;
3624 case GL_SAMPLE_COVERAGE:
3625 *num_written = 1;
3626 if (params) {
3627 params[0] = static_cast<GLfloat>(state_.enable_flags.sample_coverage);
3628 }
3629 return true;
3630 case GL_SCISSOR_TEST:
3631 *num_written = 1;
3632 if (params) {
3633 params[0] = static_cast<GLfloat>(state_.enable_flags.scissor_test);
3634 }
3635 return true;
3636 case GL_STENCIL_TEST:
3637 *num_written = 1;
3638 if (params) {
3639 params[0] = static_cast<GLfloat>(state_.enable_flags.stencil_test);
3640 }
3641 return true;
3642 default:
3643 return false;
3644 }
3645 }
3646 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 3140 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
3647 3141
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698