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

Side by Side Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 10893034: Add ENUM value to synthesized GL_INVALID_ENUM errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months 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 | Annotate | Revision Log
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 // A class to emulate GLES2 over command buffers. 5 // A class to emulate GLES2 over command buffers.
6 6
7 #include "../client/gles2_implementation.h" 7 #include "../client/gles2_implementation.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <map> 10 #include <map>
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 last_error_ = msg; 670 last_error_ = msg;
671 } 671 }
672 if (error_message_callback_) { 672 if (error_message_callback_) {
673 std::string temp(GLES2Util::GetStringError(error) + " : " + 673 std::string temp(GLES2Util::GetStringError(error) + " : " +
674 function_name + ": " + (msg ? msg : "")); 674 function_name + ": " + (msg ? msg : ""));
675 error_message_callback_->OnErrorMessage(temp.c_str(), 0); 675 error_message_callback_->OnErrorMessage(temp.c_str(), 0);
676 } 676 }
677 error_bits_ |= GLES2Util::GLErrorToErrorBit(error); 677 error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
678 } 678 }
679 679
680 void GLES2Implementation::SetGLErrorInvalidEnum(
681 const char* function_name, GLenum value, const char* label) {
682 SetGLError(GL_INVALID_ENUM, function_name,
683 (std::string(label) + " was " +
684 GLES2Util::GetStringEnum(value)).c_str());
685 }
686
680 bool GLES2Implementation::GetBucketContents(uint32 bucket_id, 687 bool GLES2Implementation::GetBucketContents(uint32 bucket_id,
681 std::vector<int8>* data) { 688 std::vector<int8>* data) {
682 TRACE_EVENT0("gpu", "GLES2::GetBucketContents"); 689 TRACE_EVENT0("gpu", "GLES2::GetBucketContents");
683 GPU_DCHECK(data); 690 GPU_DCHECK(data);
684 const uint32 kStartSize = 32 * 1024; 691 const uint32 kStartSize = 32 * 1024;
685 ScopedTransferBufferPtr buffer(kStartSize, helper_, transfer_buffer_); 692 ScopedTransferBufferPtr buffer(kStartSize, helper_, transfer_buffer_);
686 if (!buffer.valid()) { 693 if (!buffer.valid()) {
687 return false; 694 return false;
688 } 695 }
689 typedef cmd::GetBucketStart::Result Result; 696 typedef cmd::GetBucketStart::Result Result;
(...skipping 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after
2346 } 2353 }
2347 } 2354 }
2348 2355
2349 void GLES2Implementation::ActiveTexture(GLenum texture) { 2356 void GLES2Implementation::ActiveTexture(GLenum texture) {
2350 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2357 GPU_CLIENT_SINGLE_THREAD_CHECK();
2351 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glActiveTexture(" 2358 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glActiveTexture("
2352 << GLES2Util::GetStringEnum(texture) << ")"); 2359 << GLES2Util::GetStringEnum(texture) << ")");
2353 GLuint texture_index = texture - GL_TEXTURE0; 2360 GLuint texture_index = texture - GL_TEXTURE0;
2354 if (texture_index >= static_cast<GLuint>( 2361 if (texture_index >= static_cast<GLuint>(
2355 gl_state_.int_state.max_combined_texture_image_units)) { 2362 gl_state_.int_state.max_combined_texture_image_units)) {
2356 SetGLError( 2363 SetGLErrorInvalidEnum(
2357 GL_INVALID_ENUM, "glActiveTexture", "texture_unit out of range."); 2364 "glActiveTexture", texture, "texture");
2358 return; 2365 return;
2359 } 2366 }
2360 2367
2361 active_texture_unit_ = texture_index; 2368 active_texture_unit_ = texture_index;
2362 helper_->ActiveTexture(texture); 2369 helper_->ActiveTexture(texture);
2363 } 2370 }
2364 2371
2365 // NOTE #1: On old versions of OpenGL, calling glBindXXX with an unused id 2372 // NOTE #1: On old versions of OpenGL, calling glBindXXX with an unused id
2366 // generates a new resource. On newer versions of OpenGL they don't. The code 2373 // generates a new resource. On newer versions of OpenGL they don't. The code
2367 // related to binding below will need to change if we switch to the new OpenGL 2374 // related to binding below will need to change if we switch to the new OpenGL
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
2616 break; 2623 break;
2617 case GL_VERTEX_ATTRIB_ARRAY_TYPE: 2624 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
2618 *param = info->type(); 2625 *param = info->type();
2619 break; 2626 break;
2620 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: 2627 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
2621 *param = info->normalized(); 2628 *param = info->normalized();
2622 break; 2629 break;
2623 case GL_CURRENT_VERTEX_ATTRIB: 2630 case GL_CURRENT_VERTEX_ATTRIB:
2624 return false; // pass through to service side. 2631 return false; // pass through to service side.
2625 default: 2632 default:
2626 SetGLError(GL_INVALID_ENUM, "glGetVertexAttrib", "invalid enum"); 2633 SetGLErrorInvalidEnum("glGetVertexAttrib", pname, "pname");
2627 break; 2634 break;
2628 } 2635 }
2629 return true; 2636 return true;
2630 } 2637 }
2631 #endif // GLES2_SUPPORT_CLIENT_SIDE_ARRAYS 2638 #endif // GLES2_SUPPORT_CLIENT_SIDE_ARRAYS
2632 2639
2633 void GLES2Implementation::GetVertexAttribfv( 2640 void GLES2Implementation::GetVertexAttribfv(
2634 GLuint index, GLenum pname, GLfloat* params) { 2641 GLuint index, GLenum pname, GLfloat* params) {
2635 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2642 GPU_CLIENT_SINGLE_THREAD_CHECK();
2636 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribfv(" 2643 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribfv("
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2717 2724
2718 void* GLES2Implementation::MapBufferSubDataCHROMIUM( 2725 void* GLES2Implementation::MapBufferSubDataCHROMIUM(
2719 GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) { 2726 GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) {
2720 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2727 GPU_CLIENT_SINGLE_THREAD_CHECK();
2721 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapBufferSubDataCHROMIUM(" 2728 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapBufferSubDataCHROMIUM("
2722 << target << ", " << offset << ", " << size << ", " 2729 << target << ", " << offset << ", " << size << ", "
2723 << GLES2Util::GetStringEnum(access) << ")"); 2730 << GLES2Util::GetStringEnum(access) << ")");
2724 // NOTE: target is NOT checked because the service will check it 2731 // NOTE: target is NOT checked because the service will check it
2725 // and we don't know what targets are valid. 2732 // and we don't know what targets are valid.
2726 if (access != GL_WRITE_ONLY) { 2733 if (access != GL_WRITE_ONLY) {
2727 SetGLError( 2734 SetGLErrorInvalidEnum(
2728 GL_INVALID_ENUM, "glMapBufferSubDataCHROMIUM", "bad access mode"); 2735 "glMapBufferSubDataCHROMIUM", access, "access");
2729 return NULL; 2736 return NULL;
2730 } 2737 }
2731 if (offset < 0 || size < 0) { 2738 if (offset < 0 || size < 0) {
2732 SetGLError(GL_INVALID_VALUE, "glMapBufferSubDataCHROMIUM", "bad range"); 2739 SetGLError(GL_INVALID_VALUE, "glMapBufferSubDataCHROMIUM", "bad range");
2733 return NULL; 2740 return NULL;
2734 } 2741 }
2735 int32 shm_id; 2742 int32 shm_id;
2736 unsigned int shm_offset; 2743 unsigned int shm_offset;
2737 void* mem = mapped_memory_->Alloc(size, &shm_id, &shm_offset); 2744 void* mem = mapped_memory_->Alloc(size, &shm_id, &shm_offset);
2738 if (!mem) { 2745 if (!mem) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 GLenum access) { 2786 GLenum access) {
2780 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2787 GPU_CLIENT_SINGLE_THREAD_CHECK();
2781 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapTexSubImage2DCHROMIUM(" 2788 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapTexSubImage2DCHROMIUM("
2782 << target << ", " << level << ", " 2789 << target << ", " << level << ", "
2783 << xoffset << ", " << yoffset << ", " 2790 << xoffset << ", " << yoffset << ", "
2784 << width << ", " << height << ", " 2791 << width << ", " << height << ", "
2785 << GLES2Util::GetStringTextureFormat(format) << ", " 2792 << GLES2Util::GetStringTextureFormat(format) << ", "
2786 << GLES2Util::GetStringPixelType(type) << ", " 2793 << GLES2Util::GetStringPixelType(type) << ", "
2787 << GLES2Util::GetStringEnum(access) << ")"); 2794 << GLES2Util::GetStringEnum(access) << ")");
2788 if (access != GL_WRITE_ONLY) { 2795 if (access != GL_WRITE_ONLY) {
2789 SetGLError( 2796 SetGLErrorInvalidEnum(
2790 GL_INVALID_ENUM, "glMapTexSubImage2DCHROMIUM", "bad access mode"); 2797 "glMapTexSubImage2DCHROMIUM", access, "access");
2791 return NULL; 2798 return NULL;
2792 } 2799 }
2793 // NOTE: target is NOT checked because the service will check it 2800 // NOTE: target is NOT checked because the service will check it
2794 // and we don't know what targets are valid. 2801 // and we don't know what targets are valid.
2795 if (level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0) { 2802 if (level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0) {
2796 SetGLError( 2803 SetGLError(
2797 GL_INVALID_VALUE, "glMapTexSubImage2DCHROMIUM", "bad dimensions"); 2804 GL_INVALID_VALUE, "glMapTexSubImage2DCHROMIUM", "bad dimensions");
2798 return NULL; 2805 return NULL;
2799 } 2806 }
2800 uint32 size; 2807 uint32 size;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
2912 GPU_CLIENT_LOG_CODE_BLOCK({ 2919 GPU_CLIENT_LOG_CODE_BLOCK({
2913 for (GLuint i = 0; i < count; ++i) { 2920 for (GLuint i = 0; i < count; ++i) {
2914 GPU_CLIENT_LOG( 2921 GPU_CLIENT_LOG(
2915 " " << i << ": " << GLES2Util::GetStringGLState(pnames[i])); 2922 " " << i << ": " << GLES2Util::GetStringGLState(pnames[i]));
2916 } 2923 }
2917 }); 2924 });
2918 int num_results = 0; 2925 int num_results = 0;
2919 for (GLuint ii = 0; ii < count; ++ii) { 2926 for (GLuint ii = 0; ii < count; ++ii) {
2920 int num = util_.GLGetNumValuesReturned(pnames[ii]); 2927 int num = util_.GLGetNumValuesReturned(pnames[ii]);
2921 if (!num) { 2928 if (!num) {
2922 SetGLError(GL_INVALID_ENUM, "glGetMultipleIntegervCHROMIUM", "bad pname"); 2929 SetGLErrorInvalidEnum(
2930 "glGetMultipleIntegervCHROMIUM", pnames[ii], "pname");
2923 return; 2931 return;
2924 } 2932 }
2925 num_results += num; 2933 num_results += num;
2926 } 2934 }
2927 if (static_cast<size_t>(size) != num_results * sizeof(GLint)) { 2935 if (static_cast<size_t>(size) != num_results * sizeof(GLint)) {
2928 SetGLError(GL_INVALID_VALUE, "glGetMultipleIntegervCHROMIUM", "bad size"); 2936 SetGLError(GL_INVALID_VALUE, "glGetMultipleIntegervCHROMIUM", "bad size");
2929 return; 2937 return;
2930 } 2938 }
2931 for (int ii = 0; ii < num_results; ++ii) { 2939 for (int ii = 0; ii < num_results; ++ii) {
2932 if (results[ii] != 0) { 2940 if (results[ii] != 0) {
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
3174 3182
3175 void GLES2Implementation::GetQueryivEXT( 3183 void GLES2Implementation::GetQueryivEXT(
3176 GLenum target, GLenum pname, GLint* params) { 3184 GLenum target, GLenum pname, GLint* params) {
3177 GPU_CLIENT_SINGLE_THREAD_CHECK(); 3185 GPU_CLIENT_SINGLE_THREAD_CHECK();
3178 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT(" 3186 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT("
3179 << GLES2Util::GetStringQueryTarget(target) << ", " 3187 << GLES2Util::GetStringQueryTarget(target) << ", "
3180 << GLES2Util::GetStringQueryParameter(pname) << ", " 3188 << GLES2Util::GetStringQueryParameter(pname) << ", "
3181 << static_cast<const void*>(params) << ")"); 3189 << static_cast<const void*>(params) << ")");
3182 3190
3183 if (pname != GL_CURRENT_QUERY_EXT) { 3191 if (pname != GL_CURRENT_QUERY_EXT) {
3184 SetGLError(GL_INVALID_ENUM, "glGetQueryivEXT", "invalid pname"); 3192 SetGLErrorInvalidEnum("glGetQueryivEXT", pname, "pname");
3185 return; 3193 return;
3186 } 3194 }
3187 *params = (current_query_ && current_query_->target() == target) ? 3195 *params = (current_query_ && current_query_->target() == target) ?
3188 current_query_->id() : 0; 3196 current_query_->id() : 0;
3189 GPU_CLIENT_LOG(" " << *params); 3197 GPU_CLIENT_LOG(" " << *params);
3190 } 3198 }
3191 3199
3192 void GLES2Implementation::GetQueryObjectuivEXT( 3200 void GLES2Implementation::GetQueryObjectuivEXT(
3193 GLuint id, GLenum pname, GLuint* params) { 3201 GLuint id, GLenum pname, GLuint* params) {
3194 GPU_CLIENT_SINGLE_THREAD_CHECK(); 3202 GPU_CLIENT_SINGLE_THREAD_CHECK();
(...skipping 30 matching lines...) Expand all
3225 FinishHelper(); 3233 FinishHelper();
3226 GPU_CHECK(query->CheckResultsAvailable(helper_)); 3234 GPU_CHECK(query->CheckResultsAvailable(helper_));
3227 } 3235 }
3228 } 3236 }
3229 *params = query->GetResult(); 3237 *params = query->GetResult();
3230 break; 3238 break;
3231 case GL_QUERY_RESULT_AVAILABLE_EXT: 3239 case GL_QUERY_RESULT_AVAILABLE_EXT:
3232 *params = query->CheckResultsAvailable(helper_); 3240 *params = query->CheckResultsAvailable(helper_);
3233 break; 3241 break;
3234 default: 3242 default:
3235 SetGLError(GL_INVALID_ENUM, "glQueryObjectuivEXT", "unknown pname"); 3243 SetGLErrorInvalidEnum("glQueryObjectuivEXT", pname, "pname");
3236 break; 3244 break;
3237 } 3245 }
3238 GPU_CLIENT_LOG(" " << *params); 3246 GPU_CLIENT_LOG(" " << *params);
3239 } 3247 }
3240 3248
3241 void GLES2Implementation::DrawArraysInstancedANGLE( 3249 void GLES2Implementation::DrawArraysInstancedANGLE(
3242 GLenum mode, GLint first, GLsizei count, GLsizei primcount) { 3250 GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
3243 GPU_CLIENT_SINGLE_THREAD_CHECK(); 3251 GPU_CLIENT_SINGLE_THREAD_CHECK();
3244 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawArraysInstancedANGLE(" 3252 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawArraysInstancedANGLE("
3245 << GLES2Util::GetStringDrawMode(mode) << ", " 3253 << GLES2Util::GetStringDrawMode(mode) << ", "
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
3389 3397
3390 void GLES2Implementation::PopGroupMarkerEXT() { 3398 void GLES2Implementation::PopGroupMarkerEXT() {
3391 GPU_CLIENT_SINGLE_THREAD_CHECK(); 3399 GPU_CLIENT_SINGLE_THREAD_CHECK();
3392 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPopGroupMarkerEXT()"); 3400 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPopGroupMarkerEXT()");
3393 helper_->PopGroupMarkerEXT(); 3401 helper_->PopGroupMarkerEXT();
3394 debug_marker_manager_.PopGroup(); 3402 debug_marker_manager_.PopGroup();
3395 } 3403 }
3396 3404
3397 } // namespace gles2 3405 } // namespace gles2
3398 } // namespace gpu 3406 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698