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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2470623002: command buffer: audit validation of ES3 commands (part 3) (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 15197 matching lines...) Expand 10 before | Expand all | Expand 10 after
15208 if (!program || !program->IsValid()) { 15208 if (!program || !program->IsValid()) {
15209 return error::kNoError; 15209 return error::kNoError;
15210 } 15210 }
15211 program->GetProgramInfo(program_manager(), bucket); 15211 program->GetProgramInfo(program_manager(), bucket);
15212 return error::kNoError; 15212 return error::kNoError;
15213 } 15213 }
15214 15214
15215 error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM( 15215 error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM(
15216 uint32_t immediate_data_size, 15216 uint32_t immediate_data_size,
15217 const volatile void* cmd_data) { 15217 const volatile void* cmd_data) {
15218 if (!unsafe_es3_apis_enabled()) 15218 if (!feature_info_->IsWebGL2OrES3Context())
15219 return error::kUnknownCommand; 15219 return error::kUnknownCommand;
15220 const volatile gles2::cmds::GetUniformBlocksCHROMIUM& c = 15220 const volatile gles2::cmds::GetUniformBlocksCHROMIUM& c =
15221 *static_cast<const volatile gles2::cmds::GetUniformBlocksCHROMIUM*>( 15221 *static_cast<const volatile gles2::cmds::GetUniformBlocksCHROMIUM*>(
15222 cmd_data); 15222 cmd_data);
15223 GLuint program_id = static_cast<GLuint>(c.program); 15223 GLuint program_id = static_cast<GLuint>(c.program);
15224 uint32_t bucket_id = c.bucket_id; 15224 uint32_t bucket_id = c.bucket_id;
15225 Bucket* bucket = CreateBucket(bucket_id); 15225 Bucket* bucket = CreateBucket(bucket_id);
15226 bucket->SetSize(sizeof(UniformBlocksHeader)); // in case we fail. 15226 bucket->SetSize(sizeof(UniformBlocksHeader)); // in case we fail.
15227 Program* program = NULL; 15227 Program* program = NULL;
15228 program = GetProgram(program_id); 15228 program = GetProgram(program_id);
15229 if (!program || !program->IsValid()) { 15229 if (!program || !program->IsValid()) {
15230 return error::kNoError; 15230 return error::kNoError;
15231 } 15231 }
15232 program->GetUniformBlocks(bucket); 15232 program->GetUniformBlocks(bucket);
15233 return error::kNoError; 15233 return error::kNoError;
15234 } 15234 }
15235 15235
15236 error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM( 15236 error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM(
15237 uint32_t immediate_data_size, 15237 uint32_t immediate_data_size,
15238 const volatile void* cmd_data) { 15238 const volatile void* cmd_data) {
15239 if (!unsafe_es3_apis_enabled()) 15239 if (!feature_info_->IsWebGL2OrES3Context())
15240 return error::kUnknownCommand; 15240 return error::kUnknownCommand;
15241 const volatile gles2::cmds::GetUniformsES3CHROMIUM& c = 15241 const volatile gles2::cmds::GetUniformsES3CHROMIUM& c =
15242 *static_cast<const volatile gles2::cmds::GetUniformsES3CHROMIUM*>( 15242 *static_cast<const volatile gles2::cmds::GetUniformsES3CHROMIUM*>(
15243 cmd_data); 15243 cmd_data);
15244 GLuint program_id = static_cast<GLuint>(c.program); 15244 GLuint program_id = static_cast<GLuint>(c.program);
15245 uint32_t bucket_id = c.bucket_id; 15245 uint32_t bucket_id = c.bucket_id;
15246 Bucket* bucket = CreateBucket(bucket_id); 15246 Bucket* bucket = CreateBucket(bucket_id);
15247 bucket->SetSize(sizeof(UniformsES3Header)); // in case we fail. 15247 bucket->SetSize(sizeof(UniformsES3Header)); // in case we fail.
15248 Program* program = NULL; 15248 Program* program = NULL;
15249 program = GetProgram(program_id); 15249 program = GetProgram(program_id);
15250 if (!program || !program->IsValid()) { 15250 if (!program || !program->IsValid()) {
15251 return error::kNoError; 15251 return error::kNoError;
15252 } 15252 }
15253 program->GetUniformsES3(bucket); 15253 program->GetUniformsES3(bucket);
15254 return error::kNoError; 15254 return error::kNoError;
15255 } 15255 }
15256 15256
15257 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying( 15257 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying(
15258 uint32_t immediate_data_size, 15258 uint32_t immediate_data_size,
15259 const volatile void* cmd_data) { 15259 const volatile void* cmd_data) {
15260 if (!unsafe_es3_apis_enabled()) 15260 if (!feature_info_->IsWebGL2OrES3Context())
15261 return error::kUnknownCommand; 15261 return error::kUnknownCommand;
15262 const volatile gles2::cmds::GetTransformFeedbackVarying& c = 15262 const volatile gles2::cmds::GetTransformFeedbackVarying& c =
15263 *static_cast<const volatile gles2::cmds::GetTransformFeedbackVarying*>( 15263 *static_cast<const volatile gles2::cmds::GetTransformFeedbackVarying*>(
15264 cmd_data); 15264 cmd_data);
15265 GLuint program_id = c.program; 15265 GLuint program_id = c.program;
15266 GLuint index = c.index; 15266 GLuint index = c.index;
15267 uint32_t name_bucket_id = c.name_bucket_id; 15267 uint32_t name_bucket_id = c.name_bucket_id;
15268 typedef cmds::GetTransformFeedbackVarying::Result Result; 15268 typedef cmds::GetTransformFeedbackVarying::Result Result;
15269 Result* result = GetSharedMemoryAs<Result*>( 15269 Result* result = GetSharedMemoryAs<Result*>(
15270 c.result_shm_id, c.result_shm_offset, sizeof(*result)); 15270 c.result_shm_id, c.result_shm_offset, sizeof(*result));
(...skipping 10 matching lines...) Expand all
15281 return error::kNoError; 15281 return error::kNoError;
15282 } 15282 }
15283 GLuint service_id = program->service_id(); 15283 GLuint service_id = program->service_id();
15284 GLint link_status = GL_FALSE; 15284 GLint link_status = GL_FALSE;
15285 glGetProgramiv(service_id, GL_LINK_STATUS, &link_status); 15285 glGetProgramiv(service_id, GL_LINK_STATUS, &link_status);
15286 if (link_status != GL_TRUE) { 15286 if (link_status != GL_TRUE) {
15287 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 15287 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
15288 "glGetTransformFeedbackVarying", "program not linked"); 15288 "glGetTransformFeedbackVarying", "program not linked");
15289 return error::kNoError; 15289 return error::kNoError;
15290 } 15290 }
15291 GLint num_varyings = 0;
15292 glGetProgramiv(service_id, GL_TRANSFORM_FEEDBACK_VARYINGS, &num_varyings);
15293 if (index >= static_cast<GLuint>(num_varyings)) {
15294 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
15295 "glGetTransformFeedbackVarying", "index out of bounds");
15296 return error::kNoError;
15297 }
15291 GLint max_length = 0; 15298 GLint max_length = 0;
15292 glGetProgramiv( 15299 glGetProgramiv(
15293 service_id, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &max_length); 15300 service_id, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &max_length);
15294 max_length = std::max(1, max_length); 15301 max_length = std::max(1, max_length);
15295 std::vector<char> buffer(max_length); 15302 std::vector<char> buffer(max_length);
15296 GLsizei length = 0; 15303 GLsizei length = 0;
15297 GLsizei size = 0; 15304 GLsizei size = 0;
15298 GLenum type = 0; 15305 GLenum type = 0;
15299 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetTransformFeedbackVarying");
15300 glGetTransformFeedbackVarying( 15306 glGetTransformFeedbackVarying(
15301 service_id, index, max_length, &length, &size, &type, &buffer[0]); 15307 service_id, index, max_length, &length, &size, &type, &buffer[0]);
15302 GLenum error = glGetError();
15303 if (error != GL_NO_ERROR) {
15304 LOCAL_SET_GL_ERROR(error, "glGetTransformFeedbackVarying", "");
15305 return error::kNoError;
15306 }
15307 result->success = 1; // true. 15308 result->success = 1; // true.
15308 result->size = static_cast<int32_t>(size); 15309 result->size = static_cast<int32_t>(size);
15309 result->type = static_cast<uint32_t>(type); 15310 result->type = static_cast<uint32_t>(type);
15310 Bucket* bucket = CreateBucket(name_bucket_id); 15311 Bucket* bucket = CreateBucket(name_bucket_id);
15311 DCHECK(length >= 0 && length < max_length); 15312 DCHECK(length >= 0 && length < max_length);
15312 buffer[length] = '\0'; // Just to be safe. 15313 buffer[length] = '\0'; // Just to be safe.
15313 bucket->SetFromString(&buffer[0]); 15314 bucket->SetFromString(&buffer[0]);
15314 return error::kNoError; 15315 return error::kNoError;
15315 } 15316 }
15316 15317
15317 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVaryingsCHROMIUM( 15318 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVaryingsCHROMIUM(
15318 uint32_t immediate_data_size, 15319 uint32_t immediate_data_size,
15319 const volatile void* cmd_data) { 15320 const volatile void* cmd_data) {
15320 if (!unsafe_es3_apis_enabled()) 15321 if (!feature_info_->IsWebGL2OrES3Context())
15321 return error::kUnknownCommand; 15322 return error::kUnknownCommand;
15322 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM& c = 15323 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM& c =
15323 *static_cast< 15324 *static_cast<
15324 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM*>( 15325 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM*>(
15325 cmd_data); 15326 cmd_data);
15326 GLuint program_id = static_cast<GLuint>(c.program); 15327 GLuint program_id = static_cast<GLuint>(c.program);
15327 uint32_t bucket_id = c.bucket_id; 15328 uint32_t bucket_id = c.bucket_id;
15328 Bucket* bucket = CreateBucket(bucket_id); 15329 Bucket* bucket = CreateBucket(bucket_id);
15329 bucket->SetSize(sizeof(TransformFeedbackVaryingsHeader)); // in case we fail. 15330 bucket->SetSize(sizeof(TransformFeedbackVaryingsHeader)); // in case we fail.
15330 Program* program = NULL; 15331 Program* program = NULL;
(...skipping 1808 matching lines...) Expand 10 before | Expand all | Expand 10 after
17139 memcpy(target_matrix, kIdentityMatrix, sizeof(kIdentityMatrix)); 17140 memcpy(target_matrix, kIdentityMatrix, sizeof(kIdentityMatrix));
17140 // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV 17141 // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV
17141 // since the values of the _NV and _CHROMIUM tokens match. 17142 // since the values of the _NV and _CHROMIUM tokens match.
17142 glMatrixLoadIdentityEXT(matrix_mode); 17143 glMatrixLoadIdentityEXT(matrix_mode);
17143 } 17144 }
17144 17145
17145 error::Error GLES2DecoderImpl::HandleUniformBlockBinding( 17146 error::Error GLES2DecoderImpl::HandleUniformBlockBinding(
17146 uint32_t immediate_data_size, 17147 uint32_t immediate_data_size,
17147 const volatile void* cmd_data) { 17148 const volatile void* cmd_data) {
17148 const char* func_name = "glUniformBlockBinding"; 17149 const char* func_name = "glUniformBlockBinding";
17149 if (!unsafe_es3_apis_enabled()) 17150 if (!feature_info_->IsWebGL2OrES3Context())
17150 return error::kUnknownCommand; 17151 return error::kUnknownCommand;
17151 const volatile gles2::cmds::UniformBlockBinding& c = 17152 const volatile gles2::cmds::UniformBlockBinding& c =
17152 *static_cast<const volatile gles2::cmds::UniformBlockBinding*>(cmd_data); 17153 *static_cast<const volatile gles2::cmds::UniformBlockBinding*>(cmd_data);
17153 GLuint client_id = c.program; 17154 GLuint client_id = c.program;
17154 GLuint index = static_cast<GLuint>(c.index); 17155 GLuint index = static_cast<GLuint>(c.index);
17155 GLuint binding = static_cast<GLuint>(c.binding); 17156 GLuint binding = static_cast<GLuint>(c.binding);
17156 Program* program = GetProgramInfoNotShader(client_id, func_name); 17157 Program* program = GetProgramInfoNotShader(client_id, func_name);
17157 if (!program) { 17158 if (!program) {
17158 return error::kNoError; 17159 return error::kNoError;
17159 } 17160 }
(...skipping 10 matching lines...) Expand all
17170 GLuint service_id = program->service_id(); 17171 GLuint service_id = program->service_id();
17171 glUniformBlockBinding(service_id, index, binding); 17172 glUniformBlockBinding(service_id, index, binding);
17172 program->SetUniformBlockBinding(index, binding); 17173 program->SetUniformBlockBinding(index, binding);
17173 return error::kNoError; 17174 return error::kNoError;
17174 } 17175 }
17175 17176
17176 error::Error GLES2DecoderImpl::HandleClientWaitSync( 17177 error::Error GLES2DecoderImpl::HandleClientWaitSync(
17177 uint32_t immediate_data_size, 17178 uint32_t immediate_data_size,
17178 const volatile void* cmd_data) { 17179 const volatile void* cmd_data) {
17179 const char* function_name = "glClientWaitSync"; 17180 const char* function_name = "glClientWaitSync";
17180 if (!unsafe_es3_apis_enabled()) 17181 if (!feature_info_->IsWebGL2OrES3Context())
17181 return error::kUnknownCommand; 17182 return error::kUnknownCommand;
17182 const volatile gles2::cmds::ClientWaitSync& c = 17183 const volatile gles2::cmds::ClientWaitSync& c =
17183 *static_cast<const volatile gles2::cmds::ClientWaitSync*>(cmd_data); 17184 *static_cast<const volatile gles2::cmds::ClientWaitSync*>(cmd_data);
17184 const GLuint sync = static_cast<GLuint>(c.sync); 17185 const GLuint sync = static_cast<GLuint>(c.sync);
17185 GLbitfield flags = static_cast<GLbitfield>(c.flags); 17186 GLbitfield flags = static_cast<GLbitfield>(c.flags);
17186 const GLuint64 timeout = c.timeout(); 17187 const GLuint64 timeout = c.timeout();
17187 typedef cmds::ClientWaitSync::Result Result; 17188 typedef cmds::ClientWaitSync::Result Result;
17188 Result* result_dst = GetSharedMemoryAs<Result*>( 17189 Result* result_dst = GetSharedMemoryAs<Result*>(
17189 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); 17190 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
17190 if (!result_dst) { 17191 if (!result_dst) {
(...skipping 28 matching lines...) Expand all
17219 NOTREACHED(); 17220 NOTREACHED();
17220 break; 17221 break;
17221 } 17222 }
17222 *result_dst = status; 17223 *result_dst = status;
17223 return error::kNoError; 17224 return error::kNoError;
17224 } 17225 }
17225 17226
17226 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size, 17227 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size,
17227 const volatile void* cmd_data) { 17228 const volatile void* cmd_data) {
17228 const char* function_name = "glWaitSync"; 17229 const char* function_name = "glWaitSync";
17229 if (!unsafe_es3_apis_enabled()) 17230 if (!feature_info_->IsWebGL2OrES3Context())
17230 return error::kUnknownCommand; 17231 return error::kUnknownCommand;
17231 const volatile gles2::cmds::WaitSync& c = 17232 const volatile gles2::cmds::WaitSync& c =
17232 *static_cast<const volatile gles2::cmds::WaitSync*>(cmd_data); 17233 *static_cast<const volatile gles2::cmds::WaitSync*>(cmd_data);
17233 const GLuint sync = static_cast<GLuint>(c.sync); 17234 const GLuint sync = static_cast<GLuint>(c.sync);
17234 const GLbitfield flags = static_cast<GLbitfield>(c.flags); 17235 const GLbitfield flags = static_cast<GLbitfield>(c.flags);
17235 const GLuint64 timeout = c.timeout(); 17236 const GLuint64 timeout = c.timeout();
17236 GLsync service_sync = 0; 17237 GLsync service_sync = 0;
17237 if (!group_->GetSyncServiceId(sync, &service_sync)) { 17238 if (!group_->GetSyncServiceId(sync, &service_sync)) {
17238 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid sync"); 17239 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid sync");
17239 return error::kNoError; 17240 return error::kNoError;
(...skipping 19 matching lines...) Expand all
17259 if (flags != 0) { 17260 if (flags != 0) {
17260 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid flags"); 17261 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid flags");
17261 return 0; 17262 return 0;
17262 } 17263 }
17263 return glFenceSync(condition, flags); 17264 return glFenceSync(condition, flags);
17264 } 17265 }
17265 17266
17266 error::Error GLES2DecoderImpl::HandleGetInternalformativ( 17267 error::Error GLES2DecoderImpl::HandleGetInternalformativ(
17267 uint32_t immediate_data_size, 17268 uint32_t immediate_data_size,
17268 const volatile void* cmd_data) { 17269 const volatile void* cmd_data) {
17269 if (!unsafe_es3_apis_enabled()) 17270 if (!feature_info_->IsWebGL2OrES3Context())
17270 return error::kUnknownCommand; 17271 return error::kUnknownCommand;
17271 const volatile gles2::cmds::GetInternalformativ& c = 17272 const volatile gles2::cmds::GetInternalformativ& c =
17272 *static_cast<const volatile gles2::cmds::GetInternalformativ*>(cmd_data); 17273 *static_cast<const volatile gles2::cmds::GetInternalformativ*>(cmd_data);
17273 GLenum target = static_cast<GLenum>(c.target); 17274 GLenum target = static_cast<GLenum>(c.target);
17274 GLenum format = static_cast<GLenum>(c.format); 17275 GLenum format = static_cast<GLenum>(c.format);
17275 GLenum pname = static_cast<GLenum>(c.pname); 17276 GLenum pname = static_cast<GLenum>(c.pname);
17276 if (!validators_->render_buffer_target.IsValid(target)) { 17277 if (!validators_->render_buffer_target.IsValid(target)) {
17277 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", target, "target"); 17278 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", target, "target");
17278 return error::kNoError; 17279 return error::kNoError;
17279 } 17280 }
17280 if (!validators_->render_buffer_format.IsValid(format)) { 17281 if (!validators_->render_buffer_format.IsValid(format)) {
17281 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", format, "format"); 17282 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", format,
17283 "internalformat");
17282 return error::kNoError; 17284 return error::kNoError;
17283 } 17285 }
17284 if (!validators_->internal_format_parameter.IsValid(pname)) { 17286 if (!validators_->internal_format_parameter.IsValid(pname)) {
17285 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", pname, "pname"); 17287 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", pname, "pname");
17286 return error::kNoError; 17288 return error::kNoError;
17287 } 17289 }
17288 17290
17289 typedef cmds::GetInternalformativ::Result Result; 17291 typedef cmds::GetInternalformativ::Result Result;
17290 GLsizei num_values = 0; 17292 GLsizei num_values = 0;
17291 std::vector<GLint> samples; 17293 std::vector<GLint> samples;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
17336 // Check that the client initialized the result. 17338 // Check that the client initialized the result.
17337 if (result->size != 0) { 17339 if (result->size != 0) {
17338 return error::kInvalidArguments; 17340 return error::kInvalidArguments;
17339 } 17341 }
17340 if (gl_version_info().IsLowerThanGL(4, 2)) { 17342 if (gl_version_info().IsLowerThanGL(4, 2)) {
17341 switch (pname) { 17343 switch (pname) {
17342 case GL_NUM_SAMPLE_COUNTS: 17344 case GL_NUM_SAMPLE_COUNTS:
17343 params[0] = static_cast<GLint>(samples.size()); 17345 params[0] = static_cast<GLint>(samples.size());
17344 break; 17346 break;
17345 case GL_SAMPLES: 17347 case GL_SAMPLES:
17346 for (size_t ii = 0; ii < samples.size(); ++ii) { 17348 {
17347 params[ii] = samples[ii]; 17349 // TODO(kainino): should add a test for this code if it's kept
Kai Ninomiya 2016/11/01 01:40:29 Need to resolve this before committing.
17350 size_t copyCount = std::min(
17351 samples.size(), static_cast<size_t>(result->GetNumResults()));
piman 2016/11/01 02:38:15 Drive-by: you don't want to read result->GetNumRes
17352 for (size_t ii = 0; ii < copyCount; ++ii) {
17353 params[ii] = samples[ii];
17354 }
17348 } 17355 }
17349 break; 17356 break;
17350 default: 17357 default:
17351 NOTREACHED(); 17358 NOTREACHED();
17352 break; 17359 break;
17353 } 17360 }
17354 } else { 17361 } else {
17355 glGetInternalformativ(target, format, pname, num_values, params); 17362 glGetInternalformativ(target, format, pname, num_values, params);
17356 } 17363 }
17357 result->SetNumResults(num_values); 17364 result->SetNumResults(num_values);
17358 return error::kNoError; 17365 return error::kNoError;
17359 } 17366 }
17360 17367
17361 error::Error GLES2DecoderImpl::HandleMapBufferRange( 17368 error::Error GLES2DecoderImpl::HandleMapBufferRange(
17362 uint32_t immediate_data_size, const volatile void* cmd_data) { 17369 uint32_t immediate_data_size, const volatile void* cmd_data) {
17363 if (!unsafe_es3_apis_enabled()) { 17370 if (!feature_info_->IsWebGL2OrES3Context()) {
17364 return error::kUnknownCommand; 17371 return error::kUnknownCommand;
17365 } 17372 }
17366 17373
17367 const char* func_name = "glMapBufferRange"; 17374 const char* func_name = "glMapBufferRange";
17368 const volatile gles2::cmds::MapBufferRange& c = 17375 const volatile gles2::cmds::MapBufferRange& c =
17369 *static_cast<const volatile gles2::cmds::MapBufferRange*>(cmd_data); 17376 *static_cast<const volatile gles2::cmds::MapBufferRange*>(cmd_data);
17370 GLenum target = static_cast<GLenum>(c.target); 17377 GLenum target = static_cast<GLenum>(c.target);
17371 GLbitfield access = static_cast<GLbitfield>(c.access); 17378 GLbitfield access = static_cast<GLbitfield>(c.access);
17372 GLintptr offset = static_cast<GLintptr>(c.offset); 17379 GLintptr offset = static_cast<GLintptr>(c.offset);
17373 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 17380 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
17464 static_cast<unsigned int>(data_shm_offset)); 17471 static_cast<unsigned int>(data_shm_offset));
17465 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) { 17472 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) {
17466 memcpy(mem, ptr, size); 17473 memcpy(mem, ptr, size);
17467 } 17474 }
17468 *result = 1; 17475 *result = 1;
17469 return error::kNoError; 17476 return error::kNoError;
17470 } 17477 }
17471 17478
17472 error::Error GLES2DecoderImpl::HandleUnmapBuffer( 17479 error::Error GLES2DecoderImpl::HandleUnmapBuffer(
17473 uint32_t immediate_data_size, const volatile void* cmd_data) { 17480 uint32_t immediate_data_size, const volatile void* cmd_data) {
17474 if (!unsafe_es3_apis_enabled()) { 17481 if (!feature_info_->IsWebGL2OrES3Context()) {
17475 return error::kUnknownCommand; 17482 return error::kUnknownCommand;
17476 } 17483 }
17477 const char* func_name = "glUnmapBuffer"; 17484 const char* func_name = "glUnmapBuffer";
17478 17485
17479 const volatile gles2::cmds::UnmapBuffer& c = 17486 const volatile gles2::cmds::UnmapBuffer& c =
17480 *static_cast<const volatile gles2::cmds::UnmapBuffer*>(cmd_data); 17487 *static_cast<const volatile gles2::cmds::UnmapBuffer*>(cmd_data);
17481 GLenum target = static_cast<GLenum>(c.target); 17488 GLenum target = static_cast<GLenum>(c.target);
17482 17489
17483 if (!validators_->buffer_target.IsValid(target)) { 17490 if (!validators_->buffer_target.IsValid(target)) {
17484 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target"); 17491 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target");
(...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after
18760 } 18767 }
18761 18768
18762 // Include the auto-generated part of this file. We split this because it means 18769 // Include the auto-generated part of this file. We split this because it means
18763 // we can easily edit the non-auto generated parts right here in this file 18770 // we can easily edit the non-auto generated parts right here in this file
18764 // instead of having to edit some template or the code generator. 18771 // instead of having to edit some template or the code generator.
18765 #include "base/macros.h" 18772 #include "base/macros.h"
18766 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 18773 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
18767 18774
18768 } // namespace gles2 18775 } // namespace gles2
18769 } // namespace gpu 18776 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698