OLD | NEW |
1 // This file is auto-generated. DO NOT EDIT! | 1 // This file is auto-generated. DO NOT EDIT! |
2 | 2 |
3 // It is included by gles2_cmd_decoder.cc | 3 // It is included by gles2_cmd_decoder.cc |
4 | 4 |
5 parse_error::ParseError GLES2DecoderImpl::HandleActiveTexture( | 5 parse_error::ParseError GLES2DecoderImpl::HandleActiveTexture( |
6 uint32 immediate_data_size, const gles2::ActiveTexture& c) { | 6 uint32 immediate_data_size, const gles2::ActiveTexture& c) { |
7 GLenum texture = static_cast<GLenum>(c.texture); | 7 GLenum texture = static_cast<GLenum>(c.texture); |
8 parse_error::ParseError result = | |
9 ValidateActiveTexture(this, immediate_data_size, texture); | |
10 if (result != parse_error::kParseNoError) { | |
11 return result; | |
12 } | |
13 glActiveTexture(texture); | 8 glActiveTexture(texture); |
14 return parse_error::kParseNoError; | 9 return parse_error::kParseNoError; |
15 } | 10 } |
16 | 11 |
17 parse_error::ParseError GLES2DecoderImpl::HandleAttachShader( | 12 parse_error::ParseError GLES2DecoderImpl::HandleAttachShader( |
18 uint32 immediate_data_size, const gles2::AttachShader& c) { | 13 uint32 immediate_data_size, const gles2::AttachShader& c) { |
19 GLuint program; | 14 GLuint program; |
20 if (!id_map_.GetServiceId(c.program, &program)) { | 15 if (!id_map_.GetServiceId(c.program, &program)) { |
21 SetGLError(GL_INVALID_VALUE); | 16 SetGLError(GL_INVALID_VALUE); |
22 return parse_error::kParseNoError; | 17 return parse_error::kParseNoError; |
23 } | 18 } |
24 GLuint shader; | 19 GLuint shader; |
25 if (!id_map_.GetServiceId(c.shader, &shader)) { | 20 if (!id_map_.GetServiceId(c.shader, &shader)) { |
26 SetGLError(GL_INVALID_VALUE); | 21 SetGLError(GL_INVALID_VALUE); |
27 return parse_error::kParseNoError; | 22 return parse_error::kParseNoError; |
28 } | 23 } |
29 parse_error::ParseError result = | |
30 ValidateAttachShader(this, immediate_data_size, program, shader); | |
31 if (result != parse_error::kParseNoError) { | |
32 return result; | |
33 } | |
34 glAttachShader(program, shader); | 24 glAttachShader(program, shader); |
35 return parse_error::kParseNoError; | 25 return parse_error::kParseNoError; |
36 } | 26 } |
37 | 27 |
38 parse_error::ParseError GLES2DecoderImpl::HandleBindAttribLocation( | 28 parse_error::ParseError GLES2DecoderImpl::HandleBindAttribLocation( |
39 uint32 immediate_data_size, const gles2::BindAttribLocation& c) { | 29 uint32 immediate_data_size, const gles2::BindAttribLocation& c) { |
40 GLuint program; | 30 GLuint program; |
41 if (!id_map_.GetServiceId(c.program, &program)) { | 31 if (!id_map_.GetServiceId(c.program, &program)) { |
42 SetGLError(GL_INVALID_VALUE); | 32 SetGLError(GL_INVALID_VALUE); |
43 return parse_error::kParseNoError; | 33 return parse_error::kParseNoError; |
44 } | 34 } |
45 GLuint index = static_cast<GLuint>(c.index); | 35 GLuint index = static_cast<GLuint>(c.index); |
46 uint32 name_size = c.data_size; | 36 uint32 name_size = c.data_size; |
47 const char* name = GetSharedMemoryAs<const char*>( | 37 const char* name = GetSharedMemoryAs<const char*>( |
48 c.name_shm_id, c.name_shm_offset, name_size); | 38 c.name_shm_id, c.name_shm_offset, name_size); |
49 parse_error::ParseError result = | 39 if (name == NULL) { |
50 ValidateBindAttribLocation( | 40 return parse_error::kParseOutOfBounds; |
51 this, immediate_data_size, program, index, name); | |
52 if (result != parse_error::kParseNoError) { | |
53 return result; | |
54 } | 41 } |
55 String name_str(name, name_size); | 42 String name_str(name, name_size); |
56 glBindAttribLocation(program, index, name_str.c_str()); | 43 glBindAttribLocation(program, index, name_str.c_str()); |
57 return parse_error::kParseNoError; | 44 return parse_error::kParseNoError; |
58 } | 45 } |
59 | 46 |
60 parse_error::ParseError GLES2DecoderImpl::HandleBindAttribLocationImmediate( | 47 parse_error::ParseError GLES2DecoderImpl::HandleBindAttribLocationImmediate( |
61 uint32 immediate_data_size, const gles2::BindAttribLocationImmediate& c) { | 48 uint32 immediate_data_size, const gles2::BindAttribLocationImmediate& c) { |
62 GLuint program; | 49 GLuint program; |
63 if (!id_map_.GetServiceId(c.program, &program)) { | 50 if (!id_map_.GetServiceId(c.program, &program)) { |
64 SetGLError(GL_INVALID_VALUE); | 51 SetGLError(GL_INVALID_VALUE); |
65 return parse_error::kParseNoError; | 52 return parse_error::kParseNoError; |
66 } | 53 } |
67 GLuint index = static_cast<GLuint>(c.index); | 54 GLuint index = static_cast<GLuint>(c.index); |
68 uint32 name_size = c.data_size; | 55 uint32 name_size = c.data_size; |
69 const char* name = GetImmediateDataAs<const char*>(c); | 56 const char* name = GetImmediateDataAs<const char*>(c); |
70 // TODO(gman): Make sure validate checks | 57 // TODO(gman): Make sure validate checks |
71 // immediate_data_size covers data_size. | 58 // immediate_data_size covers data_size. |
72 parse_error::ParseError result = | 59 if (name == NULL) { |
73 ValidateBindAttribLocationImmediate( | 60 return parse_error::kParseOutOfBounds; |
74 this, immediate_data_size, program, index, name); | |
75 if (result != parse_error::kParseNoError) { | |
76 return result; | |
77 } | 61 } |
78 String name_str(name, name_size); | 62 String name_str(name, name_size); |
79 glBindAttribLocation(program, index, name_str.c_str()); | 63 glBindAttribLocation(program, index, name_str.c_str()); |
80 return parse_error::kParseNoError; | 64 return parse_error::kParseNoError; |
81 } | 65 } |
82 | 66 |
83 parse_error::ParseError GLES2DecoderImpl::HandleBindBuffer( | 67 parse_error::ParseError GLES2DecoderImpl::HandleBindBuffer( |
84 uint32 immediate_data_size, const gles2::BindBuffer& c) { | 68 uint32 immediate_data_size, const gles2::BindBuffer& c) { |
85 GLenum target = static_cast<GLenum>(c.target); | 69 GLenum target = static_cast<GLenum>(c.target); |
86 GLuint buffer; | 70 GLuint buffer; |
87 if (!id_map_.GetServiceId(c.buffer, &buffer)) { | 71 if (!id_map_.GetServiceId(c.buffer, &buffer)) { |
88 SetGLError(GL_INVALID_VALUE); | 72 SetGLError(GL_INVALID_VALUE); |
89 return parse_error::kParseNoError; | 73 return parse_error::kParseNoError; |
90 } | 74 } |
91 parse_error::ParseError result = | 75 if (!ValidateGLenumBufferTarget(target)) { |
92 ValidateBindBuffer(this, immediate_data_size, target, buffer); | 76 SetGLError(GL_INVALID_VALUE); |
93 if (result != parse_error::kParseNoError) { | 77 return parse_error::kParseNoError; |
94 return result; | |
95 } | 78 } |
96 DoBindBuffer(target, buffer); | 79 DoBindBuffer(target, buffer); |
97 return parse_error::kParseNoError; | 80 return parse_error::kParseNoError; |
98 } | 81 } |
99 | 82 |
100 parse_error::ParseError GLES2DecoderImpl::HandleBindFramebuffer( | 83 parse_error::ParseError GLES2DecoderImpl::HandleBindFramebuffer( |
101 uint32 immediate_data_size, const gles2::BindFramebuffer& c) { | 84 uint32 immediate_data_size, const gles2::BindFramebuffer& c) { |
102 GLenum target = static_cast<GLenum>(c.target); | 85 GLenum target = static_cast<GLenum>(c.target); |
103 GLuint framebuffer; | 86 GLuint framebuffer; |
104 if (!id_map_.GetServiceId(c.framebuffer, &framebuffer)) { | 87 if (!id_map_.GetServiceId(c.framebuffer, &framebuffer)) { |
105 SetGLError(GL_INVALID_VALUE); | 88 SetGLError(GL_INVALID_VALUE); |
106 return parse_error::kParseNoError; | 89 return parse_error::kParseNoError; |
107 } | 90 } |
108 parse_error::ParseError result = | 91 if (!ValidateGLenumFrameBufferTarget(target)) { |
109 ValidateBindFramebuffer(this, immediate_data_size, target, framebuffer); | 92 SetGLError(GL_INVALID_VALUE); |
110 if (result != parse_error::kParseNoError) { | 93 return parse_error::kParseNoError; |
111 return result; | |
112 } | 94 } |
113 glBindFramebufferEXT(target, framebuffer); | 95 glBindFramebufferEXT(target, framebuffer); |
114 return parse_error::kParseNoError; | 96 return parse_error::kParseNoError; |
115 } | 97 } |
116 | 98 |
117 parse_error::ParseError GLES2DecoderImpl::HandleBindRenderbuffer( | 99 parse_error::ParseError GLES2DecoderImpl::HandleBindRenderbuffer( |
118 uint32 immediate_data_size, const gles2::BindRenderbuffer& c) { | 100 uint32 immediate_data_size, const gles2::BindRenderbuffer& c) { |
119 GLenum target = static_cast<GLenum>(c.target); | 101 GLenum target = static_cast<GLenum>(c.target); |
120 GLuint renderbuffer; | 102 GLuint renderbuffer; |
121 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { | 103 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { |
122 SetGLError(GL_INVALID_VALUE); | 104 SetGLError(GL_INVALID_VALUE); |
123 return parse_error::kParseNoError; | 105 return parse_error::kParseNoError; |
124 } | 106 } |
125 parse_error::ParseError result = | 107 if (!ValidateGLenumRenderBufferTarget(target)) { |
126 ValidateBindRenderbuffer( | 108 SetGLError(GL_INVALID_VALUE); |
127 this, immediate_data_size, target, renderbuffer); | 109 return parse_error::kParseNoError; |
128 if (result != parse_error::kParseNoError) { | |
129 return result; | |
130 } | 110 } |
131 glBindRenderbufferEXT(target, renderbuffer); | 111 glBindRenderbufferEXT(target, renderbuffer); |
132 return parse_error::kParseNoError; | 112 return parse_error::kParseNoError; |
133 } | 113 } |
134 | 114 |
135 parse_error::ParseError GLES2DecoderImpl::HandleBindTexture( | 115 parse_error::ParseError GLES2DecoderImpl::HandleBindTexture( |
136 uint32 immediate_data_size, const gles2::BindTexture& c) { | 116 uint32 immediate_data_size, const gles2::BindTexture& c) { |
137 GLenum target = static_cast<GLenum>(c.target); | 117 GLenum target = static_cast<GLenum>(c.target); |
138 GLuint texture; | 118 GLuint texture; |
139 if (!id_map_.GetServiceId(c.texture, &texture)) { | 119 if (!id_map_.GetServiceId(c.texture, &texture)) { |
140 SetGLError(GL_INVALID_VALUE); | 120 SetGLError(GL_INVALID_VALUE); |
141 return parse_error::kParseNoError; | 121 return parse_error::kParseNoError; |
142 } | 122 } |
143 parse_error::ParseError result = | 123 if (!ValidateGLenumTextureBindTarget(target)) { |
144 ValidateBindTexture(this, immediate_data_size, target, texture); | 124 SetGLError(GL_INVALID_VALUE); |
145 if (result != parse_error::kParseNoError) { | 125 return parse_error::kParseNoError; |
146 return result; | |
147 } | 126 } |
148 glBindTexture(target, texture); | 127 glBindTexture(target, texture); |
149 return parse_error::kParseNoError; | 128 return parse_error::kParseNoError; |
150 } | 129 } |
151 | 130 |
152 parse_error::ParseError GLES2DecoderImpl::HandleBlendColor( | 131 parse_error::ParseError GLES2DecoderImpl::HandleBlendColor( |
153 uint32 immediate_data_size, const gles2::BlendColor& c) { | 132 uint32 immediate_data_size, const gles2::BlendColor& c) { |
154 GLclampf red = static_cast<GLclampf>(c.red); | 133 GLclampf red = static_cast<GLclampf>(c.red); |
155 GLclampf green = static_cast<GLclampf>(c.green); | 134 GLclampf green = static_cast<GLclampf>(c.green); |
156 GLclampf blue = static_cast<GLclampf>(c.blue); | 135 GLclampf blue = static_cast<GLclampf>(c.blue); |
157 GLclampf alpha = static_cast<GLclampf>(c.alpha); | 136 GLclampf alpha = static_cast<GLclampf>(c.alpha); |
158 parse_error::ParseError result = | |
159 ValidateBlendColor(this, immediate_data_size, red, green, blue, alpha); | |
160 if (result != parse_error::kParseNoError) { | |
161 return result; | |
162 } | |
163 glBlendColor(red, green, blue, alpha); | 137 glBlendColor(red, green, blue, alpha); |
164 return parse_error::kParseNoError; | 138 return parse_error::kParseNoError; |
165 } | 139 } |
166 | 140 |
167 parse_error::ParseError GLES2DecoderImpl::HandleBlendEquation( | 141 parse_error::ParseError GLES2DecoderImpl::HandleBlendEquation( |
168 uint32 immediate_data_size, const gles2::BlendEquation& c) { | 142 uint32 immediate_data_size, const gles2::BlendEquation& c) { |
169 GLenum mode = static_cast<GLenum>(c.mode); | 143 GLenum mode = static_cast<GLenum>(c.mode); |
170 parse_error::ParseError result = | 144 if (!ValidateGLenumEquation(mode)) { |
171 ValidateBlendEquation(this, immediate_data_size, mode); | 145 SetGLError(GL_INVALID_VALUE); |
172 if (result != parse_error::kParseNoError) { | 146 return parse_error::kParseNoError; |
173 return result; | |
174 } | 147 } |
175 glBlendEquation(mode); | 148 glBlendEquation(mode); |
176 return parse_error::kParseNoError; | 149 return parse_error::kParseNoError; |
177 } | 150 } |
178 | 151 |
179 parse_error::ParseError GLES2DecoderImpl::HandleBlendEquationSeparate( | 152 parse_error::ParseError GLES2DecoderImpl::HandleBlendEquationSeparate( |
180 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) { | 153 uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) { |
181 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); | 154 GLenum modeRGB = static_cast<GLenum>(c.modeRGB); |
182 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); | 155 GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); |
183 parse_error::ParseError result = | 156 if (!ValidateGLenumEquation(modeRGB)) { |
184 ValidateBlendEquationSeparate( | 157 SetGLError(GL_INVALID_VALUE); |
185 this, immediate_data_size, modeRGB, modeAlpha); | 158 return parse_error::kParseNoError; |
186 if (result != parse_error::kParseNoError) { | 159 } |
187 return result; | 160 if (!ValidateGLenumEquation(modeAlpha)) { |
| 161 SetGLError(GL_INVALID_VALUE); |
| 162 return parse_error::kParseNoError; |
188 } | 163 } |
189 glBlendEquationSeparate(modeRGB, modeAlpha); | 164 glBlendEquationSeparate(modeRGB, modeAlpha); |
190 return parse_error::kParseNoError; | 165 return parse_error::kParseNoError; |
191 } | 166 } |
192 | 167 |
193 parse_error::ParseError GLES2DecoderImpl::HandleBlendFunc( | 168 parse_error::ParseError GLES2DecoderImpl::HandleBlendFunc( |
194 uint32 immediate_data_size, const gles2::BlendFunc& c) { | 169 uint32 immediate_data_size, const gles2::BlendFunc& c) { |
195 GLenum sfactor = static_cast<GLenum>(c.sfactor); | 170 GLenum sfactor = static_cast<GLenum>(c.sfactor); |
196 GLenum dfactor = static_cast<GLenum>(c.dfactor); | 171 GLenum dfactor = static_cast<GLenum>(c.dfactor); |
197 parse_error::ParseError result = | 172 if (!ValidateGLenumSrcBlendFactor(sfactor)) { |
198 ValidateBlendFunc(this, immediate_data_size, sfactor, dfactor); | 173 SetGLError(GL_INVALID_VALUE); |
199 if (result != parse_error::kParseNoError) { | 174 return parse_error::kParseNoError; |
200 return result; | 175 } |
| 176 if (!ValidateGLenumDstBlendFactor(dfactor)) { |
| 177 SetGLError(GL_INVALID_VALUE); |
| 178 return parse_error::kParseNoError; |
201 } | 179 } |
202 glBlendFunc(sfactor, dfactor); | 180 glBlendFunc(sfactor, dfactor); |
203 return parse_error::kParseNoError; | 181 return parse_error::kParseNoError; |
204 } | 182 } |
205 | 183 |
206 parse_error::ParseError GLES2DecoderImpl::HandleBlendFuncSeparate( | 184 parse_error::ParseError GLES2DecoderImpl::HandleBlendFuncSeparate( |
207 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) { | 185 uint32 immediate_data_size, const gles2::BlendFuncSeparate& c) { |
208 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); | 186 GLenum srcRGB = static_cast<GLenum>(c.srcRGB); |
209 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); | 187 GLenum dstRGB = static_cast<GLenum>(c.dstRGB); |
210 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); | 188 GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); |
211 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); | 189 GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); |
212 parse_error::ParseError result = | 190 if (!ValidateGLenumSrcBlendFactor(srcRGB)) { |
213 ValidateBlendFuncSeparate( | 191 SetGLError(GL_INVALID_VALUE); |
214 this, immediate_data_size, srcRGB, dstRGB, srcAlpha, dstAlpha); | 192 return parse_error::kParseNoError; |
215 if (result != parse_error::kParseNoError) { | 193 } |
216 return result; | 194 if (!ValidateGLenumDstBlendFactor(dstRGB)) { |
| 195 SetGLError(GL_INVALID_VALUE); |
| 196 return parse_error::kParseNoError; |
| 197 } |
| 198 if (!ValidateGLenumSrcBlendFactor(srcAlpha)) { |
| 199 SetGLError(GL_INVALID_VALUE); |
| 200 return parse_error::kParseNoError; |
| 201 } |
| 202 if (!ValidateGLenumDstBlendFactor(dstAlpha)) { |
| 203 SetGLError(GL_INVALID_VALUE); |
| 204 return parse_error::kParseNoError; |
217 } | 205 } |
218 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); | 206 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); |
219 return parse_error::kParseNoError; | 207 return parse_error::kParseNoError; |
220 } | 208 } |
221 | 209 |
222 parse_error::ParseError GLES2DecoderImpl::HandleBufferSubData( | 210 parse_error::ParseError GLES2DecoderImpl::HandleBufferSubData( |
223 uint32 immediate_data_size, const gles2::BufferSubData& c) { | 211 uint32 immediate_data_size, const gles2::BufferSubData& c) { |
224 GLenum target = static_cast<GLenum>(c.target); | 212 GLenum target = static_cast<GLenum>(c.target); |
225 GLintptr offset = static_cast<GLintptr>(c.offset); | 213 GLintptr offset = static_cast<GLintptr>(c.offset); |
226 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 214 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
227 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); | 215 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); |
228 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); | 216 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); |
229 uint32 data_size = size; | 217 uint32 data_size = size; |
230 const void* data = GetSharedMemoryAs<const void*>( | 218 const void* data = GetSharedMemoryAs<const void*>( |
231 data_shm_id, data_shm_offset, data_size); | 219 data_shm_id, data_shm_offset, data_size); |
232 parse_error::ParseError result = | 220 if (!ValidateGLenumBufferTarget(target)) { |
233 ValidateBufferSubData( | 221 SetGLError(GL_INVALID_VALUE); |
234 this, immediate_data_size, target, offset, size, data); | 222 return parse_error::kParseNoError; |
235 if (result != parse_error::kParseNoError) { | 223 } |
236 return result; | 224 if (data == NULL) { |
| 225 return parse_error::kParseOutOfBounds; |
237 } | 226 } |
238 glBufferSubData(target, offset, size, data); | 227 glBufferSubData(target, offset, size, data); |
239 return parse_error::kParseNoError; | 228 return parse_error::kParseNoError; |
240 } | 229 } |
241 | 230 |
242 parse_error::ParseError GLES2DecoderImpl::HandleBufferSubDataImmediate( | 231 parse_error::ParseError GLES2DecoderImpl::HandleBufferSubDataImmediate( |
243 uint32 immediate_data_size, const gles2::BufferSubDataImmediate& c) { | 232 uint32 immediate_data_size, const gles2::BufferSubDataImmediate& c) { |
244 GLenum target = static_cast<GLenum>(c.target); | 233 GLenum target = static_cast<GLenum>(c.target); |
245 GLintptr offset = static_cast<GLintptr>(c.offset); | 234 GLintptr offset = static_cast<GLintptr>(c.offset); |
246 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 235 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
247 const void* data = GetImmediateDataAs<const void*>(c); | 236 const void* data = GetImmediateDataAs<const void*>(c); |
| 237 if (!ValidateGLenumBufferTarget(target)) { |
| 238 SetGLError(GL_INVALID_VALUE); |
| 239 return parse_error::kParseNoError; |
| 240 } |
| 241 if (data == NULL) { |
| 242 return parse_error::kParseOutOfBounds; |
| 243 } |
248 // Immediate version. | 244 // Immediate version. |
249 parse_error::ParseError result = | 245 if (!ValidateGLenumBufferTarget(target)) { |
250 ValidateBufferSubDataImmediate( | 246 SetGLError(GL_INVALID_VALUE); |
251 this, immediate_data_size, target, offset, size, data); | 247 return parse_error::kParseNoError; |
252 if (result != parse_error::kParseNoError) { | 248 } |
253 return result; | 249 if (data == NULL) { |
| 250 return parse_error::kParseOutOfBounds; |
254 } | 251 } |
255 glBufferSubData(target, offset, size, data); | 252 glBufferSubData(target, offset, size, data); |
256 return parse_error::kParseNoError; | 253 return parse_error::kParseNoError; |
257 } | 254 } |
258 | 255 |
259 parse_error::ParseError GLES2DecoderImpl::HandleCheckFramebufferStatus( | 256 parse_error::ParseError GLES2DecoderImpl::HandleCheckFramebufferStatus( |
260 uint32 immediate_data_size, const gles2::CheckFramebufferStatus& c) { | 257 uint32 immediate_data_size, const gles2::CheckFramebufferStatus& c) { |
261 GLenum target = static_cast<GLenum>(c.target); | 258 GLenum target = static_cast<GLenum>(c.target); |
262 parse_error::ParseError result = | 259 if (!ValidateGLenumFrameBufferTarget(target)) { |
263 ValidateCheckFramebufferStatus(this, immediate_data_size, target); | 260 SetGLError(GL_INVALID_VALUE); |
264 if (result != parse_error::kParseNoError) { | 261 return parse_error::kParseNoError; |
265 return result; | |
266 } | 262 } |
267 glCheckFramebufferStatusEXT(target); | 263 glCheckFramebufferStatusEXT(target); |
268 return parse_error::kParseNoError; | 264 return parse_error::kParseNoError; |
269 } | 265 } |
270 | 266 |
271 parse_error::ParseError GLES2DecoderImpl::HandleClear( | 267 parse_error::ParseError GLES2DecoderImpl::HandleClear( |
272 uint32 immediate_data_size, const gles2::Clear& c) { | 268 uint32 immediate_data_size, const gles2::Clear& c) { |
273 GLbitfield mask = static_cast<GLbitfield>(c.mask); | 269 GLbitfield mask = static_cast<GLbitfield>(c.mask); |
274 parse_error::ParseError result = | |
275 ValidateClear(this, immediate_data_size, mask); | |
276 if (result != parse_error::kParseNoError) { | |
277 return result; | |
278 } | |
279 glClear(mask); | 270 glClear(mask); |
280 return parse_error::kParseNoError; | 271 return parse_error::kParseNoError; |
281 } | 272 } |
282 | 273 |
283 parse_error::ParseError GLES2DecoderImpl::HandleClearColor( | 274 parse_error::ParseError GLES2DecoderImpl::HandleClearColor( |
284 uint32 immediate_data_size, const gles2::ClearColor& c) { | 275 uint32 immediate_data_size, const gles2::ClearColor& c) { |
285 GLclampf red = static_cast<GLclampf>(c.red); | 276 GLclampf red = static_cast<GLclampf>(c.red); |
286 GLclampf green = static_cast<GLclampf>(c.green); | 277 GLclampf green = static_cast<GLclampf>(c.green); |
287 GLclampf blue = static_cast<GLclampf>(c.blue); | 278 GLclampf blue = static_cast<GLclampf>(c.blue); |
288 GLclampf alpha = static_cast<GLclampf>(c.alpha); | 279 GLclampf alpha = static_cast<GLclampf>(c.alpha); |
289 parse_error::ParseError result = | |
290 ValidateClearColor(this, immediate_data_size, red, green, blue, alpha); | |
291 if (result != parse_error::kParseNoError) { | |
292 return result; | |
293 } | |
294 glClearColor(red, green, blue, alpha); | 280 glClearColor(red, green, blue, alpha); |
295 return parse_error::kParseNoError; | 281 return parse_error::kParseNoError; |
296 } | 282 } |
297 | 283 |
298 parse_error::ParseError GLES2DecoderImpl::HandleClearDepthf( | 284 parse_error::ParseError GLES2DecoderImpl::HandleClearDepthf( |
299 uint32 immediate_data_size, const gles2::ClearDepthf& c) { | 285 uint32 immediate_data_size, const gles2::ClearDepthf& c) { |
300 GLclampf depth = static_cast<GLclampf>(c.depth); | 286 GLclampf depth = static_cast<GLclampf>(c.depth); |
301 parse_error::ParseError result = | |
302 ValidateClearDepthf(this, immediate_data_size, depth); | |
303 if (result != parse_error::kParseNoError) { | |
304 return result; | |
305 } | |
306 glClearDepth(depth); | 287 glClearDepth(depth); |
307 return parse_error::kParseNoError; | 288 return parse_error::kParseNoError; |
308 } | 289 } |
309 | 290 |
310 parse_error::ParseError GLES2DecoderImpl::HandleClearStencil( | 291 parse_error::ParseError GLES2DecoderImpl::HandleClearStencil( |
311 uint32 immediate_data_size, const gles2::ClearStencil& c) { | 292 uint32 immediate_data_size, const gles2::ClearStencil& c) { |
312 GLint s = static_cast<GLint>(c.s); | 293 GLint s = static_cast<GLint>(c.s); |
313 parse_error::ParseError result = | |
314 ValidateClearStencil(this, immediate_data_size, s); | |
315 if (result != parse_error::kParseNoError) { | |
316 return result; | |
317 } | |
318 glClearStencil(s); | 294 glClearStencil(s); |
319 return parse_error::kParseNoError; | 295 return parse_error::kParseNoError; |
320 } | 296 } |
321 | 297 |
322 parse_error::ParseError GLES2DecoderImpl::HandleColorMask( | 298 parse_error::ParseError GLES2DecoderImpl::HandleColorMask( |
323 uint32 immediate_data_size, const gles2::ColorMask& c) { | 299 uint32 immediate_data_size, const gles2::ColorMask& c) { |
324 GLboolean red = static_cast<GLboolean>(c.red); | 300 GLboolean red = static_cast<GLboolean>(c.red); |
325 GLboolean green = static_cast<GLboolean>(c.green); | 301 GLboolean green = static_cast<GLboolean>(c.green); |
326 GLboolean blue = static_cast<GLboolean>(c.blue); | 302 GLboolean blue = static_cast<GLboolean>(c.blue); |
327 GLboolean alpha = static_cast<GLboolean>(c.alpha); | 303 GLboolean alpha = static_cast<GLboolean>(c.alpha); |
328 parse_error::ParseError result = | |
329 ValidateColorMask(this, immediate_data_size, red, green, blue, alpha); | |
330 if (result != parse_error::kParseNoError) { | |
331 return result; | |
332 } | |
333 glColorMask(red, green, blue, alpha); | 304 glColorMask(red, green, blue, alpha); |
334 return parse_error::kParseNoError; | 305 return parse_error::kParseNoError; |
335 } | 306 } |
336 | 307 |
337 parse_error::ParseError GLES2DecoderImpl::HandleCompileShader( | 308 parse_error::ParseError GLES2DecoderImpl::HandleCompileShader( |
338 uint32 immediate_data_size, const gles2::CompileShader& c) { | 309 uint32 immediate_data_size, const gles2::CompileShader& c) { |
339 GLuint shader; | 310 GLuint shader; |
340 if (!id_map_.GetServiceId(c.shader, &shader)) { | 311 if (!id_map_.GetServiceId(c.shader, &shader)) { |
341 SetGLError(GL_INVALID_VALUE); | 312 SetGLError(GL_INVALID_VALUE); |
342 return parse_error::kParseNoError; | 313 return parse_error::kParseNoError; |
343 } | 314 } |
344 parse_error::ParseError result = | |
345 ValidateCompileShader(this, immediate_data_size, shader); | |
346 if (result != parse_error::kParseNoError) { | |
347 return result; | |
348 } | |
349 glCompileShader(shader); | 315 glCompileShader(shader); |
350 return parse_error::kParseNoError; | 316 return parse_error::kParseNoError; |
351 } | 317 } |
352 | 318 |
353 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexSubImage2D( | 319 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexSubImage2D( |
354 uint32 immediate_data_size, const gles2::CompressedTexSubImage2D& c) { | 320 uint32 immediate_data_size, const gles2::CompressedTexSubImage2D& c) { |
355 GLenum target = static_cast<GLenum>(c.target); | 321 GLenum target = static_cast<GLenum>(c.target); |
356 GLint level = static_cast<GLint>(c.level); | 322 GLint level = static_cast<GLint>(c.level); |
357 GLint xoffset = static_cast<GLint>(c.xoffset); | 323 GLint xoffset = static_cast<GLint>(c.xoffset); |
358 GLint yoffset = static_cast<GLint>(c.yoffset); | 324 GLint yoffset = static_cast<GLint>(c.yoffset); |
359 GLsizei width = static_cast<GLsizei>(c.width); | 325 GLsizei width = static_cast<GLsizei>(c.width); |
360 GLsizei height = static_cast<GLsizei>(c.height); | 326 GLsizei height = static_cast<GLsizei>(c.height); |
361 GLenum format = static_cast<GLenum>(c.format); | 327 GLenum format = static_cast<GLenum>(c.format); |
362 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 328 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
363 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); | 329 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); |
364 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); | 330 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); |
365 uint32 data_size = imageSize; | 331 uint32 data_size = imageSize; |
366 const void* data = GetSharedMemoryAs<const void*>( | 332 const void* data = GetSharedMemoryAs<const void*>( |
367 data_shm_id, data_shm_offset, data_size); | 333 data_shm_id, data_shm_offset, data_size); |
368 parse_error::ParseError result = | 334 if (!ValidateGLenumTextureTarget(target)) { |
369 ValidateCompressedTexSubImage2D( | 335 SetGLError(GL_INVALID_VALUE); |
370 this, immediate_data_size, target, level, xoffset, yoffset, width, | 336 return parse_error::kParseNoError; |
371 height, format, imageSize, data); | 337 } |
372 if (result != parse_error::kParseNoError) { | 338 if (data == NULL) { |
373 return result; | 339 return parse_error::kParseOutOfBounds; |
374 } | 340 } |
375 glCompressedTexSubImage2D( | 341 glCompressedTexSubImage2D( |
376 target, level, xoffset, yoffset, width, height, format, imageSize, data); | 342 target, level, xoffset, yoffset, width, height, format, imageSize, data); |
377 return parse_error::kParseNoError; | 343 return parse_error::kParseNoError; |
378 } | 344 } |
379 | 345 |
380 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexSubImage2DImmediate
( | 346 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexSubImage2DImmediate
( |
381 | 347 |
382 uint32 immediate_data_size, | 348 uint32 immediate_data_size, |
383 const gles2::CompressedTexSubImage2DImmediate& c) { | 349 const gles2::CompressedTexSubImage2DImmediate& c) { |
384 GLenum target = static_cast<GLenum>(c.target); | 350 GLenum target = static_cast<GLenum>(c.target); |
385 GLint level = static_cast<GLint>(c.level); | 351 GLint level = static_cast<GLint>(c.level); |
386 GLint xoffset = static_cast<GLint>(c.xoffset); | 352 GLint xoffset = static_cast<GLint>(c.xoffset); |
387 GLint yoffset = static_cast<GLint>(c.yoffset); | 353 GLint yoffset = static_cast<GLint>(c.yoffset); |
388 GLsizei width = static_cast<GLsizei>(c.width); | 354 GLsizei width = static_cast<GLsizei>(c.width); |
389 GLsizei height = static_cast<GLsizei>(c.height); | 355 GLsizei height = static_cast<GLsizei>(c.height); |
390 GLenum format = static_cast<GLenum>(c.format); | 356 GLenum format = static_cast<GLenum>(c.format); |
391 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); | 357 GLsizei imageSize = static_cast<GLsizei>(c.imageSize); |
392 const void* data = GetImmediateDataAs<const void*>(c); | 358 const void* data = GetImmediateDataAs<const void*>(c); |
| 359 if (!ValidateGLenumTextureTarget(target)) { |
| 360 SetGLError(GL_INVALID_VALUE); |
| 361 return parse_error::kParseNoError; |
| 362 } |
| 363 if (data == NULL) { |
| 364 return parse_error::kParseOutOfBounds; |
| 365 } |
393 // Immediate version. | 366 // Immediate version. |
394 parse_error::ParseError result = | 367 if (!ValidateGLenumTextureTarget(target)) { |
395 ValidateCompressedTexSubImage2DImmediate( | 368 SetGLError(GL_INVALID_VALUE); |
396 this, immediate_data_size, target, level, xoffset, yoffset, width, | 369 return parse_error::kParseNoError; |
397 height, format, imageSize, data); | 370 } |
398 if (result != parse_error::kParseNoError) { | 371 if (data == NULL) { |
399 return result; | 372 return parse_error::kParseOutOfBounds; |
400 } | 373 } |
401 glCompressedTexSubImage2D( | 374 glCompressedTexSubImage2D( |
402 target, level, xoffset, yoffset, width, height, format, imageSize, data); | 375 target, level, xoffset, yoffset, width, height, format, imageSize, data); |
403 return parse_error::kParseNoError; | 376 return parse_error::kParseNoError; |
404 } | 377 } |
405 | 378 |
406 parse_error::ParseError GLES2DecoderImpl::HandleCopyTexImage2D( | 379 parse_error::ParseError GLES2DecoderImpl::HandleCopyTexImage2D( |
407 uint32 immediate_data_size, const gles2::CopyTexImage2D& c) { | 380 uint32 immediate_data_size, const gles2::CopyTexImage2D& c) { |
408 GLenum target = static_cast<GLenum>(c.target); | 381 GLenum target = static_cast<GLenum>(c.target); |
409 GLint level = static_cast<GLint>(c.level); | 382 GLint level = static_cast<GLint>(c.level); |
410 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 383 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
411 GLint x = static_cast<GLint>(c.x); | 384 GLint x = static_cast<GLint>(c.x); |
412 GLint y = static_cast<GLint>(c.y); | 385 GLint y = static_cast<GLint>(c.y); |
413 GLsizei width = static_cast<GLsizei>(c.width); | 386 GLsizei width = static_cast<GLsizei>(c.width); |
414 GLsizei height = static_cast<GLsizei>(c.height); | 387 GLsizei height = static_cast<GLsizei>(c.height); |
415 GLint border = static_cast<GLint>(c.border); | 388 GLint border = static_cast<GLint>(c.border); |
416 parse_error::ParseError result = | 389 if (!ValidateGLenumTextureTarget(target)) { |
417 ValidateCopyTexImage2D( | 390 SetGLError(GL_INVALID_VALUE); |
418 this, immediate_data_size, target, level, internalformat, x, y, width, | 391 return parse_error::kParseNoError; |
419 height, border); | |
420 if (result != parse_error::kParseNoError) { | |
421 return result; | |
422 } | 392 } |
423 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); | 393 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); |
424 return parse_error::kParseNoError; | 394 return parse_error::kParseNoError; |
425 } | 395 } |
426 | 396 |
427 parse_error::ParseError GLES2DecoderImpl::HandleCopyTexSubImage2D( | 397 parse_error::ParseError GLES2DecoderImpl::HandleCopyTexSubImage2D( |
428 uint32 immediate_data_size, const gles2::CopyTexSubImage2D& c) { | 398 uint32 immediate_data_size, const gles2::CopyTexSubImage2D& c) { |
429 GLenum target = static_cast<GLenum>(c.target); | 399 GLenum target = static_cast<GLenum>(c.target); |
430 GLint level = static_cast<GLint>(c.level); | 400 GLint level = static_cast<GLint>(c.level); |
431 GLint xoffset = static_cast<GLint>(c.xoffset); | 401 GLint xoffset = static_cast<GLint>(c.xoffset); |
432 GLint yoffset = static_cast<GLint>(c.yoffset); | 402 GLint yoffset = static_cast<GLint>(c.yoffset); |
433 GLint x = static_cast<GLint>(c.x); | 403 GLint x = static_cast<GLint>(c.x); |
434 GLint y = static_cast<GLint>(c.y); | 404 GLint y = static_cast<GLint>(c.y); |
435 GLsizei width = static_cast<GLsizei>(c.width); | 405 GLsizei width = static_cast<GLsizei>(c.width); |
436 GLsizei height = static_cast<GLsizei>(c.height); | 406 GLsizei height = static_cast<GLsizei>(c.height); |
437 parse_error::ParseError result = | 407 if (!ValidateGLenumTextureTarget(target)) { |
438 ValidateCopyTexSubImage2D( | 408 SetGLError(GL_INVALID_VALUE); |
439 this, immediate_data_size, target, level, xoffset, yoffset, x, y, | 409 return parse_error::kParseNoError; |
440 width, height); | |
441 if (result != parse_error::kParseNoError) { | |
442 return result; | |
443 } | 410 } |
444 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); | 411 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); |
445 return parse_error::kParseNoError; | 412 return parse_error::kParseNoError; |
446 } | 413 } |
447 | 414 |
448 parse_error::ParseError GLES2DecoderImpl::HandleCreateProgram( | 415 parse_error::ParseError GLES2DecoderImpl::HandleCreateProgram( |
449 uint32 immediate_data_size, const gles2::CreateProgram& c) { | 416 uint32 immediate_data_size, const gles2::CreateProgram& c) { |
450 uint32 client_id = c.client_id; | 417 uint32 client_id = c.client_id; |
451 parse_error::ParseError result = | |
452 ValidateCreateProgram(this, immediate_data_size); | |
453 if (result != parse_error::kParseNoError) { | |
454 return result; | |
455 } | |
456 CreateProgramHelper(client_id); | 418 CreateProgramHelper(client_id); |
457 return parse_error::kParseNoError; | 419 return parse_error::kParseNoError; |
458 } | 420 } |
459 | 421 |
460 parse_error::ParseError GLES2DecoderImpl::HandleCreateShader( | 422 parse_error::ParseError GLES2DecoderImpl::HandleCreateShader( |
461 uint32 immediate_data_size, const gles2::CreateShader& c) { | 423 uint32 immediate_data_size, const gles2::CreateShader& c) { |
462 GLenum type = static_cast<GLenum>(c.type); | 424 GLenum type = static_cast<GLenum>(c.type); |
| 425 if (!ValidateGLenumShaderType(type)) { |
| 426 SetGLError(GL_INVALID_VALUE); |
| 427 return parse_error::kParseNoError; |
| 428 } |
463 uint32 client_id = c.client_id; | 429 uint32 client_id = c.client_id; |
464 parse_error::ParseError result = | 430 if (!ValidateGLenumShaderType(type)) { |
465 ValidateCreateShader(this, immediate_data_size, type); | 431 SetGLError(GL_INVALID_VALUE); |
466 if (result != parse_error::kParseNoError) { | 432 return parse_error::kParseNoError; |
467 return result; | |
468 } | 433 } |
469 CreateShaderHelper(type, client_id); | 434 CreateShaderHelper(type, client_id); |
470 return parse_error::kParseNoError; | 435 return parse_error::kParseNoError; |
471 } | 436 } |
472 | 437 |
473 parse_error::ParseError GLES2DecoderImpl::HandleCullFace( | 438 parse_error::ParseError GLES2DecoderImpl::HandleCullFace( |
474 uint32 immediate_data_size, const gles2::CullFace& c) { | 439 uint32 immediate_data_size, const gles2::CullFace& c) { |
475 GLenum mode = static_cast<GLenum>(c.mode); | 440 GLenum mode = static_cast<GLenum>(c.mode); |
476 parse_error::ParseError result = | 441 if (!ValidateGLenumFaceType(mode)) { |
477 ValidateCullFace(this, immediate_data_size, mode); | 442 SetGLError(GL_INVALID_VALUE); |
478 if (result != parse_error::kParseNoError) { | 443 return parse_error::kParseNoError; |
479 return result; | |
480 } | 444 } |
481 glCullFace(mode); | 445 glCullFace(mode); |
482 return parse_error::kParseNoError; | 446 return parse_error::kParseNoError; |
483 } | 447 } |
484 | 448 |
485 parse_error::ParseError GLES2DecoderImpl::HandleDeleteBuffers( | 449 parse_error::ParseError GLES2DecoderImpl::HandleDeleteBuffers( |
486 uint32 immediate_data_size, const gles2::DeleteBuffers& c) { | 450 uint32 immediate_data_size, const gles2::DeleteBuffers& c) { |
487 GLsizei n = static_cast<GLsizei>(c.n); | 451 GLsizei n = static_cast<GLsizei>(c.n); |
488 const GLuint* buffers = GetSharedMemoryAs<const GLuint*>( | 452 const GLuint* buffers = GetSharedMemoryAs<const GLuint*>( |
489 c.buffers_shm_id, c.buffers_shm_offset, 0 /* TODO(gman): size */); | 453 c.buffers_shm_id, c.buffers_shm_offset, 0 /* TODO(gman): size */); |
490 parse_error::ParseError result = | 454 if (buffers == NULL) { |
491 ValidateDeleteBuffers(this, immediate_data_size, n, buffers); | 455 return parse_error::kParseOutOfBounds; |
492 if (result != parse_error::kParseNoError) { | 456 } |
493 return result; | 457 if (buffers == NULL) { |
| 458 return parse_error::kParseOutOfBounds; |
494 } | 459 } |
495 DeleteGLObjects<GLDeleteBuffersHelper>(n, buffers); | 460 DeleteGLObjects<GLDeleteBuffersHelper>(n, buffers); |
496 return parse_error::kParseNoError; | 461 return parse_error::kParseNoError; |
497 } | 462 } |
498 | 463 |
499 parse_error::ParseError GLES2DecoderImpl::HandleDeleteBuffersImmediate( | 464 parse_error::ParseError GLES2DecoderImpl::HandleDeleteBuffersImmediate( |
500 uint32 immediate_data_size, const gles2::DeleteBuffersImmediate& c) { | 465 uint32 immediate_data_size, const gles2::DeleteBuffersImmediate& c) { |
501 GLsizei n = static_cast<GLsizei>(c.n); | 466 GLsizei n = static_cast<GLsizei>(c.n); |
502 const GLuint* buffers = GetImmediateDataAs<const GLuint*>(c); | 467 const GLuint* buffers = GetImmediateDataAs<const GLuint*>(c); |
503 parse_error::ParseError result = | 468 if (buffers == NULL) { |
504 ValidateDeleteBuffersImmediate(this, immediate_data_size, n, buffers); | 469 return parse_error::kParseOutOfBounds; |
505 if (result != parse_error::kParseNoError) { | 470 } |
506 return result; | 471 if (buffers == NULL) { |
| 472 return parse_error::kParseOutOfBounds; |
507 } | 473 } |
508 DeleteGLObjects<GLDeleteBuffersHelper>(n, buffers); | 474 DeleteGLObjects<GLDeleteBuffersHelper>(n, buffers); |
509 return parse_error::kParseNoError; | 475 return parse_error::kParseNoError; |
510 } | 476 } |
511 | 477 |
512 parse_error::ParseError GLES2DecoderImpl::HandleDeleteFramebuffers( | 478 parse_error::ParseError GLES2DecoderImpl::HandleDeleteFramebuffers( |
513 uint32 immediate_data_size, const gles2::DeleteFramebuffers& c) { | 479 uint32 immediate_data_size, const gles2::DeleteFramebuffers& c) { |
514 GLsizei n = static_cast<GLsizei>(c.n); | 480 GLsizei n = static_cast<GLsizei>(c.n); |
515 const GLuint* framebuffers = GetSharedMemoryAs<const GLuint*>( | 481 const GLuint* framebuffers = GetSharedMemoryAs<const GLuint*>( |
516 c.framebuffers_shm_id, c.framebuffers_shm_offset, 0 /* TODO( | 482 c.framebuffers_shm_id, c.framebuffers_shm_offset, 0 /* TODO( |
517 gman): size */); | 483 gman): size */); |
518 parse_error::ParseError result = | 484 if (framebuffers == NULL) { |
519 ValidateDeleteFramebuffers(this, immediate_data_size, n, framebuffers); | 485 return parse_error::kParseOutOfBounds; |
520 if (result != parse_error::kParseNoError) { | 486 } |
521 return result; | 487 if (framebuffers == NULL) { |
| 488 return parse_error::kParseOutOfBounds; |
522 } | 489 } |
523 DeleteGLObjects<GLDeleteFramebuffersHelper>(n, framebuffers); | 490 DeleteGLObjects<GLDeleteFramebuffersHelper>(n, framebuffers); |
524 return parse_error::kParseNoError; | 491 return parse_error::kParseNoError; |
525 } | 492 } |
526 | 493 |
527 parse_error::ParseError GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( | 494 parse_error::ParseError GLES2DecoderImpl::HandleDeleteFramebuffersImmediate( |
528 uint32 immediate_data_size, const gles2::DeleteFramebuffersImmediate& c) { | 495 uint32 immediate_data_size, const gles2::DeleteFramebuffersImmediate& c) { |
529 GLsizei n = static_cast<GLsizei>(c.n); | 496 GLsizei n = static_cast<GLsizei>(c.n); |
530 const GLuint* framebuffers = GetImmediateDataAs<const GLuint*>(c); | 497 const GLuint* framebuffers = GetImmediateDataAs<const GLuint*>(c); |
531 parse_error::ParseError result = | 498 if (framebuffers == NULL) { |
532 ValidateDeleteFramebuffersImmediate( | 499 return parse_error::kParseOutOfBounds; |
533 this, immediate_data_size, n, framebuffers); | 500 } |
534 if (result != parse_error::kParseNoError) { | 501 if (framebuffers == NULL) { |
535 return result; | 502 return parse_error::kParseOutOfBounds; |
536 } | 503 } |
537 DeleteGLObjects<GLDeleteFramebuffersHelper>(n, framebuffers); | 504 DeleteGLObjects<GLDeleteFramebuffersHelper>(n, framebuffers); |
538 return parse_error::kParseNoError; | 505 return parse_error::kParseNoError; |
539 } | 506 } |
540 | 507 |
541 parse_error::ParseError GLES2DecoderImpl::HandleDeleteProgram( | |
542 uint32 immediate_data_size, const gles2::DeleteProgram& c) { | |
543 GLuint program; | |
544 if (!id_map_.GetServiceId(c.program, &program)) { | |
545 SetGLError(GL_INVALID_VALUE); | |
546 return parse_error::kParseNoError; | |
547 } | |
548 parse_error::ParseError result = | |
549 ValidateDeleteProgram(this, immediate_data_size, program); | |
550 if (result != parse_error::kParseNoError) { | |
551 return result; | |
552 } | |
553 DoDeleteProgram(program); | |
554 return parse_error::kParseNoError; | |
555 } | |
556 | |
557 parse_error::ParseError GLES2DecoderImpl::HandleDeleteRenderbuffers( | 508 parse_error::ParseError GLES2DecoderImpl::HandleDeleteRenderbuffers( |
558 uint32 immediate_data_size, const gles2::DeleteRenderbuffers& c) { | 509 uint32 immediate_data_size, const gles2::DeleteRenderbuffers& c) { |
559 GLsizei n = static_cast<GLsizei>(c.n); | 510 GLsizei n = static_cast<GLsizei>(c.n); |
560 const GLuint* renderbuffers = GetSharedMemoryAs<const GLuint*>( | 511 const GLuint* renderbuffers = GetSharedMemoryAs<const GLuint*>( |
561 c.renderbuffers_shm_id, c.renderbuffers_shm_offset, 0 /* TODO( | 512 c.renderbuffers_shm_id, c.renderbuffers_shm_offset, 0 /* TODO( |
562 gman): size */); | 513 gman): size */); |
563 parse_error::ParseError result = | 514 if (renderbuffers == NULL) { |
564 ValidateDeleteRenderbuffers(this, immediate_data_size, n, renderbuffers); | 515 return parse_error::kParseOutOfBounds; |
565 if (result != parse_error::kParseNoError) { | 516 } |
566 return result; | 517 if (renderbuffers == NULL) { |
| 518 return parse_error::kParseOutOfBounds; |
567 } | 519 } |
568 DeleteGLObjects<GLDeleteRenderbuffersHelper>(n, renderbuffers); | 520 DeleteGLObjects<GLDeleteRenderbuffersHelper>(n, renderbuffers); |
569 return parse_error::kParseNoError; | 521 return parse_error::kParseNoError; |
570 } | 522 } |
571 | 523 |
572 parse_error::ParseError GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( | 524 parse_error::ParseError GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate( |
573 uint32 immediate_data_size, const gles2::DeleteRenderbuffersImmediate& c) { | 525 uint32 immediate_data_size, const gles2::DeleteRenderbuffersImmediate& c) { |
574 GLsizei n = static_cast<GLsizei>(c.n); | 526 GLsizei n = static_cast<GLsizei>(c.n); |
575 const GLuint* renderbuffers = GetImmediateDataAs<const GLuint*>(c); | 527 const GLuint* renderbuffers = GetImmediateDataAs<const GLuint*>(c); |
576 parse_error::ParseError result = | 528 if (renderbuffers == NULL) { |
577 ValidateDeleteRenderbuffersImmediate( | 529 return parse_error::kParseOutOfBounds; |
578 this, immediate_data_size, n, renderbuffers); | 530 } |
579 if (result != parse_error::kParseNoError) { | 531 if (renderbuffers == NULL) { |
580 return result; | 532 return parse_error::kParseOutOfBounds; |
581 } | 533 } |
582 DeleteGLObjects<GLDeleteRenderbuffersHelper>(n, renderbuffers); | 534 DeleteGLObjects<GLDeleteRenderbuffersHelper>(n, renderbuffers); |
583 return parse_error::kParseNoError; | 535 return parse_error::kParseNoError; |
584 } | 536 } |
585 | 537 |
586 parse_error::ParseError GLES2DecoderImpl::HandleDeleteShader( | |
587 uint32 immediate_data_size, const gles2::DeleteShader& c) { | |
588 GLuint shader; | |
589 if (!id_map_.GetServiceId(c.shader, &shader)) { | |
590 SetGLError(GL_INVALID_VALUE); | |
591 return parse_error::kParseNoError; | |
592 } | |
593 parse_error::ParseError result = | |
594 ValidateDeleteShader(this, immediate_data_size, shader); | |
595 if (result != parse_error::kParseNoError) { | |
596 return result; | |
597 } | |
598 DoDeleteShader(shader); | |
599 return parse_error::kParseNoError; | |
600 } | |
601 | |
602 parse_error::ParseError GLES2DecoderImpl::HandleDeleteTextures( | 538 parse_error::ParseError GLES2DecoderImpl::HandleDeleteTextures( |
603 uint32 immediate_data_size, const gles2::DeleteTextures& c) { | 539 uint32 immediate_data_size, const gles2::DeleteTextures& c) { |
604 GLsizei n = static_cast<GLsizei>(c.n); | 540 GLsizei n = static_cast<GLsizei>(c.n); |
605 const GLuint* textures = GetSharedMemoryAs<const GLuint*>( | 541 const GLuint* textures = GetSharedMemoryAs<const GLuint*>( |
606 c.textures_shm_id, c.textures_shm_offset, 0 /* TODO(gman): size */); | 542 c.textures_shm_id, c.textures_shm_offset, 0 /* TODO(gman): size */); |
607 parse_error::ParseError result = | 543 if (textures == NULL) { |
608 ValidateDeleteTextures(this, immediate_data_size, n, textures); | 544 return parse_error::kParseOutOfBounds; |
609 if (result != parse_error::kParseNoError) { | 545 } |
610 return result; | 546 if (textures == NULL) { |
| 547 return parse_error::kParseOutOfBounds; |
611 } | 548 } |
612 DeleteGLObjects<GLDeleteTexturesHelper>(n, textures); | 549 DeleteGLObjects<GLDeleteTexturesHelper>(n, textures); |
613 return parse_error::kParseNoError; | 550 return parse_error::kParseNoError; |
614 } | 551 } |
615 | 552 |
616 parse_error::ParseError GLES2DecoderImpl::HandleDeleteTexturesImmediate( | 553 parse_error::ParseError GLES2DecoderImpl::HandleDeleteTexturesImmediate( |
617 uint32 immediate_data_size, const gles2::DeleteTexturesImmediate& c) { | 554 uint32 immediate_data_size, const gles2::DeleteTexturesImmediate& c) { |
618 GLsizei n = static_cast<GLsizei>(c.n); | 555 GLsizei n = static_cast<GLsizei>(c.n); |
619 const GLuint* textures = GetImmediateDataAs<const GLuint*>(c); | 556 const GLuint* textures = GetImmediateDataAs<const GLuint*>(c); |
620 parse_error::ParseError result = | 557 if (textures == NULL) { |
621 ValidateDeleteTexturesImmediate(this, immediate_data_size, n, textures); | 558 return parse_error::kParseOutOfBounds; |
622 if (result != parse_error::kParseNoError) { | 559 } |
623 return result; | 560 if (textures == NULL) { |
| 561 return parse_error::kParseOutOfBounds; |
624 } | 562 } |
625 DeleteGLObjects<GLDeleteTexturesHelper>(n, textures); | 563 DeleteGLObjects<GLDeleteTexturesHelper>(n, textures); |
626 return parse_error::kParseNoError; | 564 return parse_error::kParseNoError; |
627 } | 565 } |
628 | 566 |
629 parse_error::ParseError GLES2DecoderImpl::HandleDepthFunc( | 567 parse_error::ParseError GLES2DecoderImpl::HandleDepthFunc( |
630 uint32 immediate_data_size, const gles2::DepthFunc& c) { | 568 uint32 immediate_data_size, const gles2::DepthFunc& c) { |
631 GLenum func = static_cast<GLenum>(c.func); | 569 GLenum func = static_cast<GLenum>(c.func); |
632 parse_error::ParseError result = | 570 if (!ValidateGLenumCmpFunction(func)) { |
633 ValidateDepthFunc(this, immediate_data_size, func); | 571 SetGLError(GL_INVALID_VALUE); |
634 if (result != parse_error::kParseNoError) { | 572 return parse_error::kParseNoError; |
635 return result; | |
636 } | 573 } |
637 glDepthFunc(func); | 574 glDepthFunc(func); |
638 return parse_error::kParseNoError; | 575 return parse_error::kParseNoError; |
639 } | 576 } |
640 | 577 |
641 parse_error::ParseError GLES2DecoderImpl::HandleDepthMask( | 578 parse_error::ParseError GLES2DecoderImpl::HandleDepthMask( |
642 uint32 immediate_data_size, const gles2::DepthMask& c) { | 579 uint32 immediate_data_size, const gles2::DepthMask& c) { |
643 GLboolean flag = static_cast<GLboolean>(c.flag); | 580 GLboolean flag = static_cast<GLboolean>(c.flag); |
644 parse_error::ParseError result = | |
645 ValidateDepthMask(this, immediate_data_size, flag); | |
646 if (result != parse_error::kParseNoError) { | |
647 return result; | |
648 } | |
649 glDepthMask(flag); | 581 glDepthMask(flag); |
650 return parse_error::kParseNoError; | 582 return parse_error::kParseNoError; |
651 } | 583 } |
652 | 584 |
653 parse_error::ParseError GLES2DecoderImpl::HandleDepthRangef( | 585 parse_error::ParseError GLES2DecoderImpl::HandleDepthRangef( |
654 uint32 immediate_data_size, const gles2::DepthRangef& c) { | 586 uint32 immediate_data_size, const gles2::DepthRangef& c) { |
655 GLclampf zNear = static_cast<GLclampf>(c.zNear); | 587 GLclampf zNear = static_cast<GLclampf>(c.zNear); |
656 GLclampf zFar = static_cast<GLclampf>(c.zFar); | 588 GLclampf zFar = static_cast<GLclampf>(c.zFar); |
657 parse_error::ParseError result = | |
658 ValidateDepthRangef(this, immediate_data_size, zNear, zFar); | |
659 if (result != parse_error::kParseNoError) { | |
660 return result; | |
661 } | |
662 glDepthRange(zNear, zFar); | 589 glDepthRange(zNear, zFar); |
663 return parse_error::kParseNoError; | 590 return parse_error::kParseNoError; |
664 } | 591 } |
665 | 592 |
666 parse_error::ParseError GLES2DecoderImpl::HandleDetachShader( | 593 parse_error::ParseError GLES2DecoderImpl::HandleDetachShader( |
667 uint32 immediate_data_size, const gles2::DetachShader& c) { | 594 uint32 immediate_data_size, const gles2::DetachShader& c) { |
668 GLuint program; | 595 GLuint program; |
669 if (!id_map_.GetServiceId(c.program, &program)) { | 596 if (!id_map_.GetServiceId(c.program, &program)) { |
670 SetGLError(GL_INVALID_VALUE); | 597 SetGLError(GL_INVALID_VALUE); |
671 return parse_error::kParseNoError; | 598 return parse_error::kParseNoError; |
672 } | 599 } |
673 GLuint shader; | 600 GLuint shader; |
674 if (!id_map_.GetServiceId(c.shader, &shader)) { | 601 if (!id_map_.GetServiceId(c.shader, &shader)) { |
675 SetGLError(GL_INVALID_VALUE); | 602 SetGLError(GL_INVALID_VALUE); |
676 return parse_error::kParseNoError; | 603 return parse_error::kParseNoError; |
677 } | 604 } |
678 parse_error::ParseError result = | |
679 ValidateDetachShader(this, immediate_data_size, program, shader); | |
680 if (result != parse_error::kParseNoError) { | |
681 return result; | |
682 } | |
683 glDetachShader(program, shader); | 605 glDetachShader(program, shader); |
684 return parse_error::kParseNoError; | 606 return parse_error::kParseNoError; |
685 } | 607 } |
686 | 608 |
687 parse_error::ParseError GLES2DecoderImpl::HandleDisable( | 609 parse_error::ParseError GLES2DecoderImpl::HandleDisable( |
688 uint32 immediate_data_size, const gles2::Disable& c) { | 610 uint32 immediate_data_size, const gles2::Disable& c) { |
689 GLenum cap = static_cast<GLenum>(c.cap); | 611 GLenum cap = static_cast<GLenum>(c.cap); |
690 parse_error::ParseError result = | 612 if (!ValidateGLenumCapability(cap)) { |
691 ValidateDisable(this, immediate_data_size, cap); | 613 SetGLError(GL_INVALID_VALUE); |
692 if (result != parse_error::kParseNoError) { | 614 return parse_error::kParseNoError; |
693 return result; | |
694 } | 615 } |
695 glDisable(cap); | 616 glDisable(cap); |
696 return parse_error::kParseNoError; | 617 return parse_error::kParseNoError; |
697 } | 618 } |
698 | 619 |
699 parse_error::ParseError GLES2DecoderImpl::HandleDisableVertexAttribArray( | 620 parse_error::ParseError GLES2DecoderImpl::HandleDisableVertexAttribArray( |
700 uint32 immediate_data_size, const gles2::DisableVertexAttribArray& c) { | 621 uint32 immediate_data_size, const gles2::DisableVertexAttribArray& c) { |
701 GLuint index = static_cast<GLuint>(c.index); | 622 GLuint index = static_cast<GLuint>(c.index); |
702 parse_error::ParseError result = | |
703 ValidateDisableVertexAttribArray(this, immediate_data_size, index); | |
704 if (result != parse_error::kParseNoError) { | |
705 return result; | |
706 } | |
707 glDisableVertexAttribArray(index); | 623 glDisableVertexAttribArray(index); |
708 return parse_error::kParseNoError; | 624 return parse_error::kParseNoError; |
709 } | 625 } |
710 | 626 |
711 parse_error::ParseError GLES2DecoderImpl::HandleDrawArrays( | 627 parse_error::ParseError GLES2DecoderImpl::HandleDrawArrays( |
712 uint32 immediate_data_size, const gles2::DrawArrays& c) { | 628 uint32 immediate_data_size, const gles2::DrawArrays& c) { |
713 GLenum mode = static_cast<GLenum>(c.mode); | 629 GLenum mode = static_cast<GLenum>(c.mode); |
714 GLint first = static_cast<GLint>(c.first); | 630 GLint first = static_cast<GLint>(c.first); |
715 GLsizei count = static_cast<GLsizei>(c.count); | 631 GLsizei count = static_cast<GLsizei>(c.count); |
716 parse_error::ParseError result = | 632 if (!ValidateGLenumDrawMode(mode)) { |
717 ValidateDrawArrays(this, immediate_data_size, mode, first, count); | 633 SetGLError(GL_INVALID_VALUE); |
718 if (result != parse_error::kParseNoError) { | 634 return parse_error::kParseNoError; |
719 return result; | |
720 } | 635 } |
721 glDrawArrays(mode, first, count); | 636 glDrawArrays(mode, first, count); |
722 return parse_error::kParseNoError; | 637 return parse_error::kParseNoError; |
723 } | 638 } |
724 | 639 |
725 parse_error::ParseError GLES2DecoderImpl::HandleEnable( | 640 parse_error::ParseError GLES2DecoderImpl::HandleEnable( |
726 uint32 immediate_data_size, const gles2::Enable& c) { | 641 uint32 immediate_data_size, const gles2::Enable& c) { |
727 GLenum cap = static_cast<GLenum>(c.cap); | 642 GLenum cap = static_cast<GLenum>(c.cap); |
728 parse_error::ParseError result = | 643 if (!ValidateGLenumCapability(cap)) { |
729 ValidateEnable(this, immediate_data_size, cap); | 644 SetGLError(GL_INVALID_VALUE); |
730 if (result != parse_error::kParseNoError) { | 645 return parse_error::kParseNoError; |
731 return result; | |
732 } | 646 } |
733 glEnable(cap); | 647 glEnable(cap); |
734 return parse_error::kParseNoError; | 648 return parse_error::kParseNoError; |
735 } | 649 } |
736 | 650 |
737 parse_error::ParseError GLES2DecoderImpl::HandleEnableVertexAttribArray( | 651 parse_error::ParseError GLES2DecoderImpl::HandleEnableVertexAttribArray( |
738 uint32 immediate_data_size, const gles2::EnableVertexAttribArray& c) { | 652 uint32 immediate_data_size, const gles2::EnableVertexAttribArray& c) { |
739 GLuint index = static_cast<GLuint>(c.index); | 653 GLuint index = static_cast<GLuint>(c.index); |
740 parse_error::ParseError result = | |
741 ValidateEnableVertexAttribArray(this, immediate_data_size, index); | |
742 if (result != parse_error::kParseNoError) { | |
743 return result; | |
744 } | |
745 glEnableVertexAttribArray(index); | 654 glEnableVertexAttribArray(index); |
746 return parse_error::kParseNoError; | 655 return parse_error::kParseNoError; |
747 } | 656 } |
748 | 657 |
749 parse_error::ParseError GLES2DecoderImpl::HandleFinish( | 658 parse_error::ParseError GLES2DecoderImpl::HandleFinish( |
750 uint32 immediate_data_size, const gles2::Finish& c) { | 659 uint32 immediate_data_size, const gles2::Finish& c) { |
751 parse_error::ParseError result = | |
752 ValidateFinish(this, immediate_data_size); | |
753 if (result != parse_error::kParseNoError) { | |
754 return result; | |
755 } | |
756 glFinish(); | 660 glFinish(); |
757 return parse_error::kParseNoError; | 661 return parse_error::kParseNoError; |
758 } | 662 } |
759 | 663 |
760 parse_error::ParseError GLES2DecoderImpl::HandleFlush( | 664 parse_error::ParseError GLES2DecoderImpl::HandleFlush( |
761 uint32 immediate_data_size, const gles2::Flush& c) { | 665 uint32 immediate_data_size, const gles2::Flush& c) { |
762 parse_error::ParseError result = | |
763 ValidateFlush(this, immediate_data_size); | |
764 if (result != parse_error::kParseNoError) { | |
765 return result; | |
766 } | |
767 glFlush(); | 666 glFlush(); |
768 return parse_error::kParseNoError; | 667 return parse_error::kParseNoError; |
769 } | 668 } |
770 | 669 |
771 parse_error::ParseError GLES2DecoderImpl::HandleFramebufferRenderbuffer( | 670 parse_error::ParseError GLES2DecoderImpl::HandleFramebufferRenderbuffer( |
772 uint32 immediate_data_size, const gles2::FramebufferRenderbuffer& c) { | 671 uint32 immediate_data_size, const gles2::FramebufferRenderbuffer& c) { |
773 GLenum target = static_cast<GLenum>(c.target); | 672 GLenum target = static_cast<GLenum>(c.target); |
774 GLenum attachment = static_cast<GLenum>(c.attachment); | 673 GLenum attachment = static_cast<GLenum>(c.attachment); |
775 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); | 674 GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); |
776 GLuint renderbuffer; | 675 GLuint renderbuffer; |
777 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { | 676 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { |
778 SetGLError(GL_INVALID_VALUE); | 677 SetGLError(GL_INVALID_VALUE); |
779 return parse_error::kParseNoError; | 678 return parse_error::kParseNoError; |
780 } | 679 } |
781 parse_error::ParseError result = | 680 if (!ValidateGLenumFrameBufferTarget(target)) { |
782 ValidateFramebufferRenderbuffer( | 681 SetGLError(GL_INVALID_VALUE); |
783 this, immediate_data_size, target, attachment, renderbuffertarget, | 682 return parse_error::kParseNoError; |
784 renderbuffer); | 683 } |
785 if (result != parse_error::kParseNoError) { | 684 if (!ValidateGLenumAttachment(attachment)) { |
786 return result; | 685 SetGLError(GL_INVALID_VALUE); |
| 686 return parse_error::kParseNoError; |
| 687 } |
| 688 if (!ValidateGLenumRenderBufferTarget(renderbuffertarget)) { |
| 689 SetGLError(GL_INVALID_VALUE); |
| 690 return parse_error::kParseNoError; |
787 } | 691 } |
788 glFramebufferRenderbufferEXT( | 692 glFramebufferRenderbufferEXT( |
789 target, attachment, renderbuffertarget, renderbuffer); | 693 target, attachment, renderbuffertarget, renderbuffer); |
790 return parse_error::kParseNoError; | 694 return parse_error::kParseNoError; |
791 } | 695 } |
792 | 696 |
793 parse_error::ParseError GLES2DecoderImpl::HandleFramebufferTexture2D( | 697 parse_error::ParseError GLES2DecoderImpl::HandleFramebufferTexture2D( |
794 uint32 immediate_data_size, const gles2::FramebufferTexture2D& c) { | 698 uint32 immediate_data_size, const gles2::FramebufferTexture2D& c) { |
795 GLenum target = static_cast<GLenum>(c.target); | 699 GLenum target = static_cast<GLenum>(c.target); |
796 GLenum attachment = static_cast<GLenum>(c.attachment); | 700 GLenum attachment = static_cast<GLenum>(c.attachment); |
797 GLenum textarget = static_cast<GLenum>(c.textarget); | 701 GLenum textarget = static_cast<GLenum>(c.textarget); |
798 GLuint texture; | 702 GLuint texture; |
799 if (!id_map_.GetServiceId(c.texture, &texture)) { | 703 if (!id_map_.GetServiceId(c.texture, &texture)) { |
800 SetGLError(GL_INVALID_VALUE); | 704 SetGLError(GL_INVALID_VALUE); |
801 return parse_error::kParseNoError; | 705 return parse_error::kParseNoError; |
802 } | 706 } |
803 GLint level = static_cast<GLint>(c.level); | 707 GLint level = static_cast<GLint>(c.level); |
804 parse_error::ParseError result = | 708 if (!ValidateGLenumFrameBufferTarget(target)) { |
805 ValidateFramebufferTexture2D( | 709 SetGLError(GL_INVALID_VALUE); |
806 this, immediate_data_size, target, attachment, textarget, texture, | 710 return parse_error::kParseNoError; |
807 level); | 711 } |
808 if (result != parse_error::kParseNoError) { | 712 if (!ValidateGLenumAttachment(attachment)) { |
809 return result; | 713 SetGLError(GL_INVALID_VALUE); |
| 714 return parse_error::kParseNoError; |
| 715 } |
| 716 if (!ValidateGLenumTextureTarget(textarget)) { |
| 717 SetGLError(GL_INVALID_VALUE); |
| 718 return parse_error::kParseNoError; |
810 } | 719 } |
811 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); | 720 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); |
812 return parse_error::kParseNoError; | 721 return parse_error::kParseNoError; |
813 } | 722 } |
814 | 723 |
815 parse_error::ParseError GLES2DecoderImpl::HandleFrontFace( | 724 parse_error::ParseError GLES2DecoderImpl::HandleFrontFace( |
816 uint32 immediate_data_size, const gles2::FrontFace& c) { | 725 uint32 immediate_data_size, const gles2::FrontFace& c) { |
817 GLenum mode = static_cast<GLenum>(c.mode); | 726 GLenum mode = static_cast<GLenum>(c.mode); |
818 parse_error::ParseError result = | 727 if (!ValidateGLenumFaceMode(mode)) { |
819 ValidateFrontFace(this, immediate_data_size, mode); | 728 SetGLError(GL_INVALID_VALUE); |
820 if (result != parse_error::kParseNoError) { | 729 return parse_error::kParseNoError; |
821 return result; | |
822 } | 730 } |
823 glFrontFace(mode); | 731 glFrontFace(mode); |
824 return parse_error::kParseNoError; | 732 return parse_error::kParseNoError; |
825 } | 733 } |
826 | 734 |
827 parse_error::ParseError GLES2DecoderImpl::HandleGenBuffers( | 735 parse_error::ParseError GLES2DecoderImpl::HandleGenBuffers( |
828 uint32 immediate_data_size, const gles2::GenBuffers& c) { | 736 uint32 immediate_data_size, const gles2::GenBuffers& c) { |
829 GLsizei n = static_cast<GLsizei>(c.n); | 737 GLsizei n = static_cast<GLsizei>(c.n); |
830 GLuint* buffers = GetSharedMemoryAs<GLuint*>( | 738 GLuint* buffers = GetSharedMemoryAs<GLuint*>( |
831 c.buffers_shm_id, c.buffers_shm_offset, 0 /* TODO(gman): size */); | 739 c.buffers_shm_id, c.buffers_shm_offset, 0 /* TODO(gman): size */); |
832 parse_error::ParseError result = | 740 if (buffers == NULL) { |
833 ValidateGenBuffers(this, immediate_data_size, n, buffers); | 741 return parse_error::kParseOutOfBounds; |
834 if (result != parse_error::kParseNoError) { | 742 } |
835 return result; | 743 if (buffers == NULL) { |
| 744 return parse_error::kParseOutOfBounds; |
836 } | 745 } |
837 GenGLObjects<GLGenBuffersHelper>(n, buffers); | 746 GenGLObjects<GLGenBuffersHelper>(n, buffers); |
838 return parse_error::kParseNoError; | 747 return parse_error::kParseNoError; |
839 } | 748 } |
840 | 749 |
841 parse_error::ParseError GLES2DecoderImpl::HandleGenBuffersImmediate( | 750 parse_error::ParseError GLES2DecoderImpl::HandleGenBuffersImmediate( |
842 uint32 immediate_data_size, const gles2::GenBuffersImmediate& c) { | 751 uint32 immediate_data_size, const gles2::GenBuffersImmediate& c) { |
843 GLsizei n = static_cast<GLsizei>(c.n); | 752 GLsizei n = static_cast<GLsizei>(c.n); |
844 GLuint* buffers = GetImmediateDataAs<GLuint*>(c); | 753 GLuint* buffers = GetImmediateDataAs<GLuint*>(c); |
845 parse_error::ParseError result = | 754 if (buffers == NULL) { |
846 ValidateGenBuffersImmediate(this, immediate_data_size, n, buffers); | 755 return parse_error::kParseOutOfBounds; |
847 if (result != parse_error::kParseNoError) { | 756 } |
848 return result; | 757 if (buffers == NULL) { |
| 758 return parse_error::kParseOutOfBounds; |
849 } | 759 } |
850 GenGLObjects<GLGenBuffersHelper>(n, buffers); | 760 GenGLObjects<GLGenBuffersHelper>(n, buffers); |
851 return parse_error::kParseNoError; | 761 return parse_error::kParseNoError; |
852 } | 762 } |
853 | 763 |
854 parse_error::ParseError GLES2DecoderImpl::HandleGenerateMipmap( | 764 parse_error::ParseError GLES2DecoderImpl::HandleGenerateMipmap( |
855 uint32 immediate_data_size, const gles2::GenerateMipmap& c) { | 765 uint32 immediate_data_size, const gles2::GenerateMipmap& c) { |
856 GLenum target = static_cast<GLenum>(c.target); | 766 GLenum target = static_cast<GLenum>(c.target); |
857 parse_error::ParseError result = | 767 if (!ValidateGLenumTextureBindTarget(target)) { |
858 ValidateGenerateMipmap(this, immediate_data_size, target); | 768 SetGLError(GL_INVALID_VALUE); |
859 if (result != parse_error::kParseNoError) { | 769 return parse_error::kParseNoError; |
860 return result; | |
861 } | 770 } |
862 glGenerateMipmapEXT(target); | 771 glGenerateMipmapEXT(target); |
863 return parse_error::kParseNoError; | 772 return parse_error::kParseNoError; |
864 } | 773 } |
865 | 774 |
866 parse_error::ParseError GLES2DecoderImpl::HandleGenFramebuffers( | 775 parse_error::ParseError GLES2DecoderImpl::HandleGenFramebuffers( |
867 uint32 immediate_data_size, const gles2::GenFramebuffers& c) { | 776 uint32 immediate_data_size, const gles2::GenFramebuffers& c) { |
868 GLsizei n = static_cast<GLsizei>(c.n); | 777 GLsizei n = static_cast<GLsizei>(c.n); |
869 GLuint* framebuffers = GetSharedMemoryAs<GLuint*>( | 778 GLuint* framebuffers = GetSharedMemoryAs<GLuint*>( |
870 c.framebuffers_shm_id, c.framebuffers_shm_offset, 0 /* TODO( | 779 c.framebuffers_shm_id, c.framebuffers_shm_offset, 0 /* TODO( |
871 gman): size */); | 780 gman): size */); |
872 parse_error::ParseError result = | 781 if (framebuffers == NULL) { |
873 ValidateGenFramebuffers(this, immediate_data_size, n, framebuffers); | 782 return parse_error::kParseOutOfBounds; |
874 if (result != parse_error::kParseNoError) { | 783 } |
875 return result; | 784 if (framebuffers == NULL) { |
| 785 return parse_error::kParseOutOfBounds; |
876 } | 786 } |
877 GenGLObjects<GLGenFramebuffersHelper>(n, framebuffers); | 787 GenGLObjects<GLGenFramebuffersHelper>(n, framebuffers); |
878 return parse_error::kParseNoError; | 788 return parse_error::kParseNoError; |
879 } | 789 } |
880 | 790 |
881 parse_error::ParseError GLES2DecoderImpl::HandleGenFramebuffersImmediate( | 791 parse_error::ParseError GLES2DecoderImpl::HandleGenFramebuffersImmediate( |
882 uint32 immediate_data_size, const gles2::GenFramebuffersImmediate& c) { | 792 uint32 immediate_data_size, const gles2::GenFramebuffersImmediate& c) { |
883 GLsizei n = static_cast<GLsizei>(c.n); | 793 GLsizei n = static_cast<GLsizei>(c.n); |
884 GLuint* framebuffers = GetImmediateDataAs<GLuint*>(c); | 794 GLuint* framebuffers = GetImmediateDataAs<GLuint*>(c); |
885 parse_error::ParseError result = | 795 if (framebuffers == NULL) { |
886 ValidateGenFramebuffersImmediate( | 796 return parse_error::kParseOutOfBounds; |
887 this, immediate_data_size, n, framebuffers); | 797 } |
888 if (result != parse_error::kParseNoError) { | 798 if (framebuffers == NULL) { |
889 return result; | 799 return parse_error::kParseOutOfBounds; |
890 } | 800 } |
891 GenGLObjects<GLGenFramebuffersHelper>(n, framebuffers); | 801 GenGLObjects<GLGenFramebuffersHelper>(n, framebuffers); |
892 return parse_error::kParseNoError; | 802 return parse_error::kParseNoError; |
893 } | 803 } |
894 | 804 |
895 parse_error::ParseError GLES2DecoderImpl::HandleGenRenderbuffers( | 805 parse_error::ParseError GLES2DecoderImpl::HandleGenRenderbuffers( |
896 uint32 immediate_data_size, const gles2::GenRenderbuffers& c) { | 806 uint32 immediate_data_size, const gles2::GenRenderbuffers& c) { |
897 GLsizei n = static_cast<GLsizei>(c.n); | 807 GLsizei n = static_cast<GLsizei>(c.n); |
898 GLuint* renderbuffers = GetSharedMemoryAs<GLuint*>( | 808 GLuint* renderbuffers = GetSharedMemoryAs<GLuint*>( |
899 c.renderbuffers_shm_id, c.renderbuffers_shm_offset, 0 /* TODO( | 809 c.renderbuffers_shm_id, c.renderbuffers_shm_offset, 0 /* TODO( |
900 gman): size */); | 810 gman): size */); |
901 parse_error::ParseError result = | 811 if (renderbuffers == NULL) { |
902 ValidateGenRenderbuffers(this, immediate_data_size, n, renderbuffers); | 812 return parse_error::kParseOutOfBounds; |
903 if (result != parse_error::kParseNoError) { | 813 } |
904 return result; | 814 if (renderbuffers == NULL) { |
| 815 return parse_error::kParseOutOfBounds; |
905 } | 816 } |
906 GenGLObjects<GLGenRenderbuffersHelper>(n, renderbuffers); | 817 GenGLObjects<GLGenRenderbuffersHelper>(n, renderbuffers); |
907 return parse_error::kParseNoError; | 818 return parse_error::kParseNoError; |
908 } | 819 } |
909 | 820 |
910 parse_error::ParseError GLES2DecoderImpl::HandleGenRenderbuffersImmediate( | 821 parse_error::ParseError GLES2DecoderImpl::HandleGenRenderbuffersImmediate( |
911 uint32 immediate_data_size, const gles2::GenRenderbuffersImmediate& c) { | 822 uint32 immediate_data_size, const gles2::GenRenderbuffersImmediate& c) { |
912 GLsizei n = static_cast<GLsizei>(c.n); | 823 GLsizei n = static_cast<GLsizei>(c.n); |
913 GLuint* renderbuffers = GetImmediateDataAs<GLuint*>(c); | 824 GLuint* renderbuffers = GetImmediateDataAs<GLuint*>(c); |
914 parse_error::ParseError result = | 825 if (renderbuffers == NULL) { |
915 ValidateGenRenderbuffersImmediate( | 826 return parse_error::kParseOutOfBounds; |
916 this, immediate_data_size, n, renderbuffers); | 827 } |
917 if (result != parse_error::kParseNoError) { | 828 if (renderbuffers == NULL) { |
918 return result; | 829 return parse_error::kParseOutOfBounds; |
919 } | 830 } |
920 GenGLObjects<GLGenRenderbuffersHelper>(n, renderbuffers); | 831 GenGLObjects<GLGenRenderbuffersHelper>(n, renderbuffers); |
921 return parse_error::kParseNoError; | 832 return parse_error::kParseNoError; |
922 } | 833 } |
923 | 834 |
924 parse_error::ParseError GLES2DecoderImpl::HandleGenTextures( | 835 parse_error::ParseError GLES2DecoderImpl::HandleGenTextures( |
925 uint32 immediate_data_size, const gles2::GenTextures& c) { | 836 uint32 immediate_data_size, const gles2::GenTextures& c) { |
926 GLsizei n = static_cast<GLsizei>(c.n); | 837 GLsizei n = static_cast<GLsizei>(c.n); |
927 GLuint* textures = GetSharedMemoryAs<GLuint*>( | 838 GLuint* textures = GetSharedMemoryAs<GLuint*>( |
928 c.textures_shm_id, c.textures_shm_offset, 0 /* TODO(gman): size */); | 839 c.textures_shm_id, c.textures_shm_offset, 0 /* TODO(gman): size */); |
929 parse_error::ParseError result = | 840 if (textures == NULL) { |
930 ValidateGenTextures(this, immediate_data_size, n, textures); | 841 return parse_error::kParseOutOfBounds; |
931 if (result != parse_error::kParseNoError) { | 842 } |
932 return result; | 843 if (textures == NULL) { |
| 844 return parse_error::kParseOutOfBounds; |
933 } | 845 } |
934 GenGLObjects<GLGenTexturesHelper>(n, textures); | 846 GenGLObjects<GLGenTexturesHelper>(n, textures); |
935 return parse_error::kParseNoError; | 847 return parse_error::kParseNoError; |
936 } | 848 } |
937 | 849 |
938 parse_error::ParseError GLES2DecoderImpl::HandleGenTexturesImmediate( | 850 parse_error::ParseError GLES2DecoderImpl::HandleGenTexturesImmediate( |
939 uint32 immediate_data_size, const gles2::GenTexturesImmediate& c) { | 851 uint32 immediate_data_size, const gles2::GenTexturesImmediate& c) { |
940 GLsizei n = static_cast<GLsizei>(c.n); | 852 GLsizei n = static_cast<GLsizei>(c.n); |
941 GLuint* textures = GetImmediateDataAs<GLuint*>(c); | 853 GLuint* textures = GetImmediateDataAs<GLuint*>(c); |
942 parse_error::ParseError result = | 854 if (textures == NULL) { |
943 ValidateGenTexturesImmediate(this, immediate_data_size, n, textures); | 855 return parse_error::kParseOutOfBounds; |
944 if (result != parse_error::kParseNoError) { | 856 } |
945 return result; | 857 if (textures == NULL) { |
| 858 return parse_error::kParseOutOfBounds; |
946 } | 859 } |
947 GenGLObjects<GLGenTexturesHelper>(n, textures); | 860 GenGLObjects<GLGenTexturesHelper>(n, textures); |
948 return parse_error::kParseNoError; | 861 return parse_error::kParseNoError; |
949 } | 862 } |
950 | 863 |
951 parse_error::ParseError GLES2DecoderImpl::HandleGetBooleanv( | 864 parse_error::ParseError GLES2DecoderImpl::HandleGetBooleanv( |
952 uint32 immediate_data_size, const gles2::GetBooleanv& c) { | 865 uint32 immediate_data_size, const gles2::GetBooleanv& c) { |
953 GLenum pname = static_cast<GLenum>(c.pname); | 866 GLenum pname = static_cast<GLenum>(c.pname); |
954 GLboolean* params; | 867 GLboolean* params; |
955 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 868 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
956 uint32 params_size = num_values * sizeof(*params); | 869 uint32 params_size = num_values * sizeof(*params); |
957 params = GetSharedMemoryAs<GLboolean*>( | 870 params = GetSharedMemoryAs<GLboolean*>( |
958 c.params_shm_id, c.params_shm_offset, params_size); | 871 c.params_shm_id, c.params_shm_offset, params_size); |
959 parse_error::ParseError result = | 872 if (params == NULL) { |
960 ValidateGetBooleanv(this, immediate_data_size, pname, params); | 873 return parse_error::kParseOutOfBounds; |
961 if (result != parse_error::kParseNoError) { | |
962 return result; | |
963 } | 874 } |
964 glGetBooleanv(pname, params); | 875 glGetBooleanv(pname, params); |
965 return parse_error::kParseNoError; | 876 return parse_error::kParseNoError; |
966 } | 877 } |
967 | 878 |
968 parse_error::ParseError GLES2DecoderImpl::HandleGetBufferParameteriv( | 879 parse_error::ParseError GLES2DecoderImpl::HandleGetBufferParameteriv( |
969 uint32 immediate_data_size, const gles2::GetBufferParameteriv& c) { | 880 uint32 immediate_data_size, const gles2::GetBufferParameteriv& c) { |
970 GLenum target = static_cast<GLenum>(c.target); | 881 GLenum target = static_cast<GLenum>(c.target); |
971 GLenum pname = static_cast<GLenum>(c.pname); | 882 GLenum pname = static_cast<GLenum>(c.pname); |
972 GLint* params; | 883 GLint* params; |
973 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 884 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
974 uint32 params_size = num_values * sizeof(*params); | 885 uint32 params_size = num_values * sizeof(*params); |
975 params = GetSharedMemoryAs<GLint*>( | 886 params = GetSharedMemoryAs<GLint*>( |
976 c.params_shm_id, c.params_shm_offset, params_size); | 887 c.params_shm_id, c.params_shm_offset, params_size); |
977 parse_error::ParseError result = | 888 if (!ValidateGLenumBufferTarget(target)) { |
978 ValidateGetBufferParameteriv( | 889 SetGLError(GL_INVALID_VALUE); |
979 this, immediate_data_size, target, pname, params); | 890 return parse_error::kParseNoError; |
980 if (result != parse_error::kParseNoError) { | 891 } |
981 return result; | 892 if (!ValidateGLenumBufferParameter(pname)) { |
| 893 SetGLError(GL_INVALID_VALUE); |
| 894 return parse_error::kParseNoError; |
| 895 } |
| 896 if (params == NULL) { |
| 897 return parse_error::kParseOutOfBounds; |
982 } | 898 } |
983 glGetBufferParameteriv(target, pname, params); | 899 glGetBufferParameteriv(target, pname, params); |
984 return parse_error::kParseNoError; | 900 return parse_error::kParseNoError; |
985 } | 901 } |
986 | 902 |
987 parse_error::ParseError GLES2DecoderImpl::HandleGetError( | 903 parse_error::ParseError GLES2DecoderImpl::HandleGetError( |
988 uint32 immediate_data_size, const gles2::GetError& c) { | 904 uint32 immediate_data_size, const gles2::GetError& c) { |
989 GLenum* result_dst = GetSharedMemoryAs<GLenum*>( | 905 GLenum* result_dst = GetSharedMemoryAs<GLenum*>( |
990 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 906 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
991 parse_error::ParseError result = | |
992 ValidateGetError(this, immediate_data_size); | |
993 if (result != parse_error::kParseNoError) { | |
994 return result; | |
995 } | |
996 *result_dst = GetGLError(); | 907 *result_dst = GetGLError(); |
997 return parse_error::kParseNoError; | 908 return parse_error::kParseNoError; |
998 } | 909 } |
999 | 910 |
1000 parse_error::ParseError GLES2DecoderImpl::HandleGetFloatv( | 911 parse_error::ParseError GLES2DecoderImpl::HandleGetFloatv( |
1001 uint32 immediate_data_size, const gles2::GetFloatv& c) { | 912 uint32 immediate_data_size, const gles2::GetFloatv& c) { |
1002 GLenum pname = static_cast<GLenum>(c.pname); | 913 GLenum pname = static_cast<GLenum>(c.pname); |
1003 GLfloat* params; | 914 GLfloat* params; |
1004 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 915 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1005 uint32 params_size = num_values * sizeof(*params); | 916 uint32 params_size = num_values * sizeof(*params); |
1006 params = GetSharedMemoryAs<GLfloat*>( | 917 params = GetSharedMemoryAs<GLfloat*>( |
1007 c.params_shm_id, c.params_shm_offset, params_size); | 918 c.params_shm_id, c.params_shm_offset, params_size); |
1008 parse_error::ParseError result = | 919 if (params == NULL) { |
1009 ValidateGetFloatv(this, immediate_data_size, pname, params); | 920 return parse_error::kParseOutOfBounds; |
1010 if (result != parse_error::kParseNoError) { | |
1011 return result; | |
1012 } | 921 } |
1013 glGetFloatv(pname, params); | 922 glGetFloatv(pname, params); |
1014 return parse_error::kParseNoError; | 923 return parse_error::kParseNoError; |
1015 } | 924 } |
1016 | 925 |
1017 parse_error::ParseError GLES2DecoderImpl::HandleGetFramebufferAttachmentParamete
riv( | 926 parse_error::ParseError GLES2DecoderImpl::HandleGetFramebufferAttachmentParamete
riv( |
1018 | 927 |
1019 uint32 immediate_data_size, | 928 uint32 immediate_data_size, |
1020 const gles2::GetFramebufferAttachmentParameteriv& c) { | 929 const gles2::GetFramebufferAttachmentParameteriv& c) { |
1021 GLenum target = static_cast<GLenum>(c.target); | 930 GLenum target = static_cast<GLenum>(c.target); |
1022 GLenum attachment = static_cast<GLenum>(c.attachment); | 931 GLenum attachment = static_cast<GLenum>(c.attachment); |
1023 GLenum pname = static_cast<GLenum>(c.pname); | 932 GLenum pname = static_cast<GLenum>(c.pname); |
1024 GLint* params; | 933 GLint* params; |
1025 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 934 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1026 uint32 params_size = num_values * sizeof(*params); | 935 uint32 params_size = num_values * sizeof(*params); |
1027 params = GetSharedMemoryAs<GLint*>( | 936 params = GetSharedMemoryAs<GLint*>( |
1028 c.params_shm_id, c.params_shm_offset, params_size); | 937 c.params_shm_id, c.params_shm_offset, params_size); |
1029 parse_error::ParseError result = | 938 if (!ValidateGLenumFrameBufferTarget(target)) { |
1030 ValidateGetFramebufferAttachmentParameteriv( | 939 SetGLError(GL_INVALID_VALUE); |
1031 this, immediate_data_size, target, attachment, pname, params); | 940 return parse_error::kParseNoError; |
1032 if (result != parse_error::kParseNoError) { | 941 } |
1033 return result; | 942 if (!ValidateGLenumAttachment(attachment)) { |
| 943 SetGLError(GL_INVALID_VALUE); |
| 944 return parse_error::kParseNoError; |
| 945 } |
| 946 if (!ValidateGLenumFrameBufferParameter(pname)) { |
| 947 SetGLError(GL_INVALID_VALUE); |
| 948 return parse_error::kParseNoError; |
| 949 } |
| 950 if (params == NULL) { |
| 951 return parse_error::kParseOutOfBounds; |
1034 } | 952 } |
1035 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); | 953 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); |
1036 return parse_error::kParseNoError; | 954 return parse_error::kParseNoError; |
1037 } | 955 } |
1038 | 956 |
1039 parse_error::ParseError GLES2DecoderImpl::HandleGetIntegerv( | 957 parse_error::ParseError GLES2DecoderImpl::HandleGetIntegerv( |
1040 uint32 immediate_data_size, const gles2::GetIntegerv& c) { | 958 uint32 immediate_data_size, const gles2::GetIntegerv& c) { |
1041 GLenum pname = static_cast<GLenum>(c.pname); | 959 GLenum pname = static_cast<GLenum>(c.pname); |
1042 GLint* params; | 960 GLint* params; |
1043 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 961 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1044 uint32 params_size = num_values * sizeof(*params); | 962 uint32 params_size = num_values * sizeof(*params); |
1045 params = GetSharedMemoryAs<GLint*>( | 963 params = GetSharedMemoryAs<GLint*>( |
1046 c.params_shm_id, c.params_shm_offset, params_size); | 964 c.params_shm_id, c.params_shm_offset, params_size); |
1047 parse_error::ParseError result = | 965 if (params == NULL) { |
1048 ValidateGetIntegerv(this, immediate_data_size, pname, params); | 966 return parse_error::kParseOutOfBounds; |
1049 if (result != parse_error::kParseNoError) { | |
1050 return result; | |
1051 } | 967 } |
1052 glGetIntegerv(pname, params); | 968 glGetIntegerv(pname, params); |
1053 return parse_error::kParseNoError; | 969 return parse_error::kParseNoError; |
1054 } | 970 } |
1055 | 971 |
1056 parse_error::ParseError GLES2DecoderImpl::HandleGetProgramiv( | 972 parse_error::ParseError GLES2DecoderImpl::HandleGetProgramiv( |
1057 uint32 immediate_data_size, const gles2::GetProgramiv& c) { | 973 uint32 immediate_data_size, const gles2::GetProgramiv& c) { |
1058 GLuint program; | 974 GLuint program; |
1059 if (!id_map_.GetServiceId(c.program, &program)) { | 975 if (!id_map_.GetServiceId(c.program, &program)) { |
1060 SetGLError(GL_INVALID_VALUE); | 976 SetGLError(GL_INVALID_VALUE); |
1061 return parse_error::kParseNoError; | 977 return parse_error::kParseNoError; |
1062 } | 978 } |
1063 GLenum pname = static_cast<GLenum>(c.pname); | 979 GLenum pname = static_cast<GLenum>(c.pname); |
1064 GLint* params; | 980 GLint* params; |
1065 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 981 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1066 uint32 params_size = num_values * sizeof(*params); | 982 uint32 params_size = num_values * sizeof(*params); |
1067 params = GetSharedMemoryAs<GLint*>( | 983 params = GetSharedMemoryAs<GLint*>( |
1068 c.params_shm_id, c.params_shm_offset, params_size); | 984 c.params_shm_id, c.params_shm_offset, params_size); |
1069 parse_error::ParseError result = | 985 if (!ValidateGLenumProgramParameter(pname)) { |
1070 ValidateGetProgramiv(this, immediate_data_size, program, pname, params); | 986 SetGLError(GL_INVALID_VALUE); |
1071 if (result != parse_error::kParseNoError) { | 987 return parse_error::kParseNoError; |
1072 return result; | 988 } |
| 989 if (params == NULL) { |
| 990 return parse_error::kParseOutOfBounds; |
1073 } | 991 } |
1074 glGetProgramiv(program, pname, params); | 992 glGetProgramiv(program, pname, params); |
1075 return parse_error::kParseNoError; | 993 return parse_error::kParseNoError; |
1076 } | 994 } |
1077 | 995 |
1078 parse_error::ParseError GLES2DecoderImpl::HandleGetProgramInfoLog( | 996 parse_error::ParseError GLES2DecoderImpl::HandleGetProgramInfoLog( |
1079 uint32 immediate_data_size, const gles2::GetProgramInfoLog& c) { | 997 uint32 immediate_data_size, const gles2::GetProgramInfoLog& c) { |
1080 GLuint program; | 998 GLuint program; |
1081 if (!id_map_.GetServiceId(c.program, &program)) { | 999 if (!id_map_.GetServiceId(c.program, &program)) { |
1082 SetGLError(GL_INVALID_VALUE); | 1000 SetGLError(GL_INVALID_VALUE); |
1083 return parse_error::kParseNoError; | 1001 return parse_error::kParseNoError; |
1084 } | 1002 } |
1085 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); | 1003 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); |
1086 GLsizei* length = GetSharedMemoryAs<GLsizei*>( | 1004 GLsizei* length = GetSharedMemoryAs<GLsizei*>( |
1087 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); | 1005 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); |
1088 char* infolog = GetSharedMemoryAs<char*>( | 1006 char* infolog = GetSharedMemoryAs<char*>( |
1089 c.infolog_shm_id, c.infolog_shm_offset, 0 /* TODO(gman): size */); | 1007 c.infolog_shm_id, c.infolog_shm_offset, 0 /* TODO(gman): size */); |
1090 parse_error::ParseError result = | 1008 if (length == NULL) { |
1091 ValidateGetProgramInfoLog( | 1009 return parse_error::kParseOutOfBounds; |
1092 this, immediate_data_size, program, bufsize, length, infolog); | 1010 } |
1093 if (result != parse_error::kParseNoError) { | 1011 if (infolog == NULL) { |
1094 return result; | 1012 return parse_error::kParseOutOfBounds; |
1095 } | 1013 } |
1096 glGetProgramInfoLog(program, bufsize, length, infolog); | 1014 glGetProgramInfoLog(program, bufsize, length, infolog); |
1097 return parse_error::kParseNoError; | 1015 return parse_error::kParseNoError; |
1098 } | 1016 } |
1099 | 1017 |
1100 parse_error::ParseError GLES2DecoderImpl::HandleGetRenderbufferParameteriv( | 1018 parse_error::ParseError GLES2DecoderImpl::HandleGetRenderbufferParameteriv( |
1101 uint32 immediate_data_size, const gles2::GetRenderbufferParameteriv& c) { | 1019 uint32 immediate_data_size, const gles2::GetRenderbufferParameteriv& c) { |
1102 GLenum target = static_cast<GLenum>(c.target); | 1020 GLenum target = static_cast<GLenum>(c.target); |
1103 GLenum pname = static_cast<GLenum>(c.pname); | 1021 GLenum pname = static_cast<GLenum>(c.pname); |
1104 GLint* params; | 1022 GLint* params; |
1105 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1023 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1106 uint32 params_size = num_values * sizeof(*params); | 1024 uint32 params_size = num_values * sizeof(*params); |
1107 params = GetSharedMemoryAs<GLint*>( | 1025 params = GetSharedMemoryAs<GLint*>( |
1108 c.params_shm_id, c.params_shm_offset, params_size); | 1026 c.params_shm_id, c.params_shm_offset, params_size); |
1109 parse_error::ParseError result = | 1027 if (!ValidateGLenumRenderBufferTarget(target)) { |
1110 ValidateGetRenderbufferParameteriv( | 1028 SetGLError(GL_INVALID_VALUE); |
1111 this, immediate_data_size, target, pname, params); | 1029 return parse_error::kParseNoError; |
1112 if (result != parse_error::kParseNoError) { | 1030 } |
1113 return result; | 1031 if (!ValidateGLenumRenderBufferParameter(pname)) { |
| 1032 SetGLError(GL_INVALID_VALUE); |
| 1033 return parse_error::kParseNoError; |
| 1034 } |
| 1035 if (params == NULL) { |
| 1036 return parse_error::kParseOutOfBounds; |
1114 } | 1037 } |
1115 glGetRenderbufferParameterivEXT(target, pname, params); | 1038 glGetRenderbufferParameterivEXT(target, pname, params); |
1116 return parse_error::kParseNoError; | 1039 return parse_error::kParseNoError; |
1117 } | 1040 } |
1118 | 1041 |
1119 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderiv( | 1042 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderiv( |
1120 uint32 immediate_data_size, const gles2::GetShaderiv& c) { | 1043 uint32 immediate_data_size, const gles2::GetShaderiv& c) { |
1121 GLuint shader; | 1044 GLuint shader; |
1122 if (!id_map_.GetServiceId(c.shader, &shader)) { | 1045 if (!id_map_.GetServiceId(c.shader, &shader)) { |
1123 SetGLError(GL_INVALID_VALUE); | 1046 SetGLError(GL_INVALID_VALUE); |
1124 return parse_error::kParseNoError; | 1047 return parse_error::kParseNoError; |
1125 } | 1048 } |
1126 GLenum pname = static_cast<GLenum>(c.pname); | 1049 GLenum pname = static_cast<GLenum>(c.pname); |
1127 GLint* params; | 1050 GLint* params; |
1128 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1051 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1129 uint32 params_size = num_values * sizeof(*params); | 1052 uint32 params_size = num_values * sizeof(*params); |
1130 params = GetSharedMemoryAs<GLint*>( | 1053 params = GetSharedMemoryAs<GLint*>( |
1131 c.params_shm_id, c.params_shm_offset, params_size); | 1054 c.params_shm_id, c.params_shm_offset, params_size); |
1132 parse_error::ParseError result = | 1055 if (!ValidateGLenumShaderParameter(pname)) { |
1133 ValidateGetShaderiv(this, immediate_data_size, shader, pname, params); | 1056 SetGLError(GL_INVALID_VALUE); |
1134 if (result != parse_error::kParseNoError) { | 1057 return parse_error::kParseNoError; |
1135 return result; | 1058 } |
| 1059 if (params == NULL) { |
| 1060 return parse_error::kParseOutOfBounds; |
1136 } | 1061 } |
1137 glGetShaderiv(shader, pname, params); | 1062 glGetShaderiv(shader, pname, params); |
1138 return parse_error::kParseNoError; | 1063 return parse_error::kParseNoError; |
1139 } | 1064 } |
1140 | 1065 |
1141 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderInfoLog( | 1066 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderInfoLog( |
1142 uint32 immediate_data_size, const gles2::GetShaderInfoLog& c) { | 1067 uint32 immediate_data_size, const gles2::GetShaderInfoLog& c) { |
1143 GLuint shader; | 1068 GLuint shader; |
1144 if (!id_map_.GetServiceId(c.shader, &shader)) { | 1069 if (!id_map_.GetServiceId(c.shader, &shader)) { |
1145 SetGLError(GL_INVALID_VALUE); | 1070 SetGLError(GL_INVALID_VALUE); |
1146 return parse_error::kParseNoError; | 1071 return parse_error::kParseNoError; |
1147 } | 1072 } |
1148 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); | 1073 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); |
1149 GLsizei* length = GetSharedMemoryAs<GLsizei*>( | 1074 GLsizei* length = GetSharedMemoryAs<GLsizei*>( |
1150 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); | 1075 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); |
1151 char* infolog = GetSharedMemoryAs<char*>( | 1076 char* infolog = GetSharedMemoryAs<char*>( |
1152 c.infolog_shm_id, c.infolog_shm_offset, 0 /* TODO(gman): size */); | 1077 c.infolog_shm_id, c.infolog_shm_offset, 0 /* TODO(gman): size */); |
1153 parse_error::ParseError result = | 1078 if (length == NULL) { |
1154 ValidateGetShaderInfoLog( | 1079 return parse_error::kParseOutOfBounds; |
1155 this, immediate_data_size, shader, bufsize, length, infolog); | 1080 } |
1156 if (result != parse_error::kParseNoError) { | 1081 if (infolog == NULL) { |
1157 return result; | 1082 return parse_error::kParseOutOfBounds; |
1158 } | 1083 } |
1159 glGetShaderInfoLog(shader, bufsize, length, infolog); | 1084 glGetShaderInfoLog(shader, bufsize, length, infolog); |
1160 return parse_error::kParseNoError; | 1085 return parse_error::kParseNoError; |
1161 } | 1086 } |
1162 | 1087 |
1163 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderSource( | 1088 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderSource( |
1164 uint32 immediate_data_size, const gles2::GetShaderSource& c) { | 1089 uint32 immediate_data_size, const gles2::GetShaderSource& c) { |
1165 GLuint shader; | 1090 GLuint shader; |
1166 if (!id_map_.GetServiceId(c.shader, &shader)) { | 1091 if (!id_map_.GetServiceId(c.shader, &shader)) { |
1167 SetGLError(GL_INVALID_VALUE); | 1092 SetGLError(GL_INVALID_VALUE); |
1168 return parse_error::kParseNoError; | 1093 return parse_error::kParseNoError; |
1169 } | 1094 } |
1170 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); | 1095 GLsizei bufsize = static_cast<GLsizei>(c.bufsize); |
1171 GLsizei* length = GetSharedMemoryAs<GLsizei*>( | 1096 GLsizei* length = GetSharedMemoryAs<GLsizei*>( |
1172 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); | 1097 c.length_shm_id, c.length_shm_offset, 0 /* TODO(gman): size */); |
1173 char* source = GetSharedMemoryAs<char*>( | 1098 char* source = GetSharedMemoryAs<char*>( |
1174 c.source_shm_id, c.source_shm_offset, 0 /* TODO(gman): size */); | 1099 c.source_shm_id, c.source_shm_offset, 0 /* TODO(gman): size */); |
1175 parse_error::ParseError result = | 1100 if (length == NULL) { |
1176 ValidateGetShaderSource( | 1101 return parse_error::kParseOutOfBounds; |
1177 this, immediate_data_size, shader, bufsize, length, source); | 1102 } |
1178 if (result != parse_error::kParseNoError) { | 1103 if (source == NULL) { |
1179 return result; | 1104 return parse_error::kParseOutOfBounds; |
1180 } | 1105 } |
1181 glGetShaderSource(shader, bufsize, length, source); | 1106 glGetShaderSource(shader, bufsize, length, source); |
1182 return parse_error::kParseNoError; | 1107 return parse_error::kParseNoError; |
1183 } | 1108 } |
1184 | 1109 |
1185 parse_error::ParseError GLES2DecoderImpl::HandleGetString( | 1110 parse_error::ParseError GLES2DecoderImpl::HandleGetString( |
1186 uint32 immediate_data_size, const gles2::GetString& c) { | 1111 uint32 immediate_data_size, const gles2::GetString& c) { |
1187 GLenum name = static_cast<GLenum>(c.name); | 1112 GLenum name = static_cast<GLenum>(c.name); |
1188 parse_error::ParseError result = | 1113 if (!ValidateGLenumStringType(name)) { |
1189 ValidateGetString(this, immediate_data_size, name); | 1114 SetGLError(GL_INVALID_VALUE); |
1190 if (result != parse_error::kParseNoError) { | 1115 return parse_error::kParseNoError; |
1191 return result; | |
1192 } | 1116 } |
1193 glGetString(name); | 1117 glGetString(name); |
1194 return parse_error::kParseNoError; | 1118 return parse_error::kParseNoError; |
1195 } | 1119 } |
1196 | 1120 |
1197 parse_error::ParseError GLES2DecoderImpl::HandleGetTexParameterfv( | 1121 parse_error::ParseError GLES2DecoderImpl::HandleGetTexParameterfv( |
1198 uint32 immediate_data_size, const gles2::GetTexParameterfv& c) { | 1122 uint32 immediate_data_size, const gles2::GetTexParameterfv& c) { |
1199 GLenum target = static_cast<GLenum>(c.target); | 1123 GLenum target = static_cast<GLenum>(c.target); |
1200 GLenum pname = static_cast<GLenum>(c.pname); | 1124 GLenum pname = static_cast<GLenum>(c.pname); |
1201 GLfloat* params; | 1125 GLfloat* params; |
1202 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1126 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1203 uint32 params_size = num_values * sizeof(*params); | 1127 uint32 params_size = num_values * sizeof(*params); |
1204 params = GetSharedMemoryAs<GLfloat*>( | 1128 params = GetSharedMemoryAs<GLfloat*>( |
1205 c.params_shm_id, c.params_shm_offset, params_size); | 1129 c.params_shm_id, c.params_shm_offset, params_size); |
1206 parse_error::ParseError result = | 1130 if (!ValidateGLenumTextureTarget(target)) { |
1207 ValidateGetTexParameterfv( | 1131 SetGLError(GL_INVALID_VALUE); |
1208 this, immediate_data_size, target, pname, params); | 1132 return parse_error::kParseNoError; |
1209 if (result != parse_error::kParseNoError) { | 1133 } |
1210 return result; | 1134 if (!ValidateGLenumTextureParameter(pname)) { |
| 1135 SetGLError(GL_INVALID_VALUE); |
| 1136 return parse_error::kParseNoError; |
| 1137 } |
| 1138 if (params == NULL) { |
| 1139 return parse_error::kParseOutOfBounds; |
1211 } | 1140 } |
1212 glGetTexParameterfv(target, pname, params); | 1141 glGetTexParameterfv(target, pname, params); |
1213 return parse_error::kParseNoError; | 1142 return parse_error::kParseNoError; |
1214 } | 1143 } |
1215 | 1144 |
1216 parse_error::ParseError GLES2DecoderImpl::HandleGetTexParameteriv( | 1145 parse_error::ParseError GLES2DecoderImpl::HandleGetTexParameteriv( |
1217 uint32 immediate_data_size, const gles2::GetTexParameteriv& c) { | 1146 uint32 immediate_data_size, const gles2::GetTexParameteriv& c) { |
1218 GLenum target = static_cast<GLenum>(c.target); | 1147 GLenum target = static_cast<GLenum>(c.target); |
1219 GLenum pname = static_cast<GLenum>(c.pname); | 1148 GLenum pname = static_cast<GLenum>(c.pname); |
1220 GLint* params; | 1149 GLint* params; |
1221 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1150 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1222 uint32 params_size = num_values * sizeof(*params); | 1151 uint32 params_size = num_values * sizeof(*params); |
1223 params = GetSharedMemoryAs<GLint*>( | 1152 params = GetSharedMemoryAs<GLint*>( |
1224 c.params_shm_id, c.params_shm_offset, params_size); | 1153 c.params_shm_id, c.params_shm_offset, params_size); |
1225 parse_error::ParseError result = | 1154 if (!ValidateGLenumTextureTarget(target)) { |
1226 ValidateGetTexParameteriv( | 1155 SetGLError(GL_INVALID_VALUE); |
1227 this, immediate_data_size, target, pname, params); | 1156 return parse_error::kParseNoError; |
1228 if (result != parse_error::kParseNoError) { | 1157 } |
1229 return result; | 1158 if (!ValidateGLenumTextureParameter(pname)) { |
| 1159 SetGLError(GL_INVALID_VALUE); |
| 1160 return parse_error::kParseNoError; |
| 1161 } |
| 1162 if (params == NULL) { |
| 1163 return parse_error::kParseOutOfBounds; |
1230 } | 1164 } |
1231 glGetTexParameteriv(target, pname, params); | 1165 glGetTexParameteriv(target, pname, params); |
1232 return parse_error::kParseNoError; | 1166 return parse_error::kParseNoError; |
1233 } | 1167 } |
1234 | 1168 |
1235 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribfv( | 1169 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribfv( |
1236 uint32 immediate_data_size, const gles2::GetVertexAttribfv& c) { | 1170 uint32 immediate_data_size, const gles2::GetVertexAttribfv& c) { |
1237 GLuint index = static_cast<GLuint>(c.index); | 1171 GLuint index = static_cast<GLuint>(c.index); |
1238 GLenum pname = static_cast<GLenum>(c.pname); | 1172 GLenum pname = static_cast<GLenum>(c.pname); |
1239 GLfloat* params; | 1173 GLfloat* params; |
1240 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1174 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1241 uint32 params_size = num_values * sizeof(*params); | 1175 uint32 params_size = num_values * sizeof(*params); |
1242 params = GetSharedMemoryAs<GLfloat*>( | 1176 params = GetSharedMemoryAs<GLfloat*>( |
1243 c.params_shm_id, c.params_shm_offset, params_size); | 1177 c.params_shm_id, c.params_shm_offset, params_size); |
1244 parse_error::ParseError result = | 1178 if (!ValidateGLenumVertexAttribute(pname)) { |
1245 ValidateGetVertexAttribfv( | 1179 SetGLError(GL_INVALID_VALUE); |
1246 this, immediate_data_size, index, pname, params); | 1180 return parse_error::kParseNoError; |
1247 if (result != parse_error::kParseNoError) { | 1181 } |
1248 return result; | 1182 if (params == NULL) { |
| 1183 return parse_error::kParseOutOfBounds; |
1249 } | 1184 } |
1250 glGetVertexAttribfv(index, pname, params); | 1185 glGetVertexAttribfv(index, pname, params); |
1251 return parse_error::kParseNoError; | 1186 return parse_error::kParseNoError; |
1252 } | 1187 } |
1253 | 1188 |
1254 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribiv( | 1189 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribiv( |
1255 uint32 immediate_data_size, const gles2::GetVertexAttribiv& c) { | 1190 uint32 immediate_data_size, const gles2::GetVertexAttribiv& c) { |
1256 GLuint index = static_cast<GLuint>(c.index); | 1191 GLuint index = static_cast<GLuint>(c.index); |
1257 GLenum pname = static_cast<GLenum>(c.pname); | 1192 GLenum pname = static_cast<GLenum>(c.pname); |
1258 GLint* params; | 1193 GLint* params; |
1259 GLsizei num_values = util_.GLGetNumValuesReturned(pname); | 1194 GLsizei num_values = util_.GLGetNumValuesReturned(pname); |
1260 uint32 params_size = num_values * sizeof(*params); | 1195 uint32 params_size = num_values * sizeof(*params); |
1261 params = GetSharedMemoryAs<GLint*>( | 1196 params = GetSharedMemoryAs<GLint*>( |
1262 c.params_shm_id, c.params_shm_offset, params_size); | 1197 c.params_shm_id, c.params_shm_offset, params_size); |
1263 parse_error::ParseError result = | 1198 if (!ValidateGLenumVertexAttribute(pname)) { |
1264 ValidateGetVertexAttribiv( | 1199 SetGLError(GL_INVALID_VALUE); |
1265 this, immediate_data_size, index, pname, params); | 1200 return parse_error::kParseNoError; |
1266 if (result != parse_error::kParseNoError) { | 1201 } |
1267 return result; | 1202 if (params == NULL) { |
| 1203 return parse_error::kParseOutOfBounds; |
1268 } | 1204 } |
1269 glGetVertexAttribiv(index, pname, params); | 1205 glGetVertexAttribiv(index, pname, params); |
1270 return parse_error::kParseNoError; | 1206 return parse_error::kParseNoError; |
1271 } | 1207 } |
1272 | 1208 |
1273 parse_error::ParseError GLES2DecoderImpl::HandleHint( | 1209 parse_error::ParseError GLES2DecoderImpl::HandleHint( |
1274 uint32 immediate_data_size, const gles2::Hint& c) { | 1210 uint32 immediate_data_size, const gles2::Hint& c) { |
1275 GLenum target = static_cast<GLenum>(c.target); | 1211 GLenum target = static_cast<GLenum>(c.target); |
1276 GLenum mode = static_cast<GLenum>(c.mode); | 1212 GLenum mode = static_cast<GLenum>(c.mode); |
1277 parse_error::ParseError result = | 1213 if (!ValidateGLenumHintTarget(target)) { |
1278 ValidateHint(this, immediate_data_size, target, mode); | 1214 SetGLError(GL_INVALID_VALUE); |
1279 if (result != parse_error::kParseNoError) { | 1215 return parse_error::kParseNoError; |
1280 return result; | 1216 } |
| 1217 if (!ValidateGLenumHintMode(mode)) { |
| 1218 SetGLError(GL_INVALID_VALUE); |
| 1219 return parse_error::kParseNoError; |
1281 } | 1220 } |
1282 glHint(target, mode); | 1221 glHint(target, mode); |
1283 return parse_error::kParseNoError; | 1222 return parse_error::kParseNoError; |
1284 } | 1223 } |
1285 | 1224 |
1286 parse_error::ParseError GLES2DecoderImpl::HandleIsBuffer( | 1225 parse_error::ParseError GLES2DecoderImpl::HandleIsBuffer( |
1287 uint32 immediate_data_size, const gles2::IsBuffer& c) { | 1226 uint32 immediate_data_size, const gles2::IsBuffer& c) { |
1288 GLuint buffer; | 1227 GLuint buffer; |
1289 if (!id_map_.GetServiceId(c.buffer, &buffer)) { | 1228 if (!id_map_.GetServiceId(c.buffer, &buffer)) { |
1290 SetGLError(GL_INVALID_VALUE); | 1229 SetGLError(GL_INVALID_VALUE); |
1291 return parse_error::kParseNoError; | 1230 return parse_error::kParseNoError; |
1292 } | 1231 } |
1293 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1232 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1294 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1233 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1295 parse_error::ParseError result = | |
1296 ValidateIsBuffer(this, immediate_data_size, buffer); | |
1297 if (result != parse_error::kParseNoError) { | |
1298 return result; | |
1299 } | |
1300 *result_dst = glIsBuffer(buffer); | 1234 *result_dst = glIsBuffer(buffer); |
1301 return parse_error::kParseNoError; | 1235 return parse_error::kParseNoError; |
1302 } | 1236 } |
1303 | 1237 |
1304 parse_error::ParseError GLES2DecoderImpl::HandleIsEnabled( | 1238 parse_error::ParseError GLES2DecoderImpl::HandleIsEnabled( |
1305 uint32 immediate_data_size, const gles2::IsEnabled& c) { | 1239 uint32 immediate_data_size, const gles2::IsEnabled& c) { |
1306 GLenum cap = static_cast<GLenum>(c.cap); | 1240 GLenum cap = static_cast<GLenum>(c.cap); |
1307 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1241 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1308 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1242 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1309 parse_error::ParseError result = | 1243 if (!ValidateGLenumCapability(cap)) { |
1310 ValidateIsEnabled(this, immediate_data_size, cap); | 1244 SetGLError(GL_INVALID_VALUE); |
1311 if (result != parse_error::kParseNoError) { | 1245 return parse_error::kParseNoError; |
1312 return result; | |
1313 } | 1246 } |
1314 *result_dst = glIsEnabled(cap); | 1247 *result_dst = glIsEnabled(cap); |
1315 return parse_error::kParseNoError; | 1248 return parse_error::kParseNoError; |
1316 } | 1249 } |
1317 | 1250 |
1318 parse_error::ParseError GLES2DecoderImpl::HandleIsFramebuffer( | 1251 parse_error::ParseError GLES2DecoderImpl::HandleIsFramebuffer( |
1319 uint32 immediate_data_size, const gles2::IsFramebuffer& c) { | 1252 uint32 immediate_data_size, const gles2::IsFramebuffer& c) { |
1320 GLuint framebuffer; | 1253 GLuint framebuffer; |
1321 if (!id_map_.GetServiceId(c.framebuffer, &framebuffer)) { | 1254 if (!id_map_.GetServiceId(c.framebuffer, &framebuffer)) { |
1322 SetGLError(GL_INVALID_VALUE); | 1255 SetGLError(GL_INVALID_VALUE); |
1323 return parse_error::kParseNoError; | 1256 return parse_error::kParseNoError; |
1324 } | 1257 } |
1325 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1258 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1326 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1259 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1327 parse_error::ParseError result = | |
1328 ValidateIsFramebuffer(this, immediate_data_size, framebuffer); | |
1329 if (result != parse_error::kParseNoError) { | |
1330 return result; | |
1331 } | |
1332 *result_dst = glIsFramebufferEXT(framebuffer); | 1260 *result_dst = glIsFramebufferEXT(framebuffer); |
1333 return parse_error::kParseNoError; | 1261 return parse_error::kParseNoError; |
1334 } | 1262 } |
1335 | 1263 |
1336 parse_error::ParseError GLES2DecoderImpl::HandleIsProgram( | 1264 parse_error::ParseError GLES2DecoderImpl::HandleIsProgram( |
1337 uint32 immediate_data_size, const gles2::IsProgram& c) { | 1265 uint32 immediate_data_size, const gles2::IsProgram& c) { |
1338 GLuint program; | 1266 GLuint program; |
1339 if (!id_map_.GetServiceId(c.program, &program)) { | 1267 if (!id_map_.GetServiceId(c.program, &program)) { |
1340 SetGLError(GL_INVALID_VALUE); | 1268 SetGLError(GL_INVALID_VALUE); |
1341 return parse_error::kParseNoError; | 1269 return parse_error::kParseNoError; |
1342 } | 1270 } |
1343 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1271 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1344 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1272 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1345 parse_error::ParseError result = | |
1346 ValidateIsProgram(this, immediate_data_size, program); | |
1347 if (result != parse_error::kParseNoError) { | |
1348 return result; | |
1349 } | |
1350 *result_dst = glIsProgram(program); | 1273 *result_dst = glIsProgram(program); |
1351 return parse_error::kParseNoError; | 1274 return parse_error::kParseNoError; |
1352 } | 1275 } |
1353 | 1276 |
1354 parse_error::ParseError GLES2DecoderImpl::HandleIsRenderbuffer( | 1277 parse_error::ParseError GLES2DecoderImpl::HandleIsRenderbuffer( |
1355 uint32 immediate_data_size, const gles2::IsRenderbuffer& c) { | 1278 uint32 immediate_data_size, const gles2::IsRenderbuffer& c) { |
1356 GLuint renderbuffer; | 1279 GLuint renderbuffer; |
1357 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { | 1280 if (!id_map_.GetServiceId(c.renderbuffer, &renderbuffer)) { |
1358 SetGLError(GL_INVALID_VALUE); | 1281 SetGLError(GL_INVALID_VALUE); |
1359 return parse_error::kParseNoError; | 1282 return parse_error::kParseNoError; |
1360 } | 1283 } |
1361 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1284 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1362 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1285 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1363 parse_error::ParseError result = | |
1364 ValidateIsRenderbuffer(this, immediate_data_size, renderbuffer); | |
1365 if (result != parse_error::kParseNoError) { | |
1366 return result; | |
1367 } | |
1368 *result_dst = glIsRenderbufferEXT(renderbuffer); | 1286 *result_dst = glIsRenderbufferEXT(renderbuffer); |
1369 return parse_error::kParseNoError; | 1287 return parse_error::kParseNoError; |
1370 } | 1288 } |
1371 | 1289 |
1372 parse_error::ParseError GLES2DecoderImpl::HandleIsShader( | 1290 parse_error::ParseError GLES2DecoderImpl::HandleIsShader( |
1373 uint32 immediate_data_size, const gles2::IsShader& c) { | 1291 uint32 immediate_data_size, const gles2::IsShader& c) { |
1374 GLuint shader; | 1292 GLuint shader; |
1375 if (!id_map_.GetServiceId(c.shader, &shader)) { | 1293 if (!id_map_.GetServiceId(c.shader, &shader)) { |
1376 SetGLError(GL_INVALID_VALUE); | 1294 SetGLError(GL_INVALID_VALUE); |
1377 return parse_error::kParseNoError; | 1295 return parse_error::kParseNoError; |
1378 } | 1296 } |
1379 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1297 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1380 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1298 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1381 parse_error::ParseError result = | |
1382 ValidateIsShader(this, immediate_data_size, shader); | |
1383 if (result != parse_error::kParseNoError) { | |
1384 return result; | |
1385 } | |
1386 *result_dst = glIsShader(shader); | 1299 *result_dst = glIsShader(shader); |
1387 return parse_error::kParseNoError; | 1300 return parse_error::kParseNoError; |
1388 } | 1301 } |
1389 | 1302 |
1390 parse_error::ParseError GLES2DecoderImpl::HandleIsTexture( | 1303 parse_error::ParseError GLES2DecoderImpl::HandleIsTexture( |
1391 uint32 immediate_data_size, const gles2::IsTexture& c) { | 1304 uint32 immediate_data_size, const gles2::IsTexture& c) { |
1392 GLuint texture; | 1305 GLuint texture; |
1393 if (!id_map_.GetServiceId(c.texture, &texture)) { | 1306 if (!id_map_.GetServiceId(c.texture, &texture)) { |
1394 SetGLError(GL_INVALID_VALUE); | 1307 SetGLError(GL_INVALID_VALUE); |
1395 return parse_error::kParseNoError; | 1308 return parse_error::kParseNoError; |
1396 } | 1309 } |
1397 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( | 1310 GLboolean* result_dst = GetSharedMemoryAs<GLboolean*>( |
1398 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 1311 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
1399 parse_error::ParseError result = | |
1400 ValidateIsTexture(this, immediate_data_size, texture); | |
1401 if (result != parse_error::kParseNoError) { | |
1402 return result; | |
1403 } | |
1404 *result_dst = glIsTexture(texture); | 1312 *result_dst = glIsTexture(texture); |
1405 return parse_error::kParseNoError; | 1313 return parse_error::kParseNoError; |
1406 } | 1314 } |
1407 | 1315 |
1408 parse_error::ParseError GLES2DecoderImpl::HandleLineWidth( | 1316 parse_error::ParseError GLES2DecoderImpl::HandleLineWidth( |
1409 uint32 immediate_data_size, const gles2::LineWidth& c) { | 1317 uint32 immediate_data_size, const gles2::LineWidth& c) { |
1410 GLfloat width = static_cast<GLfloat>(c.width); | 1318 GLfloat width = static_cast<GLfloat>(c.width); |
1411 parse_error::ParseError result = | |
1412 ValidateLineWidth(this, immediate_data_size, width); | |
1413 if (result != parse_error::kParseNoError) { | |
1414 return result; | |
1415 } | |
1416 glLineWidth(width); | 1319 glLineWidth(width); |
1417 return parse_error::kParseNoError; | 1320 return parse_error::kParseNoError; |
1418 } | 1321 } |
1419 | 1322 |
1420 parse_error::ParseError GLES2DecoderImpl::HandleLinkProgram( | 1323 parse_error::ParseError GLES2DecoderImpl::HandleLinkProgram( |
1421 uint32 immediate_data_size, const gles2::LinkProgram& c) { | 1324 uint32 immediate_data_size, const gles2::LinkProgram& c) { |
1422 GLuint program; | 1325 GLuint program; |
1423 if (!id_map_.GetServiceId(c.program, &program)) { | 1326 if (!id_map_.GetServiceId(c.program, &program)) { |
1424 SetGLError(GL_INVALID_VALUE); | 1327 SetGLError(GL_INVALID_VALUE); |
1425 return parse_error::kParseNoError; | 1328 return parse_error::kParseNoError; |
1426 } | 1329 } |
1427 parse_error::ParseError result = | |
1428 ValidateLinkProgram(this, immediate_data_size, program); | |
1429 if (result != parse_error::kParseNoError) { | |
1430 return result; | |
1431 } | |
1432 glLinkProgram(program); | 1330 glLinkProgram(program); |
1433 return parse_error::kParseNoError; | 1331 return parse_error::kParseNoError; |
1434 } | 1332 } |
1435 | 1333 |
1436 parse_error::ParseError GLES2DecoderImpl::HandlePolygonOffset( | 1334 parse_error::ParseError GLES2DecoderImpl::HandlePolygonOffset( |
1437 uint32 immediate_data_size, const gles2::PolygonOffset& c) { | 1335 uint32 immediate_data_size, const gles2::PolygonOffset& c) { |
1438 GLfloat factor = static_cast<GLfloat>(c.factor); | 1336 GLfloat factor = static_cast<GLfloat>(c.factor); |
1439 GLfloat units = static_cast<GLfloat>(c.units); | 1337 GLfloat units = static_cast<GLfloat>(c.units); |
1440 parse_error::ParseError result = | |
1441 ValidatePolygonOffset(this, immediate_data_size, factor, units); | |
1442 if (result != parse_error::kParseNoError) { | |
1443 return result; | |
1444 } | |
1445 glPolygonOffset(factor, units); | 1338 glPolygonOffset(factor, units); |
1446 return parse_error::kParseNoError; | 1339 return parse_error::kParseNoError; |
1447 } | 1340 } |
1448 | 1341 |
1449 parse_error::ParseError GLES2DecoderImpl::HandleRenderbufferStorage( | 1342 parse_error::ParseError GLES2DecoderImpl::HandleRenderbufferStorage( |
1450 uint32 immediate_data_size, const gles2::RenderbufferStorage& c) { | 1343 uint32 immediate_data_size, const gles2::RenderbufferStorage& c) { |
1451 GLenum target = static_cast<GLenum>(c.target); | 1344 GLenum target = static_cast<GLenum>(c.target); |
1452 GLenum internalformat = static_cast<GLenum>(c.internalformat); | 1345 GLenum internalformat = static_cast<GLenum>(c.internalformat); |
1453 GLsizei width = static_cast<GLsizei>(c.width); | 1346 GLsizei width = static_cast<GLsizei>(c.width); |
1454 GLsizei height = static_cast<GLsizei>(c.height); | 1347 GLsizei height = static_cast<GLsizei>(c.height); |
1455 parse_error::ParseError result = | 1348 if (!ValidateGLenumRenderBufferTarget(target)) { |
1456 ValidateRenderbufferStorage( | 1349 SetGLError(GL_INVALID_VALUE); |
1457 this, immediate_data_size, target, internalformat, width, height); | 1350 return parse_error::kParseNoError; |
1458 if (result != parse_error::kParseNoError) { | 1351 } |
1459 return result; | 1352 if (!ValidateGLenumRenderBufferFormat(internalformat)) { |
| 1353 SetGLError(GL_INVALID_VALUE); |
| 1354 return parse_error::kParseNoError; |
1460 } | 1355 } |
1461 glRenderbufferStorageEXT(target, internalformat, width, height); | 1356 glRenderbufferStorageEXT(target, internalformat, width, height); |
1462 return parse_error::kParseNoError; | 1357 return parse_error::kParseNoError; |
1463 } | 1358 } |
1464 | 1359 |
1465 parse_error::ParseError GLES2DecoderImpl::HandleSampleCoverage( | 1360 parse_error::ParseError GLES2DecoderImpl::HandleSampleCoverage( |
1466 uint32 immediate_data_size, const gles2::SampleCoverage& c) { | 1361 uint32 immediate_data_size, const gles2::SampleCoverage& c) { |
1467 GLclampf value = static_cast<GLclampf>(c.value); | 1362 GLclampf value = static_cast<GLclampf>(c.value); |
1468 GLboolean invert = static_cast<GLboolean>(c.invert); | 1363 GLboolean invert = static_cast<GLboolean>(c.invert); |
1469 parse_error::ParseError result = | |
1470 ValidateSampleCoverage(this, immediate_data_size, value, invert); | |
1471 if (result != parse_error::kParseNoError) { | |
1472 return result; | |
1473 } | |
1474 glSampleCoverage(value, invert); | 1364 glSampleCoverage(value, invert); |
1475 return parse_error::kParseNoError; | 1365 return parse_error::kParseNoError; |
1476 } | 1366 } |
1477 | 1367 |
1478 parse_error::ParseError GLES2DecoderImpl::HandleScissor( | 1368 parse_error::ParseError GLES2DecoderImpl::HandleScissor( |
1479 uint32 immediate_data_size, const gles2::Scissor& c) { | 1369 uint32 immediate_data_size, const gles2::Scissor& c) { |
1480 GLint x = static_cast<GLint>(c.x); | 1370 GLint x = static_cast<GLint>(c.x); |
1481 GLint y = static_cast<GLint>(c.y); | 1371 GLint y = static_cast<GLint>(c.y); |
1482 GLsizei width = static_cast<GLsizei>(c.width); | 1372 GLsizei width = static_cast<GLsizei>(c.width); |
1483 GLsizei height = static_cast<GLsizei>(c.height); | 1373 GLsizei height = static_cast<GLsizei>(c.height); |
1484 parse_error::ParseError result = | |
1485 ValidateScissor(this, immediate_data_size, x, y, width, height); | |
1486 if (result != parse_error::kParseNoError) { | |
1487 return result; | |
1488 } | |
1489 glScissor(x, y, width, height); | 1374 glScissor(x, y, width, height); |
1490 return parse_error::kParseNoError; | 1375 return parse_error::kParseNoError; |
1491 } | 1376 } |
1492 | 1377 |
1493 parse_error::ParseError GLES2DecoderImpl::HandleStencilFunc( | 1378 parse_error::ParseError GLES2DecoderImpl::HandleStencilFunc( |
1494 uint32 immediate_data_size, const gles2::StencilFunc& c) { | 1379 uint32 immediate_data_size, const gles2::StencilFunc& c) { |
1495 GLenum func = static_cast<GLenum>(c.func); | 1380 GLenum func = static_cast<GLenum>(c.func); |
1496 GLint ref = static_cast<GLint>(c.ref); | 1381 GLint ref = static_cast<GLint>(c.ref); |
1497 GLuint mask = static_cast<GLuint>(c.mask); | 1382 GLuint mask = static_cast<GLuint>(c.mask); |
1498 parse_error::ParseError result = | 1383 if (!ValidateGLenumCmpFunction(func)) { |
1499 ValidateStencilFunc(this, immediate_data_size, func, ref, mask); | 1384 SetGLError(GL_INVALID_VALUE); |
1500 if (result != parse_error::kParseNoError) { | 1385 return parse_error::kParseNoError; |
1501 return result; | |
1502 } | 1386 } |
1503 glStencilFunc(func, ref, mask); | 1387 glStencilFunc(func, ref, mask); |
1504 return parse_error::kParseNoError; | 1388 return parse_error::kParseNoError; |
1505 } | 1389 } |
1506 | 1390 |
1507 parse_error::ParseError GLES2DecoderImpl::HandleStencilFuncSeparate( | 1391 parse_error::ParseError GLES2DecoderImpl::HandleStencilFuncSeparate( |
1508 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) { | 1392 uint32 immediate_data_size, const gles2::StencilFuncSeparate& c) { |
1509 GLenum face = static_cast<GLenum>(c.face); | 1393 GLenum face = static_cast<GLenum>(c.face); |
1510 GLenum func = static_cast<GLenum>(c.func); | 1394 GLenum func = static_cast<GLenum>(c.func); |
1511 GLint ref = static_cast<GLint>(c.ref); | 1395 GLint ref = static_cast<GLint>(c.ref); |
1512 GLuint mask = static_cast<GLuint>(c.mask); | 1396 GLuint mask = static_cast<GLuint>(c.mask); |
1513 parse_error::ParseError result = | 1397 if (!ValidateGLenumFaceType(face)) { |
1514 ValidateStencilFuncSeparate( | 1398 SetGLError(GL_INVALID_VALUE); |
1515 this, immediate_data_size, face, func, ref, mask); | 1399 return parse_error::kParseNoError; |
1516 if (result != parse_error::kParseNoError) { | 1400 } |
1517 return result; | 1401 if (!ValidateGLenumCmpFunction(func)) { |
| 1402 SetGLError(GL_INVALID_VALUE); |
| 1403 return parse_error::kParseNoError; |
1518 } | 1404 } |
1519 glStencilFuncSeparate(face, func, ref, mask); | 1405 glStencilFuncSeparate(face, func, ref, mask); |
1520 return parse_error::kParseNoError; | 1406 return parse_error::kParseNoError; |
1521 } | 1407 } |
1522 | 1408 |
1523 parse_error::ParseError GLES2DecoderImpl::HandleStencilMask( | 1409 parse_error::ParseError GLES2DecoderImpl::HandleStencilMask( |
1524 uint32 immediate_data_size, const gles2::StencilMask& c) { | 1410 uint32 immediate_data_size, const gles2::StencilMask& c) { |
1525 GLuint mask = static_cast<GLuint>(c.mask); | 1411 GLuint mask = static_cast<GLuint>(c.mask); |
1526 parse_error::ParseError result = | |
1527 ValidateStencilMask(this, immediate_data_size, mask); | |
1528 if (result != parse_error::kParseNoError) { | |
1529 return result; | |
1530 } | |
1531 glStencilMask(mask); | 1412 glStencilMask(mask); |
1532 return parse_error::kParseNoError; | 1413 return parse_error::kParseNoError; |
1533 } | 1414 } |
1534 | 1415 |
1535 parse_error::ParseError GLES2DecoderImpl::HandleStencilMaskSeparate( | 1416 parse_error::ParseError GLES2DecoderImpl::HandleStencilMaskSeparate( |
1536 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) { | 1417 uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) { |
1537 GLenum face = static_cast<GLenum>(c.face); | 1418 GLenum face = static_cast<GLenum>(c.face); |
1538 GLuint mask = static_cast<GLuint>(c.mask); | 1419 GLuint mask = static_cast<GLuint>(c.mask); |
1539 parse_error::ParseError result = | 1420 if (!ValidateGLenumFaceType(face)) { |
1540 ValidateStencilMaskSeparate(this, immediate_data_size, face, mask); | 1421 SetGLError(GL_INVALID_VALUE); |
1541 if (result != parse_error::kParseNoError) { | 1422 return parse_error::kParseNoError; |
1542 return result; | |
1543 } | 1423 } |
1544 glStencilMaskSeparate(face, mask); | 1424 glStencilMaskSeparate(face, mask); |
1545 return parse_error::kParseNoError; | 1425 return parse_error::kParseNoError; |
1546 } | 1426 } |
1547 | 1427 |
1548 parse_error::ParseError GLES2DecoderImpl::HandleStencilOp( | 1428 parse_error::ParseError GLES2DecoderImpl::HandleStencilOp( |
1549 uint32 immediate_data_size, const gles2::StencilOp& c) { | 1429 uint32 immediate_data_size, const gles2::StencilOp& c) { |
1550 GLenum fail = static_cast<GLenum>(c.fail); | 1430 GLenum fail = static_cast<GLenum>(c.fail); |
1551 GLenum zfail = static_cast<GLenum>(c.zfail); | 1431 GLenum zfail = static_cast<GLenum>(c.zfail); |
1552 GLenum zpass = static_cast<GLenum>(c.zpass); | 1432 GLenum zpass = static_cast<GLenum>(c.zpass); |
1553 parse_error::ParseError result = | 1433 if (!ValidateGLenumStencilOp(fail)) { |
1554 ValidateStencilOp(this, immediate_data_size, fail, zfail, zpass); | 1434 SetGLError(GL_INVALID_VALUE); |
1555 if (result != parse_error::kParseNoError) { | 1435 return parse_error::kParseNoError; |
1556 return result; | 1436 } |
| 1437 if (!ValidateGLenumStencilOp(zfail)) { |
| 1438 SetGLError(GL_INVALID_VALUE); |
| 1439 return parse_error::kParseNoError; |
| 1440 } |
| 1441 if (!ValidateGLenumStencilOp(zpass)) { |
| 1442 SetGLError(GL_INVALID_VALUE); |
| 1443 return parse_error::kParseNoError; |
1557 } | 1444 } |
1558 glStencilOp(fail, zfail, zpass); | 1445 glStencilOp(fail, zfail, zpass); |
1559 return parse_error::kParseNoError; | 1446 return parse_error::kParseNoError; |
1560 } | 1447 } |
1561 | 1448 |
1562 parse_error::ParseError GLES2DecoderImpl::HandleStencilOpSeparate( | 1449 parse_error::ParseError GLES2DecoderImpl::HandleStencilOpSeparate( |
1563 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) { | 1450 uint32 immediate_data_size, const gles2::StencilOpSeparate& c) { |
1564 GLenum face = static_cast<GLenum>(c.face); | 1451 GLenum face = static_cast<GLenum>(c.face); |
1565 GLenum fail = static_cast<GLenum>(c.fail); | 1452 GLenum fail = static_cast<GLenum>(c.fail); |
1566 GLenum zfail = static_cast<GLenum>(c.zfail); | 1453 GLenum zfail = static_cast<GLenum>(c.zfail); |
1567 GLenum zpass = static_cast<GLenum>(c.zpass); | 1454 GLenum zpass = static_cast<GLenum>(c.zpass); |
1568 parse_error::ParseError result = | 1455 if (!ValidateGLenumFaceType(face)) { |
1569 ValidateStencilOpSeparate( | 1456 SetGLError(GL_INVALID_VALUE); |
1570 this, immediate_data_size, face, fail, zfail, zpass); | 1457 return parse_error::kParseNoError; |
1571 if (result != parse_error::kParseNoError) { | 1458 } |
1572 return result; | 1459 if (!ValidateGLenumStencilOp(fail)) { |
| 1460 SetGLError(GL_INVALID_VALUE); |
| 1461 return parse_error::kParseNoError; |
| 1462 } |
| 1463 if (!ValidateGLenumStencilOp(zfail)) { |
| 1464 SetGLError(GL_INVALID_VALUE); |
| 1465 return parse_error::kParseNoError; |
| 1466 } |
| 1467 if (!ValidateGLenumStencilOp(zpass)) { |
| 1468 SetGLError(GL_INVALID_VALUE); |
| 1469 return parse_error::kParseNoError; |
1573 } | 1470 } |
1574 glStencilOpSeparate(face, fail, zfail, zpass); | 1471 glStencilOpSeparate(face, fail, zfail, zpass); |
1575 return parse_error::kParseNoError; | 1472 return parse_error::kParseNoError; |
1576 } | 1473 } |
1577 | 1474 |
1578 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterf( | 1475 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterf( |
1579 uint32 immediate_data_size, const gles2::TexParameterf& c) { | 1476 uint32 immediate_data_size, const gles2::TexParameterf& c) { |
1580 GLenum target = static_cast<GLenum>(c.target); | 1477 GLenum target = static_cast<GLenum>(c.target); |
1581 GLenum pname = static_cast<GLenum>(c.pname); | 1478 GLenum pname = static_cast<GLenum>(c.pname); |
1582 GLfloat param = static_cast<GLfloat>(c.param); | 1479 GLfloat param = static_cast<GLfloat>(c.param); |
1583 parse_error::ParseError result = | 1480 if (!ValidateGLenumTextureBindTarget(target)) { |
1584 ValidateTexParameterf(this, immediate_data_size, target, pname, param); | 1481 SetGLError(GL_INVALID_VALUE); |
1585 if (result != parse_error::kParseNoError) { | 1482 return parse_error::kParseNoError; |
1586 return result; | 1483 } |
| 1484 if (!ValidateGLenumTextureParameter(pname)) { |
| 1485 SetGLError(GL_INVALID_VALUE); |
| 1486 return parse_error::kParseNoError; |
1587 } | 1487 } |
1588 glTexParameterf(target, pname, param); | 1488 glTexParameterf(target, pname, param); |
1589 return parse_error::kParseNoError; | 1489 return parse_error::kParseNoError; |
1590 } | 1490 } |
1591 | 1491 |
1592 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterfv( | 1492 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterfv( |
1593 uint32 immediate_data_size, const gles2::TexParameterfv& c) { | 1493 uint32 immediate_data_size, const gles2::TexParameterfv& c) { |
1594 GLenum target = static_cast<GLenum>(c.target); | 1494 GLenum target = static_cast<GLenum>(c.target); |
1595 GLenum pname = static_cast<GLenum>(c.pname); | 1495 GLenum pname = static_cast<GLenum>(c.pname); |
1596 const GLfloat* params = GetSharedMemoryAs<const GLfloat*>( | 1496 const GLfloat* params = GetSharedMemoryAs<const GLfloat*>( |
1597 c.params_shm_id, c.params_shm_offset, 0 /* TODO(gman): size */); | 1497 c.params_shm_id, c.params_shm_offset, 0 /* TODO(gman): size */); |
1598 parse_error::ParseError result = | 1498 if (!ValidateGLenumTextureBindTarget(target)) { |
1599 ValidateTexParameterfv(this, immediate_data_size, target, pname, params); | 1499 SetGLError(GL_INVALID_VALUE); |
1600 if (result != parse_error::kParseNoError) { | 1500 return parse_error::kParseNoError; |
1601 return result; | 1501 } |
| 1502 if (!ValidateGLenumTextureParameter(pname)) { |
| 1503 SetGLError(GL_INVALID_VALUE); |
| 1504 return parse_error::kParseNoError; |
| 1505 } |
| 1506 if (params == NULL) { |
| 1507 return parse_error::kParseOutOfBounds; |
1602 } | 1508 } |
1603 glTexParameterfv(target, pname, params); | 1509 glTexParameterfv(target, pname, params); |
1604 return parse_error::kParseNoError; | 1510 return parse_error::kParseNoError; |
1605 } | 1511 } |
1606 | 1512 |
1607 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterfvImmediate( | 1513 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterfvImmediate( |
1608 uint32 immediate_data_size, const gles2::TexParameterfvImmediate& c) { | 1514 uint32 immediate_data_size, const gles2::TexParameterfvImmediate& c) { |
1609 GLenum target = static_cast<GLenum>(c.target); | 1515 GLenum target = static_cast<GLenum>(c.target); |
1610 GLenum pname = static_cast<GLenum>(c.pname); | 1516 GLenum pname = static_cast<GLenum>(c.pname); |
1611 const GLfloat* params = GetImmediateDataAs<const GLfloat*>(c); | 1517 const GLfloat* params = GetImmediateDataAs<const GLfloat*>(c); |
| 1518 if (!ValidateGLenumTextureBindTarget(target)) { |
| 1519 SetGLError(GL_INVALID_VALUE); |
| 1520 return parse_error::kParseNoError; |
| 1521 } |
| 1522 if (!ValidateGLenumTextureParameter(pname)) { |
| 1523 SetGLError(GL_INVALID_VALUE); |
| 1524 return parse_error::kParseNoError; |
| 1525 } |
| 1526 if (params == NULL) { |
| 1527 return parse_error::kParseOutOfBounds; |
| 1528 } |
| 1529 if (!CheckImmediateDataSize<TexParameterfvImmediate>( |
| 1530 immediate_data_size, 1, sizeof(GLfloat), 1)) { |
| 1531 return parse_error::kParseOutOfBounds; |
| 1532 } |
1612 // Immediate version. | 1533 // Immediate version. |
1613 parse_error::ParseError result = | 1534 if (!ValidateGLenumTextureBindTarget(target)) { |
1614 ValidateTexParameterfvImmediate( | 1535 SetGLError(GL_INVALID_VALUE); |
1615 this, immediate_data_size, target, pname, params); | 1536 return parse_error::kParseNoError; |
1616 if (result != parse_error::kParseNoError) { | 1537 } |
1617 return result; | 1538 if (!ValidateGLenumTextureParameter(pname)) { |
| 1539 SetGLError(GL_INVALID_VALUE); |
| 1540 return parse_error::kParseNoError; |
| 1541 } |
| 1542 if (params == NULL) { |
| 1543 return parse_error::kParseOutOfBounds; |
| 1544 } |
| 1545 if (!CheckImmediateDataSize<TexParameterfvImmediate>( |
| 1546 immediate_data_size, 1, sizeof(GLfloat), 1)) { |
| 1547 return parse_error::kParseOutOfBounds; |
1618 } | 1548 } |
1619 glTexParameterfv(target, pname, params); | 1549 glTexParameterfv(target, pname, params); |
1620 return parse_error::kParseNoError; | 1550 return parse_error::kParseNoError; |
1621 } | 1551 } |
1622 | 1552 |
1623 parse_error::ParseError GLES2DecoderImpl::HandleTexParameteri( | 1553 parse_error::ParseError GLES2DecoderImpl::HandleTexParameteri( |
1624 uint32 immediate_data_size, const gles2::TexParameteri& c) { | 1554 uint32 immediate_data_size, const gles2::TexParameteri& c) { |
1625 GLenum target = static_cast<GLenum>(c.target); | 1555 GLenum target = static_cast<GLenum>(c.target); |
1626 GLenum pname = static_cast<GLenum>(c.pname); | 1556 GLenum pname = static_cast<GLenum>(c.pname); |
1627 GLint param = static_cast<GLint>(c.param); | 1557 GLint param = static_cast<GLint>(c.param); |
1628 parse_error::ParseError result = | 1558 if (!ValidateGLenumTextureBindTarget(target)) { |
1629 ValidateTexParameteri(this, immediate_data_size, target, pname, param); | 1559 SetGLError(GL_INVALID_VALUE); |
1630 if (result != parse_error::kParseNoError) { | 1560 return parse_error::kParseNoError; |
1631 return result; | 1561 } |
| 1562 if (!ValidateGLenumTextureParameter(pname)) { |
| 1563 SetGLError(GL_INVALID_VALUE); |
| 1564 return parse_error::kParseNoError; |
1632 } | 1565 } |
1633 glTexParameteri(target, pname, param); | 1566 glTexParameteri(target, pname, param); |
1634 return parse_error::kParseNoError; | 1567 return parse_error::kParseNoError; |
1635 } | 1568 } |
1636 | 1569 |
1637 parse_error::ParseError GLES2DecoderImpl::HandleTexParameteriv( | 1570 parse_error::ParseError GLES2DecoderImpl::HandleTexParameteriv( |
1638 uint32 immediate_data_size, const gles2::TexParameteriv& c) { | 1571 uint32 immediate_data_size, const gles2::TexParameteriv& c) { |
1639 GLenum target = static_cast<GLenum>(c.target); | 1572 GLenum target = static_cast<GLenum>(c.target); |
1640 GLenum pname = static_cast<GLenum>(c.pname); | 1573 GLenum pname = static_cast<GLenum>(c.pname); |
1641 const GLint* params = GetSharedMemoryAs<const GLint*>( | 1574 const GLint* params = GetSharedMemoryAs<const GLint*>( |
1642 c.params_shm_id, c.params_shm_offset, 0 /* TODO(gman): size */); | 1575 c.params_shm_id, c.params_shm_offset, 0 /* TODO(gman): size */); |
1643 parse_error::ParseError result = | 1576 if (!ValidateGLenumTextureBindTarget(target)) { |
1644 ValidateTexParameteriv(this, immediate_data_size, target, pname, params); | 1577 SetGLError(GL_INVALID_VALUE); |
1645 if (result != parse_error::kParseNoError) { | 1578 return parse_error::kParseNoError; |
1646 return result; | 1579 } |
| 1580 if (!ValidateGLenumTextureParameter(pname)) { |
| 1581 SetGLError(GL_INVALID_VALUE); |
| 1582 return parse_error::kParseNoError; |
| 1583 } |
| 1584 if (params == NULL) { |
| 1585 return parse_error::kParseOutOfBounds; |
1647 } | 1586 } |
1648 glTexParameteriv(target, pname, params); | 1587 glTexParameteriv(target, pname, params); |
1649 return parse_error::kParseNoError; | 1588 return parse_error::kParseNoError; |
1650 } | 1589 } |
1651 | 1590 |
1652 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterivImmediate( | 1591 parse_error::ParseError GLES2DecoderImpl::HandleTexParameterivImmediate( |
1653 uint32 immediate_data_size, const gles2::TexParameterivImmediate& c) { | 1592 uint32 immediate_data_size, const gles2::TexParameterivImmediate& c) { |
1654 GLenum target = static_cast<GLenum>(c.target); | 1593 GLenum target = static_cast<GLenum>(c.target); |
1655 GLenum pname = static_cast<GLenum>(c.pname); | 1594 GLenum pname = static_cast<GLenum>(c.pname); |
1656 const GLint* params = GetImmediateDataAs<const GLint*>(c); | 1595 const GLint* params = GetImmediateDataAs<const GLint*>(c); |
| 1596 if (!ValidateGLenumTextureBindTarget(target)) { |
| 1597 SetGLError(GL_INVALID_VALUE); |
| 1598 return parse_error::kParseNoError; |
| 1599 } |
| 1600 if (!ValidateGLenumTextureParameter(pname)) { |
| 1601 SetGLError(GL_INVALID_VALUE); |
| 1602 return parse_error::kParseNoError; |
| 1603 } |
| 1604 if (params == NULL) { |
| 1605 return parse_error::kParseOutOfBounds; |
| 1606 } |
| 1607 if (!CheckImmediateDataSize<TexParameterivImmediate>( |
| 1608 immediate_data_size, 1, sizeof(GLint), 1)) { |
| 1609 return parse_error::kParseOutOfBounds; |
| 1610 } |
1657 // Immediate version. | 1611 // Immediate version. |
1658 parse_error::ParseError result = | 1612 if (!ValidateGLenumTextureBindTarget(target)) { |
1659 ValidateTexParameterivImmediate( | 1613 SetGLError(GL_INVALID_VALUE); |
1660 this, immediate_data_size, target, pname, params); | 1614 return parse_error::kParseNoError; |
1661 if (result != parse_error::kParseNoError) { | 1615 } |
1662 return result; | 1616 if (!ValidateGLenumTextureParameter(pname)) { |
| 1617 SetGLError(GL_INVALID_VALUE); |
| 1618 return parse_error::kParseNoError; |
| 1619 } |
| 1620 if (params == NULL) { |
| 1621 return parse_error::kParseOutOfBounds; |
| 1622 } |
| 1623 if (!CheckImmediateDataSize<TexParameterivImmediate>( |
| 1624 immediate_data_size, 1, sizeof(GLint), 1)) { |
| 1625 return parse_error::kParseOutOfBounds; |
1663 } | 1626 } |
1664 glTexParameteriv(target, pname, params); | 1627 glTexParameteriv(target, pname, params); |
1665 return parse_error::kParseNoError; | 1628 return parse_error::kParseNoError; |
1666 } | 1629 } |
1667 | 1630 |
1668 parse_error::ParseError GLES2DecoderImpl::HandleTexSubImage2D( | 1631 parse_error::ParseError GLES2DecoderImpl::HandleTexSubImage2D( |
1669 uint32 immediate_data_size, const gles2::TexSubImage2D& c) { | 1632 uint32 immediate_data_size, const gles2::TexSubImage2D& c) { |
1670 GLenum target = static_cast<GLenum>(c.target); | 1633 GLenum target = static_cast<GLenum>(c.target); |
1671 GLint level = static_cast<GLint>(c.level); | 1634 GLint level = static_cast<GLint>(c.level); |
1672 GLint xoffset = static_cast<GLint>(c.xoffset); | 1635 GLint xoffset = static_cast<GLint>(c.xoffset); |
1673 GLint yoffset = static_cast<GLint>(c.yoffset); | 1636 GLint yoffset = static_cast<GLint>(c.yoffset); |
1674 GLsizei width = static_cast<GLsizei>(c.width); | 1637 GLsizei width = static_cast<GLsizei>(c.width); |
1675 GLsizei height = static_cast<GLsizei>(c.height); | 1638 GLsizei height = static_cast<GLsizei>(c.height); |
1676 GLenum format = static_cast<GLenum>(c.format); | 1639 GLenum format = static_cast<GLenum>(c.format); |
1677 GLenum type = static_cast<GLenum>(c.type); | 1640 GLenum type = static_cast<GLenum>(c.type); |
1678 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id); | 1641 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id); |
1679 uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset); | 1642 uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset); |
1680 uint32 pixels_size = GLES2Util::ComputeImageDataSize( | 1643 uint32 pixels_size = GLES2Util::ComputeImageDataSize( |
1681 width, height, format, type, unpack_alignment_); | 1644 width, height, format, type, unpack_alignment_); |
1682 const void* pixels = GetSharedMemoryAs<const void*>( | 1645 const void* pixels = GetSharedMemoryAs<const void*>( |
1683 pixels_shm_id, pixels_shm_offset, pixels_size); | 1646 pixels_shm_id, pixels_shm_offset, pixels_size); |
1684 parse_error::ParseError result = | 1647 if (!ValidateGLenumTextureTarget(target)) { |
1685 ValidateTexSubImage2D( | 1648 SetGLError(GL_INVALID_VALUE); |
1686 this, immediate_data_size, target, level, xoffset, yoffset, width, | 1649 return parse_error::kParseNoError; |
1687 height, format, type, pixels); | 1650 } |
1688 if (result != parse_error::kParseNoError) { | 1651 if (!ValidateGLenumTextureFormat(format)) { |
1689 return result; | 1652 SetGLError(GL_INVALID_VALUE); |
| 1653 return parse_error::kParseNoError; |
| 1654 } |
| 1655 if (!ValidateGLenumPixelType(type)) { |
| 1656 SetGLError(GL_INVALID_VALUE); |
| 1657 return parse_error::kParseNoError; |
| 1658 } |
| 1659 if (pixels == NULL) { |
| 1660 return parse_error::kParseOutOfBounds; |
1690 } | 1661 } |
1691 glTexSubImage2D( | 1662 glTexSubImage2D( |
1692 target, level, xoffset, yoffset, width, height, format, type, pixels); | 1663 target, level, xoffset, yoffset, width, height, format, type, pixels); |
1693 return parse_error::kParseNoError; | 1664 return parse_error::kParseNoError; |
1694 } | 1665 } |
1695 | 1666 |
1696 parse_error::ParseError GLES2DecoderImpl::HandleTexSubImage2DImmediate( | 1667 parse_error::ParseError GLES2DecoderImpl::HandleTexSubImage2DImmediate( |
1697 uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) { | 1668 uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) { |
1698 GLenum target = static_cast<GLenum>(c.target); | 1669 GLenum target = static_cast<GLenum>(c.target); |
1699 GLint level = static_cast<GLint>(c.level); | 1670 GLint level = static_cast<GLint>(c.level); |
1700 GLint xoffset = static_cast<GLint>(c.xoffset); | 1671 GLint xoffset = static_cast<GLint>(c.xoffset); |
1701 GLint yoffset = static_cast<GLint>(c.yoffset); | 1672 GLint yoffset = static_cast<GLint>(c.yoffset); |
1702 GLsizei width = static_cast<GLsizei>(c.width); | 1673 GLsizei width = static_cast<GLsizei>(c.width); |
1703 GLsizei height = static_cast<GLsizei>(c.height); | 1674 GLsizei height = static_cast<GLsizei>(c.height); |
1704 GLenum format = static_cast<GLenum>(c.format); | 1675 GLenum format = static_cast<GLenum>(c.format); |
1705 GLenum type = static_cast<GLenum>(c.type); | 1676 GLenum type = static_cast<GLenum>(c.type); |
1706 const void* pixels = GetImmediateDataAs<const void*>(c); | 1677 const void* pixels = GetImmediateDataAs<const void*>(c); |
| 1678 if (!ValidateGLenumTextureTarget(target)) { |
| 1679 SetGLError(GL_INVALID_VALUE); |
| 1680 return parse_error::kParseNoError; |
| 1681 } |
| 1682 if (!ValidateGLenumTextureFormat(format)) { |
| 1683 SetGLError(GL_INVALID_VALUE); |
| 1684 return parse_error::kParseNoError; |
| 1685 } |
| 1686 if (!ValidateGLenumPixelType(type)) { |
| 1687 SetGLError(GL_INVALID_VALUE); |
| 1688 return parse_error::kParseNoError; |
| 1689 } |
| 1690 if (pixels == NULL) { |
| 1691 return parse_error::kParseOutOfBounds; |
| 1692 } |
1707 // Immediate version. | 1693 // Immediate version. |
1708 parse_error::ParseError result = | 1694 if (!ValidateGLenumTextureTarget(target)) { |
1709 ValidateTexSubImage2DImmediate( | 1695 SetGLError(GL_INVALID_VALUE); |
1710 this, immediate_data_size, target, level, xoffset, yoffset, width, | 1696 return parse_error::kParseNoError; |
1711 height, format, type, pixels); | 1697 } |
1712 if (result != parse_error::kParseNoError) { | 1698 if (!ValidateGLenumTextureFormat(format)) { |
1713 return result; | 1699 SetGLError(GL_INVALID_VALUE); |
| 1700 return parse_error::kParseNoError; |
| 1701 } |
| 1702 if (!ValidateGLenumPixelType(type)) { |
| 1703 SetGLError(GL_INVALID_VALUE); |
| 1704 return parse_error::kParseNoError; |
| 1705 } |
| 1706 if (pixels == NULL) { |
| 1707 return parse_error::kParseOutOfBounds; |
1714 } | 1708 } |
1715 glTexSubImage2D( | 1709 glTexSubImage2D( |
1716 target, level, xoffset, yoffset, width, height, format, type, pixels); | 1710 target, level, xoffset, yoffset, width, height, format, type, pixels); |
1717 return parse_error::kParseNoError; | 1711 return parse_error::kParseNoError; |
1718 } | 1712 } |
1719 | 1713 |
1720 parse_error::ParseError GLES2DecoderImpl::HandleUniform1f( | 1714 parse_error::ParseError GLES2DecoderImpl::HandleUniform1f( |
1721 uint32 immediate_data_size, const gles2::Uniform1f& c) { | 1715 uint32 immediate_data_size, const gles2::Uniform1f& c) { |
1722 GLint location = static_cast<GLint>(c.location); | 1716 GLint location = static_cast<GLint>(c.location); |
1723 GLfloat x = static_cast<GLfloat>(c.x); | 1717 GLfloat x = static_cast<GLfloat>(c.x); |
1724 parse_error::ParseError result = | |
1725 ValidateUniform1f(this, immediate_data_size, location, x); | |
1726 if (result != parse_error::kParseNoError) { | |
1727 return result; | |
1728 } | |
1729 glUniform1f(location, x); | 1718 glUniform1f(location, x); |
1730 return parse_error::kParseNoError; | 1719 return parse_error::kParseNoError; |
1731 } | 1720 } |
1732 | 1721 |
1733 parse_error::ParseError GLES2DecoderImpl::HandleUniform1fv( | 1722 parse_error::ParseError GLES2DecoderImpl::HandleUniform1fv( |
1734 uint32 immediate_data_size, const gles2::Uniform1fv& c) { | 1723 uint32 immediate_data_size, const gles2::Uniform1fv& c) { |
1735 GLint location = static_cast<GLint>(c.location); | 1724 GLint location = static_cast<GLint>(c.location); |
1736 GLsizei count = static_cast<GLsizei>(c.count); | 1725 GLsizei count = static_cast<GLsizei>(c.count); |
1737 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( | 1726 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( |
1738 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1727 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1739 parse_error::ParseError result = | 1728 if (v == NULL) { |
1740 ValidateUniform1fv(this, immediate_data_size, location, count, v); | 1729 return parse_error::kParseOutOfBounds; |
1741 if (result != parse_error::kParseNoError) { | |
1742 return result; | |
1743 } | 1730 } |
1744 glUniform1fv(location, count, v); | 1731 glUniform1fv(location, count, v); |
1745 return parse_error::kParseNoError; | 1732 return parse_error::kParseNoError; |
1746 } | 1733 } |
1747 | 1734 |
1748 parse_error::ParseError GLES2DecoderImpl::HandleUniform1fvImmediate( | 1735 parse_error::ParseError GLES2DecoderImpl::HandleUniform1fvImmediate( |
1749 uint32 immediate_data_size, const gles2::Uniform1fvImmediate& c) { | 1736 uint32 immediate_data_size, const gles2::Uniform1fvImmediate& c) { |
1750 GLint location = static_cast<GLint>(c.location); | 1737 GLint location = static_cast<GLint>(c.location); |
1751 GLsizei count = static_cast<GLsizei>(c.count); | 1738 GLsizei count = static_cast<GLsizei>(c.count); |
1752 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); | 1739 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); |
| 1740 if (v == NULL) { |
| 1741 return parse_error::kParseOutOfBounds; |
| 1742 } |
| 1743 if (!CheckImmediateDataSize<Uniform1fvImmediate>( |
| 1744 immediate_data_size, count, sizeof(GLfloat), 1)) { |
| 1745 return parse_error::kParseOutOfBounds; |
| 1746 } |
1753 // Immediate version. | 1747 // Immediate version. |
1754 parse_error::ParseError result = | 1748 if (v == NULL) { |
1755 ValidateUniform1fvImmediate( | 1749 return parse_error::kParseOutOfBounds; |
1756 this, immediate_data_size, location, count, v); | 1750 } |
1757 if (result != parse_error::kParseNoError) { | 1751 if (!CheckImmediateDataSize<Uniform1fvImmediate>( |
1758 return result; | 1752 immediate_data_size, count, sizeof(GLfloat), 1)) { |
| 1753 return parse_error::kParseOutOfBounds; |
1759 } | 1754 } |
1760 glUniform1fv(location, count, v); | 1755 glUniform1fv(location, count, v); |
1761 return parse_error::kParseNoError; | 1756 return parse_error::kParseNoError; |
1762 } | 1757 } |
1763 | 1758 |
1764 parse_error::ParseError GLES2DecoderImpl::HandleUniform1i( | 1759 parse_error::ParseError GLES2DecoderImpl::HandleUniform1i( |
1765 uint32 immediate_data_size, const gles2::Uniform1i& c) { | 1760 uint32 immediate_data_size, const gles2::Uniform1i& c) { |
1766 GLint location = static_cast<GLint>(c.location); | 1761 GLint location = static_cast<GLint>(c.location); |
1767 GLint x = static_cast<GLint>(c.x); | 1762 GLint x = static_cast<GLint>(c.x); |
1768 parse_error::ParseError result = | |
1769 ValidateUniform1i(this, immediate_data_size, location, x); | |
1770 if (result != parse_error::kParseNoError) { | |
1771 return result; | |
1772 } | |
1773 glUniform1i(location, x); | 1763 glUniform1i(location, x); |
1774 return parse_error::kParseNoError; | 1764 return parse_error::kParseNoError; |
1775 } | 1765 } |
1776 | 1766 |
1777 parse_error::ParseError GLES2DecoderImpl::HandleUniform1iv( | 1767 parse_error::ParseError GLES2DecoderImpl::HandleUniform1iv( |
1778 uint32 immediate_data_size, const gles2::Uniform1iv& c) { | 1768 uint32 immediate_data_size, const gles2::Uniform1iv& c) { |
1779 GLint location = static_cast<GLint>(c.location); | 1769 GLint location = static_cast<GLint>(c.location); |
1780 GLsizei count = static_cast<GLsizei>(c.count); | 1770 GLsizei count = static_cast<GLsizei>(c.count); |
1781 const GLint* v = GetSharedMemoryAs<const GLint*>( | 1771 const GLint* v = GetSharedMemoryAs<const GLint*>( |
1782 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1772 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1783 parse_error::ParseError result = | 1773 if (v == NULL) { |
1784 ValidateUniform1iv(this, immediate_data_size, location, count, v); | 1774 return parse_error::kParseOutOfBounds; |
1785 if (result != parse_error::kParseNoError) { | |
1786 return result; | |
1787 } | 1775 } |
1788 glUniform1iv(location, count, v); | 1776 glUniform1iv(location, count, v); |
1789 return parse_error::kParseNoError; | 1777 return parse_error::kParseNoError; |
1790 } | 1778 } |
1791 | 1779 |
1792 parse_error::ParseError GLES2DecoderImpl::HandleUniform1ivImmediate( | 1780 parse_error::ParseError GLES2DecoderImpl::HandleUniform1ivImmediate( |
1793 uint32 immediate_data_size, const gles2::Uniform1ivImmediate& c) { | 1781 uint32 immediate_data_size, const gles2::Uniform1ivImmediate& c) { |
1794 GLint location = static_cast<GLint>(c.location); | 1782 GLint location = static_cast<GLint>(c.location); |
1795 GLsizei count = static_cast<GLsizei>(c.count); | 1783 GLsizei count = static_cast<GLsizei>(c.count); |
1796 const GLint* v = GetImmediateDataAs<const GLint*>(c); | 1784 const GLint* v = GetImmediateDataAs<const GLint*>(c); |
| 1785 if (v == NULL) { |
| 1786 return parse_error::kParseOutOfBounds; |
| 1787 } |
| 1788 if (!CheckImmediateDataSize<Uniform1ivImmediate>( |
| 1789 immediate_data_size, count, sizeof(GLint), 1)) { |
| 1790 return parse_error::kParseOutOfBounds; |
| 1791 } |
1797 // Immediate version. | 1792 // Immediate version. |
1798 parse_error::ParseError result = | 1793 if (v == NULL) { |
1799 ValidateUniform1ivImmediate( | 1794 return parse_error::kParseOutOfBounds; |
1800 this, immediate_data_size, location, count, v); | 1795 } |
1801 if (result != parse_error::kParseNoError) { | 1796 if (!CheckImmediateDataSize<Uniform1ivImmediate>( |
1802 return result; | 1797 immediate_data_size, count, sizeof(GLint), 1)) { |
| 1798 return parse_error::kParseOutOfBounds; |
1803 } | 1799 } |
1804 glUniform1iv(location, count, v); | 1800 glUniform1iv(location, count, v); |
1805 return parse_error::kParseNoError; | 1801 return parse_error::kParseNoError; |
1806 } | 1802 } |
1807 | 1803 |
1808 parse_error::ParseError GLES2DecoderImpl::HandleUniform2f( | 1804 parse_error::ParseError GLES2DecoderImpl::HandleUniform2f( |
1809 uint32 immediate_data_size, const gles2::Uniform2f& c) { | 1805 uint32 immediate_data_size, const gles2::Uniform2f& c) { |
1810 GLint location = static_cast<GLint>(c.location); | 1806 GLint location = static_cast<GLint>(c.location); |
1811 GLfloat x = static_cast<GLfloat>(c.x); | 1807 GLfloat x = static_cast<GLfloat>(c.x); |
1812 GLfloat y = static_cast<GLfloat>(c.y); | 1808 GLfloat y = static_cast<GLfloat>(c.y); |
1813 parse_error::ParseError result = | |
1814 ValidateUniform2f(this, immediate_data_size, location, x, y); | |
1815 if (result != parse_error::kParseNoError) { | |
1816 return result; | |
1817 } | |
1818 glUniform2f(location, x, y); | 1809 glUniform2f(location, x, y); |
1819 return parse_error::kParseNoError; | 1810 return parse_error::kParseNoError; |
1820 } | 1811 } |
1821 | 1812 |
1822 parse_error::ParseError GLES2DecoderImpl::HandleUniform2fv( | 1813 parse_error::ParseError GLES2DecoderImpl::HandleUniform2fv( |
1823 uint32 immediate_data_size, const gles2::Uniform2fv& c) { | 1814 uint32 immediate_data_size, const gles2::Uniform2fv& c) { |
1824 GLint location = static_cast<GLint>(c.location); | 1815 GLint location = static_cast<GLint>(c.location); |
1825 GLsizei count = static_cast<GLsizei>(c.count); | 1816 GLsizei count = static_cast<GLsizei>(c.count); |
1826 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( | 1817 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( |
1827 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1818 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1828 parse_error::ParseError result = | 1819 if (v == NULL) { |
1829 ValidateUniform2fv(this, immediate_data_size, location, count, v); | 1820 return parse_error::kParseOutOfBounds; |
1830 if (result != parse_error::kParseNoError) { | |
1831 return result; | |
1832 } | 1821 } |
1833 glUniform2fv(location, count, v); | 1822 glUniform2fv(location, count, v); |
1834 return parse_error::kParseNoError; | 1823 return parse_error::kParseNoError; |
1835 } | 1824 } |
1836 | 1825 |
1837 parse_error::ParseError GLES2DecoderImpl::HandleUniform2fvImmediate( | 1826 parse_error::ParseError GLES2DecoderImpl::HandleUniform2fvImmediate( |
1838 uint32 immediate_data_size, const gles2::Uniform2fvImmediate& c) { | 1827 uint32 immediate_data_size, const gles2::Uniform2fvImmediate& c) { |
1839 GLint location = static_cast<GLint>(c.location); | 1828 GLint location = static_cast<GLint>(c.location); |
1840 GLsizei count = static_cast<GLsizei>(c.count); | 1829 GLsizei count = static_cast<GLsizei>(c.count); |
1841 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); | 1830 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); |
| 1831 if (v == NULL) { |
| 1832 return parse_error::kParseOutOfBounds; |
| 1833 } |
| 1834 if (!CheckImmediateDataSize<Uniform2fvImmediate>( |
| 1835 immediate_data_size, count, sizeof(GLfloat), 2)) { |
| 1836 return parse_error::kParseOutOfBounds; |
| 1837 } |
1842 // Immediate version. | 1838 // Immediate version. |
1843 parse_error::ParseError result = | 1839 if (v == NULL) { |
1844 ValidateUniform2fvImmediate( | 1840 return parse_error::kParseOutOfBounds; |
1845 this, immediate_data_size, location, count, v); | 1841 } |
1846 if (result != parse_error::kParseNoError) { | 1842 if (!CheckImmediateDataSize<Uniform2fvImmediate>( |
1847 return result; | 1843 immediate_data_size, count, sizeof(GLfloat), 2)) { |
| 1844 return parse_error::kParseOutOfBounds; |
1848 } | 1845 } |
1849 glUniform2fv(location, count, v); | 1846 glUniform2fv(location, count, v); |
1850 return parse_error::kParseNoError; | 1847 return parse_error::kParseNoError; |
1851 } | 1848 } |
1852 | 1849 |
1853 parse_error::ParseError GLES2DecoderImpl::HandleUniform2i( | 1850 parse_error::ParseError GLES2DecoderImpl::HandleUniform2i( |
1854 uint32 immediate_data_size, const gles2::Uniform2i& c) { | 1851 uint32 immediate_data_size, const gles2::Uniform2i& c) { |
1855 GLint location = static_cast<GLint>(c.location); | 1852 GLint location = static_cast<GLint>(c.location); |
1856 GLint x = static_cast<GLint>(c.x); | 1853 GLint x = static_cast<GLint>(c.x); |
1857 GLint y = static_cast<GLint>(c.y); | 1854 GLint y = static_cast<GLint>(c.y); |
1858 parse_error::ParseError result = | |
1859 ValidateUniform2i(this, immediate_data_size, location, x, y); | |
1860 if (result != parse_error::kParseNoError) { | |
1861 return result; | |
1862 } | |
1863 glUniform2i(location, x, y); | 1855 glUniform2i(location, x, y); |
1864 return parse_error::kParseNoError; | 1856 return parse_error::kParseNoError; |
1865 } | 1857 } |
1866 | 1858 |
1867 parse_error::ParseError GLES2DecoderImpl::HandleUniform2iv( | 1859 parse_error::ParseError GLES2DecoderImpl::HandleUniform2iv( |
1868 uint32 immediate_data_size, const gles2::Uniform2iv& c) { | 1860 uint32 immediate_data_size, const gles2::Uniform2iv& c) { |
1869 GLint location = static_cast<GLint>(c.location); | 1861 GLint location = static_cast<GLint>(c.location); |
1870 GLsizei count = static_cast<GLsizei>(c.count); | 1862 GLsizei count = static_cast<GLsizei>(c.count); |
1871 const GLint* v = GetSharedMemoryAs<const GLint*>( | 1863 const GLint* v = GetSharedMemoryAs<const GLint*>( |
1872 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1864 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1873 parse_error::ParseError result = | 1865 if (v == NULL) { |
1874 ValidateUniform2iv(this, immediate_data_size, location, count, v); | 1866 return parse_error::kParseOutOfBounds; |
1875 if (result != parse_error::kParseNoError) { | |
1876 return result; | |
1877 } | 1867 } |
1878 glUniform2iv(location, count, v); | 1868 glUniform2iv(location, count, v); |
1879 return parse_error::kParseNoError; | 1869 return parse_error::kParseNoError; |
1880 } | 1870 } |
1881 | 1871 |
1882 parse_error::ParseError GLES2DecoderImpl::HandleUniform2ivImmediate( | 1872 parse_error::ParseError GLES2DecoderImpl::HandleUniform2ivImmediate( |
1883 uint32 immediate_data_size, const gles2::Uniform2ivImmediate& c) { | 1873 uint32 immediate_data_size, const gles2::Uniform2ivImmediate& c) { |
1884 GLint location = static_cast<GLint>(c.location); | 1874 GLint location = static_cast<GLint>(c.location); |
1885 GLsizei count = static_cast<GLsizei>(c.count); | 1875 GLsizei count = static_cast<GLsizei>(c.count); |
1886 const GLint* v = GetImmediateDataAs<const GLint*>(c); | 1876 const GLint* v = GetImmediateDataAs<const GLint*>(c); |
| 1877 if (v == NULL) { |
| 1878 return parse_error::kParseOutOfBounds; |
| 1879 } |
| 1880 if (!CheckImmediateDataSize<Uniform2ivImmediate>( |
| 1881 immediate_data_size, count, sizeof(GLint), 2)) { |
| 1882 return parse_error::kParseOutOfBounds; |
| 1883 } |
1887 // Immediate version. | 1884 // Immediate version. |
1888 parse_error::ParseError result = | 1885 if (v == NULL) { |
1889 ValidateUniform2ivImmediate( | 1886 return parse_error::kParseOutOfBounds; |
1890 this, immediate_data_size, location, count, v); | 1887 } |
1891 if (result != parse_error::kParseNoError) { | 1888 if (!CheckImmediateDataSize<Uniform2ivImmediate>( |
1892 return result; | 1889 immediate_data_size, count, sizeof(GLint), 2)) { |
| 1890 return parse_error::kParseOutOfBounds; |
1893 } | 1891 } |
1894 glUniform2iv(location, count, v); | 1892 glUniform2iv(location, count, v); |
1895 return parse_error::kParseNoError; | 1893 return parse_error::kParseNoError; |
1896 } | 1894 } |
1897 | 1895 |
1898 parse_error::ParseError GLES2DecoderImpl::HandleUniform3f( | 1896 parse_error::ParseError GLES2DecoderImpl::HandleUniform3f( |
1899 uint32 immediate_data_size, const gles2::Uniform3f& c) { | 1897 uint32 immediate_data_size, const gles2::Uniform3f& c) { |
1900 GLint location = static_cast<GLint>(c.location); | 1898 GLint location = static_cast<GLint>(c.location); |
1901 GLfloat x = static_cast<GLfloat>(c.x); | 1899 GLfloat x = static_cast<GLfloat>(c.x); |
1902 GLfloat y = static_cast<GLfloat>(c.y); | 1900 GLfloat y = static_cast<GLfloat>(c.y); |
1903 GLfloat z = static_cast<GLfloat>(c.z); | 1901 GLfloat z = static_cast<GLfloat>(c.z); |
1904 parse_error::ParseError result = | |
1905 ValidateUniform3f(this, immediate_data_size, location, x, y, z); | |
1906 if (result != parse_error::kParseNoError) { | |
1907 return result; | |
1908 } | |
1909 glUniform3f(location, x, y, z); | 1902 glUniform3f(location, x, y, z); |
1910 return parse_error::kParseNoError; | 1903 return parse_error::kParseNoError; |
1911 } | 1904 } |
1912 | 1905 |
1913 parse_error::ParseError GLES2DecoderImpl::HandleUniform3fv( | 1906 parse_error::ParseError GLES2DecoderImpl::HandleUniform3fv( |
1914 uint32 immediate_data_size, const gles2::Uniform3fv& c) { | 1907 uint32 immediate_data_size, const gles2::Uniform3fv& c) { |
1915 GLint location = static_cast<GLint>(c.location); | 1908 GLint location = static_cast<GLint>(c.location); |
1916 GLsizei count = static_cast<GLsizei>(c.count); | 1909 GLsizei count = static_cast<GLsizei>(c.count); |
1917 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( | 1910 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( |
1918 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1911 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1919 parse_error::ParseError result = | 1912 if (v == NULL) { |
1920 ValidateUniform3fv(this, immediate_data_size, location, count, v); | 1913 return parse_error::kParseOutOfBounds; |
1921 if (result != parse_error::kParseNoError) { | |
1922 return result; | |
1923 } | 1914 } |
1924 glUniform3fv(location, count, v); | 1915 glUniform3fv(location, count, v); |
1925 return parse_error::kParseNoError; | 1916 return parse_error::kParseNoError; |
1926 } | 1917 } |
1927 | 1918 |
1928 parse_error::ParseError GLES2DecoderImpl::HandleUniform3fvImmediate( | 1919 parse_error::ParseError GLES2DecoderImpl::HandleUniform3fvImmediate( |
1929 uint32 immediate_data_size, const gles2::Uniform3fvImmediate& c) { | 1920 uint32 immediate_data_size, const gles2::Uniform3fvImmediate& c) { |
1930 GLint location = static_cast<GLint>(c.location); | 1921 GLint location = static_cast<GLint>(c.location); |
1931 GLsizei count = static_cast<GLsizei>(c.count); | 1922 GLsizei count = static_cast<GLsizei>(c.count); |
1932 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); | 1923 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); |
| 1924 if (v == NULL) { |
| 1925 return parse_error::kParseOutOfBounds; |
| 1926 } |
| 1927 if (!CheckImmediateDataSize<Uniform3fvImmediate>( |
| 1928 immediate_data_size, count, sizeof(GLfloat), 3)) { |
| 1929 return parse_error::kParseOutOfBounds; |
| 1930 } |
1933 // Immediate version. | 1931 // Immediate version. |
1934 parse_error::ParseError result = | 1932 if (v == NULL) { |
1935 ValidateUniform3fvImmediate( | 1933 return parse_error::kParseOutOfBounds; |
1936 this, immediate_data_size, location, count, v); | 1934 } |
1937 if (result != parse_error::kParseNoError) { | 1935 if (!CheckImmediateDataSize<Uniform3fvImmediate>( |
1938 return result; | 1936 immediate_data_size, count, sizeof(GLfloat), 3)) { |
| 1937 return parse_error::kParseOutOfBounds; |
1939 } | 1938 } |
1940 glUniform3fv(location, count, v); | 1939 glUniform3fv(location, count, v); |
1941 return parse_error::kParseNoError; | 1940 return parse_error::kParseNoError; |
1942 } | 1941 } |
1943 | 1942 |
1944 parse_error::ParseError GLES2DecoderImpl::HandleUniform3i( | 1943 parse_error::ParseError GLES2DecoderImpl::HandleUniform3i( |
1945 uint32 immediate_data_size, const gles2::Uniform3i& c) { | 1944 uint32 immediate_data_size, const gles2::Uniform3i& c) { |
1946 GLint location = static_cast<GLint>(c.location); | 1945 GLint location = static_cast<GLint>(c.location); |
1947 GLint x = static_cast<GLint>(c.x); | 1946 GLint x = static_cast<GLint>(c.x); |
1948 GLint y = static_cast<GLint>(c.y); | 1947 GLint y = static_cast<GLint>(c.y); |
1949 GLint z = static_cast<GLint>(c.z); | 1948 GLint z = static_cast<GLint>(c.z); |
1950 parse_error::ParseError result = | |
1951 ValidateUniform3i(this, immediate_data_size, location, x, y, z); | |
1952 if (result != parse_error::kParseNoError) { | |
1953 return result; | |
1954 } | |
1955 glUniform3i(location, x, y, z); | 1949 glUniform3i(location, x, y, z); |
1956 return parse_error::kParseNoError; | 1950 return parse_error::kParseNoError; |
1957 } | 1951 } |
1958 | 1952 |
1959 parse_error::ParseError GLES2DecoderImpl::HandleUniform3iv( | 1953 parse_error::ParseError GLES2DecoderImpl::HandleUniform3iv( |
1960 uint32 immediate_data_size, const gles2::Uniform3iv& c) { | 1954 uint32 immediate_data_size, const gles2::Uniform3iv& c) { |
1961 GLint location = static_cast<GLint>(c.location); | 1955 GLint location = static_cast<GLint>(c.location); |
1962 GLsizei count = static_cast<GLsizei>(c.count); | 1956 GLsizei count = static_cast<GLsizei>(c.count); |
1963 const GLint* v = GetSharedMemoryAs<const GLint*>( | 1957 const GLint* v = GetSharedMemoryAs<const GLint*>( |
1964 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 1958 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
1965 parse_error::ParseError result = | 1959 if (v == NULL) { |
1966 ValidateUniform3iv(this, immediate_data_size, location, count, v); | 1960 return parse_error::kParseOutOfBounds; |
1967 if (result != parse_error::kParseNoError) { | |
1968 return result; | |
1969 } | 1961 } |
1970 glUniform3iv(location, count, v); | 1962 glUniform3iv(location, count, v); |
1971 return parse_error::kParseNoError; | 1963 return parse_error::kParseNoError; |
1972 } | 1964 } |
1973 | 1965 |
1974 parse_error::ParseError GLES2DecoderImpl::HandleUniform3ivImmediate( | 1966 parse_error::ParseError GLES2DecoderImpl::HandleUniform3ivImmediate( |
1975 uint32 immediate_data_size, const gles2::Uniform3ivImmediate& c) { | 1967 uint32 immediate_data_size, const gles2::Uniform3ivImmediate& c) { |
1976 GLint location = static_cast<GLint>(c.location); | 1968 GLint location = static_cast<GLint>(c.location); |
1977 GLsizei count = static_cast<GLsizei>(c.count); | 1969 GLsizei count = static_cast<GLsizei>(c.count); |
1978 const GLint* v = GetImmediateDataAs<const GLint*>(c); | 1970 const GLint* v = GetImmediateDataAs<const GLint*>(c); |
| 1971 if (v == NULL) { |
| 1972 return parse_error::kParseOutOfBounds; |
| 1973 } |
| 1974 if (!CheckImmediateDataSize<Uniform3ivImmediate>( |
| 1975 immediate_data_size, count, sizeof(GLint), 3)) { |
| 1976 return parse_error::kParseOutOfBounds; |
| 1977 } |
1979 // Immediate version. | 1978 // Immediate version. |
1980 parse_error::ParseError result = | 1979 if (v == NULL) { |
1981 ValidateUniform3ivImmediate( | 1980 return parse_error::kParseOutOfBounds; |
1982 this, immediate_data_size, location, count, v); | 1981 } |
1983 if (result != parse_error::kParseNoError) { | 1982 if (!CheckImmediateDataSize<Uniform3ivImmediate>( |
1984 return result; | 1983 immediate_data_size, count, sizeof(GLint), 3)) { |
| 1984 return parse_error::kParseOutOfBounds; |
1985 } | 1985 } |
1986 glUniform3iv(location, count, v); | 1986 glUniform3iv(location, count, v); |
1987 return parse_error::kParseNoError; | 1987 return parse_error::kParseNoError; |
1988 } | 1988 } |
1989 | 1989 |
1990 parse_error::ParseError GLES2DecoderImpl::HandleUniform4f( | 1990 parse_error::ParseError GLES2DecoderImpl::HandleUniform4f( |
1991 uint32 immediate_data_size, const gles2::Uniform4f& c) { | 1991 uint32 immediate_data_size, const gles2::Uniform4f& c) { |
1992 GLint location = static_cast<GLint>(c.location); | 1992 GLint location = static_cast<GLint>(c.location); |
1993 GLfloat x = static_cast<GLfloat>(c.x); | 1993 GLfloat x = static_cast<GLfloat>(c.x); |
1994 GLfloat y = static_cast<GLfloat>(c.y); | 1994 GLfloat y = static_cast<GLfloat>(c.y); |
1995 GLfloat z = static_cast<GLfloat>(c.z); | 1995 GLfloat z = static_cast<GLfloat>(c.z); |
1996 GLfloat w = static_cast<GLfloat>(c.w); | 1996 GLfloat w = static_cast<GLfloat>(c.w); |
1997 parse_error::ParseError result = | |
1998 ValidateUniform4f(this, immediate_data_size, location, x, y, z, w); | |
1999 if (result != parse_error::kParseNoError) { | |
2000 return result; | |
2001 } | |
2002 glUniform4f(location, x, y, z, w); | 1997 glUniform4f(location, x, y, z, w); |
2003 return parse_error::kParseNoError; | 1998 return parse_error::kParseNoError; |
2004 } | 1999 } |
2005 | 2000 |
2006 parse_error::ParseError GLES2DecoderImpl::HandleUniform4fv( | 2001 parse_error::ParseError GLES2DecoderImpl::HandleUniform4fv( |
2007 uint32 immediate_data_size, const gles2::Uniform4fv& c) { | 2002 uint32 immediate_data_size, const gles2::Uniform4fv& c) { |
2008 GLint location = static_cast<GLint>(c.location); | 2003 GLint location = static_cast<GLint>(c.location); |
2009 GLsizei count = static_cast<GLsizei>(c.count); | 2004 GLsizei count = static_cast<GLsizei>(c.count); |
2010 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( | 2005 const GLfloat* v = GetSharedMemoryAs<const GLfloat*>( |
2011 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 2006 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
2012 parse_error::ParseError result = | 2007 if (v == NULL) { |
2013 ValidateUniform4fv(this, immediate_data_size, location, count, v); | 2008 return parse_error::kParseOutOfBounds; |
2014 if (result != parse_error::kParseNoError) { | |
2015 return result; | |
2016 } | 2009 } |
2017 glUniform4fv(location, count, v); | 2010 glUniform4fv(location, count, v); |
2018 return parse_error::kParseNoError; | 2011 return parse_error::kParseNoError; |
2019 } | 2012 } |
2020 | 2013 |
2021 parse_error::ParseError GLES2DecoderImpl::HandleUniform4fvImmediate( | 2014 parse_error::ParseError GLES2DecoderImpl::HandleUniform4fvImmediate( |
2022 uint32 immediate_data_size, const gles2::Uniform4fvImmediate& c) { | 2015 uint32 immediate_data_size, const gles2::Uniform4fvImmediate& c) { |
2023 GLint location = static_cast<GLint>(c.location); | 2016 GLint location = static_cast<GLint>(c.location); |
2024 GLsizei count = static_cast<GLsizei>(c.count); | 2017 GLsizei count = static_cast<GLsizei>(c.count); |
2025 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); | 2018 const GLfloat* v = GetImmediateDataAs<const GLfloat*>(c); |
| 2019 if (v == NULL) { |
| 2020 return parse_error::kParseOutOfBounds; |
| 2021 } |
| 2022 if (!CheckImmediateDataSize<Uniform4fvImmediate>( |
| 2023 immediate_data_size, count, sizeof(GLfloat), 4)) { |
| 2024 return parse_error::kParseOutOfBounds; |
| 2025 } |
2026 // Immediate version. | 2026 // Immediate version. |
2027 parse_error::ParseError result = | 2027 if (v == NULL) { |
2028 ValidateUniform4fvImmediate( | 2028 return parse_error::kParseOutOfBounds; |
2029 this, immediate_data_size, location, count, v); | 2029 } |
2030 if (result != parse_error::kParseNoError) { | 2030 if (!CheckImmediateDataSize<Uniform4fvImmediate>( |
2031 return result; | 2031 immediate_data_size, count, sizeof(GLfloat), 4)) { |
| 2032 return parse_error::kParseOutOfBounds; |
2032 } | 2033 } |
2033 glUniform4fv(location, count, v); | 2034 glUniform4fv(location, count, v); |
2034 return parse_error::kParseNoError; | 2035 return parse_error::kParseNoError; |
2035 } | 2036 } |
2036 | 2037 |
2037 parse_error::ParseError GLES2DecoderImpl::HandleUniform4i( | 2038 parse_error::ParseError GLES2DecoderImpl::HandleUniform4i( |
2038 uint32 immediate_data_size, const gles2::Uniform4i& c) { | 2039 uint32 immediate_data_size, const gles2::Uniform4i& c) { |
2039 GLint location = static_cast<GLint>(c.location); | 2040 GLint location = static_cast<GLint>(c.location); |
2040 GLint x = static_cast<GLint>(c.x); | 2041 GLint x = static_cast<GLint>(c.x); |
2041 GLint y = static_cast<GLint>(c.y); | 2042 GLint y = static_cast<GLint>(c.y); |
2042 GLint z = static_cast<GLint>(c.z); | 2043 GLint z = static_cast<GLint>(c.z); |
2043 GLint w = static_cast<GLint>(c.w); | 2044 GLint w = static_cast<GLint>(c.w); |
2044 parse_error::ParseError result = | |
2045 ValidateUniform4i(this, immediate_data_size, location, x, y, z, w); | |
2046 if (result != parse_error::kParseNoError) { | |
2047 return result; | |
2048 } | |
2049 glUniform4i(location, x, y, z, w); | 2045 glUniform4i(location, x, y, z, w); |
2050 return parse_error::kParseNoError; | 2046 return parse_error::kParseNoError; |
2051 } | 2047 } |
2052 | 2048 |
2053 parse_error::ParseError GLES2DecoderImpl::HandleUniform4iv( | 2049 parse_error::ParseError GLES2DecoderImpl::HandleUniform4iv( |
2054 uint32 immediate_data_size, const gles2::Uniform4iv& c) { | 2050 uint32 immediate_data_size, const gles2::Uniform4iv& c) { |
2055 GLint location = static_cast<GLint>(c.location); | 2051 GLint location = static_cast<GLint>(c.location); |
2056 GLsizei count = static_cast<GLsizei>(c.count); | 2052 GLsizei count = static_cast<GLsizei>(c.count); |
2057 const GLint* v = GetSharedMemoryAs<const GLint*>( | 2053 const GLint* v = GetSharedMemoryAs<const GLint*>( |
2058 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); | 2054 c.v_shm_id, c.v_shm_offset, 0 /* TODO(gman): size */); |
2059 parse_error::ParseError result = | 2055 if (v == NULL) { |
2060 ValidateUniform4iv(this, immediate_data_size, location, count, v); | 2056 return parse_error::kParseOutOfBounds; |
2061 if (result != parse_error::kParseNoError) { | |
2062 return result; | |
2063 } | 2057 } |
2064 glUniform4iv(location, count, v); | 2058 glUniform4iv(location, count, v); |
2065 return parse_error::kParseNoError; | 2059 return parse_error::kParseNoError; |
2066 } | 2060 } |
2067 | 2061 |
2068 parse_error::ParseError GLES2DecoderImpl::HandleUniform4ivImmediate( | 2062 parse_error::ParseError GLES2DecoderImpl::HandleUniform4ivImmediate( |
2069 uint32 immediate_data_size, const gles2::Uniform4ivImmediate& c) { | 2063 uint32 immediate_data_size, const gles2::Uniform4ivImmediate& c) { |
2070 GLint location = static_cast<GLint>(c.location); | 2064 GLint location = static_cast<GLint>(c.location); |
2071 GLsizei count = static_cast<GLsizei>(c.count); | 2065 GLsizei count = static_cast<GLsizei>(c.count); |
2072 const GLint* v = GetImmediateDataAs<const GLint*>(c); | 2066 const GLint* v = GetImmediateDataAs<const GLint*>(c); |
| 2067 if (v == NULL) { |
| 2068 return parse_error::kParseOutOfBounds; |
| 2069 } |
| 2070 if (!CheckImmediateDataSize<Uniform4ivImmediate>( |
| 2071 immediate_data_size, count, sizeof(GLint), 4)) { |
| 2072 return parse_error::kParseOutOfBounds; |
| 2073 } |
2073 // Immediate version. | 2074 // Immediate version. |
2074 parse_error::ParseError result = | 2075 if (v == NULL) { |
2075 ValidateUniform4ivImmediate( | 2076 return parse_error::kParseOutOfBounds; |
2076 this, immediate_data_size, location, count, v); | 2077 } |
2077 if (result != parse_error::kParseNoError) { | 2078 if (!CheckImmediateDataSize<Uniform4ivImmediate>( |
2078 return result; | 2079 immediate_data_size, count, sizeof(GLint), 4)) { |
| 2080 return parse_error::kParseOutOfBounds; |
2079 } | 2081 } |
2080 glUniform4iv(location, count, v); | 2082 glUniform4iv(location, count, v); |
2081 return parse_error::kParseNoError; | 2083 return parse_error::kParseNoError; |
2082 } | 2084 } |
2083 | 2085 |
2084 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix2fv( | 2086 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix2fv( |
2085 uint32 immediate_data_size, const gles2::UniformMatrix2fv& c) { | 2087 uint32 immediate_data_size, const gles2::UniformMatrix2fv& c) { |
2086 GLint location = static_cast<GLint>(c.location); | 2088 GLint location = static_cast<GLint>(c.location); |
2087 GLsizei count = static_cast<GLsizei>(c.count); | 2089 GLsizei count = static_cast<GLsizei>(c.count); |
2088 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2090 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2089 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( | 2091 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( |
2090 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); | 2092 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); |
2091 parse_error::ParseError result = | 2093 if (value == NULL) { |
2092 ValidateUniformMatrix2fv( | 2094 return parse_error::kParseOutOfBounds; |
2093 this, immediate_data_size, location, count, transpose, value); | |
2094 if (result != parse_error::kParseNoError) { | |
2095 return result; | |
2096 } | 2095 } |
2097 glUniformMatrix2fv(location, count, transpose, value); | 2096 glUniformMatrix2fv(location, count, transpose, value); |
2098 return parse_error::kParseNoError; | 2097 return parse_error::kParseNoError; |
2099 } | 2098 } |
2100 | 2099 |
2101 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( | 2100 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( |
2102 uint32 immediate_data_size, const gles2::UniformMatrix2fvImmediate& c) { | 2101 uint32 immediate_data_size, const gles2::UniformMatrix2fvImmediate& c) { |
2103 GLint location = static_cast<GLint>(c.location); | 2102 GLint location = static_cast<GLint>(c.location); |
2104 GLsizei count = static_cast<GLsizei>(c.count); | 2103 GLsizei count = static_cast<GLsizei>(c.count); |
2105 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2104 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2106 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); | 2105 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); |
| 2106 if (value == NULL) { |
| 2107 return parse_error::kParseOutOfBounds; |
| 2108 } |
| 2109 if (!CheckImmediateDataSize<UniformMatrix2fvImmediate>( |
| 2110 immediate_data_size, count, sizeof(GLfloat), 4)) { |
| 2111 return parse_error::kParseOutOfBounds; |
| 2112 } |
2107 // Immediate version. | 2113 // Immediate version. |
2108 parse_error::ParseError result = | 2114 if (value == NULL) { |
2109 ValidateUniformMatrix2fvImmediate( | 2115 return parse_error::kParseOutOfBounds; |
2110 this, immediate_data_size, location, count, transpose, value); | 2116 } |
2111 if (result != parse_error::kParseNoError) { | 2117 if (!CheckImmediateDataSize<UniformMatrix2fvImmediate>( |
2112 return result; | 2118 immediate_data_size, count, sizeof(GLfloat), 4)) { |
| 2119 return parse_error::kParseOutOfBounds; |
2113 } | 2120 } |
2114 glUniformMatrix2fv(location, count, transpose, value); | 2121 glUniformMatrix2fv(location, count, transpose, value); |
2115 return parse_error::kParseNoError; | 2122 return parse_error::kParseNoError; |
2116 } | 2123 } |
2117 | 2124 |
2118 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix3fv( | 2125 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix3fv( |
2119 uint32 immediate_data_size, const gles2::UniformMatrix3fv& c) { | 2126 uint32 immediate_data_size, const gles2::UniformMatrix3fv& c) { |
2120 GLint location = static_cast<GLint>(c.location); | 2127 GLint location = static_cast<GLint>(c.location); |
2121 GLsizei count = static_cast<GLsizei>(c.count); | 2128 GLsizei count = static_cast<GLsizei>(c.count); |
2122 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2129 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2123 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( | 2130 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( |
2124 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); | 2131 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); |
2125 parse_error::ParseError result = | 2132 if (value == NULL) { |
2126 ValidateUniformMatrix3fv( | 2133 return parse_error::kParseOutOfBounds; |
2127 this, immediate_data_size, location, count, transpose, value); | |
2128 if (result != parse_error::kParseNoError) { | |
2129 return result; | |
2130 } | 2134 } |
2131 glUniformMatrix3fv(location, count, transpose, value); | 2135 glUniformMatrix3fv(location, count, transpose, value); |
2132 return parse_error::kParseNoError; | 2136 return parse_error::kParseNoError; |
2133 } | 2137 } |
2134 | 2138 |
2135 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( | 2139 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( |
2136 uint32 immediate_data_size, const gles2::UniformMatrix3fvImmediate& c) { | 2140 uint32 immediate_data_size, const gles2::UniformMatrix3fvImmediate& c) { |
2137 GLint location = static_cast<GLint>(c.location); | 2141 GLint location = static_cast<GLint>(c.location); |
2138 GLsizei count = static_cast<GLsizei>(c.count); | 2142 GLsizei count = static_cast<GLsizei>(c.count); |
2139 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2143 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2140 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); | 2144 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); |
| 2145 if (value == NULL) { |
| 2146 return parse_error::kParseOutOfBounds; |
| 2147 } |
| 2148 if (!CheckImmediateDataSize<UniformMatrix3fvImmediate>( |
| 2149 immediate_data_size, count, sizeof(GLfloat), 9)) { |
| 2150 return parse_error::kParseOutOfBounds; |
| 2151 } |
2141 // Immediate version. | 2152 // Immediate version. |
2142 parse_error::ParseError result = | 2153 if (value == NULL) { |
2143 ValidateUniformMatrix3fvImmediate( | 2154 return parse_error::kParseOutOfBounds; |
2144 this, immediate_data_size, location, count, transpose, value); | 2155 } |
2145 if (result != parse_error::kParseNoError) { | 2156 if (!CheckImmediateDataSize<UniformMatrix3fvImmediate>( |
2146 return result; | 2157 immediate_data_size, count, sizeof(GLfloat), 9)) { |
| 2158 return parse_error::kParseOutOfBounds; |
2147 } | 2159 } |
2148 glUniformMatrix3fv(location, count, transpose, value); | 2160 glUniformMatrix3fv(location, count, transpose, value); |
2149 return parse_error::kParseNoError; | 2161 return parse_error::kParseNoError; |
2150 } | 2162 } |
2151 | 2163 |
2152 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix4fv( | 2164 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix4fv( |
2153 uint32 immediate_data_size, const gles2::UniformMatrix4fv& c) { | 2165 uint32 immediate_data_size, const gles2::UniformMatrix4fv& c) { |
2154 GLint location = static_cast<GLint>(c.location); | 2166 GLint location = static_cast<GLint>(c.location); |
2155 GLsizei count = static_cast<GLsizei>(c.count); | 2167 GLsizei count = static_cast<GLsizei>(c.count); |
2156 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2168 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2157 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( | 2169 const GLfloat* value = GetSharedMemoryAs<const GLfloat*>( |
2158 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); | 2170 c.value_shm_id, c.value_shm_offset, 0 /* TODO(gman): size */); |
2159 parse_error::ParseError result = | 2171 if (value == NULL) { |
2160 ValidateUniformMatrix4fv( | 2172 return parse_error::kParseOutOfBounds; |
2161 this, immediate_data_size, location, count, transpose, value); | |
2162 if (result != parse_error::kParseNoError) { | |
2163 return result; | |
2164 } | 2173 } |
2165 glUniformMatrix4fv(location, count, transpose, value); | 2174 glUniformMatrix4fv(location, count, transpose, value); |
2166 return parse_error::kParseNoError; | 2175 return parse_error::kParseNoError; |
2167 } | 2176 } |
2168 | 2177 |
2169 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( | 2178 parse_error::ParseError GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( |
2170 uint32 immediate_data_size, const gles2::UniformMatrix4fvImmediate& c) { | 2179 uint32 immediate_data_size, const gles2::UniformMatrix4fvImmediate& c) { |
2171 GLint location = static_cast<GLint>(c.location); | 2180 GLint location = static_cast<GLint>(c.location); |
2172 GLsizei count = static_cast<GLsizei>(c.count); | 2181 GLsizei count = static_cast<GLsizei>(c.count); |
2173 GLboolean transpose = static_cast<GLboolean>(c.transpose); | 2182 GLboolean transpose = static_cast<GLboolean>(c.transpose); |
2174 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); | 2183 const GLfloat* value = GetImmediateDataAs<const GLfloat*>(c); |
| 2184 if (value == NULL) { |
| 2185 return parse_error::kParseOutOfBounds; |
| 2186 } |
| 2187 if (!CheckImmediateDataSize<UniformMatrix4fvImmediate>( |
| 2188 immediate_data_size, count, sizeof(GLfloat), 16)) { |
| 2189 return parse_error::kParseOutOfBounds; |
| 2190 } |
2175 // Immediate version. | 2191 // Immediate version. |
2176 parse_error::ParseError result = | 2192 if (value == NULL) { |
2177 ValidateUniformMatrix4fvImmediate( | 2193 return parse_error::kParseOutOfBounds; |
2178 this, immediate_data_size, location, count, transpose, value); | 2194 } |
2179 if (result != parse_error::kParseNoError) { | 2195 if (!CheckImmediateDataSize<UniformMatrix4fvImmediate>( |
2180 return result; | 2196 immediate_data_size, count, sizeof(GLfloat), 16)) { |
| 2197 return parse_error::kParseOutOfBounds; |
2181 } | 2198 } |
2182 glUniformMatrix4fv(location, count, transpose, value); | 2199 glUniformMatrix4fv(location, count, transpose, value); |
2183 return parse_error::kParseNoError; | 2200 return parse_error::kParseNoError; |
2184 } | 2201 } |
2185 | 2202 |
2186 parse_error::ParseError GLES2DecoderImpl::HandleUseProgram( | 2203 parse_error::ParseError GLES2DecoderImpl::HandleUseProgram( |
2187 uint32 immediate_data_size, const gles2::UseProgram& c) { | 2204 uint32 immediate_data_size, const gles2::UseProgram& c) { |
2188 GLuint program; | 2205 GLuint program; |
2189 if (!id_map_.GetServiceId(c.program, &program)) { | 2206 if (!id_map_.GetServiceId(c.program, &program)) { |
2190 SetGLError(GL_INVALID_VALUE); | 2207 SetGLError(GL_INVALID_VALUE); |
2191 return parse_error::kParseNoError; | 2208 return parse_error::kParseNoError; |
2192 } | 2209 } |
2193 parse_error::ParseError result = | |
2194 ValidateUseProgram(this, immediate_data_size, program); | |
2195 if (result != parse_error::kParseNoError) { | |
2196 return result; | |
2197 } | |
2198 glUseProgram(program); | 2210 glUseProgram(program); |
2199 return parse_error::kParseNoError; | 2211 return parse_error::kParseNoError; |
2200 } | 2212 } |
2201 | 2213 |
2202 parse_error::ParseError GLES2DecoderImpl::HandleValidateProgram( | 2214 parse_error::ParseError GLES2DecoderImpl::HandleValidateProgram( |
2203 uint32 immediate_data_size, const gles2::ValidateProgram& c) { | 2215 uint32 immediate_data_size, const gles2::ValidateProgram& c) { |
2204 GLuint program; | 2216 GLuint program; |
2205 if (!id_map_.GetServiceId(c.program, &program)) { | 2217 if (!id_map_.GetServiceId(c.program, &program)) { |
2206 SetGLError(GL_INVALID_VALUE); | 2218 SetGLError(GL_INVALID_VALUE); |
2207 return parse_error::kParseNoError; | 2219 return parse_error::kParseNoError; |
2208 } | 2220 } |
2209 parse_error::ParseError result = | |
2210 ValidateValidateProgram(this, immediate_data_size, program); | |
2211 if (result != parse_error::kParseNoError) { | |
2212 return result; | |
2213 } | |
2214 glValidateProgram(program); | 2221 glValidateProgram(program); |
2215 return parse_error::kParseNoError; | 2222 return parse_error::kParseNoError; |
2216 } | 2223 } |
2217 | 2224 |
2218 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1f( | 2225 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1f( |
2219 uint32 immediate_data_size, const gles2::VertexAttrib1f& c) { | 2226 uint32 immediate_data_size, const gles2::VertexAttrib1f& c) { |
2220 GLuint indx = static_cast<GLuint>(c.indx); | 2227 GLuint indx = static_cast<GLuint>(c.indx); |
2221 GLfloat x = static_cast<GLfloat>(c.x); | 2228 GLfloat x = static_cast<GLfloat>(c.x); |
2222 parse_error::ParseError result = | |
2223 ValidateVertexAttrib1f(this, immediate_data_size, indx, x); | |
2224 if (result != parse_error::kParseNoError) { | |
2225 return result; | |
2226 } | |
2227 glVertexAttrib1f(indx, x); | 2229 glVertexAttrib1f(indx, x); |
2228 return parse_error::kParseNoError; | 2230 return parse_error::kParseNoError; |
2229 } | 2231 } |
2230 | 2232 |
2231 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1fv( | 2233 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1fv( |
2232 uint32 immediate_data_size, const gles2::VertexAttrib1fv& c) { | 2234 uint32 immediate_data_size, const gles2::VertexAttrib1fv& c) { |
2233 GLuint indx = static_cast<GLuint>(c.indx); | 2235 GLuint indx = static_cast<GLuint>(c.indx); |
2234 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( | 2236 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( |
2235 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); | 2237 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); |
2236 parse_error::ParseError result = | 2238 if (values == NULL) { |
2237 ValidateVertexAttrib1fv(this, immediate_data_size, indx, values); | 2239 return parse_error::kParseOutOfBounds; |
2238 if (result != parse_error::kParseNoError) { | |
2239 return result; | |
2240 } | 2240 } |
2241 glVertexAttrib1fv(indx, values); | 2241 glVertexAttrib1fv(indx, values); |
2242 return parse_error::kParseNoError; | 2242 return parse_error::kParseNoError; |
2243 } | 2243 } |
2244 | 2244 |
2245 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( | 2245 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib1fvImmediate( |
2246 uint32 immediate_data_size, const gles2::VertexAttrib1fvImmediate& c) { | 2246 uint32 immediate_data_size, const gles2::VertexAttrib1fvImmediate& c) { |
2247 GLuint indx = static_cast<GLuint>(c.indx); | 2247 GLuint indx = static_cast<GLuint>(c.indx); |
2248 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); | 2248 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); |
| 2249 if (values == NULL) { |
| 2250 return parse_error::kParseOutOfBounds; |
| 2251 } |
| 2252 if (!CheckImmediateDataSize<VertexAttrib1fvImmediate>( |
| 2253 immediate_data_size, 1, sizeof(GLfloat), 1)) { |
| 2254 return parse_error::kParseOutOfBounds; |
| 2255 } |
2249 // Immediate version. | 2256 // Immediate version. |
2250 parse_error::ParseError result = | 2257 if (values == NULL) { |
2251 ValidateVertexAttrib1fvImmediate( | 2258 return parse_error::kParseOutOfBounds; |
2252 this, immediate_data_size, indx, values); | 2259 } |
2253 if (result != parse_error::kParseNoError) { | 2260 if (!CheckImmediateDataSize<VertexAttrib1fvImmediate>( |
2254 return result; | 2261 immediate_data_size, 1, sizeof(GLfloat), 1)) { |
| 2262 return parse_error::kParseOutOfBounds; |
2255 } | 2263 } |
2256 glVertexAttrib1fv(indx, values); | 2264 glVertexAttrib1fv(indx, values); |
2257 return parse_error::kParseNoError; | 2265 return parse_error::kParseNoError; |
2258 } | 2266 } |
2259 | 2267 |
2260 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2f( | 2268 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2f( |
2261 uint32 immediate_data_size, const gles2::VertexAttrib2f& c) { | 2269 uint32 immediate_data_size, const gles2::VertexAttrib2f& c) { |
2262 GLuint indx = static_cast<GLuint>(c.indx); | 2270 GLuint indx = static_cast<GLuint>(c.indx); |
2263 GLfloat x = static_cast<GLfloat>(c.x); | 2271 GLfloat x = static_cast<GLfloat>(c.x); |
2264 GLfloat y = static_cast<GLfloat>(c.y); | 2272 GLfloat y = static_cast<GLfloat>(c.y); |
2265 parse_error::ParseError result = | |
2266 ValidateVertexAttrib2f(this, immediate_data_size, indx, x, y); | |
2267 if (result != parse_error::kParseNoError) { | |
2268 return result; | |
2269 } | |
2270 glVertexAttrib2f(indx, x, y); | 2273 glVertexAttrib2f(indx, x, y); |
2271 return parse_error::kParseNoError; | 2274 return parse_error::kParseNoError; |
2272 } | 2275 } |
2273 | 2276 |
2274 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2fv( | 2277 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2fv( |
2275 uint32 immediate_data_size, const gles2::VertexAttrib2fv& c) { | 2278 uint32 immediate_data_size, const gles2::VertexAttrib2fv& c) { |
2276 GLuint indx = static_cast<GLuint>(c.indx); | 2279 GLuint indx = static_cast<GLuint>(c.indx); |
2277 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( | 2280 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( |
2278 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); | 2281 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); |
2279 parse_error::ParseError result = | 2282 if (values == NULL) { |
2280 ValidateVertexAttrib2fv(this, immediate_data_size, indx, values); | 2283 return parse_error::kParseOutOfBounds; |
2281 if (result != parse_error::kParseNoError) { | |
2282 return result; | |
2283 } | 2284 } |
2284 glVertexAttrib2fv(indx, values); | 2285 glVertexAttrib2fv(indx, values); |
2285 return parse_error::kParseNoError; | 2286 return parse_error::kParseNoError; |
2286 } | 2287 } |
2287 | 2288 |
2288 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( | 2289 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib2fvImmediate( |
2289 uint32 immediate_data_size, const gles2::VertexAttrib2fvImmediate& c) { | 2290 uint32 immediate_data_size, const gles2::VertexAttrib2fvImmediate& c) { |
2290 GLuint indx = static_cast<GLuint>(c.indx); | 2291 GLuint indx = static_cast<GLuint>(c.indx); |
2291 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); | 2292 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); |
| 2293 if (values == NULL) { |
| 2294 return parse_error::kParseOutOfBounds; |
| 2295 } |
| 2296 if (!CheckImmediateDataSize<VertexAttrib2fvImmediate>( |
| 2297 immediate_data_size, 1, sizeof(GLfloat), 2)) { |
| 2298 return parse_error::kParseOutOfBounds; |
| 2299 } |
2292 // Immediate version. | 2300 // Immediate version. |
2293 parse_error::ParseError result = | 2301 if (values == NULL) { |
2294 ValidateVertexAttrib2fvImmediate( | 2302 return parse_error::kParseOutOfBounds; |
2295 this, immediate_data_size, indx, values); | 2303 } |
2296 if (result != parse_error::kParseNoError) { | 2304 if (!CheckImmediateDataSize<VertexAttrib2fvImmediate>( |
2297 return result; | 2305 immediate_data_size, 1, sizeof(GLfloat), 2)) { |
| 2306 return parse_error::kParseOutOfBounds; |
2298 } | 2307 } |
2299 glVertexAttrib2fv(indx, values); | 2308 glVertexAttrib2fv(indx, values); |
2300 return parse_error::kParseNoError; | 2309 return parse_error::kParseNoError; |
2301 } | 2310 } |
2302 | 2311 |
2303 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3f( | 2312 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3f( |
2304 uint32 immediate_data_size, const gles2::VertexAttrib3f& c) { | 2313 uint32 immediate_data_size, const gles2::VertexAttrib3f& c) { |
2305 GLuint indx = static_cast<GLuint>(c.indx); | 2314 GLuint indx = static_cast<GLuint>(c.indx); |
2306 GLfloat x = static_cast<GLfloat>(c.x); | 2315 GLfloat x = static_cast<GLfloat>(c.x); |
2307 GLfloat y = static_cast<GLfloat>(c.y); | 2316 GLfloat y = static_cast<GLfloat>(c.y); |
2308 GLfloat z = static_cast<GLfloat>(c.z); | 2317 GLfloat z = static_cast<GLfloat>(c.z); |
2309 parse_error::ParseError result = | |
2310 ValidateVertexAttrib3f(this, immediate_data_size, indx, x, y, z); | |
2311 if (result != parse_error::kParseNoError) { | |
2312 return result; | |
2313 } | |
2314 glVertexAttrib3f(indx, x, y, z); | 2318 glVertexAttrib3f(indx, x, y, z); |
2315 return parse_error::kParseNoError; | 2319 return parse_error::kParseNoError; |
2316 } | 2320 } |
2317 | 2321 |
2318 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3fv( | 2322 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3fv( |
2319 uint32 immediate_data_size, const gles2::VertexAttrib3fv& c) { | 2323 uint32 immediate_data_size, const gles2::VertexAttrib3fv& c) { |
2320 GLuint indx = static_cast<GLuint>(c.indx); | 2324 GLuint indx = static_cast<GLuint>(c.indx); |
2321 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( | 2325 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( |
2322 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); | 2326 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); |
2323 parse_error::ParseError result = | 2327 if (values == NULL) { |
2324 ValidateVertexAttrib3fv(this, immediate_data_size, indx, values); | 2328 return parse_error::kParseOutOfBounds; |
2325 if (result != parse_error::kParseNoError) { | |
2326 return result; | |
2327 } | 2329 } |
2328 glVertexAttrib3fv(indx, values); | 2330 glVertexAttrib3fv(indx, values); |
2329 return parse_error::kParseNoError; | 2331 return parse_error::kParseNoError; |
2330 } | 2332 } |
2331 | 2333 |
2332 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( | 2334 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib3fvImmediate( |
2333 uint32 immediate_data_size, const gles2::VertexAttrib3fvImmediate& c) { | 2335 uint32 immediate_data_size, const gles2::VertexAttrib3fvImmediate& c) { |
2334 GLuint indx = static_cast<GLuint>(c.indx); | 2336 GLuint indx = static_cast<GLuint>(c.indx); |
2335 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); | 2337 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); |
| 2338 if (values == NULL) { |
| 2339 return parse_error::kParseOutOfBounds; |
| 2340 } |
| 2341 if (!CheckImmediateDataSize<VertexAttrib3fvImmediate>( |
| 2342 immediate_data_size, 1, sizeof(GLfloat), 3)) { |
| 2343 return parse_error::kParseOutOfBounds; |
| 2344 } |
2336 // Immediate version. | 2345 // Immediate version. |
2337 parse_error::ParseError result = | 2346 if (values == NULL) { |
2338 ValidateVertexAttrib3fvImmediate( | 2347 return parse_error::kParseOutOfBounds; |
2339 this, immediate_data_size, indx, values); | 2348 } |
2340 if (result != parse_error::kParseNoError) { | 2349 if (!CheckImmediateDataSize<VertexAttrib3fvImmediate>( |
2341 return result; | 2350 immediate_data_size, 1, sizeof(GLfloat), 3)) { |
| 2351 return parse_error::kParseOutOfBounds; |
2342 } | 2352 } |
2343 glVertexAttrib3fv(indx, values); | 2353 glVertexAttrib3fv(indx, values); |
2344 return parse_error::kParseNoError; | 2354 return parse_error::kParseNoError; |
2345 } | 2355 } |
2346 | 2356 |
2347 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4f( | 2357 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4f( |
2348 uint32 immediate_data_size, const gles2::VertexAttrib4f& c) { | 2358 uint32 immediate_data_size, const gles2::VertexAttrib4f& c) { |
2349 GLuint indx = static_cast<GLuint>(c.indx); | 2359 GLuint indx = static_cast<GLuint>(c.indx); |
2350 GLfloat x = static_cast<GLfloat>(c.x); | 2360 GLfloat x = static_cast<GLfloat>(c.x); |
2351 GLfloat y = static_cast<GLfloat>(c.y); | 2361 GLfloat y = static_cast<GLfloat>(c.y); |
2352 GLfloat z = static_cast<GLfloat>(c.z); | 2362 GLfloat z = static_cast<GLfloat>(c.z); |
2353 GLfloat w = static_cast<GLfloat>(c.w); | 2363 GLfloat w = static_cast<GLfloat>(c.w); |
2354 parse_error::ParseError result = | |
2355 ValidateVertexAttrib4f(this, immediate_data_size, indx, x, y, z, w); | |
2356 if (result != parse_error::kParseNoError) { | |
2357 return result; | |
2358 } | |
2359 glVertexAttrib4f(indx, x, y, z, w); | 2364 glVertexAttrib4f(indx, x, y, z, w); |
2360 return parse_error::kParseNoError; | 2365 return parse_error::kParseNoError; |
2361 } | 2366 } |
2362 | 2367 |
2363 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4fv( | 2368 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4fv( |
2364 uint32 immediate_data_size, const gles2::VertexAttrib4fv& c) { | 2369 uint32 immediate_data_size, const gles2::VertexAttrib4fv& c) { |
2365 GLuint indx = static_cast<GLuint>(c.indx); | 2370 GLuint indx = static_cast<GLuint>(c.indx); |
2366 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( | 2371 const GLfloat* values = GetSharedMemoryAs<const GLfloat*>( |
2367 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); | 2372 c.values_shm_id, c.values_shm_offset, 0 /* TODO(gman): size */); |
2368 parse_error::ParseError result = | 2373 if (values == NULL) { |
2369 ValidateVertexAttrib4fv(this, immediate_data_size, indx, values); | 2374 return parse_error::kParseOutOfBounds; |
2370 if (result != parse_error::kParseNoError) { | |
2371 return result; | |
2372 } | 2375 } |
2373 glVertexAttrib4fv(indx, values); | 2376 glVertexAttrib4fv(indx, values); |
2374 return parse_error::kParseNoError; | 2377 return parse_error::kParseNoError; |
2375 } | 2378 } |
2376 | 2379 |
2377 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( | 2380 parse_error::ParseError GLES2DecoderImpl::HandleVertexAttrib4fvImmediate( |
2378 uint32 immediate_data_size, const gles2::VertexAttrib4fvImmediate& c) { | 2381 uint32 immediate_data_size, const gles2::VertexAttrib4fvImmediate& c) { |
2379 GLuint indx = static_cast<GLuint>(c.indx); | 2382 GLuint indx = static_cast<GLuint>(c.indx); |
2380 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); | 2383 const GLfloat* values = GetImmediateDataAs<const GLfloat*>(c); |
| 2384 if (values == NULL) { |
| 2385 return parse_error::kParseOutOfBounds; |
| 2386 } |
| 2387 if (!CheckImmediateDataSize<VertexAttrib4fvImmediate>( |
| 2388 immediate_data_size, 1, sizeof(GLfloat), 4)) { |
| 2389 return parse_error::kParseOutOfBounds; |
| 2390 } |
2381 // Immediate version. | 2391 // Immediate version. |
2382 parse_error::ParseError result = | 2392 if (values == NULL) { |
2383 ValidateVertexAttrib4fvImmediate( | 2393 return parse_error::kParseOutOfBounds; |
2384 this, immediate_data_size, indx, values); | 2394 } |
2385 if (result != parse_error::kParseNoError) { | 2395 if (!CheckImmediateDataSize<VertexAttrib4fvImmediate>( |
2386 return result; | 2396 immediate_data_size, 1, sizeof(GLfloat), 4)) { |
| 2397 return parse_error::kParseOutOfBounds; |
2387 } | 2398 } |
2388 glVertexAttrib4fv(indx, values); | 2399 glVertexAttrib4fv(indx, values); |
2389 return parse_error::kParseNoError; | 2400 return parse_error::kParseNoError; |
2390 } | 2401 } |
2391 | 2402 |
2392 parse_error::ParseError GLES2DecoderImpl::HandleViewport( | 2403 parse_error::ParseError GLES2DecoderImpl::HandleViewport( |
2393 uint32 immediate_data_size, const gles2::Viewport& c) { | 2404 uint32 immediate_data_size, const gles2::Viewport& c) { |
2394 GLint x = static_cast<GLint>(c.x); | 2405 GLint x = static_cast<GLint>(c.x); |
2395 GLint y = static_cast<GLint>(c.y); | 2406 GLint y = static_cast<GLint>(c.y); |
2396 GLsizei width = static_cast<GLsizei>(c.width); | 2407 GLsizei width = static_cast<GLsizei>(c.width); |
2397 GLsizei height = static_cast<GLsizei>(c.height); | 2408 GLsizei height = static_cast<GLsizei>(c.height); |
2398 parse_error::ParseError result = | |
2399 ValidateViewport(this, immediate_data_size, x, y, width, height); | |
2400 if (result != parse_error::kParseNoError) { | |
2401 return result; | |
2402 } | |
2403 glViewport(x, y, width, height); | 2409 glViewport(x, y, width, height); |
2404 return parse_error::kParseNoError; | 2410 return parse_error::kParseNoError; |
2405 } | 2411 } |
2406 | 2412 |
2407 parse_error::ParseError GLES2DecoderImpl::HandleSwapBuffers( | 2413 parse_error::ParseError GLES2DecoderImpl::HandleSwapBuffers( |
2408 uint32 immediate_data_size, const gles2::SwapBuffers& c) { | 2414 uint32 immediate_data_size, const gles2::SwapBuffers& c) { |
2409 parse_error::ParseError result = | |
2410 ValidateSwapBuffers(this, immediate_data_size); | |
2411 if (result != parse_error::kParseNoError) { | |
2412 return result; | |
2413 } | |
2414 DoSwapBuffers(); | 2415 DoSwapBuffers(); |
2415 return parse_error::kParseNoError; | 2416 return parse_error::kParseNoError; |
2416 } | 2417 } |
2417 | 2418 |
OLD | NEW |