| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index e041c27570d8dbb3bb56eb40d731838566397432..31f6a8b5731d205700703d22fbae56370061b686 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -497,7 +497,8 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
| virtual QueryManager* GetQueryManager() { return query_manager_.get(); }
|
| virtual bool ProcessPendingQueries();
|
|
|
| - virtual void SetGLError(GLenum error, const char* msg);
|
| + virtual void SetGLError(
|
| + GLenum error, const char* function_name, const char* msg);
|
| virtual void SetResizeCallback(
|
| const base::Callback<void(gfx::Size)>& callback);
|
|
|
| @@ -777,12 +778,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
| ProgramManager::ProgramInfo* info = GetProgramInfo(client_id);
|
| if (!info) {
|
| if (GetShaderInfo(client_id)) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) +
|
| - ": shader passed for program").c_str());
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, function_name, "shader passed for program");
|
| } else {
|
| - SetGLError(GL_INVALID_VALUE,
|
| - (std::string(function_name) + ": unknown program").c_str());
|
| + SetGLError(GL_INVALID_VALUE, function_name, "unknown program");
|
| }
|
| }
|
| return info;
|
| @@ -811,12 +810,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
| if (!info) {
|
| if (GetProgramInfo(client_id)) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| - (std::string(function_name) +
|
| - ": program passed for shader").c_str());
|
| + GL_INVALID_OPERATION, function_name, "program passed for shader");
|
| } else {
|
| - SetGLError(GL_INVALID_VALUE,
|
| - (std::string(function_name) + ": unknown shader").c_str());
|
| + SetGLError(
|
| + GL_INVALID_VALUE, function_name, "unknown shader");
|
| }
|
| }
|
| return info;
|
| @@ -1189,12 +1186,13 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
| void ClearRealGLErrors();
|
|
|
| // Checks if the current program and vertex attributes are valid for drawing.
|
| - bool IsDrawValid(GLuint max_vertex_accessed, GLsizei primcount);
|
| + bool IsDrawValid(
|
| + const char* function_name, GLuint max_vertex_accessed, GLsizei primcount);
|
|
|
| // Returns true if successful, simulated will be true if attrib0 was
|
| // simulated.
|
| bool SimulateAttrib0(
|
| - GLuint max_vertex_accessed, bool* simulated);
|
| + const char* function_name, GLuint max_vertex_accessed, bool* simulated);
|
| void RestoreStateForAttrib(GLuint attrib);
|
|
|
| // Returns true if textures were set.
|
| @@ -1203,15 +1201,18 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
|
|
| // Returns true if GL_FIXED attribs were simulated.
|
| bool SimulateFixedAttribs(
|
| + const char* function_name,
|
| GLuint max_vertex_accessed, bool* simulated, GLsizei primcount);
|
| void RestoreStateForSimulatedFixedAttribs();
|
|
|
| // Handle DrawArrays and DrawElements for both instanced and non-instanced
|
| // cases (primcount is 0 for non-instanced).
|
| error::Error DoDrawArrays(
|
| + const char* function_name,
|
| bool instanced, GLenum mode, GLint first, GLsizei count,
|
| GLsizei primcount);
|
| error::Error DoDrawElements(
|
| + const char* function_name,
|
| bool instanced, GLenum mode, GLsizei count, GLenum type,
|
| int32 offset, GLsizei primcount);
|
|
|
| @@ -1331,6 +1332,18 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
|
| const char* function_name,
|
| GLenum target, GLenum format, GLenum type, GLint level);
|
|
|
| + bool ValidateCompressedTexDimensions(
|
| + const char* function_name,
|
| + GLint level, GLsizei width, GLsizei height, GLenum format);
|
| + bool ValidateCompressedTexFuncData(
|
| + const char* function_name,
|
| + GLsizei width, GLsizei height, GLenum format, size_t size);
|
| + bool ValidateCompressedTexSubDimensions(
|
| + const char* function_name,
|
| + GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
| + GLsizei width, GLsizei height, GLenum format,
|
| + TextureManager::TextureInfo* texture);
|
| +
|
| void LogMessage(const std::string& msg);
|
| void RenderWarning(const std::string& msg);
|
| void PerformanceWarning(const std::string& msg);
|
| @@ -2586,8 +2599,7 @@ bool GLES2DecoderImpl::CheckFramebufferValid(
|
| GLenum completeness = framebuffer->IsPossiblyComplete();
|
| if (completeness != GL_FRAMEBUFFER_COMPLETE) {
|
| SetGLError(
|
| - GL_INVALID_FRAMEBUFFER_OPERATION,
|
| - (std::string(func_name) + " framebuffer incomplete").c_str());
|
| + GL_INVALID_FRAMEBUFFER_OPERATION, func_name, "framebuffer incomplete");
|
| return false;
|
| }
|
|
|
| @@ -2598,9 +2610,8 @@ bool GLES2DecoderImpl::CheckFramebufferValid(
|
| // Can we clear them?
|
| if (glCheckFramebufferStatusEXT(target) != GL_FRAMEBUFFER_COMPLETE) {
|
| SetGLError(
|
| - GL_INVALID_FRAMEBUFFER_OPERATION,
|
| - (std::string(func_name) +
|
| - " framebuffer incomplete (clear)").c_str());
|
| + GL_INVALID_FRAMEBUFFER_OPERATION, func_name,
|
| + "framebuffer incomplete (clear)");
|
| return false;
|
| }
|
| ClearUnclearedAttachments(target, framebuffer);
|
| @@ -2610,9 +2621,8 @@ bool GLES2DecoderImpl::CheckFramebufferValid(
|
| if (!framebuffer_manager()->IsComplete(framebuffer)) {
|
| if (glCheckFramebufferStatusEXT(target) != GL_FRAMEBUFFER_COMPLETE) {
|
| SetGLError(
|
| - GL_INVALID_FRAMEBUFFER_OPERATION,
|
| - (std::string(func_name) +
|
| - " framebuffer incomplete (check)").c_str());
|
| + GL_INVALID_FRAMEBUFFER_OPERATION, func_name,
|
| + "framebuffer incomplete (check)");
|
| return false;
|
| }
|
| framebuffer_manager()->MarkAsComplete(framebuffer);
|
| @@ -3146,7 +3156,7 @@ error::Error GLES2DecoderImpl::DoCommand(
|
| LOG(ERROR) << "[" << this << "] "
|
| << "GL ERROR: " << GLES2Util::GetStringEnum(error) << " : "
|
| << GetCommandName(command);
|
| - SetGLError(error, "GL error from driver");
|
| + SetGLError(error, "DoCommand", "GL error from driver");
|
| }
|
| }
|
| } else {
|
| @@ -3201,7 +3211,8 @@ void GLES2DecoderImpl::DoFlush() {
|
| void GLES2DecoderImpl::DoActiveTexture(GLenum texture_unit) {
|
| GLuint texture_index = texture_unit - GL_TEXTURE0;
|
| if (texture_index >= group_->max_texture_units()) {
|
| - SetGLError(GL_INVALID_ENUM, "glActiveTexture: texture_unit out of range.");
|
| + SetGLError(
|
| + GL_INVALID_ENUM, "glActiveTexture", "texture_unit out of range.");
|
| return;
|
| }
|
| active_texture_unit_ = texture_index;
|
| @@ -3232,7 +3243,7 @@ void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint client_id) {
|
| if (info) {
|
| if (!buffer_manager()->SetTarget(info, target)) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glBindBuffer: buffer bound to more than 1 target");
|
| + "glBindBuffer", "buffer bound to more than 1 target");
|
| return;
|
| }
|
| service_id = info->service_id();
|
| @@ -3417,12 +3428,12 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) {
|
| // Check that we are not trying to bind it to a different target.
|
| if (info->target() != 0 && info->target() != target) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glBindTexture: texture bound to more than 1 target.");
|
| + "glBindTexture", "texture bound to more than 1 target.");
|
| return;
|
| }
|
| if (info->IsStreamTexture() && target != GL_TEXTURE_EXTERNAL_OES) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glBindTexture: illegal target for stream texture.");
|
| + "glBindTexture", "illegal target for stream texture.");
|
| return;
|
| }
|
| if (info->target() == 0) {
|
| @@ -3465,7 +3476,7 @@ void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) {
|
| }
|
| } else {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glDisableVertexAttribArray: index out of range");
|
| + "glDisableVertexAttribArray", "index out of range");
|
| }
|
| }
|
|
|
| @@ -3474,7 +3485,7 @@ void GLES2DecoderImpl::DoEnableVertexAttribArray(GLuint index) {
|
| glEnableVertexAttribArray(index);
|
| } else {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glEnableVertexAttribArray: index out of range");
|
| + "glEnableVertexAttribArray", "index out of range");
|
| }
|
| }
|
|
|
| @@ -3483,12 +3494,12 @@ void GLES2DecoderImpl::DoGenerateMipmap(GLenum target) {
|
| if (!info ||
|
| !texture_manager()->CanGenerateMipmaps(info)) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glGenerateMipmaps: Can not generate mips");
|
| + "glGenerateMipmaps", "Can not generate mips");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->ClearTextureLevel(this, info, target, 0)) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glGenerateMipmaps: dimensions too big");
|
| + SetGLError(GL_OUT_OF_MEMORY, "glGenerateMipmaps", "dimensions too big");
|
| return;
|
| }
|
|
|
| @@ -3517,37 +3528,37 @@ bool GLES2DecoderImpl::GetHelper(
|
| DCHECK(num_written);
|
| if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
|
| switch (pname) {
|
| - case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
|
| - *num_written = 1;
|
| - if (params) {
|
| - *params = GL_RGBA; // We don't support other formats.
|
| - }
|
| - return true;
|
| - case GL_IMPLEMENTATION_COLOR_READ_TYPE:
|
| - *num_written = 1;
|
| - if (params) {
|
| - *params = GL_UNSIGNED_BYTE; // We don't support other types.
|
| - }
|
| - return true;
|
| - case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
| - *num_written = 1;
|
| - if (params) {
|
| - *params = group_->max_fragment_uniform_vectors();
|
| - }
|
| - return true;
|
| - case GL_MAX_VARYING_VECTORS:
|
| - *num_written = 1;
|
| - if (params) {
|
| - *params = group_->max_varying_vectors();
|
| - }
|
| - return true;
|
| - case GL_MAX_VERTEX_UNIFORM_VECTORS:
|
| - *num_written = 1;
|
| - if (params) {
|
| - *params = group_->max_vertex_uniform_vectors();
|
| + case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
|
| + *num_written = 1;
|
| + if (params) {
|
| + *params = GL_RGBA; // We don't support other formats.
|
| + }
|
| + return true;
|
| + case GL_IMPLEMENTATION_COLOR_READ_TYPE:
|
| + *num_written = 1;
|
| + if (params) {
|
| + *params = GL_UNSIGNED_BYTE; // We don't support other types.
|
| + }
|
| + return true;
|
| + case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
| + *num_written = 1;
|
| + if (params) {
|
| + *params = group_->max_fragment_uniform_vectors();
|
| + }
|
| + return true;
|
| + case GL_MAX_VARYING_VECTORS:
|
| + *num_written = 1;
|
| + if (params) {
|
| + *params = group_->max_varying_vectors();
|
| + }
|
| + return true;
|
| + case GL_MAX_VERTEX_UNIFORM_VECTORS:
|
| + *num_written = 1;
|
| + if (params) {
|
| + *params = group_->max_vertex_uniform_vectors();
|
| + }
|
| + return true;
|
| }
|
| - return true;
|
| - }
|
| }
|
| switch (pname) {
|
| case GL_MAX_VIEWPORT_DIMS:
|
| @@ -3883,15 +3894,15 @@ void GLES2DecoderImpl::DoGetProgramiv(
|
| void GLES2DecoderImpl::DoBindAttribLocation(
|
| GLuint program, GLuint index, const char* name) {
|
| if (!StringIsValidForGLES(name)) {
|
| - SetGLError(GL_INVALID_VALUE, "glBindAttribLocation: Invalid character");
|
| + SetGLError(GL_INVALID_VALUE, "glBindAttribLocation", "Invalid character");
|
| return;
|
| }
|
| if (ProgramManager::IsInvalidPrefix(name, strlen(name))) {
|
| - SetGLError(GL_INVALID_OPERATION, "glBindAttribLocation: reserved prefix");
|
| + SetGLError(GL_INVALID_OPERATION, "glBindAttribLocation", "reserved prefix");
|
| return;
|
| }
|
| if (index >= group_->max_vertex_attribs()) {
|
| - SetGLError(GL_INVALID_VALUE, "glBindAttribLocation: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glBindAttribLocation", "index out of range");
|
| return;
|
| }
|
| ProgramManager::ProgramInfo* info = GetProgramInfoNotShader(
|
| @@ -3960,7 +3971,7 @@ error::Error GLES2DecoderImpl::HandleDeleteShader(
|
| shader_manager()->MarkAsDeleted(info);
|
| }
|
| } else {
|
| - SetGLError(GL_INVALID_VALUE, "glDeleteShader: unknown shader");
|
| + SetGLError(GL_INVALID_VALUE, "glDeleteShader", "unknown shader");
|
| }
|
| }
|
| return error::kNoError;
|
| @@ -3976,7 +3987,7 @@ error::Error GLES2DecoderImpl::HandleDeleteProgram(
|
| program_manager()->MarkAsDeleted(shader_manager(), info);
|
| }
|
| } else {
|
| - SetGLError(GL_INVALID_VALUE, "glDeleteProgram: unknown program");
|
| + SetGLError(GL_INVALID_VALUE, "glDeleteProgram", "unknown program");
|
| }
|
| }
|
| return error::kNoError;
|
| @@ -4001,7 +4012,7 @@ error::Error GLES2DecoderImpl::HandleDeleteSharedIdsCHROMIUM(
|
| const GLuint* ids = GetSharedMemoryAs<const GLuint*>(
|
| c.ids_shm_id, c.ids_shm_offset, data_size);
|
| if (n < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "DeleteSharedIdsCHROMIUM: n < 0");
|
| + SetGLError(GL_INVALID_VALUE, "DeleteSharedIdsCHROMIUM", "n < 0");
|
| return error::kNoError;
|
| }
|
| if (ids == NULL) {
|
| @@ -4038,7 +4049,7 @@ error::Error GLES2DecoderImpl::HandleGenSharedIdsCHROMIUM(
|
| GLuint* ids = GetSharedMemoryAs<GLuint*>(
|
| c.ids_shm_id, c.ids_shm_offset, data_size);
|
| if (n < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "GenSharedIdsCHROMIUM: n < 0");
|
| + SetGLError(GL_INVALID_VALUE, "GenSharedIdsCHROMIUM", "n < 0");
|
| return error::kNoError;
|
| }
|
| if (ids == NULL) {
|
| @@ -4057,9 +4068,8 @@ void GLES2DecoderImpl::DoRegisterSharedIdsCHROMIUM(
|
| id_allocator->FreeID(ids[jj]);
|
| }
|
| SetGLError(
|
| - GL_INVALID_VALUE,
|
| - "RegisterSharedIdsCHROMIUM: attempt to register "
|
| - "id that already exists");
|
| + GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM",
|
| + "attempt to register id that already exists");
|
| return;
|
| }
|
| }
|
| @@ -4076,7 +4086,7 @@ error::Error GLES2DecoderImpl::HandleRegisterSharedIdsCHROMIUM(
|
| GLuint* ids = GetSharedMemoryAs<GLuint*>(
|
| c.ids_shm_id, c.ids_shm_offset, data_size);
|
| if (n < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM: n < 0");
|
| + SetGLError(GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM", "n < 0");
|
| return error::kNoError;
|
| }
|
| if (ids == NULL) {
|
| @@ -4102,7 +4112,7 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
|
| GetFramebufferInfoForTarget(target);
|
| if (!framebuffer_info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glFramebufferRenderbuffer: no framebuffer bound");
|
| + "glFramebufferRenderbuffer", "no framebuffer bound");
|
| return;
|
| }
|
| GLuint service_id = 0;
|
| @@ -4111,7 +4121,7 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
|
| info = GetRenderbufferInfo(client_renderbuffer_id);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glFramebufferRenderbuffer: unknown renderbuffer");
|
| + "glFramebufferRenderbuffer", "unknown renderbuffer");
|
| return;
|
| }
|
| service_id = info->service_id();
|
| @@ -4318,7 +4328,7 @@ void GLES2DecoderImpl::DoFramebufferTexture2D(
|
| GetFramebufferInfoForTarget(target);
|
| if (!framebuffer_info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glFramebufferTexture2D: no framebuffer bound.");
|
| + "glFramebufferTexture2D", "no framebuffer bound.");
|
| return;
|
| }
|
| GLuint service_id = 0;
|
| @@ -4327,7 +4337,7 @@ void GLES2DecoderImpl::DoFramebufferTexture2D(
|
| info = GetTextureInfo(client_texture_id);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glFramebufferTexture2D: unknown texture");
|
| + "glFramebufferTexture2D", "unknown texture");
|
| return;
|
| }
|
| service_id = info->service_id();
|
| @@ -4335,7 +4345,7 @@ void GLES2DecoderImpl::DoFramebufferTexture2D(
|
|
|
| if (!texture_manager()->ValidForTarget(textarget, level, 0, 0, 1)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glFramebufferTexture2D: level out of range");
|
| + "glFramebufferTexture2D", "level out of range");
|
| return;
|
| }
|
|
|
| @@ -4356,7 +4366,7 @@ void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv(
|
| GetFramebufferInfoForTarget(target);
|
| if (!framebuffer_info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glFramebufferAttachmentParameteriv: no framebuffer bound");
|
| + "glFramebufferAttachmentParameteriv", "no framebuffer bound");
|
| return;
|
| }
|
| glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
|
| @@ -4387,22 +4397,22 @@ void GLES2DecoderImpl::DoGetRenderbufferParameteriv(
|
| GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
|
| if (!renderbuffer) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glGetRenderbufferParameteriv: no renderbuffer bound");
|
| + "glGetRenderbufferParameteriv", "no renderbuffer bound");
|
| return;
|
| }
|
| switch (pname) {
|
| - case GL_RENDERBUFFER_INTERNAL_FORMAT:
|
| - *params = renderbuffer->internal_format();
|
| - break;
|
| - case GL_RENDERBUFFER_WIDTH:
|
| - *params = renderbuffer->width();
|
| - break;
|
| - case GL_RENDERBUFFER_HEIGHT:
|
| - *params = renderbuffer->height();
|
| - break;
|
| - default:
|
| - glGetRenderbufferParameterivEXT(target, pname, params);
|
| - break;
|
| + case GL_RENDERBUFFER_INTERNAL_FORMAT:
|
| + *params = renderbuffer->internal_format();
|
| + break;
|
| + case GL_RENDERBUFFER_WIDTH:
|
| + *params = renderbuffer->width();
|
| + break;
|
| + case GL_RENDERBUFFER_HEIGHT:
|
| + *params = renderbuffer->height();
|
| + break;
|
| + default:
|
| + glGetRenderbufferParameterivEXT(target, pname, params);
|
| + break;
|
| }
|
| }
|
|
|
| @@ -4412,7 +4422,7 @@ void GLES2DecoderImpl::DoBlitFramebufferEXT(
|
| GLbitfield mask, GLenum filter) {
|
| if (!feature_info_->feature_flags().chromium_framebuffer_multisample) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glBlitFramebufferEXT: function not available");
|
| + "glBlitFramebufferEXT", "function not available");
|
| }
|
| if (IsAngle()) {
|
| glBlitFramebufferANGLE(
|
| @@ -4429,7 +4439,7 @@ void GLES2DecoderImpl::DoRenderbufferStorageMultisample(
|
| GLsizei width, GLsizei height) {
|
| if (!feature_info_->feature_flags().chromium_framebuffer_multisample) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glRenderbufferStorageMultisampleEXT: function not available");
|
| + "glRenderbufferStorageMultisampleEXT", "function not available");
|
| return;
|
| }
|
|
|
| @@ -4437,20 +4447,20 @@ void GLES2DecoderImpl::DoRenderbufferStorageMultisample(
|
| GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
|
| if (!renderbuffer) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glGetRenderbufferStorageMultisample: no renderbuffer bound");
|
| + "glGetRenderbufferStorageMultisample", "no renderbuffer bound");
|
| return;
|
| }
|
|
|
| if (samples > renderbuffer_manager()->max_samples()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glGetRenderbufferStorageMultisample: samples too large");
|
| + "glGetRenderbufferStorageMultisample", "samples too large");
|
| return;
|
| }
|
|
|
| if (width > renderbuffer_manager()->max_renderbuffer_size() ||
|
| height > renderbuffer_manager()->max_renderbuffer_size()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glGetRenderbufferStorageMultisample: size too large");
|
| + "glGetRenderbufferStorageMultisample", "size too large");
|
| return;
|
| }
|
|
|
| @@ -4494,14 +4504,14 @@ void GLES2DecoderImpl::DoRenderbufferStorage(
|
| GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
|
| if (!renderbuffer) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glGetRenderbufferStorage: no renderbuffer bound");
|
| + "glGetRenderbufferStorage", "no renderbuffer bound");
|
| return;
|
| }
|
|
|
| if (width > renderbuffer_manager()->max_renderbuffer_size() ||
|
| height > renderbuffer_manager()->max_renderbuffer_size()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glGetRenderbufferStorage: size too large");
|
| + "glGetRenderbufferStorage", "size too large");
|
| return;
|
| }
|
|
|
| @@ -4552,13 +4562,13 @@ void GLES2DecoderImpl::DoTexParameterf(
|
| GLenum target, GLenum pname, GLfloat param) {
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexParameterf: unknown texture");
|
| + SetGLError(GL_INVALID_VALUE, "glTexParameterf", "unknown texture");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->SetParameter(
|
| info, pname, static_cast<GLint>(param))) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexParameterf: param GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexParameterf", "param GL_INVALID_ENUM");
|
| return;
|
| }
|
| glTexParameterf(target, pname, param);
|
| @@ -4568,12 +4578,12 @@ void GLES2DecoderImpl::DoTexParameteri(
|
| GLenum target, GLenum pname, GLint param) {
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexParameteri: unknown texture");
|
| + SetGLError(GL_INVALID_VALUE, "glTexParameteri", "unknown texture");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->SetParameter(info, pname, param)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexParameteri: param GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexParameteri", "param GL_INVALID_ENUM");
|
| return;
|
| }
|
| glTexParameteri(target, pname, param);
|
| @@ -4583,13 +4593,13 @@ void GLES2DecoderImpl::DoTexParameterfv(
|
| GLenum target, GLenum pname, const GLfloat* params) {
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexParameterfv: unknown texture");
|
| + SetGLError(GL_INVALID_VALUE, "glTexParameterfv", "unknown texture");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->SetParameter(
|
| info, pname, static_cast<GLint>(params[0]))) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexParameterfv: param GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexParameterfv", "param GL_INVALID_ENUM");
|
| return;
|
| }
|
| glTexParameterfv(target, pname, params);
|
| @@ -4599,12 +4609,12 @@ void GLES2DecoderImpl::DoTexParameteriv(
|
| GLenum target, GLenum pname, const GLint* params) {
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexParameteriv: unknown texture");
|
| + SetGLError(GL_INVALID_VALUE, "glTexParameteriv", "unknown texture");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->SetParameter(info, pname, *params)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexParameteriv: param GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexParameteriv", "param GL_INVALID_ENUM");
|
| return;
|
| }
|
| glTexParameteriv(target, pname, params);
|
| @@ -4612,14 +4622,12 @@ void GLES2DecoderImpl::DoTexParameteriv(
|
|
|
| bool GLES2DecoderImpl::CheckCurrentProgram(const char* function_name) {
|
| if (!current_program_) {
|
| - // The program does not exist.
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": no program in use").c_str());
|
| - return false;
|
| + // The program does not exist.
|
| + SetGLError(GL_INVALID_OPERATION, function_name, "no program in use");
|
| + return false;
|
| }
|
| if (!current_program_->InUse()) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": program not linked").c_str());
|
| + SetGLError(GL_INVALID_OPERATION, function_name, "program not linked");
|
| return false;
|
| }
|
| return true;
|
| @@ -4647,14 +4655,12 @@ bool GLES2DecoderImpl::PrepForSetUniformByLocation(
|
| current_program_->GetUniformInfoByFakeLocation(
|
| fake_location, real_location, &array_index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": unknown location").c_str());
|
| + SetGLError(GL_INVALID_OPERATION, function_name, "unknown location");
|
| return false;
|
| }
|
| if (*count > 1 && !info->is_array) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": count > 1 for non-array").c_str());
|
| + GL_INVALID_OPERATION, function_name, "count > 1 for non-array");
|
| return false;
|
| }
|
| *count = std::min(info->size - array_index, *count);
|
| @@ -4675,7 +4681,7 @@ void GLES2DecoderImpl::DoUniform1i(GLint fake_location, GLint v0) {
|
| }
|
| if (!current_program_->SetSamplers(
|
| group_->max_texture_units(), fake_location, 1, &v0)) {
|
| - SetGLError(GL_INVALID_VALUE, "glUniform1i: texture unit out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glUniform1i", "texture unit out of range");
|
| return;
|
| }
|
| glUniform1i(real_location, v0);
|
| @@ -4693,7 +4699,7 @@ void GLES2DecoderImpl::DoUniform1iv(
|
| type == GL_SAMPLER_EXTERNAL_OES) {
|
| if (!current_program_->SetSamplers(
|
| group_->max_texture_units(), fake_location, count, value)) {
|
| - SetGLError(GL_INVALID_VALUE, "glUniform1iv: texture unit out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glUniform1iv", "texture unit out of range");
|
| return;
|
| }
|
| }
|
| @@ -4858,7 +4864,7 @@ void GLES2DecoderImpl::DoUseProgram(GLuint program) {
|
| }
|
| if (!info->IsValid()) {
|
| // Program was not linked successfully. (ie, glLinkProgram)
|
| - SetGLError(GL_INVALID_OPERATION, "glUseProgram: program not linked");
|
| + SetGLError(GL_INVALID_OPERATION, "glUseProgram", "program not linked");
|
| return;
|
| }
|
| service_id = info->service_id();
|
| @@ -4895,16 +4901,18 @@ GLenum GLES2DecoderImpl::GetGLError() {
|
| GLenum GLES2DecoderImpl::PeekGLError() {
|
| GLenum error = glGetError();
|
| if (error != GL_NO_ERROR) {
|
| - SetGLError(error, "");
|
| + SetGLError(error, "", "");
|
| }
|
| return error;
|
| }
|
|
|
| -void GLES2DecoderImpl::SetGLError(GLenum error, const char* msg) {
|
| +void GLES2DecoderImpl::SetGLError(
|
| + GLenum error, const char* function_name, const char* msg) {
|
| if (msg) {
|
| last_error_ = msg;
|
| LogMessage(std::string("GL ERROR :") +
|
| - GLES2Util::GetStringEnum(error) + " : " + msg);
|
| + GLES2Util::GetStringEnum(error) + " : " +
|
| + function_name + ": " + msg);
|
| }
|
| error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
|
| }
|
| @@ -4943,7 +4951,7 @@ void GLES2DecoderImpl::PerformanceWarning(const std::string& msg) {
|
| void GLES2DecoderImpl::CopyRealGLErrorsToWrapper() {
|
| GLenum error;
|
| while ((error = glGetError()) != GL_NO_ERROR) {
|
| - SetGLError(error, NULL);
|
| + SetGLError(error, "", NULL);
|
| }
|
| }
|
|
|
| @@ -5061,7 +5069,7 @@ bool GLES2DecoderImpl::ClearUnclearedTextures() {
|
| }
|
|
|
| bool GLES2DecoderImpl::IsDrawValid(
|
| - GLuint max_vertex_accessed, GLsizei primcount) {
|
| + const char* function_name, GLuint max_vertex_accessed, GLsizei primcount) {
|
| // NOTE: We specifically do not check current_program->IsValid() because
|
| // it could never be invalid since glUseProgram would have failed. While
|
| // glLinkProgram could later mark the program as invalid the previous
|
| @@ -5092,19 +5100,19 @@ bool GLES2DecoderImpl::IsDrawValid(
|
| // This attrib is used in the current program.
|
| if (!info->CanAccess(count)) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| + GL_INVALID_OPERATION, function_name,
|
| (std::string(
|
| - "glDrawXXX: attempt to access out of range vertices in "
|
| - "attribute ") + base::IntToString(info->index())).c_str());
|
| + "attempt to access out of range vertices in attribute ") +
|
| + base::IntToString(info->index())).c_str());
|
| return false;
|
| }
|
| } else {
|
| // This attrib is not used in the current program.
|
| if (!info->buffer()) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| + GL_INVALID_OPERATION, function_name,
|
| (std::string(
|
| - "glDrawXXX: attempt to render with no buffer attached to "
|
| + "attempt to render with no buffer attached to "
|
| "enabled attribute ") +
|
| base::IntToString(info->index())).c_str());
|
| return false;
|
| @@ -5114,8 +5122,8 @@ bool GLES2DecoderImpl::IsDrawValid(
|
|
|
| if (primcount && !divisor0) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| - "glDrawXXX: attempt instanced render with all attributes having "
|
| + GL_INVALID_OPERATION, function_name,
|
| + "attempt instanced render with all attributes having "
|
| "non-zero divisors");
|
| return false;
|
| }
|
| @@ -5124,7 +5132,7 @@ bool GLES2DecoderImpl::IsDrawValid(
|
| }
|
|
|
| bool GLES2DecoderImpl::SimulateAttrib0(
|
| - GLuint max_vertex_accessed, bool* simulated) {
|
| + const char* function_name, GLuint max_vertex_accessed, bool* simulated) {
|
| DCHECK(simulated);
|
| *simulated = false;
|
|
|
| @@ -5151,7 +5159,7 @@ bool GLES2DecoderImpl::SimulateAttrib0(
|
| !SafeMultiply(num_vertices, static_cast<GLuint>(sizeof(Vec4)),
|
| &size_needed) ||
|
| size_needed > 0x7FFFFFFFU) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
|
| + SetGLError(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
|
| return false;
|
| }
|
|
|
| @@ -5166,7 +5174,7 @@ bool GLES2DecoderImpl::SimulateAttrib0(
|
| glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW);
|
| GLenum error = glGetError();
|
| if (error != GL_NO_ERROR) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
|
| + SetGLError(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
|
| return false;
|
| }
|
| }
|
| @@ -5215,6 +5223,7 @@ void GLES2DecoderImpl::RestoreStateForAttrib(GLuint attrib) {
|
| }
|
|
|
| bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| + const char* function_name,
|
| GLuint max_vertex_accessed, bool* simulated, GLsizei primcount) {
|
| DCHECK(simulated);
|
| *simulated = false;
|
| @@ -5246,7 +5255,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| max_vertex_accessed);
|
| GLuint num_vertices = max_accessed + 1;
|
| if (num_vertices == 0) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
|
| + SetGLError(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
|
| return false;
|
| }
|
| if (attrib_info &&
|
| @@ -5256,7 +5265,8 @@ bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| if (!SafeMultiply(num_vertices,
|
| static_cast<GLuint>(info->size()), &elements_used) ||
|
| !SafeAdd(elements_needed, elements_used, &elements_needed)) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: simulating GL_FIXED attribs");
|
| + SetGLError(
|
| + GL_OUT_OF_MEMORY, function_name, "simulating GL_FIXED attribs");
|
| return false;
|
| }
|
| }
|
| @@ -5266,7 +5276,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| GLuint size_needed = 0;
|
| if (!SafeMultiply(elements_needed, kSizeOfFloat, &size_needed) ||
|
| size_needed > 0x7FFFFFFFU) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: simulating GL_FIXED attribs");
|
| + SetGLError(GL_OUT_OF_MEMORY, function_name, "simulating GL_FIXED attribs");
|
| return false;
|
| }
|
|
|
| @@ -5277,7 +5287,8 @@ bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW);
|
| GLenum error = glGetError();
|
| if (error != GL_NO_ERROR) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: simulating GL_FIXED attribs");
|
| + SetGLError(
|
| + GL_OUT_OF_MEMORY, function_name, "simulating GL_FIXED attribs");
|
| return false;
|
| }
|
| }
|
| @@ -5293,7 +5304,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs(
|
| max_vertex_accessed);
|
| GLuint num_vertices = max_accessed + 1;
|
| if (num_vertices == 0) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
|
| + SetGLError(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
|
| return false;
|
| }
|
| if (attrib_info &&
|
| @@ -5327,30 +5338,32 @@ void GLES2DecoderImpl::RestoreStateForSimulatedFixedAttribs() {
|
| bound_array_buffer_ ? bound_array_buffer_->service_id() : 0);
|
| }
|
|
|
| -error::Error GLES2DecoderImpl::DoDrawArrays(bool instanced,
|
| - GLenum mode,
|
| - GLint first,
|
| - GLsizei count,
|
| - GLsizei primcount) {
|
| +error::Error GLES2DecoderImpl::DoDrawArrays(
|
| + const char* function_name,
|
| + bool instanced,
|
| + GLenum mode,
|
| + GLint first,
|
| + GLsizei count,
|
| + GLsizei primcount) {
|
| if (!validators_->draw_mode.IsValid(mode)) {
|
| - SetGLError(GL_INVALID_ENUM, "glDrawArrays: mode GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, function_name, "mode GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (count < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawArrays: count < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "count < 0");
|
| return error::kNoError;
|
| }
|
| if (primcount < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawArrays: primcount < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "primcount < 0");
|
| return error::kNoError;
|
| }
|
| - if (!CheckBoundFramebuffersValid("glDrawArrays")) {
|
| + if (!CheckBoundFramebuffersValid(function_name)) {
|
| return error::kNoError;
|
| }
|
| // We have to check this here because the prototype for glDrawArrays
|
| // is GLint not GLsizei.
|
| if (first < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawArrays: first < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "first < 0");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -5360,18 +5373,20 @@ error::Error GLES2DecoderImpl::DoDrawArrays(bool instanced,
|
| }
|
|
|
| GLuint max_vertex_accessed = first + count - 1;
|
| - if (IsDrawValid(max_vertex_accessed, primcount)) {
|
| + if (IsDrawValid(function_name, max_vertex_accessed, primcount)) {
|
| if (!ClearUnclearedTextures()) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawArrays: out of memory");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "out of memory");
|
| return error::kNoError;
|
| }
|
| bool simulated_attrib_0 = false;
|
| - if (!SimulateAttrib0(max_vertex_accessed, &simulated_attrib_0)) {
|
| + if (!SimulateAttrib0(
|
| + function_name, max_vertex_accessed, &simulated_attrib_0)) {
|
| return error::kNoError;
|
| }
|
| bool simulated_fixed_attribs = false;
|
| - if (SimulateFixedAttribs(max_vertex_accessed, &simulated_fixed_attribs,
|
| - primcount)) {
|
| + if (SimulateFixedAttribs(
|
| + function_name, max_vertex_accessed, &simulated_fixed_attribs,
|
| + primcount)) {
|
| bool textures_set = SetBlackTextureForNonRenderableTextures();
|
| ApplyDirtyState();
|
| if (!instanced) {
|
| @@ -5400,7 +5415,8 @@ error::Error GLES2DecoderImpl::DoDrawArrays(bool instanced,
|
|
|
| error::Error GLES2DecoderImpl::HandleDrawArrays(
|
| uint32 immediate_data_size, const gles2::DrawArrays& c) {
|
| - return DoDrawArrays(false,
|
| + return DoDrawArrays("glDrawArrays",
|
| + false,
|
| static_cast<GLenum>(c.mode),
|
| static_cast<GLint>(c.first),
|
| static_cast<GLsizei>(c.count),
|
| @@ -5411,50 +5427,53 @@ error::Error GLES2DecoderImpl::HandleDrawArraysInstancedANGLE(
|
| uint32 immediate_data_size, const gles2::DrawArraysInstancedANGLE& c) {
|
| if (!feature_info_->feature_flags().angle_instanced_arrays) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glDrawArraysInstancedANGLE: function not available");
|
| + "glDrawArraysInstancedANGLE", "function not available");
|
| return error::kNoError;
|
| }
|
| - return DoDrawArrays(true,
|
| + return DoDrawArrays("glDrawArraysIntancedANGLE",
|
| + true,
|
| static_cast<GLenum>(c.mode),
|
| static_cast<GLint>(c.first),
|
| static_cast<GLsizei>(c.count),
|
| static_cast<GLsizei>(c.primcount));
|
| }
|
|
|
| -error::Error GLES2DecoderImpl::DoDrawElements(bool instanced,
|
| - GLenum mode,
|
| - GLsizei count,
|
| - GLenum type,
|
| - int32 offset,
|
| - GLsizei primcount) {
|
| +error::Error GLES2DecoderImpl::DoDrawElements(
|
| + const char* function_name,
|
| + bool instanced,
|
| + GLenum mode,
|
| + GLsizei count,
|
| + GLenum type,
|
| + int32 offset,
|
| + GLsizei primcount) {
|
| if (!bound_element_array_buffer_) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glDrawElements: No element array buffer bound");
|
| + function_name, "No element array buffer bound");
|
| return error::kNoError;
|
| }
|
|
|
| if (count < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawElements: count < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "count < 0");
|
| return error::kNoError;
|
| }
|
| if (offset < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawElements: offset < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "offset < 0");
|
| return error::kNoError;
|
| }
|
| if (!validators_->draw_mode.IsValid(mode)) {
|
| - SetGLError(GL_INVALID_ENUM, "glDrawElements: mode GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, function_name, "mode GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->index_type.IsValid(type)) {
|
| - SetGLError(GL_INVALID_ENUM, "glDrawElements: type GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, function_name, "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (primcount < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawElements: primcount < 0");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "primcount < 0");
|
| return error::kNoError;
|
| }
|
|
|
| - if (!CheckBoundFramebuffersValid("glDrawElements")) {
|
| + if (!CheckBoundFramebuffersValid(function_name)) {
|
| return error::kNoError;
|
| }
|
|
|
| @@ -5466,22 +5485,24 @@ error::Error GLES2DecoderImpl::DoDrawElements(bool instanced,
|
| if (!bound_element_array_buffer_->GetMaxValueForRange(
|
| offset, count, type, &max_vertex_accessed)) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glDrawElements: range out of bounds for buffer");
|
| + function_name, "range out of bounds for buffer");
|
| return error::kNoError;
|
| }
|
|
|
| - if (IsDrawValid(max_vertex_accessed, primcount)) {
|
| + if (IsDrawValid(function_name, max_vertex_accessed, primcount)) {
|
| if (!ClearUnclearedTextures()) {
|
| - SetGLError(GL_INVALID_VALUE, "glDrawElements: out of memory");
|
| + SetGLError(GL_INVALID_VALUE, function_name, "out of memory");
|
| return error::kNoError;
|
| }
|
| bool simulated_attrib_0 = false;
|
| - if (!SimulateAttrib0(max_vertex_accessed, &simulated_attrib_0)) {
|
| + if (!SimulateAttrib0(
|
| + function_name, max_vertex_accessed, &simulated_attrib_0)) {
|
| return error::kNoError;
|
| }
|
| bool simulated_fixed_attribs = false;
|
| - if (SimulateFixedAttribs(max_vertex_accessed, &simulated_fixed_attribs,
|
| - primcount)) {
|
| + if (SimulateFixedAttribs(
|
| + function_name, max_vertex_accessed, &simulated_fixed_attribs,
|
| + primcount)) {
|
| bool textures_set = SetBlackTextureForNonRenderableTextures();
|
| ApplyDirtyState();
|
| const GLvoid* indices = reinterpret_cast<const GLvoid*>(offset);
|
| @@ -5511,7 +5532,8 @@ error::Error GLES2DecoderImpl::DoDrawElements(bool instanced,
|
|
|
| error::Error GLES2DecoderImpl::HandleDrawElements(
|
| uint32 immediate_data_size, const gles2::DrawElements& c) {
|
| - return DoDrawElements(false,
|
| + return DoDrawElements("glDrawElements",
|
| + false,
|
| static_cast<GLenum>(c.mode),
|
| static_cast<GLsizei>(c.count),
|
| static_cast<GLenum>(c.type),
|
| @@ -5523,10 +5545,11 @@ error::Error GLES2DecoderImpl::HandleDrawElementsInstancedANGLE(
|
| uint32 immediate_data_size, const gles2::DrawElementsInstancedANGLE& c) {
|
| if (!feature_info_->feature_flags().angle_instanced_arrays) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glDrawElementsInstancedANGLE: function not available");
|
| + "glDrawElementsInstancedANGLE", "function not available");
|
| return error::kNoError;
|
| }
|
| - return DoDrawElements(true,
|
| + return DoDrawElements("glDrawElementsInstancedANGLE",
|
| + true,
|
| static_cast<GLenum>(c.mode),
|
| static_cast<GLsizei>(c.count),
|
| static_cast<GLenum>(c.type),
|
| @@ -5541,13 +5564,13 @@ GLuint GLES2DecoderImpl::DoGetMaxValueInBufferCHROMIUM(
|
| if (!info) {
|
| // TODO(gman): Should this be a GL error or a command buffer error?
|
| SetGLError(GL_INVALID_VALUE,
|
| - "GetMaxValueInBufferCHROMIUM: unknown buffer");
|
| + "GetMaxValueInBufferCHROMIUM", "unknown buffer");
|
| } else {
|
| if (!info->GetMaxValueForRange(offset, count, type, &max_vertex_accessed)) {
|
| // TODO(gman): Should this be a GL error or a command buffer error?
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "GetMaxValueInBufferCHROMIUM: range out of bounds for buffer");
|
| + "GetMaxValueInBufferCHROMIUM", "range out of bounds for buffer");
|
| }
|
| }
|
| return max_vertex_accessed;
|
| @@ -5806,7 +5829,7 @@ void GLES2DecoderImpl::DoAttachShader(
|
| }
|
| if (!program_info->AttachShader(shader_manager(), shader_info)) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glAttachShader: can not attach more than"
|
| + "glAttachShader", "can not attach more than"
|
| " one shader of the same type.");
|
| return;
|
| }
|
| @@ -5827,7 +5850,7 @@ void GLES2DecoderImpl::DoDetachShader(
|
| }
|
| if (!program_info->DetachShader(shader_manager(), shader_info)) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glDetachShader: shader not attached to program");
|
| + "glDetachShader", "shader not attached to program");
|
| return;
|
| }
|
| glDetachShader(program_info->service_id(), shader_info->service_id());
|
| @@ -5847,7 +5870,7 @@ void GLES2DecoderImpl::DoGetVertexAttribfv(
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetVertexAttribfv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glGetVertexAttribfv", "index out of range");
|
| return;
|
| }
|
| switch (pname) {
|
| @@ -5895,7 +5918,7 @@ void GLES2DecoderImpl::DoGetVertexAttribiv(
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetVertexAttribiv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glGetVertexAttribiv", "index out of range");
|
| return;
|
| }
|
| switch (pname) {
|
| @@ -5942,7 +5965,7 @@ void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib1f: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib1f", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -5958,7 +5981,7 @@ void GLES2DecoderImpl::DoVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib2f: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib2f", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -5975,7 +5998,7 @@ void GLES2DecoderImpl::DoVertexAttrib3f(
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib3f: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib3f", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -5992,7 +6015,7 @@ void GLES2DecoderImpl::DoVertexAttrib4f(
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib4f: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib4f", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -6008,7 +6031,7 @@ void GLES2DecoderImpl::DoVertexAttrib1fv(GLuint index, const GLfloat* v) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib1fv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib1fv", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -6024,7 +6047,7 @@ void GLES2DecoderImpl::DoVertexAttrib2fv(GLuint index, const GLfloat* v) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib2fv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib2fv", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -6040,7 +6063,7 @@ void GLES2DecoderImpl::DoVertexAttrib3fv(GLuint index, const GLfloat* v) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib3fv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib3fv", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -6056,7 +6079,7 @@ void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) {
|
| VertexAttribManager::VertexAttribInfo* info =
|
| vertex_attrib_manager_->GetVertexAttribInfo(index);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttrib4fv: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttrib4fv", "index out of range");
|
| return;
|
| }
|
| VertexAttribManager::VertexAttribInfo::Vec4 value;
|
| @@ -6072,7 +6095,7 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer(
|
| uint32 immediate_data_size, const gles2::VertexAttribPointer& c) {
|
| if (!bound_array_buffer_ || bound_array_buffer_->IsDeleted()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribPointer: no array buffer bound");
|
| + "glVertexAttribPointer", "no array buffer bound");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6085,43 +6108,43 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer(
|
| const void* ptr = reinterpret_cast<const void*>(offset);
|
| if (!validators_->vertex_attrib_type.IsValid(type)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glVertexAttribPointer: type GL_INVALID_ENUM");
|
| + "glVertexAttribPointer", "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->vertex_attrib_size.IsValid(size)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribPointer: size GL_INVALID_VALUE");
|
| + "glVertexAttribPointer", "size GL_INVALID_VALUE");
|
| return error::kNoError;
|
| }
|
| if (indx >= group_->max_vertex_attribs()) {
|
| - SetGLError(GL_INVALID_VALUE, "glVertexAttribPointer: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glVertexAttribPointer", "index out of range");
|
| return error::kNoError;
|
| }
|
| if (stride < 0) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribPointer: stride < 0");
|
| + "glVertexAttribPointer", "stride < 0");
|
| return error::kNoError;
|
| }
|
| if (stride > 255) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribPointer: stride > 255");
|
| + "glVertexAttribPointer", "stride > 255");
|
| return error::kNoError;
|
| }
|
| if (offset < 0) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribPointer: offset < 0");
|
| + "glVertexAttribPointer", "offset < 0");
|
| return error::kNoError;
|
| }
|
| GLsizei component_size =
|
| GLES2Util::GetGLTypeSizeForTexturesAndBuffers(type);
|
| if (offset % component_size > 0) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glVertexAttribPointer: offset not valid for type");
|
| + "glVertexAttribPointer", "offset not valid for type");
|
| return error::kNoError;
|
| }
|
| if (stride % component_size > 0) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glVertexAttribPointer: stride not valid for type");
|
| + "glVertexAttribPointer", "stride not valid for type");
|
| return error::kNoError;
|
| }
|
| vertex_attrib_manager_->SetAttribInfo(
|
| @@ -6152,13 +6175,13 @@ error::Error GLES2DecoderImpl::HandleVertexAttribDivisorANGLE(
|
| uint32 immediate_data_size, const gles2::VertexAttribDivisorANGLE& c) {
|
| if (!feature_info_->feature_flags().angle_instanced_arrays) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glVertexAttribDivisorANGLE: function not available");
|
| + "glVertexAttribDivisorANGLE", "function not available");
|
| }
|
| GLuint index = c.index;
|
| GLuint divisor = c.divisor;
|
| if (index >= group_->max_vertex_attribs()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glVertexAttribDivisorANGLE: index out of range");
|
| + "glVertexAttribDivisorANGLE", "index out of range");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6178,7 +6201,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| GLenum format = c.format;
|
| GLenum type = c.type;
|
| if (width < 0 || height < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glReadPixels: dimensions < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions < 0");
|
| return error::kNoError;
|
| }
|
| typedef gles2::ReadPixels::Result Result;
|
| @@ -6196,11 +6219,11 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| }
|
|
|
| if (!validators_->read_pixel_format.IsValid(format)) {
|
| - SetGLError(GL_INVALID_ENUM, "glReadPixels: format GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glReadPixels", "format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->pixel_type.IsValid(type)) {
|
| - SetGLError(GL_INVALID_ENUM, "glReadPixels: type GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glReadPixels", "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (width == 0 || height == 0) {
|
| @@ -6213,7 +6236,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| GLint max_x;
|
| GLint max_y;
|
| if (!SafeAdd(x, width, &max_x) || !SafeAdd(y, height, &max_y)) {
|
| - SetGLError(GL_INVALID_VALUE, "glReadPixels: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6234,7 +6257,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| if (!GLES2Util::ComputeImageDataSizes(
|
| width, 2, format, type, pack_alignment_, &temp_size,
|
| &unpadded_row_size, &padded_row_size)) {
|
| - SetGLError(GL_INVALID_VALUE, "glReadPixels: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6243,7 +6266,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| if (!GLES2Util::ComputeImageDataSizes(
|
| dest_x_offset, 1, format, type, pack_alignment_, &dest_row_offset, NULL,
|
| NULL)) {
|
| - SetGLError(GL_INVALID_VALUE, "glReadPixels: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6283,13 +6306,15 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
|
| if (!GLES2Util::ComputeImageDataSizes(
|
| width, 2, format, type, pack_alignment_, &temp_size,
|
| &unpadded_row_size, &padded_row_size)) {
|
| - SetGLError(GL_INVALID_VALUE, "glReadPixels: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
| // NOTE: Assumes the type is GL_UNSIGNED_BYTE which was true at the time
|
| // of this implementation.
|
| if (type != GL_UNSIGNED_BYTE) {
|
| - SetGLError(GL_INVALID_OPERATION, "unsupported readPixel format");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, "glReadPixels",
|
| + "unsupported readPixel format");
|
| return error::kNoError;
|
| }
|
| switch (format) {
|
| @@ -6322,7 +6347,7 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
|
| GLenum pname = c.pname;
|
| GLenum param = c.param;
|
| if (!validators_->pixel_store.IsValid(pname)) {
|
| - SetGLError(GL_INVALID_ENUM, "glPixelStorei: pname GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glPixelStorei", "pname GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| switch (pname) {
|
| @@ -6330,7 +6355,7 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
|
| case GL_UNPACK_ALIGNMENT:
|
| if (!validators_->pixel_store_alignment.IsValid(param)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glPixelSTore: param GL_INVALID_VALUE");
|
| + "glPixelStore", "param GL_INVALID_VALUE");
|
| return error::kNoError;
|
| }
|
| break;
|
| @@ -6345,18 +6370,18 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
|
| }
|
| glPixelStorei(pname, param);
|
| switch (pname) {
|
| - case GL_PACK_ALIGNMENT:
|
| - pack_alignment_ = param;
|
| - break;
|
| - case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
|
| - break;
|
| - case GL_UNPACK_ALIGNMENT:
|
| - unpack_alignment_ = param;
|
| - break;
|
| - default:
|
| - // Validation should have prevented us from getting here.
|
| - NOTREACHED();
|
| - break;
|
| + case GL_PACK_ALIGNMENT:
|
| + pack_alignment_ = param;
|
| + break;
|
| + case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
|
| + break;
|
| + case GL_UNPACK_ALIGNMENT:
|
| + unpack_alignment_ = param;
|
| + break;
|
| + default:
|
| + // Validation should have prevented us from getting here.
|
| + NOTREACHED();
|
| + break;
|
| }
|
| return error::kNoError;
|
| }
|
| @@ -6366,7 +6391,7 @@ error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
|
| TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM");
|
| if (!context_->HasExtension("GL_CHROMIUM_post_sub_buffer")) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glPostSubBufferCHROMIUM: command not supported by surface");
|
| + "glPostSubBufferCHROMIUM", "command not supported by surface");
|
| return error::kNoError;
|
| }
|
| if (surface_->PostSubBuffer(c.x, c.y, c.width, c.height)) {
|
| @@ -6381,7 +6406,7 @@ error::Error GLES2DecoderImpl::GetAttribLocationHelper(
|
| GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
|
| const std::string& name_str) {
|
| if (!StringIsValidForGLES(name_str.c_str())) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetAttribLocation: Invalid character");
|
| + SetGLError(GL_INVALID_VALUE, "glGetAttribLocation", "Invalid character");
|
| return error::kNoError;
|
| }
|
| ProgramManager::ProgramInfo* info = GetProgramInfoNotShader(
|
| @@ -6390,7 +6415,8 @@ error::Error GLES2DecoderImpl::GetAttribLocationHelper(
|
| return error::kNoError;
|
| }
|
| if (!info->IsValid()) {
|
| - SetGLError(GL_INVALID_OPERATION, "glGetAttribLocation: program not linked");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, "glGetAttribLocation", "program not linked");
|
| return error::kNoError;
|
| }
|
| GLint* location = GetSharedMemoryAs<GLint*>(
|
| @@ -6451,7 +6477,7 @@ error::Error GLES2DecoderImpl::GetUniformLocationHelper(
|
| GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
|
| const std::string& name_str) {
|
| if (!StringIsValidForGLES(name_str.c_str())) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetUniformLocation: Invalid character");
|
| + SetGLError(GL_INVALID_VALUE, "glGetUniformLocation", "Invalid character");
|
| return error::kNoError;
|
| }
|
| ProgramManager::ProgramInfo* info = GetProgramInfoNotShader(
|
| @@ -6460,8 +6486,8 @@ error::Error GLES2DecoderImpl::GetUniformLocationHelper(
|
| return error::kNoError;
|
| }
|
| if (!info->IsValid()) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - "glGetUniformLocation: program not linked");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, "glGetUniformLocation", "program not linked");
|
| return error::kNoError;
|
| }
|
| GLint* location = GetSharedMemoryAs<GLint*>(
|
| @@ -6523,7 +6549,7 @@ error::Error GLES2DecoderImpl::HandleGetString(
|
| uint32 immediate_data_size, const gles2::GetString& c) {
|
| GLenum name = static_cast<GLenum>(c.name);
|
| if (!validators_->string_type.IsValid(name)) {
|
| - SetGLError(GL_INVALID_ENUM, "glGetString: name GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glGetString", "name GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| const char* gl_str = reinterpret_cast<const char*>(glGetString(name));
|
| @@ -6573,20 +6599,20 @@ error::Error GLES2DecoderImpl::HandleGetString(
|
| void GLES2DecoderImpl::DoBufferData(
|
| GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {
|
| if (!validators_->buffer_target.IsValid(target)) {
|
| - SetGLError(GL_INVALID_ENUM, "glBufferData: target GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glBufferData", "target GL_INVALID_ENUM");
|
| return;
|
| }
|
| if (!validators_->buffer_usage.IsValid(usage)) {
|
| - SetGLError(GL_INVALID_ENUM, "glBufferData: usage GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glBufferData", "usage GL_INVALID_ENUM");
|
| return;
|
| }
|
| if (size < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glBufferData: size < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glBufferData", "size < 0");
|
| return;
|
| }
|
| BufferManager::BufferInfo* info = GetBufferInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glBufferData: unknown buffer");
|
| + SetGLError(GL_INVALID_VALUE, "glBufferData", "unknown buffer");
|
| return;
|
| }
|
| // Clear the buffer to 0 if no initial data was passed in.
|
| @@ -6649,11 +6675,11 @@ void GLES2DecoderImpl::DoBufferSubData(
|
| GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {
|
| BufferManager::BufferInfo* info = GetBufferInfoForTarget(target);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glBufferSubData: unknown buffer");
|
| + SetGLError(GL_INVALID_VALUE, "glBufferSubData", "unknown buffer");
|
| return;
|
| }
|
| if (!info->SetRange(offset, size, data)) {
|
| - SetGLError(GL_INVALID_VALUE, "glBufferSubData: out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glBufferSubData", "out of range");
|
| return;
|
| }
|
| if (bufferdata_faster_than_buffersubdata_ &&
|
| @@ -6763,6 +6789,122 @@ bool GLES2DecoderImpl::ClearLevel(
|
| return true;
|
| }
|
|
|
| +namespace {
|
| +
|
| +const int kS3TCBlockWidth = 4;
|
| +const int kS3TCBlockHeight = 4;
|
| +const int kS3TCDXT1BlockSize = 8;
|
| +const int kS3TCDXT3AndDXT5BlockSize = 16;
|
| +
|
| +bool IsValidDXTSize(GLint level, GLsizei size) {
|
| + return (level && size == 1) ||
|
| + (level && size == 2) || !(size % kS3TCBlockWidth);
|
| +}
|
| +
|
| +} // anonymous namespace.
|
| +
|
| +bool GLES2DecoderImpl::ValidateCompressedTexFuncData(
|
| + const char* function_name,
|
| + GLsizei width, GLsizei height, GLenum format, size_t size) {
|
| + unsigned int bytes_required = 0;
|
| +
|
| + switch (format) {
|
| + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: {
|
| + int num_blocks_across =
|
| + (width + kS3TCBlockWidth - 1) / kS3TCBlockWidth;
|
| + int num_blocks_down =
|
| + (height + kS3TCBlockHeight - 1) / kS3TCBlockHeight;
|
| + int num_blocks = num_blocks_across * num_blocks_down;
|
| + bytes_required = num_blocks * kS3TCDXT1BlockSize;
|
| + break;
|
| + }
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: {
|
| + int num_blocks_across =
|
| + (width + kS3TCBlockWidth - 1) / kS3TCBlockWidth;
|
| + int num_blocks_down =
|
| + (height + kS3TCBlockHeight - 1) / kS3TCBlockHeight;
|
| + int num_blocks = num_blocks_across * num_blocks_down;
|
| + bytes_required = num_blocks * kS3TCDXT3AndDXT5BlockSize;
|
| + break;
|
| + }
|
| + default:
|
| + SetGLError(GL_INVALID_ENUM, function_name, "invalid format");
|
| + return false;
|
| + }
|
| +
|
| + if (size != bytes_required) {
|
| + SetGLError(
|
| + GL_INVALID_VALUE, function_name, "size is not correct for dimensions");
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +bool GLES2DecoderImpl::ValidateCompressedTexDimensions(
|
| + const char* function_name,
|
| + GLint level, GLsizei width, GLsizei height, GLenum format) {
|
| + switch (format) {
|
| + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: {
|
| + if (!IsValidDXTSize(level, width) || !IsValidDXTSize(level, height)) {
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, function_name,
|
| + "width or height invalid for level");
|
| + return false;
|
| + }
|
| + return true;
|
| + }
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +bool GLES2DecoderImpl::ValidateCompressedTexSubDimensions(
|
| + const char* function_name,
|
| + GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
| + GLsizei width, GLsizei height, GLenum format,
|
| + TextureManager::TextureInfo* texture) {
|
| + if (xoffset < 0 || yoffset < 0) {
|
| + SetGLError(
|
| + GL_INVALID_VALUE, function_name, "xoffset or yoffset < 0");
|
| + return false;
|
| + }
|
| +
|
| + switch (format) {
|
| + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
| + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: {
|
| + const int kBlockWidth = 4;
|
| + const int kBlockHeight = 4;
|
| + if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) {
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, function_name,
|
| + "xoffset or yoffset not multiple of 4");
|
| + return false;
|
| + }
|
| + GLsizei tex_width = 0;
|
| + GLsizei tex_height = 0;
|
| + if (!texture->GetLevelSize(target, level, &tex_width, &tex_height) ||
|
| + width - xoffset > tex_width ||
|
| + height - yoffset > tex_height) {
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, function_name, "dimensions out of range");
|
| + return false;
|
| + }
|
| + return ValidateCompressedTexDimensions(
|
| + function_name, level, width, height, format);
|
| + }
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| error::Error GLES2DecoderImpl::DoCompressedTexImage2D(
|
| GLenum target,
|
| GLint level,
|
| @@ -6775,30 +6917,37 @@ error::Error GLES2DecoderImpl::DoCompressedTexImage2D(
|
| // TODO(gman): Validate image_size is correct for width, height and format.
|
| if (!validators_->texture_target.IsValid(target)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glCompressedTexImage2D: target GL_INVALID_ENUM");
|
| + "glCompressedTexImage2D", "target GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->compressed_texture_format.IsValid(
|
| internal_format)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glCompressedTexImage2D: internal_format GL_INVALID_ENUM");
|
| + "glCompressedTexImage2D", "internal_format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!texture_manager()->ValidForTarget(target, level, width, height, 1) ||
|
| border != 0) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCompressedTexImage2D: dimensions out of range");
|
| + "glCompressedTexImage2D", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCompressedTexImage2D: unknown texture target");
|
| + "glCompressedTexImage2D", "unknown texture target");
|
| return error::kNoError;
|
| }
|
| if (info->IsImmutable()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCompressedTexImage2D: texture is immutable");
|
| + "glCompressedTexImage2D", "texture is immutable");
|
| + return error::kNoError;
|
| + }
|
| +
|
| + if (!ValidateCompressedTexDimensions(
|
| + "glCompressedTexImage2D", level, width, height, internal_format) ||
|
| + !ValidateCompressedTexFuncData(
|
| + "glCompressedTexImage2D", width, height, internal_format, image_size)) {
|
| return error::kNoError;
|
| }
|
|
|
| @@ -6913,24 +7062,24 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket(
|
| }
|
| if (!validators_->texture_target.IsValid(target)) {
|
| SetGLError(
|
| - GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM");
|
| + GL_INVALID_ENUM, "glCompressedTexSubImage2D", "target GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->compressed_texture_format.IsValid(format)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glCompressedTexSubImage2D: format GL_INVALID_ENUM");
|
| + "glCompressedTexSubImage2D", "format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (width < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D", "width < 0");
|
| return error::kNoError;
|
| }
|
| if (height < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D", "height < 0");
|
| return error::kNoError;
|
| }
|
| if (imageSize < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: imageSize < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D", "imageSize < 0");
|
| return error::kNoError;
|
| }
|
| DoCompressedTexSubImage2D(
|
| @@ -6942,8 +7091,8 @@ bool GLES2DecoderImpl::ValidateTextureParameters(
|
| const char* function_name,
|
| GLenum target, GLenum format, GLenum type, GLint level) {
|
| if (!feature_info_->GetTextureFormatValidator(format).IsValid(type)) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": invalid type " +
|
| + SetGLError(GL_INVALID_OPERATION, function_name,
|
| + (std::string("invalid type ") +
|
| GLES2Util::GetStringEnum(type) + " for format " +
|
| GLES2Util::GetStringEnum(format)).c_str());
|
| return false;
|
| @@ -6951,8 +7100,8 @@ bool GLES2DecoderImpl::ValidateTextureParameters(
|
|
|
| uint32 channels = GLES2Util::GetChannelsForFormat(format);
|
| if ((channels & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && level) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - (std::string(function_name) + ": invalid type " +
|
| + SetGLError(GL_INVALID_OPERATION, function_name,
|
| + (std::string("invalid type ") +
|
| GLES2Util::GetStringEnum(type) + " for format " +
|
| GLES2Util::GetStringEnum(format)).c_str());
|
| return false;
|
| @@ -6972,24 +7121,25 @@ error::Error GLES2DecoderImpl::DoTexImage2D(
|
| const void* pixels,
|
| uint32 pixels_size) {
|
| if (!validators_->texture_target.IsValid(target)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexImage2D: target GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexImage2D", "target GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->texture_format.IsValid(internal_format)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glTexImage2D: internal_format GL_INVALID_ENUM");
|
| + "glTexImage2D", "internal_format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->texture_format.IsValid(format)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexImage2D: format GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexImage2D", "format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->pixel_type.IsValid(type)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexImage2D: type GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexImage2D", "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (format != internal_format) {
|
| - SetGLError(GL_INVALID_OPERATION, "glTexImage2D: format != internalFormat");
|
| + SetGLError(GL_INVALID_OPERATION,
|
| + "glTexImage2D", "format != internalFormat");
|
| return error::kNoError;
|
| }
|
| if (!ValidateTextureParameters("glTexImage2D", target, format, type, level)) {
|
| @@ -6997,26 +7147,26 @@ error::Error GLES2DecoderImpl::DoTexImage2D(
|
| }
|
| if (!texture_manager()->ValidForTarget(target, level, width, height, 1) ||
|
| border != 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexImage2D: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glTexImage2D", "dimensions out of range");
|
| return error::kNoError;
|
| }
|
| if ((GLES2Util::GetChannelsForFormat(format) &
|
| (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && pixels) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glTexImage2D: can not supply data for depth or stencil textures");
|
| + "glTexImage2D", "can not supply data for depth or stencil textures");
|
| return error::kNoError;
|
| }
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImage2D: unknown texture for target");
|
| + "glTexImage2D", "unknown texture for target");
|
| return error::kNoError;
|
| }
|
|
|
| if (info->IsImmutable()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImage2D: texture is immutable");
|
| + "glTexImage2D", "texture is immutable");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -7141,7 +7291,7 @@ void GLES2DecoderImpl::DoCompressedTexSubImage2D(
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCompressedTexSubImage2D: unknown texture for target");
|
| + "glCompressedTexSubImage2D", "unknown texture for target");
|
| return;
|
| }
|
| GLenum type = 0;
|
| @@ -7149,21 +7299,31 @@ void GLES2DecoderImpl::DoCompressedTexSubImage2D(
|
| if (!info->GetLevelType(target, level, &type, &internal_format)) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glCompressedTexSubImage2D: level does not exist.");
|
| + "glCompressedTexSubImage2D", "level does not exist.");
|
| return;
|
| }
|
| if (internal_format != format) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glCompressedTexSubImage2D: format does not match internal format.");
|
| + "glCompressedTexSubImage2D", "format does not match internal format.");
|
| return;
|
| }
|
| if (!info->ValidForTexture(
|
| target, level, xoffset, yoffset, width, height, format, type)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCompressedTexSubImage2D: bad dimensions.");
|
| + "glCompressedTexSubImage2D", "bad dimensions.");
|
| + return;
|
| + }
|
| +
|
| + if (!ValidateCompressedTexFuncData(
|
| + "glCompressedTexSubImage2D", width, height, format, image_size) ||
|
| + !ValidateCompressedTexSubDimensions(
|
| + "glCompressedTexSubImage2D",
|
| + target, level, xoffset, yoffset, width, height, format, info)) {
|
| return;
|
| }
|
| +
|
| +
|
| // Note: There is no need to deal with texture cleared tracking here
|
| // because the validation above means you can only get here if the level
|
| // is already a matching compressed format and in that case
|
| @@ -7201,16 +7361,16 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCopyTexImage2D: unknown texture for target");
|
| + "glCopyTexImage2D", "unknown texture for target");
|
| return;
|
| }
|
| if (info->IsImmutable()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCopyTexImage2D: texture is immutable");
|
| + "glCopyTexImage2D", "texture is immutable");
|
| }
|
| if (!texture_manager()->ValidForTarget(target, level, width, height, 1) ||
|
| border != 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D: dimensions out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "dimensions out of range");
|
| return;
|
| }
|
| if (!ValidateTextureParameters(
|
| @@ -7224,14 +7384,14 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
|
| uint32 channels_needed = GLES2Util::GetChannelsForFormat(internal_format);
|
|
|
| if ((channels_needed & channels_exist) != channels_needed) {
|
| - SetGLError(GL_INVALID_OPERATION, "glCopyTexImage2D: incompatible format");
|
| + SetGLError(GL_INVALID_OPERATION, "glCopyTexImage2D", "incompatible format");
|
| return;
|
| }
|
|
|
| if ((channels_needed & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glCopyImage2D: can not be used with depth or stencil textures");
|
| + "glCopyImage2D", "can not be used with depth or stencil textures");
|
| return;
|
| }
|
|
|
| @@ -7267,7 +7427,7 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
|
| info->service_id(), info->target(),
|
| target, level, internal_format, GL_UNSIGNED_BYTE, width, height,
|
| info->IsImmutable())) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glCopyTexImage2D: dimensions too big");
|
| + SetGLError(GL_OUT_OF_MEMORY, "glCopyTexImage2D", "dimensions too big");
|
| return;
|
| }
|
| if (copyHeight > 0 && copyWidth > 0) {
|
| @@ -7303,7 +7463,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCopyTexSubImage2D: unknown texture for target");
|
| + "glCopyTexSubImage2D", "unknown texture for target");
|
| return;
|
| }
|
| GLenum type = 0;
|
| @@ -7312,7 +7472,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
|
| !info->ValidForTexture(
|
| target, level, xoffset, yoffset, width, height, format, type)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCopyTexSubImage2D: bad dimensions.");
|
| + "glCopyTexSubImage2D", "bad dimensions.");
|
| return;
|
| }
|
|
|
| @@ -7323,14 +7483,14 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
|
|
|
| if ((channels_needed & channels_exist) != channels_needed) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION, "glCopyTexSubImage2D: incompatible format");
|
| + GL_INVALID_OPERATION, "glCopyTexSubImage2D", "incompatible format");
|
| return;
|
| }
|
|
|
| if ((channels_needed & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glCopySubImage2D: can not be used with depth or stencil textures");
|
| + "glCopySubImage2D", "can not be used with depth or stencil textures");
|
| return;
|
| }
|
|
|
| @@ -7348,7 +7508,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
|
| Clip(y, height, size.height(), ©Y, ©Height);
|
|
|
| if (!texture_manager()->ClearTextureLevel(this, info, target, level)) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glCopyTexSubImage2D: dimensions too big");
|
| + SetGLError(GL_OUT_OF_MEMORY, "glCopyTexSubImage2D", "dimensions too big");
|
| return;
|
| }
|
|
|
| @@ -7361,7 +7521,8 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
|
| if (!GLES2Util::ComputeImageDataSizes(
|
| width, height, format, type, unpack_alignment_, &pixels_size, NULL,
|
| NULL)) {
|
| - SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D: dimensions too large");
|
| + SetGLError(
|
| + GL_INVALID_VALUE, "glCopyTexSubImage2D", "dimensions too large");
|
| return;
|
| }
|
| scoped_array<char> zero(new char[pixels_size]);
|
| @@ -7395,32 +7556,30 @@ void GLES2DecoderImpl::DoTexSubImage2D(
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexSubImage2D: unknown texture for target");
|
| + "glTexSubImage2D", "unknown texture for target");
|
| return;
|
| }
|
| GLenum current_type = 0;
|
| GLenum internal_format = 0;
|
| if (!info->GetLevelType(target, level, ¤t_type, &internal_format)) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION,
|
| - "glTexSubImage2D: level does not exist.");
|
| + GL_INVALID_OPERATION, "glTexSubImage2D", "level does not exist.");
|
| return;
|
| }
|
| if (format != internal_format) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexSubImage2D: format does not match internal format.");
|
| + "glTexSubImage2D", "format does not match internal format.");
|
| return;
|
| }
|
| if (type != current_type) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexSubImage2D: type does not match type of texture.");
|
| + "glTexSubImage2D", "type does not match type of texture.");
|
| return;
|
| }
|
|
|
| if (!info->ValidForTexture(
|
| target, level, xoffset, yoffset, width, height, format, type)) {
|
| - SetGLError(GL_INVALID_VALUE,
|
| - "glTexSubImage2D: bad dimensions.");
|
| + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D", "bad dimensions.");
|
| return;
|
| }
|
|
|
| @@ -7428,7 +7587,7 @@ void GLES2DecoderImpl::DoTexSubImage2D(
|
| (GLES2Util::kDepth | GLES2Util::kStencil)) != 0) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glTexSubImage2D: can not supply data for depth or stencil textures");
|
| + "glTexSubImage2D", "can not supply data for depth or stencil textures");
|
| return;
|
| }
|
|
|
| @@ -7439,7 +7598,7 @@ void GLES2DecoderImpl::DoTexSubImage2D(
|
| if (xoffset != 0 || yoffset != 0 ||
|
| width != tex_width || height != tex_height) {
|
| if (!texture_manager()->ClearTextureLevel(this, info, target, level)) {
|
| - SetGLError(GL_OUT_OF_MEMORY, "glTexSubImage2D: dimensions too big");
|
| + SetGLError(GL_OUT_OF_MEMORY, "glTexSubImage2D", "dimensions too big");
|
| return;
|
| }
|
| glTexSubImage2D(
|
| @@ -7482,23 +7641,23 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D(
|
| const void* pixels = GetSharedMemoryAs<const void*>(
|
| c.pixels_shm_id, c.pixels_shm_offset, data_size);
|
| if (!validators_->texture_target.IsValid(target)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "target GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (width < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D", "width < 0");
|
| return error::kNoError;
|
| }
|
| if (height < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D", "height < 0");
|
| return error::kNoError;
|
| }
|
| if (!validators_->texture_format.IsValid(format)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->pixel_type.IsValid(type)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (pixels == NULL) {
|
| @@ -7531,23 +7690,23 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate(
|
| const void* pixels = GetImmediateDataAs<const void*>(
|
| c, data_size, immediate_data_size);
|
| if (!validators_->texture_target.IsValid(target)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "target GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (width < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D", "width < 0");
|
| return error::kNoError;
|
| }
|
| if (height < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D", "height < 0");
|
| return error::kNoError;
|
| }
|
| if (!validators_->texture_format.IsValid(format)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "format GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->pixel_type.IsValid(type)) {
|
| - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM");
|
| + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D", "type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (pixels == NULL) {
|
| @@ -7574,12 +7733,12 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv(
|
| }
|
| if (!validators_->vertex_pointer.IsValid(pname)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glGetVertexAttribPointerv: pname GL_INVALID_ENUM");
|
| + "glGetVertexAttribPointerv", "pname GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (index >= group_->max_vertex_attribs()) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glGetVertexAttribPointerv: index out of range.");
|
| + "glGetVertexAttribPointerv", "index out of range.");
|
| return error::kNoError;
|
| }
|
| result->SetNumResults(1);
|
| @@ -7617,7 +7776,7 @@ bool GLES2DecoderImpl::GetUniformSetup(
|
| }
|
| if (!info->IsValid()) {
|
| // Program was not linked successfully. (ie, glLinkProgram)
|
| - SetGLError(GL_INVALID_OPERATION, "glGetUniform: program not linked");
|
| + SetGLError(GL_INVALID_OPERATION, "glGetUniform", "program not linked");
|
| return false;
|
| }
|
| *service_id = info->service_id();
|
| @@ -7627,13 +7786,13 @@ bool GLES2DecoderImpl::GetUniformSetup(
|
| fake_location, real_location, &array_index);
|
| if (!uniform_info) {
|
| // No such location.
|
| - SetGLError(GL_INVALID_OPERATION, "glGetUniform: unknown location");
|
| + SetGLError(GL_INVALID_OPERATION, "glGetUniform", "unknown location");
|
| return false;
|
| }
|
| GLenum type = uniform_info->type;
|
| GLsizei size = GLES2Util::GetGLDataTypeSizeForUniforms(type);
|
| if (size == 0) {
|
| - SetGLError(GL_INVALID_OPERATION, "glGetUniform: unknown type");
|
| + SetGLError(GL_INVALID_OPERATION, "glGetUniform", "unknown type");
|
| return false;
|
| }
|
| result = GetSharedMemoryAs<SizedResult<GLint>*>(
|
| @@ -7712,12 +7871,12 @@ error::Error GLES2DecoderImpl::HandleGetShaderPrecisionFormat(
|
| }
|
| if (!validators_->shader_type.IsValid(shader_type)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glGetShaderPrecisionFormat: shader_type GL_INVALID_ENUM");
|
| + "glGetShaderPrecisionFormat", "shader_type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| if (!validators_->shader_precision.IsValid(precision_type)) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glGetShaderPrecisionFormat: precision_type GL_INVALID_ENUM");
|
| + "glGetShaderPrecisionFormat", "precision_type GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -7803,7 +7962,7 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniform(
|
| const ProgramManager::ProgramInfo::UniformInfo* uniform_info =
|
| info->GetUniformInfo(index);
|
| if (!uniform_info) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetActiveUniform: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glGetActiveUniform", "index out of range");
|
| return error::kNoError;
|
| }
|
| result->success = 1; // true.
|
| @@ -7837,7 +7996,7 @@ error::Error GLES2DecoderImpl::HandleGetActiveAttrib(
|
| const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info =
|
| info->GetAttribInfo(index);
|
| if (!attrib_info) {
|
| - SetGLError(GL_INVALID_VALUE, "glGetActiveAttrib: index out of range");
|
| + SetGLError(GL_INVALID_VALUE, "glGetActiveAttrib", "index out of range");
|
| return error::kNoError;
|
| }
|
| result->success = 1; // true.
|
| @@ -7851,17 +8010,17 @@ error::Error GLES2DecoderImpl::HandleGetActiveAttrib(
|
| error::Error GLES2DecoderImpl::HandleShaderBinary(
|
| uint32 immediate_data_size, const gles2::ShaderBinary& c) {
|
| #if 1 // No binary shader support.
|
| - SetGLError(GL_INVALID_OPERATION, "glShaderBinary: not supported");
|
| + SetGLError(GL_INVALID_OPERATION, "glShaderBinary", "not supported");
|
| return error::kNoError;
|
| #else
|
| GLsizei n = static_cast<GLsizei>(c.n);
|
| if (n < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glShaderBinary: n < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glShaderBinary", "n < 0");
|
| return error::kNoError;
|
| }
|
| GLsizei length = static_cast<GLsizei>(c.length);
|
| if (length < 0) {
|
| - SetGLError(GL_INVALID_VALUE, "glShaderBinary: length < 0");
|
| + SetGLError(GL_INVALID_VALUE, "glShaderBinary", "length < 0");
|
| return error::kNoError;
|
| }
|
| uint32 data_size;
|
| @@ -7880,7 +8039,7 @@ error::Error GLES2DecoderImpl::HandleShaderBinary(
|
| for (GLsizei ii = 0; ii < n; ++ii) {
|
| ShaderManager::ShaderInfo* info = GetShaderInfo(shaders[ii]);
|
| if (!info) {
|
| - SetGLError(GL_INVALID_VALUE, "glShaderBinary: unknown shader");
|
| + SetGLError(GL_INVALID_VALUE, "glShaderBinary", "unknown shader");
|
| return error::kNoError;
|
| }
|
| service_ids[ii] = info->service_id();
|
| @@ -8112,7 +8271,7 @@ error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM(
|
| uint32 num = util_.GLGetNumValuesReturned(enums[ii]);
|
| if (num == 0) {
|
| SetGLError(GL_INVALID_ENUM,
|
| - "glGetMulitpleCHROMIUM: pname GL_INVALID_ENUM");
|
| + "glGetMulitpleCHROMIUM", "pname GL_INVALID_ENUM");
|
| return error::kNoError;
|
| }
|
| // Num will never be more than 4.
|
| @@ -8129,7 +8288,7 @@ error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM(
|
|
|
| if (result_size != static_cast<uint32>(c.size)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glGetMulitpleCHROMIUM: bad size GL_INVALID_VALUE");
|
| + "glGetMulitpleCHROMIUM", "bad size GL_INVALID_VALUE");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -8181,16 +8340,16 @@ error::Error GLES2DecoderImpl::HandleGetProgramInfoCHROMIUM(
|
|
|
| error::ContextLostReason GLES2DecoderImpl::GetContextLostReason() {
|
| switch (reset_status_) {
|
| - case GL_NO_ERROR:
|
| - // TODO(kbr): improve the precision of the error code in this case.
|
| - // Consider delegating to context for error code if MakeCurrent fails.
|
| - return error::kUnknown;
|
| - case GL_GUILTY_CONTEXT_RESET_ARB:
|
| - return error::kGuilty;
|
| - case GL_INNOCENT_CONTEXT_RESET_ARB:
|
| - return error::kInnocent;
|
| - case GL_UNKNOWN_CONTEXT_RESET_ARB:
|
| - return error::kUnknown;
|
| + case GL_NO_ERROR:
|
| + // TODO(kbr): improve the precision of the error code in this case.
|
| + // Consider delegating to context for error code if MakeCurrent fails.
|
| + return error::kUnknown;
|
| + case GL_GUILTY_CONTEXT_RESET_ARB:
|
| + return error::kGuilty;
|
| + case GL_INNOCENT_CONTEXT_RESET_ARB:
|
| + return error::kInnocent;
|
| + case GL_UNKNOWN_CONTEXT_RESET_ARB:
|
| + return error::kUnknown;
|
| }
|
|
|
| NOTREACHED();
|
| @@ -8259,7 +8418,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
|
| break;
|
| default:
|
| if (!feature_info_->feature_flags().occlusion_query_boolean) {
|
| - SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: not enabled");
|
| + SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "not enabled");
|
| return error::kNoError;
|
| }
|
| break;
|
| @@ -8267,12 +8426,12 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
|
|
|
| if (current_query_) {
|
| SetGLError(
|
| - GL_INVALID_OPERATION, "glBeginQueryEXT: query already in progress");
|
| + GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress");
|
| return error::kNoError;
|
| }
|
|
|
| if (client_id == 0) {
|
| - SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: id is 0");
|
| + SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "id is 0");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -8292,7 +8451,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
|
| // group_->GetIdAllocator(id_namespaces::kQueries);
|
| // if (!id_allocator->InUse(client_id)) {
|
| // SetGLError(GL_INVALID_OPERATION,
|
| - // "glBeginQueryEXT: id not made by glGenQueriesEXT");
|
| + // "glBeginQueryEXT", "id not made by glGenQueriesEXT");
|
| // return error::kNoError;
|
| // }
|
| query = query_manager_->CreateQuery(
|
| @@ -8300,7 +8459,8 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
|
| }
|
|
|
| if (query->target() != target) {
|
| - SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: target does not match");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION, "glBeginQueryEXT", "target does not match");
|
| return error::kNoError;
|
| } else if (query->shm_id() != sync_shm_id ||
|
| query->shm_offset() != sync_shm_offset) {
|
| @@ -8322,12 +8482,12 @@ error::Error GLES2DecoderImpl::HandleEndQueryEXT(
|
| uint32 submit_count = static_cast<GLuint>(c.submit_count);
|
|
|
| if (!current_query_) {
|
| - SetGLError(GL_INVALID_OPERATION, "glEndQueryEXT: No active query");
|
| + SetGLError(GL_INVALID_OPERATION, "glEndQueryEXT", "No active query");
|
| return error::kNoError;
|
| }
|
| if (current_query_->target() != target) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glEndQueryEXT: target does not match active query");
|
| + "glEndQueryEXT", "target does not match active query");
|
| return error::kNoError;
|
| }
|
|
|
| @@ -8344,7 +8504,7 @@ error::Error GLES2DecoderImpl::HandleCreateStreamTextureCHROMIUM(
|
| const gles2::CreateStreamTextureCHROMIUM& c) {
|
| if (!feature_info_->feature_flags().chromium_stream_texture) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glOpenStreamTextureCHROMIUM: "
|
| + "glOpenStreamTextureCHROMIUM", ""
|
| "not supported.");
|
| return error::kNoError;
|
| }
|
| @@ -8361,21 +8521,21 @@ error::Error GLES2DecoderImpl::HandleCreateStreamTextureCHROMIUM(
|
| texture_manager()->GetTextureInfo(client_id);
|
| if (!info) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCreateStreamTextureCHROMIUM: "
|
| + "glCreateStreamTextureCHROMIUM", ""
|
| "bad texture id.");
|
| return error::kNoError;
|
| }
|
|
|
| if (info->IsStreamTexture()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCreateStreamTextureCHROMIUM: "
|
| + "glCreateStreamTextureCHROMIUM", ""
|
| "is already a stream texture.");
|
| return error::kNoError;
|
| }
|
|
|
| if (info->target() && info->target() != GL_TEXTURE_EXTERNAL_OES) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glCreateStreamTextureCHROMIUM: "
|
| + "glCreateStreamTextureCHROMIUM", ""
|
| "is already bound to incompatible target.");
|
| return error::kNoError;
|
| }
|
| @@ -8390,7 +8550,7 @@ error::Error GLES2DecoderImpl::HandleCreateStreamTextureCHROMIUM(
|
| info->SetStreamTexture(true);
|
| } else {
|
| SetGLError(GL_OUT_OF_MEMORY,
|
| - "glCreateStreamTextureCHROMIUM: "
|
| + "glCreateStreamTextureCHROMIUM", ""
|
| "failed to create platform texture.");
|
| }
|
|
|
| @@ -8413,7 +8573,7 @@ error::Error GLES2DecoderImpl::HandleDestroyStreamTextureCHROMIUM(
|
| texture_manager()->SetInfoTarget(info, 0);
|
| } else {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glDestroyStreamTextureCHROMIUM: bad texture id.");
|
| + "glDestroyStreamTextureCHROMIUM", "bad texture id.");
|
| }
|
|
|
| return error::kNoError;
|
| @@ -8437,15 +8597,16 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
|
| GLuint io_surface_id, GLuint plane) {
|
| #if defined(OS_MACOSX)
|
| if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: only supported on desktop GL.");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION,
|
| + "glTexImageIOSurface2DCHROMIUM", "only supported on desktop GL.");
|
| return;
|
| }
|
|
|
| IOSurfaceSupport* surface_support = IOSurfaceSupport::Initialize();
|
| if (!surface_support) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: only supported on 10.6.");
|
| + "glTexImageIOSurface2DCHROMIUM", "only supported on 10.6.");
|
| return;
|
| }
|
|
|
| @@ -8456,20 +8617,21 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
|
| // know what's going on.
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: requires TEXTURE_RECTANGLE_ARB target");
|
| + "glTexImageIOSurface2DCHROMIUM",
|
| + "requires TEXTURE_RECTANGLE_ARB target");
|
| return;
|
| }
|
|
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: no rectangle texture bound");
|
| + "glTexImageIOSurface2DCHROMIUM", "no rectangle texture bound");
|
| return;
|
| }
|
| if (info == texture_manager()->GetDefaultTextureInfo(target)) {
|
| // Maybe this is conceptually valid, but disallow it to avoid accidents.
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: can't bind default texture");
|
| + "glTexImageIOSurface2DCHROMIUM", "can't bind default texture");
|
| return;
|
| }
|
|
|
| @@ -8480,8 +8642,9 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
|
| // IOSurface in this case.
|
| CFTypeRef surface = surface_support->IOSurfaceLookup(io_surface_id);
|
| if (!surface) {
|
| - SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: no IOSurface with the given ID");
|
| + SetGLError(
|
| + GL_INVALID_OPERATION,
|
| + "glTexImageIOSurface2DCHROMIUM", "no IOSurface with the given ID");
|
| return;
|
| }
|
|
|
| @@ -8509,7 +8672,7 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
|
| if (err != kCGLNoError) {
|
| SetGLError(
|
| GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: error in CGLTexImageIOSurface2D");
|
| + "glTexImageIOSurface2DCHROMIUM", "error in CGLTexImageIOSurface2D");
|
| return;
|
| }
|
|
|
| @@ -8519,7 +8682,7 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
|
|
|
| #else
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexImageIOSurface2DCHROMIUM: not supported.");
|
| + "glTexImageIOSurface2DCHROMIUM", "not supported.");
|
| #endif
|
| }
|
|
|
| @@ -8575,20 +8738,20 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| TextureManager::TextureInfo* source_info = GetTextureInfo(source_id);
|
|
|
| if (!source_info || !dest_info) {
|
| - SetGLError(GL_INVALID_VALUE, "glCopyTextureCHROMIUM: unknown texture id");
|
| + SetGLError(GL_INVALID_VALUE, "glCopyTextureCHROMIUM", "unknown texture id");
|
| return;
|
| }
|
|
|
| if (GL_TEXTURE_2D != target) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCopyTextureCHROMIUM: invalid texture target");
|
| + "glCopyTextureCHROMIUM", "invalid texture target");
|
| return;
|
| }
|
|
|
| if (dest_info->target() != GL_TEXTURE_2D ||
|
| source_info->target() != GL_TEXTURE_2D) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCopyTextureCHROMIUM: invalid texture target binding");
|
| + "glCopyTextureCHROMIUM", "invalid texture target binding");
|
| return;
|
| }
|
|
|
| @@ -8596,7 +8759,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| if (!source_info->GetLevelSize(GL_TEXTURE_2D, 0, &source_width,
|
| &source_height)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCopyTextureChromium: source texture has no level 0");
|
| + "glCopyTextureChromium", "source texture has no level 0");
|
| return;
|
| }
|
|
|
| @@ -8604,7 +8767,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| if (!texture_manager()->ValidForTarget(GL_TEXTURE_2D, level, source_width,
|
| source_height, 1)) {
|
| SetGLError(GL_INVALID_VALUE,
|
| - "glCopyTextureCHROMIUM: Bad dimensions");
|
| + "glCopyTextureCHROMIUM", "Bad dimensions");
|
| return;
|
| }
|
|
|
| @@ -8735,13 +8898,14 @@ void GLES2DecoderImpl::DoTexStorage2DEXT(
|
| TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoTexStorage2DEXT");
|
| if (!texture_manager()->ValidForTarget(target, 0, width, height, 1) ||
|
| TextureManager::ComputeMipMapCount(width, height, 1) < levels) {
|
| - SetGLError(GL_INVALID_VALUE, "glTexStorage2DEXT: dimensions out of range");
|
| + SetGLError(
|
| + GL_INVALID_VALUE, "glTexStorage2DEXT", "dimensions out of range");
|
| return;
|
| }
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexStorage2DEXT: unknown texture for target");
|
| + "glTexStorage2DEXT", "unknown texture for target");
|
| return;
|
| }
|
| if (info->IsAttachedToFramebuffer()) {
|
| @@ -8749,7 +8913,7 @@ void GLES2DecoderImpl::DoTexStorage2DEXT(
|
| }
|
| if (info->IsImmutable()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glTexStorage2DEXT: texture is immutable");
|
| + "glTexStorage2DEXT", "texture is immutable");
|
| return;
|
| }
|
| CopyRealGLErrorsToWrapper();
|
| @@ -8790,14 +8954,14 @@ void GLES2DecoderImpl::DoProduceTextureCHROMIUM(GLenum target,
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glProduceTextureCHROMIUM: unknown texture for target");
|
| + "glProduceTextureCHROMIUM", "unknown texture for target");
|
| return;
|
| }
|
|
|
| TextureDefinition* definition = texture_manager()->Save(info);
|
| if (!definition) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glProduceTextureCHROMIUM: invalid texture");
|
| + "glProduceTextureCHROMIUM", "invalid texture");
|
| return;
|
| }
|
|
|
| @@ -8809,7 +8973,7 @@ void GLES2DecoderImpl::DoProduceTextureCHROMIUM(GLenum target,
|
| bool success = texture_manager()->Restore(info, definition);
|
| DCHECK(success);
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glProduceTextureCHROMIUM: invalid mailbox name");
|
| + "glProduceTextureCHROMIUM", "invalid mailbox name");
|
| return;
|
| }
|
|
|
| @@ -8821,7 +8985,7 @@ void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target,
|
| TextureManager::TextureInfo* info = GetTextureInfoForTarget(target);
|
| if (!info) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glConsumeTextureCHROMIUM: unknown texture for target");
|
| + "glConsumeTextureCHROMIUM", "unknown texture for target");
|
| return;
|
| }
|
|
|
| @@ -8831,13 +8995,13 @@ void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target,
|
| *reinterpret_cast<const MailboxName*>(mailbox)));
|
| if (!definition.get()) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glConsumeTextureCHROMIUM: invalid mailbox name");
|
| + "glConsumeTextureCHROMIUM", "invalid mailbox name");
|
| return;
|
| }
|
|
|
| if (!texture_manager()->Restore(info, definition.release())) {
|
| SetGLError(GL_INVALID_OPERATION,
|
| - "glConsumeTextureCHROMIUM: invalid texture");
|
| + "glConsumeTextureCHROMIUM", "invalid texture");
|
| return;
|
| }
|
|
|
|
|