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

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

Issue 2466763002: command buffer: tweak error messages for a few more ES3 commands (Closed)
Patch Set: address comments 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 | no next file » | 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 15260 matching lines...) Expand 10 before | Expand all | Expand 10 after
15271 if (!result) { 15271 if (!result) {
15272 return error::kOutOfBounds; 15272 return error::kOutOfBounds;
15273 } 15273 }
15274 // Check that the client initialized the result. 15274 // Check that the client initialized the result.
15275 if (result->success != 0) { 15275 if (result->success != 0) {
15276 return error::kInvalidArguments; 15276 return error::kInvalidArguments;
15277 } 15277 }
15278 Program* program = GetProgramInfoNotShader( 15278 Program* program = GetProgramInfoNotShader(
15279 program_id, "glGetTransformFeedbackVarying"); 15279 program_id, "glGetTransformFeedbackVarying");
15280 if (!program) { 15280 if (!program) {
15281 // An error is already set.
15281 return error::kNoError; 15282 return error::kNoError;
15282 } 15283 }
15283 GLuint service_id = program->service_id(); 15284 GLuint service_id = program->service_id();
15284 GLint link_status = GL_FALSE; 15285 GLint link_status = GL_FALSE;
15285 glGetProgramiv(service_id, GL_LINK_STATUS, &link_status); 15286 glGetProgramiv(service_id, GL_LINK_STATUS, &link_status);
15286 if (link_status != GL_TRUE) { 15287 if (link_status != GL_TRUE) {
15287 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 15288 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
15288 "glGetTransformFeedbackVarying", "program not linked"); 15289 "glGetTransformFeedbackVarying", "program not linked");
15289 return error::kNoError; 15290 return error::kNoError;
15290 } 15291 }
(...skipping 1916 matching lines...) Expand 10 before | Expand all | Expand 10 after
17207 17208
17208 GLenum status = glClientWaitSync(service_sync, flags, timeout); 17209 GLenum status = glClientWaitSync(service_sync, flags, timeout);
17209 switch (status) { 17210 switch (status) {
17210 case GL_ALREADY_SIGNALED: 17211 case GL_ALREADY_SIGNALED:
17211 case GL_TIMEOUT_EXPIRED: 17212 case GL_TIMEOUT_EXPIRED:
17212 case GL_CONDITION_SATISFIED: 17213 case GL_CONDITION_SATISFIED:
17213 break; 17214 break;
17214 case GL_WAIT_FAILED: 17215 case GL_WAIT_FAILED:
17215 // Avoid leaking GL errors when using virtual contexts. 17216 // Avoid leaking GL errors when using virtual contexts.
17216 LOCAL_PEEK_GL_ERROR(function_name); 17217 LOCAL_PEEK_GL_ERROR(function_name);
17217 break; 17218 *result_dst = status;
17219 // If validation is complete, this only happens if the context is lost.
17220 return error::kLostContext;
17218 default: 17221 default:
17219 NOTREACHED(); 17222 NOTREACHED();
17220 break; 17223 break;
17221 } 17224 }
17222 *result_dst = status; 17225 *result_dst = status;
17223 return error::kNoError; 17226 return error::kNoError;
17224 } 17227 }
17225 17228
17226 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size, 17229 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size,
17227 const volatile void* cmd_data) { 17230 const volatile void* cmd_data) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
17382 } 17385 }
17383 if (*result != 0) { 17386 if (*result != 0) {
17384 *result = 0; 17387 *result = 0;
17385 return error::kInvalidArguments; 17388 return error::kInvalidArguments;
17386 } 17389 }
17387 if (!validators_->buffer_target.IsValid(target)) { 17390 if (!validators_->buffer_target.IsValid(target)) {
17388 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target"); 17391 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target");
17389 return error::kNoError; 17392 return error::kNoError;
17390 } 17393 }
17391 if (size == 0) { 17394 if (size == 0) {
17392 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "size is zero"); 17395 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "length is zero");
17393 return error::kNoError; 17396 return error::kNoError;
17394 } 17397 }
17395 Buffer* buffer = buffer_manager()->RequestBufferAccess( 17398 Buffer* buffer = buffer_manager()->RequestBufferAccess(
17396 &state_, target, offset, size, func_name); 17399 &state_, target, offset, size, func_name);
17397 if (!buffer) { 17400 if (!buffer) {
17401 // An error is already set.
17398 return error::kNoError; 17402 return error::kNoError;
17399 } 17403 }
17400 if (state_.bound_transform_feedback->active() && 17404 if (state_.bound_transform_feedback->active() &&
17401 !state_.bound_transform_feedback->paused()) { 17405 !state_.bound_transform_feedback->paused()) {
17402 size_t used_binding_count = 17406 size_t used_binding_count =
17403 state_.current_program->effective_transform_feedback_varyings().size(); 17407 state_.current_program->effective_transform_feedback_varyings().size();
17404 if (state_.bound_transform_feedback->UsesBuffer( 17408 if (state_.bound_transform_feedback->UsesBuffer(
17405 used_binding_count, buffer)) { 17409 used_binding_count, buffer)) {
17406 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, 17410 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name,
17407 "active transform feedback is using this buffer"); 17411 "active transform feedback is using this buffer");
(...skipping 10 matching lines...) Expand all
17418 GL_MAP_WRITE_BIT | 17422 GL_MAP_WRITE_BIT |
17419 GL_MAP_INVALIDATE_RANGE_BIT | 17423 GL_MAP_INVALIDATE_RANGE_BIT |
17420 GL_MAP_INVALIDATE_BUFFER_BIT | 17424 GL_MAP_INVALIDATE_BUFFER_BIT |
17421 GL_MAP_FLUSH_EXPLICIT_BIT | 17425 GL_MAP_FLUSH_EXPLICIT_BIT |
17422 GL_MAP_UNSYNCHRONIZED_BIT))) { 17426 GL_MAP_UNSYNCHRONIZED_BIT))) {
17423 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "invalid access bits"); 17427 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "invalid access bits");
17424 return error::kNoError; 17428 return error::kNoError;
17425 } 17429 }
17426 if (!AnyBitsSet(access, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) { 17430 if (!AnyBitsSet(access, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) {
17427 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, 17431 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name,
17428 "neither MAP_READ_BIT nore MAP_WRITE_BIT is set"); 17432 "neither MAP_READ_BIT nor MAP_WRITE_BIT is set");
17429 return error::kNoError; 17433 return error::kNoError;
17430 } 17434 }
17431 if (AllBitsSet(access, GL_MAP_READ_BIT) && 17435 if (AllBitsSet(access, GL_MAP_READ_BIT) &&
17432 AnyBitsSet(access, (GL_MAP_INVALIDATE_RANGE_BIT | 17436 AnyBitsSet(access, (GL_MAP_INVALIDATE_RANGE_BIT |
17433 GL_MAP_INVALIDATE_BUFFER_BIT | 17437 GL_MAP_INVALIDATE_BUFFER_BIT |
17434 GL_MAP_UNSYNCHRONIZED_BIT))) { 17438 GL_MAP_UNSYNCHRONIZED_BIT))) {
17435 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, 17439 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name,
17436 "Incompatible access bits with MAP_READ_BIT"); 17440 "incompatible access bits with MAP_READ_BIT");
17437 return error::kNoError; 17441 return error::kNoError;
17438 } 17442 }
17439 if (AllBitsSet(access, GL_MAP_FLUSH_EXPLICIT_BIT) && 17443 if (AllBitsSet(access, GL_MAP_FLUSH_EXPLICIT_BIT) &&
17440 !AllBitsSet(access, GL_MAP_WRITE_BIT)) { 17444 !AllBitsSet(access, GL_MAP_WRITE_BIT)) {
17441 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, 17445 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name,
17442 "MAP_FLUSH_EXPLICIT_BIT set without MAP_WRITE_BIT"); 17446 "MAP_FLUSH_EXPLICIT_BIT set without MAP_WRITE_BIT");
17443 return error::kNoError; 17447 return error::kNoError;
17444 } 17448 }
17445 if (AllBitsSet(access, GL_MAP_INVALIDATE_BUFFER_BIT)) { 17449 if (AllBitsSet(access, GL_MAP_INVALIDATE_BUFFER_BIT)) {
17446 // To be on the safe side, always map GL_MAP_INVALIDATE_BUFFER_BIT to 17450 // To be on the safe side, always map GL_MAP_INVALIDATE_BUFFER_BIT to
17447 // GL_MAP_INVALIDATE_RANGE_BIT. 17451 // GL_MAP_INVALIDATE_RANGE_BIT.
17448 access = (access & ~GL_MAP_INVALIDATE_BUFFER_BIT); 17452 access = (access & ~GL_MAP_INVALIDATE_BUFFER_BIT);
17449 access = (access | GL_MAP_INVALIDATE_RANGE_BIT); 17453 access = (access | GL_MAP_INVALIDATE_RANGE_BIT);
17450 } 17454 }
17451 // Always filter out GL_MAP_UNSYNCHRONIZED_BIT to get rid of undefined 17455 // Always filter out GL_MAP_UNSYNCHRONIZED_BIT to get rid of undefined
17452 // behaviors. 17456 // behaviors.
17453 access = (access & ~GL_MAP_UNSYNCHRONIZED_BIT); 17457 access = (access & ~GL_MAP_UNSYNCHRONIZED_BIT);
17454 if (AllBitsSet(access, GL_MAP_WRITE_BIT) && 17458 if (AllBitsSet(access, GL_MAP_WRITE_BIT) &&
17455 !AllBitsSet(access, GL_MAP_INVALIDATE_RANGE_BIT)) { 17459 !AllBitsSet(access, GL_MAP_INVALIDATE_RANGE_BIT)) {
17456 access = (access | GL_MAP_READ_BIT); 17460 access = (access | GL_MAP_READ_BIT);
17457 } 17461 }
17458 void* ptr = glMapBufferRange(target, offset, size, access); 17462 void* ptr = glMapBufferRange(target, offset, size, access);
17459 if (ptr == nullptr) { 17463 if (ptr == nullptr) {
17464 // This should mean GL_OUT_OF_MEMORY (or context loss).
17465 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(func_name);
17460 return error::kNoError; 17466 return error::kNoError;
17461 } 17467 }
17462 buffer->SetMappedRange(offset, size, access, ptr, 17468 buffer->SetMappedRange(offset, size, access, ptr,
17463 GetSharedMemoryBuffer(data_shm_id), 17469 GetSharedMemoryBuffer(data_shm_id),
17464 static_cast<unsigned int>(data_shm_offset)); 17470 static_cast<unsigned int>(data_shm_offset));
17465 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) { 17471 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) {
17466 memcpy(mem, ptr, size); 17472 memcpy(mem, ptr, size);
17467 } 17473 }
17468 *result = 1; 17474 *result = 1;
17469 return error::kNoError; 17475 return error::kNoError;
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after
18760 } 18766 }
18761 18767
18762 // Include the auto-generated part of this file. We split this because it means 18768 // 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 18769 // 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. 18770 // instead of having to edit some template or the code generator.
18765 #include "base/macros.h" 18771 #include "base/macros.h"
18766 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 18772 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
18767 18773
18768 } // namespace gles2 18774 } // namespace gles2
18769 } // namespace gpu 18775 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698