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

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

Issue 2275203002: Make command buffer commands and immediate data volatile (Closed)
Patch Set: std::copy->const_cast+memcpy Created 4 years, 3 months 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 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 // It's formatted by clang-format using chromium coding style: 7 // It's formatted by clang-format using chromium coding style:
8 // clang-format -i -style=chromium filename 8 // clang-format -i -style=chromium filename
9 // DO NOT EDIT! 9 // DO NOT EDIT!
10 10
11 // It is included by gles2_cmd_decoder.cc 11 // It is included by gles2_cmd_decoder.cc
12 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 12 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
13 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 13 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
14 14
15 error::Error GLES2DecoderImpl::HandleActiveTexture(uint32_t immediate_data_size, 15 error::Error GLES2DecoderImpl::HandleActiveTexture(
16 const void* cmd_data) { 16 uint32_t immediate_data_size,
17 const gles2::cmds::ActiveTexture& c = 17 const volatile void* cmd_data) {
18 *static_cast<const gles2::cmds::ActiveTexture*>(cmd_data); 18 const volatile gles2::cmds::ActiveTexture& c =
19 (void)c; 19 *static_cast<const volatile gles2::cmds::ActiveTexture*>(cmd_data);
20 GLenum texture = static_cast<GLenum>(c.texture); 20 GLenum texture = static_cast<GLenum>(c.texture);
21 DoActiveTexture(texture); 21 DoActiveTexture(texture);
22 return error::kNoError; 22 return error::kNoError;
23 } 23 }
24 24
25 error::Error GLES2DecoderImpl::HandleAttachShader(uint32_t immediate_data_size, 25 error::Error GLES2DecoderImpl::HandleAttachShader(
26 const void* cmd_data) { 26 uint32_t immediate_data_size,
27 const gles2::cmds::AttachShader& c = 27 const volatile void* cmd_data) {
28 *static_cast<const gles2::cmds::AttachShader*>(cmd_data); 28 const volatile gles2::cmds::AttachShader& c =
29 (void)c; 29 *static_cast<const volatile gles2::cmds::AttachShader*>(cmd_data);
30 GLuint program = c.program; 30 GLuint program = c.program;
31 GLuint shader = c.shader; 31 GLuint shader = c.shader;
32 DoAttachShader(program, shader); 32 DoAttachShader(program, shader);
33 return error::kNoError; 33 return error::kNoError;
34 } 34 }
35 35
36 error::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size, 36 error::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size,
37 const void* cmd_data) { 37 const volatile void* cmd_data) {
38 const gles2::cmds::BindBuffer& c = 38 const volatile gles2::cmds::BindBuffer& c =
39 *static_cast<const gles2::cmds::BindBuffer*>(cmd_data); 39 *static_cast<const volatile gles2::cmds::BindBuffer*>(cmd_data);
40 (void)c;
41 GLenum target = static_cast<GLenum>(c.target); 40 GLenum target = static_cast<GLenum>(c.target);
42 GLuint buffer = c.buffer; 41 GLuint buffer = c.buffer;
43 if (!validators_->buffer_target.IsValid(target)) { 42 if (!validators_->buffer_target.IsValid(target)) {
44 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBuffer", target, "target"); 43 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBuffer", target, "target");
45 return error::kNoError; 44 return error::kNoError;
46 } 45 }
47 DoBindBuffer(target, buffer); 46 DoBindBuffer(target, buffer);
48 return error::kNoError; 47 return error::kNoError;
49 } 48 }
50 49
51 error::Error GLES2DecoderImpl::HandleBindBufferBase( 50 error::Error GLES2DecoderImpl::HandleBindBufferBase(
52 uint32_t immediate_data_size, 51 uint32_t immediate_data_size,
53 const void* cmd_data) { 52 const volatile void* cmd_data) {
54 if (!unsafe_es3_apis_enabled()) 53 if (!unsafe_es3_apis_enabled())
55 return error::kUnknownCommand; 54 return error::kUnknownCommand;
56 const gles2::cmds::BindBufferBase& c = 55 const volatile gles2::cmds::BindBufferBase& c =
57 *static_cast<const gles2::cmds::BindBufferBase*>(cmd_data); 56 *static_cast<const volatile gles2::cmds::BindBufferBase*>(cmd_data);
58 (void)c;
59 GLenum target = static_cast<GLenum>(c.target); 57 GLenum target = static_cast<GLenum>(c.target);
60 GLuint index = static_cast<GLuint>(c.index); 58 GLuint index = static_cast<GLuint>(c.index);
61 GLuint buffer = c.buffer; 59 GLuint buffer = c.buffer;
62 if (!validators_->indexed_buffer_target.IsValid(target)) { 60 if (!validators_->indexed_buffer_target.IsValid(target)) {
63 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferBase", target, "target"); 61 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferBase", target, "target");
64 return error::kNoError; 62 return error::kNoError;
65 } 63 }
66 DoBindBufferBase(target, index, buffer); 64 DoBindBufferBase(target, index, buffer);
67 return error::kNoError; 65 return error::kNoError;
68 } 66 }
69 67
70 error::Error GLES2DecoderImpl::HandleBindBufferRange( 68 error::Error GLES2DecoderImpl::HandleBindBufferRange(
71 uint32_t immediate_data_size, 69 uint32_t immediate_data_size,
72 const void* cmd_data) { 70 const volatile void* cmd_data) {
73 if (!unsafe_es3_apis_enabled()) 71 if (!unsafe_es3_apis_enabled())
74 return error::kUnknownCommand; 72 return error::kUnknownCommand;
75 const gles2::cmds::BindBufferRange& c = 73 const volatile gles2::cmds::BindBufferRange& c =
76 *static_cast<const gles2::cmds::BindBufferRange*>(cmd_data); 74 *static_cast<const volatile gles2::cmds::BindBufferRange*>(cmd_data);
77 (void)c;
78 GLenum target = static_cast<GLenum>(c.target); 75 GLenum target = static_cast<GLenum>(c.target);
79 GLuint index = static_cast<GLuint>(c.index); 76 GLuint index = static_cast<GLuint>(c.index);
80 GLuint buffer = c.buffer; 77 GLuint buffer = c.buffer;
81 GLintptr offset = static_cast<GLintptr>(c.offset); 78 GLintptr offset = static_cast<GLintptr>(c.offset);
82 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 79 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
83 if (!validators_->indexed_buffer_target.IsValid(target)) { 80 if (!validators_->indexed_buffer_target.IsValid(target)) {
84 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferRange", target, "target"); 81 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindBufferRange", target, "target");
85 return error::kNoError; 82 return error::kNoError;
86 } 83 }
87 if (size < 0) { 84 if (size < 0) {
88 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBindBufferRange", "size < 0"); 85 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBindBufferRange", "size < 0");
89 return error::kNoError; 86 return error::kNoError;
90 } 87 }
91 DoBindBufferRange(target, index, buffer, offset, size); 88 DoBindBufferRange(target, index, buffer, offset, size);
92 return error::kNoError; 89 return error::kNoError;
93 } 90 }
94 91
95 error::Error GLES2DecoderImpl::HandleBindFramebuffer( 92 error::Error GLES2DecoderImpl::HandleBindFramebuffer(
96 uint32_t immediate_data_size, 93 uint32_t immediate_data_size,
97 const void* cmd_data) { 94 const volatile void* cmd_data) {
98 const gles2::cmds::BindFramebuffer& c = 95 const volatile gles2::cmds::BindFramebuffer& c =
99 *static_cast<const gles2::cmds::BindFramebuffer*>(cmd_data); 96 *static_cast<const volatile gles2::cmds::BindFramebuffer*>(cmd_data);
100 (void)c;
101 GLenum target = static_cast<GLenum>(c.target); 97 GLenum target = static_cast<GLenum>(c.target);
102 GLuint framebuffer = c.framebuffer; 98 GLuint framebuffer = c.framebuffer;
103 if (!validators_->framebuffer_target.IsValid(target)) { 99 if (!validators_->framebuffer_target.IsValid(target)) {
104 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindFramebuffer", target, "target"); 100 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindFramebuffer", target, "target");
105 return error::kNoError; 101 return error::kNoError;
106 } 102 }
107 DoBindFramebuffer(target, framebuffer); 103 DoBindFramebuffer(target, framebuffer);
108 return error::kNoError; 104 return error::kNoError;
109 } 105 }
110 106
111 error::Error GLES2DecoderImpl::HandleBindRenderbuffer( 107 error::Error GLES2DecoderImpl::HandleBindRenderbuffer(
112 uint32_t immediate_data_size, 108 uint32_t immediate_data_size,
113 const void* cmd_data) { 109 const volatile void* cmd_data) {
114 const gles2::cmds::BindRenderbuffer& c = 110 const volatile gles2::cmds::BindRenderbuffer& c =
115 *static_cast<const gles2::cmds::BindRenderbuffer*>(cmd_data); 111 *static_cast<const volatile gles2::cmds::BindRenderbuffer*>(cmd_data);
116 (void)c;
117 GLenum target = static_cast<GLenum>(c.target); 112 GLenum target = static_cast<GLenum>(c.target);
118 GLuint renderbuffer = c.renderbuffer; 113 GLuint renderbuffer = c.renderbuffer;
119 if (!validators_->render_buffer_target.IsValid(target)) { 114 if (!validators_->render_buffer_target.IsValid(target)) {
120 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindRenderbuffer", target, "target"); 115 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindRenderbuffer", target, "target");
121 return error::kNoError; 116 return error::kNoError;
122 } 117 }
123 DoBindRenderbuffer(target, renderbuffer); 118 DoBindRenderbuffer(target, renderbuffer);
124 return error::kNoError; 119 return error::kNoError;
125 } 120 }
126 121
127 error::Error GLES2DecoderImpl::HandleBindSampler(uint32_t immediate_data_size, 122 error::Error GLES2DecoderImpl::HandleBindSampler(
128 const void* cmd_data) { 123 uint32_t immediate_data_size,
124 const volatile void* cmd_data) {
129 if (!unsafe_es3_apis_enabled()) 125 if (!unsafe_es3_apis_enabled())
130 return error::kUnknownCommand; 126 return error::kUnknownCommand;
131 const gles2::cmds::BindSampler& c = 127 const volatile gles2::cmds::BindSampler& c =
132 *static_cast<const gles2::cmds::BindSampler*>(cmd_data); 128 *static_cast<const volatile gles2::cmds::BindSampler*>(cmd_data);
133 (void)c;
134 GLuint unit = static_cast<GLuint>(c.unit); 129 GLuint unit = static_cast<GLuint>(c.unit);
135 GLuint sampler = c.sampler; 130 GLuint sampler = c.sampler;
136 DoBindSampler(unit, sampler); 131 DoBindSampler(unit, sampler);
137 return error::kNoError; 132 return error::kNoError;
138 } 133 }
139 134
140 error::Error GLES2DecoderImpl::HandleBindTexture(uint32_t immediate_data_size, 135 error::Error GLES2DecoderImpl::HandleBindTexture(
141 const void* cmd_data) { 136 uint32_t immediate_data_size,
142 const gles2::cmds::BindTexture& c = 137 const volatile void* cmd_data) {
143 *static_cast<const gles2::cmds::BindTexture*>(cmd_data); 138 const volatile gles2::cmds::BindTexture& c =
144 (void)c; 139 *static_cast<const volatile gles2::cmds::BindTexture*>(cmd_data);
145 GLenum target = static_cast<GLenum>(c.target); 140 GLenum target = static_cast<GLenum>(c.target);
146 GLuint texture = c.texture; 141 GLuint texture = c.texture;
147 if (!validators_->texture_bind_target.IsValid(target)) { 142 if (!validators_->texture_bind_target.IsValid(target)) {
148 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target"); 143 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target");
149 return error::kNoError; 144 return error::kNoError;
150 } 145 }
151 DoBindTexture(target, texture); 146 DoBindTexture(target, texture);
152 return error::kNoError; 147 return error::kNoError;
153 } 148 }
154 149
155 error::Error GLES2DecoderImpl::HandleBindTransformFeedback( 150 error::Error GLES2DecoderImpl::HandleBindTransformFeedback(
156 uint32_t immediate_data_size, 151 uint32_t immediate_data_size,
157 const void* cmd_data) { 152 const volatile void* cmd_data) {
158 if (!unsafe_es3_apis_enabled()) 153 if (!unsafe_es3_apis_enabled())
159 return error::kUnknownCommand; 154 return error::kUnknownCommand;
160 const gles2::cmds::BindTransformFeedback& c = 155 const volatile gles2::cmds::BindTransformFeedback& c =
161 *static_cast<const gles2::cmds::BindTransformFeedback*>(cmd_data); 156 *static_cast<const volatile gles2::cmds::BindTransformFeedback*>(
162 (void)c; 157 cmd_data);
163 GLenum target = static_cast<GLenum>(c.target); 158 GLenum target = static_cast<GLenum>(c.target);
164 GLuint transformfeedback = c.transformfeedback; 159 GLuint transformfeedback = c.transformfeedback;
165 if (!validators_->transform_feedback_bind_target.IsValid(target)) { 160 if (!validators_->transform_feedback_bind_target.IsValid(target)) {
166 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTransformFeedback", target, 161 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTransformFeedback", target,
167 "target"); 162 "target");
168 return error::kNoError; 163 return error::kNoError;
169 } 164 }
170 DoBindTransformFeedback(target, transformfeedback); 165 DoBindTransformFeedback(target, transformfeedback);
171 return error::kNoError; 166 return error::kNoError;
172 } 167 }
173 168
174 error::Error GLES2DecoderImpl::HandleBlendColor(uint32_t immediate_data_size, 169 error::Error GLES2DecoderImpl::HandleBlendColor(uint32_t immediate_data_size,
175 const void* cmd_data) { 170 const volatile void* cmd_data) {
176 const gles2::cmds::BlendColor& c = 171 const volatile gles2::cmds::BlendColor& c =
177 *static_cast<const gles2::cmds::BlendColor*>(cmd_data); 172 *static_cast<const volatile gles2::cmds::BlendColor*>(cmd_data);
178 (void)c;
179 GLclampf red = static_cast<GLclampf>(c.red); 173 GLclampf red = static_cast<GLclampf>(c.red);
180 GLclampf green = static_cast<GLclampf>(c.green); 174 GLclampf green = static_cast<GLclampf>(c.green);
181 GLclampf blue = static_cast<GLclampf>(c.blue); 175 GLclampf blue = static_cast<GLclampf>(c.blue);
182 GLclampf alpha = static_cast<GLclampf>(c.alpha); 176 GLclampf alpha = static_cast<GLclampf>(c.alpha);
183 if (state_.blend_color_red != red || state_.blend_color_green != green || 177 if (state_.blend_color_red != red || state_.blend_color_green != green ||
184 state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) { 178 state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) {
185 state_.blend_color_red = red; 179 state_.blend_color_red = red;
186 state_.blend_color_green = green; 180 state_.blend_color_green = green;
187 state_.blend_color_blue = blue; 181 state_.blend_color_blue = blue;
188 state_.blend_color_alpha = alpha; 182 state_.blend_color_alpha = alpha;
189 glBlendColor(red, green, blue, alpha); 183 glBlendColor(red, green, blue, alpha);
190 } 184 }
191 return error::kNoError; 185 return error::kNoError;
192 } 186 }
193 187
194 error::Error GLES2DecoderImpl::HandleBlendEquation(uint32_t immediate_data_size, 188 error::Error GLES2DecoderImpl::HandleBlendEquation(
195 const void* cmd_data) { 189 uint32_t immediate_data_size,
196 const gles2::cmds::BlendEquation& c = 190 const volatile void* cmd_data) {
197 *static_cast<const gles2::cmds::BlendEquation*>(cmd_data); 191 const volatile gles2::cmds::BlendEquation& c =
198 (void)c; 192 *static_cast<const volatile gles2::cmds::BlendEquation*>(cmd_data);
199 GLenum mode = static_cast<GLenum>(c.mode); 193 GLenum mode = static_cast<GLenum>(c.mode);
200 if (!validators_->equation.IsValid(mode)) { 194 if (!validators_->equation.IsValid(mode)) {
201 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode"); 195 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode");
202 return error::kNoError; 196 return error::kNoError;
203 } 197 }
204 if (state_.blend_equation_rgb != mode || 198 if (state_.blend_equation_rgb != mode ||
205 state_.blend_equation_alpha != mode) { 199 state_.blend_equation_alpha != mode) {
206 state_.blend_equation_rgb = mode; 200 state_.blend_equation_rgb = mode;
207 state_.blend_equation_alpha = mode; 201 state_.blend_equation_alpha = mode;
208 glBlendEquation(mode); 202 glBlendEquation(mode);
209 } 203 }
210 return error::kNoError; 204 return error::kNoError;
211 } 205 }
212 206
213 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( 207 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate(
214 uint32_t immediate_data_size, 208 uint32_t immediate_data_size,
215 const void* cmd_data) { 209 const volatile void* cmd_data) {
216 const gles2::cmds::BlendEquationSeparate& c = 210 const volatile gles2::cmds::BlendEquationSeparate& c =
217 *static_cast<const gles2::cmds::BlendEquationSeparate*>(cmd_data); 211 *static_cast<const volatile gles2::cmds::BlendEquationSeparate*>(
218 (void)c; 212 cmd_data);
219 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); 213 GLenum modeRGB = static_cast<GLenum>(c.modeRGB);
220 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); 214 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha);
221 if (!validators_->equation.IsValid(modeRGB)) { 215 if (!validators_->equation.IsValid(modeRGB)) {
222 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeRGB, 216 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeRGB,
223 "modeRGB"); 217 "modeRGB");
224 return error::kNoError; 218 return error::kNoError;
225 } 219 }
226 if (!validators_->equation.IsValid(modeAlpha)) { 220 if (!validators_->equation.IsValid(modeAlpha)) {
227 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeAlpha, 221 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeAlpha,
228 "modeAlpha"); 222 "modeAlpha");
229 return error::kNoError; 223 return error::kNoError;
230 } 224 }
231 if (state_.blend_equation_rgb != modeRGB || 225 if (state_.blend_equation_rgb != modeRGB ||
232 state_.blend_equation_alpha != modeAlpha) { 226 state_.blend_equation_alpha != modeAlpha) {
233 state_.blend_equation_rgb = modeRGB; 227 state_.blend_equation_rgb = modeRGB;
234 state_.blend_equation_alpha = modeAlpha; 228 state_.blend_equation_alpha = modeAlpha;
235 glBlendEquationSeparate(modeRGB, modeAlpha); 229 glBlendEquationSeparate(modeRGB, modeAlpha);
236 } 230 }
237 return error::kNoError; 231 return error::kNoError;
238 } 232 }
239 233
240 error::Error GLES2DecoderImpl::HandleBlendFunc(uint32_t immediate_data_size, 234 error::Error GLES2DecoderImpl::HandleBlendFunc(uint32_t immediate_data_size,
241 const void* cmd_data) { 235 const volatile void* cmd_data) {
242 const gles2::cmds::BlendFunc& c = 236 const volatile gles2::cmds::BlendFunc& c =
243 *static_cast<const gles2::cmds::BlendFunc*>(cmd_data); 237 *static_cast<const volatile gles2::cmds::BlendFunc*>(cmd_data);
244 (void)c;
245 GLenum sfactor = static_cast<GLenum>(c.sfactor); 238 GLenum sfactor = static_cast<GLenum>(c.sfactor);
246 GLenum dfactor = static_cast<GLenum>(c.dfactor); 239 GLenum dfactor = static_cast<GLenum>(c.dfactor);
247 if (!validators_->src_blend_factor.IsValid(sfactor)) { 240 if (!validators_->src_blend_factor.IsValid(sfactor)) {
248 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", sfactor, "sfactor"); 241 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", sfactor, "sfactor");
249 return error::kNoError; 242 return error::kNoError;
250 } 243 }
251 if (!validators_->dst_blend_factor.IsValid(dfactor)) { 244 if (!validators_->dst_blend_factor.IsValid(dfactor)) {
252 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor"); 245 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor");
253 return error::kNoError; 246 return error::kNoError;
254 } 247 }
255 if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor || 248 if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor ||
256 state_.blend_source_alpha != sfactor || 249 state_.blend_source_alpha != sfactor ||
257 state_.blend_dest_alpha != dfactor) { 250 state_.blend_dest_alpha != dfactor) {
258 state_.blend_source_rgb = sfactor; 251 state_.blend_source_rgb = sfactor;
259 state_.blend_dest_rgb = dfactor; 252 state_.blend_dest_rgb = dfactor;
260 state_.blend_source_alpha = sfactor; 253 state_.blend_source_alpha = sfactor;
261 state_.blend_dest_alpha = dfactor; 254 state_.blend_dest_alpha = dfactor;
262 glBlendFunc(sfactor, dfactor); 255 glBlendFunc(sfactor, dfactor);
263 } 256 }
264 return error::kNoError; 257 return error::kNoError;
265 } 258 }
266 259
267 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( 260 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
268 uint32_t immediate_data_size, 261 uint32_t immediate_data_size,
269 const void* cmd_data) { 262 const volatile void* cmd_data) {
270 const gles2::cmds::BlendFuncSeparate& c = 263 const volatile gles2::cmds::BlendFuncSeparate& c =
271 *static_cast<const gles2::cmds::BlendFuncSeparate*>(cmd_data); 264 *static_cast<const volatile gles2::cmds::BlendFuncSeparate*>(cmd_data);
272 (void)c;
273 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); 265 GLenum srcRGB = static_cast<GLenum>(c.srcRGB);
274 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); 266 GLenum dstRGB = static_cast<GLenum>(c.dstRGB);
275 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); 267 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha);
276 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); 268 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha);
277 if (!validators_->src_blend_factor.IsValid(srcRGB)) { 269 if (!validators_->src_blend_factor.IsValid(srcRGB)) {
278 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcRGB, "srcRGB"); 270 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcRGB, "srcRGB");
279 return error::kNoError; 271 return error::kNoError;
280 } 272 }
281 if (!validators_->dst_blend_factor.IsValid(dstRGB)) { 273 if (!validators_->dst_blend_factor.IsValid(dstRGB)) {
282 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstRGB, "dstRGB"); 274 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstRGB, "dstRGB");
(...skipping 14 matching lines...) Expand all
297 state_.blend_dest_alpha != dstAlpha) { 289 state_.blend_dest_alpha != dstAlpha) {
298 state_.blend_source_rgb = srcRGB; 290 state_.blend_source_rgb = srcRGB;
299 state_.blend_dest_rgb = dstRGB; 291 state_.blend_dest_rgb = dstRGB;
300 state_.blend_source_alpha = srcAlpha; 292 state_.blend_source_alpha = srcAlpha;
301 state_.blend_dest_alpha = dstAlpha; 293 state_.blend_dest_alpha = dstAlpha;
302 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 294 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
303 } 295 }
304 return error::kNoError; 296 return error::kNoError;
305 } 297 }
306 298
307 error::Error GLES2DecoderImpl::HandleBufferSubData(uint32_t immediate_data_size, 299 error::Error GLES2DecoderImpl::HandleBufferSubData(
308 const void* cmd_data) { 300 uint32_t immediate_data_size,
309 const gles2::cmds::BufferSubData& c = 301 const volatile void* cmd_data) {
310 *static_cast<const gles2::cmds::BufferSubData*>(cmd_data); 302 const volatile gles2::cmds::BufferSubData& c =
311 (void)c; 303 *static_cast<const volatile gles2::cmds::BufferSubData*>(cmd_data);
312 GLenum target = static_cast<GLenum>(c.target); 304 GLenum target = static_cast<GLenum>(c.target);
313 GLintptr offset = static_cast<GLintptr>(c.offset); 305 GLintptr offset = static_cast<GLintptr>(c.offset);
314 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 306 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
315 uint32_t data_size = size; 307 uint32_t data_size = size;
316 const void* data = GetSharedMemoryAs<const void*>( 308 const void* data = GetSharedMemoryAs<const void*>(
317 c.data_shm_id, c.data_shm_offset, data_size); 309 c.data_shm_id, c.data_shm_offset, data_size);
318 if (!validators_->buffer_target.IsValid(target)) { 310 if (!validators_->buffer_target.IsValid(target)) {
319 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBufferSubData", target, "target"); 311 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBufferSubData", target, "target");
320 return error::kNoError; 312 return error::kNoError;
321 } 313 }
322 if (size < 0) { 314 if (size < 0) {
323 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBufferSubData", "size < 0"); 315 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBufferSubData", "size < 0");
324 return error::kNoError; 316 return error::kNoError;
325 } 317 }
326 if (data == NULL) { 318 if (data == NULL) {
327 return error::kOutOfBounds; 319 return error::kOutOfBounds;
328 } 320 }
329 DoBufferSubData(target, offset, size, data); 321 DoBufferSubData(target, offset, size, data);
330 return error::kNoError; 322 return error::kNoError;
331 } 323 }
332 324
333 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( 325 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus(
334 uint32_t immediate_data_size, 326 uint32_t immediate_data_size,
335 const void* cmd_data) { 327 const volatile void* cmd_data) {
336 const gles2::cmds::CheckFramebufferStatus& c = 328 const volatile gles2::cmds::CheckFramebufferStatus& c =
337 *static_cast<const gles2::cmds::CheckFramebufferStatus*>(cmd_data); 329 *static_cast<const volatile gles2::cmds::CheckFramebufferStatus*>(
338 (void)c; 330 cmd_data);
339 GLenum target = static_cast<GLenum>(c.target); 331 GLenum target = static_cast<GLenum>(c.target);
340 typedef cmds::CheckFramebufferStatus::Result Result; 332 typedef cmds::CheckFramebufferStatus::Result Result;
341 Result* result_dst = GetSharedMemoryAs<Result*>( 333 Result* result_dst = GetSharedMemoryAs<Result*>(
342 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 334 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
343 if (!result_dst) { 335 if (!result_dst) {
344 return error::kOutOfBounds; 336 return error::kOutOfBounds;
345 } 337 }
346 if (!validators_->framebuffer_target.IsValid(target)) { 338 if (!validators_->framebuffer_target.IsValid(target)) {
347 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCheckFramebufferStatus", target, 339 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCheckFramebufferStatus", target,
348 "target"); 340 "target");
349 return error::kNoError; 341 return error::kNoError;
350 } 342 }
351 *result_dst = DoCheckFramebufferStatus(target); 343 *result_dst = DoCheckFramebufferStatus(target);
352 return error::kNoError; 344 return error::kNoError;
353 } 345 }
354 346
355 error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size, 347 error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size,
356 const void* cmd_data) { 348 const volatile void* cmd_data) {
357 const gles2::cmds::Clear& c = 349 const volatile gles2::cmds::Clear& c =
358 *static_cast<const gles2::cmds::Clear*>(cmd_data); 350 *static_cast<const volatile gles2::cmds::Clear*>(cmd_data);
359 (void)c;
360 error::Error error; 351 error::Error error;
361 error = WillAccessBoundFramebufferForDraw(); 352 error = WillAccessBoundFramebufferForDraw();
362 if (error != error::kNoError) 353 if (error != error::kNoError)
363 return error; 354 return error;
364 GLbitfield mask = static_cast<GLbitfield>(c.mask); 355 GLbitfield mask = static_cast<GLbitfield>(c.mask);
365 DoClear(mask); 356 DoClear(mask);
366 return error::kNoError; 357 return error::kNoError;
367 } 358 }
368 359
369 error::Error GLES2DecoderImpl::HandleClearBufferfi(uint32_t immediate_data_size, 360 error::Error GLES2DecoderImpl::HandleClearBufferfi(
370 const void* cmd_data) { 361 uint32_t immediate_data_size,
362 const volatile void* cmd_data) {
371 if (!unsafe_es3_apis_enabled()) 363 if (!unsafe_es3_apis_enabled())
372 return error::kUnknownCommand; 364 return error::kUnknownCommand;
373 const gles2::cmds::ClearBufferfi& c = 365 const volatile gles2::cmds::ClearBufferfi& c =
374 *static_cast<const gles2::cmds::ClearBufferfi*>(cmd_data); 366 *static_cast<const volatile gles2::cmds::ClearBufferfi*>(cmd_data);
375 (void)c;
376 GLenum buffer = static_cast<GLenum>(c.buffer); 367 GLenum buffer = static_cast<GLenum>(c.buffer);
377 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); 368 GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
378 GLfloat depth = static_cast<GLfloat>(c.depth); 369 GLfloat depth = static_cast<GLfloat>(c.depth);
379 GLint stencil = static_cast<GLint>(c.stencil); 370 GLint stencil = static_cast<GLint>(c.stencil);
380 if (!validators_->bufferfi.IsValid(buffer)) { 371 if (!validators_->bufferfi.IsValid(buffer)) {
381 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfi", buffer, "buffer"); 372 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfi", buffer, "buffer");
382 return error::kNoError; 373 return error::kNoError;
383 } 374 }
384 DoClearBufferfi(buffer, drawbuffers, depth, stencil); 375 DoClearBufferfi(buffer, drawbuffers, depth, stencil);
385 return error::kNoError; 376 return error::kNoError;
386 } 377 }
387 378
388 error::Error GLES2DecoderImpl::HandleClearBufferfvImmediate( 379 error::Error GLES2DecoderImpl::HandleClearBufferfvImmediate(
389 uint32_t immediate_data_size, 380 uint32_t immediate_data_size,
390 const void* cmd_data) { 381 const volatile void* cmd_data) {
391 if (!unsafe_es3_apis_enabled()) 382 if (!unsafe_es3_apis_enabled())
392 return error::kUnknownCommand; 383 return error::kUnknownCommand;
393 const gles2::cmds::ClearBufferfvImmediate& c = 384 const volatile gles2::cmds::ClearBufferfvImmediate& c =
394 *static_cast<const gles2::cmds::ClearBufferfvImmediate*>(cmd_data); 385 *static_cast<const volatile gles2::cmds::ClearBufferfvImmediate*>(
395 (void)c; 386 cmd_data);
396 GLenum buffer = static_cast<GLenum>(c.buffer); 387 GLenum buffer = static_cast<GLenum>(c.buffer);
397 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); 388 GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
398 uint32_t data_size; 389 uint32_t data_size;
399 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { 390 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
400 return error::kOutOfBounds; 391 return error::kOutOfBounds;
401 } 392 }
402 if (data_size > immediate_data_size) { 393 if (data_size > immediate_data_size) {
403 return error::kOutOfBounds; 394 return error::kOutOfBounds;
404 } 395 }
405 const GLfloat* value = 396 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
406 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 397 c, data_size, immediate_data_size);
407 if (!validators_->bufferfv.IsValid(buffer)) { 398 if (!validators_->bufferfv.IsValid(buffer)) {
408 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfv", buffer, "buffer"); 399 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferfv", buffer, "buffer");
409 return error::kNoError; 400 return error::kNoError;
410 } 401 }
411 if (value == NULL) { 402 if (value == NULL) {
412 return error::kOutOfBounds; 403 return error::kOutOfBounds;
413 } 404 }
414 DoClearBufferfv(buffer, drawbuffers, value); 405 DoClearBufferfv(buffer, drawbuffers, value);
415 return error::kNoError; 406 return error::kNoError;
416 } 407 }
417 408
418 error::Error GLES2DecoderImpl::HandleClearBufferivImmediate( 409 error::Error GLES2DecoderImpl::HandleClearBufferivImmediate(
419 uint32_t immediate_data_size, 410 uint32_t immediate_data_size,
420 const void* cmd_data) { 411 const volatile void* cmd_data) {
421 if (!unsafe_es3_apis_enabled()) 412 if (!unsafe_es3_apis_enabled())
422 return error::kUnknownCommand; 413 return error::kUnknownCommand;
423 const gles2::cmds::ClearBufferivImmediate& c = 414 const volatile gles2::cmds::ClearBufferivImmediate& c =
424 *static_cast<const gles2::cmds::ClearBufferivImmediate*>(cmd_data); 415 *static_cast<const volatile gles2::cmds::ClearBufferivImmediate*>(
425 (void)c; 416 cmd_data);
426 GLenum buffer = static_cast<GLenum>(c.buffer); 417 GLenum buffer = static_cast<GLenum>(c.buffer);
427 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); 418 GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
428 uint32_t data_size; 419 uint32_t data_size;
429 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { 420 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) {
430 return error::kOutOfBounds; 421 return error::kOutOfBounds;
431 } 422 }
432 if (data_size > immediate_data_size) { 423 if (data_size > immediate_data_size) {
433 return error::kOutOfBounds; 424 return error::kOutOfBounds;
434 } 425 }
435 const GLint* value = 426 volatile const GLint* value = GetImmediateDataAs<volatile const GLint*>(
436 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 427 c, data_size, immediate_data_size);
437 if (!validators_->bufferiv.IsValid(buffer)) { 428 if (!validators_->bufferiv.IsValid(buffer)) {
438 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferiv", buffer, "buffer"); 429 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferiv", buffer, "buffer");
439 return error::kNoError; 430 return error::kNoError;
440 } 431 }
441 if (value == NULL) { 432 if (value == NULL) {
442 return error::kOutOfBounds; 433 return error::kOutOfBounds;
443 } 434 }
444 DoClearBufferiv(buffer, drawbuffers, value); 435 DoClearBufferiv(buffer, drawbuffers, value);
445 return error::kNoError; 436 return error::kNoError;
446 } 437 }
447 438
448 error::Error GLES2DecoderImpl::HandleClearBufferuivImmediate( 439 error::Error GLES2DecoderImpl::HandleClearBufferuivImmediate(
449 uint32_t immediate_data_size, 440 uint32_t immediate_data_size,
450 const void* cmd_data) { 441 const volatile void* cmd_data) {
451 if (!unsafe_es3_apis_enabled()) 442 if (!unsafe_es3_apis_enabled())
452 return error::kUnknownCommand; 443 return error::kUnknownCommand;
453 const gles2::cmds::ClearBufferuivImmediate& c = 444 const volatile gles2::cmds::ClearBufferuivImmediate& c =
454 *static_cast<const gles2::cmds::ClearBufferuivImmediate*>(cmd_data); 445 *static_cast<const volatile gles2::cmds::ClearBufferuivImmediate*>(
455 (void)c; 446 cmd_data);
456 GLenum buffer = static_cast<GLenum>(c.buffer); 447 GLenum buffer = static_cast<GLenum>(c.buffer);
457 GLint drawbuffers = static_cast<GLint>(c.drawbuffers); 448 GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
458 uint32_t data_size; 449 uint32_t data_size;
459 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { 450 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) {
460 return error::kOutOfBounds; 451 return error::kOutOfBounds;
461 } 452 }
462 if (data_size > immediate_data_size) { 453 if (data_size > immediate_data_size) {
463 return error::kOutOfBounds; 454 return error::kOutOfBounds;
464 } 455 }
465 const GLuint* value = 456 volatile const GLuint* value = GetImmediateDataAs<volatile const GLuint*>(
466 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 457 c, data_size, immediate_data_size);
467 if (!validators_->bufferuiv.IsValid(buffer)) { 458 if (!validators_->bufferuiv.IsValid(buffer)) {
468 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferuiv", buffer, "buffer"); 459 LOCAL_SET_GL_ERROR_INVALID_ENUM("glClearBufferuiv", buffer, "buffer");
469 return error::kNoError; 460 return error::kNoError;
470 } 461 }
471 if (value == NULL) { 462 if (value == NULL) {
472 return error::kOutOfBounds; 463 return error::kOutOfBounds;
473 } 464 }
474 DoClearBufferuiv(buffer, drawbuffers, value); 465 DoClearBufferuiv(buffer, drawbuffers, value);
475 return error::kNoError; 466 return error::kNoError;
476 } 467 }
477 468
478 error::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size, 469 error::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size,
479 const void* cmd_data) { 470 const volatile void* cmd_data) {
480 const gles2::cmds::ClearColor& c = 471 const volatile gles2::cmds::ClearColor& c =
481 *static_cast<const gles2::cmds::ClearColor*>(cmd_data); 472 *static_cast<const volatile gles2::cmds::ClearColor*>(cmd_data);
482 (void)c;
483 GLclampf red = static_cast<GLclampf>(c.red); 473 GLclampf red = static_cast<GLclampf>(c.red);
484 GLclampf green = static_cast<GLclampf>(c.green); 474 GLclampf green = static_cast<GLclampf>(c.green);
485 GLclampf blue = static_cast<GLclampf>(c.blue); 475 GLclampf blue = static_cast<GLclampf>(c.blue);
486 GLclampf alpha = static_cast<GLclampf>(c.alpha); 476 GLclampf alpha = static_cast<GLclampf>(c.alpha);
487 if (state_.color_clear_red != red || state_.color_clear_green != green || 477 if (state_.color_clear_red != red || state_.color_clear_green != green ||
488 state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) { 478 state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) {
489 state_.color_clear_red = red; 479 state_.color_clear_red = red;
490 state_.color_clear_green = green; 480 state_.color_clear_green = green;
491 state_.color_clear_blue = blue; 481 state_.color_clear_blue = blue;
492 state_.color_clear_alpha = alpha; 482 state_.color_clear_alpha = alpha;
493 glClearColor(red, green, blue, alpha); 483 glClearColor(red, green, blue, alpha);
494 } 484 }
495 return error::kNoError; 485 return error::kNoError;
496 } 486 }
497 487
498 error::Error GLES2DecoderImpl::HandleClearDepthf(uint32_t immediate_data_size, 488 error::Error GLES2DecoderImpl::HandleClearDepthf(
499 const void* cmd_data) { 489 uint32_t immediate_data_size,
500 const gles2::cmds::ClearDepthf& c = 490 const volatile void* cmd_data) {
501 *static_cast<const gles2::cmds::ClearDepthf*>(cmd_data); 491 const volatile gles2::cmds::ClearDepthf& c =
502 (void)c; 492 *static_cast<const volatile gles2::cmds::ClearDepthf*>(cmd_data);
503 GLclampf depth = static_cast<GLclampf>(c.depth); 493 GLclampf depth = static_cast<GLclampf>(c.depth);
504 if (state_.depth_clear != depth) { 494 if (state_.depth_clear != depth) {
505 state_.depth_clear = depth; 495 state_.depth_clear = depth;
506 glClearDepth(depth); 496 glClearDepth(depth);
507 } 497 }
508 return error::kNoError; 498 return error::kNoError;
509 } 499 }
510 500
511 error::Error GLES2DecoderImpl::HandleClearStencil(uint32_t immediate_data_size, 501 error::Error GLES2DecoderImpl::HandleClearStencil(
512 const void* cmd_data) { 502 uint32_t immediate_data_size,
513 const gles2::cmds::ClearStencil& c = 503 const volatile void* cmd_data) {
514 *static_cast<const gles2::cmds::ClearStencil*>(cmd_data); 504 const volatile gles2::cmds::ClearStencil& c =
515 (void)c; 505 *static_cast<const volatile gles2::cmds::ClearStencil*>(cmd_data);
516 GLint s = static_cast<GLint>(c.s); 506 GLint s = static_cast<GLint>(c.s);
517 if (state_.stencil_clear != s) { 507 if (state_.stencil_clear != s) {
518 state_.stencil_clear = s; 508 state_.stencil_clear = s;
519 glClearStencil(s); 509 glClearStencil(s);
520 } 510 }
521 return error::kNoError; 511 return error::kNoError;
522 } 512 }
523 513
524 error::Error GLES2DecoderImpl::HandleColorMask(uint32_t immediate_data_size, 514 error::Error GLES2DecoderImpl::HandleColorMask(uint32_t immediate_data_size,
525 const void* cmd_data) { 515 const volatile void* cmd_data) {
526 const gles2::cmds::ColorMask& c = 516 const volatile gles2::cmds::ColorMask& c =
527 *static_cast<const gles2::cmds::ColorMask*>(cmd_data); 517 *static_cast<const volatile gles2::cmds::ColorMask*>(cmd_data);
528 (void)c;
529 GLboolean red = static_cast<GLboolean>(c.red); 518 GLboolean red = static_cast<GLboolean>(c.red);
530 GLboolean green = static_cast<GLboolean>(c.green); 519 GLboolean green = static_cast<GLboolean>(c.green);
531 GLboolean blue = static_cast<GLboolean>(c.blue); 520 GLboolean blue = static_cast<GLboolean>(c.blue);
532 GLboolean alpha = static_cast<GLboolean>(c.alpha); 521 GLboolean alpha = static_cast<GLboolean>(c.alpha);
533 if (state_.color_mask_red != red || state_.color_mask_green != green || 522 if (state_.color_mask_red != red || state_.color_mask_green != green ||
534 state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) { 523 state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) {
535 state_.color_mask_red = red; 524 state_.color_mask_red = red;
536 state_.color_mask_green = green; 525 state_.color_mask_green = green;
537 state_.color_mask_blue = blue; 526 state_.color_mask_blue = blue;
538 state_.color_mask_alpha = alpha; 527 state_.color_mask_alpha = alpha;
539 framebuffer_state_.clear_state_dirty = true; 528 framebuffer_state_.clear_state_dirty = true;
540 } 529 }
541 return error::kNoError; 530 return error::kNoError;
542 } 531 }
543 532
544 error::Error GLES2DecoderImpl::HandleCompileShader(uint32_t immediate_data_size, 533 error::Error GLES2DecoderImpl::HandleCompileShader(
545 const void* cmd_data) { 534 uint32_t immediate_data_size,
546 const gles2::cmds::CompileShader& c = 535 const volatile void* cmd_data) {
547 *static_cast<const gles2::cmds::CompileShader*>(cmd_data); 536 const volatile gles2::cmds::CompileShader& c =
548 (void)c; 537 *static_cast<const volatile gles2::cmds::CompileShader*>(cmd_data);
549 GLuint shader = c.shader; 538 GLuint shader = c.shader;
550 DoCompileShader(shader); 539 DoCompileShader(shader);
551 return error::kNoError; 540 return error::kNoError;
552 } 541 }
553 542
554 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket( 543 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket(
555 uint32_t immediate_data_size, 544 uint32_t immediate_data_size,
556 const void* cmd_data) { 545 const volatile void* cmd_data) {
557 const gles2::cmds::CompressedTexImage2DBucket& c = 546 const volatile gles2::cmds::CompressedTexImage2DBucket& c =
558 *static_cast<const gles2::cmds::CompressedTexImage2DBucket*>(cmd_data); 547 *static_cast<const volatile gles2::cmds::CompressedTexImage2DBucket*>(
559 (void)c; 548 cmd_data);
560 GLenum target = static_cast<GLenum>(c.target); 549 GLenum target = static_cast<GLenum>(c.target);
561 GLint level = static_cast<GLint>(c.level); 550 GLint level = static_cast<GLint>(c.level);
562 GLenum internalformat = static_cast<GLenum>(c.internalformat); 551 GLenum internalformat = static_cast<GLenum>(c.internalformat);
563 GLsizei width = static_cast<GLsizei>(c.width); 552 GLsizei width = static_cast<GLsizei>(c.width);
564 GLsizei height = static_cast<GLsizei>(c.height); 553 GLsizei height = static_cast<GLsizei>(c.height);
565 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 554 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
566 GLint border = static_cast<GLint>(c.border); 555 GLint border = static_cast<GLint>(c.border);
567 Bucket* bucket = GetBucket(bucket_id); 556 Bucket* bucket = GetBucket(bucket_id);
568 if (!bucket) 557 if (!bucket)
569 return error::kInvalidArguments; 558 return error::kInvalidArguments;
(...skipping 24 matching lines...) Expand all
594 "imageSize < 0"); 583 "imageSize < 0");
595 return error::kNoError; 584 return error::kNoError;
596 } 585 }
597 DoCompressedTexImage2D(target, level, internalformat, width, height, border, 586 DoCompressedTexImage2D(target, level, internalformat, width, height, border,
598 imageSize, data); 587 imageSize, data);
599 return error::kNoError; 588 return error::kNoError;
600 } 589 }
601 590
602 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D( 591 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D(
603 uint32_t immediate_data_size, 592 uint32_t immediate_data_size,
604 const void* cmd_data) { 593 const volatile void* cmd_data) {
605 const gles2::cmds::CompressedTexImage2D& c = 594 const volatile gles2::cmds::CompressedTexImage2D& c =
606 *static_cast<const gles2::cmds::CompressedTexImage2D*>(cmd_data); 595 *static_cast<const volatile gles2::cmds::CompressedTexImage2D*>(cmd_data);
607 (void)c;
608 GLenum target = static_cast<GLenum>(c.target); 596 GLenum target = static_cast<GLenum>(c.target);
609 GLint level = static_cast<GLint>(c.level); 597 GLint level = static_cast<GLint>(c.level);
610 GLenum internalformat = static_cast<GLenum>(c.internalformat); 598 GLenum internalformat = static_cast<GLenum>(c.internalformat);
611 GLsizei width = static_cast<GLsizei>(c.width); 599 GLsizei width = static_cast<GLsizei>(c.width);
612 GLsizei height = static_cast<GLsizei>(c.height); 600 GLsizei height = static_cast<GLsizei>(c.height);
613 GLint border = static_cast<GLint>(c.border); 601 GLint border = static_cast<GLint>(c.border);
614 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 602 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
615 uint32_t data_size = imageSize; 603 uint32_t data_size = imageSize;
616 const void* data = GetSharedMemoryAs<const void*>( 604 const void* data = GetSharedMemoryAs<const void*>(
617 c.data_shm_id, c.data_shm_offset, data_size); 605 c.data_shm_id, c.data_shm_offset, data_size);
(...skipping 20 matching lines...) Expand all
638 "imageSize < 0"); 626 "imageSize < 0");
639 return error::kNoError; 627 return error::kNoError;
640 } 628 }
641 DoCompressedTexImage2D(target, level, internalformat, width, height, border, 629 DoCompressedTexImage2D(target, level, internalformat, width, height, border,
642 imageSize, data); 630 imageSize, data);
643 return error::kNoError; 631 return error::kNoError;
644 } 632 }
645 633
646 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket( 634 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket(
647 uint32_t immediate_data_size, 635 uint32_t immediate_data_size,
648 const void* cmd_data) { 636 const volatile void* cmd_data) {
649 const gles2::cmds::CompressedTexSubImage2DBucket& c = 637 const volatile gles2::cmds::CompressedTexSubImage2DBucket& c =
650 *static_cast<const gles2::cmds::CompressedTexSubImage2DBucket*>(cmd_data); 638 *static_cast<const volatile gles2::cmds::CompressedTexSubImage2DBucket*>(
651 (void)c; 639 cmd_data);
652 GLenum target = static_cast<GLenum>(c.target); 640 GLenum target = static_cast<GLenum>(c.target);
653 GLint level = static_cast<GLint>(c.level); 641 GLint level = static_cast<GLint>(c.level);
654 GLint xoffset = static_cast<GLint>(c.xoffset); 642 GLint xoffset = static_cast<GLint>(c.xoffset);
655 GLint yoffset = static_cast<GLint>(c.yoffset); 643 GLint yoffset = static_cast<GLint>(c.yoffset);
656 GLsizei width = static_cast<GLsizei>(c.width); 644 GLsizei width = static_cast<GLsizei>(c.width);
657 GLsizei height = static_cast<GLsizei>(c.height); 645 GLsizei height = static_cast<GLsizei>(c.height);
658 GLenum format = static_cast<GLenum>(c.format); 646 GLenum format = static_cast<GLenum>(c.format);
659 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 647 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
660 Bucket* bucket = GetBucket(bucket_id); 648 Bucket* bucket = GetBucket(bucket_id);
661 if (!bucket) 649 if (!bucket)
(...skipping 27 matching lines...) Expand all
689 "imageSize < 0"); 677 "imageSize < 0");
690 return error::kNoError; 678 return error::kNoError;
691 } 679 }
692 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, 680 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height,
693 format, imageSize, data); 681 format, imageSize, data);
694 return error::kNoError; 682 return error::kNoError;
695 } 683 }
696 684
697 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( 685 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D(
698 uint32_t immediate_data_size, 686 uint32_t immediate_data_size,
699 const void* cmd_data) { 687 const volatile void* cmd_data) {
700 const gles2::cmds::CompressedTexSubImage2D& c = 688 const volatile gles2::cmds::CompressedTexSubImage2D& c =
701 *static_cast<const gles2::cmds::CompressedTexSubImage2D*>(cmd_data); 689 *static_cast<const volatile gles2::cmds::CompressedTexSubImage2D*>(
702 (void)c; 690 cmd_data);
703 GLenum target = static_cast<GLenum>(c.target); 691 GLenum target = static_cast<GLenum>(c.target);
704 GLint level = static_cast<GLint>(c.level); 692 GLint level = static_cast<GLint>(c.level);
705 GLint xoffset = static_cast<GLint>(c.xoffset); 693 GLint xoffset = static_cast<GLint>(c.xoffset);
706 GLint yoffset = static_cast<GLint>(c.yoffset); 694 GLint yoffset = static_cast<GLint>(c.yoffset);
707 GLsizei width = static_cast<GLsizei>(c.width); 695 GLsizei width = static_cast<GLsizei>(c.width);
708 GLsizei height = static_cast<GLsizei>(c.height); 696 GLsizei height = static_cast<GLsizei>(c.height);
709 GLenum format = static_cast<GLenum>(c.format); 697 GLenum format = static_cast<GLenum>(c.format);
710 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 698 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
711 uint32_t data_size = imageSize; 699 uint32_t data_size = imageSize;
712 const void* data = GetSharedMemoryAs<const void*>( 700 const void* data = GetSharedMemoryAs<const void*>(
(...skipping 26 matching lines...) Expand all
739 if (data == NULL) { 727 if (data == NULL) {
740 return error::kOutOfBounds; 728 return error::kOutOfBounds;
741 } 729 }
742 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, 730 DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height,
743 format, imageSize, data); 731 format, imageSize, data);
744 return error::kNoError; 732 return error::kNoError;
745 } 733 }
746 734
747 error::Error GLES2DecoderImpl::HandleCompressedTexImage3DBucket( 735 error::Error GLES2DecoderImpl::HandleCompressedTexImage3DBucket(
748 uint32_t immediate_data_size, 736 uint32_t immediate_data_size,
749 const void* cmd_data) { 737 const volatile void* cmd_data) {
750 if (!unsafe_es3_apis_enabled()) 738 if (!unsafe_es3_apis_enabled())
751 return error::kUnknownCommand; 739 return error::kUnknownCommand;
752 const gles2::cmds::CompressedTexImage3DBucket& c = 740 const volatile gles2::cmds::CompressedTexImage3DBucket& c =
753 *static_cast<const gles2::cmds::CompressedTexImage3DBucket*>(cmd_data); 741 *static_cast<const volatile gles2::cmds::CompressedTexImage3DBucket*>(
754 (void)c; 742 cmd_data);
755 GLenum target = static_cast<GLenum>(c.target); 743 GLenum target = static_cast<GLenum>(c.target);
756 GLint level = static_cast<GLint>(c.level); 744 GLint level = static_cast<GLint>(c.level);
757 GLenum internalformat = static_cast<GLenum>(c.internalformat); 745 GLenum internalformat = static_cast<GLenum>(c.internalformat);
758 GLsizei width = static_cast<GLsizei>(c.width); 746 GLsizei width = static_cast<GLsizei>(c.width);
759 GLsizei height = static_cast<GLsizei>(c.height); 747 GLsizei height = static_cast<GLsizei>(c.height);
760 GLsizei depth = static_cast<GLsizei>(c.depth); 748 GLsizei depth = static_cast<GLsizei>(c.depth);
761 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 749 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
762 GLint border = static_cast<GLint>(c.border); 750 GLint border = static_cast<GLint>(c.border);
763 Bucket* bucket = GetBucket(bucket_id); 751 Bucket* bucket = GetBucket(bucket_id);
764 if (!bucket) 752 if (!bucket)
(...skipping 29 matching lines...) Expand all
794 "imageSize < 0"); 782 "imageSize < 0");
795 return error::kNoError; 783 return error::kNoError;
796 } 784 }
797 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, 785 DoCompressedTexImage3D(target, level, internalformat, width, height, depth,
798 border, imageSize, data); 786 border, imageSize, data);
799 return error::kNoError; 787 return error::kNoError;
800 } 788 }
801 789
802 error::Error GLES2DecoderImpl::HandleCompressedTexImage3D( 790 error::Error GLES2DecoderImpl::HandleCompressedTexImage3D(
803 uint32_t immediate_data_size, 791 uint32_t immediate_data_size,
804 const void* cmd_data) { 792 const volatile void* cmd_data) {
805 if (!unsafe_es3_apis_enabled()) 793 if (!unsafe_es3_apis_enabled())
806 return error::kUnknownCommand; 794 return error::kUnknownCommand;
807 const gles2::cmds::CompressedTexImage3D& c = 795 const volatile gles2::cmds::CompressedTexImage3D& c =
808 *static_cast<const gles2::cmds::CompressedTexImage3D*>(cmd_data); 796 *static_cast<const volatile gles2::cmds::CompressedTexImage3D*>(cmd_data);
809 (void)c;
810 GLenum target = static_cast<GLenum>(c.target); 797 GLenum target = static_cast<GLenum>(c.target);
811 GLint level = static_cast<GLint>(c.level); 798 GLint level = static_cast<GLint>(c.level);
812 GLenum internalformat = static_cast<GLenum>(c.internalformat); 799 GLenum internalformat = static_cast<GLenum>(c.internalformat);
813 GLsizei width = static_cast<GLsizei>(c.width); 800 GLsizei width = static_cast<GLsizei>(c.width);
814 GLsizei height = static_cast<GLsizei>(c.height); 801 GLsizei height = static_cast<GLsizei>(c.height);
815 GLsizei depth = static_cast<GLsizei>(c.depth); 802 GLsizei depth = static_cast<GLsizei>(c.depth);
816 GLint border = static_cast<GLint>(c.border); 803 GLint border = static_cast<GLint>(c.border);
817 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 804 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
818 uint32_t data_size = imageSize; 805 uint32_t data_size = imageSize;
819 const void* data = GetSharedMemoryAs<const void*>( 806 const void* data = GetSharedMemoryAs<const void*>(
(...skipping 25 matching lines...) Expand all
845 "imageSize < 0"); 832 "imageSize < 0");
846 return error::kNoError; 833 return error::kNoError;
847 } 834 }
848 DoCompressedTexImage3D(target, level, internalformat, width, height, depth, 835 DoCompressedTexImage3D(target, level, internalformat, width, height, depth,
849 border, imageSize, data); 836 border, imageSize, data);
850 return error::kNoError; 837 return error::kNoError;
851 } 838 }
852 839
853 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3DBucket( 840 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3DBucket(
854 uint32_t immediate_data_size, 841 uint32_t immediate_data_size,
855 const void* cmd_data) { 842 const volatile void* cmd_data) {
856 if (!unsafe_es3_apis_enabled()) 843 if (!unsafe_es3_apis_enabled())
857 return error::kUnknownCommand; 844 return error::kUnknownCommand;
858 const gles2::cmds::CompressedTexSubImage3DBucket& c = 845 const volatile gles2::cmds::CompressedTexSubImage3DBucket& c =
859 *static_cast<const gles2::cmds::CompressedTexSubImage3DBucket*>(cmd_data); 846 *static_cast<const volatile gles2::cmds::CompressedTexSubImage3DBucket*>(
860 (void)c; 847 cmd_data);
861 GLenum target = static_cast<GLenum>(c.target); 848 GLenum target = static_cast<GLenum>(c.target);
862 GLint level = static_cast<GLint>(c.level); 849 GLint level = static_cast<GLint>(c.level);
863 GLint xoffset = static_cast<GLint>(c.xoffset); 850 GLint xoffset = static_cast<GLint>(c.xoffset);
864 GLint yoffset = static_cast<GLint>(c.yoffset); 851 GLint yoffset = static_cast<GLint>(c.yoffset);
865 GLint zoffset = static_cast<GLint>(c.zoffset); 852 GLint zoffset = static_cast<GLint>(c.zoffset);
866 GLsizei width = static_cast<GLsizei>(c.width); 853 GLsizei width = static_cast<GLsizei>(c.width);
867 GLsizei height = static_cast<GLsizei>(c.height); 854 GLsizei height = static_cast<GLsizei>(c.height);
868 GLsizei depth = static_cast<GLsizei>(c.depth); 855 GLsizei depth = static_cast<GLsizei>(c.depth);
869 GLenum format = static_cast<GLenum>(c.format); 856 GLenum format = static_cast<GLenum>(c.format);
870 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 857 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 "imageSize < 0"); 892 "imageSize < 0");
906 return error::kNoError; 893 return error::kNoError;
907 } 894 }
908 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, 895 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width,
909 height, depth, format, imageSize, data); 896 height, depth, format, imageSize, data);
910 return error::kNoError; 897 return error::kNoError;
911 } 898 }
912 899
913 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3D( 900 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage3D(
914 uint32_t immediate_data_size, 901 uint32_t immediate_data_size,
915 const void* cmd_data) { 902 const volatile void* cmd_data) {
916 if (!unsafe_es3_apis_enabled()) 903 if (!unsafe_es3_apis_enabled())
917 return error::kUnknownCommand; 904 return error::kUnknownCommand;
918 const gles2::cmds::CompressedTexSubImage3D& c = 905 const volatile gles2::cmds::CompressedTexSubImage3D& c =
919 *static_cast<const gles2::cmds::CompressedTexSubImage3D*>(cmd_data); 906 *static_cast<const volatile gles2::cmds::CompressedTexSubImage3D*>(
920 (void)c; 907 cmd_data);
921 GLenum target = static_cast<GLenum>(c.target); 908 GLenum target = static_cast<GLenum>(c.target);
922 GLint level = static_cast<GLint>(c.level); 909 GLint level = static_cast<GLint>(c.level);
923 GLint xoffset = static_cast<GLint>(c.xoffset); 910 GLint xoffset = static_cast<GLint>(c.xoffset);
924 GLint yoffset = static_cast<GLint>(c.yoffset); 911 GLint yoffset = static_cast<GLint>(c.yoffset);
925 GLint zoffset = static_cast<GLint>(c.zoffset); 912 GLint zoffset = static_cast<GLint>(c.zoffset);
926 GLsizei width = static_cast<GLsizei>(c.width); 913 GLsizei width = static_cast<GLsizei>(c.width);
927 GLsizei height = static_cast<GLsizei>(c.height); 914 GLsizei height = static_cast<GLsizei>(c.height);
928 GLsizei depth = static_cast<GLsizei>(c.depth); 915 GLsizei depth = static_cast<GLsizei>(c.depth);
929 GLenum format = static_cast<GLenum>(c.format); 916 GLenum format = static_cast<GLenum>(c.format);
930 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 917 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 if (data == NULL) { 951 if (data == NULL) {
965 return error::kOutOfBounds; 952 return error::kOutOfBounds;
966 } 953 }
967 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, 954 DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width,
968 height, depth, format, imageSize, data); 955 height, depth, format, imageSize, data);
969 return error::kNoError; 956 return error::kNoError;
970 } 957 }
971 958
972 error::Error GLES2DecoderImpl::HandleCopyBufferSubData( 959 error::Error GLES2DecoderImpl::HandleCopyBufferSubData(
973 uint32_t immediate_data_size, 960 uint32_t immediate_data_size,
974 const void* cmd_data) { 961 const volatile void* cmd_data) {
975 if (!unsafe_es3_apis_enabled()) 962 if (!unsafe_es3_apis_enabled())
976 return error::kUnknownCommand; 963 return error::kUnknownCommand;
977 const gles2::cmds::CopyBufferSubData& c = 964 const volatile gles2::cmds::CopyBufferSubData& c =
978 *static_cast<const gles2::cmds::CopyBufferSubData*>(cmd_data); 965 *static_cast<const volatile gles2::cmds::CopyBufferSubData*>(cmd_data);
979 (void)c;
980 GLenum readtarget = static_cast<GLenum>(c.readtarget); 966 GLenum readtarget = static_cast<GLenum>(c.readtarget);
981 GLenum writetarget = static_cast<GLenum>(c.writetarget); 967 GLenum writetarget = static_cast<GLenum>(c.writetarget);
982 GLintptr readoffset = static_cast<GLintptr>(c.readoffset); 968 GLintptr readoffset = static_cast<GLintptr>(c.readoffset);
983 GLintptr writeoffset = static_cast<GLintptr>(c.writeoffset); 969 GLintptr writeoffset = static_cast<GLintptr>(c.writeoffset);
984 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 970 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
985 if (!validators_->buffer_target.IsValid(readtarget)) { 971 if (!validators_->buffer_target.IsValid(readtarget)) {
986 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", readtarget, 972 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", readtarget,
987 "readtarget"); 973 "readtarget");
988 return error::kNoError; 974 return error::kNoError;
989 } 975 }
990 if (!validators_->buffer_target.IsValid(writetarget)) { 976 if (!validators_->buffer_target.IsValid(writetarget)) {
991 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", writetarget, 977 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyBufferSubData", writetarget,
992 "writetarget"); 978 "writetarget");
993 return error::kNoError; 979 return error::kNoError;
994 } 980 }
995 if (size < 0) { 981 if (size < 0) {
996 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyBufferSubData", "size < 0"); 982 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyBufferSubData", "size < 0");
997 return error::kNoError; 983 return error::kNoError;
998 } 984 }
999 glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size); 985 glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size);
1000 return error::kNoError; 986 return error::kNoError;
1001 } 987 }
1002 988
1003 error::Error GLES2DecoderImpl::HandleCopyTexImage2D( 989 error::Error GLES2DecoderImpl::HandleCopyTexImage2D(
1004 uint32_t immediate_data_size, 990 uint32_t immediate_data_size,
1005 const void* cmd_data) { 991 const volatile void* cmd_data) {
1006 const gles2::cmds::CopyTexImage2D& c = 992 const volatile gles2::cmds::CopyTexImage2D& c =
1007 *static_cast<const gles2::cmds::CopyTexImage2D*>(cmd_data); 993 *static_cast<const volatile gles2::cmds::CopyTexImage2D*>(cmd_data);
1008 (void)c;
1009 error::Error error; 994 error::Error error;
1010 error = WillAccessBoundFramebufferForRead(); 995 error = WillAccessBoundFramebufferForRead();
1011 if (error != error::kNoError) 996 if (error != error::kNoError)
1012 return error; 997 return error;
1013 GLenum target = static_cast<GLenum>(c.target); 998 GLenum target = static_cast<GLenum>(c.target);
1014 GLint level = static_cast<GLint>(c.level); 999 GLint level = static_cast<GLint>(c.level);
1015 GLenum internalformat = static_cast<GLenum>(c.internalformat); 1000 GLenum internalformat = static_cast<GLenum>(c.internalformat);
1016 GLint x = static_cast<GLint>(c.x); 1001 GLint x = static_cast<GLint>(c.x);
1017 GLint y = static_cast<GLint>(c.y); 1002 GLint y = static_cast<GLint>(c.y);
1018 GLsizei width = static_cast<GLsizei>(c.width); 1003 GLsizei width = static_cast<GLsizei>(c.width);
(...skipping 15 matching lines...) Expand all
1034 if (height < 0) { 1019 if (height < 0) {
1035 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0"); 1020 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0");
1036 return error::kNoError; 1021 return error::kNoError;
1037 } 1022 }
1038 DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border); 1023 DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
1039 return error::kNoError; 1024 return error::kNoError;
1040 } 1025 }
1041 1026
1042 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( 1027 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D(
1043 uint32_t immediate_data_size, 1028 uint32_t immediate_data_size,
1044 const void* cmd_data) { 1029 const volatile void* cmd_data) {
1045 const gles2::cmds::CopyTexSubImage2D& c = 1030 const volatile gles2::cmds::CopyTexSubImage2D& c =
1046 *static_cast<const gles2::cmds::CopyTexSubImage2D*>(cmd_data); 1031 *static_cast<const volatile gles2::cmds::CopyTexSubImage2D*>(cmd_data);
1047 (void)c;
1048 error::Error error; 1032 error::Error error;
1049 error = WillAccessBoundFramebufferForRead(); 1033 error = WillAccessBoundFramebufferForRead();
1050 if (error != error::kNoError) 1034 if (error != error::kNoError)
1051 return error; 1035 return error;
1052 GLenum target = static_cast<GLenum>(c.target); 1036 GLenum target = static_cast<GLenum>(c.target);
1053 GLint level = static_cast<GLint>(c.level); 1037 GLint level = static_cast<GLint>(c.level);
1054 GLint xoffset = static_cast<GLint>(c.xoffset); 1038 GLint xoffset = static_cast<GLint>(c.xoffset);
1055 GLint yoffset = static_cast<GLint>(c.yoffset); 1039 GLint yoffset = static_cast<GLint>(c.yoffset);
1056 GLint x = static_cast<GLint>(c.x); 1040 GLint x = static_cast<GLint>(c.x);
1057 GLint y = static_cast<GLint>(c.y); 1041 GLint y = static_cast<GLint>(c.y);
(...skipping 10 matching lines...) Expand all
1068 if (height < 0) { 1052 if (height < 0) {
1069 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0"); 1053 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0");
1070 return error::kNoError; 1054 return error::kNoError;
1071 } 1055 }
1072 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 1056 DoCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
1073 return error::kNoError; 1057 return error::kNoError;
1074 } 1058 }
1075 1059
1076 error::Error GLES2DecoderImpl::HandleCopyTexSubImage3D( 1060 error::Error GLES2DecoderImpl::HandleCopyTexSubImage3D(
1077 uint32_t immediate_data_size, 1061 uint32_t immediate_data_size,
1078 const void* cmd_data) { 1062 const volatile void* cmd_data) {
1079 if (!unsafe_es3_apis_enabled()) 1063 if (!unsafe_es3_apis_enabled())
1080 return error::kUnknownCommand; 1064 return error::kUnknownCommand;
1081 const gles2::cmds::CopyTexSubImage3D& c = 1065 const volatile gles2::cmds::CopyTexSubImage3D& c =
1082 *static_cast<const gles2::cmds::CopyTexSubImage3D*>(cmd_data); 1066 *static_cast<const volatile gles2::cmds::CopyTexSubImage3D*>(cmd_data);
1083 (void)c;
1084 error::Error error; 1067 error::Error error;
1085 error = WillAccessBoundFramebufferForRead(); 1068 error = WillAccessBoundFramebufferForRead();
1086 if (error != error::kNoError) 1069 if (error != error::kNoError)
1087 return error; 1070 return error;
1088 GLenum target = static_cast<GLenum>(c.target); 1071 GLenum target = static_cast<GLenum>(c.target);
1089 GLint level = static_cast<GLint>(c.level); 1072 GLint level = static_cast<GLint>(c.level);
1090 GLint xoffset = static_cast<GLint>(c.xoffset); 1073 GLint xoffset = static_cast<GLint>(c.xoffset);
1091 GLint yoffset = static_cast<GLint>(c.yoffset); 1074 GLint yoffset = static_cast<GLint>(c.yoffset);
1092 GLint zoffset = static_cast<GLint>(c.zoffset); 1075 GLint zoffset = static_cast<GLint>(c.zoffset);
1093 GLint x = static_cast<GLint>(c.x); 1076 GLint x = static_cast<GLint>(c.x);
(...skipping 10 matching lines...) Expand all
1104 } 1087 }
1105 if (height < 0) { 1088 if (height < 0) {
1106 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage3D", "height < 0"); 1089 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexSubImage3D", "height < 0");
1107 return error::kNoError; 1090 return error::kNoError;
1108 } 1091 }
1109 DoCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, 1092 DoCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width,
1110 height); 1093 height);
1111 return error::kNoError; 1094 return error::kNoError;
1112 } 1095 }
1113 1096
1114 error::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size, 1097 error::Error GLES2DecoderImpl::HandleCreateProgram(
1115 const void* cmd_data) { 1098 uint32_t immediate_data_size,
1116 const gles2::cmds::CreateProgram& c = 1099 const volatile void* cmd_data) {
1117 *static_cast<const gles2::cmds::CreateProgram*>(cmd_data); 1100 const volatile gles2::cmds::CreateProgram& c =
1118 (void)c; 1101 *static_cast<const volatile gles2::cmds::CreateProgram*>(cmd_data);
1119 uint32_t client_id = c.client_id; 1102 uint32_t client_id = c.client_id;
1120 if (GetProgram(client_id)) { 1103 if (GetProgram(client_id)) {
1121 return error::kInvalidArguments; 1104 return error::kInvalidArguments;
1122 } 1105 }
1123 GLuint service_id = glCreateProgram(); 1106 GLuint service_id = glCreateProgram();
1124 if (service_id) { 1107 if (service_id) {
1125 CreateProgram(client_id, service_id); 1108 CreateProgram(client_id, service_id);
1126 } 1109 }
1127 return error::kNoError; 1110 return error::kNoError;
1128 } 1111 }
1129 1112
1130 error::Error GLES2DecoderImpl::HandleCreateShader(uint32_t immediate_data_size, 1113 error::Error GLES2DecoderImpl::HandleCreateShader(
1131 const void* cmd_data) { 1114 uint32_t immediate_data_size,
1132 const gles2::cmds::CreateShader& c = 1115 const volatile void* cmd_data) {
1133 *static_cast<const gles2::cmds::CreateShader*>(cmd_data); 1116 const volatile gles2::cmds::CreateShader& c =
1134 (void)c; 1117 *static_cast<const volatile gles2::cmds::CreateShader*>(cmd_data);
1135 GLenum type = static_cast<GLenum>(c.type); 1118 GLenum type = static_cast<GLenum>(c.type);
1136 if (!validators_->shader_type.IsValid(type)) { 1119 if (!validators_->shader_type.IsValid(type)) {
1137 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type"); 1120 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type");
1138 return error::kNoError; 1121 return error::kNoError;
1139 } 1122 }
1140 uint32_t client_id = c.client_id; 1123 uint32_t client_id = c.client_id;
1141 if (GetShader(client_id)) { 1124 if (GetShader(client_id)) {
1142 return error::kInvalidArguments; 1125 return error::kInvalidArguments;
1143 } 1126 }
1144 GLuint service_id = glCreateShader(type); 1127 GLuint service_id = glCreateShader(type);
1145 if (service_id) { 1128 if (service_id) {
1146 CreateShader(client_id, service_id, type); 1129 CreateShader(client_id, service_id, type);
1147 } 1130 }
1148 return error::kNoError; 1131 return error::kNoError;
1149 } 1132 }
1150 1133
1151 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size, 1134 error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size,
1152 const void* cmd_data) { 1135 const volatile void* cmd_data) {
1153 const gles2::cmds::CullFace& c = 1136 const volatile gles2::cmds::CullFace& c =
1154 *static_cast<const gles2::cmds::CullFace*>(cmd_data); 1137 *static_cast<const volatile gles2::cmds::CullFace*>(cmd_data);
1155 (void)c;
1156 GLenum mode = static_cast<GLenum>(c.mode); 1138 GLenum mode = static_cast<GLenum>(c.mode);
1157 if (!validators_->face_type.IsValid(mode)) { 1139 if (!validators_->face_type.IsValid(mode)) {
1158 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode"); 1140 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode");
1159 return error::kNoError; 1141 return error::kNoError;
1160 } 1142 }
1161 if (state_.cull_mode != mode) { 1143 if (state_.cull_mode != mode) {
1162 state_.cull_mode = mode; 1144 state_.cull_mode = mode;
1163 glCullFace(mode); 1145 glCullFace(mode);
1164 } 1146 }
1165 return error::kNoError; 1147 return error::kNoError;
1166 } 1148 }
1167 1149
1168 error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate( 1150 error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate(
1169 uint32_t immediate_data_size, 1151 uint32_t immediate_data_size,
1170 const void* cmd_data) { 1152 const volatile void* cmd_data) {
1171 const gles2::cmds::DeleteBuffersImmediate& c = 1153 const volatile gles2::cmds::DeleteBuffersImmediate& c =
1172 *static_cast<const gles2::cmds::DeleteBuffersImmediate*>(cmd_data); 1154 *static_cast<const volatile gles2::cmds::DeleteBuffersImmediate*>(
1173 (void)c; 1155 cmd_data);
1174 GLsizei n = static_cast<GLsizei>(c.n); 1156 GLsizei n = static_cast<GLsizei>(c.n);
1175 uint32_t data_size; 1157 uint32_t data_size;
1176 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1158 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1177 return error::kOutOfBounds; 1159 return error::kOutOfBounds;
1178 } 1160 }
1179 const GLuint* buffers = 1161 volatile const GLuint* buffers = GetImmediateDataAs<volatile const GLuint*>(
1180 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1162 c, data_size, immediate_data_size);
1181 if (buffers == NULL) { 1163 if (buffers == NULL) {
1182 return error::kOutOfBounds; 1164 return error::kOutOfBounds;
1183 } 1165 }
1184 DeleteBuffersHelper(n, buffers); 1166 DeleteBuffersHelper(n, buffers);
1185 return error::kNoError; 1167 return error::kNoError;
1186 } 1168 }
1187 1169
1188 error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( 1170 error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate(
1189 uint32_t immediate_data_size, 1171 uint32_t immediate_data_size,
1190 const void* cmd_data) { 1172 const volatile void* cmd_data) {
1191 const gles2::cmds::DeleteFramebuffersImmediate& c = 1173 const volatile gles2::cmds::DeleteFramebuffersImmediate& c =
1192 *static_cast<const gles2::cmds::DeleteFramebuffersImmediate*>(cmd_data); 1174 *static_cast<const volatile gles2::cmds::DeleteFramebuffersImmediate*>(
1193 (void)c; 1175 cmd_data);
1194 GLsizei n = static_cast<GLsizei>(c.n); 1176 GLsizei n = static_cast<GLsizei>(c.n);
1195 uint32_t data_size; 1177 uint32_t data_size;
1196 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1178 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1197 return error::kOutOfBounds; 1179 return error::kOutOfBounds;
1198 } 1180 }
1199 const GLuint* framebuffers = 1181 volatile const GLuint* framebuffers =
1200 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1182 GetImmediateDataAs<volatile const GLuint*>(c, data_size,
1183 immediate_data_size);
1201 if (framebuffers == NULL) { 1184 if (framebuffers == NULL) {
1202 return error::kOutOfBounds; 1185 return error::kOutOfBounds;
1203 } 1186 }
1204 DeleteFramebuffersHelper(n, framebuffers); 1187 DeleteFramebuffersHelper(n, framebuffers);
1205 return error::kNoError; 1188 return error::kNoError;
1206 } 1189 }
1207 1190
1208 error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( 1191 error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate(
1209 uint32_t immediate_data_size, 1192 uint32_t immediate_data_size,
1210 const void* cmd_data) { 1193 const volatile void* cmd_data) {
1211 const gles2::cmds::DeleteRenderbuffersImmediate& c = 1194 const volatile gles2::cmds::DeleteRenderbuffersImmediate& c =
1212 *static_cast<const gles2::cmds::DeleteRenderbuffersImmediate*>(cmd_data); 1195 *static_cast<const volatile gles2::cmds::DeleteRenderbuffersImmediate*>(
1213 (void)c; 1196 cmd_data);
1214 GLsizei n = static_cast<GLsizei>(c.n); 1197 GLsizei n = static_cast<GLsizei>(c.n);
1215 uint32_t data_size; 1198 uint32_t data_size;
1216 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1199 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1217 return error::kOutOfBounds; 1200 return error::kOutOfBounds;
1218 } 1201 }
1219 const GLuint* renderbuffers = 1202 volatile const GLuint* renderbuffers =
1220 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1203 GetImmediateDataAs<volatile const GLuint*>(c, data_size,
1204 immediate_data_size);
1221 if (renderbuffers == NULL) { 1205 if (renderbuffers == NULL) {
1222 return error::kOutOfBounds; 1206 return error::kOutOfBounds;
1223 } 1207 }
1224 DeleteRenderbuffersHelper(n, renderbuffers); 1208 DeleteRenderbuffersHelper(n, renderbuffers);
1225 return error::kNoError; 1209 return error::kNoError;
1226 } 1210 }
1227 1211
1228 error::Error GLES2DecoderImpl::HandleDeleteSamplersImmediate( 1212 error::Error GLES2DecoderImpl::HandleDeleteSamplersImmediate(
1229 uint32_t immediate_data_size, 1213 uint32_t immediate_data_size,
1230 const void* cmd_data) { 1214 const volatile void* cmd_data) {
1231 if (!unsafe_es3_apis_enabled()) 1215 if (!unsafe_es3_apis_enabled())
1232 return error::kUnknownCommand; 1216 return error::kUnknownCommand;
1233 const gles2::cmds::DeleteSamplersImmediate& c = 1217 const volatile gles2::cmds::DeleteSamplersImmediate& c =
1234 *static_cast<const gles2::cmds::DeleteSamplersImmediate*>(cmd_data); 1218 *static_cast<const volatile gles2::cmds::DeleteSamplersImmediate*>(
1235 (void)c; 1219 cmd_data);
1236 GLsizei n = static_cast<GLsizei>(c.n); 1220 GLsizei n = static_cast<GLsizei>(c.n);
1237 uint32_t data_size; 1221 uint32_t data_size;
1238 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1222 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1239 return error::kOutOfBounds; 1223 return error::kOutOfBounds;
1240 } 1224 }
1241 const GLuint* samplers = 1225 volatile const GLuint* samplers = GetImmediateDataAs<volatile const GLuint*>(
1242 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1226 c, data_size, immediate_data_size);
1243 if (samplers == NULL) { 1227 if (samplers == NULL) {
1244 return error::kOutOfBounds; 1228 return error::kOutOfBounds;
1245 } 1229 }
1246 DeleteSamplersHelper(n, samplers); 1230 DeleteSamplersHelper(n, samplers);
1247 return error::kNoError; 1231 return error::kNoError;
1248 } 1232 }
1249 1233
1250 error::Error GLES2DecoderImpl::HandleDeleteSync(uint32_t immediate_data_size, 1234 error::Error GLES2DecoderImpl::HandleDeleteSync(uint32_t immediate_data_size,
1251 const void* cmd_data) { 1235 const volatile void* cmd_data) {
1252 if (!unsafe_es3_apis_enabled()) 1236 if (!unsafe_es3_apis_enabled())
1253 return error::kUnknownCommand; 1237 return error::kUnknownCommand;
1254 const gles2::cmds::DeleteSync& c = 1238 const volatile gles2::cmds::DeleteSync& c =
1255 *static_cast<const gles2::cmds::DeleteSync*>(cmd_data); 1239 *static_cast<const volatile gles2::cmds::DeleteSync*>(cmd_data);
1256 (void)c;
1257 GLuint sync = c.sync; 1240 GLuint sync = c.sync;
1258 DeleteSyncHelper(sync); 1241 DeleteSyncHelper(sync);
1259 return error::kNoError; 1242 return error::kNoError;
1260 } 1243 }
1261 1244
1262 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( 1245 error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate(
1263 uint32_t immediate_data_size, 1246 uint32_t immediate_data_size,
1264 const void* cmd_data) { 1247 const volatile void* cmd_data) {
1265 const gles2::cmds::DeleteTexturesImmediate& c = 1248 const volatile gles2::cmds::DeleteTexturesImmediate& c =
1266 *static_cast<const gles2::cmds::DeleteTexturesImmediate*>(cmd_data); 1249 *static_cast<const volatile gles2::cmds::DeleteTexturesImmediate*>(
1267 (void)c; 1250 cmd_data);
1268 GLsizei n = static_cast<GLsizei>(c.n); 1251 GLsizei n = static_cast<GLsizei>(c.n);
1269 uint32_t data_size; 1252 uint32_t data_size;
1270 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1253 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1271 return error::kOutOfBounds; 1254 return error::kOutOfBounds;
1272 } 1255 }
1273 const GLuint* textures = 1256 volatile const GLuint* textures = GetImmediateDataAs<volatile const GLuint*>(
1274 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1257 c, data_size, immediate_data_size);
1275 if (textures == NULL) { 1258 if (textures == NULL) {
1276 return error::kOutOfBounds; 1259 return error::kOutOfBounds;
1277 } 1260 }
1278 DeleteTexturesHelper(n, textures); 1261 DeleteTexturesHelper(n, textures);
1279 return error::kNoError; 1262 return error::kNoError;
1280 } 1263 }
1281 1264
1282 error::Error GLES2DecoderImpl::HandleDeleteTransformFeedbacksImmediate( 1265 error::Error GLES2DecoderImpl::HandleDeleteTransformFeedbacksImmediate(
1283 uint32_t immediate_data_size, 1266 uint32_t immediate_data_size,
1284 const void* cmd_data) { 1267 const volatile void* cmd_data) {
1285 if (!unsafe_es3_apis_enabled()) 1268 if (!unsafe_es3_apis_enabled())
1286 return error::kUnknownCommand; 1269 return error::kUnknownCommand;
1287 const gles2::cmds::DeleteTransformFeedbacksImmediate& c = 1270 const volatile gles2::cmds::DeleteTransformFeedbacksImmediate& c =
1288 *static_cast<const gles2::cmds::DeleteTransformFeedbacksImmediate*>( 1271 *static_cast<
1272 const volatile gles2::cmds::DeleteTransformFeedbacksImmediate*>(
1289 cmd_data); 1273 cmd_data);
1290 (void)c;
1291 GLsizei n = static_cast<GLsizei>(c.n); 1274 GLsizei n = static_cast<GLsizei>(c.n);
1292 uint32_t data_size; 1275 uint32_t data_size;
1293 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1276 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1294 return error::kOutOfBounds; 1277 return error::kOutOfBounds;
1295 } 1278 }
1296 const GLuint* ids = 1279 volatile const GLuint* ids = GetImmediateDataAs<volatile const GLuint*>(
1297 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 1280 c, data_size, immediate_data_size);
1298 if (ids == NULL) { 1281 if (ids == NULL) {
1299 return error::kOutOfBounds; 1282 return error::kOutOfBounds;
1300 } 1283 }
1301 DeleteTransformFeedbacksHelper(n, ids); 1284 DeleteTransformFeedbacksHelper(n, ids);
1302 return error::kNoError; 1285 return error::kNoError;
1303 } 1286 }
1304 1287
1305 error::Error GLES2DecoderImpl::HandleDepthFunc(uint32_t immediate_data_size, 1288 error::Error GLES2DecoderImpl::HandleDepthFunc(uint32_t immediate_data_size,
1306 const void* cmd_data) { 1289 const volatile void* cmd_data) {
1307 const gles2::cmds::DepthFunc& c = 1290 const volatile gles2::cmds::DepthFunc& c =
1308 *static_cast<const gles2::cmds::DepthFunc*>(cmd_data); 1291 *static_cast<const volatile gles2::cmds::DepthFunc*>(cmd_data);
1309 (void)c;
1310 GLenum func = static_cast<GLenum>(c.func); 1292 GLenum func = static_cast<GLenum>(c.func);
1311 if (!validators_->cmp_function.IsValid(func)) { 1293 if (!validators_->cmp_function.IsValid(func)) {
1312 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func"); 1294 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func");
1313 return error::kNoError; 1295 return error::kNoError;
1314 } 1296 }
1315 if (state_.depth_func != func) { 1297 if (state_.depth_func != func) {
1316 state_.depth_func = func; 1298 state_.depth_func = func;
1317 glDepthFunc(func); 1299 glDepthFunc(func);
1318 } 1300 }
1319 return error::kNoError; 1301 return error::kNoError;
1320 } 1302 }
1321 1303
1322 error::Error GLES2DecoderImpl::HandleDepthMask(uint32_t immediate_data_size, 1304 error::Error GLES2DecoderImpl::HandleDepthMask(uint32_t immediate_data_size,
1323 const void* cmd_data) { 1305 const volatile void* cmd_data) {
1324 const gles2::cmds::DepthMask& c = 1306 const volatile gles2::cmds::DepthMask& c =
1325 *static_cast<const gles2::cmds::DepthMask*>(cmd_data); 1307 *static_cast<const volatile gles2::cmds::DepthMask*>(cmd_data);
1326 (void)c;
1327 GLboolean flag = static_cast<GLboolean>(c.flag); 1308 GLboolean flag = static_cast<GLboolean>(c.flag);
1328 if (state_.depth_mask != flag) { 1309 if (state_.depth_mask != flag) {
1329 state_.depth_mask = flag; 1310 state_.depth_mask = flag;
1330 framebuffer_state_.clear_state_dirty = true; 1311 framebuffer_state_.clear_state_dirty = true;
1331 } 1312 }
1332 return error::kNoError; 1313 return error::kNoError;
1333 } 1314 }
1334 1315
1335 error::Error GLES2DecoderImpl::HandleDepthRangef(uint32_t immediate_data_size, 1316 error::Error GLES2DecoderImpl::HandleDepthRangef(
1336 const void* cmd_data) { 1317 uint32_t immediate_data_size,
1337 const gles2::cmds::DepthRangef& c = 1318 const volatile void* cmd_data) {
1338 *static_cast<const gles2::cmds::DepthRangef*>(cmd_data); 1319 const volatile gles2::cmds::DepthRangef& c =
1339 (void)c; 1320 *static_cast<const volatile gles2::cmds::DepthRangef*>(cmd_data);
1340 GLclampf zNear = static_cast<GLclampf>(c.zNear); 1321 GLclampf zNear = static_cast<GLclampf>(c.zNear);
1341 GLclampf zFar = static_cast<GLclampf>(c.zFar); 1322 GLclampf zFar = static_cast<GLclampf>(c.zFar);
1342 DoDepthRangef(zNear, zFar); 1323 DoDepthRangef(zNear, zFar);
1343 return error::kNoError; 1324 return error::kNoError;
1344 } 1325 }
1345 1326
1346 error::Error GLES2DecoderImpl::HandleDetachShader(uint32_t immediate_data_size, 1327 error::Error GLES2DecoderImpl::HandleDetachShader(
1347 const void* cmd_data) { 1328 uint32_t immediate_data_size,
1348 const gles2::cmds::DetachShader& c = 1329 const volatile void* cmd_data) {
1349 *static_cast<const gles2::cmds::DetachShader*>(cmd_data); 1330 const volatile gles2::cmds::DetachShader& c =
1350 (void)c; 1331 *static_cast<const volatile gles2::cmds::DetachShader*>(cmd_data);
1351 GLuint program = c.program; 1332 GLuint program = c.program;
1352 GLuint shader = c.shader; 1333 GLuint shader = c.shader;
1353 DoDetachShader(program, shader); 1334 DoDetachShader(program, shader);
1354 return error::kNoError; 1335 return error::kNoError;
1355 } 1336 }
1356 1337
1357 error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size, 1338 error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size,
1358 const void* cmd_data) { 1339 const volatile void* cmd_data) {
1359 const gles2::cmds::Disable& c = 1340 const volatile gles2::cmds::Disable& c =
1360 *static_cast<const gles2::cmds::Disable*>(cmd_data); 1341 *static_cast<const volatile gles2::cmds::Disable*>(cmd_data);
1361 (void)c;
1362 GLenum cap = static_cast<GLenum>(c.cap); 1342 GLenum cap = static_cast<GLenum>(c.cap);
1363 if (!validators_->capability.IsValid(cap)) { 1343 if (!validators_->capability.IsValid(cap)) {
1364 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap"); 1344 LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap");
1365 return error::kNoError; 1345 return error::kNoError;
1366 } 1346 }
1367 DoDisable(cap); 1347 DoDisable(cap);
1368 return error::kNoError; 1348 return error::kNoError;
1369 } 1349 }
1370 1350
1371 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray( 1351 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray(
1372 uint32_t immediate_data_size, 1352 uint32_t immediate_data_size,
1373 const void* cmd_data) { 1353 const volatile void* cmd_data) {
1374 const gles2::cmds::DisableVertexAttribArray& c = 1354 const volatile gles2::cmds::DisableVertexAttribArray& c =
1375 *static_cast<const gles2::cmds::DisableVertexAttribArray*>(cmd_data); 1355 *static_cast<const volatile gles2::cmds::DisableVertexAttribArray*>(
1376 (void)c; 1356 cmd_data);
1377 GLuint index = static_cast<GLuint>(c.index); 1357 GLuint index = static_cast<GLuint>(c.index);
1378 DoDisableVertexAttribArray(index); 1358 DoDisableVertexAttribArray(index);
1379 return error::kNoError; 1359 return error::kNoError;
1380 } 1360 }
1381 1361
1382 error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size, 1362 error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size,
1383 const void* cmd_data) { 1363 const volatile void* cmd_data) {
1384 const gles2::cmds::Enable& c = 1364 const volatile gles2::cmds::Enable& c =
1385 *static_cast<const gles2::cmds::Enable*>(cmd_data); 1365 *static_cast<const volatile gles2::cmds::Enable*>(cmd_data);
1386 (void)c;
1387 GLenum cap = static_cast<GLenum>(c.cap); 1366 GLenum cap = static_cast<GLenum>(c.cap);
1388 if (!validators_->capability.IsValid(cap)) { 1367 if (!validators_->capability.IsValid(cap)) {
1389 LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap"); 1368 LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap");
1390 return error::kNoError; 1369 return error::kNoError;
1391 } 1370 }
1392 DoEnable(cap); 1371 DoEnable(cap);
1393 return error::kNoError; 1372 return error::kNoError;
1394 } 1373 }
1395 1374
1396 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray( 1375 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray(
1397 uint32_t immediate_data_size, 1376 uint32_t immediate_data_size,
1398 const void* cmd_data) { 1377 const volatile void* cmd_data) {
1399 const gles2::cmds::EnableVertexAttribArray& c = 1378 const volatile gles2::cmds::EnableVertexAttribArray& c =
1400 *static_cast<const gles2::cmds::EnableVertexAttribArray*>(cmd_data); 1379 *static_cast<const volatile gles2::cmds::EnableVertexAttribArray*>(
1401 (void)c; 1380 cmd_data);
1402 GLuint index = static_cast<GLuint>(c.index); 1381 GLuint index = static_cast<GLuint>(c.index);
1403 DoEnableVertexAttribArray(index); 1382 DoEnableVertexAttribArray(index);
1404 return error::kNoError; 1383 return error::kNoError;
1405 } 1384 }
1406 1385
1407 error::Error GLES2DecoderImpl::HandleFenceSync(uint32_t immediate_data_size, 1386 error::Error GLES2DecoderImpl::HandleFenceSync(uint32_t immediate_data_size,
1408 const void* cmd_data) { 1387 const volatile void* cmd_data) {
1409 if (!unsafe_es3_apis_enabled()) 1388 if (!unsafe_es3_apis_enabled())
1410 return error::kUnknownCommand; 1389 return error::kUnknownCommand;
1411 const gles2::cmds::FenceSync& c = 1390 const volatile gles2::cmds::FenceSync& c =
1412 *static_cast<const gles2::cmds::FenceSync*>(cmd_data); 1391 *static_cast<const volatile gles2::cmds::FenceSync*>(cmd_data);
1413 (void)c;
1414 GLenum condition = static_cast<GLenum>(c.condition); 1392 GLenum condition = static_cast<GLenum>(c.condition);
1415 GLbitfield flags = static_cast<GLbitfield>(c.flags); 1393 GLbitfield flags = static_cast<GLbitfield>(c.flags);
1416 uint32_t client_id = c.client_id; 1394 uint32_t client_id = c.client_id;
1417 GLsync service_id = 0; 1395 GLsync service_id = 0;
1418 if (group_->GetSyncServiceId(client_id, &service_id)) { 1396 if (group_->GetSyncServiceId(client_id, &service_id)) {
1419 return error::kInvalidArguments; 1397 return error::kInvalidArguments;
1420 } 1398 }
1421 service_id = DoFenceSync(condition, flags); 1399 service_id = DoFenceSync(condition, flags);
1422 if (service_id) { 1400 if (service_id) {
1423 group_->AddSyncId(client_id, service_id); 1401 group_->AddSyncId(client_id, service_id);
1424 } 1402 }
1425 return error::kNoError; 1403 return error::kNoError;
1426 } 1404 }
1427 1405
1428 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size, 1406 error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size,
1429 const void* cmd_data) { 1407 const volatile void* cmd_data) {
1430 const gles2::cmds::Finish& c =
1431 *static_cast<const gles2::cmds::Finish*>(cmd_data);
1432 (void)c;
1433 error::Error error; 1408 error::Error error;
1434 error = WillAccessBoundFramebufferForRead(); 1409 error = WillAccessBoundFramebufferForRead();
1435 if (error != error::kNoError) 1410 if (error != error::kNoError)
1436 return error; 1411 return error;
1437 DoFinish(); 1412 DoFinish();
1438 return error::kNoError; 1413 return error::kNoError;
1439 } 1414 }
1440 1415
1441 error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size, 1416 error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size,
1442 const void* cmd_data) { 1417 const volatile void* cmd_data) {
1443 const gles2::cmds::Flush& c =
1444 *static_cast<const gles2::cmds::Flush*>(cmd_data);
1445 (void)c;
1446 DoFlush(); 1418 DoFlush();
1447 return error::kNoError; 1419 return error::kNoError;
1448 } 1420 }
1449 1421
1450 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( 1422 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer(
1451 uint32_t immediate_data_size, 1423 uint32_t immediate_data_size,
1452 const void* cmd_data) { 1424 const volatile void* cmd_data) {
1453 const gles2::cmds::FramebufferRenderbuffer& c = 1425 const volatile gles2::cmds::FramebufferRenderbuffer& c =
1454 *static_cast<const gles2::cmds::FramebufferRenderbuffer*>(cmd_data); 1426 *static_cast<const volatile gles2::cmds::FramebufferRenderbuffer*>(
1455 (void)c; 1427 cmd_data);
1456 GLenum target = static_cast<GLenum>(c.target); 1428 GLenum target = static_cast<GLenum>(c.target);
1457 GLenum attachment = static_cast<GLenum>(c.attachment); 1429 GLenum attachment = static_cast<GLenum>(c.attachment);
1458 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); 1430 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget);
1459 GLuint renderbuffer = c.renderbuffer; 1431 GLuint renderbuffer = c.renderbuffer;
1460 if (!validators_->framebuffer_target.IsValid(target)) { 1432 if (!validators_->framebuffer_target.IsValid(target)) {
1461 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", target, 1433 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", target,
1462 "target"); 1434 "target");
1463 return error::kNoError; 1435 return error::kNoError;
1464 } 1436 }
1465 if (!validators_->attachment.IsValid(attachment)) { 1437 if (!validators_->attachment.IsValid(attachment)) {
1466 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", attachment, 1438 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", attachment,
1467 "attachment"); 1439 "attachment");
1468 return error::kNoError; 1440 return error::kNoError;
1469 } 1441 }
1470 if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) { 1442 if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) {
1471 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", 1443 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer",
1472 renderbuffertarget, "renderbuffertarget"); 1444 renderbuffertarget, "renderbuffertarget");
1473 return error::kNoError; 1445 return error::kNoError;
1474 } 1446 }
1475 DoFramebufferRenderbuffer(target, attachment, renderbuffertarget, 1447 DoFramebufferRenderbuffer(target, attachment, renderbuffertarget,
1476 renderbuffer); 1448 renderbuffer);
1477 return error::kNoError; 1449 return error::kNoError;
1478 } 1450 }
1479 1451
1480 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( 1452 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D(
1481 uint32_t immediate_data_size, 1453 uint32_t immediate_data_size,
1482 const void* cmd_data) { 1454 const volatile void* cmd_data) {
1483 const gles2::cmds::FramebufferTexture2D& c = 1455 const volatile gles2::cmds::FramebufferTexture2D& c =
1484 *static_cast<const gles2::cmds::FramebufferTexture2D*>(cmd_data); 1456 *static_cast<const volatile gles2::cmds::FramebufferTexture2D*>(cmd_data);
1485 (void)c;
1486 GLenum target = static_cast<GLenum>(c.target); 1457 GLenum target = static_cast<GLenum>(c.target);
1487 GLenum attachment = static_cast<GLenum>(c.attachment); 1458 GLenum attachment = static_cast<GLenum>(c.attachment);
1488 GLenum textarget = static_cast<GLenum>(c.textarget); 1459 GLenum textarget = static_cast<GLenum>(c.textarget);
1489 GLuint texture = c.texture; 1460 GLuint texture = c.texture;
1490 GLint level = static_cast<GLint>(c.level); 1461 GLint level = static_cast<GLint>(c.level);
1491 if (!validators_->framebuffer_target.IsValid(target)) { 1462 if (!validators_->framebuffer_target.IsValid(target)) {
1492 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target"); 1463 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target");
1493 return error::kNoError; 1464 return error::kNoError;
1494 } 1465 }
1495 if (!validators_->attachment.IsValid(attachment)) { 1466 if (!validators_->attachment.IsValid(attachment)) {
1496 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", attachment, 1467 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", attachment,
1497 "attachment"); 1468 "attachment");
1498 return error::kNoError; 1469 return error::kNoError;
1499 } 1470 }
1500 if (!validators_->texture_target.IsValid(textarget)) { 1471 if (!validators_->texture_target.IsValid(textarget)) {
1501 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", textarget, 1472 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", textarget,
1502 "textarget"); 1473 "textarget");
1503 return error::kNoError; 1474 return error::kNoError;
1504 } 1475 }
1505 DoFramebufferTexture2D(target, attachment, textarget, texture, level); 1476 DoFramebufferTexture2D(target, attachment, textarget, texture, level);
1506 return error::kNoError; 1477 return error::kNoError;
1507 } 1478 }
1508 1479
1509 error::Error GLES2DecoderImpl::HandleFramebufferTextureLayer( 1480 error::Error GLES2DecoderImpl::HandleFramebufferTextureLayer(
1510 uint32_t immediate_data_size, 1481 uint32_t immediate_data_size,
1511 const void* cmd_data) { 1482 const volatile void* cmd_data) {
1512 if (!unsafe_es3_apis_enabled()) 1483 if (!unsafe_es3_apis_enabled())
1513 return error::kUnknownCommand; 1484 return error::kUnknownCommand;
1514 const gles2::cmds::FramebufferTextureLayer& c = 1485 const volatile gles2::cmds::FramebufferTextureLayer& c =
1515 *static_cast<const gles2::cmds::FramebufferTextureLayer*>(cmd_data); 1486 *static_cast<const volatile gles2::cmds::FramebufferTextureLayer*>(
1516 (void)c; 1487 cmd_data);
1517 GLenum target = static_cast<GLenum>(c.target); 1488 GLenum target = static_cast<GLenum>(c.target);
1518 GLenum attachment = static_cast<GLenum>(c.attachment); 1489 GLenum attachment = static_cast<GLenum>(c.attachment);
1519 GLuint texture = c.texture; 1490 GLuint texture = c.texture;
1520 GLint level = static_cast<GLint>(c.level); 1491 GLint level = static_cast<GLint>(c.level);
1521 GLint layer = static_cast<GLint>(c.layer); 1492 GLint layer = static_cast<GLint>(c.layer);
1522 if (!validators_->framebuffer_target.IsValid(target)) { 1493 if (!validators_->framebuffer_target.IsValid(target)) {
1523 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", target, 1494 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", target,
1524 "target"); 1495 "target");
1525 return error::kNoError; 1496 return error::kNoError;
1526 } 1497 }
1527 if (!validators_->attachment.IsValid(attachment)) { 1498 if (!validators_->attachment.IsValid(attachment)) {
1528 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", attachment, 1499 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTextureLayer", attachment,
1529 "attachment"); 1500 "attachment");
1530 return error::kNoError; 1501 return error::kNoError;
1531 } 1502 }
1532 DoFramebufferTextureLayer(target, attachment, texture, level, layer); 1503 DoFramebufferTextureLayer(target, attachment, texture, level, layer);
1533 return error::kNoError; 1504 return error::kNoError;
1534 } 1505 }
1535 1506
1536 error::Error GLES2DecoderImpl::HandleFrontFace(uint32_t immediate_data_size, 1507 error::Error GLES2DecoderImpl::HandleFrontFace(uint32_t immediate_data_size,
1537 const void* cmd_data) { 1508 const volatile void* cmd_data) {
1538 const gles2::cmds::FrontFace& c = 1509 const volatile gles2::cmds::FrontFace& c =
1539 *static_cast<const gles2::cmds::FrontFace*>(cmd_data); 1510 *static_cast<const volatile gles2::cmds::FrontFace*>(cmd_data);
1540 (void)c;
1541 GLenum mode = static_cast<GLenum>(c.mode); 1511 GLenum mode = static_cast<GLenum>(c.mode);
1542 if (!validators_->face_mode.IsValid(mode)) { 1512 if (!validators_->face_mode.IsValid(mode)) {
1543 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode"); 1513 LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode");
1544 return error::kNoError; 1514 return error::kNoError;
1545 } 1515 }
1546 if (state_.front_face != mode) { 1516 if (state_.front_face != mode) {
1547 state_.front_face = mode; 1517 state_.front_face = mode;
1548 glFrontFace(mode); 1518 glFrontFace(mode);
1549 } 1519 }
1550 return error::kNoError; 1520 return error::kNoError;
1551 } 1521 }
1552 1522
1553 error::Error GLES2DecoderImpl::HandleGenBuffersImmediate( 1523 error::Error GLES2DecoderImpl::HandleGenBuffersImmediate(
1554 uint32_t immediate_data_size, 1524 uint32_t immediate_data_size,
1555 const void* cmd_data) { 1525 const volatile void* cmd_data) {
1556 const gles2::cmds::GenBuffersImmediate& c = 1526 const volatile gles2::cmds::GenBuffersImmediate& c =
1557 *static_cast<const gles2::cmds::GenBuffersImmediate*>(cmd_data); 1527 *static_cast<const volatile gles2::cmds::GenBuffersImmediate*>(cmd_data);
1558 (void)c;
1559 GLsizei n = static_cast<GLsizei>(c.n); 1528 GLsizei n = static_cast<GLsizei>(c.n);
1560 uint32_t data_size; 1529 uint32_t data_size;
1561 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1530 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1562 return error::kOutOfBounds; 1531 return error::kOutOfBounds;
1563 } 1532 }
1564 GLuint* buffers = 1533 volatile GLuint* buffers =
1565 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1534 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1566 if (buffers == NULL) { 1535 if (buffers == NULL) {
1567 return error::kOutOfBounds; 1536 return error::kOutOfBounds;
1568 } 1537 }
1569 auto buffers_copy = base::MakeUnique<GLuint[]>(n); 1538 auto buffers_copy = base::MakeUnique<GLuint[]>(n);
1570 GLuint* buffers_safe = buffers_copy.get(); 1539 GLuint* buffers_safe = buffers_copy.get();
1571 std::copy(buffers, buffers + n, buffers_safe); 1540 std::copy(buffers, buffers + n, buffers_safe);
1572 if (!CheckUniqueAndNonNullIds(n, buffers_safe) || 1541 if (!CheckUniqueAndNonNullIds(n, buffers_safe) ||
1573 !GenBuffersHelper(n, buffers_safe)) { 1542 !GenBuffersHelper(n, buffers_safe)) {
1574 return error::kInvalidArguments; 1543 return error::kInvalidArguments;
1575 } 1544 }
1576 return error::kNoError; 1545 return error::kNoError;
1577 } 1546 }
1578 1547
1579 error::Error GLES2DecoderImpl::HandleGenerateMipmap( 1548 error::Error GLES2DecoderImpl::HandleGenerateMipmap(
1580 uint32_t immediate_data_size, 1549 uint32_t immediate_data_size,
1581 const void* cmd_data) { 1550 const volatile void* cmd_data) {
1582 const gles2::cmds::GenerateMipmap& c = 1551 const volatile gles2::cmds::GenerateMipmap& c =
1583 *static_cast<const gles2::cmds::GenerateMipmap*>(cmd_data); 1552 *static_cast<const volatile gles2::cmds::GenerateMipmap*>(cmd_data);
1584 (void)c;
1585 GLenum target = static_cast<GLenum>(c.target); 1553 GLenum target = static_cast<GLenum>(c.target);
1586 if (!validators_->texture_bind_target.IsValid(target)) { 1554 if (!validators_->texture_bind_target.IsValid(target)) {
1587 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target"); 1555 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target");
1588 return error::kNoError; 1556 return error::kNoError;
1589 } 1557 }
1590 DoGenerateMipmap(target); 1558 DoGenerateMipmap(target);
1591 return error::kNoError; 1559 return error::kNoError;
1592 } 1560 }
1593 1561
1594 error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate( 1562 error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate(
1595 uint32_t immediate_data_size, 1563 uint32_t immediate_data_size,
1596 const void* cmd_data) { 1564 const volatile void* cmd_data) {
1597 const gles2::cmds::GenFramebuffersImmediate& c = 1565 const volatile gles2::cmds::GenFramebuffersImmediate& c =
1598 *static_cast<const gles2::cmds::GenFramebuffersImmediate*>(cmd_data); 1566 *static_cast<const volatile gles2::cmds::GenFramebuffersImmediate*>(
1599 (void)c; 1567 cmd_data);
1600 GLsizei n = static_cast<GLsizei>(c.n); 1568 GLsizei n = static_cast<GLsizei>(c.n);
1601 uint32_t data_size; 1569 uint32_t data_size;
1602 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1570 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1603 return error::kOutOfBounds; 1571 return error::kOutOfBounds;
1604 } 1572 }
1605 GLuint* framebuffers = 1573 volatile GLuint* framebuffers =
1606 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1574 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1607 if (framebuffers == NULL) { 1575 if (framebuffers == NULL) {
1608 return error::kOutOfBounds; 1576 return error::kOutOfBounds;
1609 } 1577 }
1610 auto framebuffers_copy = base::MakeUnique<GLuint[]>(n); 1578 auto framebuffers_copy = base::MakeUnique<GLuint[]>(n);
1611 GLuint* framebuffers_safe = framebuffers_copy.get(); 1579 GLuint* framebuffers_safe = framebuffers_copy.get();
1612 std::copy(framebuffers, framebuffers + n, framebuffers_safe); 1580 std::copy(framebuffers, framebuffers + n, framebuffers_safe);
1613 if (!CheckUniqueAndNonNullIds(n, framebuffers_safe) || 1581 if (!CheckUniqueAndNonNullIds(n, framebuffers_safe) ||
1614 !GenFramebuffersHelper(n, framebuffers_safe)) { 1582 !GenFramebuffersHelper(n, framebuffers_safe)) {
1615 return error::kInvalidArguments; 1583 return error::kInvalidArguments;
1616 } 1584 }
1617 return error::kNoError; 1585 return error::kNoError;
1618 } 1586 }
1619 1587
1620 error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate( 1588 error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate(
1621 uint32_t immediate_data_size, 1589 uint32_t immediate_data_size,
1622 const void* cmd_data) { 1590 const volatile void* cmd_data) {
1623 const gles2::cmds::GenRenderbuffersImmediate& c = 1591 const volatile gles2::cmds::GenRenderbuffersImmediate& c =
1624 *static_cast<const gles2::cmds::GenRenderbuffersImmediate*>(cmd_data); 1592 *static_cast<const volatile gles2::cmds::GenRenderbuffersImmediate*>(
1625 (void)c; 1593 cmd_data);
1626 GLsizei n = static_cast<GLsizei>(c.n); 1594 GLsizei n = static_cast<GLsizei>(c.n);
1627 uint32_t data_size; 1595 uint32_t data_size;
1628 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1596 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1629 return error::kOutOfBounds; 1597 return error::kOutOfBounds;
1630 } 1598 }
1631 GLuint* renderbuffers = 1599 volatile GLuint* renderbuffers =
1632 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1600 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1633 if (renderbuffers == NULL) { 1601 if (renderbuffers == NULL) {
1634 return error::kOutOfBounds; 1602 return error::kOutOfBounds;
1635 } 1603 }
1636 auto renderbuffers_copy = base::MakeUnique<GLuint[]>(n); 1604 auto renderbuffers_copy = base::MakeUnique<GLuint[]>(n);
1637 GLuint* renderbuffers_safe = renderbuffers_copy.get(); 1605 GLuint* renderbuffers_safe = renderbuffers_copy.get();
1638 std::copy(renderbuffers, renderbuffers + n, renderbuffers_safe); 1606 std::copy(renderbuffers, renderbuffers + n, renderbuffers_safe);
1639 if (!CheckUniqueAndNonNullIds(n, renderbuffers_safe) || 1607 if (!CheckUniqueAndNonNullIds(n, renderbuffers_safe) ||
1640 !GenRenderbuffersHelper(n, renderbuffers_safe)) { 1608 !GenRenderbuffersHelper(n, renderbuffers_safe)) {
1641 return error::kInvalidArguments; 1609 return error::kInvalidArguments;
1642 } 1610 }
1643 return error::kNoError; 1611 return error::kNoError;
1644 } 1612 }
1645 1613
1646 error::Error GLES2DecoderImpl::HandleGenSamplersImmediate( 1614 error::Error GLES2DecoderImpl::HandleGenSamplersImmediate(
1647 uint32_t immediate_data_size, 1615 uint32_t immediate_data_size,
1648 const void* cmd_data) { 1616 const volatile void* cmd_data) {
1649 if (!unsafe_es3_apis_enabled()) 1617 if (!unsafe_es3_apis_enabled())
1650 return error::kUnknownCommand; 1618 return error::kUnknownCommand;
1651 const gles2::cmds::GenSamplersImmediate& c = 1619 const volatile gles2::cmds::GenSamplersImmediate& c =
1652 *static_cast<const gles2::cmds::GenSamplersImmediate*>(cmd_data); 1620 *static_cast<const volatile gles2::cmds::GenSamplersImmediate*>(cmd_data);
1653 (void)c;
1654 GLsizei n = static_cast<GLsizei>(c.n); 1621 GLsizei n = static_cast<GLsizei>(c.n);
1655 uint32_t data_size; 1622 uint32_t data_size;
1656 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1623 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1657 return error::kOutOfBounds; 1624 return error::kOutOfBounds;
1658 } 1625 }
1659 GLuint* samplers = 1626 volatile GLuint* samplers =
1660 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1627 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1661 if (samplers == NULL) { 1628 if (samplers == NULL) {
1662 return error::kOutOfBounds; 1629 return error::kOutOfBounds;
1663 } 1630 }
1664 auto samplers_copy = base::MakeUnique<GLuint[]>(n); 1631 auto samplers_copy = base::MakeUnique<GLuint[]>(n);
1665 GLuint* samplers_safe = samplers_copy.get(); 1632 GLuint* samplers_safe = samplers_copy.get();
1666 std::copy(samplers, samplers + n, samplers_safe); 1633 std::copy(samplers, samplers + n, samplers_safe);
1667 if (!CheckUniqueAndNonNullIds(n, samplers_safe) || 1634 if (!CheckUniqueAndNonNullIds(n, samplers_safe) ||
1668 !GenSamplersHelper(n, samplers_safe)) { 1635 !GenSamplersHelper(n, samplers_safe)) {
1669 return error::kInvalidArguments; 1636 return error::kInvalidArguments;
1670 } 1637 }
1671 return error::kNoError; 1638 return error::kNoError;
1672 } 1639 }
1673 1640
1674 error::Error GLES2DecoderImpl::HandleGenTexturesImmediate( 1641 error::Error GLES2DecoderImpl::HandleGenTexturesImmediate(
1675 uint32_t immediate_data_size, 1642 uint32_t immediate_data_size,
1676 const void* cmd_data) { 1643 const volatile void* cmd_data) {
1677 const gles2::cmds::GenTexturesImmediate& c = 1644 const volatile gles2::cmds::GenTexturesImmediate& c =
1678 *static_cast<const gles2::cmds::GenTexturesImmediate*>(cmd_data); 1645 *static_cast<const volatile gles2::cmds::GenTexturesImmediate*>(cmd_data);
1679 (void)c;
1680 GLsizei n = static_cast<GLsizei>(c.n); 1646 GLsizei n = static_cast<GLsizei>(c.n);
1681 uint32_t data_size; 1647 uint32_t data_size;
1682 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1648 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1683 return error::kOutOfBounds; 1649 return error::kOutOfBounds;
1684 } 1650 }
1685 GLuint* textures = 1651 volatile GLuint* textures =
1686 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1652 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1687 if (textures == NULL) { 1653 if (textures == NULL) {
1688 return error::kOutOfBounds; 1654 return error::kOutOfBounds;
1689 } 1655 }
1690 auto textures_copy = base::MakeUnique<GLuint[]>(n); 1656 auto textures_copy = base::MakeUnique<GLuint[]>(n);
1691 GLuint* textures_safe = textures_copy.get(); 1657 GLuint* textures_safe = textures_copy.get();
1692 std::copy(textures, textures + n, textures_safe); 1658 std::copy(textures, textures + n, textures_safe);
1693 if (!CheckUniqueAndNonNullIds(n, textures_safe) || 1659 if (!CheckUniqueAndNonNullIds(n, textures_safe) ||
1694 !GenTexturesHelper(n, textures_safe)) { 1660 !GenTexturesHelper(n, textures_safe)) {
1695 return error::kInvalidArguments; 1661 return error::kInvalidArguments;
1696 } 1662 }
1697 return error::kNoError; 1663 return error::kNoError;
1698 } 1664 }
1699 1665
1700 error::Error GLES2DecoderImpl::HandleGenTransformFeedbacksImmediate( 1666 error::Error GLES2DecoderImpl::HandleGenTransformFeedbacksImmediate(
1701 uint32_t immediate_data_size, 1667 uint32_t immediate_data_size,
1702 const void* cmd_data) { 1668 const volatile void* cmd_data) {
1703 if (!unsafe_es3_apis_enabled()) 1669 if (!unsafe_es3_apis_enabled())
1704 return error::kUnknownCommand; 1670 return error::kUnknownCommand;
1705 const gles2::cmds::GenTransformFeedbacksImmediate& c = 1671 const volatile gles2::cmds::GenTransformFeedbacksImmediate& c =
1706 *static_cast<const gles2::cmds::GenTransformFeedbacksImmediate*>( 1672 *static_cast<const volatile gles2::cmds::GenTransformFeedbacksImmediate*>(
1707 cmd_data); 1673 cmd_data);
1708 (void)c;
1709 GLsizei n = static_cast<GLsizei>(c.n); 1674 GLsizei n = static_cast<GLsizei>(c.n);
1710 uint32_t data_size; 1675 uint32_t data_size;
1711 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 1676 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
1712 return error::kOutOfBounds; 1677 return error::kOutOfBounds;
1713 } 1678 }
1714 GLuint* ids = GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 1679 volatile GLuint* ids =
1680 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
1715 if (ids == NULL) { 1681 if (ids == NULL) {
1716 return error::kOutOfBounds; 1682 return error::kOutOfBounds;
1717 } 1683 }
1718 auto ids_copy = base::MakeUnique<GLuint[]>(n); 1684 auto ids_copy = base::MakeUnique<GLuint[]>(n);
1719 GLuint* ids_safe = ids_copy.get(); 1685 GLuint* ids_safe = ids_copy.get();
1720 std::copy(ids, ids + n, ids_safe); 1686 std::copy(ids, ids + n, ids_safe);
1721 if (!CheckUniqueAndNonNullIds(n, ids_safe) || 1687 if (!CheckUniqueAndNonNullIds(n, ids_safe) ||
1722 !GenTransformFeedbacksHelper(n, ids_safe)) { 1688 !GenTransformFeedbacksHelper(n, ids_safe)) {
1723 return error::kInvalidArguments; 1689 return error::kInvalidArguments;
1724 } 1690 }
1725 return error::kNoError; 1691 return error::kNoError;
1726 } 1692 }
1727 1693
1728 error::Error GLES2DecoderImpl::HandleGetBooleanv(uint32_t immediate_data_size, 1694 error::Error GLES2DecoderImpl::HandleGetBooleanv(
1729 const void* cmd_data) { 1695 uint32_t immediate_data_size,
1730 const gles2::cmds::GetBooleanv& c = 1696 const volatile void* cmd_data) {
1731 *static_cast<const gles2::cmds::GetBooleanv*>(cmd_data); 1697 const volatile gles2::cmds::GetBooleanv& c =
1732 (void)c; 1698 *static_cast<const volatile gles2::cmds::GetBooleanv*>(cmd_data);
1733 GLenum pname = static_cast<GLenum>(c.pname); 1699 GLenum pname = static_cast<GLenum>(c.pname);
1734 typedef cmds::GetBooleanv::Result Result; 1700 typedef cmds::GetBooleanv::Result Result;
1735 GLsizei num_values = 0; 1701 GLsizei num_values = 0;
1736 GetNumValuesReturnedForGLGet(pname, &num_values); 1702 GetNumValuesReturnedForGLGet(pname, &num_values);
1737 Result* result = GetSharedMemoryAs<Result*>( 1703 Result* result = GetSharedMemoryAs<Result*>(
1738 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1704 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1739 GLboolean* params = result ? result->GetData() : NULL; 1705 GLboolean* params = result ? result->GetData() : NULL;
1740 if (!validators_->g_l_state.IsValid(pname)) { 1706 if (!validators_->g_l_state.IsValid(pname)) {
1741 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBooleanv", pname, "pname"); 1707 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBooleanv", pname, "pname");
1742 return error::kNoError; 1708 return error::kNoError;
1743 } 1709 }
1744 if (params == NULL) { 1710 if (params == NULL) {
1745 return error::kOutOfBounds; 1711 return error::kOutOfBounds;
1746 } 1712 }
1747 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetBooleanv"); 1713 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetBooleanv");
1748 // Check that the client initialized the result. 1714 // Check that the client initialized the result.
1749 if (result->size != 0) { 1715 if (result->size != 0) {
1750 return error::kInvalidArguments; 1716 return error::kInvalidArguments;
1751 } 1717 }
1752 DoGetBooleanv(pname, params); 1718 DoGetBooleanv(pname, params);
1753 GLenum error = LOCAL_PEEK_GL_ERROR("GetBooleanv"); 1719 GLenum error = LOCAL_PEEK_GL_ERROR("GetBooleanv");
1754 if (error == GL_NO_ERROR) { 1720 if (error == GL_NO_ERROR) {
1755 result->SetNumResults(num_values); 1721 result->SetNumResults(num_values);
1756 } 1722 }
1757 return error::kNoError; 1723 return error::kNoError;
1758 } 1724 }
1759 1725
1760 error::Error GLES2DecoderImpl::HandleGetBufferParameteri64v( 1726 error::Error GLES2DecoderImpl::HandleGetBufferParameteri64v(
1761 uint32_t immediate_data_size, 1727 uint32_t immediate_data_size,
1762 const void* cmd_data) { 1728 const volatile void* cmd_data) {
1763 if (!unsafe_es3_apis_enabled()) 1729 if (!unsafe_es3_apis_enabled())
1764 return error::kUnknownCommand; 1730 return error::kUnknownCommand;
1765 const gles2::cmds::GetBufferParameteri64v& c = 1731 const volatile gles2::cmds::GetBufferParameteri64v& c =
1766 *static_cast<const gles2::cmds::GetBufferParameteri64v*>(cmd_data); 1732 *static_cast<const volatile gles2::cmds::GetBufferParameteri64v*>(
1767 (void)c; 1733 cmd_data);
1768 GLenum target = static_cast<GLenum>(c.target); 1734 GLenum target = static_cast<GLenum>(c.target);
1769 GLenum pname = static_cast<GLenum>(c.pname); 1735 GLenum pname = static_cast<GLenum>(c.pname);
1770 typedef cmds::GetBufferParameteri64v::Result Result; 1736 typedef cmds::GetBufferParameteri64v::Result Result;
1771 GLsizei num_values = 0; 1737 GLsizei num_values = 0;
1772 GetNumValuesReturnedForGLGet(pname, &num_values); 1738 GetNumValuesReturnedForGLGet(pname, &num_values);
1773 Result* result = GetSharedMemoryAs<Result*>( 1739 Result* result = GetSharedMemoryAs<Result*>(
1774 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1740 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1775 GLint64* params = result ? result->GetData() : NULL; 1741 GLint64* params = result ? result->GetData() : NULL;
1776 if (!validators_->buffer_target.IsValid(target)) { 1742 if (!validators_->buffer_target.IsValid(target)) {
1777 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteri64v", target, 1743 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteri64v", target,
(...skipping 10 matching lines...) Expand all
1788 // Check that the client initialized the result. 1754 // Check that the client initialized the result.
1789 if (result->size != 0) { 1755 if (result->size != 0) {
1790 return error::kInvalidArguments; 1756 return error::kInvalidArguments;
1791 } 1757 }
1792 DoGetBufferParameteri64v(target, pname, params); 1758 DoGetBufferParameteri64v(target, pname, params);
1793 result->SetNumResults(num_values); 1759 result->SetNumResults(num_values);
1794 return error::kNoError; 1760 return error::kNoError;
1795 } 1761 }
1796 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( 1762 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv(
1797 uint32_t immediate_data_size, 1763 uint32_t immediate_data_size,
1798 const void* cmd_data) { 1764 const volatile void* cmd_data) {
1799 const gles2::cmds::GetBufferParameteriv& c = 1765 const volatile gles2::cmds::GetBufferParameteriv& c =
1800 *static_cast<const gles2::cmds::GetBufferParameteriv*>(cmd_data); 1766 *static_cast<const volatile gles2::cmds::GetBufferParameteriv*>(cmd_data);
1801 (void)c;
1802 GLenum target = static_cast<GLenum>(c.target); 1767 GLenum target = static_cast<GLenum>(c.target);
1803 GLenum pname = static_cast<GLenum>(c.pname); 1768 GLenum pname = static_cast<GLenum>(c.pname);
1804 typedef cmds::GetBufferParameteriv::Result Result; 1769 typedef cmds::GetBufferParameteriv::Result Result;
1805 GLsizei num_values = 0; 1770 GLsizei num_values = 0;
1806 GetNumValuesReturnedForGLGet(pname, &num_values); 1771 GetNumValuesReturnedForGLGet(pname, &num_values);
1807 Result* result = GetSharedMemoryAs<Result*>( 1772 Result* result = GetSharedMemoryAs<Result*>(
1808 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1773 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1809 GLint* params = result ? result->GetData() : NULL; 1774 GLint* params = result ? result->GetData() : NULL;
1810 if (!validators_->buffer_target.IsValid(target)) { 1775 if (!validators_->buffer_target.IsValid(target)) {
1811 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target"); 1776 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target");
1812 return error::kNoError; 1777 return error::kNoError;
1813 } 1778 }
1814 if (!validators_->buffer_parameter.IsValid(pname)) { 1779 if (!validators_->buffer_parameter.IsValid(pname)) {
1815 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", pname, "pname"); 1780 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", pname, "pname");
1816 return error::kNoError; 1781 return error::kNoError;
1817 } 1782 }
1818 if (params == NULL) { 1783 if (params == NULL) {
1819 return error::kOutOfBounds; 1784 return error::kOutOfBounds;
1820 } 1785 }
1821 // Check that the client initialized the result. 1786 // Check that the client initialized the result.
1822 if (result->size != 0) { 1787 if (result->size != 0) {
1823 return error::kInvalidArguments; 1788 return error::kInvalidArguments;
1824 } 1789 }
1825 DoGetBufferParameteriv(target, pname, params); 1790 DoGetBufferParameteriv(target, pname, params);
1826 result->SetNumResults(num_values); 1791 result->SetNumResults(num_values);
1827 return error::kNoError; 1792 return error::kNoError;
1828 } 1793 }
1829 error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size, 1794 error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size,
1830 const void* cmd_data) { 1795 const volatile void* cmd_data) {
1831 const gles2::cmds::GetError& c = 1796 const volatile gles2::cmds::GetError& c =
1832 *static_cast<const gles2::cmds::GetError*>(cmd_data); 1797 *static_cast<const volatile gles2::cmds::GetError*>(cmd_data);
1833 (void)c;
1834 typedef cmds::GetError::Result Result; 1798 typedef cmds::GetError::Result Result;
1835 Result* result_dst = GetSharedMemoryAs<Result*>( 1799 Result* result_dst = GetSharedMemoryAs<Result*>(
1836 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 1800 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
1837 if (!result_dst) { 1801 if (!result_dst) {
1838 return error::kOutOfBounds; 1802 return error::kOutOfBounds;
1839 } 1803 }
1840 *result_dst = GetErrorState()->GetGLError(); 1804 *result_dst = GetErrorState()->GetGLError();
1841 return error::kNoError; 1805 return error::kNoError;
1842 } 1806 }
1843 1807
1844 error::Error GLES2DecoderImpl::HandleGetFloatv(uint32_t immediate_data_size, 1808 error::Error GLES2DecoderImpl::HandleGetFloatv(uint32_t immediate_data_size,
1845 const void* cmd_data) { 1809 const volatile void* cmd_data) {
1846 const gles2::cmds::GetFloatv& c = 1810 const volatile gles2::cmds::GetFloatv& c =
1847 *static_cast<const gles2::cmds::GetFloatv*>(cmd_data); 1811 *static_cast<const volatile gles2::cmds::GetFloatv*>(cmd_data);
1848 (void)c;
1849 GLenum pname = static_cast<GLenum>(c.pname); 1812 GLenum pname = static_cast<GLenum>(c.pname);
1850 typedef cmds::GetFloatv::Result Result; 1813 typedef cmds::GetFloatv::Result Result;
1851 GLsizei num_values = 0; 1814 GLsizei num_values = 0;
1852 GetNumValuesReturnedForGLGet(pname, &num_values); 1815 GetNumValuesReturnedForGLGet(pname, &num_values);
1853 Result* result = GetSharedMemoryAs<Result*>( 1816 Result* result = GetSharedMemoryAs<Result*>(
1854 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1817 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1855 GLfloat* params = result ? result->GetData() : NULL; 1818 GLfloat* params = result ? result->GetData() : NULL;
1856 if (!validators_->g_l_state.IsValid(pname)) { 1819 if (!validators_->g_l_state.IsValid(pname)) {
1857 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFloatv", pname, "pname"); 1820 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFloatv", pname, "pname");
1858 return error::kNoError; 1821 return error::kNoError;
1859 } 1822 }
1860 if (params == NULL) { 1823 if (params == NULL) {
1861 return error::kOutOfBounds; 1824 return error::kOutOfBounds;
1862 } 1825 }
1863 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFloatv"); 1826 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetFloatv");
1864 // Check that the client initialized the result. 1827 // Check that the client initialized the result.
1865 if (result->size != 0) { 1828 if (result->size != 0) {
1866 return error::kInvalidArguments; 1829 return error::kInvalidArguments;
1867 } 1830 }
1868 DoGetFloatv(pname, params); 1831 DoGetFloatv(pname, params);
1869 GLenum error = LOCAL_PEEK_GL_ERROR("GetFloatv"); 1832 GLenum error = LOCAL_PEEK_GL_ERROR("GetFloatv");
1870 if (error == GL_NO_ERROR) { 1833 if (error == GL_NO_ERROR) {
1871 result->SetNumResults(num_values); 1834 result->SetNumResults(num_values);
1872 } 1835 }
1873 return error::kNoError; 1836 return error::kNoError;
1874 } 1837 }
1875 1838
1876 error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( 1839 error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv(
1877 uint32_t immediate_data_size, 1840 uint32_t immediate_data_size,
1878 const void* cmd_data) { 1841 const volatile void* cmd_data) {
1879 const gles2::cmds::GetFramebufferAttachmentParameteriv& c = 1842 const volatile gles2::cmds::GetFramebufferAttachmentParameteriv& c =
1880 *static_cast<const gles2::cmds::GetFramebufferAttachmentParameteriv*>( 1843 *static_cast<
1844 const volatile gles2::cmds::GetFramebufferAttachmentParameteriv*>(
1881 cmd_data); 1845 cmd_data);
1882 (void)c;
1883 GLenum target = static_cast<GLenum>(c.target); 1846 GLenum target = static_cast<GLenum>(c.target);
1884 GLenum attachment = static_cast<GLenum>(c.attachment); 1847 GLenum attachment = static_cast<GLenum>(c.attachment);
1885 GLenum pname = static_cast<GLenum>(c.pname); 1848 GLenum pname = static_cast<GLenum>(c.pname);
1886 typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; 1849 typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
1887 GLsizei num_values = 0; 1850 GLsizei num_values = 0;
1888 GetNumValuesReturnedForGLGet(pname, &num_values); 1851 GetNumValuesReturnedForGLGet(pname, &num_values);
1889 Result* result = GetSharedMemoryAs<Result*>( 1852 Result* result = GetSharedMemoryAs<Result*>(
1890 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1853 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1891 GLint* params = result ? result->GetData() : NULL; 1854 GLint* params = result ? result->GetData() : NULL;
1892 if (!validators_->framebuffer_target.IsValid(target)) { 1855 if (!validators_->framebuffer_target.IsValid(target)) {
(...skipping 20 matching lines...) Expand all
1913 return error::kInvalidArguments; 1876 return error::kInvalidArguments;
1914 } 1877 }
1915 DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params); 1878 DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
1916 GLenum error = LOCAL_PEEK_GL_ERROR("GetFramebufferAttachmentParameteriv"); 1879 GLenum error = LOCAL_PEEK_GL_ERROR("GetFramebufferAttachmentParameteriv");
1917 if (error == GL_NO_ERROR) { 1880 if (error == GL_NO_ERROR) {
1918 result->SetNumResults(num_values); 1881 result->SetNumResults(num_values);
1919 } 1882 }
1920 return error::kNoError; 1883 return error::kNoError;
1921 } 1884 }
1922 1885
1923 error::Error GLES2DecoderImpl::HandleGetInteger64v(uint32_t immediate_data_size, 1886 error::Error GLES2DecoderImpl::HandleGetInteger64v(
1924 const void* cmd_data) { 1887 uint32_t immediate_data_size,
1888 const volatile void* cmd_data) {
1925 if (!unsafe_es3_apis_enabled()) 1889 if (!unsafe_es3_apis_enabled())
1926 return error::kUnknownCommand; 1890 return error::kUnknownCommand;
1927 const gles2::cmds::GetInteger64v& c = 1891 const volatile gles2::cmds::GetInteger64v& c =
1928 *static_cast<const gles2::cmds::GetInteger64v*>(cmd_data); 1892 *static_cast<const volatile gles2::cmds::GetInteger64v*>(cmd_data);
1929 (void)c;
1930 GLenum pname = static_cast<GLenum>(c.pname); 1893 GLenum pname = static_cast<GLenum>(c.pname);
1931 typedef cmds::GetInteger64v::Result Result; 1894 typedef cmds::GetInteger64v::Result Result;
1932 GLsizei num_values = 0; 1895 GLsizei num_values = 0;
1933 GetNumValuesReturnedForGLGet(pname, &num_values); 1896 GetNumValuesReturnedForGLGet(pname, &num_values);
1934 Result* result = GetSharedMemoryAs<Result*>( 1897 Result* result = GetSharedMemoryAs<Result*>(
1935 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1898 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1936 GLint64* params = result ? result->GetData() : NULL; 1899 GLint64* params = result ? result->GetData() : NULL;
1937 if (!validators_->g_l_state.IsValid(pname)) { 1900 if (!validators_->g_l_state.IsValid(pname)) {
1938 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64v", pname, "pname"); 1901 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64v", pname, "pname");
1939 return error::kNoError; 1902 return error::kNoError;
1940 } 1903 }
1941 if (params == NULL) { 1904 if (params == NULL) {
1942 return error::kOutOfBounds; 1905 return error::kOutOfBounds;
1943 } 1906 }
1944 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetInteger64v"); 1907 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetInteger64v");
1945 // Check that the client initialized the result. 1908 // Check that the client initialized the result.
1946 if (result->size != 0) { 1909 if (result->size != 0) {
1947 return error::kInvalidArguments; 1910 return error::kInvalidArguments;
1948 } 1911 }
1949 DoGetInteger64v(pname, params); 1912 DoGetInteger64v(pname, params);
1950 GLenum error = LOCAL_PEEK_GL_ERROR("GetInteger64v"); 1913 GLenum error = LOCAL_PEEK_GL_ERROR("GetInteger64v");
1951 if (error == GL_NO_ERROR) { 1914 if (error == GL_NO_ERROR) {
1952 result->SetNumResults(num_values); 1915 result->SetNumResults(num_values);
1953 } 1916 }
1954 return error::kNoError; 1917 return error::kNoError;
1955 } 1918 }
1956 1919
1957 error::Error GLES2DecoderImpl::HandleGetIntegeri_v(uint32_t immediate_data_size, 1920 error::Error GLES2DecoderImpl::HandleGetIntegeri_v(
1958 const void* cmd_data) { 1921 uint32_t immediate_data_size,
1922 const volatile void* cmd_data) {
1959 if (!unsafe_es3_apis_enabled()) 1923 if (!unsafe_es3_apis_enabled())
1960 return error::kUnknownCommand; 1924 return error::kUnknownCommand;
1961 const gles2::cmds::GetIntegeri_v& c = 1925 const volatile gles2::cmds::GetIntegeri_v& c =
1962 *static_cast<const gles2::cmds::GetIntegeri_v*>(cmd_data); 1926 *static_cast<const volatile gles2::cmds::GetIntegeri_v*>(cmd_data);
1963 (void)c;
1964 GLenum pname = static_cast<GLenum>(c.pname); 1927 GLenum pname = static_cast<GLenum>(c.pname);
1965 GLuint index = static_cast<GLuint>(c.index); 1928 GLuint index = static_cast<GLuint>(c.index);
1966 typedef cmds::GetIntegeri_v::Result Result; 1929 typedef cmds::GetIntegeri_v::Result Result;
1967 GLsizei num_values = 0; 1930 GLsizei num_values = 0;
1968 GetNumValuesReturnedForGLGet(pname, &num_values); 1931 GetNumValuesReturnedForGLGet(pname, &num_values);
1969 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, 1932 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset,
1970 Result::ComputeSize(num_values)); 1933 Result::ComputeSize(num_values));
1971 GLint* data = result ? result->GetData() : NULL; 1934 GLint* data = result ? result->GetData() : NULL;
1972 if (!validators_->indexed_g_l_state.IsValid(pname)) { 1935 if (!validators_->indexed_g_l_state.IsValid(pname)) {
1973 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegeri_v", pname, "pname"); 1936 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegeri_v", pname, "pname");
1974 return error::kNoError; 1937 return error::kNoError;
1975 } 1938 }
1976 if (data == NULL) { 1939 if (data == NULL) {
1977 return error::kOutOfBounds; 1940 return error::kOutOfBounds;
1978 } 1941 }
1979 // Check that the client initialized the result. 1942 // Check that the client initialized the result.
1980 if (result->size != 0) { 1943 if (result->size != 0) {
1981 return error::kInvalidArguments; 1944 return error::kInvalidArguments;
1982 } 1945 }
1983 DoGetIntegeri_v(pname, index, data); 1946 DoGetIntegeri_v(pname, index, data);
1984 result->SetNumResults(num_values); 1947 result->SetNumResults(num_values);
1985 return error::kNoError; 1948 return error::kNoError;
1986 } 1949 }
1987 error::Error GLES2DecoderImpl::HandleGetInteger64i_v( 1950 error::Error GLES2DecoderImpl::HandleGetInteger64i_v(
1988 uint32_t immediate_data_size, 1951 uint32_t immediate_data_size,
1989 const void* cmd_data) { 1952 const volatile void* cmd_data) {
1990 if (!unsafe_es3_apis_enabled()) 1953 if (!unsafe_es3_apis_enabled())
1991 return error::kUnknownCommand; 1954 return error::kUnknownCommand;
1992 const gles2::cmds::GetInteger64i_v& c = 1955 const volatile gles2::cmds::GetInteger64i_v& c =
1993 *static_cast<const gles2::cmds::GetInteger64i_v*>(cmd_data); 1956 *static_cast<const volatile gles2::cmds::GetInteger64i_v*>(cmd_data);
1994 (void)c;
1995 GLenum pname = static_cast<GLenum>(c.pname); 1957 GLenum pname = static_cast<GLenum>(c.pname);
1996 GLuint index = static_cast<GLuint>(c.index); 1958 GLuint index = static_cast<GLuint>(c.index);
1997 typedef cmds::GetInteger64i_v::Result Result; 1959 typedef cmds::GetInteger64i_v::Result Result;
1998 GLsizei num_values = 0; 1960 GLsizei num_values = 0;
1999 GetNumValuesReturnedForGLGet(pname, &num_values); 1961 GetNumValuesReturnedForGLGet(pname, &num_values);
2000 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset, 1962 Result* result = GetSharedMemoryAs<Result*>(c.data_shm_id, c.data_shm_offset,
2001 Result::ComputeSize(num_values)); 1963 Result::ComputeSize(num_values));
2002 GLint64* data = result ? result->GetData() : NULL; 1964 GLint64* data = result ? result->GetData() : NULL;
2003 if (!validators_->indexed_g_l_state.IsValid(pname)) { 1965 if (!validators_->indexed_g_l_state.IsValid(pname)) {
2004 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64i_v", pname, "pname"); 1966 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInteger64i_v", pname, "pname");
2005 return error::kNoError; 1967 return error::kNoError;
2006 } 1968 }
2007 if (data == NULL) { 1969 if (data == NULL) {
2008 return error::kOutOfBounds; 1970 return error::kOutOfBounds;
2009 } 1971 }
2010 // Check that the client initialized the result. 1972 // Check that the client initialized the result.
2011 if (result->size != 0) { 1973 if (result->size != 0) {
2012 return error::kInvalidArguments; 1974 return error::kInvalidArguments;
2013 } 1975 }
2014 DoGetInteger64i_v(pname, index, data); 1976 DoGetInteger64i_v(pname, index, data);
2015 result->SetNumResults(num_values); 1977 result->SetNumResults(num_values);
2016 return error::kNoError; 1978 return error::kNoError;
2017 } 1979 }
2018 error::Error GLES2DecoderImpl::HandleGetIntegerv(uint32_t immediate_data_size, 1980 error::Error GLES2DecoderImpl::HandleGetIntegerv(
2019 const void* cmd_data) { 1981 uint32_t immediate_data_size,
2020 const gles2::cmds::GetIntegerv& c = 1982 const volatile void* cmd_data) {
2021 *static_cast<const gles2::cmds::GetIntegerv*>(cmd_data); 1983 const volatile gles2::cmds::GetIntegerv& c =
2022 (void)c; 1984 *static_cast<const volatile gles2::cmds::GetIntegerv*>(cmd_data);
2023 GLenum pname = static_cast<GLenum>(c.pname); 1985 GLenum pname = static_cast<GLenum>(c.pname);
2024 typedef cmds::GetIntegerv::Result Result; 1986 typedef cmds::GetIntegerv::Result Result;
2025 GLsizei num_values = 0; 1987 GLsizei num_values = 0;
2026 GetNumValuesReturnedForGLGet(pname, &num_values); 1988 GetNumValuesReturnedForGLGet(pname, &num_values);
2027 Result* result = GetSharedMemoryAs<Result*>( 1989 Result* result = GetSharedMemoryAs<Result*>(
2028 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1990 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2029 GLint* params = result ? result->GetData() : NULL; 1991 GLint* params = result ? result->GetData() : NULL;
2030 if (!validators_->g_l_state.IsValid(pname)) { 1992 if (!validators_->g_l_state.IsValid(pname)) {
2031 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname"); 1993 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname");
2032 return error::kNoError; 1994 return error::kNoError;
2033 } 1995 }
2034 if (params == NULL) { 1996 if (params == NULL) {
2035 return error::kOutOfBounds; 1997 return error::kOutOfBounds;
2036 } 1998 }
2037 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv"); 1999 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv");
2038 // Check that the client initialized the result. 2000 // Check that the client initialized the result.
2039 if (result->size != 0) { 2001 if (result->size != 0) {
2040 return error::kInvalidArguments; 2002 return error::kInvalidArguments;
2041 } 2003 }
2042 DoGetIntegerv(pname, params); 2004 DoGetIntegerv(pname, params);
2043 GLenum error = LOCAL_PEEK_GL_ERROR("GetIntegerv"); 2005 GLenum error = LOCAL_PEEK_GL_ERROR("GetIntegerv");
2044 if (error == GL_NO_ERROR) { 2006 if (error == GL_NO_ERROR) {
2045 result->SetNumResults(num_values); 2007 result->SetNumResults(num_values);
2046 } 2008 }
2047 return error::kNoError; 2009 return error::kNoError;
2048 } 2010 }
2049 2011
2050 error::Error GLES2DecoderImpl::HandleGetProgramiv(uint32_t immediate_data_size, 2012 error::Error GLES2DecoderImpl::HandleGetProgramiv(
2051 const void* cmd_data) { 2013 uint32_t immediate_data_size,
2052 const gles2::cmds::GetProgramiv& c = 2014 const volatile void* cmd_data) {
2053 *static_cast<const gles2::cmds::GetProgramiv*>(cmd_data); 2015 const volatile gles2::cmds::GetProgramiv& c =
2054 (void)c; 2016 *static_cast<const volatile gles2::cmds::GetProgramiv*>(cmd_data);
2055 GLuint program = c.program; 2017 GLuint program = c.program;
2056 GLenum pname = static_cast<GLenum>(c.pname); 2018 GLenum pname = static_cast<GLenum>(c.pname);
2057 typedef cmds::GetProgramiv::Result Result; 2019 typedef cmds::GetProgramiv::Result Result;
2058 GLsizei num_values = 0; 2020 GLsizei num_values = 0;
2059 GetNumValuesReturnedForGLGet(pname, &num_values); 2021 GetNumValuesReturnedForGLGet(pname, &num_values);
2060 Result* result = GetSharedMemoryAs<Result*>( 2022 Result* result = GetSharedMemoryAs<Result*>(
2061 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2023 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2062 GLint* params = result ? result->GetData() : NULL; 2024 GLint* params = result ? result->GetData() : NULL;
2063 if (!validators_->program_parameter.IsValid(pname)) { 2025 if (!validators_->program_parameter.IsValid(pname)) {
2064 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetProgramiv", pname, "pname"); 2026 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetProgramiv", pname, "pname");
(...skipping 10 matching lines...) Expand all
2075 DoGetProgramiv(program, pname, params); 2037 DoGetProgramiv(program, pname, params);
2076 GLenum error = LOCAL_PEEK_GL_ERROR("GetProgramiv"); 2038 GLenum error = LOCAL_PEEK_GL_ERROR("GetProgramiv");
2077 if (error == GL_NO_ERROR) { 2039 if (error == GL_NO_ERROR) {
2078 result->SetNumResults(num_values); 2040 result->SetNumResults(num_values);
2079 } 2041 }
2080 return error::kNoError; 2042 return error::kNoError;
2081 } 2043 }
2082 2044
2083 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( 2045 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv(
2084 uint32_t immediate_data_size, 2046 uint32_t immediate_data_size,
2085 const void* cmd_data) { 2047 const volatile void* cmd_data) {
2086 const gles2::cmds::GetRenderbufferParameteriv& c = 2048 const volatile gles2::cmds::GetRenderbufferParameteriv& c =
2087 *static_cast<const gles2::cmds::GetRenderbufferParameteriv*>(cmd_data); 2049 *static_cast<const volatile gles2::cmds::GetRenderbufferParameteriv*>(
2088 (void)c; 2050 cmd_data);
2089 GLenum target = static_cast<GLenum>(c.target); 2051 GLenum target = static_cast<GLenum>(c.target);
2090 GLenum pname = static_cast<GLenum>(c.pname); 2052 GLenum pname = static_cast<GLenum>(c.pname);
2091 typedef cmds::GetRenderbufferParameteriv::Result Result; 2053 typedef cmds::GetRenderbufferParameteriv::Result Result;
2092 GLsizei num_values = 0; 2054 GLsizei num_values = 0;
2093 GetNumValuesReturnedForGLGet(pname, &num_values); 2055 GetNumValuesReturnedForGLGet(pname, &num_values);
2094 Result* result = GetSharedMemoryAs<Result*>( 2056 Result* result = GetSharedMemoryAs<Result*>(
2095 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2057 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2096 GLint* params = result ? result->GetData() : NULL; 2058 GLint* params = result ? result->GetData() : NULL;
2097 if (!validators_->render_buffer_target.IsValid(target)) { 2059 if (!validators_->render_buffer_target.IsValid(target)) {
2098 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", target, 2060 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", target,
(...skipping 16 matching lines...) Expand all
2115 DoGetRenderbufferParameteriv(target, pname, params); 2077 DoGetRenderbufferParameteriv(target, pname, params);
2116 GLenum error = LOCAL_PEEK_GL_ERROR("GetRenderbufferParameteriv"); 2078 GLenum error = LOCAL_PEEK_GL_ERROR("GetRenderbufferParameteriv");
2117 if (error == GL_NO_ERROR) { 2079 if (error == GL_NO_ERROR) {
2118 result->SetNumResults(num_values); 2080 result->SetNumResults(num_values);
2119 } 2081 }
2120 return error::kNoError; 2082 return error::kNoError;
2121 } 2083 }
2122 2084
2123 error::Error GLES2DecoderImpl::HandleGetSamplerParameterfv( 2085 error::Error GLES2DecoderImpl::HandleGetSamplerParameterfv(
2124 uint32_t immediate_data_size, 2086 uint32_t immediate_data_size,
2125 const void* cmd_data) { 2087 const volatile void* cmd_data) {
2126 if (!unsafe_es3_apis_enabled()) 2088 if (!unsafe_es3_apis_enabled())
2127 return error::kUnknownCommand; 2089 return error::kUnknownCommand;
2128 const gles2::cmds::GetSamplerParameterfv& c = 2090 const volatile gles2::cmds::GetSamplerParameterfv& c =
2129 *static_cast<const gles2::cmds::GetSamplerParameterfv*>(cmd_data); 2091 *static_cast<const volatile gles2::cmds::GetSamplerParameterfv*>(
2130 (void)c; 2092 cmd_data);
2131 GLuint sampler = c.sampler; 2093 GLuint sampler = c.sampler;
2132 GLenum pname = static_cast<GLenum>(c.pname); 2094 GLenum pname = static_cast<GLenum>(c.pname);
2133 typedef cmds::GetSamplerParameterfv::Result Result; 2095 typedef cmds::GetSamplerParameterfv::Result Result;
2134 GLsizei num_values = 0; 2096 GLsizei num_values = 0;
2135 GetNumValuesReturnedForGLGet(pname, &num_values); 2097 GetNumValuesReturnedForGLGet(pname, &num_values);
2136 Result* result = GetSharedMemoryAs<Result*>( 2098 Result* result = GetSharedMemoryAs<Result*>(
2137 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2099 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2138 GLfloat* params = result ? result->GetData() : NULL; 2100 GLfloat* params = result ? result->GetData() : NULL;
2139 if (!validators_->sampler_parameter.IsValid(pname)) { 2101 if (!validators_->sampler_parameter.IsValid(pname)) {
2140 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameterfv", pname, "pname"); 2102 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameterfv", pname, "pname");
(...skipping 10 matching lines...) Expand all
2151 DoGetSamplerParameterfv(sampler, pname, params); 2113 DoGetSamplerParameterfv(sampler, pname, params);
2152 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameterfv"); 2114 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameterfv");
2153 if (error == GL_NO_ERROR) { 2115 if (error == GL_NO_ERROR) {
2154 result->SetNumResults(num_values); 2116 result->SetNumResults(num_values);
2155 } 2117 }
2156 return error::kNoError; 2118 return error::kNoError;
2157 } 2119 }
2158 2120
2159 error::Error GLES2DecoderImpl::HandleGetSamplerParameteriv( 2121 error::Error GLES2DecoderImpl::HandleGetSamplerParameteriv(
2160 uint32_t immediate_data_size, 2122 uint32_t immediate_data_size,
2161 const void* cmd_data) { 2123 const volatile void* cmd_data) {
2162 if (!unsafe_es3_apis_enabled()) 2124 if (!unsafe_es3_apis_enabled())
2163 return error::kUnknownCommand; 2125 return error::kUnknownCommand;
2164 const gles2::cmds::GetSamplerParameteriv& c = 2126 const volatile gles2::cmds::GetSamplerParameteriv& c =
2165 *static_cast<const gles2::cmds::GetSamplerParameteriv*>(cmd_data); 2127 *static_cast<const volatile gles2::cmds::GetSamplerParameteriv*>(
2166 (void)c; 2128 cmd_data);
2167 GLuint sampler = c.sampler; 2129 GLuint sampler = c.sampler;
2168 GLenum pname = static_cast<GLenum>(c.pname); 2130 GLenum pname = static_cast<GLenum>(c.pname);
2169 typedef cmds::GetSamplerParameteriv::Result Result; 2131 typedef cmds::GetSamplerParameteriv::Result Result;
2170 GLsizei num_values = 0; 2132 GLsizei num_values = 0;
2171 GetNumValuesReturnedForGLGet(pname, &num_values); 2133 GetNumValuesReturnedForGLGet(pname, &num_values);
2172 Result* result = GetSharedMemoryAs<Result*>( 2134 Result* result = GetSharedMemoryAs<Result*>(
2173 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2135 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2174 GLint* params = result ? result->GetData() : NULL; 2136 GLint* params = result ? result->GetData() : NULL;
2175 if (!validators_->sampler_parameter.IsValid(pname)) { 2137 if (!validators_->sampler_parameter.IsValid(pname)) {
2176 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameteriv", pname, "pname"); 2138 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSamplerParameteriv", pname, "pname");
2177 return error::kNoError; 2139 return error::kNoError;
2178 } 2140 }
2179 if (params == NULL) { 2141 if (params == NULL) {
2180 return error::kOutOfBounds; 2142 return error::kOutOfBounds;
2181 } 2143 }
2182 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetSamplerParameteriv"); 2144 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetSamplerParameteriv");
2183 // Check that the client initialized the result. 2145 // Check that the client initialized the result.
2184 if (result->size != 0) { 2146 if (result->size != 0) {
2185 return error::kInvalidArguments; 2147 return error::kInvalidArguments;
2186 } 2148 }
2187 DoGetSamplerParameteriv(sampler, pname, params); 2149 DoGetSamplerParameteriv(sampler, pname, params);
2188 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameteriv"); 2150 GLenum error = LOCAL_PEEK_GL_ERROR("GetSamplerParameteriv");
2189 if (error == GL_NO_ERROR) { 2151 if (error == GL_NO_ERROR) {
2190 result->SetNumResults(num_values); 2152 result->SetNumResults(num_values);
2191 } 2153 }
2192 return error::kNoError; 2154 return error::kNoError;
2193 } 2155 }
2194 2156
2195 error::Error GLES2DecoderImpl::HandleGetShaderiv(uint32_t immediate_data_size, 2157 error::Error GLES2DecoderImpl::HandleGetShaderiv(
2196 const void* cmd_data) { 2158 uint32_t immediate_data_size,
2197 const gles2::cmds::GetShaderiv& c = 2159 const volatile void* cmd_data) {
2198 *static_cast<const gles2::cmds::GetShaderiv*>(cmd_data); 2160 const volatile gles2::cmds::GetShaderiv& c =
2199 (void)c; 2161 *static_cast<const volatile gles2::cmds::GetShaderiv*>(cmd_data);
2200 GLuint shader = c.shader; 2162 GLuint shader = c.shader;
2201 GLenum pname = static_cast<GLenum>(c.pname); 2163 GLenum pname = static_cast<GLenum>(c.pname);
2202 typedef cmds::GetShaderiv::Result Result; 2164 typedef cmds::GetShaderiv::Result Result;
2203 GLsizei num_values = 0; 2165 GLsizei num_values = 0;
2204 GetNumValuesReturnedForGLGet(pname, &num_values); 2166 GetNumValuesReturnedForGLGet(pname, &num_values);
2205 Result* result = GetSharedMemoryAs<Result*>( 2167 Result* result = GetSharedMemoryAs<Result*>(
2206 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2168 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2207 GLint* params = result ? result->GetData() : NULL; 2169 GLint* params = result ? result->GetData() : NULL;
2208 if (!validators_->shader_parameter.IsValid(pname)) { 2170 if (!validators_->shader_parameter.IsValid(pname)) {
2209 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetShaderiv", pname, "pname"); 2171 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetShaderiv", pname, "pname");
2210 return error::kNoError; 2172 return error::kNoError;
2211 } 2173 }
2212 if (params == NULL) { 2174 if (params == NULL) {
2213 return error::kOutOfBounds; 2175 return error::kOutOfBounds;
2214 } 2176 }
2215 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetShaderiv"); 2177 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetShaderiv");
2216 // Check that the client initialized the result. 2178 // Check that the client initialized the result.
2217 if (result->size != 0) { 2179 if (result->size != 0) {
2218 return error::kInvalidArguments; 2180 return error::kInvalidArguments;
2219 } 2181 }
2220 DoGetShaderiv(shader, pname, params); 2182 DoGetShaderiv(shader, pname, params);
2221 GLenum error = LOCAL_PEEK_GL_ERROR("GetShaderiv"); 2183 GLenum error = LOCAL_PEEK_GL_ERROR("GetShaderiv");
2222 if (error == GL_NO_ERROR) { 2184 if (error == GL_NO_ERROR) {
2223 result->SetNumResults(num_values); 2185 result->SetNumResults(num_values);
2224 } 2186 }
2225 return error::kNoError; 2187 return error::kNoError;
2226 } 2188 }
2227 2189
2228 error::Error GLES2DecoderImpl::HandleGetSynciv(uint32_t immediate_data_size, 2190 error::Error GLES2DecoderImpl::HandleGetSynciv(uint32_t immediate_data_size,
2229 const void* cmd_data) { 2191 const volatile void* cmd_data) {
2230 if (!unsafe_es3_apis_enabled()) 2192 if (!unsafe_es3_apis_enabled())
2231 return error::kUnknownCommand; 2193 return error::kUnknownCommand;
2232 const gles2::cmds::GetSynciv& c = 2194 const volatile gles2::cmds::GetSynciv& c =
2233 *static_cast<const gles2::cmds::GetSynciv*>(cmd_data); 2195 *static_cast<const volatile gles2::cmds::GetSynciv*>(cmd_data);
2234 (void)c;
2235 GLuint sync = static_cast<GLuint>(c.sync); 2196 GLuint sync = static_cast<GLuint>(c.sync);
2236 GLenum pname = static_cast<GLenum>(c.pname); 2197 GLenum pname = static_cast<GLenum>(c.pname);
2237 typedef cmds::GetSynciv::Result Result; 2198 typedef cmds::GetSynciv::Result Result;
2238 GLsizei num_values = 0; 2199 GLsizei num_values = 0;
2239 GetNumValuesReturnedForGLGet(pname, &num_values); 2200 GetNumValuesReturnedForGLGet(pname, &num_values);
2240 Result* result = GetSharedMemoryAs<Result*>( 2201 Result* result = GetSharedMemoryAs<Result*>(
2241 c.values_shm_id, c.values_shm_offset, Result::ComputeSize(num_values)); 2202 c.values_shm_id, c.values_shm_offset, Result::ComputeSize(num_values));
2242 GLint* values = result ? result->GetData() : NULL; 2203 GLint* values = result ? result->GetData() : NULL;
2243 if (!validators_->sync_parameter.IsValid(pname)) { 2204 if (!validators_->sync_parameter.IsValid(pname)) {
2244 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSynciv", pname, "pname"); 2205 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetSynciv", pname, "pname");
(...skipping 15 matching lines...) Expand all
2260 glGetSynciv(service_sync, pname, num_values, nullptr, values); 2221 glGetSynciv(service_sync, pname, num_values, nullptr, values);
2261 GLenum error = LOCAL_PEEK_GL_ERROR("GetSynciv"); 2222 GLenum error = LOCAL_PEEK_GL_ERROR("GetSynciv");
2262 if (error == GL_NO_ERROR) { 2223 if (error == GL_NO_ERROR) {
2263 result->SetNumResults(num_values); 2224 result->SetNumResults(num_values);
2264 } 2225 }
2265 return error::kNoError; 2226 return error::kNoError;
2266 } 2227 }
2267 2228
2268 error::Error GLES2DecoderImpl::HandleGetTexParameterfv( 2229 error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
2269 uint32_t immediate_data_size, 2230 uint32_t immediate_data_size,
2270 const void* cmd_data) { 2231 const volatile void* cmd_data) {
2271 const gles2::cmds::GetTexParameterfv& c = 2232 const volatile gles2::cmds::GetTexParameterfv& c =
2272 *static_cast<const gles2::cmds::GetTexParameterfv*>(cmd_data); 2233 *static_cast<const volatile gles2::cmds::GetTexParameterfv*>(cmd_data);
2273 (void)c;
2274 GLenum target = static_cast<GLenum>(c.target); 2234 GLenum target = static_cast<GLenum>(c.target);
2275 GLenum pname = static_cast<GLenum>(c.pname); 2235 GLenum pname = static_cast<GLenum>(c.pname);
2276 typedef cmds::GetTexParameterfv::Result Result; 2236 typedef cmds::GetTexParameterfv::Result Result;
2277 GLsizei num_values = 0; 2237 GLsizei num_values = 0;
2278 GetNumValuesReturnedForGLGet(pname, &num_values); 2238 GetNumValuesReturnedForGLGet(pname, &num_values);
2279 Result* result = GetSharedMemoryAs<Result*>( 2239 Result* result = GetSharedMemoryAs<Result*>(
2280 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2240 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2281 GLfloat* params = result ? result->GetData() : NULL; 2241 GLfloat* params = result ? result->GetData() : NULL;
2282 if (!validators_->get_tex_param_target.IsValid(target)) { 2242 if (!validators_->get_tex_param_target.IsValid(target)) {
2283 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", target, "target"); 2243 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameterfv", target, "target");
(...skipping 14 matching lines...) Expand all
2298 DoGetTexParameterfv(target, pname, params); 2258 DoGetTexParameterfv(target, pname, params);
2299 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameterfv"); 2259 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameterfv");
2300 if (error == GL_NO_ERROR) { 2260 if (error == GL_NO_ERROR) {
2301 result->SetNumResults(num_values); 2261 result->SetNumResults(num_values);
2302 } 2262 }
2303 return error::kNoError; 2263 return error::kNoError;
2304 } 2264 }
2305 2265
2306 error::Error GLES2DecoderImpl::HandleGetTexParameteriv( 2266 error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
2307 uint32_t immediate_data_size, 2267 uint32_t immediate_data_size,
2308 const void* cmd_data) { 2268 const volatile void* cmd_data) {
2309 const gles2::cmds::GetTexParameteriv& c = 2269 const volatile gles2::cmds::GetTexParameteriv& c =
2310 *static_cast<const gles2::cmds::GetTexParameteriv*>(cmd_data); 2270 *static_cast<const volatile gles2::cmds::GetTexParameteriv*>(cmd_data);
2311 (void)c;
2312 GLenum target = static_cast<GLenum>(c.target); 2271 GLenum target = static_cast<GLenum>(c.target);
2313 GLenum pname = static_cast<GLenum>(c.pname); 2272 GLenum pname = static_cast<GLenum>(c.pname);
2314 typedef cmds::GetTexParameteriv::Result Result; 2273 typedef cmds::GetTexParameteriv::Result Result;
2315 GLsizei num_values = 0; 2274 GLsizei num_values = 0;
2316 GetNumValuesReturnedForGLGet(pname, &num_values); 2275 GetNumValuesReturnedForGLGet(pname, &num_values);
2317 Result* result = GetSharedMemoryAs<Result*>( 2276 Result* result = GetSharedMemoryAs<Result*>(
2318 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2277 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2319 GLint* params = result ? result->GetData() : NULL; 2278 GLint* params = result ? result->GetData() : NULL;
2320 if (!validators_->get_tex_param_target.IsValid(target)) { 2279 if (!validators_->get_tex_param_target.IsValid(target)) {
2321 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", target, "target"); 2280 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetTexParameteriv", target, "target");
(...skipping 14 matching lines...) Expand all
2336 DoGetTexParameteriv(target, pname, params); 2295 DoGetTexParameteriv(target, pname, params);
2337 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameteriv"); 2296 GLenum error = LOCAL_PEEK_GL_ERROR("GetTexParameteriv");
2338 if (error == GL_NO_ERROR) { 2297 if (error == GL_NO_ERROR) {
2339 result->SetNumResults(num_values); 2298 result->SetNumResults(num_values);
2340 } 2299 }
2341 return error::kNoError; 2300 return error::kNoError;
2342 } 2301 }
2343 2302
2344 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( 2303 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv(
2345 uint32_t immediate_data_size, 2304 uint32_t immediate_data_size,
2346 const void* cmd_data) { 2305 const volatile void* cmd_data) {
2347 const gles2::cmds::GetVertexAttribfv& c = 2306 const volatile gles2::cmds::GetVertexAttribfv& c =
2348 *static_cast<const gles2::cmds::GetVertexAttribfv*>(cmd_data); 2307 *static_cast<const volatile gles2::cmds::GetVertexAttribfv*>(cmd_data);
2349 (void)c;
2350 GLuint index = static_cast<GLuint>(c.index); 2308 GLuint index = static_cast<GLuint>(c.index);
2351 GLenum pname = static_cast<GLenum>(c.pname); 2309 GLenum pname = static_cast<GLenum>(c.pname);
2352 typedef cmds::GetVertexAttribfv::Result Result; 2310 typedef cmds::GetVertexAttribfv::Result Result;
2353 GLsizei num_values = 0; 2311 GLsizei num_values = 0;
2354 GetNumValuesReturnedForGLGet(pname, &num_values); 2312 GetNumValuesReturnedForGLGet(pname, &num_values);
2355 Result* result = GetSharedMemoryAs<Result*>( 2313 Result* result = GetSharedMemoryAs<Result*>(
2356 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2314 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2357 GLfloat* params = result ? result->GetData() : NULL; 2315 GLfloat* params = result ? result->GetData() : NULL;
2358 if (!validators_->vertex_attribute.IsValid(pname)) { 2316 if (!validators_->vertex_attribute.IsValid(pname)) {
2359 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribfv", pname, "pname"); 2317 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribfv", pname, "pname");
(...skipping 10 matching lines...) Expand all
2370 DoGetVertexAttribfv(index, pname, params); 2328 DoGetVertexAttribfv(index, pname, params);
2371 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribfv"); 2329 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribfv");
2372 if (error == GL_NO_ERROR) { 2330 if (error == GL_NO_ERROR) {
2373 result->SetNumResults(num_values); 2331 result->SetNumResults(num_values);
2374 } 2332 }
2375 return error::kNoError; 2333 return error::kNoError;
2376 } 2334 }
2377 2335
2378 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( 2336 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv(
2379 uint32_t immediate_data_size, 2337 uint32_t immediate_data_size,
2380 const void* cmd_data) { 2338 const volatile void* cmd_data) {
2381 const gles2::cmds::GetVertexAttribiv& c = 2339 const volatile gles2::cmds::GetVertexAttribiv& c =
2382 *static_cast<const gles2::cmds::GetVertexAttribiv*>(cmd_data); 2340 *static_cast<const volatile gles2::cmds::GetVertexAttribiv*>(cmd_data);
2383 (void)c;
2384 GLuint index = static_cast<GLuint>(c.index); 2341 GLuint index = static_cast<GLuint>(c.index);
2385 GLenum pname = static_cast<GLenum>(c.pname); 2342 GLenum pname = static_cast<GLenum>(c.pname);
2386 typedef cmds::GetVertexAttribiv::Result Result; 2343 typedef cmds::GetVertexAttribiv::Result Result;
2387 GLsizei num_values = 0; 2344 GLsizei num_values = 0;
2388 GetNumValuesReturnedForGLGet(pname, &num_values); 2345 GetNumValuesReturnedForGLGet(pname, &num_values);
2389 Result* result = GetSharedMemoryAs<Result*>( 2346 Result* result = GetSharedMemoryAs<Result*>(
2390 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2347 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2391 GLint* params = result ? result->GetData() : NULL; 2348 GLint* params = result ? result->GetData() : NULL;
2392 if (!validators_->vertex_attribute.IsValid(pname)) { 2349 if (!validators_->vertex_attribute.IsValid(pname)) {
2393 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribiv", pname, "pname"); 2350 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribiv", pname, "pname");
(...skipping 10 matching lines...) Expand all
2404 DoGetVertexAttribiv(index, pname, params); 2361 DoGetVertexAttribiv(index, pname, params);
2405 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribiv"); 2362 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribiv");
2406 if (error == GL_NO_ERROR) { 2363 if (error == GL_NO_ERROR) {
2407 result->SetNumResults(num_values); 2364 result->SetNumResults(num_values);
2408 } 2365 }
2409 return error::kNoError; 2366 return error::kNoError;
2410 } 2367 }
2411 2368
2412 error::Error GLES2DecoderImpl::HandleGetVertexAttribIiv( 2369 error::Error GLES2DecoderImpl::HandleGetVertexAttribIiv(
2413 uint32_t immediate_data_size, 2370 uint32_t immediate_data_size,
2414 const void* cmd_data) { 2371 const volatile void* cmd_data) {
2415 if (!unsafe_es3_apis_enabled()) 2372 if (!unsafe_es3_apis_enabled())
2416 return error::kUnknownCommand; 2373 return error::kUnknownCommand;
2417 const gles2::cmds::GetVertexAttribIiv& c = 2374 const volatile gles2::cmds::GetVertexAttribIiv& c =
2418 *static_cast<const gles2::cmds::GetVertexAttribIiv*>(cmd_data); 2375 *static_cast<const volatile gles2::cmds::GetVertexAttribIiv*>(cmd_data);
2419 (void)c;
2420 GLuint index = static_cast<GLuint>(c.index); 2376 GLuint index = static_cast<GLuint>(c.index);
2421 GLenum pname = static_cast<GLenum>(c.pname); 2377 GLenum pname = static_cast<GLenum>(c.pname);
2422 typedef cmds::GetVertexAttribIiv::Result Result; 2378 typedef cmds::GetVertexAttribIiv::Result Result;
2423 GLsizei num_values = 0; 2379 GLsizei num_values = 0;
2424 GetNumValuesReturnedForGLGet(pname, &num_values); 2380 GetNumValuesReturnedForGLGet(pname, &num_values);
2425 Result* result = GetSharedMemoryAs<Result*>( 2381 Result* result = GetSharedMemoryAs<Result*>(
2426 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2382 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2427 GLint* params = result ? result->GetData() : NULL; 2383 GLint* params = result ? result->GetData() : NULL;
2428 if (!validators_->vertex_attribute.IsValid(pname)) { 2384 if (!validators_->vertex_attribute.IsValid(pname)) {
2429 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIiv", pname, "pname"); 2385 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIiv", pname, "pname");
(...skipping 10 matching lines...) Expand all
2440 DoGetVertexAttribIiv(index, pname, params); 2396 DoGetVertexAttribIiv(index, pname, params);
2441 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIiv"); 2397 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIiv");
2442 if (error == GL_NO_ERROR) { 2398 if (error == GL_NO_ERROR) {
2443 result->SetNumResults(num_values); 2399 result->SetNumResults(num_values);
2444 } 2400 }
2445 return error::kNoError; 2401 return error::kNoError;
2446 } 2402 }
2447 2403
2448 error::Error GLES2DecoderImpl::HandleGetVertexAttribIuiv( 2404 error::Error GLES2DecoderImpl::HandleGetVertexAttribIuiv(
2449 uint32_t immediate_data_size, 2405 uint32_t immediate_data_size,
2450 const void* cmd_data) { 2406 const volatile void* cmd_data) {
2451 if (!unsafe_es3_apis_enabled()) 2407 if (!unsafe_es3_apis_enabled())
2452 return error::kUnknownCommand; 2408 return error::kUnknownCommand;
2453 const gles2::cmds::GetVertexAttribIuiv& c = 2409 const volatile gles2::cmds::GetVertexAttribIuiv& c =
2454 *static_cast<const gles2::cmds::GetVertexAttribIuiv*>(cmd_data); 2410 *static_cast<const volatile gles2::cmds::GetVertexAttribIuiv*>(cmd_data);
2455 (void)c;
2456 GLuint index = static_cast<GLuint>(c.index); 2411 GLuint index = static_cast<GLuint>(c.index);
2457 GLenum pname = static_cast<GLenum>(c.pname); 2412 GLenum pname = static_cast<GLenum>(c.pname);
2458 typedef cmds::GetVertexAttribIuiv::Result Result; 2413 typedef cmds::GetVertexAttribIuiv::Result Result;
2459 GLsizei num_values = 0; 2414 GLsizei num_values = 0;
2460 GetNumValuesReturnedForGLGet(pname, &num_values); 2415 GetNumValuesReturnedForGLGet(pname, &num_values);
2461 Result* result = GetSharedMemoryAs<Result*>( 2416 Result* result = GetSharedMemoryAs<Result*>(
2462 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 2417 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
2463 GLuint* params = result ? result->GetData() : NULL; 2418 GLuint* params = result ? result->GetData() : NULL;
2464 if (!validators_->vertex_attribute.IsValid(pname)) { 2419 if (!validators_->vertex_attribute.IsValid(pname)) {
2465 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIuiv", pname, "pname"); 2420 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetVertexAttribIuiv", pname, "pname");
2466 return error::kNoError; 2421 return error::kNoError;
2467 } 2422 }
2468 if (params == NULL) { 2423 if (params == NULL) {
2469 return error::kOutOfBounds; 2424 return error::kOutOfBounds;
2470 } 2425 }
2471 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribIuiv"); 2426 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetVertexAttribIuiv");
2472 // Check that the client initialized the result. 2427 // Check that the client initialized the result.
2473 if (result->size != 0) { 2428 if (result->size != 0) {
2474 return error::kInvalidArguments; 2429 return error::kInvalidArguments;
2475 } 2430 }
2476 DoGetVertexAttribIuiv(index, pname, params); 2431 DoGetVertexAttribIuiv(index, pname, params);
2477 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIuiv"); 2432 GLenum error = LOCAL_PEEK_GL_ERROR("GetVertexAttribIuiv");
2478 if (error == GL_NO_ERROR) { 2433 if (error == GL_NO_ERROR) {
2479 result->SetNumResults(num_values); 2434 result->SetNumResults(num_values);
2480 } 2435 }
2481 return error::kNoError; 2436 return error::kNoError;
2482 } 2437 }
2483 2438
2484 error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size, 2439 error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size,
2485 const void* cmd_data) { 2440 const volatile void* cmd_data) {
2486 const gles2::cmds::Hint& c = *static_cast<const gles2::cmds::Hint*>(cmd_data); 2441 const volatile gles2::cmds::Hint& c =
2487 (void)c; 2442 *static_cast<const volatile gles2::cmds::Hint*>(cmd_data);
2488 GLenum target = static_cast<GLenum>(c.target); 2443 GLenum target = static_cast<GLenum>(c.target);
2489 GLenum mode = static_cast<GLenum>(c.mode); 2444 GLenum mode = static_cast<GLenum>(c.mode);
2490 if (!validators_->hint_target.IsValid(target)) { 2445 if (!validators_->hint_target.IsValid(target)) {
2491 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", target, "target"); 2446 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", target, "target");
2492 return error::kNoError; 2447 return error::kNoError;
2493 } 2448 }
2494 if (!validators_->hint_mode.IsValid(mode)) { 2449 if (!validators_->hint_mode.IsValid(mode)) {
2495 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", mode, "mode"); 2450 LOCAL_SET_GL_ERROR_INVALID_ENUM("glHint", mode, "mode");
2496 return error::kNoError; 2451 return error::kNoError;
2497 } 2452 }
(...skipping 15 matching lines...) Expand all
2513 } 2468 }
2514 break; 2469 break;
2515 default: 2470 default:
2516 NOTREACHED(); 2471 NOTREACHED();
2517 } 2472 }
2518 return error::kNoError; 2473 return error::kNoError;
2519 } 2474 }
2520 2475
2521 error::Error GLES2DecoderImpl::HandleInvalidateFramebufferImmediate( 2476 error::Error GLES2DecoderImpl::HandleInvalidateFramebufferImmediate(
2522 uint32_t immediate_data_size, 2477 uint32_t immediate_data_size,
2523 const void* cmd_data) { 2478 const volatile void* cmd_data) {
2524 if (!unsafe_es3_apis_enabled()) 2479 if (!unsafe_es3_apis_enabled())
2525 return error::kUnknownCommand; 2480 return error::kUnknownCommand;
2526 const gles2::cmds::InvalidateFramebufferImmediate& c = 2481 const volatile gles2::cmds::InvalidateFramebufferImmediate& c =
2527 *static_cast<const gles2::cmds::InvalidateFramebufferImmediate*>( 2482 *static_cast<const volatile gles2::cmds::InvalidateFramebufferImmediate*>(
2528 cmd_data); 2483 cmd_data);
2529 (void)c;
2530 GLenum target = static_cast<GLenum>(c.target); 2484 GLenum target = static_cast<GLenum>(c.target);
2531 GLsizei count = static_cast<GLsizei>(c.count); 2485 GLsizei count = static_cast<GLsizei>(c.count);
2532 uint32_t data_size = 0; 2486 uint32_t data_size = 0;
2533 if (count >= 0 && 2487 if (count >= 0 &&
2534 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 2488 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
2535 return error::kOutOfBounds; 2489 return error::kOutOfBounds;
2536 } 2490 }
2537 if (data_size > immediate_data_size) { 2491 if (data_size > immediate_data_size) {
2538 return error::kOutOfBounds; 2492 return error::kOutOfBounds;
2539 } 2493 }
2540 const GLenum* attachments = 2494 volatile const GLenum* attachments =
2541 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 2495 GetImmediateDataAs<volatile const GLenum*>(c, data_size,
2496 immediate_data_size);
2542 if (!validators_->framebuffer_target.IsValid(target)) { 2497 if (!validators_->framebuffer_target.IsValid(target)) {
2543 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateFramebuffer", target, 2498 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateFramebuffer", target,
2544 "target"); 2499 "target");
2545 return error::kNoError; 2500 return error::kNoError;
2546 } 2501 }
2547 if (count < 0) { 2502 if (count < 0) {
2548 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateFramebuffer", 2503 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateFramebuffer",
2549 "count < 0"); 2504 "count < 0");
2550 return error::kNoError; 2505 return error::kNoError;
2551 } 2506 }
2552 if (attachments == NULL) { 2507 if (attachments == NULL) {
2553 return error::kOutOfBounds; 2508 return error::kOutOfBounds;
2554 } 2509 }
2555 DoInvalidateFramebuffer(target, count, attachments); 2510 DoInvalidateFramebuffer(target, count, attachments);
2556 return error::kNoError; 2511 return error::kNoError;
2557 } 2512 }
2558 2513
2559 error::Error GLES2DecoderImpl::HandleInvalidateSubFramebufferImmediate( 2514 error::Error GLES2DecoderImpl::HandleInvalidateSubFramebufferImmediate(
2560 uint32_t immediate_data_size, 2515 uint32_t immediate_data_size,
2561 const void* cmd_data) { 2516 const volatile void* cmd_data) {
2562 if (!unsafe_es3_apis_enabled()) 2517 if (!unsafe_es3_apis_enabled())
2563 return error::kUnknownCommand; 2518 return error::kUnknownCommand;
2564 const gles2::cmds::InvalidateSubFramebufferImmediate& c = 2519 const volatile gles2::cmds::InvalidateSubFramebufferImmediate& c =
2565 *static_cast<const gles2::cmds::InvalidateSubFramebufferImmediate*>( 2520 *static_cast<
2521 const volatile gles2::cmds::InvalidateSubFramebufferImmediate*>(
2566 cmd_data); 2522 cmd_data);
2567 (void)c;
2568 GLenum target = static_cast<GLenum>(c.target); 2523 GLenum target = static_cast<GLenum>(c.target);
2569 GLsizei count = static_cast<GLsizei>(c.count); 2524 GLsizei count = static_cast<GLsizei>(c.count);
2570 uint32_t data_size = 0; 2525 uint32_t data_size = 0;
2571 if (count >= 0 && 2526 if (count >= 0 &&
2572 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 2527 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
2573 return error::kOutOfBounds; 2528 return error::kOutOfBounds;
2574 } 2529 }
2575 if (data_size > immediate_data_size) { 2530 if (data_size > immediate_data_size) {
2576 return error::kOutOfBounds; 2531 return error::kOutOfBounds;
2577 } 2532 }
2578 const GLenum* attachments = 2533 volatile const GLenum* attachments =
2579 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 2534 GetImmediateDataAs<volatile const GLenum*>(c, data_size,
2535 immediate_data_size);
2580 GLint x = static_cast<GLint>(c.x); 2536 GLint x = static_cast<GLint>(c.x);
2581 GLint y = static_cast<GLint>(c.y); 2537 GLint y = static_cast<GLint>(c.y);
2582 GLsizei width = static_cast<GLsizei>(c.width); 2538 GLsizei width = static_cast<GLsizei>(c.width);
2583 GLsizei height = static_cast<GLsizei>(c.height); 2539 GLsizei height = static_cast<GLsizei>(c.height);
2584 if (!validators_->framebuffer_target.IsValid(target)) { 2540 if (!validators_->framebuffer_target.IsValid(target)) {
2585 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateSubFramebuffer", target, 2541 LOCAL_SET_GL_ERROR_INVALID_ENUM("glInvalidateSubFramebuffer", target,
2586 "target"); 2542 "target");
2587 return error::kNoError; 2543 return error::kNoError;
2588 } 2544 }
2589 if (count < 0) { 2545 if (count < 0) {
(...skipping 12 matching lines...) Expand all
2602 if (height < 0) { 2558 if (height < 0) {
2603 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer", 2559 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer",
2604 "height < 0"); 2560 "height < 0");
2605 return error::kNoError; 2561 return error::kNoError;
2606 } 2562 }
2607 DoInvalidateSubFramebuffer(target, count, attachments, x, y, width, height); 2563 DoInvalidateSubFramebuffer(target, count, attachments, x, y, width, height);
2608 return error::kNoError; 2564 return error::kNoError;
2609 } 2565 }
2610 2566
2611 error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size, 2567 error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size,
2612 const void* cmd_data) { 2568 const volatile void* cmd_data) {
2613 const gles2::cmds::IsBuffer& c = 2569 const volatile gles2::cmds::IsBuffer& c =
2614 *static_cast<const gles2::cmds::IsBuffer*>(cmd_data); 2570 *static_cast<const volatile gles2::cmds::IsBuffer*>(cmd_data);
2615 (void)c;
2616 GLuint buffer = c.buffer; 2571 GLuint buffer = c.buffer;
2617 typedef cmds::IsBuffer::Result Result; 2572 typedef cmds::IsBuffer::Result Result;
2618 Result* result_dst = GetSharedMemoryAs<Result*>( 2573 Result* result_dst = GetSharedMemoryAs<Result*>(
2619 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2574 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2620 if (!result_dst) { 2575 if (!result_dst) {
2621 return error::kOutOfBounds; 2576 return error::kOutOfBounds;
2622 } 2577 }
2623 *result_dst = DoIsBuffer(buffer); 2578 *result_dst = DoIsBuffer(buffer);
2624 return error::kNoError; 2579 return error::kNoError;
2625 } 2580 }
2626 2581
2627 error::Error GLES2DecoderImpl::HandleIsEnabled(uint32_t immediate_data_size, 2582 error::Error GLES2DecoderImpl::HandleIsEnabled(uint32_t immediate_data_size,
2628 const void* cmd_data) { 2583 const volatile void* cmd_data) {
2629 const gles2::cmds::IsEnabled& c = 2584 const volatile gles2::cmds::IsEnabled& c =
2630 *static_cast<const gles2::cmds::IsEnabled*>(cmd_data); 2585 *static_cast<const volatile gles2::cmds::IsEnabled*>(cmd_data);
2631 (void)c;
2632 GLenum cap = static_cast<GLenum>(c.cap); 2586 GLenum cap = static_cast<GLenum>(c.cap);
2633 typedef cmds::IsEnabled::Result Result; 2587 typedef cmds::IsEnabled::Result Result;
2634 Result* result_dst = GetSharedMemoryAs<Result*>( 2588 Result* result_dst = GetSharedMemoryAs<Result*>(
2635 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2589 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2636 if (!result_dst) { 2590 if (!result_dst) {
2637 return error::kOutOfBounds; 2591 return error::kOutOfBounds;
2638 } 2592 }
2639 if (!validators_->capability.IsValid(cap)) { 2593 if (!validators_->capability.IsValid(cap)) {
2640 LOCAL_SET_GL_ERROR_INVALID_ENUM("glIsEnabled", cap, "cap"); 2594 LOCAL_SET_GL_ERROR_INVALID_ENUM("glIsEnabled", cap, "cap");
2641 return error::kNoError; 2595 return error::kNoError;
2642 } 2596 }
2643 *result_dst = DoIsEnabled(cap); 2597 *result_dst = DoIsEnabled(cap);
2644 return error::kNoError; 2598 return error::kNoError;
2645 } 2599 }
2646 2600
2647 error::Error GLES2DecoderImpl::HandleIsFramebuffer(uint32_t immediate_data_size, 2601 error::Error GLES2DecoderImpl::HandleIsFramebuffer(
2648 const void* cmd_data) { 2602 uint32_t immediate_data_size,
2649 const gles2::cmds::IsFramebuffer& c = 2603 const volatile void* cmd_data) {
2650 *static_cast<const gles2::cmds::IsFramebuffer*>(cmd_data); 2604 const volatile gles2::cmds::IsFramebuffer& c =
2651 (void)c; 2605 *static_cast<const volatile gles2::cmds::IsFramebuffer*>(cmd_data);
2652 GLuint framebuffer = c.framebuffer; 2606 GLuint framebuffer = c.framebuffer;
2653 typedef cmds::IsFramebuffer::Result Result; 2607 typedef cmds::IsFramebuffer::Result Result;
2654 Result* result_dst = GetSharedMemoryAs<Result*>( 2608 Result* result_dst = GetSharedMemoryAs<Result*>(
2655 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2609 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2656 if (!result_dst) { 2610 if (!result_dst) {
2657 return error::kOutOfBounds; 2611 return error::kOutOfBounds;
2658 } 2612 }
2659 *result_dst = DoIsFramebuffer(framebuffer); 2613 *result_dst = DoIsFramebuffer(framebuffer);
2660 return error::kNoError; 2614 return error::kNoError;
2661 } 2615 }
2662 2616
2663 error::Error GLES2DecoderImpl::HandleIsProgram(uint32_t immediate_data_size, 2617 error::Error GLES2DecoderImpl::HandleIsProgram(uint32_t immediate_data_size,
2664 const void* cmd_data) { 2618 const volatile void* cmd_data) {
2665 const gles2::cmds::IsProgram& c = 2619 const volatile gles2::cmds::IsProgram& c =
2666 *static_cast<const gles2::cmds::IsProgram*>(cmd_data); 2620 *static_cast<const volatile gles2::cmds::IsProgram*>(cmd_data);
2667 (void)c;
2668 GLuint program = c.program; 2621 GLuint program = c.program;
2669 typedef cmds::IsProgram::Result Result; 2622 typedef cmds::IsProgram::Result Result;
2670 Result* result_dst = GetSharedMemoryAs<Result*>( 2623 Result* result_dst = GetSharedMemoryAs<Result*>(
2671 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2624 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2672 if (!result_dst) { 2625 if (!result_dst) {
2673 return error::kOutOfBounds; 2626 return error::kOutOfBounds;
2674 } 2627 }
2675 *result_dst = DoIsProgram(program); 2628 *result_dst = DoIsProgram(program);
2676 return error::kNoError; 2629 return error::kNoError;
2677 } 2630 }
2678 2631
2679 error::Error GLES2DecoderImpl::HandleIsRenderbuffer( 2632 error::Error GLES2DecoderImpl::HandleIsRenderbuffer(
2680 uint32_t immediate_data_size, 2633 uint32_t immediate_data_size,
2681 const void* cmd_data) { 2634 const volatile void* cmd_data) {
2682 const gles2::cmds::IsRenderbuffer& c = 2635 const volatile gles2::cmds::IsRenderbuffer& c =
2683 *static_cast<const gles2::cmds::IsRenderbuffer*>(cmd_data); 2636 *static_cast<const volatile gles2::cmds::IsRenderbuffer*>(cmd_data);
2684 (void)c;
2685 GLuint renderbuffer = c.renderbuffer; 2637 GLuint renderbuffer = c.renderbuffer;
2686 typedef cmds::IsRenderbuffer::Result Result; 2638 typedef cmds::IsRenderbuffer::Result Result;
2687 Result* result_dst = GetSharedMemoryAs<Result*>( 2639 Result* result_dst = GetSharedMemoryAs<Result*>(
2688 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2640 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2689 if (!result_dst) { 2641 if (!result_dst) {
2690 return error::kOutOfBounds; 2642 return error::kOutOfBounds;
2691 } 2643 }
2692 *result_dst = DoIsRenderbuffer(renderbuffer); 2644 *result_dst = DoIsRenderbuffer(renderbuffer);
2693 return error::kNoError; 2645 return error::kNoError;
2694 } 2646 }
2695 2647
2696 error::Error GLES2DecoderImpl::HandleIsSampler(uint32_t immediate_data_size, 2648 error::Error GLES2DecoderImpl::HandleIsSampler(uint32_t immediate_data_size,
2697 const void* cmd_data) { 2649 const volatile void* cmd_data) {
2698 if (!unsafe_es3_apis_enabled()) 2650 if (!unsafe_es3_apis_enabled())
2699 return error::kUnknownCommand; 2651 return error::kUnknownCommand;
2700 const gles2::cmds::IsSampler& c = 2652 const volatile gles2::cmds::IsSampler& c =
2701 *static_cast<const gles2::cmds::IsSampler*>(cmd_data); 2653 *static_cast<const volatile gles2::cmds::IsSampler*>(cmd_data);
2702 (void)c;
2703 GLuint sampler = c.sampler; 2654 GLuint sampler = c.sampler;
2704 typedef cmds::IsSampler::Result Result; 2655 typedef cmds::IsSampler::Result Result;
2705 Result* result_dst = GetSharedMemoryAs<Result*>( 2656 Result* result_dst = GetSharedMemoryAs<Result*>(
2706 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2657 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2707 if (!result_dst) { 2658 if (!result_dst) {
2708 return error::kOutOfBounds; 2659 return error::kOutOfBounds;
2709 } 2660 }
2710 *result_dst = DoIsSampler(sampler); 2661 *result_dst = DoIsSampler(sampler);
2711 return error::kNoError; 2662 return error::kNoError;
2712 } 2663 }
2713 2664
2714 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size, 2665 error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size,
2715 const void* cmd_data) { 2666 const volatile void* cmd_data) {
2716 const gles2::cmds::IsShader& c = 2667 const volatile gles2::cmds::IsShader& c =
2717 *static_cast<const gles2::cmds::IsShader*>(cmd_data); 2668 *static_cast<const volatile gles2::cmds::IsShader*>(cmd_data);
2718 (void)c;
2719 GLuint shader = c.shader; 2669 GLuint shader = c.shader;
2720 typedef cmds::IsShader::Result Result; 2670 typedef cmds::IsShader::Result Result;
2721 Result* result_dst = GetSharedMemoryAs<Result*>( 2671 Result* result_dst = GetSharedMemoryAs<Result*>(
2722 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2672 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2723 if (!result_dst) { 2673 if (!result_dst) {
2724 return error::kOutOfBounds; 2674 return error::kOutOfBounds;
2725 } 2675 }
2726 *result_dst = DoIsShader(shader); 2676 *result_dst = DoIsShader(shader);
2727 return error::kNoError; 2677 return error::kNoError;
2728 } 2678 }
2729 2679
2730 error::Error GLES2DecoderImpl::HandleIsSync(uint32_t immediate_data_size, 2680 error::Error GLES2DecoderImpl::HandleIsSync(uint32_t immediate_data_size,
2731 const void* cmd_data) { 2681 const volatile void* cmd_data) {
2732 if (!unsafe_es3_apis_enabled()) 2682 if (!unsafe_es3_apis_enabled())
2733 return error::kUnknownCommand; 2683 return error::kUnknownCommand;
2734 const gles2::cmds::IsSync& c = 2684 const volatile gles2::cmds::IsSync& c =
2735 *static_cast<const gles2::cmds::IsSync*>(cmd_data); 2685 *static_cast<const volatile gles2::cmds::IsSync*>(cmd_data);
2736 (void)c;
2737 GLuint sync = c.sync; 2686 GLuint sync = c.sync;
2738 typedef cmds::IsSync::Result Result; 2687 typedef cmds::IsSync::Result Result;
2739 Result* result_dst = GetSharedMemoryAs<Result*>( 2688 Result* result_dst = GetSharedMemoryAs<Result*>(
2740 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2689 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2741 if (!result_dst) { 2690 if (!result_dst) {
2742 return error::kOutOfBounds; 2691 return error::kOutOfBounds;
2743 } 2692 }
2744 *result_dst = DoIsSync(sync); 2693 *result_dst = DoIsSync(sync);
2745 return error::kNoError; 2694 return error::kNoError;
2746 } 2695 }
2747 2696
2748 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size, 2697 error::Error GLES2DecoderImpl::HandleIsTexture(uint32_t immediate_data_size,
2749 const void* cmd_data) { 2698 const volatile void* cmd_data) {
2750 const gles2::cmds::IsTexture& c = 2699 const volatile gles2::cmds::IsTexture& c =
2751 *static_cast<const gles2::cmds::IsTexture*>(cmd_data); 2700 *static_cast<const volatile gles2::cmds::IsTexture*>(cmd_data);
2752 (void)c;
2753 GLuint texture = c.texture; 2701 GLuint texture = c.texture;
2754 typedef cmds::IsTexture::Result Result; 2702 typedef cmds::IsTexture::Result Result;
2755 Result* result_dst = GetSharedMemoryAs<Result*>( 2703 Result* result_dst = GetSharedMemoryAs<Result*>(
2756 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2704 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2757 if (!result_dst) { 2705 if (!result_dst) {
2758 return error::kOutOfBounds; 2706 return error::kOutOfBounds;
2759 } 2707 }
2760 *result_dst = DoIsTexture(texture); 2708 *result_dst = DoIsTexture(texture);
2761 return error::kNoError; 2709 return error::kNoError;
2762 } 2710 }
2763 2711
2764 error::Error GLES2DecoderImpl::HandleIsTransformFeedback( 2712 error::Error GLES2DecoderImpl::HandleIsTransformFeedback(
2765 uint32_t immediate_data_size, 2713 uint32_t immediate_data_size,
2766 const void* cmd_data) { 2714 const volatile void* cmd_data) {
2767 if (!unsafe_es3_apis_enabled()) 2715 if (!unsafe_es3_apis_enabled())
2768 return error::kUnknownCommand; 2716 return error::kUnknownCommand;
2769 const gles2::cmds::IsTransformFeedback& c = 2717 const volatile gles2::cmds::IsTransformFeedback& c =
2770 *static_cast<const gles2::cmds::IsTransformFeedback*>(cmd_data); 2718 *static_cast<const volatile gles2::cmds::IsTransformFeedback*>(cmd_data);
2771 (void)c;
2772 GLuint transformfeedback = c.transformfeedback; 2719 GLuint transformfeedback = c.transformfeedback;
2773 typedef cmds::IsTransformFeedback::Result Result; 2720 typedef cmds::IsTransformFeedback::Result Result;
2774 Result* result_dst = GetSharedMemoryAs<Result*>( 2721 Result* result_dst = GetSharedMemoryAs<Result*>(
2775 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2722 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2776 if (!result_dst) { 2723 if (!result_dst) {
2777 return error::kOutOfBounds; 2724 return error::kOutOfBounds;
2778 } 2725 }
2779 *result_dst = DoIsTransformFeedback(transformfeedback); 2726 *result_dst = DoIsTransformFeedback(transformfeedback);
2780 return error::kNoError; 2727 return error::kNoError;
2781 } 2728 }
2782 2729
2783 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size, 2730 error::Error GLES2DecoderImpl::HandleLineWidth(uint32_t immediate_data_size,
2784 const void* cmd_data) { 2731 const volatile void* cmd_data) {
2785 const gles2::cmds::LineWidth& c = 2732 const volatile gles2::cmds::LineWidth& c =
2786 *static_cast<const gles2::cmds::LineWidth*>(cmd_data); 2733 *static_cast<const volatile gles2::cmds::LineWidth*>(cmd_data);
2787 (void)c;
2788 GLfloat width = static_cast<GLfloat>(c.width); 2734 GLfloat width = static_cast<GLfloat>(c.width);
2789 if (width <= 0.0f || std::isnan(width)) { 2735 if (width <= 0.0f || std::isnan(width)) {
2790 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range"); 2736 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range");
2791 return error::kNoError; 2737 return error::kNoError;
2792 } 2738 }
2793 if (state_.line_width != width) { 2739 if (state_.line_width != width) {
2794 state_.line_width = width; 2740 state_.line_width = width;
2795 DoLineWidth(width); 2741 DoLineWidth(width);
2796 } 2742 }
2797 return error::kNoError; 2743 return error::kNoError;
2798 } 2744 }
2799 2745
2800 error::Error GLES2DecoderImpl::HandleLinkProgram(uint32_t immediate_data_size, 2746 error::Error GLES2DecoderImpl::HandleLinkProgram(
2801 const void* cmd_data) { 2747 uint32_t immediate_data_size,
2802 const gles2::cmds::LinkProgram& c = 2748 const volatile void* cmd_data) {
2803 *static_cast<const gles2::cmds::LinkProgram*>(cmd_data); 2749 const volatile gles2::cmds::LinkProgram& c =
2804 (void)c; 2750 *static_cast<const volatile gles2::cmds::LinkProgram*>(cmd_data);
2805 GLuint program = c.program; 2751 GLuint program = c.program;
2806 DoLinkProgram(program); 2752 DoLinkProgram(program);
2807 return error::kNoError; 2753 return error::kNoError;
2808 } 2754 }
2809 2755
2810 error::Error GLES2DecoderImpl::HandlePauseTransformFeedback( 2756 error::Error GLES2DecoderImpl::HandlePauseTransformFeedback(
2811 uint32_t immediate_data_size, 2757 uint32_t immediate_data_size,
2812 const void* cmd_data) { 2758 const volatile void* cmd_data) {
2813 if (!unsafe_es3_apis_enabled()) 2759 if (!unsafe_es3_apis_enabled())
2814 return error::kUnknownCommand; 2760 return error::kUnknownCommand;
2815 const gles2::cmds::PauseTransformFeedback& c =
2816 *static_cast<const gles2::cmds::PauseTransformFeedback*>(cmd_data);
2817 (void)c;
2818 DoPauseTransformFeedback(); 2761 DoPauseTransformFeedback();
2819 return error::kNoError; 2762 return error::kNoError;
2820 } 2763 }
2821 2764
2822 error::Error GLES2DecoderImpl::HandlePolygonOffset(uint32_t immediate_data_size, 2765 error::Error GLES2DecoderImpl::HandlePolygonOffset(
2823 const void* cmd_data) { 2766 uint32_t immediate_data_size,
2824 const gles2::cmds::PolygonOffset& c = 2767 const volatile void* cmd_data) {
2825 *static_cast<const gles2::cmds::PolygonOffset*>(cmd_data); 2768 const volatile gles2::cmds::PolygonOffset& c =
2826 (void)c; 2769 *static_cast<const volatile gles2::cmds::PolygonOffset*>(cmd_data);
2827 GLfloat factor = static_cast<GLfloat>(c.factor); 2770 GLfloat factor = static_cast<GLfloat>(c.factor);
2828 GLfloat units = static_cast<GLfloat>(c.units); 2771 GLfloat units = static_cast<GLfloat>(c.units);
2829 if (state_.polygon_offset_factor != factor || 2772 if (state_.polygon_offset_factor != factor ||
2830 state_.polygon_offset_units != units) { 2773 state_.polygon_offset_units != units) {
2831 state_.polygon_offset_factor = factor; 2774 state_.polygon_offset_factor = factor;
2832 state_.polygon_offset_units = units; 2775 state_.polygon_offset_units = units;
2833 glPolygonOffset(factor, units); 2776 glPolygonOffset(factor, units);
2834 } 2777 }
2835 return error::kNoError; 2778 return error::kNoError;
2836 } 2779 }
2837 2780
2838 error::Error GLES2DecoderImpl::HandleReadBuffer(uint32_t immediate_data_size, 2781 error::Error GLES2DecoderImpl::HandleReadBuffer(uint32_t immediate_data_size,
2839 const void* cmd_data) { 2782 const volatile void* cmd_data) {
2840 if (!unsafe_es3_apis_enabled()) 2783 if (!unsafe_es3_apis_enabled())
2841 return error::kUnknownCommand; 2784 return error::kUnknownCommand;
2842 const gles2::cmds::ReadBuffer& c = 2785 const volatile gles2::cmds::ReadBuffer& c =
2843 *static_cast<const gles2::cmds::ReadBuffer*>(cmd_data); 2786 *static_cast<const volatile gles2::cmds::ReadBuffer*>(cmd_data);
2844 (void)c;
2845 GLenum src = static_cast<GLenum>(c.src); 2787 GLenum src = static_cast<GLenum>(c.src);
2846 if (!validators_->read_buffer.IsValid(src)) { 2788 if (!validators_->read_buffer.IsValid(src)) {
2847 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReadBuffer", src, "src"); 2789 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReadBuffer", src, "src");
2848 return error::kNoError; 2790 return error::kNoError;
2849 } 2791 }
2850 DoReadBuffer(src); 2792 DoReadBuffer(src);
2851 return error::kNoError; 2793 return error::kNoError;
2852 } 2794 }
2853 2795
2854 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( 2796 error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler(
2855 uint32_t immediate_data_size, 2797 uint32_t immediate_data_size,
2856 const void* cmd_data) { 2798 const volatile void* cmd_data) {
2857 const gles2::cmds::ReleaseShaderCompiler& c =
2858 *static_cast<const gles2::cmds::ReleaseShaderCompiler*>(cmd_data);
2859 (void)c;
2860 DoReleaseShaderCompiler(); 2799 DoReleaseShaderCompiler();
2861 return error::kNoError; 2800 return error::kNoError;
2862 } 2801 }
2863 2802
2864 error::Error GLES2DecoderImpl::HandleRenderbufferStorage( 2803 error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
2865 uint32_t immediate_data_size, 2804 uint32_t immediate_data_size,
2866 const void* cmd_data) { 2805 const volatile void* cmd_data) {
2867 const gles2::cmds::RenderbufferStorage& c = 2806 const volatile gles2::cmds::RenderbufferStorage& c =
2868 *static_cast<const gles2::cmds::RenderbufferStorage*>(cmd_data); 2807 *static_cast<const volatile gles2::cmds::RenderbufferStorage*>(cmd_data);
2869 (void)c;
2870 GLenum target = static_cast<GLenum>(c.target); 2808 GLenum target = static_cast<GLenum>(c.target);
2871 GLenum internalformat = static_cast<GLenum>(c.internalformat); 2809 GLenum internalformat = static_cast<GLenum>(c.internalformat);
2872 GLsizei width = static_cast<GLsizei>(c.width); 2810 GLsizei width = static_cast<GLsizei>(c.width);
2873 GLsizei height = static_cast<GLsizei>(c.height); 2811 GLsizei height = static_cast<GLsizei>(c.height);
2874 if (!validators_->render_buffer_target.IsValid(target)) { 2812 if (!validators_->render_buffer_target.IsValid(target)) {
2875 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", target, "target"); 2813 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", target, "target");
2876 return error::kNoError; 2814 return error::kNoError;
2877 } 2815 }
2878 if (!validators_->render_buffer_format.IsValid(internalformat)) { 2816 if (!validators_->render_buffer_format.IsValid(internalformat)) {
2879 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", internalformat, 2817 LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", internalformat,
2880 "internalformat"); 2818 "internalformat");
2881 return error::kNoError; 2819 return error::kNoError;
2882 } 2820 }
2883 if (width < 0) { 2821 if (width < 0) {
2884 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0"); 2822 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0");
2885 return error::kNoError; 2823 return error::kNoError;
2886 } 2824 }
2887 if (height < 0) { 2825 if (height < 0) {
2888 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0"); 2826 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0");
2889 return error::kNoError; 2827 return error::kNoError;
2890 } 2828 }
2891 DoRenderbufferStorage(target, internalformat, width, height); 2829 DoRenderbufferStorage(target, internalformat, width, height);
2892 return error::kNoError; 2830 return error::kNoError;
2893 } 2831 }
2894 2832
2895 error::Error GLES2DecoderImpl::HandleResumeTransformFeedback( 2833 error::Error GLES2DecoderImpl::HandleResumeTransformFeedback(
2896 uint32_t immediate_data_size, 2834 uint32_t immediate_data_size,
2897 const void* cmd_data) { 2835 const volatile void* cmd_data) {
2898 if (!unsafe_es3_apis_enabled()) 2836 if (!unsafe_es3_apis_enabled())
2899 return error::kUnknownCommand; 2837 return error::kUnknownCommand;
2900 const gles2::cmds::ResumeTransformFeedback& c =
2901 *static_cast<const gles2::cmds::ResumeTransformFeedback*>(cmd_data);
2902 (void)c;
2903 DoResumeTransformFeedback(); 2838 DoResumeTransformFeedback();
2904 return error::kNoError; 2839 return error::kNoError;
2905 } 2840 }
2906 2841
2907 error::Error GLES2DecoderImpl::HandleSampleCoverage( 2842 error::Error GLES2DecoderImpl::HandleSampleCoverage(
2908 uint32_t immediate_data_size, 2843 uint32_t immediate_data_size,
2909 const void* cmd_data) { 2844 const volatile void* cmd_data) {
2910 const gles2::cmds::SampleCoverage& c = 2845 const volatile gles2::cmds::SampleCoverage& c =
2911 *static_cast<const gles2::cmds::SampleCoverage*>(cmd_data); 2846 *static_cast<const volatile gles2::cmds::SampleCoverage*>(cmd_data);
2912 (void)c;
2913 GLclampf value = static_cast<GLclampf>(c.value); 2847 GLclampf value = static_cast<GLclampf>(c.value);
2914 GLboolean invert = static_cast<GLboolean>(c.invert); 2848 GLboolean invert = static_cast<GLboolean>(c.invert);
2915 DoSampleCoverage(value, invert); 2849 DoSampleCoverage(value, invert);
2916 return error::kNoError; 2850 return error::kNoError;
2917 } 2851 }
2918 2852
2919 error::Error GLES2DecoderImpl::HandleSamplerParameterf( 2853 error::Error GLES2DecoderImpl::HandleSamplerParameterf(
2920 uint32_t immediate_data_size, 2854 uint32_t immediate_data_size,
2921 const void* cmd_data) { 2855 const volatile void* cmd_data) {
2922 if (!unsafe_es3_apis_enabled()) 2856 if (!unsafe_es3_apis_enabled())
2923 return error::kUnknownCommand; 2857 return error::kUnknownCommand;
2924 const gles2::cmds::SamplerParameterf& c = 2858 const volatile gles2::cmds::SamplerParameterf& c =
2925 *static_cast<const gles2::cmds::SamplerParameterf*>(cmd_data); 2859 *static_cast<const volatile gles2::cmds::SamplerParameterf*>(cmd_data);
2926 (void)c;
2927 GLuint sampler = c.sampler; 2860 GLuint sampler = c.sampler;
2928 GLenum pname = static_cast<GLenum>(c.pname); 2861 GLenum pname = static_cast<GLenum>(c.pname);
2929 GLfloat param = static_cast<GLfloat>(c.param); 2862 GLfloat param = static_cast<GLfloat>(c.param);
2930 if (!validators_->sampler_parameter.IsValid(pname)) { 2863 if (!validators_->sampler_parameter.IsValid(pname)) {
2931 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterf", pname, "pname"); 2864 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterf", pname, "pname");
2932 return error::kNoError; 2865 return error::kNoError;
2933 } 2866 }
2934 DoSamplerParameterf(sampler, pname, param); 2867 DoSamplerParameterf(sampler, pname, param);
2935 return error::kNoError; 2868 return error::kNoError;
2936 } 2869 }
2937 2870
2938 error::Error GLES2DecoderImpl::HandleSamplerParameterfvImmediate( 2871 error::Error GLES2DecoderImpl::HandleSamplerParameterfvImmediate(
2939 uint32_t immediate_data_size, 2872 uint32_t immediate_data_size,
2940 const void* cmd_data) { 2873 const volatile void* cmd_data) {
2941 if (!unsafe_es3_apis_enabled()) 2874 if (!unsafe_es3_apis_enabled())
2942 return error::kUnknownCommand; 2875 return error::kUnknownCommand;
2943 const gles2::cmds::SamplerParameterfvImmediate& c = 2876 const volatile gles2::cmds::SamplerParameterfvImmediate& c =
2944 *static_cast<const gles2::cmds::SamplerParameterfvImmediate*>(cmd_data); 2877 *static_cast<const volatile gles2::cmds::SamplerParameterfvImmediate*>(
2945 (void)c; 2878 cmd_data);
2946 GLuint sampler = c.sampler; 2879 GLuint sampler = c.sampler;
2947 GLenum pname = static_cast<GLenum>(c.pname); 2880 GLenum pname = static_cast<GLenum>(c.pname);
2948 uint32_t data_size; 2881 uint32_t data_size;
2949 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 2882 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
2950 return error::kOutOfBounds; 2883 return error::kOutOfBounds;
2951 } 2884 }
2952 if (data_size > immediate_data_size) { 2885 if (data_size > immediate_data_size) {
2953 return error::kOutOfBounds; 2886 return error::kOutOfBounds;
2954 } 2887 }
2955 const GLfloat* params = 2888 volatile const GLfloat* params = GetImmediateDataAs<volatile const GLfloat*>(
2956 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 2889 c, data_size, immediate_data_size);
2957 if (!validators_->sampler_parameter.IsValid(pname)) { 2890 if (!validators_->sampler_parameter.IsValid(pname)) {
2958 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterfv", pname, "pname"); 2891 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameterfv", pname, "pname");
2959 return error::kNoError; 2892 return error::kNoError;
2960 } 2893 }
2961 if (params == NULL) { 2894 if (params == NULL) {
2962 return error::kOutOfBounds; 2895 return error::kOutOfBounds;
2963 } 2896 }
2964 DoSamplerParameterfv(sampler, pname, params); 2897 DoSamplerParameterfv(sampler, pname, params);
2965 return error::kNoError; 2898 return error::kNoError;
2966 } 2899 }
2967 2900
2968 error::Error GLES2DecoderImpl::HandleSamplerParameteri( 2901 error::Error GLES2DecoderImpl::HandleSamplerParameteri(
2969 uint32_t immediate_data_size, 2902 uint32_t immediate_data_size,
2970 const void* cmd_data) { 2903 const volatile void* cmd_data) {
2971 if (!unsafe_es3_apis_enabled()) 2904 if (!unsafe_es3_apis_enabled())
2972 return error::kUnknownCommand; 2905 return error::kUnknownCommand;
2973 const gles2::cmds::SamplerParameteri& c = 2906 const volatile gles2::cmds::SamplerParameteri& c =
2974 *static_cast<const gles2::cmds::SamplerParameteri*>(cmd_data); 2907 *static_cast<const volatile gles2::cmds::SamplerParameteri*>(cmd_data);
2975 (void)c;
2976 GLuint sampler = c.sampler; 2908 GLuint sampler = c.sampler;
2977 GLenum pname = static_cast<GLenum>(c.pname); 2909 GLenum pname = static_cast<GLenum>(c.pname);
2978 GLint param = static_cast<GLint>(c.param); 2910 GLint param = static_cast<GLint>(c.param);
2979 if (!validators_->sampler_parameter.IsValid(pname)) { 2911 if (!validators_->sampler_parameter.IsValid(pname)) {
2980 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteri", pname, "pname"); 2912 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteri", pname, "pname");
2981 return error::kNoError; 2913 return error::kNoError;
2982 } 2914 }
2983 DoSamplerParameteri(sampler, pname, param); 2915 DoSamplerParameteri(sampler, pname, param);
2984 return error::kNoError; 2916 return error::kNoError;
2985 } 2917 }
2986 2918
2987 error::Error GLES2DecoderImpl::HandleSamplerParameterivImmediate( 2919 error::Error GLES2DecoderImpl::HandleSamplerParameterivImmediate(
2988 uint32_t immediate_data_size, 2920 uint32_t immediate_data_size,
2989 const void* cmd_data) { 2921 const volatile void* cmd_data) {
2990 if (!unsafe_es3_apis_enabled()) 2922 if (!unsafe_es3_apis_enabled())
2991 return error::kUnknownCommand; 2923 return error::kUnknownCommand;
2992 const gles2::cmds::SamplerParameterivImmediate& c = 2924 const volatile gles2::cmds::SamplerParameterivImmediate& c =
2993 *static_cast<const gles2::cmds::SamplerParameterivImmediate*>(cmd_data); 2925 *static_cast<const volatile gles2::cmds::SamplerParameterivImmediate*>(
2994 (void)c; 2926 cmd_data);
2995 GLuint sampler = c.sampler; 2927 GLuint sampler = c.sampler;
2996 GLenum pname = static_cast<GLenum>(c.pname); 2928 GLenum pname = static_cast<GLenum>(c.pname);
2997 uint32_t data_size; 2929 uint32_t data_size;
2998 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { 2930 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
2999 return error::kOutOfBounds; 2931 return error::kOutOfBounds;
3000 } 2932 }
3001 if (data_size > immediate_data_size) { 2933 if (data_size > immediate_data_size) {
3002 return error::kOutOfBounds; 2934 return error::kOutOfBounds;
3003 } 2935 }
3004 const GLint* params = 2936 volatile const GLint* params = GetImmediateDataAs<volatile const GLint*>(
3005 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 2937 c, data_size, immediate_data_size);
3006 if (!validators_->sampler_parameter.IsValid(pname)) { 2938 if (!validators_->sampler_parameter.IsValid(pname)) {
3007 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteriv", pname, "pname"); 2939 LOCAL_SET_GL_ERROR_INVALID_ENUM("glSamplerParameteriv", pname, "pname");
3008 return error::kNoError; 2940 return error::kNoError;
3009 } 2941 }
3010 if (params == NULL) { 2942 if (params == NULL) {
3011 return error::kOutOfBounds; 2943 return error::kOutOfBounds;
3012 } 2944 }
3013 DoSamplerParameteriv(sampler, pname, params); 2945 DoSamplerParameteriv(sampler, pname, params);
3014 return error::kNoError; 2946 return error::kNoError;
3015 } 2947 }
3016 2948
3017 error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size, 2949 error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size,
3018 const void* cmd_data) { 2950 const volatile void* cmd_data) {
3019 const gles2::cmds::Scissor& c = 2951 const volatile gles2::cmds::Scissor& c =
3020 *static_cast<const gles2::cmds::Scissor*>(cmd_data); 2952 *static_cast<const volatile gles2::cmds::Scissor*>(cmd_data);
3021 (void)c;
3022 GLint x = static_cast<GLint>(c.x); 2953 GLint x = static_cast<GLint>(c.x);
3023 GLint y = static_cast<GLint>(c.y); 2954 GLint y = static_cast<GLint>(c.y);
3024 GLsizei width = static_cast<GLsizei>(c.width); 2955 GLsizei width = static_cast<GLsizei>(c.width);
3025 GLsizei height = static_cast<GLsizei>(c.height); 2956 GLsizei height = static_cast<GLsizei>(c.height);
3026 if (width < 0) { 2957 if (width < 0) {
3027 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "width < 0"); 2958 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "width < 0");
3028 return error::kNoError; 2959 return error::kNoError;
3029 } 2960 }
3030 if (height < 0) { 2961 if (height < 0) {
3031 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0"); 2962 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0");
3032 return error::kNoError; 2963 return error::kNoError;
3033 } 2964 }
3034 if (state_.scissor_x != x || state_.scissor_y != y || 2965 if (state_.scissor_x != x || state_.scissor_y != y ||
3035 state_.scissor_width != width || state_.scissor_height != height) { 2966 state_.scissor_width != width || state_.scissor_height != height) {
3036 state_.scissor_x = x; 2967 state_.scissor_x = x;
3037 state_.scissor_y = y; 2968 state_.scissor_y = y;
3038 state_.scissor_width = width; 2969 state_.scissor_width = width;
3039 state_.scissor_height = height; 2970 state_.scissor_height = height;
3040 glScissor(x, y, width, height); 2971 glScissor(x, y, width, height);
3041 } 2972 }
3042 return error::kNoError; 2973 return error::kNoError;
3043 } 2974 }
3044 2975
3045 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( 2976 error::Error GLES2DecoderImpl::HandleShaderSourceBucket(
3046 uint32_t immediate_data_size, 2977 uint32_t immediate_data_size,
3047 const void* cmd_data) { 2978 const volatile void* cmd_data) {
3048 const gles2::cmds::ShaderSourceBucket& c = 2979 const volatile gles2::cmds::ShaderSourceBucket& c =
3049 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data); 2980 *static_cast<const volatile gles2::cmds::ShaderSourceBucket*>(cmd_data);
3050 (void)c;
3051 GLuint shader = static_cast<GLuint>(c.shader); 2981 GLuint shader = static_cast<GLuint>(c.shader);
3052 2982
3053 Bucket* bucket = GetBucket(c.str_bucket_id); 2983 Bucket* bucket = GetBucket(c.str_bucket_id);
3054 if (!bucket) { 2984 if (!bucket) {
3055 return error::kInvalidArguments; 2985 return error::kInvalidArguments;
3056 } 2986 }
3057 GLsizei count = 0; 2987 GLsizei count = 0;
3058 std::vector<char*> strs; 2988 std::vector<char*> strs;
3059 std::vector<GLint> len; 2989 std::vector<GLint> len;
3060 if (!bucket->GetAsStrings(&count, &strs, &len)) { 2990 if (!bucket->GetAsStrings(&count, &strs, &len)) {
3061 return error::kInvalidArguments; 2991 return error::kInvalidArguments;
3062 } 2992 }
3063 const char** str = 2993 const char** str =
3064 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; 2994 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL;
3065 const GLint* length = 2995 const GLint* length =
3066 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; 2996 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL;
3067 (void)length; 2997 (void)length;
3068 DoShaderSource(shader, count, str, length); 2998 DoShaderSource(shader, count, str, length);
3069 return error::kNoError; 2999 return error::kNoError;
3070 } 3000 }
3071 3001
3072 error::Error GLES2DecoderImpl::HandleStencilFunc(uint32_t immediate_data_size, 3002 error::Error GLES2DecoderImpl::HandleStencilFunc(
3073 const void* cmd_data) { 3003 uint32_t immediate_data_size,
3074 const gles2::cmds::StencilFunc& c = 3004 const volatile void* cmd_data) {
3075 *static_cast<const gles2::cmds::StencilFunc*>(cmd_data); 3005 const volatile gles2::cmds::StencilFunc& c =
3076 (void)c; 3006 *static_cast<const volatile gles2::cmds::StencilFunc*>(cmd_data);
3077 GLenum func = static_cast<GLenum>(c.func); 3007 GLenum func = static_cast<GLenum>(c.func);
3078 GLint ref = static_cast<GLint>(c.ref); 3008 GLint ref = static_cast<GLint>(c.ref);
3079 GLuint mask = static_cast<GLuint>(c.mask); 3009 GLuint mask = static_cast<GLuint>(c.mask);
3080 if (!validators_->cmp_function.IsValid(func)) { 3010 if (!validators_->cmp_function.IsValid(func)) {
3081 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func"); 3011 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func");
3082 return error::kNoError; 3012 return error::kNoError;
3083 } 3013 }
3084 if (state_.stencil_front_func != func || state_.stencil_front_ref != ref || 3014 if (state_.stencil_front_func != func || state_.stencil_front_ref != ref ||
3085 state_.stencil_front_mask != mask || state_.stencil_back_func != func || 3015 state_.stencil_front_mask != mask || state_.stencil_back_func != func ||
3086 state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) { 3016 state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) {
3087 state_.stencil_front_func = func; 3017 state_.stencil_front_func = func;
3088 state_.stencil_front_ref = ref; 3018 state_.stencil_front_ref = ref;
3089 state_.stencil_front_mask = mask; 3019 state_.stencil_front_mask = mask;
3090 state_.stencil_back_func = func; 3020 state_.stencil_back_func = func;
3091 state_.stencil_back_ref = ref; 3021 state_.stencil_back_ref = ref;
3092 state_.stencil_back_mask = mask; 3022 state_.stencil_back_mask = mask;
3093 glStencilFunc(func, ref, mask); 3023 glStencilFunc(func, ref, mask);
3094 } 3024 }
3095 return error::kNoError; 3025 return error::kNoError;
3096 } 3026 }
3097 3027
3098 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( 3028 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
3099 uint32_t immediate_data_size, 3029 uint32_t immediate_data_size,
3100 const void* cmd_data) { 3030 const volatile void* cmd_data) {
3101 const gles2::cmds::StencilFuncSeparate& c = 3031 const volatile gles2::cmds::StencilFuncSeparate& c =
3102 *static_cast<const gles2::cmds::StencilFuncSeparate*>(cmd_data); 3032 *static_cast<const volatile gles2::cmds::StencilFuncSeparate*>(cmd_data);
3103 (void)c;
3104 GLenum face = static_cast<GLenum>(c.face); 3033 GLenum face = static_cast<GLenum>(c.face);
3105 GLenum func = static_cast<GLenum>(c.func); 3034 GLenum func = static_cast<GLenum>(c.func);
3106 GLint ref = static_cast<GLint>(c.ref); 3035 GLint ref = static_cast<GLint>(c.ref);
3107 GLuint mask = static_cast<GLuint>(c.mask); 3036 GLuint mask = static_cast<GLuint>(c.mask);
3108 if (!validators_->face_type.IsValid(face)) { 3037 if (!validators_->face_type.IsValid(face)) {
3109 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", face, "face"); 3038 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", face, "face");
3110 return error::kNoError; 3039 return error::kNoError;
3111 } 3040 }
3112 if (!validators_->cmp_function.IsValid(func)) { 3041 if (!validators_->cmp_function.IsValid(func)) {
3113 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", func, "func"); 3042 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFuncSeparate", func, "func");
(...skipping 19 matching lines...) Expand all
3133 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 3062 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
3134 state_.stencil_back_func = func; 3063 state_.stencil_back_func = func;
3135 state_.stencil_back_ref = ref; 3064 state_.stencil_back_ref = ref;
3136 state_.stencil_back_mask = mask; 3065 state_.stencil_back_mask = mask;
3137 } 3066 }
3138 glStencilFuncSeparate(face, func, ref, mask); 3067 glStencilFuncSeparate(face, func, ref, mask);
3139 } 3068 }
3140 return error::kNoError; 3069 return error::kNoError;
3141 } 3070 }
3142 3071
3143 error::Error GLES2DecoderImpl::HandleStencilMask(uint32_t immediate_data_size, 3072 error::Error GLES2DecoderImpl::HandleStencilMask(
3144 const void* cmd_data) { 3073 uint32_t immediate_data_size,
3145 const gles2::cmds::StencilMask& c = 3074 const volatile void* cmd_data) {
3146 *static_cast<const gles2::cmds::StencilMask*>(cmd_data); 3075 const volatile gles2::cmds::StencilMask& c =
3147 (void)c; 3076 *static_cast<const volatile gles2::cmds::StencilMask*>(cmd_data);
3148 GLuint mask = static_cast<GLuint>(c.mask); 3077 GLuint mask = static_cast<GLuint>(c.mask);
3149 if (state_.stencil_front_writemask != mask || 3078 if (state_.stencil_front_writemask != mask ||
3150 state_.stencil_back_writemask != mask) { 3079 state_.stencil_back_writemask != mask) {
3151 state_.stencil_front_writemask = mask; 3080 state_.stencil_front_writemask = mask;
3152 state_.stencil_back_writemask = mask; 3081 state_.stencil_back_writemask = mask;
3153 framebuffer_state_.clear_state_dirty = true; 3082 framebuffer_state_.clear_state_dirty = true;
3154 } 3083 }
3155 return error::kNoError; 3084 return error::kNoError;
3156 } 3085 }
3157 3086
3158 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( 3087 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate(
3159 uint32_t immediate_data_size, 3088 uint32_t immediate_data_size,
3160 const void* cmd_data) { 3089 const volatile void* cmd_data) {
3161 const gles2::cmds::StencilMaskSeparate& c = 3090 const volatile gles2::cmds::StencilMaskSeparate& c =
3162 *static_cast<const gles2::cmds::StencilMaskSeparate*>(cmd_data); 3091 *static_cast<const volatile gles2::cmds::StencilMaskSeparate*>(cmd_data);
3163 (void)c;
3164 GLenum face = static_cast<GLenum>(c.face); 3092 GLenum face = static_cast<GLenum>(c.face);
3165 GLuint mask = static_cast<GLuint>(c.mask); 3093 GLuint mask = static_cast<GLuint>(c.mask);
3166 if (!validators_->face_type.IsValid(face)) { 3094 if (!validators_->face_type.IsValid(face)) {
3167 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilMaskSeparate", face, "face"); 3095 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilMaskSeparate", face, "face");
3168 return error::kNoError; 3096 return error::kNoError;
3169 } 3097 }
3170 bool changed = false; 3098 bool changed = false;
3171 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 3099 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
3172 changed |= state_.stencil_front_writemask != mask; 3100 changed |= state_.stencil_front_writemask != mask;
3173 } 3101 }
3174 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 3102 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
3175 changed |= state_.stencil_back_writemask != mask; 3103 changed |= state_.stencil_back_writemask != mask;
3176 } 3104 }
3177 if (changed) { 3105 if (changed) {
3178 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { 3106 if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
3179 state_.stencil_front_writemask = mask; 3107 state_.stencil_front_writemask = mask;
3180 } 3108 }
3181 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 3109 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
3182 state_.stencil_back_writemask = mask; 3110 state_.stencil_back_writemask = mask;
3183 } 3111 }
3184 framebuffer_state_.clear_state_dirty = true; 3112 framebuffer_state_.clear_state_dirty = true;
3185 } 3113 }
3186 return error::kNoError; 3114 return error::kNoError;
3187 } 3115 }
3188 3116
3189 error::Error GLES2DecoderImpl::HandleStencilOp(uint32_t immediate_data_size, 3117 error::Error GLES2DecoderImpl::HandleStencilOp(uint32_t immediate_data_size,
3190 const void* cmd_data) { 3118 const volatile void* cmd_data) {
3191 const gles2::cmds::StencilOp& c = 3119 const volatile gles2::cmds::StencilOp& c =
3192 *static_cast<const gles2::cmds::StencilOp*>(cmd_data); 3120 *static_cast<const volatile gles2::cmds::StencilOp*>(cmd_data);
3193 (void)c;
3194 GLenum fail = static_cast<GLenum>(c.fail); 3121 GLenum fail = static_cast<GLenum>(c.fail);
3195 GLenum zfail = static_cast<GLenum>(c.zfail); 3122 GLenum zfail = static_cast<GLenum>(c.zfail);
3196 GLenum zpass = static_cast<GLenum>(c.zpass); 3123 GLenum zpass = static_cast<GLenum>(c.zpass);
3197 if (!validators_->stencil_op.IsValid(fail)) { 3124 if (!validators_->stencil_op.IsValid(fail)) {
3198 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", fail, "fail"); 3125 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", fail, "fail");
3199 return error::kNoError; 3126 return error::kNoError;
3200 } 3127 }
3201 if (!validators_->stencil_op.IsValid(zfail)) { 3128 if (!validators_->stencil_op.IsValid(zfail)) {
3202 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zfail, "zfail"); 3129 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOp", zfail, "zfail");
3203 return error::kNoError; 3130 return error::kNoError;
(...skipping 14 matching lines...) Expand all
3218 state_.stencil_back_fail_op = fail; 3145 state_.stencil_back_fail_op = fail;
3219 state_.stencil_back_z_fail_op = zfail; 3146 state_.stencil_back_z_fail_op = zfail;
3220 state_.stencil_back_z_pass_op = zpass; 3147 state_.stencil_back_z_pass_op = zpass;
3221 glStencilOp(fail, zfail, zpass); 3148 glStencilOp(fail, zfail, zpass);
3222 } 3149 }
3223 return error::kNoError; 3150 return error::kNoError;
3224 } 3151 }
3225 3152
3226 error::Error GLES2DecoderImpl::HandleStencilOpSeparate( 3153 error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
3227 uint32_t immediate_data_size, 3154 uint32_t immediate_data_size,
3228 const void* cmd_data) { 3155 const volatile void* cmd_data) {
3229 const gles2::cmds::StencilOpSeparate& c = 3156 const volatile gles2::cmds::StencilOpSeparate& c =
3230 *static_cast<const gles2::cmds::StencilOpSeparate*>(cmd_data); 3157 *static_cast<const volatile gles2::cmds::StencilOpSeparate*>(cmd_data);
3231 (void)c;
3232 GLenum face = static_cast<GLenum>(c.face); 3158 GLenum face = static_cast<GLenum>(c.face);
3233 GLenum fail = static_cast<GLenum>(c.fail); 3159 GLenum fail = static_cast<GLenum>(c.fail);
3234 GLenum zfail = static_cast<GLenum>(c.zfail); 3160 GLenum zfail = static_cast<GLenum>(c.zfail);
3235 GLenum zpass = static_cast<GLenum>(c.zpass); 3161 GLenum zpass = static_cast<GLenum>(c.zpass);
3236 if (!validators_->face_type.IsValid(face)) { 3162 if (!validators_->face_type.IsValid(face)) {
3237 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", face, "face"); 3163 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", face, "face");
3238 return error::kNoError; 3164 return error::kNoError;
3239 } 3165 }
3240 if (!validators_->stencil_op.IsValid(fail)) { 3166 if (!validators_->stencil_op.IsValid(fail)) {
3241 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", fail, "fail"); 3167 LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilOpSeparate", fail, "fail");
(...skipping 27 matching lines...) Expand all
3269 if (face == GL_BACK || face == GL_FRONT_AND_BACK) { 3195 if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
3270 state_.stencil_back_fail_op = fail; 3196 state_.stencil_back_fail_op = fail;
3271 state_.stencil_back_z_fail_op = zfail; 3197 state_.stencil_back_z_fail_op = zfail;
3272 state_.stencil_back_z_pass_op = zpass; 3198 state_.stencil_back_z_pass_op = zpass;
3273 } 3199 }
3274 glStencilOpSeparate(face, fail, zfail, zpass); 3200 glStencilOpSeparate(face, fail, zfail, zpass);
3275 } 3201 }
3276 return error::kNoError; 3202 return error::kNoError;
3277 } 3203 }
3278 3204
3279 error::Error GLES2DecoderImpl::HandleTexParameterf(uint32_t immediate_data_size, 3205 error::Error GLES2DecoderImpl::HandleTexParameterf(
3280 const void* cmd_data) { 3206 uint32_t immediate_data_size,
3281 const gles2::cmds::TexParameterf& c = 3207 const volatile void* cmd_data) {
3282 *static_cast<const gles2::cmds::TexParameterf*>(cmd_data); 3208 const volatile gles2::cmds::TexParameterf& c =
3283 (void)c; 3209 *static_cast<const volatile gles2::cmds::TexParameterf*>(cmd_data);
3284 GLenum target = static_cast<GLenum>(c.target); 3210 GLenum target = static_cast<GLenum>(c.target);
3285 GLenum pname = static_cast<GLenum>(c.pname); 3211 GLenum pname = static_cast<GLenum>(c.pname);
3286 GLfloat param = static_cast<GLfloat>(c.param); 3212 GLfloat param = static_cast<GLfloat>(c.param);
3287 if (!validators_->texture_bind_target.IsValid(target)) { 3213 if (!validators_->texture_bind_target.IsValid(target)) {
3288 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", target, "target"); 3214 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", target, "target");
3289 return error::kNoError; 3215 return error::kNoError;
3290 } 3216 }
3291 if (!validators_->texture_parameter.IsValid(pname)) { 3217 if (!validators_->texture_parameter.IsValid(pname)) {
3292 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", pname, "pname"); 3218 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterf", pname, "pname");
3293 return error::kNoError; 3219 return error::kNoError;
3294 } 3220 }
3295 DoTexParameterf(target, pname, param); 3221 DoTexParameterf(target, pname, param);
3296 return error::kNoError; 3222 return error::kNoError;
3297 } 3223 }
3298 3224
3299 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( 3225 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate(
3300 uint32_t immediate_data_size, 3226 uint32_t immediate_data_size,
3301 const void* cmd_data) { 3227 const volatile void* cmd_data) {
3302 const gles2::cmds::TexParameterfvImmediate& c = 3228 const volatile gles2::cmds::TexParameterfvImmediate& c =
3303 *static_cast<const gles2::cmds::TexParameterfvImmediate*>(cmd_data); 3229 *static_cast<const volatile gles2::cmds::TexParameterfvImmediate*>(
3304 (void)c; 3230 cmd_data);
3305 GLenum target = static_cast<GLenum>(c.target); 3231 GLenum target = static_cast<GLenum>(c.target);
3306 GLenum pname = static_cast<GLenum>(c.pname); 3232 GLenum pname = static_cast<GLenum>(c.pname);
3307 uint32_t data_size; 3233 uint32_t data_size;
3308 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 3234 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
3309 return error::kOutOfBounds; 3235 return error::kOutOfBounds;
3310 } 3236 }
3311 if (data_size > immediate_data_size) { 3237 if (data_size > immediate_data_size) {
3312 return error::kOutOfBounds; 3238 return error::kOutOfBounds;
3313 } 3239 }
3314 const GLfloat* params = 3240 volatile const GLfloat* params = GetImmediateDataAs<volatile const GLfloat*>(
3315 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3241 c, data_size, immediate_data_size);
3316 if (!validators_->texture_bind_target.IsValid(target)) { 3242 if (!validators_->texture_bind_target.IsValid(target)) {
3317 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target"); 3243 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target");
3318 return error::kNoError; 3244 return error::kNoError;
3319 } 3245 }
3320 if (!validators_->texture_parameter.IsValid(pname)) { 3246 if (!validators_->texture_parameter.IsValid(pname)) {
3321 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname"); 3247 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname");
3322 return error::kNoError; 3248 return error::kNoError;
3323 } 3249 }
3324 if (params == NULL) { 3250 if (params == NULL) {
3325 return error::kOutOfBounds; 3251 return error::kOutOfBounds;
3326 } 3252 }
3327 DoTexParameterfv(target, pname, params); 3253 DoTexParameterfv(target, pname, params);
3328 return error::kNoError; 3254 return error::kNoError;
3329 } 3255 }
3330 3256
3331 error::Error GLES2DecoderImpl::HandleTexParameteri(uint32_t immediate_data_size, 3257 error::Error GLES2DecoderImpl::HandleTexParameteri(
3332 const void* cmd_data) { 3258 uint32_t immediate_data_size,
3333 const gles2::cmds::TexParameteri& c = 3259 const volatile void* cmd_data) {
3334 *static_cast<const gles2::cmds::TexParameteri*>(cmd_data); 3260 const volatile gles2::cmds::TexParameteri& c =
3335 (void)c; 3261 *static_cast<const volatile gles2::cmds::TexParameteri*>(cmd_data);
3336 GLenum target = static_cast<GLenum>(c.target); 3262 GLenum target = static_cast<GLenum>(c.target);
3337 GLenum pname = static_cast<GLenum>(c.pname); 3263 GLenum pname = static_cast<GLenum>(c.pname);
3338 GLint param = static_cast<GLint>(c.param); 3264 GLint param = static_cast<GLint>(c.param);
3339 if (!validators_->texture_bind_target.IsValid(target)) { 3265 if (!validators_->texture_bind_target.IsValid(target)) {
3340 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target"); 3266 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target");
3341 return error::kNoError; 3267 return error::kNoError;
3342 } 3268 }
3343 if (!validators_->texture_parameter.IsValid(pname)) { 3269 if (!validators_->texture_parameter.IsValid(pname)) {
3344 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname"); 3270 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname");
3345 return error::kNoError; 3271 return error::kNoError;
3346 } 3272 }
3347 DoTexParameteri(target, pname, param); 3273 DoTexParameteri(target, pname, param);
3348 return error::kNoError; 3274 return error::kNoError;
3349 } 3275 }
3350 3276
3351 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( 3277 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate(
3352 uint32_t immediate_data_size, 3278 uint32_t immediate_data_size,
3353 const void* cmd_data) { 3279 const volatile void* cmd_data) {
3354 const gles2::cmds::TexParameterivImmediate& c = 3280 const volatile gles2::cmds::TexParameterivImmediate& c =
3355 *static_cast<const gles2::cmds::TexParameterivImmediate*>(cmd_data); 3281 *static_cast<const volatile gles2::cmds::TexParameterivImmediate*>(
3356 (void)c; 3282 cmd_data);
3357 GLenum target = static_cast<GLenum>(c.target); 3283 GLenum target = static_cast<GLenum>(c.target);
3358 GLenum pname = static_cast<GLenum>(c.pname); 3284 GLenum pname = static_cast<GLenum>(c.pname);
3359 uint32_t data_size; 3285 uint32_t data_size;
3360 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { 3286 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
3361 return error::kOutOfBounds; 3287 return error::kOutOfBounds;
3362 } 3288 }
3363 if (data_size > immediate_data_size) { 3289 if (data_size > immediate_data_size) {
3364 return error::kOutOfBounds; 3290 return error::kOutOfBounds;
3365 } 3291 }
3366 const GLint* params = 3292 volatile const GLint* params = GetImmediateDataAs<volatile const GLint*>(
3367 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 3293 c, data_size, immediate_data_size);
3368 if (!validators_->texture_bind_target.IsValid(target)) { 3294 if (!validators_->texture_bind_target.IsValid(target)) {
3369 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target"); 3295 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target");
3370 return error::kNoError; 3296 return error::kNoError;
3371 } 3297 }
3372 if (!validators_->texture_parameter.IsValid(pname)) { 3298 if (!validators_->texture_parameter.IsValid(pname)) {
3373 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname"); 3299 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname");
3374 return error::kNoError; 3300 return error::kNoError;
3375 } 3301 }
3376 if (params == NULL) { 3302 if (params == NULL) {
3377 return error::kOutOfBounds; 3303 return error::kOutOfBounds;
3378 } 3304 }
3379 DoTexParameteriv(target, pname, params); 3305 DoTexParameteriv(target, pname, params);
3380 return error::kNoError; 3306 return error::kNoError;
3381 } 3307 }
3382 3308
3383 error::Error GLES2DecoderImpl::HandleTexStorage3D(uint32_t immediate_data_size, 3309 error::Error GLES2DecoderImpl::HandleTexStorage3D(
3384 const void* cmd_data) { 3310 uint32_t immediate_data_size,
3311 const volatile void* cmd_data) {
3385 if (!unsafe_es3_apis_enabled()) 3312 if (!unsafe_es3_apis_enabled())
3386 return error::kUnknownCommand; 3313 return error::kUnknownCommand;
3387 const gles2::cmds::TexStorage3D& c = 3314 const volatile gles2::cmds::TexStorage3D& c =
3388 *static_cast<const gles2::cmds::TexStorage3D*>(cmd_data); 3315 *static_cast<const volatile gles2::cmds::TexStorage3D*>(cmd_data);
3389 (void)c;
3390 GLenum target = static_cast<GLenum>(c.target); 3316 GLenum target = static_cast<GLenum>(c.target);
3391 GLsizei levels = static_cast<GLsizei>(c.levels); 3317 GLsizei levels = static_cast<GLsizei>(c.levels);
3392 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); 3318 GLenum internalFormat = static_cast<GLenum>(c.internalFormat);
3393 GLsizei width = static_cast<GLsizei>(c.width); 3319 GLsizei width = static_cast<GLsizei>(c.width);
3394 GLsizei height = static_cast<GLsizei>(c.height); 3320 GLsizei height = static_cast<GLsizei>(c.height);
3395 GLsizei depth = static_cast<GLsizei>(c.depth); 3321 GLsizei depth = static_cast<GLsizei>(c.depth);
3396 if (!validators_->texture_3_d_target.IsValid(target)) { 3322 if (!validators_->texture_3_d_target.IsValid(target)) {
3397 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage3D", target, "target"); 3323 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage3D", target, "target");
3398 return error::kNoError; 3324 return error::kNoError;
3399 } 3325 }
(...skipping 17 matching lines...) Expand all
3417 if (depth < 0) { 3343 if (depth < 0) {
3418 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "depth < 0"); 3344 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "depth < 0");
3419 return error::kNoError; 3345 return error::kNoError;
3420 } 3346 }
3421 DoTexStorage3D(target, levels, internalFormat, width, height, depth); 3347 DoTexStorage3D(target, levels, internalFormat, width, height, depth);
3422 return error::kNoError; 3348 return error::kNoError;
3423 } 3349 }
3424 3350
3425 error::Error GLES2DecoderImpl::HandleTransformFeedbackVaryingsBucket( 3351 error::Error GLES2DecoderImpl::HandleTransformFeedbackVaryingsBucket(
3426 uint32_t immediate_data_size, 3352 uint32_t immediate_data_size,
3427 const void* cmd_data) { 3353 const volatile void* cmd_data) {
3428 if (!unsafe_es3_apis_enabled()) 3354 if (!unsafe_es3_apis_enabled())
3429 return error::kUnknownCommand; 3355 return error::kUnknownCommand;
3430 const gles2::cmds::TransformFeedbackVaryingsBucket& c = 3356 const volatile gles2::cmds::TransformFeedbackVaryingsBucket& c = *static_cast<
3431 *static_cast<const gles2::cmds::TransformFeedbackVaryingsBucket*>( 3357 const volatile gles2::cmds::TransformFeedbackVaryingsBucket*>(cmd_data);
3432 cmd_data);
3433 (void)c;
3434 GLuint program = static_cast<GLuint>(c.program); 3358 GLuint program = static_cast<GLuint>(c.program);
3435 3359
3436 Bucket* bucket = GetBucket(c.varyings_bucket_id); 3360 Bucket* bucket = GetBucket(c.varyings_bucket_id);
3437 if (!bucket) { 3361 if (!bucket) {
3438 return error::kInvalidArguments; 3362 return error::kInvalidArguments;
3439 } 3363 }
3440 GLsizei count = 0; 3364 GLsizei count = 0;
3441 std::vector<char*> strs; 3365 std::vector<char*> strs;
3442 std::vector<GLint> len; 3366 std::vector<GLint> len;
3443 if (!bucket->GetAsStrings(&count, &strs, &len)) { 3367 if (!bucket->GetAsStrings(&count, &strs, &len)) {
3444 return error::kInvalidArguments; 3368 return error::kInvalidArguments;
3445 } 3369 }
3446 const char** varyings = 3370 const char** varyings =
3447 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; 3371 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL;
3448 const GLint* length = 3372 const GLint* length =
3449 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; 3373 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL;
3450 (void)length; 3374 (void)length;
3451 GLenum buffermode = static_cast<GLenum>(c.buffermode); 3375 GLenum buffermode = static_cast<GLenum>(c.buffermode);
3452 if (!validators_->buffer_mode.IsValid(buffermode)) { 3376 if (!validators_->buffer_mode.IsValid(buffermode)) {
3453 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTransformFeedbackVaryings", buffermode, 3377 LOCAL_SET_GL_ERROR_INVALID_ENUM("glTransformFeedbackVaryings", buffermode,
3454 "buffermode"); 3378 "buffermode");
3455 return error::kNoError; 3379 return error::kNoError;
3456 } 3380 }
3457 DoTransformFeedbackVaryings(program, count, varyings, buffermode); 3381 DoTransformFeedbackVaryings(program, count, varyings, buffermode);
3458 return error::kNoError; 3382 return error::kNoError;
3459 } 3383 }
3460 3384
3461 error::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size, 3385 error::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size,
3462 const void* cmd_data) { 3386 const volatile void* cmd_data) {
3463 const gles2::cmds::Uniform1f& c = 3387 const volatile gles2::cmds::Uniform1f& c =
3464 *static_cast<const gles2::cmds::Uniform1f*>(cmd_data); 3388 *static_cast<const volatile gles2::cmds::Uniform1f*>(cmd_data);
3465 (void)c;
3466 GLint location = static_cast<GLint>(c.location); 3389 GLint location = static_cast<GLint>(c.location);
3467 GLfloat x = static_cast<GLfloat>(c.x); 3390 GLfloat x = static_cast<GLfloat>(c.x);
3468 GLfloat temp[1] = { 3391 GLfloat temp[1] = {
3469 x, 3392 x,
3470 }; 3393 };
3471 DoUniform1fv(location, 1, &temp[0]); 3394 DoUniform1fv(location, 1, &temp[0]);
3472 return error::kNoError; 3395 return error::kNoError;
3473 } 3396 }
3474 3397
3475 error::Error GLES2DecoderImpl::HandleUniform1fvImmediate( 3398 error::Error GLES2DecoderImpl::HandleUniform1fvImmediate(
3476 uint32_t immediate_data_size, 3399 uint32_t immediate_data_size,
3477 const void* cmd_data) { 3400 const volatile void* cmd_data) {
3478 const gles2::cmds::Uniform1fvImmediate& c = 3401 const volatile gles2::cmds::Uniform1fvImmediate& c =
3479 *static_cast<const gles2::cmds::Uniform1fvImmediate*>(cmd_data); 3402 *static_cast<const volatile gles2::cmds::Uniform1fvImmediate*>(cmd_data);
3480 (void)c;
3481 GLint location = static_cast<GLint>(c.location); 3403 GLint location = static_cast<GLint>(c.location);
3482 GLsizei count = static_cast<GLsizei>(c.count); 3404 GLsizei count = static_cast<GLsizei>(c.count);
3483 uint32_t data_size = 0; 3405 uint32_t data_size = 0;
3484 if (count >= 0 && 3406 if (count >= 0 &&
3485 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) { 3407 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) {
3486 return error::kOutOfBounds; 3408 return error::kOutOfBounds;
3487 } 3409 }
3488 if (data_size > immediate_data_size) { 3410 if (data_size > immediate_data_size) {
3489 return error::kOutOfBounds; 3411 return error::kOutOfBounds;
3490 } 3412 }
3491 const GLfloat* v = 3413 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>(
3492 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3414 c, data_size, immediate_data_size);
3493 if (count < 0) { 3415 if (count < 0) {
3494 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1fv", "count < 0"); 3416 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1fv", "count < 0");
3495 return error::kNoError; 3417 return error::kNoError;
3496 } 3418 }
3497 if (v == NULL) { 3419 if (v == NULL) {
3498 return error::kOutOfBounds; 3420 return error::kOutOfBounds;
3499 } 3421 }
3500 DoUniform1fv(location, count, v); 3422 DoUniform1fv(location, count, v);
3501 return error::kNoError; 3423 return error::kNoError;
3502 } 3424 }
3503 3425
3504 error::Error GLES2DecoderImpl::HandleUniform1i(uint32_t immediate_data_size, 3426 error::Error GLES2DecoderImpl::HandleUniform1i(uint32_t immediate_data_size,
3505 const void* cmd_data) { 3427 const volatile void* cmd_data) {
3506 const gles2::cmds::Uniform1i& c = 3428 const volatile gles2::cmds::Uniform1i& c =
3507 *static_cast<const gles2::cmds::Uniform1i*>(cmd_data); 3429 *static_cast<const volatile gles2::cmds::Uniform1i*>(cmd_data);
3508 (void)c;
3509 GLint location = static_cast<GLint>(c.location); 3430 GLint location = static_cast<GLint>(c.location);
3510 GLint x = static_cast<GLint>(c.x); 3431 GLint x = static_cast<GLint>(c.x);
3511 DoUniform1i(location, x); 3432 DoUniform1i(location, x);
3512 return error::kNoError; 3433 return error::kNoError;
3513 } 3434 }
3514 3435
3515 error::Error GLES2DecoderImpl::HandleUniform1ivImmediate( 3436 error::Error GLES2DecoderImpl::HandleUniform1ivImmediate(
3516 uint32_t immediate_data_size, 3437 uint32_t immediate_data_size,
3517 const void* cmd_data) { 3438 const volatile void* cmd_data) {
3518 const gles2::cmds::Uniform1ivImmediate& c = 3439 const volatile gles2::cmds::Uniform1ivImmediate& c =
3519 *static_cast<const gles2::cmds::Uniform1ivImmediate*>(cmd_data); 3440 *static_cast<const volatile gles2::cmds::Uniform1ivImmediate*>(cmd_data);
3520 (void)c;
3521 GLint location = static_cast<GLint>(c.location); 3441 GLint location = static_cast<GLint>(c.location);
3522 GLsizei count = static_cast<GLsizei>(c.count); 3442 GLsizei count = static_cast<GLsizei>(c.count);
3523 uint32_t data_size = 0; 3443 uint32_t data_size = 0;
3524 if (count >= 0 && 3444 if (count >= 0 &&
3525 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 1, &data_size)) { 3445 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 1, &data_size)) {
3526 return error::kOutOfBounds; 3446 return error::kOutOfBounds;
3527 } 3447 }
3528 if (data_size > immediate_data_size) { 3448 if (data_size > immediate_data_size) {
3529 return error::kOutOfBounds; 3449 return error::kOutOfBounds;
3530 } 3450 }
3531 const GLint* v = 3451 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>(
3532 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 3452 c, data_size, immediate_data_size);
3533 if (count < 0) { 3453 if (count < 0) {
3534 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1iv", "count < 0"); 3454 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1iv", "count < 0");
3535 return error::kNoError; 3455 return error::kNoError;
3536 } 3456 }
3537 if (v == NULL) { 3457 if (v == NULL) {
3538 return error::kOutOfBounds; 3458 return error::kOutOfBounds;
3539 } 3459 }
3540 DoUniform1iv(location, count, v); 3460 DoUniform1iv(location, count, v);
3541 return error::kNoError; 3461 return error::kNoError;
3542 } 3462 }
3543 3463
3544 error::Error GLES2DecoderImpl::HandleUniform1ui(uint32_t immediate_data_size, 3464 error::Error GLES2DecoderImpl::HandleUniform1ui(uint32_t immediate_data_size,
3545 const void* cmd_data) { 3465 const volatile void* cmd_data) {
3546 if (!unsafe_es3_apis_enabled()) 3466 if (!unsafe_es3_apis_enabled())
3547 return error::kUnknownCommand; 3467 return error::kUnknownCommand;
3548 const gles2::cmds::Uniform1ui& c = 3468 const volatile gles2::cmds::Uniform1ui& c =
3549 *static_cast<const gles2::cmds::Uniform1ui*>(cmd_data); 3469 *static_cast<const volatile gles2::cmds::Uniform1ui*>(cmd_data);
3550 (void)c;
3551 GLint location = static_cast<GLint>(c.location); 3470 GLint location = static_cast<GLint>(c.location);
3552 GLuint x = static_cast<GLuint>(c.x); 3471 GLuint x = static_cast<GLuint>(c.x);
3553 GLuint temp[1] = { 3472 GLuint temp[1] = {
3554 x, 3473 x,
3555 }; 3474 };
3556 DoUniform1uiv(location, 1, &temp[0]); 3475 DoUniform1uiv(location, 1, &temp[0]);
3557 return error::kNoError; 3476 return error::kNoError;
3558 } 3477 }
3559 3478
3560 error::Error GLES2DecoderImpl::HandleUniform1uivImmediate( 3479 error::Error GLES2DecoderImpl::HandleUniform1uivImmediate(
3561 uint32_t immediate_data_size, 3480 uint32_t immediate_data_size,
3562 const void* cmd_data) { 3481 const volatile void* cmd_data) {
3563 if (!unsafe_es3_apis_enabled()) 3482 if (!unsafe_es3_apis_enabled())
3564 return error::kUnknownCommand; 3483 return error::kUnknownCommand;
3565 const gles2::cmds::Uniform1uivImmediate& c = 3484 const volatile gles2::cmds::Uniform1uivImmediate& c =
3566 *static_cast<const gles2::cmds::Uniform1uivImmediate*>(cmd_data); 3485 *static_cast<const volatile gles2::cmds::Uniform1uivImmediate*>(cmd_data);
3567 (void)c;
3568 GLint location = static_cast<GLint>(c.location); 3486 GLint location = static_cast<GLint>(c.location);
3569 GLsizei count = static_cast<GLsizei>(c.count); 3487 GLsizei count = static_cast<GLsizei>(c.count);
3570 uint32_t data_size = 0; 3488 uint32_t data_size = 0;
3571 if (count >= 0 && 3489 if (count >= 0 &&
3572 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { 3490 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) {
3573 return error::kOutOfBounds; 3491 return error::kOutOfBounds;
3574 } 3492 }
3575 if (data_size > immediate_data_size) { 3493 if (data_size > immediate_data_size) {
3576 return error::kOutOfBounds; 3494 return error::kOutOfBounds;
3577 } 3495 }
3578 const GLuint* v = 3496 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>(
3579 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 3497 c, data_size, immediate_data_size);
3580 if (count < 0) { 3498 if (count < 0) {
3581 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1uiv", "count < 0"); 3499 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform1uiv", "count < 0");
3582 return error::kNoError; 3500 return error::kNoError;
3583 } 3501 }
3584 if (v == NULL) { 3502 if (v == NULL) {
3585 return error::kOutOfBounds; 3503 return error::kOutOfBounds;
3586 } 3504 }
3587 DoUniform1uiv(location, count, v); 3505 DoUniform1uiv(location, count, v);
3588 return error::kNoError; 3506 return error::kNoError;
3589 } 3507 }
3590 3508
3591 error::Error GLES2DecoderImpl::HandleUniform2f(uint32_t immediate_data_size, 3509 error::Error GLES2DecoderImpl::HandleUniform2f(uint32_t immediate_data_size,
3592 const void* cmd_data) { 3510 const volatile void* cmd_data) {
3593 const gles2::cmds::Uniform2f& c = 3511 const volatile gles2::cmds::Uniform2f& c =
3594 *static_cast<const gles2::cmds::Uniform2f*>(cmd_data); 3512 *static_cast<const volatile gles2::cmds::Uniform2f*>(cmd_data);
3595 (void)c;
3596 GLint location = static_cast<GLint>(c.location); 3513 GLint location = static_cast<GLint>(c.location);
3597 GLfloat x = static_cast<GLfloat>(c.x); 3514 GLfloat x = static_cast<GLfloat>(c.x);
3598 GLfloat y = static_cast<GLfloat>(c.y); 3515 GLfloat y = static_cast<GLfloat>(c.y);
3599 GLfloat temp[2] = { 3516 GLfloat temp[2] = {
3600 x, y, 3517 x, y,
3601 }; 3518 };
3602 DoUniform2fv(location, 1, &temp[0]); 3519 DoUniform2fv(location, 1, &temp[0]);
3603 return error::kNoError; 3520 return error::kNoError;
3604 } 3521 }
3605 3522
3606 error::Error GLES2DecoderImpl::HandleUniform2fvImmediate( 3523 error::Error GLES2DecoderImpl::HandleUniform2fvImmediate(
3607 uint32_t immediate_data_size, 3524 uint32_t immediate_data_size,
3608 const void* cmd_data) { 3525 const volatile void* cmd_data) {
3609 const gles2::cmds::Uniform2fvImmediate& c = 3526 const volatile gles2::cmds::Uniform2fvImmediate& c =
3610 *static_cast<const gles2::cmds::Uniform2fvImmediate*>(cmd_data); 3527 *static_cast<const volatile gles2::cmds::Uniform2fvImmediate*>(cmd_data);
3611 (void)c;
3612 GLint location = static_cast<GLint>(c.location); 3528 GLint location = static_cast<GLint>(c.location);
3613 GLsizei count = static_cast<GLsizei>(c.count); 3529 GLsizei count = static_cast<GLsizei>(c.count);
3614 uint32_t data_size = 0; 3530 uint32_t data_size = 0;
3615 if (count >= 0 && 3531 if (count >= 0 &&
3616 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) { 3532 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) {
3617 return error::kOutOfBounds; 3533 return error::kOutOfBounds;
3618 } 3534 }
3619 if (data_size > immediate_data_size) { 3535 if (data_size > immediate_data_size) {
3620 return error::kOutOfBounds; 3536 return error::kOutOfBounds;
3621 } 3537 }
3622 const GLfloat* v = 3538 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>(
3623 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3539 c, data_size, immediate_data_size);
3624 if (count < 0) { 3540 if (count < 0) {
3625 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2fv", "count < 0"); 3541 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2fv", "count < 0");
3626 return error::kNoError; 3542 return error::kNoError;
3627 } 3543 }
3628 if (v == NULL) { 3544 if (v == NULL) {
3629 return error::kOutOfBounds; 3545 return error::kOutOfBounds;
3630 } 3546 }
3631 DoUniform2fv(location, count, v); 3547 DoUniform2fv(location, count, v);
3632 return error::kNoError; 3548 return error::kNoError;
3633 } 3549 }
3634 3550
3635 error::Error GLES2DecoderImpl::HandleUniform2i(uint32_t immediate_data_size, 3551 error::Error GLES2DecoderImpl::HandleUniform2i(uint32_t immediate_data_size,
3636 const void* cmd_data) { 3552 const volatile void* cmd_data) {
3637 const gles2::cmds::Uniform2i& c = 3553 const volatile gles2::cmds::Uniform2i& c =
3638 *static_cast<const gles2::cmds::Uniform2i*>(cmd_data); 3554 *static_cast<const volatile gles2::cmds::Uniform2i*>(cmd_data);
3639 (void)c;
3640 GLint location = static_cast<GLint>(c.location); 3555 GLint location = static_cast<GLint>(c.location);
3641 GLint x = static_cast<GLint>(c.x); 3556 GLint x = static_cast<GLint>(c.x);
3642 GLint y = static_cast<GLint>(c.y); 3557 GLint y = static_cast<GLint>(c.y);
3643 GLint temp[2] = { 3558 GLint temp[2] = {
3644 x, y, 3559 x, y,
3645 }; 3560 };
3646 DoUniform2iv(location, 1, &temp[0]); 3561 DoUniform2iv(location, 1, &temp[0]);
3647 return error::kNoError; 3562 return error::kNoError;
3648 } 3563 }
3649 3564
3650 error::Error GLES2DecoderImpl::HandleUniform2ivImmediate( 3565 error::Error GLES2DecoderImpl::HandleUniform2ivImmediate(
3651 uint32_t immediate_data_size, 3566 uint32_t immediate_data_size,
3652 const void* cmd_data) { 3567 const volatile void* cmd_data) {
3653 const gles2::cmds::Uniform2ivImmediate& c = 3568 const volatile gles2::cmds::Uniform2ivImmediate& c =
3654 *static_cast<const gles2::cmds::Uniform2ivImmediate*>(cmd_data); 3569 *static_cast<const volatile gles2::cmds::Uniform2ivImmediate*>(cmd_data);
3655 (void)c;
3656 GLint location = static_cast<GLint>(c.location); 3570 GLint location = static_cast<GLint>(c.location);
3657 GLsizei count = static_cast<GLsizei>(c.count); 3571 GLsizei count = static_cast<GLsizei>(c.count);
3658 uint32_t data_size = 0; 3572 uint32_t data_size = 0;
3659 if (count >= 0 && 3573 if (count >= 0 &&
3660 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 2, &data_size)) { 3574 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 2, &data_size)) {
3661 return error::kOutOfBounds; 3575 return error::kOutOfBounds;
3662 } 3576 }
3663 if (data_size > immediate_data_size) { 3577 if (data_size > immediate_data_size) {
3664 return error::kOutOfBounds; 3578 return error::kOutOfBounds;
3665 } 3579 }
3666 const GLint* v = 3580 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>(
3667 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 3581 c, data_size, immediate_data_size);
3668 if (count < 0) { 3582 if (count < 0) {
3669 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2iv", "count < 0"); 3583 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2iv", "count < 0");
3670 return error::kNoError; 3584 return error::kNoError;
3671 } 3585 }
3672 if (v == NULL) { 3586 if (v == NULL) {
3673 return error::kOutOfBounds; 3587 return error::kOutOfBounds;
3674 } 3588 }
3675 DoUniform2iv(location, count, v); 3589 DoUniform2iv(location, count, v);
3676 return error::kNoError; 3590 return error::kNoError;
3677 } 3591 }
3678 3592
3679 error::Error GLES2DecoderImpl::HandleUniform2ui(uint32_t immediate_data_size, 3593 error::Error GLES2DecoderImpl::HandleUniform2ui(uint32_t immediate_data_size,
3680 const void* cmd_data) { 3594 const volatile void* cmd_data) {
3681 if (!unsafe_es3_apis_enabled()) 3595 if (!unsafe_es3_apis_enabled())
3682 return error::kUnknownCommand; 3596 return error::kUnknownCommand;
3683 const gles2::cmds::Uniform2ui& c = 3597 const volatile gles2::cmds::Uniform2ui& c =
3684 *static_cast<const gles2::cmds::Uniform2ui*>(cmd_data); 3598 *static_cast<const volatile gles2::cmds::Uniform2ui*>(cmd_data);
3685 (void)c;
3686 GLint location = static_cast<GLint>(c.location); 3599 GLint location = static_cast<GLint>(c.location);
3687 GLuint x = static_cast<GLuint>(c.x); 3600 GLuint x = static_cast<GLuint>(c.x);
3688 GLuint y = static_cast<GLuint>(c.y); 3601 GLuint y = static_cast<GLuint>(c.y);
3689 GLuint temp[2] = { 3602 GLuint temp[2] = {
3690 x, y, 3603 x, y,
3691 }; 3604 };
3692 DoUniform2uiv(location, 1, &temp[0]); 3605 DoUniform2uiv(location, 1, &temp[0]);
3693 return error::kNoError; 3606 return error::kNoError;
3694 } 3607 }
3695 3608
3696 error::Error GLES2DecoderImpl::HandleUniform2uivImmediate( 3609 error::Error GLES2DecoderImpl::HandleUniform2uivImmediate(
3697 uint32_t immediate_data_size, 3610 uint32_t immediate_data_size,
3698 const void* cmd_data) { 3611 const volatile void* cmd_data) {
3699 if (!unsafe_es3_apis_enabled()) 3612 if (!unsafe_es3_apis_enabled())
3700 return error::kUnknownCommand; 3613 return error::kUnknownCommand;
3701 const gles2::cmds::Uniform2uivImmediate& c = 3614 const volatile gles2::cmds::Uniform2uivImmediate& c =
3702 *static_cast<const gles2::cmds::Uniform2uivImmediate*>(cmd_data); 3615 *static_cast<const volatile gles2::cmds::Uniform2uivImmediate*>(cmd_data);
3703 (void)c;
3704 GLint location = static_cast<GLint>(c.location); 3616 GLint location = static_cast<GLint>(c.location);
3705 GLsizei count = static_cast<GLsizei>(c.count); 3617 GLsizei count = static_cast<GLsizei>(c.count);
3706 uint32_t data_size = 0; 3618 uint32_t data_size = 0;
3707 if (count >= 0 && 3619 if (count >= 0 &&
3708 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 2, &data_size)) { 3620 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 2, &data_size)) {
3709 return error::kOutOfBounds; 3621 return error::kOutOfBounds;
3710 } 3622 }
3711 if (data_size > immediate_data_size) { 3623 if (data_size > immediate_data_size) {
3712 return error::kOutOfBounds; 3624 return error::kOutOfBounds;
3713 } 3625 }
3714 const GLuint* v = 3626 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>(
3715 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 3627 c, data_size, immediate_data_size);
3716 if (count < 0) { 3628 if (count < 0) {
3717 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2uiv", "count < 0"); 3629 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform2uiv", "count < 0");
3718 return error::kNoError; 3630 return error::kNoError;
3719 } 3631 }
3720 if (v == NULL) { 3632 if (v == NULL) {
3721 return error::kOutOfBounds; 3633 return error::kOutOfBounds;
3722 } 3634 }
3723 DoUniform2uiv(location, count, v); 3635 DoUniform2uiv(location, count, v);
3724 return error::kNoError; 3636 return error::kNoError;
3725 } 3637 }
3726 3638
3727 error::Error GLES2DecoderImpl::HandleUniform3f(uint32_t immediate_data_size, 3639 error::Error GLES2DecoderImpl::HandleUniform3f(uint32_t immediate_data_size,
3728 const void* cmd_data) { 3640 const volatile void* cmd_data) {
3729 const gles2::cmds::Uniform3f& c = 3641 const volatile gles2::cmds::Uniform3f& c =
3730 *static_cast<const gles2::cmds::Uniform3f*>(cmd_data); 3642 *static_cast<const volatile gles2::cmds::Uniform3f*>(cmd_data);
3731 (void)c;
3732 GLint location = static_cast<GLint>(c.location); 3643 GLint location = static_cast<GLint>(c.location);
3733 GLfloat x = static_cast<GLfloat>(c.x); 3644 GLfloat x = static_cast<GLfloat>(c.x);
3734 GLfloat y = static_cast<GLfloat>(c.y); 3645 GLfloat y = static_cast<GLfloat>(c.y);
3735 GLfloat z = static_cast<GLfloat>(c.z); 3646 GLfloat z = static_cast<GLfloat>(c.z);
3736 GLfloat temp[3] = { 3647 GLfloat temp[3] = {
3737 x, y, z, 3648 x, y, z,
3738 }; 3649 };
3739 DoUniform3fv(location, 1, &temp[0]); 3650 DoUniform3fv(location, 1, &temp[0]);
3740 return error::kNoError; 3651 return error::kNoError;
3741 } 3652 }
3742 3653
3743 error::Error GLES2DecoderImpl::HandleUniform3fvImmediate( 3654 error::Error GLES2DecoderImpl::HandleUniform3fvImmediate(
3744 uint32_t immediate_data_size, 3655 uint32_t immediate_data_size,
3745 const void* cmd_data) { 3656 const volatile void* cmd_data) {
3746 const gles2::cmds::Uniform3fvImmediate& c = 3657 const volatile gles2::cmds::Uniform3fvImmediate& c =
3747 *static_cast<const gles2::cmds::Uniform3fvImmediate*>(cmd_data); 3658 *static_cast<const volatile gles2::cmds::Uniform3fvImmediate*>(cmd_data);
3748 (void)c;
3749 GLint location = static_cast<GLint>(c.location); 3659 GLint location = static_cast<GLint>(c.location);
3750 GLsizei count = static_cast<GLsizei>(c.count); 3660 GLsizei count = static_cast<GLsizei>(c.count);
3751 uint32_t data_size = 0; 3661 uint32_t data_size = 0;
3752 if (count >= 0 && 3662 if (count >= 0 &&
3753 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) { 3663 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) {
3754 return error::kOutOfBounds; 3664 return error::kOutOfBounds;
3755 } 3665 }
3756 if (data_size > immediate_data_size) { 3666 if (data_size > immediate_data_size) {
3757 return error::kOutOfBounds; 3667 return error::kOutOfBounds;
3758 } 3668 }
3759 const GLfloat* v = 3669 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>(
3760 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3670 c, data_size, immediate_data_size);
3761 if (count < 0) { 3671 if (count < 0) {
3762 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3fv", "count < 0"); 3672 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3fv", "count < 0");
3763 return error::kNoError; 3673 return error::kNoError;
3764 } 3674 }
3765 if (v == NULL) { 3675 if (v == NULL) {
3766 return error::kOutOfBounds; 3676 return error::kOutOfBounds;
3767 } 3677 }
3768 DoUniform3fv(location, count, v); 3678 DoUniform3fv(location, count, v);
3769 return error::kNoError; 3679 return error::kNoError;
3770 } 3680 }
3771 3681
3772 error::Error GLES2DecoderImpl::HandleUniform3i(uint32_t immediate_data_size, 3682 error::Error GLES2DecoderImpl::HandleUniform3i(uint32_t immediate_data_size,
3773 const void* cmd_data) { 3683 const volatile void* cmd_data) {
3774 const gles2::cmds::Uniform3i& c = 3684 const volatile gles2::cmds::Uniform3i& c =
3775 *static_cast<const gles2::cmds::Uniform3i*>(cmd_data); 3685 *static_cast<const volatile gles2::cmds::Uniform3i*>(cmd_data);
3776 (void)c;
3777 GLint location = static_cast<GLint>(c.location); 3686 GLint location = static_cast<GLint>(c.location);
3778 GLint x = static_cast<GLint>(c.x); 3687 GLint x = static_cast<GLint>(c.x);
3779 GLint y = static_cast<GLint>(c.y); 3688 GLint y = static_cast<GLint>(c.y);
3780 GLint z = static_cast<GLint>(c.z); 3689 GLint z = static_cast<GLint>(c.z);
3781 GLint temp[3] = { 3690 GLint temp[3] = {
3782 x, y, z, 3691 x, y, z,
3783 }; 3692 };
3784 DoUniform3iv(location, 1, &temp[0]); 3693 DoUniform3iv(location, 1, &temp[0]);
3785 return error::kNoError; 3694 return error::kNoError;
3786 } 3695 }
3787 3696
3788 error::Error GLES2DecoderImpl::HandleUniform3ivImmediate( 3697 error::Error GLES2DecoderImpl::HandleUniform3ivImmediate(
3789 uint32_t immediate_data_size, 3698 uint32_t immediate_data_size,
3790 const void* cmd_data) { 3699 const volatile void* cmd_data) {
3791 const gles2::cmds::Uniform3ivImmediate& c = 3700 const volatile gles2::cmds::Uniform3ivImmediate& c =
3792 *static_cast<const gles2::cmds::Uniform3ivImmediate*>(cmd_data); 3701 *static_cast<const volatile gles2::cmds::Uniform3ivImmediate*>(cmd_data);
3793 (void)c;
3794 GLint location = static_cast<GLint>(c.location); 3702 GLint location = static_cast<GLint>(c.location);
3795 GLsizei count = static_cast<GLsizei>(c.count); 3703 GLsizei count = static_cast<GLsizei>(c.count);
3796 uint32_t data_size = 0; 3704 uint32_t data_size = 0;
3797 if (count >= 0 && 3705 if (count >= 0 &&
3798 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 3, &data_size)) { 3706 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 3, &data_size)) {
3799 return error::kOutOfBounds; 3707 return error::kOutOfBounds;
3800 } 3708 }
3801 if (data_size > immediate_data_size) { 3709 if (data_size > immediate_data_size) {
3802 return error::kOutOfBounds; 3710 return error::kOutOfBounds;
3803 } 3711 }
3804 const GLint* v = 3712 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>(
3805 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 3713 c, data_size, immediate_data_size);
3806 if (count < 0) { 3714 if (count < 0) {
3807 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3iv", "count < 0"); 3715 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3iv", "count < 0");
3808 return error::kNoError; 3716 return error::kNoError;
3809 } 3717 }
3810 if (v == NULL) { 3718 if (v == NULL) {
3811 return error::kOutOfBounds; 3719 return error::kOutOfBounds;
3812 } 3720 }
3813 DoUniform3iv(location, count, v); 3721 DoUniform3iv(location, count, v);
3814 return error::kNoError; 3722 return error::kNoError;
3815 } 3723 }
3816 3724
3817 error::Error GLES2DecoderImpl::HandleUniform3ui(uint32_t immediate_data_size, 3725 error::Error GLES2DecoderImpl::HandleUniform3ui(uint32_t immediate_data_size,
3818 const void* cmd_data) { 3726 const volatile void* cmd_data) {
3819 if (!unsafe_es3_apis_enabled()) 3727 if (!unsafe_es3_apis_enabled())
3820 return error::kUnknownCommand; 3728 return error::kUnknownCommand;
3821 const gles2::cmds::Uniform3ui& c = 3729 const volatile gles2::cmds::Uniform3ui& c =
3822 *static_cast<const gles2::cmds::Uniform3ui*>(cmd_data); 3730 *static_cast<const volatile gles2::cmds::Uniform3ui*>(cmd_data);
3823 (void)c;
3824 GLint location = static_cast<GLint>(c.location); 3731 GLint location = static_cast<GLint>(c.location);
3825 GLuint x = static_cast<GLuint>(c.x); 3732 GLuint x = static_cast<GLuint>(c.x);
3826 GLuint y = static_cast<GLuint>(c.y); 3733 GLuint y = static_cast<GLuint>(c.y);
3827 GLuint z = static_cast<GLuint>(c.z); 3734 GLuint z = static_cast<GLuint>(c.z);
3828 GLuint temp[3] = { 3735 GLuint temp[3] = {
3829 x, y, z, 3736 x, y, z,
3830 }; 3737 };
3831 DoUniform3uiv(location, 1, &temp[0]); 3738 DoUniform3uiv(location, 1, &temp[0]);
3832 return error::kNoError; 3739 return error::kNoError;
3833 } 3740 }
3834 3741
3835 error::Error GLES2DecoderImpl::HandleUniform3uivImmediate( 3742 error::Error GLES2DecoderImpl::HandleUniform3uivImmediate(
3836 uint32_t immediate_data_size, 3743 uint32_t immediate_data_size,
3837 const void* cmd_data) { 3744 const volatile void* cmd_data) {
3838 if (!unsafe_es3_apis_enabled()) 3745 if (!unsafe_es3_apis_enabled())
3839 return error::kUnknownCommand; 3746 return error::kUnknownCommand;
3840 const gles2::cmds::Uniform3uivImmediate& c = 3747 const volatile gles2::cmds::Uniform3uivImmediate& c =
3841 *static_cast<const gles2::cmds::Uniform3uivImmediate*>(cmd_data); 3748 *static_cast<const volatile gles2::cmds::Uniform3uivImmediate*>(cmd_data);
3842 (void)c;
3843 GLint location = static_cast<GLint>(c.location); 3749 GLint location = static_cast<GLint>(c.location);
3844 GLsizei count = static_cast<GLsizei>(c.count); 3750 GLsizei count = static_cast<GLsizei>(c.count);
3845 uint32_t data_size = 0; 3751 uint32_t data_size = 0;
3846 if (count >= 0 && 3752 if (count >= 0 &&
3847 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 3, &data_size)) { 3753 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 3, &data_size)) {
3848 return error::kOutOfBounds; 3754 return error::kOutOfBounds;
3849 } 3755 }
3850 if (data_size > immediate_data_size) { 3756 if (data_size > immediate_data_size) {
3851 return error::kOutOfBounds; 3757 return error::kOutOfBounds;
3852 } 3758 }
3853 const GLuint* v = 3759 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>(
3854 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 3760 c, data_size, immediate_data_size);
3855 if (count < 0) { 3761 if (count < 0) {
3856 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3uiv", "count < 0"); 3762 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform3uiv", "count < 0");
3857 return error::kNoError; 3763 return error::kNoError;
3858 } 3764 }
3859 if (v == NULL) { 3765 if (v == NULL) {
3860 return error::kOutOfBounds; 3766 return error::kOutOfBounds;
3861 } 3767 }
3862 DoUniform3uiv(location, count, v); 3768 DoUniform3uiv(location, count, v);
3863 return error::kNoError; 3769 return error::kNoError;
3864 } 3770 }
3865 3771
3866 error::Error GLES2DecoderImpl::HandleUniform4f(uint32_t immediate_data_size, 3772 error::Error GLES2DecoderImpl::HandleUniform4f(uint32_t immediate_data_size,
3867 const void* cmd_data) { 3773 const volatile void* cmd_data) {
3868 const gles2::cmds::Uniform4f& c = 3774 const volatile gles2::cmds::Uniform4f& c =
3869 *static_cast<const gles2::cmds::Uniform4f*>(cmd_data); 3775 *static_cast<const volatile gles2::cmds::Uniform4f*>(cmd_data);
3870 (void)c;
3871 GLint location = static_cast<GLint>(c.location); 3776 GLint location = static_cast<GLint>(c.location);
3872 GLfloat x = static_cast<GLfloat>(c.x); 3777 GLfloat x = static_cast<GLfloat>(c.x);
3873 GLfloat y = static_cast<GLfloat>(c.y); 3778 GLfloat y = static_cast<GLfloat>(c.y);
3874 GLfloat z = static_cast<GLfloat>(c.z); 3779 GLfloat z = static_cast<GLfloat>(c.z);
3875 GLfloat w = static_cast<GLfloat>(c.w); 3780 GLfloat w = static_cast<GLfloat>(c.w);
3876 GLfloat temp[4] = { 3781 GLfloat temp[4] = {
3877 x, y, z, w, 3782 x, y, z, w,
3878 }; 3783 };
3879 DoUniform4fv(location, 1, &temp[0]); 3784 DoUniform4fv(location, 1, &temp[0]);
3880 return error::kNoError; 3785 return error::kNoError;
3881 } 3786 }
3882 3787
3883 error::Error GLES2DecoderImpl::HandleUniform4fvImmediate( 3788 error::Error GLES2DecoderImpl::HandleUniform4fvImmediate(
3884 uint32_t immediate_data_size, 3789 uint32_t immediate_data_size,
3885 const void* cmd_data) { 3790 const volatile void* cmd_data) {
3886 const gles2::cmds::Uniform4fvImmediate& c = 3791 const volatile gles2::cmds::Uniform4fvImmediate& c =
3887 *static_cast<const gles2::cmds::Uniform4fvImmediate*>(cmd_data); 3792 *static_cast<const volatile gles2::cmds::Uniform4fvImmediate*>(cmd_data);
3888 (void)c;
3889 GLint location = static_cast<GLint>(c.location); 3793 GLint location = static_cast<GLint>(c.location);
3890 GLsizei count = static_cast<GLsizei>(c.count); 3794 GLsizei count = static_cast<GLsizei>(c.count);
3891 uint32_t data_size = 0; 3795 uint32_t data_size = 0;
3892 if (count >= 0 && 3796 if (count >= 0 &&
3893 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { 3797 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
3894 return error::kOutOfBounds; 3798 return error::kOutOfBounds;
3895 } 3799 }
3896 if (data_size > immediate_data_size) { 3800 if (data_size > immediate_data_size) {
3897 return error::kOutOfBounds; 3801 return error::kOutOfBounds;
3898 } 3802 }
3899 const GLfloat* v = 3803 volatile const GLfloat* v = GetImmediateDataAs<volatile const GLfloat*>(
3900 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3804 c, data_size, immediate_data_size);
3901 if (count < 0) { 3805 if (count < 0) {
3902 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4fv", "count < 0"); 3806 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4fv", "count < 0");
3903 return error::kNoError; 3807 return error::kNoError;
3904 } 3808 }
3905 if (v == NULL) { 3809 if (v == NULL) {
3906 return error::kOutOfBounds; 3810 return error::kOutOfBounds;
3907 } 3811 }
3908 DoUniform4fv(location, count, v); 3812 DoUniform4fv(location, count, v);
3909 return error::kNoError; 3813 return error::kNoError;
3910 } 3814 }
3911 3815
3912 error::Error GLES2DecoderImpl::HandleUniform4i(uint32_t immediate_data_size, 3816 error::Error GLES2DecoderImpl::HandleUniform4i(uint32_t immediate_data_size,
3913 const void* cmd_data) { 3817 const volatile void* cmd_data) {
3914 const gles2::cmds::Uniform4i& c = 3818 const volatile gles2::cmds::Uniform4i& c =
3915 *static_cast<const gles2::cmds::Uniform4i*>(cmd_data); 3819 *static_cast<const volatile gles2::cmds::Uniform4i*>(cmd_data);
3916 (void)c;
3917 GLint location = static_cast<GLint>(c.location); 3820 GLint location = static_cast<GLint>(c.location);
3918 GLint x = static_cast<GLint>(c.x); 3821 GLint x = static_cast<GLint>(c.x);
3919 GLint y = static_cast<GLint>(c.y); 3822 GLint y = static_cast<GLint>(c.y);
3920 GLint z = static_cast<GLint>(c.z); 3823 GLint z = static_cast<GLint>(c.z);
3921 GLint w = static_cast<GLint>(c.w); 3824 GLint w = static_cast<GLint>(c.w);
3922 GLint temp[4] = { 3825 GLint temp[4] = {
3923 x, y, z, w, 3826 x, y, z, w,
3924 }; 3827 };
3925 DoUniform4iv(location, 1, &temp[0]); 3828 DoUniform4iv(location, 1, &temp[0]);
3926 return error::kNoError; 3829 return error::kNoError;
3927 } 3830 }
3928 3831
3929 error::Error GLES2DecoderImpl::HandleUniform4ivImmediate( 3832 error::Error GLES2DecoderImpl::HandleUniform4ivImmediate(
3930 uint32_t immediate_data_size, 3833 uint32_t immediate_data_size,
3931 const void* cmd_data) { 3834 const volatile void* cmd_data) {
3932 const gles2::cmds::Uniform4ivImmediate& c = 3835 const volatile gles2::cmds::Uniform4ivImmediate& c =
3933 *static_cast<const gles2::cmds::Uniform4ivImmediate*>(cmd_data); 3836 *static_cast<const volatile gles2::cmds::Uniform4ivImmediate*>(cmd_data);
3934 (void)c;
3935 GLint location = static_cast<GLint>(c.location); 3837 GLint location = static_cast<GLint>(c.location);
3936 GLsizei count = static_cast<GLsizei>(c.count); 3838 GLsizei count = static_cast<GLsizei>(c.count);
3937 uint32_t data_size = 0; 3839 uint32_t data_size = 0;
3938 if (count >= 0 && 3840 if (count >= 0 &&
3939 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 4, &data_size)) { 3841 !GLES2Util::ComputeDataSize(count, sizeof(GLint), 4, &data_size)) {
3940 return error::kOutOfBounds; 3842 return error::kOutOfBounds;
3941 } 3843 }
3942 if (data_size > immediate_data_size) { 3844 if (data_size > immediate_data_size) {
3943 return error::kOutOfBounds; 3845 return error::kOutOfBounds;
3944 } 3846 }
3945 const GLint* v = 3847 volatile const GLint* v = GetImmediateDataAs<volatile const GLint*>(
3946 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 3848 c, data_size, immediate_data_size);
3947 if (count < 0) { 3849 if (count < 0) {
3948 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4iv", "count < 0"); 3850 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4iv", "count < 0");
3949 return error::kNoError; 3851 return error::kNoError;
3950 } 3852 }
3951 if (v == NULL) { 3853 if (v == NULL) {
3952 return error::kOutOfBounds; 3854 return error::kOutOfBounds;
3953 } 3855 }
3954 DoUniform4iv(location, count, v); 3856 DoUniform4iv(location, count, v);
3955 return error::kNoError; 3857 return error::kNoError;
3956 } 3858 }
3957 3859
3958 error::Error GLES2DecoderImpl::HandleUniform4ui(uint32_t immediate_data_size, 3860 error::Error GLES2DecoderImpl::HandleUniform4ui(uint32_t immediate_data_size,
3959 const void* cmd_data) { 3861 const volatile void* cmd_data) {
3960 if (!unsafe_es3_apis_enabled()) 3862 if (!unsafe_es3_apis_enabled())
3961 return error::kUnknownCommand; 3863 return error::kUnknownCommand;
3962 const gles2::cmds::Uniform4ui& c = 3864 const volatile gles2::cmds::Uniform4ui& c =
3963 *static_cast<const gles2::cmds::Uniform4ui*>(cmd_data); 3865 *static_cast<const volatile gles2::cmds::Uniform4ui*>(cmd_data);
3964 (void)c;
3965 GLint location = static_cast<GLint>(c.location); 3866 GLint location = static_cast<GLint>(c.location);
3966 GLuint x = static_cast<GLuint>(c.x); 3867 GLuint x = static_cast<GLuint>(c.x);
3967 GLuint y = static_cast<GLuint>(c.y); 3868 GLuint y = static_cast<GLuint>(c.y);
3968 GLuint z = static_cast<GLuint>(c.z); 3869 GLuint z = static_cast<GLuint>(c.z);
3969 GLuint w = static_cast<GLuint>(c.w); 3870 GLuint w = static_cast<GLuint>(c.w);
3970 GLuint temp[4] = { 3871 GLuint temp[4] = {
3971 x, y, z, w, 3872 x, y, z, w,
3972 }; 3873 };
3973 DoUniform4uiv(location, 1, &temp[0]); 3874 DoUniform4uiv(location, 1, &temp[0]);
3974 return error::kNoError; 3875 return error::kNoError;
3975 } 3876 }
3976 3877
3977 error::Error GLES2DecoderImpl::HandleUniform4uivImmediate( 3878 error::Error GLES2DecoderImpl::HandleUniform4uivImmediate(
3978 uint32_t immediate_data_size, 3879 uint32_t immediate_data_size,
3979 const void* cmd_data) { 3880 const volatile void* cmd_data) {
3980 if (!unsafe_es3_apis_enabled()) 3881 if (!unsafe_es3_apis_enabled())
3981 return error::kUnknownCommand; 3882 return error::kUnknownCommand;
3982 const gles2::cmds::Uniform4uivImmediate& c = 3883 const volatile gles2::cmds::Uniform4uivImmediate& c =
3983 *static_cast<const gles2::cmds::Uniform4uivImmediate*>(cmd_data); 3884 *static_cast<const volatile gles2::cmds::Uniform4uivImmediate*>(cmd_data);
3984 (void)c;
3985 GLint location = static_cast<GLint>(c.location); 3885 GLint location = static_cast<GLint>(c.location);
3986 GLsizei count = static_cast<GLsizei>(c.count); 3886 GLsizei count = static_cast<GLsizei>(c.count);
3987 uint32_t data_size = 0; 3887 uint32_t data_size = 0;
3988 if (count >= 0 && 3888 if (count >= 0 &&
3989 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 4, &data_size)) { 3889 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 4, &data_size)) {
3990 return error::kOutOfBounds; 3890 return error::kOutOfBounds;
3991 } 3891 }
3992 if (data_size > immediate_data_size) { 3892 if (data_size > immediate_data_size) {
3993 return error::kOutOfBounds; 3893 return error::kOutOfBounds;
3994 } 3894 }
3995 const GLuint* v = 3895 volatile const GLuint* v = GetImmediateDataAs<volatile const GLuint*>(
3996 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 3896 c, data_size, immediate_data_size);
3997 if (count < 0) { 3897 if (count < 0) {
3998 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4uiv", "count < 0"); 3898 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniform4uiv", "count < 0");
3999 return error::kNoError; 3899 return error::kNoError;
4000 } 3900 }
4001 if (v == NULL) { 3901 if (v == NULL) {
4002 return error::kOutOfBounds; 3902 return error::kOutOfBounds;
4003 } 3903 }
4004 DoUniform4uiv(location, count, v); 3904 DoUniform4uiv(location, count, v);
4005 return error::kNoError; 3905 return error::kNoError;
4006 } 3906 }
4007 3907
4008 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( 3908 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate(
4009 uint32_t immediate_data_size, 3909 uint32_t immediate_data_size,
4010 const void* cmd_data) { 3910 const volatile void* cmd_data) {
4011 const gles2::cmds::UniformMatrix2fvImmediate& c = 3911 const volatile gles2::cmds::UniformMatrix2fvImmediate& c =
4012 *static_cast<const gles2::cmds::UniformMatrix2fvImmediate*>(cmd_data); 3912 *static_cast<const volatile gles2::cmds::UniformMatrix2fvImmediate*>(
4013 (void)c; 3913 cmd_data);
4014 GLint location = static_cast<GLint>(c.location); 3914 GLint location = static_cast<GLint>(c.location);
4015 GLsizei count = static_cast<GLsizei>(c.count); 3915 GLsizei count = static_cast<GLsizei>(c.count);
4016 GLboolean transpose = static_cast<GLboolean>(c.transpose); 3916 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4017 uint32_t data_size = 0; 3917 uint32_t data_size = 0;
4018 if (count >= 0 && 3918 if (count >= 0 &&
4019 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) { 3919 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
4020 return error::kOutOfBounds; 3920 return error::kOutOfBounds;
4021 } 3921 }
4022 if (data_size > immediate_data_size) { 3922 if (data_size > immediate_data_size) {
4023 return error::kOutOfBounds; 3923 return error::kOutOfBounds;
4024 } 3924 }
4025 const GLfloat* value = 3925 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4026 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3926 c, data_size, immediate_data_size);
4027 if (count < 0) { 3927 if (count < 0) {
4028 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0"); 3928 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0");
4029 return error::kNoError; 3929 return error::kNoError;
4030 } 3930 }
4031 if (value == NULL) { 3931 if (value == NULL) {
4032 return error::kOutOfBounds; 3932 return error::kOutOfBounds;
4033 } 3933 }
4034 DoUniformMatrix2fv(location, count, transpose, value); 3934 DoUniformMatrix2fv(location, count, transpose, value);
4035 return error::kNoError; 3935 return error::kNoError;
4036 } 3936 }
4037 3937
4038 error::Error GLES2DecoderImpl::HandleUniformMatrix2x3fvImmediate( 3938 error::Error GLES2DecoderImpl::HandleUniformMatrix2x3fvImmediate(
4039 uint32_t immediate_data_size, 3939 uint32_t immediate_data_size,
4040 const void* cmd_data) { 3940 const volatile void* cmd_data) {
4041 if (!unsafe_es3_apis_enabled()) 3941 if (!unsafe_es3_apis_enabled())
4042 return error::kUnknownCommand; 3942 return error::kUnknownCommand;
4043 const gles2::cmds::UniformMatrix2x3fvImmediate& c = 3943 const volatile gles2::cmds::UniformMatrix2x3fvImmediate& c =
4044 *static_cast<const gles2::cmds::UniformMatrix2x3fvImmediate*>(cmd_data); 3944 *static_cast<const volatile gles2::cmds::UniformMatrix2x3fvImmediate*>(
4045 (void)c; 3945 cmd_data);
4046 GLint location = static_cast<GLint>(c.location); 3946 GLint location = static_cast<GLint>(c.location);
4047 GLsizei count = static_cast<GLsizei>(c.count); 3947 GLsizei count = static_cast<GLsizei>(c.count);
4048 GLboolean transpose = static_cast<GLboolean>(c.transpose); 3948 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4049 uint32_t data_size = 0; 3949 uint32_t data_size = 0;
4050 if (count >= 0 && 3950 if (count >= 0 &&
4051 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { 3951 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) {
4052 return error::kOutOfBounds; 3952 return error::kOutOfBounds;
4053 } 3953 }
4054 if (data_size > immediate_data_size) { 3954 if (data_size > immediate_data_size) {
4055 return error::kOutOfBounds; 3955 return error::kOutOfBounds;
4056 } 3956 }
4057 const GLfloat* value = 3957 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4058 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3958 c, data_size, immediate_data_size);
4059 if (count < 0) { 3959 if (count < 0) {
4060 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x3fv", "count < 0"); 3960 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x3fv", "count < 0");
4061 return error::kNoError; 3961 return error::kNoError;
4062 } 3962 }
4063 if (value == NULL) { 3963 if (value == NULL) {
4064 return error::kOutOfBounds; 3964 return error::kOutOfBounds;
4065 } 3965 }
4066 DoUniformMatrix2x3fv(location, count, transpose, value); 3966 DoUniformMatrix2x3fv(location, count, transpose, value);
4067 return error::kNoError; 3967 return error::kNoError;
4068 } 3968 }
4069 3969
4070 error::Error GLES2DecoderImpl::HandleUniformMatrix2x4fvImmediate( 3970 error::Error GLES2DecoderImpl::HandleUniformMatrix2x4fvImmediate(
4071 uint32_t immediate_data_size, 3971 uint32_t immediate_data_size,
4072 const void* cmd_data) { 3972 const volatile void* cmd_data) {
4073 if (!unsafe_es3_apis_enabled()) 3973 if (!unsafe_es3_apis_enabled())
4074 return error::kUnknownCommand; 3974 return error::kUnknownCommand;
4075 const gles2::cmds::UniformMatrix2x4fvImmediate& c = 3975 const volatile gles2::cmds::UniformMatrix2x4fvImmediate& c =
4076 *static_cast<const gles2::cmds::UniformMatrix2x4fvImmediate*>(cmd_data); 3976 *static_cast<const volatile gles2::cmds::UniformMatrix2x4fvImmediate*>(
4077 (void)c; 3977 cmd_data);
4078 GLint location = static_cast<GLint>(c.location); 3978 GLint location = static_cast<GLint>(c.location);
4079 GLsizei count = static_cast<GLsizei>(c.count); 3979 GLsizei count = static_cast<GLsizei>(c.count);
4080 GLboolean transpose = static_cast<GLboolean>(c.transpose); 3980 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4081 uint32_t data_size = 0; 3981 uint32_t data_size = 0;
4082 if (count >= 0 && 3982 if (count >= 0 &&
4083 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { 3983 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) {
4084 return error::kOutOfBounds; 3984 return error::kOutOfBounds;
4085 } 3985 }
4086 if (data_size > immediate_data_size) { 3986 if (data_size > immediate_data_size) {
4087 return error::kOutOfBounds; 3987 return error::kOutOfBounds;
4088 } 3988 }
4089 const GLfloat* value = 3989 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4090 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 3990 c, data_size, immediate_data_size);
4091 if (count < 0) { 3991 if (count < 0) {
4092 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x4fv", "count < 0"); 3992 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix2x4fv", "count < 0");
4093 return error::kNoError; 3993 return error::kNoError;
4094 } 3994 }
4095 if (value == NULL) { 3995 if (value == NULL) {
4096 return error::kOutOfBounds; 3996 return error::kOutOfBounds;
4097 } 3997 }
4098 DoUniformMatrix2x4fv(location, count, transpose, value); 3998 DoUniformMatrix2x4fv(location, count, transpose, value);
4099 return error::kNoError; 3999 return error::kNoError;
4100 } 4000 }
4101 4001
4102 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( 4002 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate(
4103 uint32_t immediate_data_size, 4003 uint32_t immediate_data_size,
4104 const void* cmd_data) { 4004 const volatile void* cmd_data) {
4105 const gles2::cmds::UniformMatrix3fvImmediate& c = 4005 const volatile gles2::cmds::UniformMatrix3fvImmediate& c =
4106 *static_cast<const gles2::cmds::UniformMatrix3fvImmediate*>(cmd_data); 4006 *static_cast<const volatile gles2::cmds::UniformMatrix3fvImmediate*>(
4107 (void)c; 4007 cmd_data);
4108 GLint location = static_cast<GLint>(c.location); 4008 GLint location = static_cast<GLint>(c.location);
4109 GLsizei count = static_cast<GLsizei>(c.count); 4009 GLsizei count = static_cast<GLsizei>(c.count);
4110 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4010 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4111 uint32_t data_size = 0; 4011 uint32_t data_size = 0;
4112 if (count >= 0 && 4012 if (count >= 0 &&
4113 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) { 4013 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) {
4114 return error::kOutOfBounds; 4014 return error::kOutOfBounds;
4115 } 4015 }
4116 if (data_size > immediate_data_size) { 4016 if (data_size > immediate_data_size) {
4117 return error::kOutOfBounds; 4017 return error::kOutOfBounds;
4118 } 4018 }
4119 const GLfloat* value = 4019 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4120 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4020 c, data_size, immediate_data_size);
4121 if (count < 0) { 4021 if (count < 0) {
4122 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0"); 4022 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0");
4123 return error::kNoError; 4023 return error::kNoError;
4124 } 4024 }
4125 if (value == NULL) { 4025 if (value == NULL) {
4126 return error::kOutOfBounds; 4026 return error::kOutOfBounds;
4127 } 4027 }
4128 DoUniformMatrix3fv(location, count, transpose, value); 4028 DoUniformMatrix3fv(location, count, transpose, value);
4129 return error::kNoError; 4029 return error::kNoError;
4130 } 4030 }
4131 4031
4132 error::Error GLES2DecoderImpl::HandleUniformMatrix3x2fvImmediate( 4032 error::Error GLES2DecoderImpl::HandleUniformMatrix3x2fvImmediate(
4133 uint32_t immediate_data_size, 4033 uint32_t immediate_data_size,
4134 const void* cmd_data) { 4034 const volatile void* cmd_data) {
4135 if (!unsafe_es3_apis_enabled()) 4035 if (!unsafe_es3_apis_enabled())
4136 return error::kUnknownCommand; 4036 return error::kUnknownCommand;
4137 const gles2::cmds::UniformMatrix3x2fvImmediate& c = 4037 const volatile gles2::cmds::UniformMatrix3x2fvImmediate& c =
4138 *static_cast<const gles2::cmds::UniformMatrix3x2fvImmediate*>(cmd_data); 4038 *static_cast<const volatile gles2::cmds::UniformMatrix3x2fvImmediate*>(
4139 (void)c; 4039 cmd_data);
4140 GLint location = static_cast<GLint>(c.location); 4040 GLint location = static_cast<GLint>(c.location);
4141 GLsizei count = static_cast<GLsizei>(c.count); 4041 GLsizei count = static_cast<GLsizei>(c.count);
4142 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4042 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4143 uint32_t data_size = 0; 4043 uint32_t data_size = 0;
4144 if (count >= 0 && 4044 if (count >= 0 &&
4145 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) { 4045 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 6, &data_size)) {
4146 return error::kOutOfBounds; 4046 return error::kOutOfBounds;
4147 } 4047 }
4148 if (data_size > immediate_data_size) { 4048 if (data_size > immediate_data_size) {
4149 return error::kOutOfBounds; 4049 return error::kOutOfBounds;
4150 } 4050 }
4151 const GLfloat* value = 4051 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4152 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4052 c, data_size, immediate_data_size);
4153 if (count < 0) { 4053 if (count < 0) {
4154 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x2fv", "count < 0"); 4054 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x2fv", "count < 0");
4155 return error::kNoError; 4055 return error::kNoError;
4156 } 4056 }
4157 if (value == NULL) { 4057 if (value == NULL) {
4158 return error::kOutOfBounds; 4058 return error::kOutOfBounds;
4159 } 4059 }
4160 DoUniformMatrix3x2fv(location, count, transpose, value); 4060 DoUniformMatrix3x2fv(location, count, transpose, value);
4161 return error::kNoError; 4061 return error::kNoError;
4162 } 4062 }
4163 4063
4164 error::Error GLES2DecoderImpl::HandleUniformMatrix3x4fvImmediate( 4064 error::Error GLES2DecoderImpl::HandleUniformMatrix3x4fvImmediate(
4165 uint32_t immediate_data_size, 4065 uint32_t immediate_data_size,
4166 const void* cmd_data) { 4066 const volatile void* cmd_data) {
4167 if (!unsafe_es3_apis_enabled()) 4067 if (!unsafe_es3_apis_enabled())
4168 return error::kUnknownCommand; 4068 return error::kUnknownCommand;
4169 const gles2::cmds::UniformMatrix3x4fvImmediate& c = 4069 const volatile gles2::cmds::UniformMatrix3x4fvImmediate& c =
4170 *static_cast<const gles2::cmds::UniformMatrix3x4fvImmediate*>(cmd_data); 4070 *static_cast<const volatile gles2::cmds::UniformMatrix3x4fvImmediate*>(
4171 (void)c; 4071 cmd_data);
4172 GLint location = static_cast<GLint>(c.location); 4072 GLint location = static_cast<GLint>(c.location);
4173 GLsizei count = static_cast<GLsizei>(c.count); 4073 GLsizei count = static_cast<GLsizei>(c.count);
4174 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4074 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4175 uint32_t data_size = 0; 4075 uint32_t data_size = 0;
4176 if (count >= 0 && 4076 if (count >= 0 &&
4177 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { 4077 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) {
4178 return error::kOutOfBounds; 4078 return error::kOutOfBounds;
4179 } 4079 }
4180 if (data_size > immediate_data_size) { 4080 if (data_size > immediate_data_size) {
4181 return error::kOutOfBounds; 4081 return error::kOutOfBounds;
4182 } 4082 }
4183 const GLfloat* value = 4083 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4184 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4084 c, data_size, immediate_data_size);
4185 if (count < 0) { 4085 if (count < 0) {
4186 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x4fv", "count < 0"); 4086 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix3x4fv", "count < 0");
4187 return error::kNoError; 4087 return error::kNoError;
4188 } 4088 }
4189 if (value == NULL) { 4089 if (value == NULL) {
4190 return error::kOutOfBounds; 4090 return error::kOutOfBounds;
4191 } 4091 }
4192 DoUniformMatrix3x4fv(location, count, transpose, value); 4092 DoUniformMatrix3x4fv(location, count, transpose, value);
4193 return error::kNoError; 4093 return error::kNoError;
4194 } 4094 }
4195 4095
4196 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( 4096 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate(
4197 uint32_t immediate_data_size, 4097 uint32_t immediate_data_size,
4198 const void* cmd_data) { 4098 const volatile void* cmd_data) {
4199 const gles2::cmds::UniformMatrix4fvImmediate& c = 4099 const volatile gles2::cmds::UniformMatrix4fvImmediate& c =
4200 *static_cast<const gles2::cmds::UniformMatrix4fvImmediate*>(cmd_data); 4100 *static_cast<const volatile gles2::cmds::UniformMatrix4fvImmediate*>(
4201 (void)c; 4101 cmd_data);
4202 GLint location = static_cast<GLint>(c.location); 4102 GLint location = static_cast<GLint>(c.location);
4203 GLsizei count = static_cast<GLsizei>(c.count); 4103 GLsizei count = static_cast<GLsizei>(c.count);
4204 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4104 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4205 uint32_t data_size = 0; 4105 uint32_t data_size = 0;
4206 if (count >= 0 && 4106 if (count >= 0 &&
4207 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) { 4107 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) {
4208 return error::kOutOfBounds; 4108 return error::kOutOfBounds;
4209 } 4109 }
4210 if (data_size > immediate_data_size) { 4110 if (data_size > immediate_data_size) {
4211 return error::kOutOfBounds; 4111 return error::kOutOfBounds;
4212 } 4112 }
4213 const GLfloat* value = 4113 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4214 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4114 c, data_size, immediate_data_size);
4215 if (count < 0) { 4115 if (count < 0) {
4216 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0"); 4116 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0");
4217 return error::kNoError; 4117 return error::kNoError;
4218 } 4118 }
4219 if (value == NULL) { 4119 if (value == NULL) {
4220 return error::kOutOfBounds; 4120 return error::kOutOfBounds;
4221 } 4121 }
4222 DoUniformMatrix4fv(location, count, transpose, value); 4122 DoUniformMatrix4fv(location, count, transpose, value);
4223 return error::kNoError; 4123 return error::kNoError;
4224 } 4124 }
4225 4125
4226 error::Error GLES2DecoderImpl::HandleUniformMatrix4x2fvImmediate( 4126 error::Error GLES2DecoderImpl::HandleUniformMatrix4x2fvImmediate(
4227 uint32_t immediate_data_size, 4127 uint32_t immediate_data_size,
4228 const void* cmd_data) { 4128 const volatile void* cmd_data) {
4229 if (!unsafe_es3_apis_enabled()) 4129 if (!unsafe_es3_apis_enabled())
4230 return error::kUnknownCommand; 4130 return error::kUnknownCommand;
4231 const gles2::cmds::UniformMatrix4x2fvImmediate& c = 4131 const volatile gles2::cmds::UniformMatrix4x2fvImmediate& c =
4232 *static_cast<const gles2::cmds::UniformMatrix4x2fvImmediate*>(cmd_data); 4132 *static_cast<const volatile gles2::cmds::UniformMatrix4x2fvImmediate*>(
4233 (void)c; 4133 cmd_data);
4234 GLint location = static_cast<GLint>(c.location); 4134 GLint location = static_cast<GLint>(c.location);
4235 GLsizei count = static_cast<GLsizei>(c.count); 4135 GLsizei count = static_cast<GLsizei>(c.count);
4236 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4136 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4237 uint32_t data_size = 0; 4137 uint32_t data_size = 0;
4238 if (count >= 0 && 4138 if (count >= 0 &&
4239 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) { 4139 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 8, &data_size)) {
4240 return error::kOutOfBounds; 4140 return error::kOutOfBounds;
4241 } 4141 }
4242 if (data_size > immediate_data_size) { 4142 if (data_size > immediate_data_size) {
4243 return error::kOutOfBounds; 4143 return error::kOutOfBounds;
4244 } 4144 }
4245 const GLfloat* value = 4145 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4246 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4146 c, data_size, immediate_data_size);
4247 if (count < 0) { 4147 if (count < 0) {
4248 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x2fv", "count < 0"); 4148 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x2fv", "count < 0");
4249 return error::kNoError; 4149 return error::kNoError;
4250 } 4150 }
4251 if (value == NULL) { 4151 if (value == NULL) {
4252 return error::kOutOfBounds; 4152 return error::kOutOfBounds;
4253 } 4153 }
4254 DoUniformMatrix4x2fv(location, count, transpose, value); 4154 DoUniformMatrix4x2fv(location, count, transpose, value);
4255 return error::kNoError; 4155 return error::kNoError;
4256 } 4156 }
4257 4157
4258 error::Error GLES2DecoderImpl::HandleUniformMatrix4x3fvImmediate( 4158 error::Error GLES2DecoderImpl::HandleUniformMatrix4x3fvImmediate(
4259 uint32_t immediate_data_size, 4159 uint32_t immediate_data_size,
4260 const void* cmd_data) { 4160 const volatile void* cmd_data) {
4261 if (!unsafe_es3_apis_enabled()) 4161 if (!unsafe_es3_apis_enabled())
4262 return error::kUnknownCommand; 4162 return error::kUnknownCommand;
4263 const gles2::cmds::UniformMatrix4x3fvImmediate& c = 4163 const volatile gles2::cmds::UniformMatrix4x3fvImmediate& c =
4264 *static_cast<const gles2::cmds::UniformMatrix4x3fvImmediate*>(cmd_data); 4164 *static_cast<const volatile gles2::cmds::UniformMatrix4x3fvImmediate*>(
4265 (void)c; 4165 cmd_data);
4266 GLint location = static_cast<GLint>(c.location); 4166 GLint location = static_cast<GLint>(c.location);
4267 GLsizei count = static_cast<GLsizei>(c.count); 4167 GLsizei count = static_cast<GLsizei>(c.count);
4268 GLboolean transpose = static_cast<GLboolean>(c.transpose); 4168 GLboolean transpose = static_cast<GLboolean>(c.transpose);
4269 uint32_t data_size = 0; 4169 uint32_t data_size = 0;
4270 if (count >= 0 && 4170 if (count >= 0 &&
4271 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) { 4171 !GLES2Util::ComputeDataSize(count, sizeof(GLfloat), 12, &data_size)) {
4272 return error::kOutOfBounds; 4172 return error::kOutOfBounds;
4273 } 4173 }
4274 if (data_size > immediate_data_size) { 4174 if (data_size > immediate_data_size) {
4275 return error::kOutOfBounds; 4175 return error::kOutOfBounds;
4276 } 4176 }
4277 const GLfloat* value = 4177 volatile const GLfloat* value = GetImmediateDataAs<volatile const GLfloat*>(
4278 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4178 c, data_size, immediate_data_size);
4279 if (count < 0) { 4179 if (count < 0) {
4280 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x3fv", "count < 0"); 4180 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUniformMatrix4x3fv", "count < 0");
4281 return error::kNoError; 4181 return error::kNoError;
4282 } 4182 }
4283 if (value == NULL) { 4183 if (value == NULL) {
4284 return error::kOutOfBounds; 4184 return error::kOutOfBounds;
4285 } 4185 }
4286 DoUniformMatrix4x3fv(location, count, transpose, value); 4186 DoUniformMatrix4x3fv(location, count, transpose, value);
4287 return error::kNoError; 4187 return error::kNoError;
4288 } 4188 }
4289 4189
4290 error::Error GLES2DecoderImpl::HandleUseProgram(uint32_t immediate_data_size, 4190 error::Error GLES2DecoderImpl::HandleUseProgram(uint32_t immediate_data_size,
4291 const void* cmd_data) { 4191 const volatile void* cmd_data) {
4292 const gles2::cmds::UseProgram& c = 4192 const volatile gles2::cmds::UseProgram& c =
4293 *static_cast<const gles2::cmds::UseProgram*>(cmd_data); 4193 *static_cast<const volatile gles2::cmds::UseProgram*>(cmd_data);
4294 (void)c;
4295 GLuint program = c.program; 4194 GLuint program = c.program;
4296 DoUseProgram(program); 4195 DoUseProgram(program);
4297 return error::kNoError; 4196 return error::kNoError;
4298 } 4197 }
4299 4198
4300 error::Error GLES2DecoderImpl::HandleValidateProgram( 4199 error::Error GLES2DecoderImpl::HandleValidateProgram(
4301 uint32_t immediate_data_size, 4200 uint32_t immediate_data_size,
4302 const void* cmd_data) { 4201 const volatile void* cmd_data) {
4303 const gles2::cmds::ValidateProgram& c = 4202 const volatile gles2::cmds::ValidateProgram& c =
4304 *static_cast<const gles2::cmds::ValidateProgram*>(cmd_data); 4203 *static_cast<const volatile gles2::cmds::ValidateProgram*>(cmd_data);
4305 (void)c;
4306 GLuint program = c.program; 4204 GLuint program = c.program;
4307 DoValidateProgram(program); 4205 DoValidateProgram(program);
4308 return error::kNoError; 4206 return error::kNoError;
4309 } 4207 }
4310 4208
4311 error::Error GLES2DecoderImpl::HandleVertexAttrib1f( 4209 error::Error GLES2DecoderImpl::HandleVertexAttrib1f(
4312 uint32_t immediate_data_size, 4210 uint32_t immediate_data_size,
4313 const void* cmd_data) { 4211 const volatile void* cmd_data) {
4314 const gles2::cmds::VertexAttrib1f& c = 4212 const volatile gles2::cmds::VertexAttrib1f& c =
4315 *static_cast<const gles2::cmds::VertexAttrib1f*>(cmd_data); 4213 *static_cast<const volatile gles2::cmds::VertexAttrib1f*>(cmd_data);
4316 (void)c;
4317 GLuint indx = static_cast<GLuint>(c.indx); 4214 GLuint indx = static_cast<GLuint>(c.indx);
4318 GLfloat x = static_cast<GLfloat>(c.x); 4215 GLfloat x = static_cast<GLfloat>(c.x);
4319 DoVertexAttrib1f(indx, x); 4216 DoVertexAttrib1f(indx, x);
4320 return error::kNoError; 4217 return error::kNoError;
4321 } 4218 }
4322 4219
4323 error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( 4220 error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate(
4324 uint32_t immediate_data_size, 4221 uint32_t immediate_data_size,
4325 const void* cmd_data) { 4222 const volatile void* cmd_data) {
4326 const gles2::cmds::VertexAttrib1fvImmediate& c = 4223 const volatile gles2::cmds::VertexAttrib1fvImmediate& c =
4327 *static_cast<const gles2::cmds::VertexAttrib1fvImmediate*>(cmd_data); 4224 *static_cast<const volatile gles2::cmds::VertexAttrib1fvImmediate*>(
4328 (void)c; 4225 cmd_data);
4329 GLuint indx = static_cast<GLuint>(c.indx); 4226 GLuint indx = static_cast<GLuint>(c.indx);
4330 uint32_t data_size; 4227 uint32_t data_size;
4331 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 4228 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
4332 return error::kOutOfBounds; 4229 return error::kOutOfBounds;
4333 } 4230 }
4334 if (data_size > immediate_data_size) { 4231 if (data_size > immediate_data_size) {
4335 return error::kOutOfBounds; 4232 return error::kOutOfBounds;
4336 } 4233 }
4337 const GLfloat* values = 4234 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>(
4338 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4235 c, data_size, immediate_data_size);
4339 if (values == NULL) { 4236 if (values == NULL) {
4340 return error::kOutOfBounds; 4237 return error::kOutOfBounds;
4341 } 4238 }
4342 DoVertexAttrib1fv(indx, values); 4239 DoVertexAttrib1fv(indx, values);
4343 return error::kNoError; 4240 return error::kNoError;
4344 } 4241 }
4345 4242
4346 error::Error GLES2DecoderImpl::HandleVertexAttrib2f( 4243 error::Error GLES2DecoderImpl::HandleVertexAttrib2f(
4347 uint32_t immediate_data_size, 4244 uint32_t immediate_data_size,
4348 const void* cmd_data) { 4245 const volatile void* cmd_data) {
4349 const gles2::cmds::VertexAttrib2f& c = 4246 const volatile gles2::cmds::VertexAttrib2f& c =
4350 *static_cast<const gles2::cmds::VertexAttrib2f*>(cmd_data); 4247 *static_cast<const volatile gles2::cmds::VertexAttrib2f*>(cmd_data);
4351 (void)c;
4352 GLuint indx = static_cast<GLuint>(c.indx); 4248 GLuint indx = static_cast<GLuint>(c.indx);
4353 GLfloat x = static_cast<GLfloat>(c.x); 4249 GLfloat x = static_cast<GLfloat>(c.x);
4354 GLfloat y = static_cast<GLfloat>(c.y); 4250 GLfloat y = static_cast<GLfloat>(c.y);
4355 DoVertexAttrib2f(indx, x, y); 4251 DoVertexAttrib2f(indx, x, y);
4356 return error::kNoError; 4252 return error::kNoError;
4357 } 4253 }
4358 4254
4359 error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( 4255 error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate(
4360 uint32_t immediate_data_size, 4256 uint32_t immediate_data_size,
4361 const void* cmd_data) { 4257 const volatile void* cmd_data) {
4362 const gles2::cmds::VertexAttrib2fvImmediate& c = 4258 const volatile gles2::cmds::VertexAttrib2fvImmediate& c =
4363 *static_cast<const gles2::cmds::VertexAttrib2fvImmediate*>(cmd_data); 4259 *static_cast<const volatile gles2::cmds::VertexAttrib2fvImmediate*>(
4364 (void)c; 4260 cmd_data);
4365 GLuint indx = static_cast<GLuint>(c.indx); 4261 GLuint indx = static_cast<GLuint>(c.indx);
4366 uint32_t data_size; 4262 uint32_t data_size;
4367 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) { 4263 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) {
4368 return error::kOutOfBounds; 4264 return error::kOutOfBounds;
4369 } 4265 }
4370 if (data_size > immediate_data_size) { 4266 if (data_size > immediate_data_size) {
4371 return error::kOutOfBounds; 4267 return error::kOutOfBounds;
4372 } 4268 }
4373 const GLfloat* values = 4269 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>(
4374 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4270 c, data_size, immediate_data_size);
4375 if (values == NULL) { 4271 if (values == NULL) {
4376 return error::kOutOfBounds; 4272 return error::kOutOfBounds;
4377 } 4273 }
4378 DoVertexAttrib2fv(indx, values); 4274 DoVertexAttrib2fv(indx, values);
4379 return error::kNoError; 4275 return error::kNoError;
4380 } 4276 }
4381 4277
4382 error::Error GLES2DecoderImpl::HandleVertexAttrib3f( 4278 error::Error GLES2DecoderImpl::HandleVertexAttrib3f(
4383 uint32_t immediate_data_size, 4279 uint32_t immediate_data_size,
4384 const void* cmd_data) { 4280 const volatile void* cmd_data) {
4385 const gles2::cmds::VertexAttrib3f& c = 4281 const volatile gles2::cmds::VertexAttrib3f& c =
4386 *static_cast<const gles2::cmds::VertexAttrib3f*>(cmd_data); 4282 *static_cast<const volatile gles2::cmds::VertexAttrib3f*>(cmd_data);
4387 (void)c;
4388 GLuint indx = static_cast<GLuint>(c.indx); 4283 GLuint indx = static_cast<GLuint>(c.indx);
4389 GLfloat x = static_cast<GLfloat>(c.x); 4284 GLfloat x = static_cast<GLfloat>(c.x);
4390 GLfloat y = static_cast<GLfloat>(c.y); 4285 GLfloat y = static_cast<GLfloat>(c.y);
4391 GLfloat z = static_cast<GLfloat>(c.z); 4286 GLfloat z = static_cast<GLfloat>(c.z);
4392 DoVertexAttrib3f(indx, x, y, z); 4287 DoVertexAttrib3f(indx, x, y, z);
4393 return error::kNoError; 4288 return error::kNoError;
4394 } 4289 }
4395 4290
4396 error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( 4291 error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate(
4397 uint32_t immediate_data_size, 4292 uint32_t immediate_data_size,
4398 const void* cmd_data) { 4293 const volatile void* cmd_data) {
4399 const gles2::cmds::VertexAttrib3fvImmediate& c = 4294 const volatile gles2::cmds::VertexAttrib3fvImmediate& c =
4400 *static_cast<const gles2::cmds::VertexAttrib3fvImmediate*>(cmd_data); 4295 *static_cast<const volatile gles2::cmds::VertexAttrib3fvImmediate*>(
4401 (void)c; 4296 cmd_data);
4402 GLuint indx = static_cast<GLuint>(c.indx); 4297 GLuint indx = static_cast<GLuint>(c.indx);
4403 uint32_t data_size; 4298 uint32_t data_size;
4404 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) { 4299 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) {
4405 return error::kOutOfBounds; 4300 return error::kOutOfBounds;
4406 } 4301 }
4407 if (data_size > immediate_data_size) { 4302 if (data_size > immediate_data_size) {
4408 return error::kOutOfBounds; 4303 return error::kOutOfBounds;
4409 } 4304 }
4410 const GLfloat* values = 4305 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>(
4411 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4306 c, data_size, immediate_data_size);
4412 if (values == NULL) { 4307 if (values == NULL) {
4413 return error::kOutOfBounds; 4308 return error::kOutOfBounds;
4414 } 4309 }
4415 DoVertexAttrib3fv(indx, values); 4310 DoVertexAttrib3fv(indx, values);
4416 return error::kNoError; 4311 return error::kNoError;
4417 } 4312 }
4418 4313
4419 error::Error GLES2DecoderImpl::HandleVertexAttrib4f( 4314 error::Error GLES2DecoderImpl::HandleVertexAttrib4f(
4420 uint32_t immediate_data_size, 4315 uint32_t immediate_data_size,
4421 const void* cmd_data) { 4316 const volatile void* cmd_data) {
4422 const gles2::cmds::VertexAttrib4f& c = 4317 const volatile gles2::cmds::VertexAttrib4f& c =
4423 *static_cast<const gles2::cmds::VertexAttrib4f*>(cmd_data); 4318 *static_cast<const volatile gles2::cmds::VertexAttrib4f*>(cmd_data);
4424 (void)c;
4425 GLuint indx = static_cast<GLuint>(c.indx); 4319 GLuint indx = static_cast<GLuint>(c.indx);
4426 GLfloat x = static_cast<GLfloat>(c.x); 4320 GLfloat x = static_cast<GLfloat>(c.x);
4427 GLfloat y = static_cast<GLfloat>(c.y); 4321 GLfloat y = static_cast<GLfloat>(c.y);
4428 GLfloat z = static_cast<GLfloat>(c.z); 4322 GLfloat z = static_cast<GLfloat>(c.z);
4429 GLfloat w = static_cast<GLfloat>(c.w); 4323 GLfloat w = static_cast<GLfloat>(c.w);
4430 DoVertexAttrib4f(indx, x, y, z, w); 4324 DoVertexAttrib4f(indx, x, y, z, w);
4431 return error::kNoError; 4325 return error::kNoError;
4432 } 4326 }
4433 4327
4434 error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( 4328 error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate(
4435 uint32_t immediate_data_size, 4329 uint32_t immediate_data_size,
4436 const void* cmd_data) { 4330 const volatile void* cmd_data) {
4437 const gles2::cmds::VertexAttrib4fvImmediate& c = 4331 const volatile gles2::cmds::VertexAttrib4fvImmediate& c =
4438 *static_cast<const gles2::cmds::VertexAttrib4fvImmediate*>(cmd_data); 4332 *static_cast<const volatile gles2::cmds::VertexAttrib4fvImmediate*>(
4439 (void)c; 4333 cmd_data);
4440 GLuint indx = static_cast<GLuint>(c.indx); 4334 GLuint indx = static_cast<GLuint>(c.indx);
4441 uint32_t data_size; 4335 uint32_t data_size;
4442 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { 4336 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
4443 return error::kOutOfBounds; 4337 return error::kOutOfBounds;
4444 } 4338 }
4445 if (data_size > immediate_data_size) { 4339 if (data_size > immediate_data_size) {
4446 return error::kOutOfBounds; 4340 return error::kOutOfBounds;
4447 } 4341 }
4448 const GLfloat* values = 4342 volatile const GLfloat* values = GetImmediateDataAs<volatile const GLfloat*>(
4449 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 4343 c, data_size, immediate_data_size);
4450 if (values == NULL) { 4344 if (values == NULL) {
4451 return error::kOutOfBounds; 4345 return error::kOutOfBounds;
4452 } 4346 }
4453 DoVertexAttrib4fv(indx, values); 4347 DoVertexAttrib4fv(indx, values);
4454 return error::kNoError; 4348 return error::kNoError;
4455 } 4349 }
4456 4350
4457 error::Error GLES2DecoderImpl::HandleVertexAttribI4i( 4351 error::Error GLES2DecoderImpl::HandleVertexAttribI4i(
4458 uint32_t immediate_data_size, 4352 uint32_t immediate_data_size,
4459 const void* cmd_data) { 4353 const volatile void* cmd_data) {
4460 if (!unsafe_es3_apis_enabled()) 4354 if (!unsafe_es3_apis_enabled())
4461 return error::kUnknownCommand; 4355 return error::kUnknownCommand;
4462 const gles2::cmds::VertexAttribI4i& c = 4356 const volatile gles2::cmds::VertexAttribI4i& c =
4463 *static_cast<const gles2::cmds::VertexAttribI4i*>(cmd_data); 4357 *static_cast<const volatile gles2::cmds::VertexAttribI4i*>(cmd_data);
4464 (void)c;
4465 GLuint indx = static_cast<GLuint>(c.indx); 4358 GLuint indx = static_cast<GLuint>(c.indx);
4466 GLint x = static_cast<GLint>(c.x); 4359 GLint x = static_cast<GLint>(c.x);
4467 GLint y = static_cast<GLint>(c.y); 4360 GLint y = static_cast<GLint>(c.y);
4468 GLint z = static_cast<GLint>(c.z); 4361 GLint z = static_cast<GLint>(c.z);
4469 GLint w = static_cast<GLint>(c.w); 4362 GLint w = static_cast<GLint>(c.w);
4470 DoVertexAttribI4i(indx, x, y, z, w); 4363 DoVertexAttribI4i(indx, x, y, z, w);
4471 return error::kNoError; 4364 return error::kNoError;
4472 } 4365 }
4473 4366
4474 error::Error GLES2DecoderImpl::HandleVertexAttribI4ivImmediate( 4367 error::Error GLES2DecoderImpl::HandleVertexAttribI4ivImmediate(
4475 uint32_t immediate_data_size, 4368 uint32_t immediate_data_size,
4476 const void* cmd_data) { 4369 const volatile void* cmd_data) {
4477 if (!unsafe_es3_apis_enabled()) 4370 if (!unsafe_es3_apis_enabled())
4478 return error::kUnknownCommand; 4371 return error::kUnknownCommand;
4479 const gles2::cmds::VertexAttribI4ivImmediate& c = 4372 const volatile gles2::cmds::VertexAttribI4ivImmediate& c =
4480 *static_cast<const gles2::cmds::VertexAttribI4ivImmediate*>(cmd_data); 4373 *static_cast<const volatile gles2::cmds::VertexAttribI4ivImmediate*>(
4481 (void)c; 4374 cmd_data);
4482 GLuint indx = static_cast<GLuint>(c.indx); 4375 GLuint indx = static_cast<GLuint>(c.indx);
4483 uint32_t data_size; 4376 uint32_t data_size;
4484 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) { 4377 if (!GLES2Util::ComputeDataSize(1, sizeof(GLint), 4, &data_size)) {
4485 return error::kOutOfBounds; 4378 return error::kOutOfBounds;
4486 } 4379 }
4487 if (data_size > immediate_data_size) { 4380 if (data_size > immediate_data_size) {
4488 return error::kOutOfBounds; 4381 return error::kOutOfBounds;
4489 } 4382 }
4490 const GLint* values = 4383 volatile const GLint* values = GetImmediateDataAs<volatile const GLint*>(
4491 GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size); 4384 c, data_size, immediate_data_size);
4492 if (values == NULL) { 4385 if (values == NULL) {
4493 return error::kOutOfBounds; 4386 return error::kOutOfBounds;
4494 } 4387 }
4495 DoVertexAttribI4iv(indx, values); 4388 DoVertexAttribI4iv(indx, values);
4496 return error::kNoError; 4389 return error::kNoError;
4497 } 4390 }
4498 4391
4499 error::Error GLES2DecoderImpl::HandleVertexAttribI4ui( 4392 error::Error GLES2DecoderImpl::HandleVertexAttribI4ui(
4500 uint32_t immediate_data_size, 4393 uint32_t immediate_data_size,
4501 const void* cmd_data) { 4394 const volatile void* cmd_data) {
4502 if (!unsafe_es3_apis_enabled()) 4395 if (!unsafe_es3_apis_enabled())
4503 return error::kUnknownCommand; 4396 return error::kUnknownCommand;
4504 const gles2::cmds::VertexAttribI4ui& c = 4397 const volatile gles2::cmds::VertexAttribI4ui& c =
4505 *static_cast<const gles2::cmds::VertexAttribI4ui*>(cmd_data); 4398 *static_cast<const volatile gles2::cmds::VertexAttribI4ui*>(cmd_data);
4506 (void)c;
4507 GLuint indx = static_cast<GLuint>(c.indx); 4399 GLuint indx = static_cast<GLuint>(c.indx);
4508 GLuint x = static_cast<GLuint>(c.x); 4400 GLuint x = static_cast<GLuint>(c.x);
4509 GLuint y = static_cast<GLuint>(c.y); 4401 GLuint y = static_cast<GLuint>(c.y);
4510 GLuint z = static_cast<GLuint>(c.z); 4402 GLuint z = static_cast<GLuint>(c.z);
4511 GLuint w = static_cast<GLuint>(c.w); 4403 GLuint w = static_cast<GLuint>(c.w);
4512 DoVertexAttribI4ui(indx, x, y, z, w); 4404 DoVertexAttribI4ui(indx, x, y, z, w);
4513 return error::kNoError; 4405 return error::kNoError;
4514 } 4406 }
4515 4407
4516 error::Error GLES2DecoderImpl::HandleVertexAttribI4uivImmediate( 4408 error::Error GLES2DecoderImpl::HandleVertexAttribI4uivImmediate(
4517 uint32_t immediate_data_size, 4409 uint32_t immediate_data_size,
4518 const void* cmd_data) { 4410 const volatile void* cmd_data) {
4519 if (!unsafe_es3_apis_enabled()) 4411 if (!unsafe_es3_apis_enabled())
4520 return error::kUnknownCommand; 4412 return error::kUnknownCommand;
4521 const gles2::cmds::VertexAttribI4uivImmediate& c = 4413 const volatile gles2::cmds::VertexAttribI4uivImmediate& c =
4522 *static_cast<const gles2::cmds::VertexAttribI4uivImmediate*>(cmd_data); 4414 *static_cast<const volatile gles2::cmds::VertexAttribI4uivImmediate*>(
4523 (void)c; 4415 cmd_data);
4524 GLuint indx = static_cast<GLuint>(c.indx); 4416 GLuint indx = static_cast<GLuint>(c.indx);
4525 uint32_t data_size; 4417 uint32_t data_size;
4526 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) { 4418 if (!GLES2Util::ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) {
4527 return error::kOutOfBounds; 4419 return error::kOutOfBounds;
4528 } 4420 }
4529 if (data_size > immediate_data_size) { 4421 if (data_size > immediate_data_size) {
4530 return error::kOutOfBounds; 4422 return error::kOutOfBounds;
4531 } 4423 }
4532 const GLuint* values = 4424 volatile const GLuint* values = GetImmediateDataAs<volatile const GLuint*>(
4533 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 4425 c, data_size, immediate_data_size);
4534 if (values == NULL) { 4426 if (values == NULL) {
4535 return error::kOutOfBounds; 4427 return error::kOutOfBounds;
4536 } 4428 }
4537 DoVertexAttribI4uiv(indx, values); 4429 DoVertexAttribI4uiv(indx, values);
4538 return error::kNoError; 4430 return error::kNoError;
4539 } 4431 }
4540 4432
4541 error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size, 4433 error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size,
4542 const void* cmd_data) { 4434 const volatile void* cmd_data) {
4543 const gles2::cmds::Viewport& c = 4435 const volatile gles2::cmds::Viewport& c =
4544 *static_cast<const gles2::cmds::Viewport*>(cmd_data); 4436 *static_cast<const volatile gles2::cmds::Viewport*>(cmd_data);
4545 (void)c;
4546 GLint x = static_cast<GLint>(c.x); 4437 GLint x = static_cast<GLint>(c.x);
4547 GLint y = static_cast<GLint>(c.y); 4438 GLint y = static_cast<GLint>(c.y);
4548 GLsizei width = static_cast<GLsizei>(c.width); 4439 GLsizei width = static_cast<GLsizei>(c.width);
4549 GLsizei height = static_cast<GLsizei>(c.height); 4440 GLsizei height = static_cast<GLsizei>(c.height);
4550 if (width < 0) { 4441 if (width < 0) {
4551 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "width < 0"); 4442 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "width < 0");
4552 return error::kNoError; 4443 return error::kNoError;
4553 } 4444 }
4554 if (height < 0) { 4445 if (height < 0) {
4555 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "height < 0"); 4446 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glViewport", "height < 0");
4556 return error::kNoError; 4447 return error::kNoError;
4557 } 4448 }
4558 DoViewport(x, y, width, height); 4449 DoViewport(x, y, width, height);
4559 return error::kNoError; 4450 return error::kNoError;
4560 } 4451 }
4561 4452
4562 error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM( 4453 error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM(
4563 uint32_t immediate_data_size, 4454 uint32_t immediate_data_size,
4564 const void* cmd_data) { 4455 const volatile void* cmd_data) {
4565 const gles2::cmds::BlitFramebufferCHROMIUM& c = 4456 const volatile gles2::cmds::BlitFramebufferCHROMIUM& c =
4566 *static_cast<const gles2::cmds::BlitFramebufferCHROMIUM*>(cmd_data); 4457 *static_cast<const volatile gles2::cmds::BlitFramebufferCHROMIUM*>(
4567 (void)c; 4458 cmd_data);
4568 if (!features().chromium_framebuffer_multisample) { 4459 if (!features().chromium_framebuffer_multisample) {
4569 return error::kUnknownCommand; 4460 return error::kUnknownCommand;
4570 } 4461 }
4571 4462
4572 error::Error error; 4463 error::Error error;
4573 error = WillAccessBoundFramebufferForDraw(); 4464 error = WillAccessBoundFramebufferForDraw();
4574 if (error != error::kNoError) 4465 if (error != error::kNoError)
4575 return error; 4466 return error;
4576 error = WillAccessBoundFramebufferForRead(); 4467 error = WillAccessBoundFramebufferForRead();
4577 if (error != error::kNoError) 4468 if (error != error::kNoError)
(...skipping 13 matching lines...) Expand all
4591 "filter"); 4482 "filter");
4592 return error::kNoError; 4483 return error::kNoError;
4593 } 4484 }
4594 DoBlitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, 4485 DoBlitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
4595 dstY1, mask, filter); 4486 dstY1, mask, filter);
4596 return error::kNoError; 4487 return error::kNoError;
4597 } 4488 }
4598 4489
4599 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM( 4490 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM(
4600 uint32_t immediate_data_size, 4491 uint32_t immediate_data_size,
4601 const void* cmd_data) { 4492 const volatile void* cmd_data) {
4602 const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c = 4493 const volatile gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c =
4603 *static_cast<const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM*>( 4494 *static_cast<
4495 const volatile gles2::cmds::RenderbufferStorageMultisampleCHROMIUM*>(
4604 cmd_data); 4496 cmd_data);
4605 (void)c;
4606 if (!features().chromium_framebuffer_multisample) { 4497 if (!features().chromium_framebuffer_multisample) {
4607 return error::kUnknownCommand; 4498 return error::kUnknownCommand;
4608 } 4499 }
4609 4500
4610 GLenum target = static_cast<GLenum>(c.target); 4501 GLenum target = static_cast<GLenum>(c.target);
4611 GLsizei samples = static_cast<GLsizei>(c.samples); 4502 GLsizei samples = static_cast<GLsizei>(c.samples);
4612 GLenum internalformat = static_cast<GLenum>(c.internalformat); 4503 GLenum internalformat = static_cast<GLenum>(c.internalformat);
4613 GLsizei width = static_cast<GLsizei>(c.width); 4504 GLsizei width = static_cast<GLsizei>(c.width);
4614 GLsizei height = static_cast<GLsizei>(c.height); 4505 GLsizei height = static_cast<GLsizei>(c.height);
4615 if (!validators_->render_buffer_target.IsValid(target)) { 4506 if (!validators_->render_buffer_target.IsValid(target)) {
(...skipping 23 matching lines...) Expand all
4639 "height < 0"); 4530 "height < 0");
4640 return error::kNoError; 4531 return error::kNoError;
4641 } 4532 }
4642 DoRenderbufferStorageMultisampleCHROMIUM(target, samples, internalformat, 4533 DoRenderbufferStorageMultisampleCHROMIUM(target, samples, internalformat,
4643 width, height); 4534 width, height);
4644 return error::kNoError; 4535 return error::kNoError;
4645 } 4536 }
4646 4537
4647 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT( 4538 error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT(
4648 uint32_t immediate_data_size, 4539 uint32_t immediate_data_size,
4649 const void* cmd_data) { 4540 const volatile void* cmd_data) {
4650 const gles2::cmds::RenderbufferStorageMultisampleEXT& c = 4541 const volatile gles2::cmds::RenderbufferStorageMultisampleEXT& c =
4651 *static_cast<const gles2::cmds::RenderbufferStorageMultisampleEXT*>( 4542 *static_cast<
4543 const volatile gles2::cmds::RenderbufferStorageMultisampleEXT*>(
4652 cmd_data); 4544 cmd_data);
4653 (void)c;
4654 if (!features().multisampled_render_to_texture) { 4545 if (!features().multisampled_render_to_texture) {
4655 return error::kUnknownCommand; 4546 return error::kUnknownCommand;
4656 } 4547 }
4657 4548
4658 GLenum target = static_cast<GLenum>(c.target); 4549 GLenum target = static_cast<GLenum>(c.target);
4659 GLsizei samples = static_cast<GLsizei>(c.samples); 4550 GLsizei samples = static_cast<GLsizei>(c.samples);
4660 GLenum internalformat = static_cast<GLenum>(c.internalformat); 4551 GLenum internalformat = static_cast<GLenum>(c.internalformat);
4661 GLsizei width = static_cast<GLsizei>(c.width); 4552 GLsizei width = static_cast<GLsizei>(c.width);
4662 GLsizei height = static_cast<GLsizei>(c.height); 4553 GLsizei height = static_cast<GLsizei>(c.height);
4663 if (!validators_->render_buffer_target.IsValid(target)) { 4554 if (!validators_->render_buffer_target.IsValid(target)) {
(...skipping 21 matching lines...) Expand all
4685 "height < 0"); 4576 "height < 0");
4686 return error::kNoError; 4577 return error::kNoError;
4687 } 4578 }
4688 DoRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, 4579 DoRenderbufferStorageMultisampleEXT(target, samples, internalformat, width,
4689 height); 4580 height);
4690 return error::kNoError; 4581 return error::kNoError;
4691 } 4582 }
4692 4583
4693 error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT( 4584 error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT(
4694 uint32_t immediate_data_size, 4585 uint32_t immediate_data_size,
4695 const void* cmd_data) { 4586 const volatile void* cmd_data) {
4696 const gles2::cmds::FramebufferTexture2DMultisampleEXT& c = 4587 const volatile gles2::cmds::FramebufferTexture2DMultisampleEXT& c =
4697 *static_cast<const gles2::cmds::FramebufferTexture2DMultisampleEXT*>( 4588 *static_cast<
4589 const volatile gles2::cmds::FramebufferTexture2DMultisampleEXT*>(
4698 cmd_data); 4590 cmd_data);
4699 (void)c;
4700 if (!features().multisampled_render_to_texture) { 4591 if (!features().multisampled_render_to_texture) {
4701 return error::kUnknownCommand; 4592 return error::kUnknownCommand;
4702 } 4593 }
4703 4594
4704 GLenum target = static_cast<GLenum>(c.target); 4595 GLenum target = static_cast<GLenum>(c.target);
4705 GLenum attachment = static_cast<GLenum>(c.attachment); 4596 GLenum attachment = static_cast<GLenum>(c.attachment);
4706 GLenum textarget = static_cast<GLenum>(c.textarget); 4597 GLenum textarget = static_cast<GLenum>(c.textarget);
4707 GLuint texture = c.texture; 4598 GLuint texture = c.texture;
4708 GLint level = static_cast<GLint>(c.level); 4599 GLint level = static_cast<GLint>(c.level);
4709 GLsizei samples = static_cast<GLsizei>(c.samples); 4600 GLsizei samples = static_cast<GLsizei>(c.samples);
(...skipping 17 matching lines...) Expand all
4727 "samples < 0"); 4618 "samples < 0");
4728 return error::kNoError; 4619 return error::kNoError;
4729 } 4620 }
4730 DoFramebufferTexture2DMultisample(target, attachment, textarget, texture, 4621 DoFramebufferTexture2DMultisample(target, attachment, textarget, texture,
4731 level, samples); 4622 level, samples);
4732 return error::kNoError; 4623 return error::kNoError;
4733 } 4624 }
4734 4625
4735 error::Error GLES2DecoderImpl::HandleTexStorage2DEXT( 4626 error::Error GLES2DecoderImpl::HandleTexStorage2DEXT(
4736 uint32_t immediate_data_size, 4627 uint32_t immediate_data_size,
4737 const void* cmd_data) { 4628 const volatile void* cmd_data) {
4738 const gles2::cmds::TexStorage2DEXT& c = 4629 const volatile gles2::cmds::TexStorage2DEXT& c =
4739 *static_cast<const gles2::cmds::TexStorage2DEXT*>(cmd_data); 4630 *static_cast<const volatile gles2::cmds::TexStorage2DEXT*>(cmd_data);
4740 (void)c;
4741 if (!features().ext_texture_storage) { 4631 if (!features().ext_texture_storage) {
4742 return error::kUnknownCommand; 4632 return error::kUnknownCommand;
4743 } 4633 }
4744 4634
4745 GLenum target = static_cast<GLenum>(c.target); 4635 GLenum target = static_cast<GLenum>(c.target);
4746 GLsizei levels = static_cast<GLsizei>(c.levels); 4636 GLsizei levels = static_cast<GLsizei>(c.levels);
4747 GLenum internalFormat = static_cast<GLenum>(c.internalFormat); 4637 GLenum internalFormat = static_cast<GLenum>(c.internalFormat);
4748 GLsizei width = static_cast<GLsizei>(c.width); 4638 GLsizei width = static_cast<GLsizei>(c.width);
4749 GLsizei height = static_cast<GLsizei>(c.height); 4639 GLsizei height = static_cast<GLsizei>(c.height);
4750 if (!validators_->texture_bind_target.IsValid(target)) { 4640 if (!validators_->texture_bind_target.IsValid(target)) {
(...skipping 16 matching lines...) Expand all
4767 if (height < 0) { 4657 if (height < 0) {
4768 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0"); 4658 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0");
4769 return error::kNoError; 4659 return error::kNoError;
4770 } 4660 }
4771 DoTexStorage2DEXT(target, levels, internalFormat, width, height); 4661 DoTexStorage2DEXT(target, levels, internalFormat, width, height);
4772 return error::kNoError; 4662 return error::kNoError;
4773 } 4663 }
4774 4664
4775 error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate( 4665 error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate(
4776 uint32_t immediate_data_size, 4666 uint32_t immediate_data_size,
4777 const void* cmd_data) { 4667 const volatile void* cmd_data) {
4778 const gles2::cmds::GenQueriesEXTImmediate& c = 4668 const volatile gles2::cmds::GenQueriesEXTImmediate& c =
4779 *static_cast<const gles2::cmds::GenQueriesEXTImmediate*>(cmd_data); 4669 *static_cast<const volatile gles2::cmds::GenQueriesEXTImmediate*>(
4780 (void)c; 4670 cmd_data);
4781 GLsizei n = static_cast<GLsizei>(c.n); 4671 GLsizei n = static_cast<GLsizei>(c.n);
4782 uint32_t data_size; 4672 uint32_t data_size;
4783 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4673 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4784 return error::kOutOfBounds; 4674 return error::kOutOfBounds;
4785 } 4675 }
4786 GLuint* queries = 4676 volatile GLuint* queries =
4787 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 4677 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
4788 if (queries == NULL) { 4678 if (queries == NULL) {
4789 return error::kOutOfBounds; 4679 return error::kOutOfBounds;
4790 } 4680 }
4791 auto queries_copy = base::MakeUnique<GLuint[]>(n); 4681 auto queries_copy = base::MakeUnique<GLuint[]>(n);
4792 GLuint* queries_safe = queries_copy.get(); 4682 GLuint* queries_safe = queries_copy.get();
4793 std::copy(queries, queries + n, queries_safe); 4683 std::copy(queries, queries + n, queries_safe);
4794 if (!CheckUniqueAndNonNullIds(n, queries_safe) || 4684 if (!CheckUniqueAndNonNullIds(n, queries_safe) ||
4795 !GenQueriesEXTHelper(n, queries_safe)) { 4685 !GenQueriesEXTHelper(n, queries_safe)) {
4796 return error::kInvalidArguments; 4686 return error::kInvalidArguments;
4797 } 4687 }
4798 return error::kNoError; 4688 return error::kNoError;
4799 } 4689 }
4800 4690
4801 error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate( 4691 error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate(
4802 uint32_t immediate_data_size, 4692 uint32_t immediate_data_size,
4803 const void* cmd_data) { 4693 const volatile void* cmd_data) {
4804 const gles2::cmds::DeleteQueriesEXTImmediate& c = 4694 const volatile gles2::cmds::DeleteQueriesEXTImmediate& c =
4805 *static_cast<const gles2::cmds::DeleteQueriesEXTImmediate*>(cmd_data); 4695 *static_cast<const volatile gles2::cmds::DeleteQueriesEXTImmediate*>(
4806 (void)c; 4696 cmd_data);
4807 GLsizei n = static_cast<GLsizei>(c.n); 4697 GLsizei n = static_cast<GLsizei>(c.n);
4808 uint32_t data_size; 4698 uint32_t data_size;
4809 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4699 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4810 return error::kOutOfBounds; 4700 return error::kOutOfBounds;
4811 } 4701 }
4812 const GLuint* queries = 4702 volatile const GLuint* queries = GetImmediateDataAs<volatile const GLuint*>(
4813 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 4703 c, data_size, immediate_data_size);
4814 if (queries == NULL) { 4704 if (queries == NULL) {
4815 return error::kOutOfBounds; 4705 return error::kOutOfBounds;
4816 } 4706 }
4817 DeleteQueriesEXTHelper(n, queries); 4707 DeleteQueriesEXTHelper(n, queries);
4818 return error::kNoError; 4708 return error::kNoError;
4819 } 4709 }
4820 4710
4821 error::Error GLES2DecoderImpl::HandleBeginTransformFeedback( 4711 error::Error GLES2DecoderImpl::HandleBeginTransformFeedback(
4822 uint32_t immediate_data_size, 4712 uint32_t immediate_data_size,
4823 const void* cmd_data) { 4713 const volatile void* cmd_data) {
4824 if (!unsafe_es3_apis_enabled()) 4714 if (!unsafe_es3_apis_enabled())
4825 return error::kUnknownCommand; 4715 return error::kUnknownCommand;
4826 const gles2::cmds::BeginTransformFeedback& c = 4716 const volatile gles2::cmds::BeginTransformFeedback& c =
4827 *static_cast<const gles2::cmds::BeginTransformFeedback*>(cmd_data); 4717 *static_cast<const volatile gles2::cmds::BeginTransformFeedback*>(
4828 (void)c; 4718 cmd_data);
4829 GLenum primitivemode = static_cast<GLenum>(c.primitivemode); 4719 GLenum primitivemode = static_cast<GLenum>(c.primitivemode);
4830 if (!validators_->transform_feedback_primitive_mode.IsValid(primitivemode)) { 4720 if (!validators_->transform_feedback_primitive_mode.IsValid(primitivemode)) {
4831 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBeginTransformFeedback", primitivemode, 4721 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBeginTransformFeedback", primitivemode,
4832 "primitivemode"); 4722 "primitivemode");
4833 return error::kNoError; 4723 return error::kNoError;
4834 } 4724 }
4835 DoBeginTransformFeedback(primitivemode); 4725 DoBeginTransformFeedback(primitivemode);
4836 return error::kNoError; 4726 return error::kNoError;
4837 } 4727 }
4838 4728
4839 error::Error GLES2DecoderImpl::HandleEndTransformFeedback( 4729 error::Error GLES2DecoderImpl::HandleEndTransformFeedback(
4840 uint32_t immediate_data_size, 4730 uint32_t immediate_data_size,
4841 const void* cmd_data) { 4731 const volatile void* cmd_data) {
4842 if (!unsafe_es3_apis_enabled()) 4732 if (!unsafe_es3_apis_enabled())
4843 return error::kUnknownCommand; 4733 return error::kUnknownCommand;
4844 const gles2::cmds::EndTransformFeedback& c =
4845 *static_cast<const gles2::cmds::EndTransformFeedback*>(cmd_data);
4846 (void)c;
4847 DoEndTransformFeedback(); 4734 DoEndTransformFeedback();
4848 return error::kNoError; 4735 return error::kNoError;
4849 } 4736 }
4850 4737
4851 error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT( 4738 error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT(
4852 uint32_t immediate_data_size, 4739 uint32_t immediate_data_size,
4853 const void* cmd_data) { 4740 const volatile void* cmd_data) {
4854 const gles2::cmds::InsertEventMarkerEXT& c = 4741 const volatile gles2::cmds::InsertEventMarkerEXT& c =
4855 *static_cast<const gles2::cmds::InsertEventMarkerEXT*>(cmd_data); 4742 *static_cast<const volatile gles2::cmds::InsertEventMarkerEXT*>(cmd_data);
4856 (void)c;
4857 4743
4858 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 4744 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
4859 Bucket* bucket = GetBucket(bucket_id); 4745 Bucket* bucket = GetBucket(bucket_id);
4860 if (!bucket || bucket->size() == 0) { 4746 if (!bucket || bucket->size() == 0) {
4861 return error::kInvalidArguments; 4747 return error::kInvalidArguments;
4862 } 4748 }
4863 std::string str; 4749 std::string str;
4864 if (!bucket->GetAsString(&str)) { 4750 if (!bucket->GetAsString(&str)) {
4865 return error::kInvalidArguments; 4751 return error::kInvalidArguments;
4866 } 4752 }
4867 DoInsertEventMarkerEXT(0, str.c_str()); 4753 DoInsertEventMarkerEXT(0, str.c_str());
4868 return error::kNoError; 4754 return error::kNoError;
4869 } 4755 }
4870 4756
4871 error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT( 4757 error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT(
4872 uint32_t immediate_data_size, 4758 uint32_t immediate_data_size,
4873 const void* cmd_data) { 4759 const volatile void* cmd_data) {
4874 const gles2::cmds::PushGroupMarkerEXT& c = 4760 const volatile gles2::cmds::PushGroupMarkerEXT& c =
4875 *static_cast<const gles2::cmds::PushGroupMarkerEXT*>(cmd_data); 4761 *static_cast<const volatile gles2::cmds::PushGroupMarkerEXT*>(cmd_data);
4876 (void)c;
4877 4762
4878 GLuint bucket_id = static_cast<GLuint>(c.bucket_id); 4763 GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
4879 Bucket* bucket = GetBucket(bucket_id); 4764 Bucket* bucket = GetBucket(bucket_id);
4880 if (!bucket || bucket->size() == 0) { 4765 if (!bucket || bucket->size() == 0) {
4881 return error::kInvalidArguments; 4766 return error::kInvalidArguments;
4882 } 4767 }
4883 std::string str; 4768 std::string str;
4884 if (!bucket->GetAsString(&str)) { 4769 if (!bucket->GetAsString(&str)) {
4885 return error::kInvalidArguments; 4770 return error::kInvalidArguments;
4886 } 4771 }
4887 DoPushGroupMarkerEXT(0, str.c_str()); 4772 DoPushGroupMarkerEXT(0, str.c_str());
4888 return error::kNoError; 4773 return error::kNoError;
4889 } 4774 }
4890 4775
4891 error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT( 4776 error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT(
4892 uint32_t immediate_data_size, 4777 uint32_t immediate_data_size,
4893 const void* cmd_data) { 4778 const volatile void* cmd_data) {
4894 const gles2::cmds::PopGroupMarkerEXT& c =
4895 *static_cast<const gles2::cmds::PopGroupMarkerEXT*>(cmd_data);
4896 (void)c;
4897 DoPopGroupMarkerEXT(); 4779 DoPopGroupMarkerEXT();
4898 return error::kNoError; 4780 return error::kNoError;
4899 } 4781 }
4900 4782
4901 error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate( 4783 error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate(
4902 uint32_t immediate_data_size, 4784 uint32_t immediate_data_size,
4903 const void* cmd_data) { 4785 const volatile void* cmd_data) {
4904 const gles2::cmds::GenVertexArraysOESImmediate& c = 4786 const volatile gles2::cmds::GenVertexArraysOESImmediate& c =
4905 *static_cast<const gles2::cmds::GenVertexArraysOESImmediate*>(cmd_data); 4787 *static_cast<const volatile gles2::cmds::GenVertexArraysOESImmediate*>(
4906 (void)c; 4788 cmd_data);
4907 GLsizei n = static_cast<GLsizei>(c.n); 4789 GLsizei n = static_cast<GLsizei>(c.n);
4908 uint32_t data_size; 4790 uint32_t data_size;
4909 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4791 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4910 return error::kOutOfBounds; 4792 return error::kOutOfBounds;
4911 } 4793 }
4912 GLuint* arrays = 4794 volatile GLuint* arrays =
4913 GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size); 4795 GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
4914 if (arrays == NULL) { 4796 if (arrays == NULL) {
4915 return error::kOutOfBounds; 4797 return error::kOutOfBounds;
4916 } 4798 }
4917 auto arrays_copy = base::MakeUnique<GLuint[]>(n); 4799 auto arrays_copy = base::MakeUnique<GLuint[]>(n);
4918 GLuint* arrays_safe = arrays_copy.get(); 4800 GLuint* arrays_safe = arrays_copy.get();
4919 std::copy(arrays, arrays + n, arrays_safe); 4801 std::copy(arrays, arrays + n, arrays_safe);
4920 if (!CheckUniqueAndNonNullIds(n, arrays_safe) || 4802 if (!CheckUniqueAndNonNullIds(n, arrays_safe) ||
4921 !GenVertexArraysOESHelper(n, arrays_safe)) { 4803 !GenVertexArraysOESHelper(n, arrays_safe)) {
4922 return error::kInvalidArguments; 4804 return error::kInvalidArguments;
4923 } 4805 }
4924 return error::kNoError; 4806 return error::kNoError;
4925 } 4807 }
4926 4808
4927 error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate( 4809 error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate(
4928 uint32_t immediate_data_size, 4810 uint32_t immediate_data_size,
4929 const void* cmd_data) { 4811 const volatile void* cmd_data) {
4930 const gles2::cmds::DeleteVertexArraysOESImmediate& c = 4812 const volatile gles2::cmds::DeleteVertexArraysOESImmediate& c =
4931 *static_cast<const gles2::cmds::DeleteVertexArraysOESImmediate*>( 4813 *static_cast<const volatile gles2::cmds::DeleteVertexArraysOESImmediate*>(
4932 cmd_data); 4814 cmd_data);
4933 (void)c;
4934 GLsizei n = static_cast<GLsizei>(c.n); 4815 GLsizei n = static_cast<GLsizei>(c.n);
4935 uint32_t data_size; 4816 uint32_t data_size;
4936 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4817 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4937 return error::kOutOfBounds; 4818 return error::kOutOfBounds;
4938 } 4819 }
4939 const GLuint* arrays = 4820 volatile const GLuint* arrays = GetImmediateDataAs<volatile const GLuint*>(
4940 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 4821 c, data_size, immediate_data_size);
4941 if (arrays == NULL) { 4822 if (arrays == NULL) {
4942 return error::kOutOfBounds; 4823 return error::kOutOfBounds;
4943 } 4824 }
4944 DeleteVertexArraysOESHelper(n, arrays); 4825 DeleteVertexArraysOESHelper(n, arrays);
4945 return error::kNoError; 4826 return error::kNoError;
4946 } 4827 }
4947 4828
4948 error::Error GLES2DecoderImpl::HandleIsVertexArrayOES( 4829 error::Error GLES2DecoderImpl::HandleIsVertexArrayOES(
4949 uint32_t immediate_data_size, 4830 uint32_t immediate_data_size,
4950 const void* cmd_data) { 4831 const volatile void* cmd_data) {
4951 const gles2::cmds::IsVertexArrayOES& c = 4832 const volatile gles2::cmds::IsVertexArrayOES& c =
4952 *static_cast<const gles2::cmds::IsVertexArrayOES*>(cmd_data); 4833 *static_cast<const volatile gles2::cmds::IsVertexArrayOES*>(cmd_data);
4953 (void)c;
4954 GLuint array = c.array; 4834 GLuint array = c.array;
4955 typedef cmds::IsVertexArrayOES::Result Result; 4835 typedef cmds::IsVertexArrayOES::Result Result;
4956 Result* result_dst = GetSharedMemoryAs<Result*>( 4836 Result* result_dst = GetSharedMemoryAs<Result*>(
4957 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 4837 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
4958 if (!result_dst) { 4838 if (!result_dst) {
4959 return error::kOutOfBounds; 4839 return error::kOutOfBounds;
4960 } 4840 }
4961 *result_dst = DoIsVertexArrayOES(array); 4841 *result_dst = DoIsVertexArrayOES(array);
4962 return error::kNoError; 4842 return error::kNoError;
4963 } 4843 }
4964 4844
4965 error::Error GLES2DecoderImpl::HandleBindVertexArrayOES( 4845 error::Error GLES2DecoderImpl::HandleBindVertexArrayOES(
4966 uint32_t immediate_data_size, 4846 uint32_t immediate_data_size,
4967 const void* cmd_data) { 4847 const volatile void* cmd_data) {
4968 const gles2::cmds::BindVertexArrayOES& c = 4848 const volatile gles2::cmds::BindVertexArrayOES& c =
4969 *static_cast<const gles2::cmds::BindVertexArrayOES*>(cmd_data); 4849 *static_cast<const volatile gles2::cmds::BindVertexArrayOES*>(cmd_data);
4970 (void)c;
4971 GLuint array = c.array; 4850 GLuint array = c.array;
4972 DoBindVertexArrayOES(array); 4851 DoBindVertexArrayOES(array);
4973 return error::kNoError; 4852 return error::kNoError;
4974 } 4853 }
4975 4854
4976 error::Error GLES2DecoderImpl::HandleSwapBuffers(uint32_t immediate_data_size, 4855 error::Error GLES2DecoderImpl::HandleSwapBuffers(
4977 const void* cmd_data) { 4856 uint32_t immediate_data_size,
4978 const gles2::cmds::SwapBuffers& c = 4857 const volatile void* cmd_data) {
4979 *static_cast<const gles2::cmds::SwapBuffers*>(cmd_data);
4980 (void)c;
4981 DoSwapBuffers(); 4858 DoSwapBuffers();
4982 return error::kNoError; 4859 return error::kNoError;
4983 } 4860 }
4984 4861
4985 error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM( 4862 error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM(
4986 uint32_t immediate_data_size, 4863 uint32_t immediate_data_size,
4987 const void* cmd_data) { 4864 const volatile void* cmd_data) {
4988 const gles2::cmds::GetMaxValueInBufferCHROMIUM& c = 4865 const volatile gles2::cmds::GetMaxValueInBufferCHROMIUM& c =
4989 *static_cast<const gles2::cmds::GetMaxValueInBufferCHROMIUM*>(cmd_data); 4866 *static_cast<const volatile gles2::cmds::GetMaxValueInBufferCHROMIUM*>(
4990 (void)c; 4867 cmd_data);
4991 GLuint buffer_id = c.buffer_id; 4868 GLuint buffer_id = c.buffer_id;
4992 GLsizei count = static_cast<GLsizei>(c.count); 4869 GLsizei count = static_cast<GLsizei>(c.count);
4993 GLenum type = static_cast<GLenum>(c.type); 4870 GLenum type = static_cast<GLenum>(c.type);
4994 GLuint offset = static_cast<GLuint>(c.offset); 4871 GLuint offset = static_cast<GLuint>(c.offset);
4995 typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result; 4872 typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result;
4996 Result* result_dst = GetSharedMemoryAs<Result*>( 4873 Result* result_dst = GetSharedMemoryAs<Result*>(
4997 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 4874 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
4998 if (!result_dst) { 4875 if (!result_dst) {
4999 return error::kOutOfBounds; 4876 return error::kOutOfBounds;
5000 } 4877 }
5001 if (count < 0) { 4878 if (count < 0) {
5002 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetMaxValueInBufferCHROMIUM", 4879 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetMaxValueInBufferCHROMIUM",
5003 "count < 0"); 4880 "count < 0");
5004 return error::kNoError; 4881 return error::kNoError;
5005 } 4882 }
5006 if (!validators_->get_max_index_type.IsValid(type)) { 4883 if (!validators_->get_max_index_type.IsValid(type)) {
5007 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetMaxValueInBufferCHROMIUM", type, 4884 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetMaxValueInBufferCHROMIUM", type,
5008 "type"); 4885 "type");
5009 return error::kNoError; 4886 return error::kNoError;
5010 } 4887 }
5011 *result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset); 4888 *result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset);
5012 return error::kNoError; 4889 return error::kNoError;
5013 } 4890 }
5014 4891
5015 error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM( 4892 error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM(
5016 uint32_t immediate_data_size, 4893 uint32_t immediate_data_size,
5017 const void* cmd_data) { 4894 const volatile void* cmd_data) {
5018 const gles2::cmds::CopyTextureCHROMIUM& c = 4895 const volatile gles2::cmds::CopyTextureCHROMIUM& c =
5019 *static_cast<const gles2::cmds::CopyTextureCHROMIUM*>(cmd_data); 4896 *static_cast<const volatile gles2::cmds::CopyTextureCHROMIUM*>(cmd_data);
5020 (void)c;
5021 GLenum source_id = static_cast<GLenum>(c.source_id); 4897 GLenum source_id = static_cast<GLenum>(c.source_id);
5022 GLenum dest_id = static_cast<GLenum>(c.dest_id); 4898 GLenum dest_id = static_cast<GLenum>(c.dest_id);
5023 GLint internalformat = static_cast<GLint>(c.internalformat); 4899 GLint internalformat = static_cast<GLint>(c.internalformat);
5024 GLenum dest_type = static_cast<GLenum>(c.dest_type); 4900 GLenum dest_type = static_cast<GLenum>(c.dest_type);
5025 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); 4901 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y);
5026 GLboolean unpack_premultiply_alpha = 4902 GLboolean unpack_premultiply_alpha =
5027 static_cast<GLboolean>(c.unpack_premultiply_alpha); 4903 static_cast<GLboolean>(c.unpack_premultiply_alpha);
5028 GLboolean unpack_unmultiply_alpha = 4904 GLboolean unpack_unmultiply_alpha =
5029 static_cast<GLboolean>(c.unpack_unmultiply_alpha); 4905 static_cast<GLboolean>(c.unpack_unmultiply_alpha);
5030 if (!validators_->texture_internal_format.IsValid(internalformat)) { 4906 if (!validators_->texture_internal_format.IsValid(internalformat)) {
5031 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTextureCHROMIUM", 4907 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTextureCHROMIUM",
5032 "internalformat GL_INVALID_VALUE"); 4908 "internalformat GL_INVALID_VALUE");
5033 return error::kNoError; 4909 return error::kNoError;
5034 } 4910 }
5035 if (!validators_->pixel_type.IsValid(dest_type)) { 4911 if (!validators_->pixel_type.IsValid(dest_type)) {
5036 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTextureCHROMIUM", dest_type, 4912 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTextureCHROMIUM", dest_type,
5037 "dest_type"); 4913 "dest_type");
5038 return error::kNoError; 4914 return error::kNoError;
5039 } 4915 }
5040 DoCopyTextureCHROMIUM(source_id, dest_id, internalformat, dest_type, 4916 DoCopyTextureCHROMIUM(source_id, dest_id, internalformat, dest_type,
5041 unpack_flip_y, unpack_premultiply_alpha, 4917 unpack_flip_y, unpack_premultiply_alpha,
5042 unpack_unmultiply_alpha); 4918 unpack_unmultiply_alpha);
5043 return error::kNoError; 4919 return error::kNoError;
5044 } 4920 }
5045 4921
5046 error::Error GLES2DecoderImpl::HandleCopySubTextureCHROMIUM( 4922 error::Error GLES2DecoderImpl::HandleCopySubTextureCHROMIUM(
5047 uint32_t immediate_data_size, 4923 uint32_t immediate_data_size,
5048 const void* cmd_data) { 4924 const volatile void* cmd_data) {
5049 const gles2::cmds::CopySubTextureCHROMIUM& c = 4925 const volatile gles2::cmds::CopySubTextureCHROMIUM& c =
5050 *static_cast<const gles2::cmds::CopySubTextureCHROMIUM*>(cmd_data); 4926 *static_cast<const volatile gles2::cmds::CopySubTextureCHROMIUM*>(
5051 (void)c; 4927 cmd_data);
5052 GLenum source_id = static_cast<GLenum>(c.source_id); 4928 GLenum source_id = static_cast<GLenum>(c.source_id);
5053 GLenum dest_id = static_cast<GLenum>(c.dest_id); 4929 GLenum dest_id = static_cast<GLenum>(c.dest_id);
5054 GLint xoffset = static_cast<GLint>(c.xoffset); 4930 GLint xoffset = static_cast<GLint>(c.xoffset);
5055 GLint yoffset = static_cast<GLint>(c.yoffset); 4931 GLint yoffset = static_cast<GLint>(c.yoffset);
5056 GLint x = static_cast<GLint>(c.x); 4932 GLint x = static_cast<GLint>(c.x);
5057 GLint y = static_cast<GLint>(c.y); 4933 GLint y = static_cast<GLint>(c.y);
5058 GLsizei width = static_cast<GLsizei>(c.width); 4934 GLsizei width = static_cast<GLsizei>(c.width);
5059 GLsizei height = static_cast<GLsizei>(c.height); 4935 GLsizei height = static_cast<GLsizei>(c.height);
5060 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y); 4936 GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y);
5061 GLboolean unpack_premultiply_alpha = 4937 GLboolean unpack_premultiply_alpha =
(...skipping 11 matching lines...) Expand all
5073 return error::kNoError; 4949 return error::kNoError;
5074 } 4950 }
5075 DoCopySubTextureCHROMIUM(source_id, dest_id, xoffset, yoffset, x, y, width, 4951 DoCopySubTextureCHROMIUM(source_id, dest_id, xoffset, yoffset, x, y, width,
5076 height, unpack_flip_y, unpack_premultiply_alpha, 4952 height, unpack_flip_y, unpack_premultiply_alpha,
5077 unpack_unmultiply_alpha); 4953 unpack_unmultiply_alpha);
5078 return error::kNoError; 4954 return error::kNoError;
5079 } 4955 }
5080 4956
5081 error::Error GLES2DecoderImpl::HandleCompressedCopyTextureCHROMIUM( 4957 error::Error GLES2DecoderImpl::HandleCompressedCopyTextureCHROMIUM(
5082 uint32_t immediate_data_size, 4958 uint32_t immediate_data_size,
5083 const void* cmd_data) { 4959 const volatile void* cmd_data) {
5084 const gles2::cmds::CompressedCopyTextureCHROMIUM& c = 4960 const volatile gles2::cmds::CompressedCopyTextureCHROMIUM& c =
5085 *static_cast<const gles2::cmds::CompressedCopyTextureCHROMIUM*>(cmd_data); 4961 *static_cast<const volatile gles2::cmds::CompressedCopyTextureCHROMIUM*>(
5086 (void)c; 4962 cmd_data);
5087 GLenum source_id = static_cast<GLenum>(c.source_id); 4963 GLenum source_id = static_cast<GLenum>(c.source_id);
5088 GLenum dest_id = static_cast<GLenum>(c.dest_id); 4964 GLenum dest_id = static_cast<GLenum>(c.dest_id);
5089 DoCompressedCopyTextureCHROMIUM(source_id, dest_id); 4965 DoCompressedCopyTextureCHROMIUM(source_id, dest_id);
5090 return error::kNoError; 4966 return error::kNoError;
5091 } 4967 }
5092 4968
5093 error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate( 4969 error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate(
5094 uint32_t immediate_data_size, 4970 uint32_t immediate_data_size,
5095 const void* cmd_data) { 4971 const volatile void* cmd_data) {
5096 const gles2::cmds::ProduceTextureCHROMIUMImmediate& c = 4972 const volatile gles2::cmds::ProduceTextureCHROMIUMImmediate& c = *static_cast<
5097 *static_cast<const gles2::cmds::ProduceTextureCHROMIUMImmediate*>( 4973 const volatile gles2::cmds::ProduceTextureCHROMIUMImmediate*>(cmd_data);
5098 cmd_data);
5099 (void)c;
5100 GLenum target = static_cast<GLenum>(c.target); 4974 GLenum target = static_cast<GLenum>(c.target);
5101 uint32_t data_size; 4975 uint32_t data_size;
5102 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 4976 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
5103 return error::kOutOfBounds; 4977 return error::kOutOfBounds;
5104 } 4978 }
5105 if (data_size > immediate_data_size) { 4979 if (data_size > immediate_data_size) {
5106 return error::kOutOfBounds; 4980 return error::kOutOfBounds;
5107 } 4981 }
5108 const GLbyte* mailbox = 4982 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>(
5109 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 4983 c, data_size, immediate_data_size);
5110 if (!validators_->texture_bind_target.IsValid(target)) { 4984 if (!validators_->texture_bind_target.IsValid(target)) {
5111 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target, 4985 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target,
5112 "target"); 4986 "target");
5113 return error::kNoError; 4987 return error::kNoError;
5114 } 4988 }
5115 if (mailbox == NULL) { 4989 if (mailbox == NULL) {
5116 return error::kOutOfBounds; 4990 return error::kOutOfBounds;
5117 } 4991 }
5118 DoProduceTextureCHROMIUM(target, mailbox); 4992 DoProduceTextureCHROMIUM(target, mailbox);
5119 return error::kNoError; 4993 return error::kNoError;
5120 } 4994 }
5121 4995
5122 error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate( 4996 error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate(
5123 uint32_t immediate_data_size, 4997 uint32_t immediate_data_size,
5124 const void* cmd_data) { 4998 const volatile void* cmd_data) {
5125 const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c = 4999 const volatile gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c =
5126 *static_cast<const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate*>( 5000 *static_cast<
5001 const volatile gles2::cmds::ProduceTextureDirectCHROMIUMImmediate*>(
5127 cmd_data); 5002 cmd_data);
5128 (void)c;
5129 GLuint texture = c.texture; 5003 GLuint texture = c.texture;
5130 GLenum target = static_cast<GLenum>(c.target); 5004 GLenum target = static_cast<GLenum>(c.target);
5131 uint32_t data_size; 5005 uint32_t data_size;
5132 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 5006 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
5133 return error::kOutOfBounds; 5007 return error::kOutOfBounds;
5134 } 5008 }
5135 if (data_size > immediate_data_size) { 5009 if (data_size > immediate_data_size) {
5136 return error::kOutOfBounds; 5010 return error::kOutOfBounds;
5137 } 5011 }
5138 const GLbyte* mailbox = 5012 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>(
5139 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 5013 c, data_size, immediate_data_size);
5140 if (!validators_->texture_bind_target.IsValid(target)) { 5014 if (!validators_->texture_bind_target.IsValid(target)) {
5141 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureDirectCHROMIUM", target, 5015 LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureDirectCHROMIUM", target,
5142 "target"); 5016 "target");
5143 return error::kNoError; 5017 return error::kNoError;
5144 } 5018 }
5145 if (mailbox == NULL) { 5019 if (mailbox == NULL) {
5146 return error::kOutOfBounds; 5020 return error::kOutOfBounds;
5147 } 5021 }
5148 DoProduceTextureDirectCHROMIUM(texture, target, mailbox); 5022 DoProduceTextureDirectCHROMIUM(texture, target, mailbox);
5149 return error::kNoError; 5023 return error::kNoError;
5150 } 5024 }
5151 5025
5152 error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate( 5026 error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate(
5153 uint32_t immediate_data_size, 5027 uint32_t immediate_data_size,
5154 const void* cmd_data) { 5028 const volatile void* cmd_data) {
5155 const gles2::cmds::ConsumeTextureCHROMIUMImmediate& c = 5029 const volatile gles2::cmds::ConsumeTextureCHROMIUMImmediate& c = *static_cast<
5156 *static_cast<const gles2::cmds::ConsumeTextureCHROMIUMImmediate*>( 5030 const volatile gles2::cmds::ConsumeTextureCHROMIUMImmediate*>(cmd_data);
5157 cmd_data);
5158 (void)c;
5159 GLenum target = static_cast<GLenum>(c.target); 5031 GLenum target = static_cast<GLenum>(c.target);
5160 uint32_t data_size; 5032 uint32_t data_size;
5161 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 5033 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
5162 return error::kOutOfBounds; 5034 return error::kOutOfBounds;
5163 } 5035 }
5164 if (data_size > immediate_data_size) { 5036 if (data_size > immediate_data_size) {
5165 return error::kOutOfBounds; 5037 return error::kOutOfBounds;
5166 } 5038 }
5167 const GLbyte* mailbox = 5039 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>(
5168 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 5040 c, data_size, immediate_data_size);
5169 if (!validators_->texture_bind_target.IsValid(target)) { 5041 if (!validators_->texture_bind_target.IsValid(target)) {
5170 LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target, 5042 LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target,
5171 "target"); 5043 "target");
5172 return error::kNoError; 5044 return error::kNoError;
5173 } 5045 }
5174 if (mailbox == NULL) { 5046 if (mailbox == NULL) {
5175 return error::kOutOfBounds; 5047 return error::kOutOfBounds;
5176 } 5048 }
5177 DoConsumeTextureCHROMIUM(target, mailbox); 5049 DoConsumeTextureCHROMIUM(target, mailbox);
5178 return error::kNoError; 5050 return error::kNoError;
5179 } 5051 }
5180 5052
5181 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureINTERNALImmediate( 5053 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureINTERNALImmediate(
5182 uint32_t immediate_data_size, 5054 uint32_t immediate_data_size,
5183 const void* cmd_data) { 5055 const volatile void* cmd_data) {
5184 const gles2::cmds::CreateAndConsumeTextureINTERNALImmediate& c = *static_cast< 5056 const volatile gles2::cmds::CreateAndConsumeTextureINTERNALImmediate& c =
5185 const gles2::cmds::CreateAndConsumeTextureINTERNALImmediate*>(cmd_data); 5057 *static_cast<const volatile gles2::cmds::
5186 (void)c; 5058 CreateAndConsumeTextureINTERNALImmediate*>(cmd_data);
5187 GLenum target = static_cast<GLenum>(c.target); 5059 GLenum target = static_cast<GLenum>(c.target);
5188 GLuint texture = static_cast<GLuint>(c.texture); 5060 GLuint texture = static_cast<GLuint>(c.texture);
5189 uint32_t data_size; 5061 uint32_t data_size;
5190 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 5062 if (!GLES2Util::ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
5191 return error::kOutOfBounds; 5063 return error::kOutOfBounds;
5192 } 5064 }
5193 if (data_size > immediate_data_size) { 5065 if (data_size > immediate_data_size) {
5194 return error::kOutOfBounds; 5066 return error::kOutOfBounds;
5195 } 5067 }
5196 const GLbyte* mailbox = 5068 volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>(
5197 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 5069 c, data_size, immediate_data_size);
5198 if (!validators_->texture_bind_target.IsValid(target)) { 5070 if (!validators_->texture_bind_target.IsValid(target)) {
5199 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateAndConsumeTextureINTERNAL", target, 5071 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateAndConsumeTextureINTERNAL", target,
5200 "target"); 5072 "target");
5201 return error::kNoError; 5073 return error::kNoError;
5202 } 5074 }
5203 if (mailbox == NULL) { 5075 if (mailbox == NULL) {
5204 return error::kOutOfBounds; 5076 return error::kOutOfBounds;
5205 } 5077 }
5206 DoCreateAndConsumeTextureINTERNAL(target, texture, mailbox); 5078 DoCreateAndConsumeTextureINTERNAL(target, texture, mailbox);
5207 return error::kNoError; 5079 return error::kNoError;
5208 } 5080 }
5209 5081
5210 error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM( 5082 error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM(
5211 uint32_t immediate_data_size, 5083 uint32_t immediate_data_size,
5212 const void* cmd_data) { 5084 const volatile void* cmd_data) {
5213 const gles2::cmds::BindTexImage2DCHROMIUM& c = 5085 const volatile gles2::cmds::BindTexImage2DCHROMIUM& c =
5214 *static_cast<const gles2::cmds::BindTexImage2DCHROMIUM*>(cmd_data); 5086 *static_cast<const volatile gles2::cmds::BindTexImage2DCHROMIUM*>(
5215 (void)c; 5087 cmd_data);
5216 GLenum target = static_cast<GLenum>(c.target); 5088 GLenum target = static_cast<GLenum>(c.target);
5217 GLint imageId = static_cast<GLint>(c.imageId); 5089 GLint imageId = static_cast<GLint>(c.imageId);
5218 if (!validators_->texture_bind_target.IsValid(target)) { 5090 if (!validators_->texture_bind_target.IsValid(target)) {
5219 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target, 5091 LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target,
5220 "target"); 5092 "target");
5221 return error::kNoError; 5093 return error::kNoError;
5222 } 5094 }
5223 DoBindTexImage2DCHROMIUM(target, imageId); 5095 DoBindTexImage2DCHROMIUM(target, imageId);
5224 return error::kNoError; 5096 return error::kNoError;
5225 } 5097 }
5226 5098
5227 error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM( 5099 error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM(
5228 uint32_t immediate_data_size, 5100 uint32_t immediate_data_size,
5229 const void* cmd_data) { 5101 const volatile void* cmd_data) {
5230 const gles2::cmds::ReleaseTexImage2DCHROMIUM& c = 5102 const volatile gles2::cmds::ReleaseTexImage2DCHROMIUM& c =
5231 *static_cast<const gles2::cmds::ReleaseTexImage2DCHROMIUM*>(cmd_data); 5103 *static_cast<const volatile gles2::cmds::ReleaseTexImage2DCHROMIUM*>(
5232 (void)c; 5104 cmd_data);
5233 GLenum target = static_cast<GLenum>(c.target); 5105 GLenum target = static_cast<GLenum>(c.target);
5234 GLint imageId = static_cast<GLint>(c.imageId); 5106 GLint imageId = static_cast<GLint>(c.imageId);
5235 if (!validators_->texture_bind_target.IsValid(target)) { 5107 if (!validators_->texture_bind_target.IsValid(target)) {
5236 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target, 5108 LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target,
5237 "target"); 5109 "target");
5238 return error::kNoError; 5110 return error::kNoError;
5239 } 5111 }
5240 DoReleaseTexImage2DCHROMIUM(target, imageId); 5112 DoReleaseTexImage2DCHROMIUM(target, imageId);
5241 return error::kNoError; 5113 return error::kNoError;
5242 } 5114 }
5243 5115
5244 error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM( 5116 error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM(
5245 uint32_t immediate_data_size, 5117 uint32_t immediate_data_size,
5246 const void* cmd_data) { 5118 const volatile void* cmd_data) {
5247 const gles2::cmds::TraceEndCHROMIUM& c =
5248 *static_cast<const gles2::cmds::TraceEndCHROMIUM*>(cmd_data);
5249 (void)c;
5250 DoTraceEndCHROMIUM(); 5119 DoTraceEndCHROMIUM();
5251 return error::kNoError; 5120 return error::kNoError;
5252 } 5121 }
5253 5122
5254 error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate( 5123 error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate(
5255 uint32_t immediate_data_size, 5124 uint32_t immediate_data_size,
5256 const void* cmd_data) { 5125 const volatile void* cmd_data) {
5257 const gles2::cmds::DiscardFramebufferEXTImmediate& c = 5126 const volatile gles2::cmds::DiscardFramebufferEXTImmediate& c =
5258 *static_cast<const gles2::cmds::DiscardFramebufferEXTImmediate*>( 5127 *static_cast<const volatile gles2::cmds::DiscardFramebufferEXTImmediate*>(
5259 cmd_data); 5128 cmd_data);
5260 (void)c;
5261 if (!features().ext_discard_framebuffer) { 5129 if (!features().ext_discard_framebuffer) {
5262 return error::kUnknownCommand; 5130 return error::kUnknownCommand;
5263 } 5131 }
5264 5132
5265 GLenum target = static_cast<GLenum>(c.target); 5133 GLenum target = static_cast<GLenum>(c.target);
5266 GLsizei count = static_cast<GLsizei>(c.count); 5134 GLsizei count = static_cast<GLsizei>(c.count);
5267 uint32_t data_size = 0; 5135 uint32_t data_size = 0;
5268 if (count >= 0 && 5136 if (count >= 0 &&
5269 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 5137 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
5270 return error::kOutOfBounds; 5138 return error::kOutOfBounds;
5271 } 5139 }
5272 if (data_size > immediate_data_size) { 5140 if (data_size > immediate_data_size) {
5273 return error::kOutOfBounds; 5141 return error::kOutOfBounds;
5274 } 5142 }
5275 const GLenum* attachments = 5143 volatile const GLenum* attachments =
5276 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 5144 GetImmediateDataAs<volatile const GLenum*>(c, data_size,
5145 immediate_data_size);
5277 if (count < 0) { 5146 if (count < 0) {
5278 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDiscardFramebufferEXT", 5147 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDiscardFramebufferEXT",
5279 "count < 0"); 5148 "count < 0");
5280 return error::kNoError; 5149 return error::kNoError;
5281 } 5150 }
5282 if (attachments == NULL) { 5151 if (attachments == NULL) {
5283 return error::kOutOfBounds; 5152 return error::kOutOfBounds;
5284 } 5153 }
5285 DoDiscardFramebufferEXT(target, count, attachments); 5154 DoDiscardFramebufferEXT(target, count, attachments);
5286 return error::kNoError; 5155 return error::kNoError;
5287 } 5156 }
5288 5157
5289 error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM( 5158 error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM(
5290 uint32_t immediate_data_size, 5159 uint32_t immediate_data_size,
5291 const void* cmd_data) { 5160 const volatile void* cmd_data) {
5292 const gles2::cmds::LoseContextCHROMIUM& c = 5161 const volatile gles2::cmds::LoseContextCHROMIUM& c =
5293 *static_cast<const gles2::cmds::LoseContextCHROMIUM*>(cmd_data); 5162 *static_cast<const volatile gles2::cmds::LoseContextCHROMIUM*>(cmd_data);
5294 (void)c;
5295 GLenum current = static_cast<GLenum>(c.current); 5163 GLenum current = static_cast<GLenum>(c.current);
5296 GLenum other = static_cast<GLenum>(c.other); 5164 GLenum other = static_cast<GLenum>(c.other);
5297 if (!validators_->reset_status.IsValid(current)) { 5165 if (!validators_->reset_status.IsValid(current)) {
5298 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", current, 5166 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", current,
5299 "current"); 5167 "current");
5300 return error::kNoError; 5168 return error::kNoError;
5301 } 5169 }
5302 if (!validators_->reset_status.IsValid(other)) { 5170 if (!validators_->reset_status.IsValid(other)) {
5303 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other"); 5171 LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other");
5304 return error::kNoError; 5172 return error::kNoError;
5305 } 5173 }
5306 DoLoseContextCHROMIUM(current, other); 5174 DoLoseContextCHROMIUM(current, other);
5307 return error::kNoError; 5175 return error::kNoError;
5308 } 5176 }
5309 5177
5310 error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate( 5178 error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate(
5311 uint32_t immediate_data_size, 5179 uint32_t immediate_data_size,
5312 const void* cmd_data) { 5180 const volatile void* cmd_data) {
5313 const gles2::cmds::DrawBuffersEXTImmediate& c = 5181 const volatile gles2::cmds::DrawBuffersEXTImmediate& c =
5314 *static_cast<const gles2::cmds::DrawBuffersEXTImmediate*>(cmd_data); 5182 *static_cast<const volatile gles2::cmds::DrawBuffersEXTImmediate*>(
5315 (void)c; 5183 cmd_data);
5316 GLsizei count = static_cast<GLsizei>(c.count); 5184 GLsizei count = static_cast<GLsizei>(c.count);
5317 uint32_t data_size = 0; 5185 uint32_t data_size = 0;
5318 if (count >= 0 && 5186 if (count >= 0 &&
5319 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { 5187 !GLES2Util::ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
5320 return error::kOutOfBounds; 5188 return error::kOutOfBounds;
5321 } 5189 }
5322 if (data_size > immediate_data_size) { 5190 if (data_size > immediate_data_size) {
5323 return error::kOutOfBounds; 5191 return error::kOutOfBounds;
5324 } 5192 }
5325 const GLenum* bufs = 5193 volatile const GLenum* bufs = GetImmediateDataAs<volatile const GLenum*>(
5326 GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); 5194 c, data_size, immediate_data_size);
5327 if (count < 0) { 5195 if (count < 0) {
5328 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0"); 5196 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0");
5329 return error::kNoError; 5197 return error::kNoError;
5330 } 5198 }
5331 if (bufs == NULL) { 5199 if (bufs == NULL) {
5332 return error::kOutOfBounds; 5200 return error::kOutOfBounds;
5333 } 5201 }
5334 DoDrawBuffersEXT(count, bufs); 5202 DoDrawBuffersEXT(count, bufs);
5335 return error::kNoError; 5203 return error::kNoError;
5336 } 5204 }
5337 5205
5338 error::Error GLES2DecoderImpl::HandleScheduleCALayerInUseQueryCHROMIUMImmediate( 5206 error::Error GLES2DecoderImpl::HandleScheduleCALayerInUseQueryCHROMIUMImmediate(
5339 uint32_t immediate_data_size, 5207 uint32_t immediate_data_size,
5340 const void* cmd_data) { 5208 const volatile void* cmd_data) {
5341 const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate& c = 5209 const volatile gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate& c =
5342 *static_cast< 5210 *static_cast<const volatile gles2::cmds::
5343 const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate*>( 5211 ScheduleCALayerInUseQueryCHROMIUMImmediate*>(cmd_data);
5344 cmd_data);
5345 (void)c;
5346 GLsizei count = static_cast<GLsizei>(c.count); 5212 GLsizei count = static_cast<GLsizei>(c.count);
5347 uint32_t data_size = 0; 5213 uint32_t data_size = 0;
5348 if (count >= 0 && 5214 if (count >= 0 &&
5349 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) { 5215 !GLES2Util::ComputeDataSize(count, sizeof(GLuint), 1, &data_size)) {
5350 return error::kOutOfBounds; 5216 return error::kOutOfBounds;
5351 } 5217 }
5352 if (data_size > immediate_data_size) { 5218 if (data_size > immediate_data_size) {
5353 return error::kOutOfBounds; 5219 return error::kOutOfBounds;
5354 } 5220 }
5355 const GLuint* textures = 5221 volatile const GLuint* textures = GetImmediateDataAs<volatile const GLuint*>(
5356 GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); 5222 c, data_size, immediate_data_size);
5357 if (count < 0) { 5223 if (count < 0) {
5358 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScheduleCALayerInUseQueryCHROMIUM", 5224 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScheduleCALayerInUseQueryCHROMIUM",
5359 "count < 0"); 5225 "count < 0");
5360 return error::kNoError; 5226 return error::kNoError;
5361 } 5227 }
5362 if (textures == NULL) { 5228 if (textures == NULL) {
5363 return error::kOutOfBounds; 5229 return error::kOutOfBounds;
5364 } 5230 }
5365 DoScheduleCALayerInUseQueryCHROMIUM(count, textures); 5231 DoScheduleCALayerInUseQueryCHROMIUM(count, textures);
5366 return error::kNoError; 5232 return error::kNoError;
5367 } 5233 }
5368 5234
5369 error::Error GLES2DecoderImpl::HandleCommitOverlayPlanesCHROMIUM( 5235 error::Error GLES2DecoderImpl::HandleCommitOverlayPlanesCHROMIUM(
5370 uint32_t immediate_data_size, 5236 uint32_t immediate_data_size,
5371 const void* cmd_data) { 5237 const volatile void* cmd_data) {
5372 const gles2::cmds::CommitOverlayPlanesCHROMIUM& c =
5373 *static_cast<const gles2::cmds::CommitOverlayPlanesCHROMIUM*>(cmd_data);
5374 (void)c;
5375 DoCommitOverlayPlanes(); 5238 DoCommitOverlayPlanes();
5376 return error::kNoError; 5239 return error::kNoError;
5377 } 5240 }
5378 5241
5379 error::Error GLES2DecoderImpl::HandleSwapInterval(uint32_t immediate_data_size, 5242 error::Error GLES2DecoderImpl::HandleSwapInterval(
5380 const void* cmd_data) { 5243 uint32_t immediate_data_size,
5381 const gles2::cmds::SwapInterval& c = 5244 const volatile void* cmd_data) {
5382 *static_cast<const gles2::cmds::SwapInterval*>(cmd_data); 5245 const volatile gles2::cmds::SwapInterval& c =
5383 (void)c; 5246 *static_cast<const volatile gles2::cmds::SwapInterval*>(cmd_data);
5384 GLint interval = static_cast<GLint>(c.interval); 5247 GLint interval = static_cast<GLint>(c.interval);
5385 DoSwapInterval(interval); 5248 DoSwapInterval(interval);
5386 return error::kNoError; 5249 return error::kNoError;
5387 } 5250 }
5388 5251
5389 error::Error GLES2DecoderImpl::HandleFlushDriverCachesCHROMIUM( 5252 error::Error GLES2DecoderImpl::HandleFlushDriverCachesCHROMIUM(
5390 uint32_t immediate_data_size, 5253 uint32_t immediate_data_size,
5391 const void* cmd_data) { 5254 const volatile void* cmd_data) {
5392 const gles2::cmds::FlushDriverCachesCHROMIUM& c =
5393 *static_cast<const gles2::cmds::FlushDriverCachesCHROMIUM*>(cmd_data);
5394 (void)c;
5395 DoFlushDriverCachesCHROMIUM(); 5255 DoFlushDriverCachesCHROMIUM();
5396 return error::kNoError; 5256 return error::kNoError;
5397 } 5257 }
5398 5258
5399 error::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate( 5259 error::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate(
5400 uint32_t immediate_data_size, 5260 uint32_t immediate_data_size,
5401 const void* cmd_data) { 5261 const volatile void* cmd_data) {
5402 const gles2::cmds::MatrixLoadfCHROMIUMImmediate& c = 5262 const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate& c =
5403 *static_cast<const gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(cmd_data); 5263 *static_cast<const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(
5404 (void)c; 5264 cmd_data);
5405 if (!features().chromium_path_rendering) { 5265 if (!features().chromium_path_rendering) {
5406 return error::kUnknownCommand; 5266 return error::kUnknownCommand;
5407 } 5267 }
5408 5268
5409 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); 5269 GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
5410 uint32_t data_size; 5270 uint32_t data_size;
5411 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { 5271 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) {
5412 return error::kOutOfBounds; 5272 return error::kOutOfBounds;
5413 } 5273 }
5414 if (data_size > immediate_data_size) { 5274 if (data_size > immediate_data_size) {
5415 return error::kOutOfBounds; 5275 return error::kOutOfBounds;
5416 } 5276 }
5417 const GLfloat* m = 5277 volatile const GLfloat* m = GetImmediateDataAs<volatile const GLfloat*>(
5418 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 5278 c, data_size, immediate_data_size);
5419 if (!validators_->matrix_mode.IsValid(matrixMode)) { 5279 if (!validators_->matrix_mode.IsValid(matrixMode)) {
5420 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadfCHROMIUM", matrixMode, 5280 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadfCHROMIUM", matrixMode,
5421 "matrixMode"); 5281 "matrixMode");
5422 return error::kNoError; 5282 return error::kNoError;
5423 } 5283 }
5424 if (m == NULL) { 5284 if (m == NULL) {
5425 return error::kOutOfBounds; 5285 return error::kOutOfBounds;
5426 } 5286 }
5427 DoMatrixLoadfCHROMIUM(matrixMode, m); 5287 DoMatrixLoadfCHROMIUM(matrixMode, m);
5428 return error::kNoError; 5288 return error::kNoError;
5429 } 5289 }
5430 5290
5431 error::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM( 5291 error::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM(
5432 uint32_t immediate_data_size, 5292 uint32_t immediate_data_size,
5433 const void* cmd_data) { 5293 const volatile void* cmd_data) {
5434 const gles2::cmds::MatrixLoadIdentityCHROMIUM& c = 5294 const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM& c =
5435 *static_cast<const gles2::cmds::MatrixLoadIdentityCHROMIUM*>(cmd_data); 5295 *static_cast<const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM*>(
5436 (void)c; 5296 cmd_data);
5437 if (!features().chromium_path_rendering) { 5297 if (!features().chromium_path_rendering) {
5438 return error::kUnknownCommand; 5298 return error::kUnknownCommand;
5439 } 5299 }
5440 5300
5441 GLenum matrixMode = static_cast<GLenum>(c.matrixMode); 5301 GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
5442 if (!validators_->matrix_mode.IsValid(matrixMode)) { 5302 if (!validators_->matrix_mode.IsValid(matrixMode)) {
5443 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadIdentityCHROMIUM", matrixMode, 5303 LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadIdentityCHROMIUM", matrixMode,
5444 "matrixMode"); 5304 "matrixMode");
5445 return error::kNoError; 5305 return error::kNoError;
5446 } 5306 }
5447 DoMatrixLoadIdentityCHROMIUM(matrixMode); 5307 DoMatrixLoadIdentityCHROMIUM(matrixMode);
5448 return error::kNoError; 5308 return error::kNoError;
5449 } 5309 }
5450 5310
5451 error::Error GLES2DecoderImpl::HandleIsPathCHROMIUM( 5311 error::Error GLES2DecoderImpl::HandleIsPathCHROMIUM(
5452 uint32_t immediate_data_size, 5312 uint32_t immediate_data_size,
5453 const void* cmd_data) { 5313 const volatile void* cmd_data) {
5454 const gles2::cmds::IsPathCHROMIUM& c = 5314 const volatile gles2::cmds::IsPathCHROMIUM& c =
5455 *static_cast<const gles2::cmds::IsPathCHROMIUM*>(cmd_data); 5315 *static_cast<const volatile gles2::cmds::IsPathCHROMIUM*>(cmd_data);
5456 (void)c;
5457 if (!features().chromium_path_rendering) { 5316 if (!features().chromium_path_rendering) {
5458 return error::kUnknownCommand; 5317 return error::kUnknownCommand;
5459 } 5318 }
5460 5319
5461 GLuint path = c.path; 5320 GLuint path = c.path;
5462 typedef cmds::IsPathCHROMIUM::Result Result; 5321 typedef cmds::IsPathCHROMIUM::Result Result;
5463 Result* result_dst = GetSharedMemoryAs<Result*>( 5322 Result* result_dst = GetSharedMemoryAs<Result*>(
5464 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 5323 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
5465 if (!result_dst) { 5324 if (!result_dst) {
5466 return error::kOutOfBounds; 5325 return error::kOutOfBounds;
5467 } 5326 }
5468 *result_dst = DoIsPathCHROMIUM(path); 5327 *result_dst = DoIsPathCHROMIUM(path);
5469 return error::kNoError; 5328 return error::kNoError;
5470 } 5329 }
5471 5330
5472 error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM( 5331 error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM(
5473 uint32_t immediate_data_size, 5332 uint32_t immediate_data_size,
5474 const void* cmd_data) { 5333 const volatile void* cmd_data) {
5475 const gles2::cmds::PathStencilFuncCHROMIUM& c = 5334 const volatile gles2::cmds::PathStencilFuncCHROMIUM& c =
5476 *static_cast<const gles2::cmds::PathStencilFuncCHROMIUM*>(cmd_data); 5335 *static_cast<const volatile gles2::cmds::PathStencilFuncCHROMIUM*>(
5477 (void)c; 5336 cmd_data);
5478 if (!features().chromium_path_rendering) { 5337 if (!features().chromium_path_rendering) {
5479 return error::kUnknownCommand; 5338 return error::kUnknownCommand;
5480 } 5339 }
5481 5340
5482 GLenum func = static_cast<GLenum>(c.func); 5341 GLenum func = static_cast<GLenum>(c.func);
5483 GLint ref = static_cast<GLint>(c.ref); 5342 GLint ref = static_cast<GLint>(c.ref);
5484 GLuint mask = static_cast<GLuint>(c.mask); 5343 GLuint mask = static_cast<GLuint>(c.mask);
5485 if (!validators_->cmp_function.IsValid(func)) { 5344 if (!validators_->cmp_function.IsValid(func)) {
5486 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPathStencilFuncCHROMIUM", func, "func"); 5345 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPathStencilFuncCHROMIUM", func, "func");
5487 return error::kNoError; 5346 return error::kNoError;
5488 } 5347 }
5489 if (state_.stencil_path_func != func || state_.stencil_path_ref != ref || 5348 if (state_.stencil_path_func != func || state_.stencil_path_ref != ref ||
5490 state_.stencil_path_mask != mask) { 5349 state_.stencil_path_mask != mask) {
5491 state_.stencil_path_func = func; 5350 state_.stencil_path_func = func;
5492 state_.stencil_path_ref = ref; 5351 state_.stencil_path_ref = ref;
5493 state_.stencil_path_mask = mask; 5352 state_.stencil_path_mask = mask;
5494 glPathStencilFuncNV(func, ref, mask); 5353 glPathStencilFuncNV(func, ref, mask);
5495 } 5354 }
5496 return error::kNoError; 5355 return error::kNoError;
5497 } 5356 }
5498 5357
5499 error::Error GLES2DecoderImpl::HandleCoverageModulationCHROMIUM( 5358 error::Error GLES2DecoderImpl::HandleCoverageModulationCHROMIUM(
5500 uint32_t immediate_data_size, 5359 uint32_t immediate_data_size,
5501 const void* cmd_data) { 5360 const volatile void* cmd_data) {
5502 const gles2::cmds::CoverageModulationCHROMIUM& c = 5361 const volatile gles2::cmds::CoverageModulationCHROMIUM& c =
5503 *static_cast<const gles2::cmds::CoverageModulationCHROMIUM*>(cmd_data); 5362 *static_cast<const volatile gles2::cmds::CoverageModulationCHROMIUM*>(
5504 (void)c; 5363 cmd_data);
5505 if (!features().chromium_framebuffer_mixed_samples) { 5364 if (!features().chromium_framebuffer_mixed_samples) {
5506 return error::kUnknownCommand; 5365 return error::kUnknownCommand;
5507 } 5366 }
5508 5367
5509 GLenum components = static_cast<GLenum>(c.components); 5368 GLenum components = static_cast<GLenum>(c.components);
5510 if (!validators_->coverage_modulation_components.IsValid(components)) { 5369 if (!validators_->coverage_modulation_components.IsValid(components)) {
5511 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCoverageModulationCHROMIUM", components, 5370 LOCAL_SET_GL_ERROR_INVALID_ENUM("glCoverageModulationCHROMIUM", components,
5512 "components"); 5371 "components");
5513 return error::kNoError; 5372 return error::kNoError;
5514 } 5373 }
5515 if (state_.coverage_modulation != components) { 5374 if (state_.coverage_modulation != components) {
5516 state_.coverage_modulation = components; 5375 state_.coverage_modulation = components;
5517 glCoverageModulationNV(components); 5376 glCoverageModulationNV(components);
5518 } 5377 }
5519 return error::kNoError; 5378 return error::kNoError;
5520 } 5379 }
5521 5380
5522 error::Error GLES2DecoderImpl::HandleBlendBarrierKHR( 5381 error::Error GLES2DecoderImpl::HandleBlendBarrierKHR(
5523 uint32_t immediate_data_size, 5382 uint32_t immediate_data_size,
5524 const void* cmd_data) { 5383 const volatile void* cmd_data) {
5525 const gles2::cmds::BlendBarrierKHR& c =
5526 *static_cast<const gles2::cmds::BlendBarrierKHR*>(cmd_data);
5527 (void)c;
5528 if (!features().blend_equation_advanced) { 5384 if (!features().blend_equation_advanced) {
5529 return error::kUnknownCommand; 5385 return error::kUnknownCommand;
5530 } 5386 }
5531 5387
5532 glBlendBarrierKHR(); 5388 glBlendBarrierKHR();
5533 return error::kNoError; 5389 return error::kNoError;
5534 } 5390 }
5535 5391
5536 error::Error GLES2DecoderImpl::HandleApplyScreenSpaceAntialiasingCHROMIUM( 5392 error::Error GLES2DecoderImpl::HandleApplyScreenSpaceAntialiasingCHROMIUM(
5537 uint32_t immediate_data_size, 5393 uint32_t immediate_data_size,
5538 const void* cmd_data) { 5394 const volatile void* cmd_data) {
5539 const gles2::cmds::ApplyScreenSpaceAntialiasingCHROMIUM& c =
5540 *static_cast<const gles2::cmds::ApplyScreenSpaceAntialiasingCHROMIUM*>(
5541 cmd_data);
5542 (void)c;
5543 if (!features().chromium_screen_space_antialiasing) { 5395 if (!features().chromium_screen_space_antialiasing) {
5544 return error::kUnknownCommand; 5396 return error::kUnknownCommand;
5545 } 5397 }
5546 5398
5547 DoApplyScreenSpaceAntialiasingCHROMIUM(); 5399 DoApplyScreenSpaceAntialiasingCHROMIUM();
5548 return error::kNoError; 5400 return error::kNoError;
5549 } 5401 }
5550 5402
5551 error::Error 5403 error::Error
5552 GLES2DecoderImpl::HandleUniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate( 5404 GLES2DecoderImpl::HandleUniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate(
5553 uint32_t immediate_data_size, 5405 uint32_t immediate_data_size,
5554 const void* cmd_data) { 5406 const volatile void* cmd_data) {
5555 const gles2::cmds::UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate& c = 5407 const volatile gles2::cmds::
5556 *static_cast<const gles2::cmds:: 5408 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate& c = *static_cast<
5557 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate*>( 5409 const volatile gles2::cmds::
5558 cmd_data); 5410 UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate*>(cmd_data);
5559 (void)c;
5560 GLint location = static_cast<GLint>(c.location); 5411 GLint location = static_cast<GLint>(c.location);
5561 GLboolean transpose = static_cast<GLboolean>(c.transpose); 5412 GLboolean transpose = static_cast<GLboolean>(c.transpose);
5562 uint32_t data_size; 5413 uint32_t data_size;
5563 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { 5414 if (!GLES2Util::ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) {
5564 return error::kOutOfBounds; 5415 return error::kOutOfBounds;
5565 } 5416 }
5566 if (data_size > immediate_data_size) { 5417 if (data_size > immediate_data_size) {
5567 return error::kOutOfBounds; 5418 return error::kOutOfBounds;
5568 } 5419 }
5569 const GLfloat* transform = 5420 volatile const GLfloat* transform =
5570 GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size); 5421 GetImmediateDataAs<volatile const GLfloat*>(c, data_size,
5422 immediate_data_size);
5571 if (transform == NULL) { 5423 if (transform == NULL) {
5572 return error::kOutOfBounds; 5424 return error::kOutOfBounds;
5573 } 5425 }
5574 DoUniformMatrix4fvStreamTextureMatrixCHROMIUM(location, transpose, transform); 5426 DoUniformMatrix4fvStreamTextureMatrixCHROMIUM(location, transpose, transform);
5575 return error::kNoError; 5427 return error::kNoError;
5576 } 5428 }
5577 5429
5578 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { 5430 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
5579 switch (cap) { 5431 switch (cap) {
5580 case GL_BLEND: 5432 case GL_BLEND:
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
5678 state_.enable_flags.cached_sample_alpha_to_one_ext = enabled; 5530 state_.enable_flags.cached_sample_alpha_to_one_ext = enabled;
5679 return true; 5531 return true;
5680 } 5532 }
5681 return false; 5533 return false;
5682 default: 5534 default:
5683 NOTREACHED(); 5535 NOTREACHED();
5684 return false; 5536 return false;
5685 } 5537 }
5686 } 5538 }
5687 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 5539 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698