Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |