Chromium Code Reviews

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

Issue 2689006: Refactor validation code so it can be modified at runtime.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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. DO NOT EDIT! 5 // This file is auto-generated. DO NOT EDIT!
6 6
7 // It is included by gles2_cmd_decoder.cc 7 // It is included by gles2_cmd_decoder.cc
8 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 8 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
9 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 9 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
10 10
11 error::Error GLES2DecoderImpl::HandleActiveTexture( 11 error::Error GLES2DecoderImpl::HandleActiveTexture(
12 uint32 immediate_data_size, const gles2::ActiveTexture& c) { 12 uint32 immediate_data_size, const gles2::ActiveTexture& c) {
13 GLenum texture = static_cast<GLenum>(c.texture); 13 GLenum texture = static_cast<GLenum>(c.texture);
14 DoActiveTexture(texture); 14 DoActiveTexture(texture);
15 return error::kNoError; 15 return error::kNoError;
16 } 16 }
17 17
18 error::Error GLES2DecoderImpl::HandleAttachShader( 18 error::Error GLES2DecoderImpl::HandleAttachShader(
19 uint32 immediate_data_size, const gles2::AttachShader& c) { 19 uint32 immediate_data_size, const gles2::AttachShader& c) {
20 GLuint program = c.program; 20 GLuint program = c.program;
21 GLuint shader = c.shader; 21 GLuint shader = c.shader;
22 DoAttachShader(program, shader); 22 DoAttachShader(program, shader);
23 return error::kNoError; 23 return error::kNoError;
24 } 24 }
25 25
26 error::Error GLES2DecoderImpl::HandleBindBuffer( 26 error::Error GLES2DecoderImpl::HandleBindBuffer(
27 uint32 immediate_data_size, const gles2::BindBuffer& c) { 27 uint32 immediate_data_size, const gles2::BindBuffer& c) {
28 GLenum target = static_cast<GLenum>(c.target); 28 GLenum target = static_cast<GLenum>(c.target);
29 GLuint buffer = c.buffer; 29 GLuint buffer = c.buffer;
30 if (!ValidateGLenumBufferTarget(target)) { 30 if (!validators_->buffer_target.IsValid(target)) {
31 SetGLError(GL_INVALID_ENUM, "glBindBuffer: target GL_INVALID_ENUM"); 31 SetGLError(GL_INVALID_ENUM, "glBindBuffer: target GL_INVALID_ENUM");
32 return error::kNoError; 32 return error::kNoError;
33 } 33 }
34 DoBindBuffer(target, buffer); 34 DoBindBuffer(target, buffer);
35 return error::kNoError; 35 return error::kNoError;
36 } 36 }
37 37
38 error::Error GLES2DecoderImpl::HandleBindFramebuffer( 38 error::Error GLES2DecoderImpl::HandleBindFramebuffer(
39 uint32 immediate_data_size, const gles2::BindFramebuffer& c) { 39 uint32 immediate_data_size, const gles2::BindFramebuffer& c) {
40 GLenum target = static_cast<GLenum>(c.target); 40 GLenum target = static_cast<GLenum>(c.target);
41 GLuint framebuffer = c.framebuffer; 41 GLuint framebuffer = c.framebuffer;
42 if (!ValidateGLenumFrameBufferTarget(target)) { 42 if (!validators_->frame_buffer_target.IsValid(target)) {
43 SetGLError(GL_INVALID_ENUM, "glBindFramebuffer: target GL_INVALID_ENUM"); 43 SetGLError(GL_INVALID_ENUM, "glBindFramebuffer: target GL_INVALID_ENUM");
44 return error::kNoError; 44 return error::kNoError;
45 } 45 }
46 DoBindFramebuffer(target, framebuffer); 46 DoBindFramebuffer(target, framebuffer);
47 return error::kNoError; 47 return error::kNoError;
48 } 48 }
49 49
50 error::Error GLES2DecoderImpl::HandleBindRenderbuffer( 50 error::Error GLES2DecoderImpl::HandleBindRenderbuffer(
51 uint32 immediate_data_size, const gles2::BindRenderbuffer& c) { 51 uint32 immediate_data_size, const gles2::BindRenderbuffer& c) {
52 GLenum target = static_cast<GLenum>(c.target); 52 GLenum target = static_cast<GLenum>(c.target);
53 GLuint renderbuffer = c.renderbuffer; 53 GLuint renderbuffer = c.renderbuffer;
54 if (!ValidateGLenumRenderBufferTarget(target)) { 54 if (!validators_->render_buffer_target.IsValid(target)) {
55 SetGLError(GL_INVALID_ENUM, "glBindRenderbuffer: target GL_INVALID_ENUM"); 55 SetGLError(GL_INVALID_ENUM, "glBindRenderbuffer: target GL_INVALID_ENUM");
56 return error::kNoError; 56 return error::kNoError;
57 } 57 }
58 DoBindRenderbuffer(target, renderbuffer); 58 DoBindRenderbuffer(target, renderbuffer);
59 return error::kNoError; 59 return error::kNoError;
60 } 60 }
61 61
62 error::Error GLES2DecoderImpl::HandleBindTexture( 62 error::Error GLES2DecoderImpl::HandleBindTexture(
63 uint32 immediate_data_size, const gles2::BindTexture& c) { 63 uint32 immediate_data_size, const gles2::BindTexture& c) {
64 GLenum target = static_cast<GLenum>(c.target); 64 GLenum target = static_cast<GLenum>(c.target);
65 GLuint texture = c.texture; 65 GLuint texture = c.texture;
66 if (!ValidateGLenumTextureBindTarget(target)) { 66 if (!validators_->texture_bind_target.IsValid(target)) {
67 SetGLError(GL_INVALID_ENUM, "glBindTexture: target GL_INVALID_ENUM"); 67 SetGLError(GL_INVALID_ENUM, "glBindTexture: target GL_INVALID_ENUM");
68 return error::kNoError; 68 return error::kNoError;
69 } 69 }
70 DoBindTexture(target, texture); 70 DoBindTexture(target, texture);
71 return error::kNoError; 71 return error::kNoError;
72 } 72 }
73 73
74 error::Error GLES2DecoderImpl::HandleBlendColor( 74 error::Error GLES2DecoderImpl::HandleBlendColor(
75 uint32 immediate_data_size, const gles2::BlendColor& c) { 75 uint32 immediate_data_size, const gles2::BlendColor& c) {
76 GLclampf red = static_cast<GLclampf>(c.red); 76 GLclampf red = static_cast<GLclampf>(c.red);
77 GLclampf green = static_cast<GLclampf>(c.green); 77 GLclampf green = static_cast<GLclampf>(c.green);
78 GLclampf blue = static_cast<GLclampf>(c.blue); 78 GLclampf blue = static_cast<GLclampf>(c.blue);
79 GLclampf alpha = static_cast<GLclampf>(c.alpha); 79 GLclampf alpha = static_cast<GLclampf>(c.alpha);
80 glBlendColor(red, green, blue, alpha); 80 glBlendColor(red, green, blue, alpha);
81 return error::kNoError; 81 return error::kNoError;
82 } 82 }
83 83
84 error::Error GLES2DecoderImpl::HandleBlendEquation( 84 error::Error GLES2DecoderImpl::HandleBlendEquation(
85 uint32 immediate_data_size, const gles2::BlendEquation& c) { 85 uint32 immediate_data_size, const gles2::BlendEquation& c) {
86 GLenum mode = static_cast<GLenum>(c.mode); 86 GLenum mode = static_cast<GLenum>(c.mode);
87 if (!ValidateGLenumEquation(mode)) { 87 if (!validators_->equation.IsValid(mode)) {
88 SetGLError(GL_INVALID_ENUM, "glBlendEquation: mode GL_INVALID_ENUM"); 88 SetGLError(GL_INVALID_ENUM, "glBlendEquation: mode GL_INVALID_ENUM");
89 return error::kNoError; 89 return error::kNoError;
90 } 90 }
91 glBlendEquation(mode); 91 glBlendEquation(mode);
92 return error::kNoError; 92 return error::kNoError;
93 } 93 }
94 94
95 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( 95 error::Error GLES2DecoderImpl::HandleBlendEquationSeparate(
96 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) { 96 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) {
97 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); 97 GLenum modeRGB = static_cast<GLenum>(c.modeRGB);
98 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); 98 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha);
99 if (!ValidateGLenumEquation(modeRGB)) { 99 if (!validators_->equation.IsValid(modeRGB)) {
100 SetGLError( 100 SetGLError(
101 GL_INVALID_ENUM, "glBlendEquationSeparate: modeRGB GL_INVALID_ENUM"); 101 GL_INVALID_ENUM, "glBlendEquationSeparate: modeRGB GL_INVALID_ENUM");
102 return error::kNoError; 102 return error::kNoError;
103 } 103 }
104 if (!ValidateGLenumEquation(modeAlpha)) { 104 if (!validators_->equation.IsValid(modeAlpha)) {
105 SetGLError( 105 SetGLError(
106 GL_INVALID_ENUM, "glBlendEquationSeparate: modeAlpha GL_INVALID_ENUM"); 106 GL_INVALID_ENUM, "glBlendEquationSeparate: modeAlpha GL_INVALID_ENUM");
107 return error::kNoError; 107 return error::kNoError;
108 } 108 }
109 glBlendEquationSeparate(modeRGB, modeAlpha); 109 glBlendEquationSeparate(modeRGB, modeAlpha);
110 return error::kNoError; 110 return error::kNoError;
111 } 111 }
112 112
113 error::Error GLES2DecoderImpl::HandleBlendFunc( 113 error::Error GLES2DecoderImpl::HandleBlendFunc(
114 uint32 immediate_data_size, const gles2::BlendFunc& c) { 114 uint32 immediate_data_size, const gles2::BlendFunc& c) {
115 GLenum sfactor = static_cast<GLenum>(c.sfactor); 115 GLenum sfactor = static_cast<GLenum>(c.sfactor);
116 GLenum dfactor = static_cast<GLenum>(c.dfactor); 116 GLenum dfactor = static_cast<GLenum>(c.dfactor);
117 if (!ValidateGLenumSrcBlendFactor(sfactor)) { 117 if (!validators_->src_blend_factor.IsValid(sfactor)) {
118 SetGLError(GL_INVALID_ENUM, "glBlendFunc: sfactor GL_INVALID_ENUM"); 118 SetGLError(GL_INVALID_ENUM, "glBlendFunc: sfactor GL_INVALID_ENUM");
119 return error::kNoError; 119 return error::kNoError;
120 } 120 }
121 if (!ValidateGLenumDstBlendFactor(dfactor)) { 121 if (!validators_->dst_blend_factor.IsValid(dfactor)) {
122 SetGLError(GL_INVALID_ENUM, "glBlendFunc: dfactor GL_INVALID_ENUM"); 122 SetGLError(GL_INVALID_ENUM, "glBlendFunc: dfactor GL_INVALID_ENUM");
123 return error::kNoError; 123 return error::kNoError;
124 } 124 }
125 glBlendFunc(sfactor, dfactor); 125 glBlendFunc(sfactor, dfactor);
126 return error::kNoError; 126 return error::kNoError;
127 } 127 }
128 128
129 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( 129 error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
130 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) { 130 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) {
131 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); 131 GLenum srcRGB = static_cast<GLenum>(c.srcRGB);
132 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); 132 GLenum dstRGB = static_cast<GLenum>(c.dstRGB);
133 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); 133 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha);
134 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); 134 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha);
135 if (!ValidateGLenumSrcBlendFactor(srcRGB)) { 135 if (!validators_->src_blend_factor.IsValid(srcRGB)) {
136 SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: srcRGB GL_INVALID_ENUM"); 136 SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: srcRGB GL_INVALID_ENUM");
137 return error::kNoError; 137 return error::kNoError;
138 } 138 }
139 if (!ValidateGLenumDstBlendFactor(dstRGB)) { 139 if (!validators_->dst_blend_factor.IsValid(dstRGB)) {
140 SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: dstRGB GL_INVALID_ENUM"); 140 SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: dstRGB GL_INVALID_ENUM");
141 return error::kNoError; 141 return error::kNoError;
142 } 142 }
143 if (!ValidateGLenumSrcBlendFactor(srcAlpha)) { 143 if (!validators_->src_blend_factor.IsValid(srcAlpha)) {
144 SetGLError( 144 SetGLError(
145 GL_INVALID_ENUM, "glBlendFuncSeparate: srcAlpha GL_INVALID_ENUM"); 145 GL_INVALID_ENUM, "glBlendFuncSeparate: srcAlpha GL_INVALID_ENUM");
146 return error::kNoError; 146 return error::kNoError;
147 } 147 }
148 if (!ValidateGLenumDstBlendFactor(dstAlpha)) { 148 if (!validators_->dst_blend_factor.IsValid(dstAlpha)) {
149 SetGLError( 149 SetGLError(
150 GL_INVALID_ENUM, "glBlendFuncSeparate: dstAlpha GL_INVALID_ENUM"); 150 GL_INVALID_ENUM, "glBlendFuncSeparate: dstAlpha GL_INVALID_ENUM");
151 return error::kNoError; 151 return error::kNoError;
152 } 152 }
153 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 153 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
154 return error::kNoError; 154 return error::kNoError;
155 } 155 }
156 156
157 error::Error GLES2DecoderImpl::HandleBufferSubData( 157 error::Error GLES2DecoderImpl::HandleBufferSubData(
158 uint32 immediate_data_size, const gles2::BufferSubData& c) { 158 uint32 immediate_data_size, const gles2::BufferSubData& c) {
159 GLenum target = static_cast<GLenum>(c.target); 159 GLenum target = static_cast<GLenum>(c.target);
160 GLintptr offset = static_cast<GLintptr>(c.offset); 160 GLintptr offset = static_cast<GLintptr>(c.offset);
161 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 161 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
162 uint32 data_size = size; 162 uint32 data_size = size;
163 const void* data = GetSharedMemoryAs<const void*>( 163 const void* data = GetSharedMemoryAs<const void*>(
164 c.data_shm_id, c.data_shm_offset, data_size); 164 c.data_shm_id, c.data_shm_offset, data_size);
165 if (!ValidateGLenumBufferTarget(target)) { 165 if (!validators_->buffer_target.IsValid(target)) {
166 SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM"); 166 SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM");
167 return error::kNoError; 167 return error::kNoError;
168 } 168 }
169 if (size < 0) { 169 if (size < 0) {
170 SetGLError(GL_INVALID_VALUE, "glBufferSubData: size < 0"); 170 SetGLError(GL_INVALID_VALUE, "glBufferSubData: size < 0");
171 return error::kNoError; 171 return error::kNoError;
172 } 172 }
173 if (data == NULL) { 173 if (data == NULL) {
174 return error::kOutOfBounds; 174 return error::kOutOfBounds;
175 } 175 }
176 DoBufferSubData(target, offset, size, data); 176 DoBufferSubData(target, offset, size, data);
177 return error::kNoError; 177 return error::kNoError;
178 } 178 }
179 179
180 error::Error GLES2DecoderImpl::HandleBufferSubDataImmediate( 180 error::Error GLES2DecoderImpl::HandleBufferSubDataImmediate(
181 uint32 immediate_data_size, const gles2::BufferSubDataImmediate& c) { 181 uint32 immediate_data_size, const gles2::BufferSubDataImmediate& c) {
182 GLenum target = static_cast<GLenum>(c.target); 182 GLenum target = static_cast<GLenum>(c.target);
183 GLintptr offset = static_cast<GLintptr>(c.offset); 183 GLintptr offset = static_cast<GLintptr>(c.offset);
184 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 184 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
185 uint32 data_size = size; 185 uint32 data_size = size;
186 const void* data = GetImmediateDataAs<const void*>( 186 const void* data = GetImmediateDataAs<const void*>(
187 c, data_size, immediate_data_size); 187 c, data_size, immediate_data_size);
188 if (!ValidateGLenumBufferTarget(target)) { 188 if (!validators_->buffer_target.IsValid(target)) {
189 SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM"); 189 SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM");
190 return error::kNoError; 190 return error::kNoError;
191 } 191 }
192 if (size < 0) { 192 if (size < 0) {
193 SetGLError(GL_INVALID_VALUE, "glBufferSubData: size < 0"); 193 SetGLError(GL_INVALID_VALUE, "glBufferSubData: size < 0");
194 return error::kNoError; 194 return error::kNoError;
195 } 195 }
196 if (data == NULL) { 196 if (data == NULL) {
197 return error::kOutOfBounds; 197 return error::kOutOfBounds;
198 } 198 }
199 DoBufferSubData(target, offset, size, data); 199 DoBufferSubData(target, offset, size, data);
200 return error::kNoError; 200 return error::kNoError;
201 } 201 }
202 202
203 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( 203 error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus(
204 uint32 immediate_data_size, const gles2::CheckFramebufferStatus& c) { 204 uint32 immediate_data_size, const gles2::CheckFramebufferStatus& c) {
205 GLenum target = static_cast<GLenum>(c.target); 205 GLenum target = static_cast<GLenum>(c.target);
206 typedef CheckFramebufferStatus::Result Result; 206 typedef CheckFramebufferStatus::Result Result;
207 Result* result_dst = GetSharedMemoryAs<Result*>( 207 Result* result_dst = GetSharedMemoryAs<Result*>(
208 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 208 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
209 if (!result_dst) { 209 if (!result_dst) {
210 return error::kOutOfBounds; 210 return error::kOutOfBounds;
211 } 211 }
212 if (!ValidateGLenumFrameBufferTarget(target)) { 212 if (!validators_->frame_buffer_target.IsValid(target)) {
213 SetGLError( 213 SetGLError(
214 GL_INVALID_ENUM, "glCheckFramebufferStatus: target GL_INVALID_ENUM"); 214 GL_INVALID_ENUM, "glCheckFramebufferStatus: target GL_INVALID_ENUM");
215 return error::kNoError; 215 return error::kNoError;
216 } 216 }
217 *result_dst = DoCheckFramebufferStatus(target); 217 *result_dst = DoCheckFramebufferStatus(target);
218 return error::kNoError; 218 return error::kNoError;
219 } 219 }
220 220
221 error::Error GLES2DecoderImpl::HandleClear( 221 error::Error GLES2DecoderImpl::HandleClear(
222 uint32 immediate_data_size, const gles2::Clear& c) { 222 uint32 immediate_data_size, const gles2::Clear& c) {
(...skipping 49 matching lines...)
272 GLint level = static_cast<GLint>(c.level); 272 GLint level = static_cast<GLint>(c.level);
273 GLint xoffset = static_cast<GLint>(c.xoffset); 273 GLint xoffset = static_cast<GLint>(c.xoffset);
274 GLint yoffset = static_cast<GLint>(c.yoffset); 274 GLint yoffset = static_cast<GLint>(c.yoffset);
275 GLsizei width = static_cast<GLsizei>(c.width); 275 GLsizei width = static_cast<GLsizei>(c.width);
276 GLsizei height = static_cast<GLsizei>(c.height); 276 GLsizei height = static_cast<GLsizei>(c.height);
277 GLenum format = static_cast<GLenum>(c.format); 277 GLenum format = static_cast<GLenum>(c.format);
278 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 278 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
279 uint32 data_size = imageSize; 279 uint32 data_size = imageSize;
280 const void* data = GetSharedMemoryAs<const void*>( 280 const void* data = GetSharedMemoryAs<const void*>(
281 c.data_shm_id, c.data_shm_offset, data_size); 281 c.data_shm_id, c.data_shm_offset, data_size);
282 if (!ValidateGLenumTextureTarget(target)) { 282 if (!validators_->texture_target.IsValid(target)) {
283 SetGLError( 283 SetGLError(
284 GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM"); 284 GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM");
285 return error::kNoError; 285 return error::kNoError;
286 } 286 }
287 if (width < 0) { 287 if (width < 0) {
288 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0"); 288 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0");
289 return error::kNoError; 289 return error::kNoError;
290 } 290 }
291 if (height < 0) { 291 if (height < 0) {
292 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0"); 292 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0");
293 return error::kNoError; 293 return error::kNoError;
294 } 294 }
295 if (!ValidateGLenumCompressedTextureFormat(format)) { 295 if (!validators_->compressed_texture_format.IsValid(format)) {
296 SetGLError( 296 SetGLError(
297 GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM"); 297 GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM");
298 return error::kNoError; 298 return error::kNoError;
299 } 299 }
300 if (imageSize < 0) { 300 if (imageSize < 0) {
301 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: imageSize < 0"); 301 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: imageSize < 0");
302 return error::kNoError; 302 return error::kNoError;
303 } 303 }
304 if (data == NULL) { 304 if (data == NULL) {
305 return error::kOutOfBounds; 305 return error::kOutOfBounds;
(...skipping 10 matching lines...)
316 GLint level = static_cast<GLint>(c.level); 316 GLint level = static_cast<GLint>(c.level);
317 GLint xoffset = static_cast<GLint>(c.xoffset); 317 GLint xoffset = static_cast<GLint>(c.xoffset);
318 GLint yoffset = static_cast<GLint>(c.yoffset); 318 GLint yoffset = static_cast<GLint>(c.yoffset);
319 GLsizei width = static_cast<GLsizei>(c.width); 319 GLsizei width = static_cast<GLsizei>(c.width);
320 GLsizei height = static_cast<GLsizei>(c.height); 320 GLsizei height = static_cast<GLsizei>(c.height);
321 GLenum format = static_cast<GLenum>(c.format); 321 GLenum format = static_cast<GLenum>(c.format);
322 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); 322 GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
323 uint32 data_size = imageSize; 323 uint32 data_size = imageSize;
324 const void* data = GetImmediateDataAs<const void*>( 324 const void* data = GetImmediateDataAs<const void*>(
325 c, data_size, immediate_data_size); 325 c, data_size, immediate_data_size);
326 if (!ValidateGLenumTextureTarget(target)) { 326 if (!validators_->texture_target.IsValid(target)) {
327 SetGLError( 327 SetGLError(
328 GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM"); 328 GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM");
329 return error::kNoError; 329 return error::kNoError;
330 } 330 }
331 if (width < 0) { 331 if (width < 0) {
332 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0"); 332 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0");
333 return error::kNoError; 333 return error::kNoError;
334 } 334 }
335 if (height < 0) { 335 if (height < 0) {
336 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0"); 336 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0");
337 return error::kNoError; 337 return error::kNoError;
338 } 338 }
339 if (!ValidateGLenumCompressedTextureFormat(format)) { 339 if (!validators_->compressed_texture_format.IsValid(format)) {
340 SetGLError( 340 SetGLError(
341 GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM"); 341 GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM");
342 return error::kNoError; 342 return error::kNoError;
343 } 343 }
344 if (imageSize < 0) { 344 if (imageSize < 0) {
345 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: imageSize < 0"); 345 SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: imageSize < 0");
346 return error::kNoError; 346 return error::kNoError;
347 } 347 }
348 if (data == NULL) { 348 if (data == NULL) {
349 return error::kOutOfBounds; 349 return error::kOutOfBounds;
350 } 350 }
351 glCompressedTexSubImage2D( 351 glCompressedTexSubImage2D(
352 target, level, xoffset, yoffset, width, height, format, imageSize, data); 352 target, level, xoffset, yoffset, width, height, format, imageSize, data);
353 return error::kNoError; 353 return error::kNoError;
354 } 354 }
355 355
356 error::Error GLES2DecoderImpl::HandleCopyTexImage2D( 356 error::Error GLES2DecoderImpl::HandleCopyTexImage2D(
357 uint32 immediate_data_size, const gles2::CopyTexImage2D& c) { 357 uint32 immediate_data_size, const gles2::CopyTexImage2D& c) {
358 GLenum target = static_cast<GLenum>(c.target); 358 GLenum target = static_cast<GLenum>(c.target);
359 GLint level = static_cast<GLint>(c.level); 359 GLint level = static_cast<GLint>(c.level);
360 GLenum internalformat = static_cast<GLenum>(c.internalformat); 360 GLenum internalformat = static_cast<GLenum>(c.internalformat);
361 GLint x = static_cast<GLint>(c.x); 361 GLint x = static_cast<GLint>(c.x);
362 GLint y = static_cast<GLint>(c.y); 362 GLint y = static_cast<GLint>(c.y);
363 GLsizei width = static_cast<GLsizei>(c.width); 363 GLsizei width = static_cast<GLsizei>(c.width);
364 GLsizei height = static_cast<GLsizei>(c.height); 364 GLsizei height = static_cast<GLsizei>(c.height);
365 GLint border = static_cast<GLint>(c.border); 365 GLint border = static_cast<GLint>(c.border);
366 if (!ValidateGLenumTextureTarget(target)) { 366 if (!validators_->texture_target.IsValid(target)) {
367 SetGLError(GL_INVALID_ENUM, "glCopyTexImage2D: target GL_INVALID_ENUM"); 367 SetGLError(GL_INVALID_ENUM, "glCopyTexImage2D: target GL_INVALID_ENUM");
368 return error::kNoError; 368 return error::kNoError;
369 } 369 }
370 if (width < 0) { 370 if (width < 0) {
371 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D: width < 0"); 371 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D: width < 0");
372 return error::kNoError; 372 return error::kNoError;
373 } 373 }
374 if (height < 0) { 374 if (height < 0) {
375 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D: height < 0"); 375 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D: height < 0");
376 return error::kNoError; 376 return error::kNoError;
377 } 377 }
378 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); 378 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
379 return error::kNoError; 379 return error::kNoError;
380 } 380 }
381 381
382 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( 382 error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D(
383 uint32 immediate_data_size, const gles2::CopyTexSubImage2D& c) { 383 uint32 immediate_data_size, const gles2::CopyTexSubImage2D& c) {
384 GLenum target = static_cast<GLenum>(c.target); 384 GLenum target = static_cast<GLenum>(c.target);
385 GLint level = static_cast<GLint>(c.level); 385 GLint level = static_cast<GLint>(c.level);
386 GLint xoffset = static_cast<GLint>(c.xoffset); 386 GLint xoffset = static_cast<GLint>(c.xoffset);
387 GLint yoffset = static_cast<GLint>(c.yoffset); 387 GLint yoffset = static_cast<GLint>(c.yoffset);
388 GLint x = static_cast<GLint>(c.x); 388 GLint x = static_cast<GLint>(c.x);
389 GLint y = static_cast<GLint>(c.y); 389 GLint y = static_cast<GLint>(c.y);
390 GLsizei width = static_cast<GLsizei>(c.width); 390 GLsizei width = static_cast<GLsizei>(c.width);
391 GLsizei height = static_cast<GLsizei>(c.height); 391 GLsizei height = static_cast<GLsizei>(c.height);
392 if (!ValidateGLenumTextureTarget(target)) { 392 if (!validators_->texture_target.IsValid(target)) {
393 SetGLError(GL_INVALID_ENUM, "glCopyTexSubImage2D: target GL_INVALID_ENUM"); 393 SetGLError(GL_INVALID_ENUM, "glCopyTexSubImage2D: target GL_INVALID_ENUM");
394 return error::kNoError; 394 return error::kNoError;
395 } 395 }
396 if (width < 0) { 396 if (width < 0) {
397 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D: width < 0"); 397 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D: width < 0");
398 return error::kNoError; 398 return error::kNoError;
399 } 399 }
400 if (height < 0) { 400 if (height < 0) {
401 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D: height < 0"); 401 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D: height < 0");
402 return error::kNoError; 402 return error::kNoError;
403 } 403 }
404 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 404 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
405 return error::kNoError; 405 return error::kNoError;
406 } 406 }
407 407
408 error::Error GLES2DecoderImpl::HandleCreateProgram( 408 error::Error GLES2DecoderImpl::HandleCreateProgram(
409 uint32 immediate_data_size, const gles2::CreateProgram& c) { 409 uint32 immediate_data_size, const gles2::CreateProgram& c) {
410 uint32 client_id = c.client_id; 410 uint32 client_id = c.client_id;
411 if (!CreateProgramHelper(client_id)) { 411 if (!CreateProgramHelper(client_id)) {
412 return error::kInvalidArguments; 412 return error::kInvalidArguments;
413 } 413 }
414 return error::kNoError; 414 return error::kNoError;
415 } 415 }
416 416
417 error::Error GLES2DecoderImpl::HandleCreateShader( 417 error::Error GLES2DecoderImpl::HandleCreateShader(
418 uint32 immediate_data_size, const gles2::CreateShader& c) { 418 uint32 immediate_data_size, const gles2::CreateShader& c) {
419 GLenum type = static_cast<GLenum>(c.type); 419 GLenum type = static_cast<GLenum>(c.type);
420 if (!ValidateGLenumShaderType(type)) { 420 if (!validators_->shader_type.IsValid(type)) {
421 SetGLError(GL_INVALID_ENUM, "glCreateShader: type GL_INVALID_ENUM"); 421 SetGLError(GL_INVALID_ENUM, "glCreateShader: type GL_INVALID_ENUM");
422 return error::kNoError; 422 return error::kNoError;
423 } 423 }
424 uint32 client_id = c.client_id; 424 uint32 client_id = c.client_id;
425 if (!CreateShaderHelper(type, client_id)) { 425 if (!CreateShaderHelper(type, client_id)) {
426 return error::kInvalidArguments; 426 return error::kInvalidArguments;
427 } 427 }
428 return error::kNoError; 428 return error::kNoError;
429 } 429 }
430 430
431 error::Error GLES2DecoderImpl::HandleCullFace( 431 error::Error GLES2DecoderImpl::HandleCullFace(
432 uint32 immediate_data_size, const gles2::CullFace& c) { 432 uint32 immediate_data_size, const gles2::CullFace& c) {
433 GLenum mode = static_cast<GLenum>(c.mode); 433 GLenum mode = static_cast<GLenum>(c.mode);
434 if (!ValidateGLenumFaceType(mode)) { 434 if (!validators_->face_type.IsValid(mode)) {
435 SetGLError(GL_INVALID_ENUM, "glCullFace: mode GL_INVALID_ENUM"); 435 SetGLError(GL_INVALID_ENUM, "glCullFace: mode GL_INVALID_ENUM");
436 return error::kNoError; 436 return error::kNoError;
437 } 437 }
438 glCullFace(mode); 438 glCullFace(mode);
439 return error::kNoError; 439 return error::kNoError;
440 } 440 }
441 441
442 error::Error GLES2DecoderImpl::HandleDeleteBuffers( 442 error::Error GLES2DecoderImpl::HandleDeleteBuffers(
443 uint32 immediate_data_size, const gles2::DeleteBuffers& c) { 443 uint32 immediate_data_size, const gles2::DeleteBuffers& c) {
444 GLsizei n = static_cast<GLsizei>(c.n); 444 GLsizei n = static_cast<GLsizei>(c.n);
(...skipping 150 matching lines...)
595 if (textures == NULL) { 595 if (textures == NULL) {
596 return error::kOutOfBounds; 596 return error::kOutOfBounds;
597 } 597 }
598 DeleteTexturesHelper(n, textures); 598 DeleteTexturesHelper(n, textures);
599 return error::kNoError; 599 return error::kNoError;
600 } 600 }
601 601
602 error::Error GLES2DecoderImpl::HandleDepthFunc( 602 error::Error GLES2DecoderImpl::HandleDepthFunc(
603 uint32 immediate_data_size, const gles2::DepthFunc& c) { 603 uint32 immediate_data_size, const gles2::DepthFunc& c) {
604 GLenum func = static_cast<GLenum>(c.func); 604 GLenum func = static_cast<GLenum>(c.func);
605 if (!ValidateGLenumCmpFunction(func)) { 605 if (!validators_->cmp_function.IsValid(func)) {
606 SetGLError(GL_INVALID_ENUM, "glDepthFunc: func GL_INVALID_ENUM"); 606 SetGLError(GL_INVALID_ENUM, "glDepthFunc: func GL_INVALID_ENUM");
607 return error::kNoError; 607 return error::kNoError;
608 } 608 }
609 glDepthFunc(func); 609 glDepthFunc(func);
610 return error::kNoError; 610 return error::kNoError;
611 } 611 }
612 612
613 error::Error GLES2DecoderImpl::HandleDepthMask( 613 error::Error GLES2DecoderImpl::HandleDepthMask(
614 uint32 immediate_data_size, const gles2::DepthMask& c) { 614 uint32 immediate_data_size, const gles2::DepthMask& c) {
615 GLboolean flag = static_cast<GLboolean>(c.flag); 615 GLboolean flag = static_cast<GLboolean>(c.flag);
(...skipping 13 matching lines...)
629 uint32 immediate_data_size, const gles2::DetachShader& c) { 629 uint32 immediate_data_size, const gles2::DetachShader& c) {
630 GLuint program = c.program; 630 GLuint program = c.program;
631 GLuint shader = c.shader; 631 GLuint shader = c.shader;
632 DoDetachShader(program, shader); 632 DoDetachShader(program, shader);
633 return error::kNoError; 633 return error::kNoError;
634 } 634 }
635 635
636 error::Error GLES2DecoderImpl::HandleDisable( 636 error::Error GLES2DecoderImpl::HandleDisable(
637 uint32 immediate_data_size, const gles2::Disable& c) { 637 uint32 immediate_data_size, const gles2::Disable& c) {
638 GLenum cap = static_cast<GLenum>(c.cap); 638 GLenum cap = static_cast<GLenum>(c.cap);
639 if (!ValidateGLenumCapability(cap)) { 639 if (!validators_->capability.IsValid(cap)) {
640 SetGLError(GL_INVALID_ENUM, "glDisable: cap GL_INVALID_ENUM"); 640 SetGLError(GL_INVALID_ENUM, "glDisable: cap GL_INVALID_ENUM");
641 return error::kNoError; 641 return error::kNoError;
642 } 642 }
643 glDisable(cap); 643 glDisable(cap);
644 return error::kNoError; 644 return error::kNoError;
645 } 645 }
646 646
647 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray( 647 error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray(
648 uint32 immediate_data_size, const gles2::DisableVertexAttribArray& c) { 648 uint32 immediate_data_size, const gles2::DisableVertexAttribArray& c) {
649 GLuint index = static_cast<GLuint>(c.index); 649 GLuint index = static_cast<GLuint>(c.index);
650 DoDisableVertexAttribArray(index); 650 DoDisableVertexAttribArray(index);
651 return error::kNoError; 651 return error::kNoError;
652 } 652 }
653 653
654 error::Error GLES2DecoderImpl::HandleDrawArrays( 654 error::Error GLES2DecoderImpl::HandleDrawArrays(
655 uint32 immediate_data_size, const gles2::DrawArrays& c) { 655 uint32 immediate_data_size, const gles2::DrawArrays& c) {
656 GLenum mode = static_cast<GLenum>(c.mode); 656 GLenum mode = static_cast<GLenum>(c.mode);
657 GLint first = static_cast<GLint>(c.first); 657 GLint first = static_cast<GLint>(c.first);
658 GLsizei count = static_cast<GLsizei>(c.count); 658 GLsizei count = static_cast<GLsizei>(c.count);
659 if (!ValidateGLenumDrawMode(mode)) { 659 if (!validators_->draw_mode.IsValid(mode)) {
660 SetGLError(GL_INVALID_ENUM, "glDrawArrays: mode GL_INVALID_ENUM"); 660 SetGLError(GL_INVALID_ENUM, "glDrawArrays: mode GL_INVALID_ENUM");
661 return error::kNoError; 661 return error::kNoError;
662 } 662 }
663 if (count < 0) { 663 if (count < 0) {
664 SetGLError(GL_INVALID_VALUE, "glDrawArrays: count < 0"); 664 SetGLError(GL_INVALID_VALUE, "glDrawArrays: count < 0");
665 return error::kNoError; 665 return error::kNoError;
666 } 666 }
667 DoDrawArrays(mode, first, count); 667 DoDrawArrays(mode, first, count);
668 return error::kNoError; 668 return error::kNoError;
669 } 669 }
670 670
671 error::Error GLES2DecoderImpl::HandleEnable( 671 error::Error GLES2DecoderImpl::HandleEnable(
672 uint32 immediate_data_size, const gles2::Enable& c) { 672 uint32 immediate_data_size, const gles2::Enable& c) {
673 GLenum cap = static_cast<GLenum>(c.cap); 673 GLenum cap = static_cast<GLenum>(c.cap);
674 if (!ValidateGLenumCapability(cap)) { 674 if (!validators_->capability.IsValid(cap)) {
675 SetGLError(GL_INVALID_ENUM, "glEnable: cap GL_INVALID_ENUM"); 675 SetGLError(GL_INVALID_ENUM, "glEnable: cap GL_INVALID_ENUM");
676 return error::kNoError; 676 return error::kNoError;
677 } 677 }
678 glEnable(cap); 678 glEnable(cap);
679 return error::kNoError; 679 return error::kNoError;
680 } 680 }
681 681
682 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray( 682 error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray(
683 uint32 immediate_data_size, const gles2::EnableVertexAttribArray& c) { 683 uint32 immediate_data_size, const gles2::EnableVertexAttribArray& c) {
684 GLuint index = static_cast<GLuint>(c.index); 684 GLuint index = static_cast<GLuint>(c.index);
(...skipping 12 matching lines...)
697 glFlush(); 697 glFlush();
698 return error::kNoError; 698 return error::kNoError;
699 } 699 }
700 700
701 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( 701 error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer(
702 uint32 immediate_data_size, const gles2::FramebufferRenderbuffer& c) { 702 uint32 immediate_data_size, const gles2::FramebufferRenderbuffer& c) {
703 GLenum target = static_cast<GLenum>(c.target); 703 GLenum target = static_cast<GLenum>(c.target);
704 GLenum attachment = static_cast<GLenum>(c.attachment); 704 GLenum attachment = static_cast<GLenum>(c.attachment);
705 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); 705 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget);
706 GLuint renderbuffer = c.renderbuffer; 706 GLuint renderbuffer = c.renderbuffer;
707 if (!ValidateGLenumFrameBufferTarget(target)) { 707 if (!validators_->frame_buffer_target.IsValid(target)) {
708 SetGLError( 708 SetGLError(
709 GL_INVALID_ENUM, "glFramebufferRenderbuffer: target GL_INVALID_ENUM"); 709 GL_INVALID_ENUM, "glFramebufferRenderbuffer: target GL_INVALID_ENUM");
710 return error::kNoError; 710 return error::kNoError;
711 } 711 }
712 if (!ValidateGLenumAttachment(attachment)) { 712 if (!validators_->attachment.IsValid(attachment)) {
713 SetGLError( 713 SetGLError(
714 GL_INVALID_ENUM, 714 GL_INVALID_ENUM,
715 "glFramebufferRenderbuffer: attachment GL_INVALID_ENUM"); 715 "glFramebufferRenderbuffer: attachment GL_INVALID_ENUM");
716 return error::kNoError; 716 return error::kNoError;
717 } 717 }
718 if (!ValidateGLenumRenderBufferTarget(renderbuffertarget)) { 718 if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) {
719 SetGLError( 719 SetGLError(
720 GL_INVALID_ENUM, 720 GL_INVALID_ENUM,
721 "glFramebufferRenderbuffer: renderbuffertarget GL_INVALID_ENUM"); 721 "glFramebufferRenderbuffer: renderbuffertarget GL_INVALID_ENUM");
722 return error::kNoError; 722 return error::kNoError;
723 } 723 }
724 DoFramebufferRenderbuffer( 724 DoFramebufferRenderbuffer(
725 target, attachment, renderbuffertarget, renderbuffer); 725 target, attachment, renderbuffertarget, renderbuffer);
726 return error::kNoError; 726 return error::kNoError;
727 } 727 }
728 728
729 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( 729 error::Error GLES2DecoderImpl::HandleFramebufferTexture2D(
730 uint32 immediate_data_size, const gles2::FramebufferTexture2D& c) { 730 uint32 immediate_data_size, const gles2::FramebufferTexture2D& c) {
731 GLenum target = static_cast<GLenum>(c.target); 731 GLenum target = static_cast<GLenum>(c.target);
732 GLenum attachment = static_cast<GLenum>(c.attachment); 732 GLenum attachment = static_cast<GLenum>(c.attachment);
733 GLenum textarget = static_cast<GLenum>(c.textarget); 733 GLenum textarget = static_cast<GLenum>(c.textarget);
734 GLuint texture = c.texture; 734 GLuint texture = c.texture;
735 GLint level = static_cast<GLint>(c.level); 735 GLint level = static_cast<GLint>(c.level);
736 if (!ValidateGLenumFrameBufferTarget(target)) { 736 if (!validators_->frame_buffer_target.IsValid(target)) {
737 SetGLError( 737 SetGLError(
738 GL_INVALID_ENUM, "glFramebufferTexture2D: target GL_INVALID_ENUM"); 738 GL_INVALID_ENUM, "glFramebufferTexture2D: target GL_INVALID_ENUM");
739 return error::kNoError; 739 return error::kNoError;
740 } 740 }
741 if (!ValidateGLenumAttachment(attachment)) { 741 if (!validators_->attachment.IsValid(attachment)) {
742 SetGLError( 742 SetGLError(
743 GL_INVALID_ENUM, "glFramebufferTexture2D: attachment GL_INVALID_ENUM"); 743 GL_INVALID_ENUM, "glFramebufferTexture2D: attachment GL_INVALID_ENUM");
744 return error::kNoError; 744 return error::kNoError;
745 } 745 }
746 if (!ValidateGLenumTextureTarget(textarget)) { 746 if (!validators_->texture_target.IsValid(textarget)) {
747 SetGLError( 747 SetGLError(
748 GL_INVALID_ENUM, "glFramebufferTexture2D: textarget GL_INVALID_ENUM"); 748 GL_INVALID_ENUM, "glFramebufferTexture2D: textarget GL_INVALID_ENUM");
749 return error::kNoError; 749 return error::kNoError;
750 } 750 }
751 DoFramebufferTexture2D(target, attachment, textarget, texture, level); 751 DoFramebufferTexture2D(target, attachment, textarget, texture, level);
752 return error::kNoError; 752 return error::kNoError;
753 } 753 }
754 754
755 error::Error GLES2DecoderImpl::HandleFrontFace( 755 error::Error GLES2DecoderImpl::HandleFrontFace(
756 uint32 immediate_data_size, const gles2::FrontFace& c) { 756 uint32 immediate_data_size, const gles2::FrontFace& c) {
757 GLenum mode = static_cast<GLenum>(c.mode); 757 GLenum mode = static_cast<GLenum>(c.mode);
758 if (!ValidateGLenumFaceMode(mode)) { 758 if (!validators_->face_mode.IsValid(mode)) {
759 SetGLError(GL_INVALID_ENUM, "glFrontFace: mode GL_INVALID_ENUM"); 759 SetGLError(GL_INVALID_ENUM, "glFrontFace: mode GL_INVALID_ENUM");
760 return error::kNoError; 760 return error::kNoError;
761 } 761 }
762 glFrontFace(mode); 762 glFrontFace(mode);
763 return error::kNoError; 763 return error::kNoError;
764 } 764 }
765 765
766 error::Error GLES2DecoderImpl::HandleGenBuffers( 766 error::Error GLES2DecoderImpl::HandleGenBuffers(
767 uint32 immediate_data_size, const gles2::GenBuffers& c) { 767 uint32 immediate_data_size, const gles2::GenBuffers& c) {
768 GLsizei n = static_cast<GLsizei>(c.n); 768 GLsizei n = static_cast<GLsizei>(c.n);
(...skipping 34 matching lines...)
803 } 803 }
804 if (!GenBuffersHelper(n, buffers)) { 804 if (!GenBuffersHelper(n, buffers)) {
805 return error::kInvalidArguments; 805 return error::kInvalidArguments;
806 } 806 }
807 return error::kNoError; 807 return error::kNoError;
808 } 808 }
809 809
810 error::Error GLES2DecoderImpl::HandleGenerateMipmap( 810 error::Error GLES2DecoderImpl::HandleGenerateMipmap(
811 uint32 immediate_data_size, const gles2::GenerateMipmap& c) { 811 uint32 immediate_data_size, const gles2::GenerateMipmap& c) {
812 GLenum target = static_cast<GLenum>(c.target); 812 GLenum target = static_cast<GLenum>(c.target);
813 if (!ValidateGLenumTextureBindTarget(target)) { 813 if (!validators_->texture_bind_target.IsValid(target)) {
814 SetGLError(GL_INVALID_ENUM, "glGenerateMipmap: target GL_INVALID_ENUM"); 814 SetGLError(GL_INVALID_ENUM, "glGenerateMipmap: target GL_INVALID_ENUM");
815 return error::kNoError; 815 return error::kNoError;
816 } 816 }
817 DoGenerateMipmap(target); 817 DoGenerateMipmap(target);
818 return error::kNoError; 818 return error::kNoError;
819 } 819 }
820 820
821 error::Error GLES2DecoderImpl::HandleGenFramebuffers( 821 error::Error GLES2DecoderImpl::HandleGenFramebuffers(
822 uint32 immediate_data_size, const gles2::GenFramebuffers& c) { 822 uint32 immediate_data_size, const gles2::GenFramebuffers& c) {
823 GLsizei n = static_cast<GLsizei>(c.n); 823 GLsizei n = static_cast<GLsizei>(c.n);
(...skipping 128 matching lines...)
952 952
953 error::Error GLES2DecoderImpl::HandleGetBooleanv( 953 error::Error GLES2DecoderImpl::HandleGetBooleanv(
954 uint32 immediate_data_size, const gles2::GetBooleanv& c) { 954 uint32 immediate_data_size, const gles2::GetBooleanv& c) {
955 GLenum pname = static_cast<GLenum>(c.pname); 955 GLenum pname = static_cast<GLenum>(c.pname);
956 typedef GetBooleanv::Result Result; 956 typedef GetBooleanv::Result Result;
957 GLsizei num_values = 0; 957 GLsizei num_values = 0;
958 GetNumValuesReturnedForGLGet(pname, &num_values); 958 GetNumValuesReturnedForGLGet(pname, &num_values);
959 Result* result = GetSharedMemoryAs<Result*>( 959 Result* result = GetSharedMemoryAs<Result*>(
960 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 960 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
961 GLboolean* params = result ? result->GetData() : NULL; 961 GLboolean* params = result ? result->GetData() : NULL;
962 if (!ValidateGLenumGLState(pname)) { 962 if (!validators_->g_l_state.IsValid(pname)) {
963 SetGLError(GL_INVALID_ENUM, "glGetBooleanv: pname GL_INVALID_ENUM"); 963 SetGLError(GL_INVALID_ENUM, "glGetBooleanv: pname GL_INVALID_ENUM");
964 return error::kNoError; 964 return error::kNoError;
965 } 965 }
966 if (params == NULL) { 966 if (params == NULL) {
967 return error::kOutOfBounds; 967 return error::kOutOfBounds;
968 } 968 }
969 // Check that the client initialized the result. 969 // Check that the client initialized the result.
970 if (result->size != 0) { 970 if (result->size != 0) {
971 return error::kInvalidArguments; 971 return error::kInvalidArguments;
972 } 972 }
(...skipping 11 matching lines...)
984 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( 984 error::Error GLES2DecoderImpl::HandleGetBufferParameteriv(
985 uint32 immediate_data_size, const gles2::GetBufferParameteriv& c) { 985 uint32 immediate_data_size, const gles2::GetBufferParameteriv& c) {
986 GLenum target = static_cast<GLenum>(c.target); 986 GLenum target = static_cast<GLenum>(c.target);
987 GLenum pname = static_cast<GLenum>(c.pname); 987 GLenum pname = static_cast<GLenum>(c.pname);
988 typedef GetBufferParameteriv::Result Result; 988 typedef GetBufferParameteriv::Result Result;
989 GLsizei num_values = 0; 989 GLsizei num_values = 0;
990 GetNumValuesReturnedForGLGet(pname, &num_values); 990 GetNumValuesReturnedForGLGet(pname, &num_values);
991 Result* result = GetSharedMemoryAs<Result*>( 991 Result* result = GetSharedMemoryAs<Result*>(
992 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 992 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
993 GLint* params = result ? result->GetData() : NULL; 993 GLint* params = result ? result->GetData() : NULL;
994 if (!ValidateGLenumBufferTarget(target)) { 994 if (!validators_->buffer_target.IsValid(target)) {
995 SetGLError( 995 SetGLError(
996 GL_INVALID_ENUM, "glGetBufferParameteriv: target GL_INVALID_ENUM"); 996 GL_INVALID_ENUM, "glGetBufferParameteriv: target GL_INVALID_ENUM");
997 return error::kNoError; 997 return error::kNoError;
998 } 998 }
999 if (!ValidateGLenumBufferParameter(pname)) { 999 if (!validators_->buffer_parameter.IsValid(pname)) {
1000 SetGLError( 1000 SetGLError(
1001 GL_INVALID_ENUM, "glGetBufferParameteriv: pname GL_INVALID_ENUM"); 1001 GL_INVALID_ENUM, "glGetBufferParameteriv: pname GL_INVALID_ENUM");
1002 return error::kNoError; 1002 return error::kNoError;
1003 } 1003 }
1004 if (params == NULL) { 1004 if (params == NULL) {
1005 return error::kOutOfBounds; 1005 return error::kOutOfBounds;
1006 } 1006 }
1007 // Check that the client initialized the result. 1007 // Check that the client initialized the result.
1008 if (result->size != 0) { 1008 if (result->size != 0) {
1009 return error::kInvalidArguments; 1009 return error::kInvalidArguments;
(...skipping 23 matching lines...)
1033 1033
1034 error::Error GLES2DecoderImpl::HandleGetFloatv( 1034 error::Error GLES2DecoderImpl::HandleGetFloatv(
1035 uint32 immediate_data_size, const gles2::GetFloatv& c) { 1035 uint32 immediate_data_size, const gles2::GetFloatv& c) {
1036 GLenum pname = static_cast<GLenum>(c.pname); 1036 GLenum pname = static_cast<GLenum>(c.pname);
1037 typedef GetFloatv::Result Result; 1037 typedef GetFloatv::Result Result;
1038 GLsizei num_values = 0; 1038 GLsizei num_values = 0;
1039 GetNumValuesReturnedForGLGet(pname, &num_values); 1039 GetNumValuesReturnedForGLGet(pname, &num_values);
1040 Result* result = GetSharedMemoryAs<Result*>( 1040 Result* result = GetSharedMemoryAs<Result*>(
1041 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1041 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1042 GLfloat* params = result ? result->GetData() : NULL; 1042 GLfloat* params = result ? result->GetData() : NULL;
1043 if (!ValidateGLenumGLState(pname)) { 1043 if (!validators_->g_l_state.IsValid(pname)) {
1044 SetGLError(GL_INVALID_ENUM, "glGetFloatv: pname GL_INVALID_ENUM"); 1044 SetGLError(GL_INVALID_ENUM, "glGetFloatv: pname GL_INVALID_ENUM");
1045 return error::kNoError; 1045 return error::kNoError;
1046 } 1046 }
1047 if (params == NULL) { 1047 if (params == NULL) {
1048 return error::kOutOfBounds; 1048 return error::kOutOfBounds;
1049 } 1049 }
1050 // Check that the client initialized the result. 1050 // Check that the client initialized the result.
1051 if (result->size != 0) { 1051 if (result->size != 0) {
1052 return error::kInvalidArguments; 1052 return error::kInvalidArguments;
1053 } 1053 }
(...skipping 13 matching lines...)
1067 const gles2::GetFramebufferAttachmentParameteriv& c) { 1067 const gles2::GetFramebufferAttachmentParameteriv& c) {
1068 GLenum target = static_cast<GLenum>(c.target); 1068 GLenum target = static_cast<GLenum>(c.target);
1069 GLenum attachment = static_cast<GLenum>(c.attachment); 1069 GLenum attachment = static_cast<GLenum>(c.attachment);
1070 GLenum pname = static_cast<GLenum>(c.pname); 1070 GLenum pname = static_cast<GLenum>(c.pname);
1071 typedef GetFramebufferAttachmentParameteriv::Result Result; 1071 typedef GetFramebufferAttachmentParameteriv::Result Result;
1072 GLsizei num_values = 0; 1072 GLsizei num_values = 0;
1073 GetNumValuesReturnedForGLGet(pname, &num_values); 1073 GetNumValuesReturnedForGLGet(pname, &num_values);
1074 Result* result = GetSharedMemoryAs<Result*>( 1074 Result* result = GetSharedMemoryAs<Result*>(
1075 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1075 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1076 GLint* params = result ? result->GetData() : NULL; 1076 GLint* params = result ? result->GetData() : NULL;
1077 if (!ValidateGLenumFrameBufferTarget(target)) { 1077 if (!validators_->frame_buffer_target.IsValid(target)) {
1078 SetGLError( 1078 SetGLError(
1079 GL_INVALID_ENUM, 1079 GL_INVALID_ENUM,
1080 "glGetFramebufferAttachmentParameteriv: target GL_INVALID_ENUM"); 1080 "glGetFramebufferAttachmentParameteriv: target GL_INVALID_ENUM");
1081 return error::kNoError; 1081 return error::kNoError;
1082 } 1082 }
1083 if (!ValidateGLenumAttachment(attachment)) { 1083 if (!validators_->attachment.IsValid(attachment)) {
1084 SetGLError( 1084 SetGLError(
1085 GL_INVALID_ENUM, 1085 GL_INVALID_ENUM,
1086 "glGetFramebufferAttachmentParameteriv: attachment GL_INVALID_ENUM"); 1086 "glGetFramebufferAttachmentParameteriv: attachment GL_INVALID_ENUM");
1087 return error::kNoError; 1087 return error::kNoError;
1088 } 1088 }
1089 if (!ValidateGLenumFrameBufferParameter(pname)) { 1089 if (!validators_->frame_buffer_parameter.IsValid(pname)) {
1090 SetGLError( 1090 SetGLError(
1091 GL_INVALID_ENUM, 1091 GL_INVALID_ENUM,
1092 "glGetFramebufferAttachmentParameteriv: pname GL_INVALID_ENUM"); 1092 "glGetFramebufferAttachmentParameteriv: pname GL_INVALID_ENUM");
1093 return error::kNoError; 1093 return error::kNoError;
1094 } 1094 }
1095 if (params == NULL) { 1095 if (params == NULL) {
1096 return error::kOutOfBounds; 1096 return error::kOutOfBounds;
1097 } 1097 }
1098 // Check that the client initialized the result. 1098 // Check that the client initialized the result.
1099 if (result->size != 0) { 1099 if (result->size != 0) {
(...skipping 12 matching lines...)
1112 1112
1113 error::Error GLES2DecoderImpl::HandleGetIntegerv( 1113 error::Error GLES2DecoderImpl::HandleGetIntegerv(
1114 uint32 immediate_data_size, const gles2::GetIntegerv& c) { 1114 uint32 immediate_data_size, const gles2::GetIntegerv& c) {
1115 GLenum pname = static_cast<GLenum>(c.pname); 1115 GLenum pname = static_cast<GLenum>(c.pname);
1116 typedef GetIntegerv::Result Result; 1116 typedef GetIntegerv::Result Result;
1117 GLsizei num_values = 0; 1117 GLsizei num_values = 0;
1118 GetNumValuesReturnedForGLGet(pname, &num_values); 1118 GetNumValuesReturnedForGLGet(pname, &num_values);
1119 Result* result = GetSharedMemoryAs<Result*>( 1119 Result* result = GetSharedMemoryAs<Result*>(
1120 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1120 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1121 GLint* params = result ? result->GetData() : NULL; 1121 GLint* params = result ? result->GetData() : NULL;
1122 if (!ValidateGLenumGLState(pname)) { 1122 if (!validators_->g_l_state.IsValid(pname)) {
1123 SetGLError(GL_INVALID_ENUM, "glGetIntegerv: pname GL_INVALID_ENUM"); 1123 SetGLError(GL_INVALID_ENUM, "glGetIntegerv: pname GL_INVALID_ENUM");
1124 return error::kNoError; 1124 return error::kNoError;
1125 } 1125 }
1126 if (params == NULL) { 1126 if (params == NULL) {
1127 return error::kOutOfBounds; 1127 return error::kOutOfBounds;
1128 } 1128 }
1129 // Check that the client initialized the result. 1129 // Check that the client initialized the result.
1130 if (result->size != 0) { 1130 if (result->size != 0) {
1131 return error::kInvalidArguments; 1131 return error::kInvalidArguments;
1132 } 1132 }
(...skipping 11 matching lines...)
1144 error::Error GLES2DecoderImpl::HandleGetProgramiv( 1144 error::Error GLES2DecoderImpl::HandleGetProgramiv(
1145 uint32 immediate_data_size, const gles2::GetProgramiv& c) { 1145 uint32 immediate_data_size, const gles2::GetProgramiv& c) {
1146 GLuint program = c.program; 1146 GLuint program = c.program;
1147 GLenum pname = static_cast<GLenum>(c.pname); 1147 GLenum pname = static_cast<GLenum>(c.pname);
1148 typedef GetProgramiv::Result Result; 1148 typedef GetProgramiv::Result Result;
1149 GLsizei num_values = 0; 1149 GLsizei num_values = 0;
1150 GetNumValuesReturnedForGLGet(pname, &num_values); 1150 GetNumValuesReturnedForGLGet(pname, &num_values);
1151 Result* result = GetSharedMemoryAs<Result*>( 1151 Result* result = GetSharedMemoryAs<Result*>(
1152 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1152 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1153 GLint* params = result ? result->GetData() : NULL; 1153 GLint* params = result ? result->GetData() : NULL;
1154 if (!ValidateGLenumProgramParameter(pname)) { 1154 if (!validators_->program_parameter.IsValid(pname)) {
1155 SetGLError(GL_INVALID_ENUM, "glGetProgramiv: pname GL_INVALID_ENUM"); 1155 SetGLError(GL_INVALID_ENUM, "glGetProgramiv: pname GL_INVALID_ENUM");
1156 return error::kNoError; 1156 return error::kNoError;
1157 } 1157 }
1158 if (params == NULL) { 1158 if (params == NULL) {
1159 return error::kOutOfBounds; 1159 return error::kOutOfBounds;
1160 } 1160 }
1161 // Check that the client initialized the result. 1161 // Check that the client initialized the result.
1162 if (result->size != 0) { 1162 if (result->size != 0) {
1163 return error::kInvalidArguments; 1163 return error::kInvalidArguments;
1164 } 1164 }
(...skipping 11 matching lines...)
1176 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( 1176 error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv(
1177 uint32 immediate_data_size, const gles2::GetRenderbufferParameteriv& c) { 1177 uint32 immediate_data_size, const gles2::GetRenderbufferParameteriv& c) {
1178 GLenum target = static_cast<GLenum>(c.target); 1178 GLenum target = static_cast<GLenum>(c.target);
1179 GLenum pname = static_cast<GLenum>(c.pname); 1179 GLenum pname = static_cast<GLenum>(c.pname);
1180 typedef GetRenderbufferParameteriv::Result Result; 1180 typedef GetRenderbufferParameteriv::Result Result;
1181 GLsizei num_values = 0; 1181 GLsizei num_values = 0;
1182 GetNumValuesReturnedForGLGet(pname, &num_values); 1182 GetNumValuesReturnedForGLGet(pname, &num_values);
1183 Result* result = GetSharedMemoryAs<Result*>( 1183 Result* result = GetSharedMemoryAs<Result*>(
1184 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1184 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1185 GLint* params = result ? result->GetData() : NULL; 1185 GLint* params = result ? result->GetData() : NULL;
1186 if (!ValidateGLenumRenderBufferTarget(target)) { 1186 if (!validators_->render_buffer_target.IsValid(target)) {
1187 SetGLError( 1187 SetGLError(
1188 GL_INVALID_ENUM, 1188 GL_INVALID_ENUM,
1189 "glGetRenderbufferParameteriv: target GL_INVALID_ENUM"); 1189 "glGetRenderbufferParameteriv: target GL_INVALID_ENUM");
1190 return error::kNoError; 1190 return error::kNoError;
1191 } 1191 }
1192 if (!ValidateGLenumRenderBufferParameter(pname)) { 1192 if (!validators_->render_buffer_parameter.IsValid(pname)) {
1193 SetGLError( 1193 SetGLError(
1194 GL_INVALID_ENUM, 1194 GL_INVALID_ENUM,
1195 "glGetRenderbufferParameteriv: pname GL_INVALID_ENUM"); 1195 "glGetRenderbufferParameteriv: pname GL_INVALID_ENUM");
1196 return error::kNoError; 1196 return error::kNoError;
1197 } 1197 }
1198 if (params == NULL) { 1198 if (params == NULL) {
1199 return error::kOutOfBounds; 1199 return error::kOutOfBounds;
1200 } 1200 }
1201 // Check that the client initialized the result. 1201 // Check that the client initialized the result.
1202 if (result->size != 0) { 1202 if (result->size != 0) {
(...skipping 13 matching lines...)
1216 error::Error GLES2DecoderImpl::HandleGetShaderiv( 1216 error::Error GLES2DecoderImpl::HandleGetShaderiv(
1217 uint32 immediate_data_size, const gles2::GetShaderiv& c) { 1217 uint32 immediate_data_size, const gles2::GetShaderiv& c) {
1218 GLuint shader = c.shader; 1218 GLuint shader = c.shader;
1219 GLenum pname = static_cast<GLenum>(c.pname); 1219 GLenum pname = static_cast<GLenum>(c.pname);
1220 typedef GetShaderiv::Result Result; 1220 typedef GetShaderiv::Result Result;
1221 GLsizei num_values = 0; 1221 GLsizei num_values = 0;
1222 GetNumValuesReturnedForGLGet(pname, &num_values); 1222 GetNumValuesReturnedForGLGet(pname, &num_values);
1223 Result* result = GetSharedMemoryAs<Result*>( 1223 Result* result = GetSharedMemoryAs<Result*>(
1224 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1224 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1225 GLint* params = result ? result->GetData() : NULL; 1225 GLint* params = result ? result->GetData() : NULL;
1226 if (!ValidateGLenumShaderParameter(pname)) { 1226 if (!validators_->shader_parameter.IsValid(pname)) {
1227 SetGLError(GL_INVALID_ENUM, "glGetShaderiv: pname GL_INVALID_ENUM"); 1227 SetGLError(GL_INVALID_ENUM, "glGetShaderiv: pname GL_INVALID_ENUM");
1228 return error::kNoError; 1228 return error::kNoError;
1229 } 1229 }
1230 if (params == NULL) { 1230 if (params == NULL) {
1231 return error::kOutOfBounds; 1231 return error::kOutOfBounds;
1232 } 1232 }
1233 // Check that the client initialized the result. 1233 // Check that the client initialized the result.
1234 if (result->size != 0) { 1234 if (result->size != 0) {
1235 return error::kInvalidArguments; 1235 return error::kInvalidArguments;
1236 } 1236 }
(...skipping 11 matching lines...)
1248 error::Error GLES2DecoderImpl::HandleGetTexParameterfv( 1248 error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
1249 uint32 immediate_data_size, const gles2::GetTexParameterfv& c) { 1249 uint32 immediate_data_size, const gles2::GetTexParameterfv& c) {
1250 GLenum target = static_cast<GLenum>(c.target); 1250 GLenum target = static_cast<GLenum>(c.target);
1251 GLenum pname = static_cast<GLenum>(c.pname); 1251 GLenum pname = static_cast<GLenum>(c.pname);
1252 typedef GetTexParameterfv::Result Result; 1252 typedef GetTexParameterfv::Result Result;
1253 GLsizei num_values = 0; 1253 GLsizei num_values = 0;
1254 GetNumValuesReturnedForGLGet(pname, &num_values); 1254 GetNumValuesReturnedForGLGet(pname, &num_values);
1255 Result* result = GetSharedMemoryAs<Result*>( 1255 Result* result = GetSharedMemoryAs<Result*>(
1256 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1256 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1257 GLfloat* params = result ? result->GetData() : NULL; 1257 GLfloat* params = result ? result->GetData() : NULL;
1258 if (!ValidateGLenumTextureTarget(target)) { 1258 if (!validators_->texture_target.IsValid(target)) {
1259 SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: target GL_INVALID_ENUM"); 1259 SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: target GL_INVALID_ENUM");
1260 return error::kNoError; 1260 return error::kNoError;
1261 } 1261 }
1262 if (!ValidateGLenumTextureParameter(pname)) { 1262 if (!validators_->texture_parameter.IsValid(pname)) {
1263 SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: pname GL_INVALID_ENUM"); 1263 SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: pname GL_INVALID_ENUM");
1264 return error::kNoError; 1264 return error::kNoError;
1265 } 1265 }
1266 if (params == NULL) { 1266 if (params == NULL) {
1267 return error::kOutOfBounds; 1267 return error::kOutOfBounds;
1268 } 1268 }
1269 // Check that the client initialized the result. 1269 // Check that the client initialized the result.
1270 if (result->size != 0) { 1270 if (result->size != 0) {
1271 return error::kInvalidArguments; 1271 return error::kInvalidArguments;
1272 } 1272 }
(...skipping 11 matching lines...)
1284 error::Error GLES2DecoderImpl::HandleGetTexParameteriv( 1284 error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
1285 uint32 immediate_data_size, const gles2::GetTexParameteriv& c) { 1285 uint32 immediate_data_size, const gles2::GetTexParameteriv& c) {
1286 GLenum target = static_cast<GLenum>(c.target); 1286 GLenum target = static_cast<GLenum>(c.target);
1287 GLenum pname = static_cast<GLenum>(c.pname); 1287 GLenum pname = static_cast<GLenum>(c.pname);
1288 typedef GetTexParameteriv::Result Result; 1288 typedef GetTexParameteriv::Result Result;
1289 GLsizei num_values = 0; 1289 GLsizei num_values = 0;
1290 GetNumValuesReturnedForGLGet(pname, &num_values); 1290 GetNumValuesReturnedForGLGet(pname, &num_values);
1291 Result* result = GetSharedMemoryAs<Result*>( 1291 Result* result = GetSharedMemoryAs<Result*>(
1292 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1292 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1293 GLint* params = result ? result->GetData() : NULL; 1293 GLint* params = result ? result->GetData() : NULL;
1294 if (!ValidateGLenumTextureTarget(target)) { 1294 if (!validators_->texture_target.IsValid(target)) {
1295 SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: target GL_INVALID_ENUM"); 1295 SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: target GL_INVALID_ENUM");
1296 return error::kNoError; 1296 return error::kNoError;
1297 } 1297 }
1298 if (!ValidateGLenumTextureParameter(pname)) { 1298 if (!validators_->texture_parameter.IsValid(pname)) {
1299 SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: pname GL_INVALID_ENUM"); 1299 SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: pname GL_INVALID_ENUM");
1300 return error::kNoError; 1300 return error::kNoError;
1301 } 1301 }
1302 if (params == NULL) { 1302 if (params == NULL) {
1303 return error::kOutOfBounds; 1303 return error::kOutOfBounds;
1304 } 1304 }
1305 // Check that the client initialized the result. 1305 // Check that the client initialized the result.
1306 if (result->size != 0) { 1306 if (result->size != 0) {
1307 return error::kInvalidArguments; 1307 return error::kInvalidArguments;
1308 } 1308 }
(...skipping 11 matching lines...)
1320 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( 1320 error::Error GLES2DecoderImpl::HandleGetVertexAttribfv(
1321 uint32 immediate_data_size, const gles2::GetVertexAttribfv& c) { 1321 uint32 immediate_data_size, const gles2::GetVertexAttribfv& c) {
1322 GLuint index = static_cast<GLuint>(c.index); 1322 GLuint index = static_cast<GLuint>(c.index);
1323 GLenum pname = static_cast<GLenum>(c.pname); 1323 GLenum pname = static_cast<GLenum>(c.pname);
1324 typedef GetVertexAttribfv::Result Result; 1324 typedef GetVertexAttribfv::Result Result;
1325 GLsizei num_values = 0; 1325 GLsizei num_values = 0;
1326 GetNumValuesReturnedForGLGet(pname, &num_values); 1326 GetNumValuesReturnedForGLGet(pname, &num_values);
1327 Result* result = GetSharedMemoryAs<Result*>( 1327 Result* result = GetSharedMemoryAs<Result*>(
1328 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1328 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1329 GLfloat* params = result ? result->GetData() : NULL; 1329 GLfloat* params = result ? result->GetData() : NULL;
1330 if (!ValidateGLenumVertexAttribute(pname)) { 1330 if (!validators_->vertex_attribute.IsValid(pname)) {
1331 SetGLError(GL_INVALID_ENUM, "glGetVertexAttribfv: pname GL_INVALID_ENUM"); 1331 SetGLError(GL_INVALID_ENUM, "glGetVertexAttribfv: pname GL_INVALID_ENUM");
1332 return error::kNoError; 1332 return error::kNoError;
1333 } 1333 }
1334 if (params == NULL) { 1334 if (params == NULL) {
1335 return error::kOutOfBounds; 1335 return error::kOutOfBounds;
1336 } 1336 }
1337 // Check that the client initialized the result. 1337 // Check that the client initialized the result.
1338 if (result->size != 0) { 1338 if (result->size != 0) {
1339 return error::kInvalidArguments; 1339 return error::kInvalidArguments;
1340 } 1340 }
(...skipping 11 matching lines...)
1352 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( 1352 error::Error GLES2DecoderImpl::HandleGetVertexAttribiv(
1353 uint32 immediate_data_size, const gles2::GetVertexAttribiv& c) { 1353 uint32 immediate_data_size, const gles2::GetVertexAttribiv& c) {
1354 GLuint index = static_cast<GLuint>(c.index); 1354 GLuint index = static_cast<GLuint>(c.index);
1355 GLenum pname = static_cast<GLenum>(c.pname); 1355 GLenum pname = static_cast<GLenum>(c.pname);
1356 typedef GetVertexAttribiv::Result Result; 1356 typedef GetVertexAttribiv::Result Result;
1357 GLsizei num_values = 0; 1357 GLsizei num_values = 0;
1358 GetNumValuesReturnedForGLGet(pname, &num_values); 1358 GetNumValuesReturnedForGLGet(pname, &num_values);
1359 Result* result = GetSharedMemoryAs<Result*>( 1359 Result* result = GetSharedMemoryAs<Result*>(
1360 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); 1360 c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
1361 GLint* params = result ? result->GetData() : NULL; 1361 GLint* params = result ? result->GetData() : NULL;
1362 if (!ValidateGLenumVertexAttribute(pname)) { 1362 if (!validators_->vertex_attribute.IsValid(pname)) {
1363 SetGLError(GL_INVALID_ENUM, "glGetVertexAttribiv: pname GL_INVALID_ENUM"); 1363 SetGLError(GL_INVALID_ENUM, "glGetVertexAttribiv: pname GL_INVALID_ENUM");
1364 return error::kNoError; 1364 return error::kNoError;
1365 } 1365 }
1366 if (params == NULL) { 1366 if (params == NULL) {
1367 return error::kOutOfBounds; 1367 return error::kOutOfBounds;
1368 } 1368 }
1369 // Check that the client initialized the result. 1369 // Check that the client initialized the result.
1370 if (result->size != 0) { 1370 if (result->size != 0) {
1371 return error::kInvalidArguments; 1371 return error::kInvalidArguments;
1372 } 1372 }
1373 CopyRealGLErrorsToWrapper(); 1373 CopyRealGLErrorsToWrapper();
1374 DoGetVertexAttribiv(index, pname, params); 1374 DoGetVertexAttribiv(index, pname, params);
1375 GLenum error = glGetError(); 1375 GLenum error = glGetError();
1376 if (error == GL_NO_ERROR) { 1376 if (error == GL_NO_ERROR) {
1377 result->SetNumResults(num_values); 1377 result->SetNumResults(num_values);
1378 } else { 1378 } else {
1379 SetGLError(error, NULL); 1379 SetGLError(error, NULL);
1380 } 1380 }
1381 return error::kNoError; 1381 return error::kNoError;
1382 } 1382 }
1383 1383
1384 error::Error GLES2DecoderImpl::HandleHint( 1384 error::Error GLES2DecoderImpl::HandleHint(
1385 uint32 immediate_data_size, const gles2::Hint& c) { 1385 uint32 immediate_data_size, const gles2::Hint& c) {
1386 GLenum target = static_cast<GLenum>(c.target); 1386 GLenum target = static_cast<GLenum>(c.target);
1387 GLenum mode = static_cast<GLenum>(c.mode); 1387 GLenum mode = static_cast<GLenum>(c.mode);
1388 if (!ValidateGLenumHintTarget(target)) { 1388 if (!validators_->hint_target.IsValid(target)) {
1389 SetGLError(GL_INVALID_ENUM, "glHint: target GL_INVALID_ENUM"); 1389 SetGLError(GL_INVALID_ENUM, "glHint: target GL_INVALID_ENUM");
1390 return error::kNoError; 1390 return error::kNoError;
1391 } 1391 }
1392 if (!ValidateGLenumHintMode(mode)) { 1392 if (!validators_->hint_mode.IsValid(mode)) {
1393 SetGLError(GL_INVALID_ENUM, "glHint: mode GL_INVALID_ENUM"); 1393 SetGLError(GL_INVALID_ENUM, "glHint: mode GL_INVALID_ENUM");
1394 return error::kNoError; 1394 return error::kNoError;
1395 } 1395 }
1396 glHint(target, mode); 1396 glHint(target, mode);
1397 return error::kNoError; 1397 return error::kNoError;
1398 } 1398 }
1399 1399
1400 error::Error GLES2DecoderImpl::HandleIsBuffer( 1400 error::Error GLES2DecoderImpl::HandleIsBuffer(
1401 uint32 immediate_data_size, const gles2::IsBuffer& c) { 1401 uint32 immediate_data_size, const gles2::IsBuffer& c) {
1402 GLuint buffer = c.buffer; 1402 GLuint buffer = c.buffer;
1403 typedef IsBuffer::Result Result; 1403 typedef IsBuffer::Result Result;
1404 Result* result_dst = GetSharedMemoryAs<Result*>( 1404 Result* result_dst = GetSharedMemoryAs<Result*>(
1405 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 1405 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
1406 if (!result_dst) { 1406 if (!result_dst) {
1407 return error::kOutOfBounds; 1407 return error::kOutOfBounds;
1408 } 1408 }
1409 *result_dst = DoIsBuffer(buffer); 1409 *result_dst = DoIsBuffer(buffer);
1410 return error::kNoError; 1410 return error::kNoError;
1411 } 1411 }
1412 1412
1413 error::Error GLES2DecoderImpl::HandleIsEnabled( 1413 error::Error GLES2DecoderImpl::HandleIsEnabled(
1414 uint32 immediate_data_size, const gles2::IsEnabled& c) { 1414 uint32 immediate_data_size, const gles2::IsEnabled& c) {
1415 GLenum cap = static_cast<GLenum>(c.cap); 1415 GLenum cap = static_cast<GLenum>(c.cap);
1416 typedef IsEnabled::Result Result; 1416 typedef IsEnabled::Result Result;
1417 Result* result_dst = GetSharedMemoryAs<Result*>( 1417 Result* result_dst = GetSharedMemoryAs<Result*>(
1418 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 1418 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
1419 if (!result_dst) { 1419 if (!result_dst) {
1420 return error::kOutOfBounds; 1420 return error::kOutOfBounds;
1421 } 1421 }
1422 if (!ValidateGLenumCapability(cap)) { 1422 if (!validators_->capability.IsValid(cap)) {
1423 SetGLError(GL_INVALID_ENUM, "glIsEnabled: cap GL_INVALID_ENUM"); 1423 SetGLError(GL_INVALID_ENUM, "glIsEnabled: cap GL_INVALID_ENUM");
1424 return error::kNoError; 1424 return error::kNoError;
1425 } 1425 }
1426 *result_dst = glIsEnabled(cap); 1426 *result_dst = glIsEnabled(cap);
1427 return error::kNoError; 1427 return error::kNoError;
1428 } 1428 }
1429 1429
1430 error::Error GLES2DecoderImpl::HandleIsFramebuffer( 1430 error::Error GLES2DecoderImpl::HandleIsFramebuffer(
1431 uint32 immediate_data_size, const gles2::IsFramebuffer& c) { 1431 uint32 immediate_data_size, const gles2::IsFramebuffer& c) {
1432 GLuint framebuffer = c.framebuffer; 1432 GLuint framebuffer = c.framebuffer;
(...skipping 86 matching lines...)
1519 DoReleaseShaderCompiler(); 1519 DoReleaseShaderCompiler();
1520 return error::kNoError; 1520 return error::kNoError;
1521 } 1521 }
1522 1522
1523 error::Error GLES2DecoderImpl::HandleRenderbufferStorage( 1523 error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
1524 uint32 immediate_data_size, const gles2::RenderbufferStorage& c) { 1524 uint32 immediate_data_size, const gles2::RenderbufferStorage& c) {
1525 GLenum target = static_cast<GLenum>(c.target); 1525 GLenum target = static_cast<GLenum>(c.target);
1526 GLenum internalformat = static_cast<GLenum>(c.internalformat); 1526 GLenum internalformat = static_cast<GLenum>(c.internalformat);
1527 GLsizei width = static_cast<GLsizei>(c.width); 1527 GLsizei width = static_cast<GLsizei>(c.width);
1528 GLsizei height = static_cast<GLsizei>(c.height); 1528 GLsizei height = static_cast<GLsizei>(c.height);
1529 if (!ValidateGLenumRenderBufferTarget(target)) { 1529 if (!validators_->render_buffer_target.IsValid(target)) {
1530 SetGLError( 1530 SetGLError(
1531 GL_INVALID_ENUM, "glRenderbufferStorage: target GL_INVALID_ENUM"); 1531 GL_INVALID_ENUM, "glRenderbufferStorage: target GL_INVALID_ENUM");
1532 return error::kNoError; 1532 return error::kNoError;
1533 } 1533 }
1534 if (!ValidateGLenumRenderBufferFormat(internalformat)) { 1534 if (!validators_->render_buffer_format.IsValid(internalformat)) {
1535 SetGLError( 1535 SetGLError(
1536 GL_INVALID_ENUM, 1536 GL_INVALID_ENUM,
1537 "glRenderbufferStorage: internalformat GL_INVALID_ENUM"); 1537 "glRenderbufferStorage: internalformat GL_INVALID_ENUM");
1538 return error::kNoError; 1538 return error::kNoError;
1539 } 1539 }
1540 if (width < 0) { 1540 if (width < 0) {
1541 SetGLError(GL_INVALID_VALUE, "glRenderbufferStorage: width < 0"); 1541 SetGLError(GL_INVALID_VALUE, "glRenderbufferStorage: width < 0");
1542 return error::kNoError; 1542 return error::kNoError;
1543 } 1543 }
1544 if (height < 0) { 1544 if (height < 0) {
(...skipping 28 matching lines...)
1573 } 1573 }
1574 glScissor(x, y, width, height); 1574 glScissor(x, y, width, height);
1575 return error::kNoError; 1575 return error::kNoError;
1576 } 1576 }
1577 1577
1578 error::Error GLES2DecoderImpl::HandleStencilFunc( 1578 error::Error GLES2DecoderImpl::HandleStencilFunc(
1579 uint32 immediate_data_size, const gles2::StencilFunc& c) { 1579 uint32 immediate_data_size, const gles2::StencilFunc& c) {
1580 GLenum func = static_cast<GLenum>(c.func); 1580 GLenum func = static_cast<GLenum>(c.func);
1581 GLint ref = static_cast<GLint>(c.ref); 1581 GLint ref = static_cast<GLint>(c.ref);
1582 GLuint mask = static_cast<GLuint>(c.mask); 1582 GLuint mask = static_cast<GLuint>(c.mask);
1583 if (!ValidateGLenumCmpFunction(func)) { 1583 if (!validators_->cmp_function.IsValid(func)) {
1584 SetGLError(GL_INVALID_ENUM, "glStencilFunc: func GL_INVALID_ENUM"); 1584 SetGLError(GL_INVALID_ENUM, "glStencilFunc: func GL_INVALID_ENUM");
1585 return error::kNoError; 1585 return error::kNoError;
1586 } 1586 }
1587 glStencilFunc(func, ref, mask); 1587 glStencilFunc(func, ref, mask);
1588 return error::kNoError; 1588 return error::kNoError;
1589 } 1589 }
1590 1590
1591 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( 1591 error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
1592 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) { 1592 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) {
1593 GLenum face = static_cast<GLenum>(c.face); 1593 GLenum face = static_cast<GLenum>(c.face);
1594 GLenum func = static_cast<GLenum>(c.func); 1594 GLenum func = static_cast<GLenum>(c.func);
1595 GLint ref = static_cast<GLint>(c.ref); 1595 GLint ref = static_cast<GLint>(c.ref);
1596 GLuint mask = static_cast<GLuint>(c.mask); 1596 GLuint mask = static_cast<GLuint>(c.mask);
1597 if (!ValidateGLenumFaceType(face)) { 1597 if (!validators_->face_type.IsValid(face)) {
1598 SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: face GL_INVALID_ENUM"); 1598 SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: face GL_INVALID_ENUM");
1599 return error::kNoError; 1599 return error::kNoError;
1600 } 1600 }
1601 if (!ValidateGLenumCmpFunction(func)) { 1601 if (!validators_->cmp_function.IsValid(func)) {
1602 SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: func GL_INVALID_ENUM"); 1602 SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: func GL_INVALID_ENUM");
1603 return error::kNoError; 1603 return error::kNoError;
1604 } 1604 }
1605 glStencilFuncSeparate(face, func, ref, mask); 1605 glStencilFuncSeparate(face, func, ref, mask);
1606 return error::kNoError; 1606 return error::kNoError;
1607 } 1607 }
1608 1608
1609 error::Error GLES2DecoderImpl::HandleStencilMask( 1609 error::Error GLES2DecoderImpl::HandleStencilMask(
1610 uint32 immediate_data_size, const gles2::StencilMask& c) { 1610 uint32 immediate_data_size, const gles2::StencilMask& c) {
1611 GLuint mask = static_cast<GLuint>(c.mask); 1611 GLuint mask = static_cast<GLuint>(c.mask);
1612 glStencilMask(mask); 1612 glStencilMask(mask);
1613 return error::kNoError; 1613 return error::kNoError;
1614 } 1614 }
1615 1615
1616 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( 1616 error::Error GLES2DecoderImpl::HandleStencilMaskSeparate(
1617 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) { 1617 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) {
1618 GLenum face = static_cast<GLenum>(c.face); 1618 GLenum face = static_cast<GLenum>(c.face);
1619 GLuint mask = static_cast<GLuint>(c.mask); 1619 GLuint mask = static_cast<GLuint>(c.mask);
1620 if (!ValidateGLenumFaceType(face)) { 1620 if (!validators_->face_type.IsValid(face)) {
1621 SetGLError(GL_INVALID_ENUM, "glStencilMaskSeparate: face GL_INVALID_ENUM"); 1621 SetGLError(GL_INVALID_ENUM, "glStencilMaskSeparate: face GL_INVALID_ENUM");
1622 return error::kNoError; 1622 return error::kNoError;
1623 } 1623 }
1624 glStencilMaskSeparate(face, mask); 1624 glStencilMaskSeparate(face, mask);
1625 return error::kNoError; 1625 return error::kNoError;
1626 } 1626 }
1627 1627
1628 error::Error GLES2DecoderImpl::HandleStencilOp( 1628 error::Error GLES2DecoderImpl::HandleStencilOp(
1629 uint32 immediate_data_size, const gles2::StencilOp& c) { 1629 uint32 immediate_data_size, const gles2::StencilOp& c) {
1630 GLenum fail = static_cast<GLenum>(c.fail); 1630 GLenum fail = static_cast<GLenum>(c.fail);
1631 GLenum zfail = static_cast<GLenum>(c.zfail); 1631 GLenum zfail = static_cast<GLenum>(c.zfail);
1632 GLenum zpass = static_cast<GLenum>(c.zpass); 1632 GLenum zpass = static_cast<GLenum>(c.zpass);
1633 if (!ValidateGLenumStencilOp(fail)) { 1633 if (!validators_->stencil_op.IsValid(fail)) {
1634 SetGLError(GL_INVALID_ENUM, "glStencilOp: fail GL_INVALID_ENUM"); 1634 SetGLError(GL_INVALID_ENUM, "glStencilOp: fail GL_INVALID_ENUM");
1635 return error::kNoError; 1635 return error::kNoError;
1636 } 1636 }
1637 if (!ValidateGLenumStencilOp(zfail)) { 1637 if (!validators_->stencil_op.IsValid(zfail)) {
1638 SetGLError(GL_INVALID_ENUM, "glStencilOp: zfail GL_INVALID_ENUM"); 1638 SetGLError(GL_INVALID_ENUM, "glStencilOp: zfail GL_INVALID_ENUM");
1639 return error::kNoError; 1639 return error::kNoError;
1640 } 1640 }
1641 if (!ValidateGLenumStencilOp(zpass)) { 1641 if (!validators_->stencil_op.IsValid(zpass)) {
1642 SetGLError(GL_INVALID_ENUM, "glStencilOp: zpass GL_INVALID_ENUM"); 1642 SetGLError(GL_INVALID_ENUM, "glStencilOp: zpass GL_INVALID_ENUM");
1643 return error::kNoError; 1643 return error::kNoError;
1644 } 1644 }
1645 glStencilOp(fail, zfail, zpass); 1645 glStencilOp(fail, zfail, zpass);
1646 return error::kNoError; 1646 return error::kNoError;
1647 } 1647 }
1648 1648
1649 error::Error GLES2DecoderImpl::HandleStencilOpSeparate( 1649 error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
1650 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) { 1650 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) {
1651 GLenum face = static_cast<GLenum>(c.face); 1651 GLenum face = static_cast<GLenum>(c.face);
1652 GLenum fail = static_cast<GLenum>(c.fail); 1652 GLenum fail = static_cast<GLenum>(c.fail);
1653 GLenum zfail = static_cast<GLenum>(c.zfail); 1653 GLenum zfail = static_cast<GLenum>(c.zfail);
1654 GLenum zpass = static_cast<GLenum>(c.zpass); 1654 GLenum zpass = static_cast<GLenum>(c.zpass);
1655 if (!ValidateGLenumFaceType(face)) { 1655 if (!validators_->face_type.IsValid(face)) {
1656 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: face GL_INVALID_ENUM"); 1656 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: face GL_INVALID_ENUM");
1657 return error::kNoError; 1657 return error::kNoError;
1658 } 1658 }
1659 if (!ValidateGLenumStencilOp(fail)) { 1659 if (!validators_->stencil_op.IsValid(fail)) {
1660 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: fail GL_INVALID_ENUM"); 1660 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: fail GL_INVALID_ENUM");
1661 return error::kNoError; 1661 return error::kNoError;
1662 } 1662 }
1663 if (!ValidateGLenumStencilOp(zfail)) { 1663 if (!validators_->stencil_op.IsValid(zfail)) {
1664 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zfail GL_INVALID_ENUM"); 1664 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zfail GL_INVALID_ENUM");
1665 return error::kNoError; 1665 return error::kNoError;
1666 } 1666 }
1667 if (!ValidateGLenumStencilOp(zpass)) { 1667 if (!validators_->stencil_op.IsValid(zpass)) {
1668 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zpass GL_INVALID_ENUM"); 1668 SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zpass GL_INVALID_ENUM");
1669 return error::kNoError; 1669 return error::kNoError;
1670 } 1670 }
1671 glStencilOpSeparate(face, fail, zfail, zpass); 1671 glStencilOpSeparate(face, fail, zfail, zpass);
1672 return error::kNoError; 1672 return error::kNoError;
1673 } 1673 }
1674 1674
1675 error::Error GLES2DecoderImpl::HandleTexParameterf( 1675 error::Error GLES2DecoderImpl::HandleTexParameterf(
1676 uint32 immediate_data_size, const gles2::TexParameterf& c) { 1676 uint32 immediate_data_size, const gles2::TexParameterf& c) {
1677 GLenum target = static_cast<GLenum>(c.target); 1677 GLenum target = static_cast<GLenum>(c.target);
1678 GLenum pname = static_cast<GLenum>(c.pname); 1678 GLenum pname = static_cast<GLenum>(c.pname);
1679 GLfloat param = static_cast<GLfloat>(c.param); 1679 GLfloat param = static_cast<GLfloat>(c.param);
1680 if (!ValidateGLenumTextureBindTarget(target)) { 1680 if (!validators_->texture_bind_target.IsValid(target)) {
1681 SetGLError(GL_INVALID_ENUM, "glTexParameterf: target GL_INVALID_ENUM"); 1681 SetGLError(GL_INVALID_ENUM, "glTexParameterf: target GL_INVALID_ENUM");
1682 return error::kNoError; 1682 return error::kNoError;
1683 } 1683 }
1684 if (!ValidateGLenumTextureParameter(pname)) { 1684 if (!validators_->texture_parameter.IsValid(pname)) {
1685 SetGLError(GL_INVALID_ENUM, "glTexParameterf: pname GL_INVALID_ENUM"); 1685 SetGLError(GL_INVALID_ENUM, "glTexParameterf: pname GL_INVALID_ENUM");
1686 return error::kNoError; 1686 return error::kNoError;
1687 } 1687 }
1688 DoTexParameterf(target, pname, param); 1688 DoTexParameterf(target, pname, param);
1689 return error::kNoError; 1689 return error::kNoError;
1690 } 1690 }
1691 1691
1692 error::Error GLES2DecoderImpl::HandleTexParameterfv( 1692 error::Error GLES2DecoderImpl::HandleTexParameterfv(
1693 uint32 immediate_data_size, const gles2::TexParameterfv& c) { 1693 uint32 immediate_data_size, const gles2::TexParameterfv& c) {
1694 GLenum target = static_cast<GLenum>(c.target); 1694 GLenum target = static_cast<GLenum>(c.target);
1695 GLenum pname = static_cast<GLenum>(c.pname); 1695 GLenum pname = static_cast<GLenum>(c.pname);
1696 uint32 data_size; 1696 uint32 data_size;
1697 if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 1697 if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
1698 return error::kOutOfBounds; 1698 return error::kOutOfBounds;
1699 } 1699 }
1700 const GLfloat* params = GetSharedMemoryAs<const GLfloat*>( 1700 const GLfloat* params = GetSharedMemoryAs<const GLfloat*>(
1701 c.params_shm_id, c.params_shm_offset, data_size); 1701 c.params_shm_id, c.params_shm_offset, data_size);
1702 if (!ValidateGLenumTextureBindTarget(target)) { 1702 if (!validators_->texture_bind_target.IsValid(target)) {
1703 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM"); 1703 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM");
1704 return error::kNoError; 1704 return error::kNoError;
1705 } 1705 }
1706 if (!ValidateGLenumTextureParameter(pname)) { 1706 if (!validators_->texture_parameter.IsValid(pname)) {
1707 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM"); 1707 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM");
1708 return error::kNoError; 1708 return error::kNoError;
1709 } 1709 }
1710 if (params == NULL) { 1710 if (params == NULL) {
1711 return error::kOutOfBounds; 1711 return error::kOutOfBounds;
1712 } 1712 }
1713 DoTexParameterfv(target, pname, params); 1713 DoTexParameterfv(target, pname, params);
1714 return error::kNoError; 1714 return error::kNoError;
1715 } 1715 }
1716 1716
1717 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( 1717 error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate(
1718 uint32 immediate_data_size, const gles2::TexParameterfvImmediate& c) { 1718 uint32 immediate_data_size, const gles2::TexParameterfvImmediate& c) {
1719 GLenum target = static_cast<GLenum>(c.target); 1719 GLenum target = static_cast<GLenum>(c.target);
1720 GLenum pname = static_cast<GLenum>(c.pname); 1720 GLenum pname = static_cast<GLenum>(c.pname);
1721 uint32 data_size; 1721 uint32 data_size;
1722 if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) { 1722 if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
1723 return error::kOutOfBounds; 1723 return error::kOutOfBounds;
1724 } 1724 }
1725 if (data_size > immediate_data_size) { 1725 if (data_size > immediate_data_size) {
1726 return error::kOutOfBounds; 1726 return error::kOutOfBounds;
1727 } 1727 }
1728 const GLfloat* params = GetImmediateDataAs<const GLfloat*>( 1728 const GLfloat* params = GetImmediateDataAs<const GLfloat*>(
1729 c, data_size, immediate_data_size); 1729 c, data_size, immediate_data_size);
1730 if (!ValidateGLenumTextureBindTarget(target)) { 1730 if (!validators_->texture_bind_target.IsValid(target)) {
1731 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM"); 1731 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM");
1732 return error::kNoError; 1732 return error::kNoError;
1733 } 1733 }
1734 if (!ValidateGLenumTextureParameter(pname)) { 1734 if (!validators_->texture_parameter.IsValid(pname)) {
1735 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM"); 1735 SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM");
1736 return error::kNoError; 1736 return error::kNoError;
1737 } 1737 }
1738 if (params == NULL) { 1738 if (params == NULL) {
1739 return error::kOutOfBounds; 1739 return error::kOutOfBounds;
1740 } 1740 }
1741 DoTexParameterfv(target, pname, params); 1741 DoTexParameterfv(target, pname, params);
1742 return error::kNoError; 1742 return error::kNoError;
1743 } 1743 }
1744 1744
1745 error::Error GLES2DecoderImpl::HandleTexParameteri( 1745 error::Error GLES2DecoderImpl::HandleTexParameteri(
1746 uint32 immediate_data_size, const gles2::TexParameteri& c) { 1746 uint32 immediate_data_size, const gles2::TexParameteri& c) {
1747 GLenum target = static_cast<GLenum>(c.target); 1747 GLenum target = static_cast<GLenum>(c.target);
1748 GLenum pname = static_cast<GLenum>(c.pname); 1748 GLenum pname = static_cast<GLenum>(c.pname);
1749 GLint param = static_cast<GLint>(c.param); 1749 GLint param = static_cast<GLint>(c.param);
1750 if (!ValidateGLenumTextureBindTarget(target)) { 1750 if (!validators_->texture_bind_target.IsValid(target)) {
1751 SetGLError(GL_INVALID_ENUM, "glTexParameteri: target GL_INVALID_ENUM"); 1751 SetGLError(GL_INVALID_ENUM, "glTexParameteri: target GL_INVALID_ENUM");
1752 return error::kNoError; 1752 return error::kNoError;
1753 } 1753 }
1754 if (!ValidateGLenumTextureParameter(pname)) { 1754 if (!validators_->texture_parameter.IsValid(pname)) {
1755 SetGLError(GL_INVALID_ENUM, "glTexParameteri: pname GL_INVALID_ENUM"); 1755 SetGLError(GL_INVALID_ENUM, "glTexParameteri: pname GL_INVALID_ENUM");
1756 return error::kNoError; 1756 return error::kNoError;
1757 } 1757 }
1758 DoTexParameteri(target, pname, param); 1758 DoTexParameteri(target, pname, param);
1759 return error::kNoError; 1759 return error::kNoError;
1760 } 1760 }
1761 1761
1762 error::Error GLES2DecoderImpl::HandleTexParameteriv( 1762 error::Error GLES2DecoderImpl::HandleTexParameteriv(
1763 uint32 immediate_data_size, const gles2::TexParameteriv& c) { 1763 uint32 immediate_data_size, const gles2::TexParameteriv& c) {
1764 GLenum target = static_cast<GLenum>(c.target); 1764 GLenum target = static_cast<GLenum>(c.target);
1765 GLenum pname = static_cast<GLenum>(c.pname); 1765 GLenum pname = static_cast<GLenum>(c.pname);
1766 uint32 data_size; 1766 uint32 data_size;
1767 if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { 1767 if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
1768 return error::kOutOfBounds; 1768 return error::kOutOfBounds;
1769 } 1769 }
1770 const GLint* params = GetSharedMemoryAs<const GLint*>( 1770 const GLint* params = GetSharedMemoryAs<const GLint*>(
1771 c.params_shm_id, c.params_shm_offset, data_size); 1771 c.params_shm_id, c.params_shm_offset, data_size);
1772 if (!ValidateGLenumTextureBindTarget(target)) { 1772 if (!validators_->texture_bind_target.IsValid(target)) {
1773 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM"); 1773 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM");
1774 return error::kNoError; 1774 return error::kNoError;
1775 } 1775 }
1776 if (!ValidateGLenumTextureParameter(pname)) { 1776 if (!validators_->texture_parameter.IsValid(pname)) {
1777 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM"); 1777 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM");
1778 return error::kNoError; 1778 return error::kNoError;
1779 } 1779 }
1780 if (params == NULL) { 1780 if (params == NULL) {
1781 return error::kOutOfBounds; 1781 return error::kOutOfBounds;
1782 } 1782 }
1783 DoTexParameteriv(target, pname, params); 1783 DoTexParameteriv(target, pname, params);
1784 return error::kNoError; 1784 return error::kNoError;
1785 } 1785 }
1786 1786
1787 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( 1787 error::Error GLES2DecoderImpl::HandleTexParameterivImmediate(
1788 uint32 immediate_data_size, const gles2::TexParameterivImmediate& c) { 1788 uint32 immediate_data_size, const gles2::TexParameterivImmediate& c) {
1789 GLenum target = static_cast<GLenum>(c.target); 1789 GLenum target = static_cast<GLenum>(c.target);
1790 GLenum pname = static_cast<GLenum>(c.pname); 1790 GLenum pname = static_cast<GLenum>(c.pname);
1791 uint32 data_size; 1791 uint32 data_size;
1792 if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) { 1792 if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
1793 return error::kOutOfBounds; 1793 return error::kOutOfBounds;
1794 } 1794 }
1795 if (data_size > immediate_data_size) { 1795 if (data_size > immediate_data_size) {
1796 return error::kOutOfBounds; 1796 return error::kOutOfBounds;
1797 } 1797 }
1798 const GLint* params = GetImmediateDataAs<const GLint*>( 1798 const GLint* params = GetImmediateDataAs<const GLint*>(
1799 c, data_size, immediate_data_size); 1799 c, data_size, immediate_data_size);
1800 if (!ValidateGLenumTextureBindTarget(target)) { 1800 if (!validators_->texture_bind_target.IsValid(target)) {
1801 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM"); 1801 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM");
1802 return error::kNoError; 1802 return error::kNoError;
1803 } 1803 }
1804 if (!ValidateGLenumTextureParameter(pname)) { 1804 if (!validators_->texture_parameter.IsValid(pname)) {
1805 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM"); 1805 SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM");
1806 return error::kNoError; 1806 return error::kNoError;
1807 } 1807 }
1808 if (params == NULL) { 1808 if (params == NULL) {
1809 return error::kOutOfBounds; 1809 return error::kOutOfBounds;
1810 } 1810 }
1811 DoTexParameteriv(target, pname, params); 1811 DoTexParameteriv(target, pname, params);
1812 return error::kNoError; 1812 return error::kNoError;
1813 } 1813 }
1814 1814
1815 error::Error GLES2DecoderImpl::HandleTexSubImage2D( 1815 error::Error GLES2DecoderImpl::HandleTexSubImage2D(
1816 uint32 immediate_data_size, const gles2::TexSubImage2D& c) { 1816 uint32 immediate_data_size, const gles2::TexSubImage2D& c) {
1817 GLenum target = static_cast<GLenum>(c.target); 1817 GLenum target = static_cast<GLenum>(c.target);
1818 GLint level = static_cast<GLint>(c.level); 1818 GLint level = static_cast<GLint>(c.level);
1819 GLint xoffset = static_cast<GLint>(c.xoffset); 1819 GLint xoffset = static_cast<GLint>(c.xoffset);
1820 GLint yoffset = static_cast<GLint>(c.yoffset); 1820 GLint yoffset = static_cast<GLint>(c.yoffset);
1821 GLsizei width = static_cast<GLsizei>(c.width); 1821 GLsizei width = static_cast<GLsizei>(c.width);
1822 GLsizei height = static_cast<GLsizei>(c.height); 1822 GLsizei height = static_cast<GLsizei>(c.height);
1823 GLenum format = static_cast<GLenum>(c.format); 1823 GLenum format = static_cast<GLenum>(c.format);
1824 GLenum type = static_cast<GLenum>(c.type); 1824 GLenum type = static_cast<GLenum>(c.type);
1825 uint32 data_size; 1825 uint32 data_size;
1826 if (!GLES2Util::ComputeImageDataSize( 1826 if (!GLES2Util::ComputeImageDataSize(
1827 width, height, format, type, unpack_alignment_, &data_size)) { 1827 width, height, format, type, unpack_alignment_, &data_size)) {
1828 return error::kOutOfBounds; 1828 return error::kOutOfBounds;
1829 } 1829 }
1830 const void* pixels = GetSharedMemoryAs<const void*>( 1830 const void* pixels = GetSharedMemoryAs<const void*>(
1831 c.pixels_shm_id, c.pixels_shm_offset, data_size); 1831 c.pixels_shm_id, c.pixels_shm_offset, data_size);
1832 if (!ValidateGLenumTextureTarget(target)) { 1832 if (!validators_->texture_target.IsValid(target)) {
1833 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); 1833 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM");
1834 return error::kNoError; 1834 return error::kNoError;
1835 } 1835 }
1836 if (width < 0) { 1836 if (width < 0) {
1837 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); 1837 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0");
1838 return error::kNoError; 1838 return error::kNoError;
1839 } 1839 }
1840 if (height < 0) { 1840 if (height < 0) {
1841 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); 1841 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0");
1842 return error::kNoError; 1842 return error::kNoError;
1843 } 1843 }
1844 if (!ValidateGLenumTextureFormat(format)) { 1844 if (!validators_->texture_format.IsValid(format)) {
1845 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); 1845 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM");
1846 return error::kNoError; 1846 return error::kNoError;
1847 } 1847 }
1848 if (!ValidateGLenumPixelType(type)) { 1848 if (!validators_->pixel_type.IsValid(type)) {
1849 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); 1849 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM");
1850 return error::kNoError; 1850 return error::kNoError;
1851 } 1851 }
1852 if (pixels == NULL) { 1852 if (pixels == NULL) {
1853 return error::kOutOfBounds; 1853 return error::kOutOfBounds;
1854 } 1854 }
1855 glTexSubImage2D( 1855 glTexSubImage2D(
1856 target, level, xoffset, yoffset, width, height, format, type, pixels); 1856 target, level, xoffset, yoffset, width, height, format, type, pixels);
1857 return error::kNoError; 1857 return error::kNoError;
1858 } 1858 }
1859 1859
1860 error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( 1860 error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate(
1861 uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) { 1861 uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) {
1862 GLenum target = static_cast<GLenum>(c.target); 1862 GLenum target = static_cast<GLenum>(c.target);
1863 GLint level = static_cast<GLint>(c.level); 1863 GLint level = static_cast<GLint>(c.level);
1864 GLint xoffset = static_cast<GLint>(c.xoffset); 1864 GLint xoffset = static_cast<GLint>(c.xoffset);
1865 GLint yoffset = static_cast<GLint>(c.yoffset); 1865 GLint yoffset = static_cast<GLint>(c.yoffset);
1866 GLsizei width = static_cast<GLsizei>(c.width); 1866 GLsizei width = static_cast<GLsizei>(c.width);
1867 GLsizei height = static_cast<GLsizei>(c.height); 1867 GLsizei height = static_cast<GLsizei>(c.height);
1868 GLenum format = static_cast<GLenum>(c.format); 1868 GLenum format = static_cast<GLenum>(c.format);
1869 GLenum type = static_cast<GLenum>(c.type); 1869 GLenum type = static_cast<GLenum>(c.type);
1870 uint32 data_size; 1870 uint32 data_size;
1871 if (!GLES2Util::ComputeImageDataSize( 1871 if (!GLES2Util::ComputeImageDataSize(
1872 width, height, format, type, unpack_alignment_, &data_size)) { 1872 width, height, format, type, unpack_alignment_, &data_size)) {
1873 return error::kOutOfBounds; 1873 return error::kOutOfBounds;
1874 } 1874 }
1875 const void* pixels = GetImmediateDataAs<const void*>( 1875 const void* pixels = GetImmediateDataAs<const void*>(
1876 c, data_size, immediate_data_size); 1876 c, data_size, immediate_data_size);
1877 if (!ValidateGLenumTextureTarget(target)) { 1877 if (!validators_->texture_target.IsValid(target)) {
1878 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); 1878 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM");
1879 return error::kNoError; 1879 return error::kNoError;
1880 } 1880 }
1881 if (width < 0) { 1881 if (width < 0) {
1882 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); 1882 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0");
1883 return error::kNoError; 1883 return error::kNoError;
1884 } 1884 }
1885 if (height < 0) { 1885 if (height < 0) {
1886 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); 1886 SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0");
1887 return error::kNoError; 1887 return error::kNoError;
1888 } 1888 }
1889 if (!ValidateGLenumTextureFormat(format)) { 1889 if (!validators_->texture_format.IsValid(format)) {
1890 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); 1890 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM");
1891 return error::kNoError; 1891 return error::kNoError;
1892 } 1892 }
1893 if (!ValidateGLenumPixelType(type)) { 1893 if (!validators_->pixel_type.IsValid(type)) {
1894 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); 1894 SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM");
1895 return error::kNoError; 1895 return error::kNoError;
1896 } 1896 }
1897 if (pixels == NULL) { 1897 if (pixels == NULL) {
1898 return error::kOutOfBounds; 1898 return error::kOutOfBounds;
1899 } 1899 }
1900 glTexSubImage2D( 1900 glTexSubImage2D(
1901 target, level, xoffset, yoffset, width, height, format, type, pixels); 1901 target, level, xoffset, yoffset, width, height, format, type, pixels);
1902 return error::kNoError; 1902 return error::kNoError;
1903 } 1903 }
(...skipping 446 matching lines...)
2350 uint32 data_size; 2350 uint32 data_size;
2351 if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { 2351 if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
2352 return error::kOutOfBounds; 2352 return error::kOutOfBounds;
2353 } 2353 }
2354 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( 2354 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
2355 c.value_shm_id, c.value_shm_offset, data_size); 2355 c.value_shm_id, c.value_shm_offset, data_size);
2356 if (count < 0) { 2356 if (count < 0) {
2357 SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0"); 2357 SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0");
2358 return error::kNoError; 2358 return error::kNoError;
2359 } 2359 }
2360 if (!ValidateGLbooleanFalse(transpose)) { 2360 if (!validators_->false_only.IsValid(transpose)) {
2361 SetGLError( 2361 SetGLError(
2362 GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE"); 2362 GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE");
2363 return error::kNoError; 2363 return error::kNoError;
2364 } 2364 }
2365 if (value == NULL) { 2365 if (value == NULL) {
2366 return error::kOutOfBounds; 2366 return error::kOutOfBounds;
2367 } 2367 }
2368 glUniformMatrix2fv(location, count, transpose, value); 2368 glUniformMatrix2fv(location, count, transpose, value);
2369 return error::kNoError; 2369 return error::kNoError;
2370 } 2370 }
2371 2371
2372 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( 2372 error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate(
2373 uint32 immediate_data_size, const gles2::UniformMatrix2fvImmediate& c) { 2373 uint32 immediate_data_size, const gles2::UniformMatrix2fvImmediate& c) {
2374 GLint location = static_cast<GLint>(c.location); 2374 GLint location = static_cast<GLint>(c.location);
2375 GLsizei count = static_cast<GLsizei>(c.count); 2375 GLsizei count = static_cast<GLsizei>(c.count);
2376 GLboolean transpose = static_cast<GLboolean>(c.transpose); 2376 GLboolean transpose = static_cast<GLboolean>(c.transpose);
2377 uint32 data_size; 2377 uint32 data_size;
2378 if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) { 2378 if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
2379 return error::kOutOfBounds; 2379 return error::kOutOfBounds;
2380 } 2380 }
2381 if (data_size > immediate_data_size) { 2381 if (data_size > immediate_data_size) {
2382 return error::kOutOfBounds; 2382 return error::kOutOfBounds;
2383 } 2383 }
2384 const GLfloat* value = GetImmediateDataAs<const GLfloat*>( 2384 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
2385 c, data_size, immediate_data_size); 2385 c, data_size, immediate_data_size);
2386 if (count < 0) { 2386 if (count < 0) {
2387 SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0"); 2387 SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0");
2388 return error::kNoError; 2388 return error::kNoError;
2389 } 2389 }
2390 if (!ValidateGLbooleanFalse(transpose)) { 2390 if (!validators_->false_only.IsValid(transpose)) {
2391 SetGLError( 2391 SetGLError(
2392 GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE"); 2392 GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE");
2393 return error::kNoError; 2393 return error::kNoError;
2394 } 2394 }
2395 if (value == NULL) { 2395 if (value == NULL) {
2396 return error::kOutOfBounds; 2396 return error::kOutOfBounds;
2397 } 2397 }
2398 glUniformMatrix2fv(location, count, transpose, value); 2398 glUniformMatrix2fv(location, count, transpose, value);
2399 return error::kNoError; 2399 return error::kNoError;
2400 } 2400 }
2401 2401
2402 error::Error GLES2DecoderImpl::HandleUniformMatrix3fv( 2402 error::Error GLES2DecoderImpl::HandleUniformMatrix3fv(
2403 uint32 immediate_data_size, const gles2::UniformMatrix3fv& c) { 2403 uint32 immediate_data_size, const gles2::UniformMatrix3fv& c) {
2404 GLint location = static_cast<GLint>(c.location); 2404 GLint location = static_cast<GLint>(c.location);
2405 GLsizei count = static_cast<GLsizei>(c.count); 2405 GLsizei count = static_cast<GLsizei>(c.count);
2406 GLboolean transpose = static_cast<GLboolean>(c.transpose); 2406 GLboolean transpose = static_cast<GLboolean>(c.transpose);
2407 uint32 data_size; 2407 uint32 data_size;
2408 if (!ComputeDataSize(1, sizeof(GLfloat), 9, &data_size)) { 2408 if (!ComputeDataSize(1, sizeof(GLfloat), 9, &data_size)) {
2409 return error::kOutOfBounds; 2409 return error::kOutOfBounds;
2410 } 2410 }
2411 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( 2411 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
2412 c.value_shm_id, c.value_shm_offset, data_size); 2412 c.value_shm_id, c.value_shm_offset, data_size);
2413 if (count < 0) { 2413 if (count < 0) {
2414 SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0"); 2414 SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0");
2415 return error::kNoError; 2415 return error::kNoError;
2416 } 2416 }
2417 if (!ValidateGLbooleanFalse(transpose)) { 2417 if (!validators_->false_only.IsValid(transpose)) {
2418 SetGLError( 2418 SetGLError(
2419 GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE"); 2419 GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE");
2420 return error::kNoError; 2420 return error::kNoError;
2421 } 2421 }
2422 if (value == NULL) { 2422 if (value == NULL) {
2423 return error::kOutOfBounds; 2423 return error::kOutOfBounds;
2424 } 2424 }
2425 glUniformMatrix3fv(location, count, transpose, value); 2425 glUniformMatrix3fv(location, count, transpose, value);
2426 return error::kNoError; 2426 return error::kNoError;
2427 } 2427 }
2428 2428
2429 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( 2429 error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate(
2430 uint32 immediate_data_size, const gles2::UniformMatrix3fvImmediate& c) { 2430 uint32 immediate_data_size, const gles2::UniformMatrix3fvImmediate& c) {
2431 GLint location = static_cast<GLint>(c.location); 2431 GLint location = static_cast<GLint>(c.location);
2432 GLsizei count = static_cast<GLsizei>(c.count); 2432 GLsizei count = static_cast<GLsizei>(c.count);
2433 GLboolean transpose = static_cast<GLboolean>(c.transpose); 2433 GLboolean transpose = static_cast<GLboolean>(c.transpose);
2434 uint32 data_size; 2434 uint32 data_size;
2435 if (!ComputeDataSize(1, sizeof(GLfloat), 9, &data_size)) { 2435 if (!ComputeDataSize(1, sizeof(GLfloat), 9, &data_size)) {
2436 return error::kOutOfBounds; 2436 return error::kOutOfBounds;
2437 } 2437 }
2438 if (data_size > immediate_data_size) { 2438 if (data_size > immediate_data_size) {
2439 return error::kOutOfBounds; 2439 return error::kOutOfBounds;
2440 } 2440 }
2441 const GLfloat* value = GetImmediateDataAs<const GLfloat*>( 2441 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
2442 c, data_size, immediate_data_size); 2442 c, data_size, immediate_data_size);
2443 if (count < 0) { 2443 if (count < 0) {
2444 SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0"); 2444 SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0");
2445 return error::kNoError; 2445 return error::kNoError;
2446 } 2446 }
2447 if (!ValidateGLbooleanFalse(transpose)) { 2447 if (!validators_->false_only.IsValid(transpose)) {
2448 SetGLError( 2448 SetGLError(
2449 GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE"); 2449 GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE");
2450 return error::kNoError; 2450 return error::kNoError;
2451 } 2451 }
2452 if (value == NULL) { 2452 if (value == NULL) {
2453 return error::kOutOfBounds; 2453 return error::kOutOfBounds;
2454 } 2454 }
2455 glUniformMatrix3fv(location, count, transpose, value); 2455 glUniformMatrix3fv(location, count, transpose, value);
2456 return error::kNoError; 2456 return error::kNoError;
2457 } 2457 }
2458 2458
2459 error::Error GLES2DecoderImpl::HandleUniformMatrix4fv( 2459 error::Error GLES2DecoderImpl::HandleUniformMatrix4fv(
2460 uint32 immediate_data_size, const gles2::UniformMatrix4fv& c) { 2460 uint32 immediate_data_size, const gles2::UniformMatrix4fv& c) {
2461 GLint location = static_cast<GLint>(c.location); 2461 GLint location = static_cast<GLint>(c.location);
2462 GLsizei count = static_cast<GLsizei>(c.count); 2462 GLsizei count = static_cast<GLsizei>(c.count);
2463 GLboolean transpose = static_cast<GLboolean>(c.transpose); 2463 GLboolean transpose = static_cast<GLboolean>(c.transpose);
2464 uint32 data_size; 2464 uint32 data_size;
2465 if (!ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { 2465 if (!ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) {
2466 return error::kOutOfBounds; 2466 return error::kOutOfBounds;
2467 } 2467 }
2468 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( 2468 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
2469 c.value_shm_id, c.value_shm_offset, data_size); 2469 c.value_shm_id, c.value_shm_offset, data_size);
2470 if (count < 0) { 2470 if (count < 0) {
2471 SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0"); 2471 SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0");
2472 return error::kNoError; 2472 return error::kNoError;
2473 } 2473 }
2474 if (!ValidateGLbooleanFalse(transpose)) { 2474 if (!validators_->false_only.IsValid(transpose)) {
2475 SetGLError( 2475 SetGLError(
2476 GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE"); 2476 GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE");
2477 return error::kNoError; 2477 return error::kNoError;
2478 } 2478 }
2479 if (value == NULL) { 2479 if (value == NULL) {
2480 return error::kOutOfBounds; 2480 return error::kOutOfBounds;
2481 } 2481 }
2482 glUniformMatrix4fv(location, count, transpose, value); 2482 glUniformMatrix4fv(location, count, transpose, value);
2483 return error::kNoError; 2483 return error::kNoError;
2484 } 2484 }
2485 2485
2486 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( 2486 error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate(
2487 uint32 immediate_data_size, const gles2::UniformMatrix4fvImmediate& c) { 2487 uint32 immediate_data_size, const gles2::UniformMatrix4fvImmediate& c) {
2488 GLint location = static_cast<GLint>(c.location); 2488 GLint location = static_cast<GLint>(c.location);
2489 GLsizei count = static_cast<GLsizei>(c.count); 2489 GLsizei count = static_cast<GLsizei>(c.count);
2490 GLboolean transpose = static_cast<GLboolean>(c.transpose); 2490 GLboolean transpose = static_cast<GLboolean>(c.transpose);
2491 uint32 data_size; 2491 uint32 data_size;
2492 if (!ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) { 2492 if (!ComputeDataSize(1, sizeof(GLfloat), 16, &data_size)) {
2493 return error::kOutOfBounds; 2493 return error::kOutOfBounds;
2494 } 2494 }
2495 if (data_size > immediate_data_size) { 2495 if (data_size > immediate_data_size) {
2496 return error::kOutOfBounds; 2496 return error::kOutOfBounds;
2497 } 2497 }
2498 const GLfloat* value = GetImmediateDataAs<const GLfloat*>( 2498 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
2499 c, data_size, immediate_data_size); 2499 c, data_size, immediate_data_size);
2500 if (count < 0) { 2500 if (count < 0) {
2501 SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0"); 2501 SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0");
2502 return error::kNoError; 2502 return error::kNoError;
2503 } 2503 }
2504 if (!ValidateGLbooleanFalse(transpose)) { 2504 if (!validators_->false_only.IsValid(transpose)) {
2505 SetGLError( 2505 SetGLError(
2506 GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE"); 2506 GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE");
2507 return error::kNoError; 2507 return error::kNoError;
2508 } 2508 }
2509 if (value == NULL) { 2509 if (value == NULL) {
2510 return error::kOutOfBounds; 2510 return error::kOutOfBounds;
2511 } 2511 }
2512 glUniformMatrix4fv(location, count, transpose, value); 2512 glUniformMatrix4fv(location, count, transpose, value);
2513 return error::kNoError; 2513 return error::kNoError;
2514 } 2514 }
(...skipping 217 matching lines...)
2732 typedef GetMaxValueInBuffer::Result Result; 2732 typedef GetMaxValueInBuffer::Result Result;
2733 Result* result_dst = GetSharedMemoryAs<Result*>( 2733 Result* result_dst = GetSharedMemoryAs<Result*>(
2734 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 2734 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
2735 if (!result_dst) { 2735 if (!result_dst) {
2736 return error::kOutOfBounds; 2736 return error::kOutOfBounds;
2737 } 2737 }
2738 if (count < 0) { 2738 if (count < 0) {
2739 SetGLError(GL_INVALID_VALUE, "glGetMaxValueInBuffer: count < 0"); 2739 SetGLError(GL_INVALID_VALUE, "glGetMaxValueInBuffer: count < 0");
2740 return error::kNoError; 2740 return error::kNoError;
2741 } 2741 }
2742 if (!ValidateGLenumGetMaxIndexType(type)) { 2742 if (!validators_->get_max_index_type.IsValid(type)) {
2743 SetGLError(GL_INVALID_ENUM, "glGetMaxValueInBuffer: type GL_INVALID_ENUM"); 2743 SetGLError(GL_INVALID_ENUM, "glGetMaxValueInBuffer: type GL_INVALID_ENUM");
2744 return error::kNoError; 2744 return error::kNoError;
2745 } 2745 }
2746 *result_dst = DoGetMaxValueInBuffer(buffer_id, count, type, offset); 2746 *result_dst = DoGetMaxValueInBuffer(buffer_id, count, type, offset);
2747 return error::kNoError; 2747 return error::kNoError;
2748 } 2748 }
2749 2749
2750 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ 2750 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
2751 2751
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_validation.h » ('j') | no next file with comments »

Powered by Google App Engine