Give every validation error a constant.

Makes the code more consistent and organized.

Also reduces binary size by about 4k.

Also refactors validation for GetBufferPointerv.

Bug: angleproject:2957
Change-Id: Ib076ce936193e9840eef2499bf815489cdb48479
Reviewed-on: https://chromium-review.googlesource.com/c/1350489
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index a7ffba6..14860a4 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -96,20 +96,19 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     if (paths == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "No path name array.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathNameArray);
         return false;
     }
 
     if (numPaths < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Invalid (negative) numPaths.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathNumPaths);
         return false;
     }
 
@@ -161,7 +160,7 @@
             break;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid path name type.");
+            context->validationError(GL_INVALID_ENUM, kInvalidPathNameType);
             return false;
     }
 
@@ -189,12 +188,12 @@
             componentCount = 12;
             break;
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid transformation.");
+            context->validationError(GL_INVALID_ENUM, kInvalidTransformation);
             return false;
     }
     if (componentCount != 0 && transformValues == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "No transform array given.");
+        context->validationError(GL_INVALID_VALUE, kNoTransformArray);
         return false;
     }
 
@@ -481,7 +480,7 @@
     TextureType texType = TextureTargetToType(target);
     if (!ValidImageSizeParameters(context, texType, level, width, height, 1, isSubImage))
     {
-        context->validationError(GL_INVALID_VALUE, "Invalid texture dimensions.");
+        // Error is already handled.
         return false;
     }
 
@@ -721,14 +720,12 @@
             case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 if (context->getExtensions().lossyETCDecode)
                 {
-                    context->validationError(GL_INVALID_OPERATION,
-                                             "ETC lossy decode formats can't be copied to.");
+                    context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
                     return false;
                 }
                 else
                 {
-                    context->validationError(GL_INVALID_ENUM,
-                                             "ANGLE_lossy_etc_decode extension is not supported.");
+                    context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
                     return false;
                 }
                 break;
@@ -1044,8 +1041,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -1126,8 +1122,7 @@
     {
         case TextureType::Rectangle:
             ASSERT(!context->getExtensions().textureRectangle);
-            context->validationError(GL_INVALID_ENUM,
-                                     "Context does not support GL_ANGLE_texture_rectangle");
+            context->validationError(GL_INVALID_ENUM, kTextureRectangleNotSupported);
             break;
 
         case TextureType::_3D:
@@ -1150,7 +1145,7 @@
         case TextureType::External:
             ASSERT(!context->getExtensions().eglImageExternal &&
                    !context->getExtensions().eglStreamConsumerExternal);
-            context->validationError(GL_INVALID_ENUM, "External texture extension not enabled");
+            context->validationError(GL_INVALID_ENUM, kExternalTextureNotSupported);
             break;
 
         default:
@@ -1239,8 +1234,7 @@
             }
             if (isCompressed)
             {
-                context->validationError(GL_INVALID_ENUM,
-                                         "Rectangle texture cannot have a compressed format.");
+                context->validationError(GL_INVALID_ENUM, kRectangleTextureCompressed);
                 return false;
             }
             break;
@@ -1277,7 +1271,7 @@
         const InternalFormat &textureInternalFormat = *texture->getFormat(target, level).info;
         if (textureInternalFormat.internalFormat == GL_NONE)
         {
-            context->validationError(GL_INVALID_OPERATION, "Texture level does not exist.");
+            context->validationError(GL_INVALID_OPERATION, kInvalidTextureLevel);
             return false;
         }
 
@@ -1358,8 +1352,7 @@
                                              height, texture->getWidth(target, level),
                                              texture->getHeight(target, level)))
             {
-                context->validationError(GL_INVALID_OPERATION,
-                                         "Invalid compressed format dimension.");
+                context->validationError(GL_INVALID_OPERATION, kInvalidCompressedImageSize);
                 return false;
             }
 
@@ -1373,8 +1366,7 @@
         {
             if (!ValidCompressedImageSize(context, actualInternalFormat, level, width, height))
             {
-                context->validationError(GL_INVALID_OPERATION,
-                                         "Invalid compressed format dimension.");
+                context->validationError(GL_INVALID_OPERATION, kInvalidCompressedImageSize);
                 return false;
             }
         }
@@ -1590,14 +1582,12 @@
             case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 if (context->getExtensions().lossyETCDecode)
                 {
-                    context->validationError(GL_INVALID_OPERATION,
-                                             "ETC lossy decode formats can't work with this type.");
+                    context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
                     return false;
                 }
                 else
                 {
-                    context->validationError(GL_INVALID_ENUM,
-                                             "ANGLE_lossy_etc_decode extension is not supported.");
+                    context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
                     return false;
                 }
                 break;
@@ -1637,9 +1627,7 @@
                 case GL_RGBA32F:
                     if (!context->getExtensions().colorBufferFloatRGBA)
                     {
-                        context->validationError(GL_INVALID_ENUM,
-                                                 "Sized GL_RGBA32F internal format requires "
-                                                 "GL_CHROMIUM_color_buffer_float_rgba");
+                        context->validationError(GL_INVALID_ENUM, kInvalidFormat);
                         return false;
                     }
                     if (type != GL_FLOAT)
@@ -1657,9 +1645,7 @@
                 case GL_RGB32F:
                     if (!context->getExtensions().colorBufferFloatRGB)
                     {
-                        context->validationError(GL_INVALID_ENUM,
-                                                 "Sized GL_RGB32F internal format requires "
-                                                 "GL_CHROMIUM_color_buffer_float_rgb");
+                        context->validationError(GL_INVALID_ENUM, kInvalidFormat);
                         return false;
                     }
                     if (type != GL_FLOAT)
@@ -1837,8 +1823,7 @@
         case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
             if (!context->getExtensions().lossyETCDecode)
             {
-                context->validationError(GL_INVALID_ENUM,
-                                         "ANGLE_lossy_etc_decode extension is not supported.");
+                context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
                 return false;
             }
             break;
@@ -2122,17 +2107,13 @@
     {
         if (source == GL_DONT_CARE || type == GL_DONT_CARE)
         {
-            context->validationError(
-                GL_INVALID_OPERATION,
-                "If count is greater than zero, source and severity cannot be GL_DONT_CARE.");
+            context->validationError(GL_INVALID_OPERATION, kInvalidDebugSourceType);
             return false;
         }
 
         if (severity != GL_DONT_CARE)
         {
-            context->validationError(
-                GL_INVALID_OPERATION,
-                "If count is greater than zero, severity must be GL_DONT_CARE.");
+            context->validationError(GL_INVALID_OPERATION, kInvalidDebugSeverity);
             return false;
         }
     }
@@ -2182,8 +2163,7 @@
     size_t messageLength = (length < 0) ? strlen(buf) : length;
     if (messageLength > context->getExtensions().maxDebugMessageLength)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Message length is larger than GL_MAX_DEBUG_MESSAGE_LENGTH.");
+        context->validationError(GL_INVALID_VALUE, kExceedsMaxDebugMessageLength);
         return false;
     }
 
@@ -2249,17 +2229,14 @@
     size_t messageLength = (length < 0) ? strlen(message) : length;
     if (messageLength > context->getExtensions().maxDebugMessageLength)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Message length is larger than GL_MAX_DEBUG_MESSAGE_LENGTH.");
+        context->validationError(GL_INVALID_VALUE, kExceedsMaxDebugMessageLength);
         return false;
     }
 
     size_t currentStackSize = context->getGLState().getDebug().getGroupStackDepth();
     if (currentStackSize >= context->getExtensions().maxDebugGroupStackDepth)
     {
-        context->validationError(
-            GL_STACK_OVERFLOW,
-            "Cannot push more than GL_MAX_DEBUG_GROUP_STACK_DEPTH debug groups.");
+        context->validationError(GL_STACK_OVERFLOW, kExceedsMaxDebugGroupStackDepth);
         return false;
     }
 
@@ -2277,7 +2254,7 @@
     size_t currentStackSize = context->getGLState().getDebug().getGroupStackDepth();
     if (currentStackSize <= 1)
     {
-        context->validationError(GL_STACK_UNDERFLOW, "Cannot pop the default debug group.");
+        context->validationError(GL_STACK_UNDERFLOW, kCannotPopDefaultDebugGroup);
         return false;
     }
 
@@ -2291,7 +2268,7 @@
         case GL_BUFFER:
             if (context->getBuffer(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid buffer.");
+                context->validationError(GL_INVALID_VALUE, kInvalidBufferName);
                 return false;
             }
             return true;
@@ -2299,7 +2276,7 @@
         case GL_SHADER:
             if (context->getShader(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid shader.");
+                context->validationError(GL_INVALID_VALUE, kInvalidShaderName);
                 return false;
             }
             return true;
@@ -2307,7 +2284,7 @@
         case GL_PROGRAM:
             if (context->getProgramNoResolveLink(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid program.");
+                context->validationError(GL_INVALID_VALUE, kInvalidProgramName);
                 return false;
             }
             return true;
@@ -2315,7 +2292,7 @@
         case GL_VERTEX_ARRAY:
             if (context->getVertexArray(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid vertex array.");
+                context->validationError(GL_INVALID_VALUE, kInvalidVertexArrayName);
                 return false;
             }
             return true;
@@ -2323,7 +2300,7 @@
         case GL_QUERY:
             if (context->getQuery(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid query.");
+                context->validationError(GL_INVALID_VALUE, kInvalidQueryName);
                 return false;
             }
             return true;
@@ -2331,8 +2308,7 @@
         case GL_TRANSFORM_FEEDBACK:
             if (context->getTransformFeedback(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE,
-                                         "name is not a valid transform feedback.");
+                context->validationError(GL_INVALID_VALUE, kInvalidTransformFeedbackName);
                 return false;
             }
             return true;
@@ -2340,7 +2316,7 @@
         case GL_SAMPLER:
             if (context->getSampler(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid sampler.");
+                context->validationError(GL_INVALID_VALUE, kInvalidSamplerName);
                 return false;
             }
             return true;
@@ -2348,7 +2324,7 @@
         case GL_TEXTURE:
             if (context->getTexture(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid texture.");
+                context->validationError(GL_INVALID_VALUE, kInvalidTextureName);
                 return false;
             }
             return true;
@@ -2356,7 +2332,7 @@
         case GL_RENDERBUFFER:
             if (context->getRenderbuffer(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid renderbuffer.");
+                context->validationError(GL_INVALID_VALUE, kInvalidRenderbufferName);
                 return false;
             }
             return true;
@@ -2364,13 +2340,13 @@
         case GL_FRAMEBUFFER:
             if (context->getFramebuffer(name) == nullptr)
             {
-                context->validationError(GL_INVALID_VALUE, "name is not a valid framebuffer.");
+                context->validationError(GL_INVALID_VALUE, kInvalidFramebufferName);
                 return false;
             }
             return true;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid identifier.");
+            context->validationError(GL_INVALID_ENUM, kInvalidIndentifier);
             return false;
     }
 }
@@ -2393,8 +2369,7 @@
 
     if (labelLength > context->getExtensions().maxLabelLength)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Label length is larger than GL_MAX_LABEL_LENGTH.");
+        context->validationError(GL_INVALID_VALUE, kExceedsMaxLabelLength);
         return false;
     }
 
@@ -2457,7 +2432,7 @@
 {
     if (context->getSync(reinterpret_cast<GLsync>(const_cast<void *>(ptr))) == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "name is not a valid sync.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSyncPointer);
         return false;
     }
 
@@ -2712,11 +2687,7 @@
         Framebuffer *framebuffer = state.getDrawFramebuffer();
         if (framebuffer->getNumViews() > 1 && state.isQueryActive(QueryType::TimeElapsed))
         {
-            context->validationError(GL_INVALID_OPERATION,
-                                     "There is an active query for target "
-                                     "GL_TIME_ELAPSED_EXT when the number of "
-                                     "views in the active draw framebuffer is "
-                                     "greater than 1.");
+            context->validationError(GL_INVALID_OPERATION, kMultiviewTimerQuery);
             return false;
         }
     }
@@ -2728,7 +2699,7 @@
 {
     if (!context->getExtensions().drawBuffers)
     {
-        context->validationError(GL_INVALID_OPERATION, "Extension not supported.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -2888,8 +2859,7 @@
 
     if (target == TextureTarget::Rectangle)
     {
-        context->validationError(GL_INVALID_ENUM,
-                                 "Rectangle texture cannot have a compressed format.");
+        context->validationError(GL_INVALID_ENUM, kRectangleTextureCompressed);
         return false;
     }
 
@@ -2989,6 +2959,12 @@
                                   GLenum pname,
                                   void **params)
 {
+    if (!context->getExtensions().mapBuffer)
+    {
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
+        return false;
+    }
+
     return ValidateGetBufferPointervBase(context, target, pname, nullptr, params);
 }
 
@@ -2996,7 +2972,7 @@
 {
     if (!context->getExtensions().mapBuffer)
     {
-        context->validationError(GL_INVALID_OPERATION, "Map buffer extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3010,19 +2986,19 @@
 
     if (buffer == nullptr)
     {
-        context->validationError(GL_INVALID_OPERATION, "Attempted to map buffer object zero.");
+        context->validationError(GL_INVALID_OPERATION, kBufferNotMappable);
         return false;
     }
 
     if (access != GL_WRITE_ONLY_OES)
     {
-        context->validationError(GL_INVALID_ENUM, "Non-write buffer mapping not supported.");
+        context->validationError(GL_INVALID_ENUM, kInvalidAccessBits);
         return false;
     }
 
     if (buffer->isMapped())
     {
-        context->validationError(GL_INVALID_OPERATION, "Buffer is already mapped.");
+        context->validationError(GL_INVALID_OPERATION, kBufferAlreadyMapped);
         return false;
     }
 
@@ -3033,7 +3009,7 @@
 {
     if (!context->getExtensions().mapBuffer)
     {
-        context->validationError(GL_INVALID_OPERATION, "Map buffer extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3048,7 +3024,7 @@
 {
     if (!context->getExtensions().mapBufferRange)
     {
-        context->validationError(GL_INVALID_OPERATION, "Map buffer range extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3069,8 +3045,7 @@
             const auto &transformFeedbackBuffer = transformFeedback->getIndexedBuffer(i);
             if (transformFeedbackBuffer.get() == buffer)
             {
-                context->validationError(GL_INVALID_OPERATION,
-                                         "Buffer is currently bound for transform feedback.");
+                context->validationError(GL_INVALID_OPERATION, kBufferBoundForTransformFeedback);
                 return false;
             }
         }
@@ -3093,7 +3068,7 @@
 {
     if (!context->getExtensions().mapBufferRange)
     {
-        context->validationError(GL_INVALID_OPERATION, "Map buffer range extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3123,7 +3098,7 @@
     if (!context->getGLState().isBindGeneratesResourceEnabled() &&
         !context->isTextureGenerated(texture))
     {
-        context->validationError(GL_INVALID_OPERATION, "Texture was not generated");
+        context->validationError(GL_INVALID_OPERATION, kObjectNotGenerated);
         return false;
     }
 
@@ -3137,8 +3112,7 @@
 {
     if (!context->getExtensions().bindUniformLocation)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_bind_uniform_location is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3150,7 +3124,7 @@
 
     if (location < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Location cannot be less than 0.");
+        context->validationError(GL_INVALID_VALUE, kNegativeLocation);
         return false;
     }
 
@@ -3158,10 +3132,7 @@
     if (static_cast<size_t>(location) >=
         (caps.maxVertexUniformVectors + caps.maxFragmentUniformVectors) * 4)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Location must be less than "
-                                 "(MAX_VERTEX_UNIFORM_VECTORS + "
-                                 "MAX_FRAGMENT_UNIFORM_VECTORS) * 4");
+        context->validationError(GL_INVALID_VALUE, kInvalidBindUniformLocation);
         return false;
     }
 
@@ -3186,8 +3157,7 @@
 {
     if (!context->getExtensions().framebufferMixedSamples)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_framebuffer_mixed_samples is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     switch (components)
@@ -3198,9 +3168,7 @@
         case GL_NONE:
             break;
         default:
-            context->validationError(
-                GL_INVALID_ENUM,
-                "GLenum components is not one of GL_RGB, GL_RGBA, GL_ALPHA or GL_NONE.");
+            context->validationError(GL_INVALID_ENUM, kInvalidCoverageComponents);
             return false;
     }
 
@@ -3218,7 +3186,7 @@
 
     if (matrix == nullptr)
     {
-        context->validationError(GL_INVALID_OPERATION, "Invalid matrix.");
+        context->validationError(GL_INVALID_OPERATION, kInvalidPathMatrix);
         return false;
     }
 
@@ -3234,8 +3202,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3260,8 +3227,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3294,8 +3260,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     if (!context->isPathGenerated(path))
@@ -3306,28 +3271,28 @@
 
     if (numCommands < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Invalid number of commands.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathNumCommands);
         return false;
     }
     else if (numCommands > 0)
     {
         if (!commands)
         {
-            context->validationError(GL_INVALID_VALUE, "No commands array given.");
+            context->validationError(GL_INVALID_VALUE, kInvalidPathCommandsArray);
             return false;
         }
     }
 
     if (numCoords < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Invalid number of coordinates.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathNumCoords);
         return false;
     }
     else if (numCoords > 0)
     {
         if (!coords)
         {
-            context->validationError(GL_INVALID_VALUE, "No coordinate array given.");
+            context->validationError(GL_INVALID_VALUE, kInvalidPathNumCoordsArray);
             return false;
         }
     }
@@ -3356,7 +3321,7 @@
             break;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid coordinate type.");
+            context->validationError(GL_INVALID_ENUM, kInvalidPathCoordinateType);
             return false;
     }
 
@@ -3393,13 +3358,14 @@
                 expectedNumCoords += 5;
                 break;
             default:
-                context->validationError(GL_INVALID_ENUM, "Invalid command.");
+                context->validationError(GL_INVALID_ENUM, kInvalidPathCommand);
                 return false;
         }
     }
+
     if (expectedNumCoords != numCoords)
     {
-        context->validationError(GL_INVALID_VALUE, "Invalid number of coordinates.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathNumCoords);
         return false;
     }
 
@@ -3410,8 +3376,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     if (!context->isPathGenerated(path))
@@ -3425,7 +3390,7 @@
         case GL_PATH_STROKE_WIDTH_CHROMIUM:
             if (value < 0.0f)
             {
-                context->validationError(GL_INVALID_VALUE, "Invalid stroke width.");
+                context->validationError(GL_INVALID_VALUE, kInvalidPathStrokeWidth);
                 return false;
             }
             break;
@@ -3437,7 +3402,7 @@
                 case GL_ROUND_CHROMIUM:
                     break;
                 default:
-                    context->validationError(GL_INVALID_ENUM, "Invalid end caps.");
+                    context->validationError(GL_INVALID_ENUM, kInvalidPathEndCaps);
                     return false;
             }
             break;
@@ -3449,14 +3414,14 @@
                 case GL_ROUND_CHROMIUM:
                     break;
                 default:
-                    context->validationError(GL_INVALID_ENUM, "Invalid join style.");
+                    context->validationError(GL_INVALID_ENUM, kInvalidPathJoinStyle);
                     return false;
             }
             break;
         case GL_PATH_MITER_LIMIT_CHROMIUM:
             if (value < 0.0f)
             {
-                context->validationError(GL_INVALID_VALUE, "Invalid miter limit.");
+                context->validationError(GL_INVALID_VALUE, kInvalidPathMiterLimit);
                 return false;
             }
             break;
@@ -3466,7 +3431,7 @@
             break;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid path parameter.");
+            context->validationError(GL_INVALID_ENUM, kInvalidPathParameter);
             return false;
     }
     return true;
@@ -3482,8 +3447,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3492,9 +3456,10 @@
         context->validationError(GL_INVALID_OPERATION, kNoSuchPath);
         return false;
     }
+
     if (!value)
     {
-        context->validationError(GL_INVALID_VALUE, "No value array.");
+        context->validationError(GL_INVALID_VALUE, kInvalidPathValueArray);
         return false;
     }
 
@@ -3508,7 +3473,7 @@
             break;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid path parameter.");
+            context->validationError(GL_INVALID_ENUM, kInvalidPathParameter);
             return false;
     }
 
@@ -3525,8 +3490,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3559,8 +3523,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     if (context->isPathGenerated(path) && !context->isPath(path))
@@ -3592,13 +3555,13 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
+
     if (context->isPathGenerated(path) && !context->isPath(path))
     {
-        context->validationError(GL_INVALID_OPERATION, "No such path or path has no data.");
+        context->validationError(GL_INVALID_OPERATION, kNoPathOrNoPathData);
         return false;
     }
 
@@ -3609,8 +3572,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     if (context->isPathGenerated(path) && !context->isPath(path))
@@ -3665,8 +3627,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
     return true;
@@ -3857,15 +3818,14 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     const GLint MaxLocation = context->getCaps().maxVaryingVectors * 4;
     if (location >= MaxLocation)
     {
-        context->validationError(GL_INVALID_VALUE, "Location exceeds max varying.");
+        context->validationError(GL_INVALID_VALUE, kInvalidVaryingLocation);
         return false;
     }
 
@@ -3878,7 +3838,7 @@
 
     if (!name)
     {
-        context->validationError(GL_INVALID_VALUE, "No name given.");
+        context->validationError(GL_INVALID_VALUE, kMissingName);
         return false;
     }
 
@@ -3900,8 +3860,7 @@
 {
     if (!context->getExtensions().pathRendering)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_path_rendering is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -3923,7 +3882,7 @@
         case GL_NONE:
             if (components != 0)
             {
-                context->validationError(GL_INVALID_VALUE, "Invalid components.");
+                context->validationError(GL_INVALID_VALUE, kInvalidComponents);
                 return false;
             }
             break;
@@ -3933,18 +3892,18 @@
         case GL_CONSTANT_CHROMIUM:
             if (components < 1 || components > 4)
             {
-                context->validationError(GL_INVALID_VALUE, "Invalid components.");
+                context->validationError(GL_INVALID_VALUE, kInvalidComponents);
                 return false;
             }
             if (!coeffs)
             {
-                context->validationError(GL_INVALID_VALUE, "No coefficients array given.");
+                context->validationError(GL_INVALID_VALUE, kInvalidPathCoefficientsArray);
                 return false;
             }
             break;
 
         default:
-            context->validationError(GL_INVALID_ENUM, "Invalid gen mode.");
+            context->validationError(GL_INVALID_ENUM, kInvalidPathGenMode);
             return false;
     }
 
@@ -3957,7 +3916,7 @@
 
     if (!binding.valid)
     {
-        context->validationError(GL_INVALID_OPERATION, "No such binding.");
+        context->validationError(GL_INVALID_OPERATION, kInvalidFragmentInputBinding);
         return false;
     }
 
@@ -3979,14 +3938,12 @@
                 expectedComponents = 4;
                 break;
             default:
-                context->validationError(
-                    GL_INVALID_OPERATION,
-                    "Fragment input type is not a floating point scalar or vector.");
+                context->validationError(GL_INVALID_OPERATION, kFragmentInputTypeNotFloatingPoint);
                 return false;
         }
         if (expectedComponents != components && genMode != GL_NONE)
         {
-            context->validationError(GL_INVALID_OPERATION, "Unexpected number of components");
+            context->validationError(GL_INVALID_OPERATION, kInvalidPathComponents);
             return false;
         }
     }
@@ -4007,15 +3964,14 @@
 {
     if (!context->getExtensions().copyTexture)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_copy_texture extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     const Texture *source = context->getTexture(sourceId);
     if (source == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTexture);
         return false;
     }
 
@@ -4031,7 +3987,7 @@
 
     if (!IsValidCopyTextureSourceLevel(context, sourceType, sourceLevel))
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture level is not valid.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTextureLevel);
         return false;
     }
 
@@ -4046,8 +4002,7 @@
     const InternalFormat &sourceFormat = *source->getFormat(sourceTarget, sourceLevel).info;
     if (!IsValidCopyTextureSourceInternalFormatEnum(sourceFormat.internalFormat))
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "Source texture internal format is invalid.");
+        context->validationError(GL_INVALID_OPERATION, kInvalidSourceTextureInternalFormat);
         return false;
     }
 
@@ -4060,14 +4015,13 @@
     const Texture *dest = context->getTexture(destId);
     if (dest == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Destination texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTexture);
         return false;
     }
 
     if (!IsValidCopyTextureDestinationTarget(context, dest->getType(), destTarget))
     {
-        context->validationError(GL_INVALID_VALUE, "Destination texture a valid texture type.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTextureType);
         return false;
     }
 
@@ -4085,14 +4039,13 @@
 
     if (dest->getType() == TextureType::CubeMap && sourceWidth != sourceHeight)
     {
-        context->validationError(
-            GL_INVALID_VALUE, "Destination width and height must be equal for cube map textures.");
+        context->validationError(GL_INVALID_VALUE, kCubemapFacesEqualDimensions);
         return false;
     }
 
     if (dest->getImmutableFormat())
     {
-        context->validationError(GL_INVALID_OPERATION, "Destination texture is immutable.");
+        context->validationError(GL_INVALID_OPERATION, kDestinationImmutable);
         return false;
     }
 
@@ -4117,21 +4070,20 @@
 {
     if (!context->getExtensions().copyTexture)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_copy_texture extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     const Texture *source = context->getTexture(sourceId);
     if (source == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTexture);
         return false;
     }
 
     if (!IsValidCopyTextureSourceTarget(context, source->getType()))
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture a valid texture type.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTextureType);
         return false;
     }
 
@@ -4148,14 +4100,13 @@
     if (source->getWidth(sourceTarget, sourceLevel) == 0 ||
         source->getHeight(sourceTarget, sourceLevel) == 0)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "The source level of the source texture must be defined.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTextureLevel);
         return false;
     }
 
     if (x < 0 || y < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "x and y cannot be negative.");
+        context->validationError(GL_INVALID_VALUE, kNegativeOffset);
         return false;
     }
 
@@ -4188,37 +4139,33 @@
     const Texture *dest = context->getTexture(destId);
     if (dest == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Destination texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTexture);
         return false;
     }
 
     if (!IsValidCopyTextureDestinationTarget(context, dest->getType(), destTarget))
     {
-        context->validationError(GL_INVALID_VALUE, "Destination texture a valid texture type.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTextureType);
         return false;
     }
 
     if (!IsValidCopyTextureDestinationLevel(context, dest->getType(), destLevel, width, height,
                                             true))
     {
-        context->validationError(GL_INVALID_VALUE, "Destination texture level is not valid.");
+        context->validationError(GL_INVALID_VALUE, kInvalidMipLevel);
         return false;
     }
 
     if (dest->getWidth(destTarget, destLevel) == 0 || dest->getHeight(destTarget, destLevel) == 0)
     {
-        context->validationError(
-            GL_INVALID_OPERATION,
-            "The destination level of the destination texture must be defined.");
+        context->validationError(GL_INVALID_OPERATION, kDestinationLevelNotDefined);
         return false;
     }
 
     const InternalFormat &destFormat = *dest->getFormat(destTarget, destLevel).info;
     if (!IsValidCopySubTextureDestionationInternalFormat(destFormat.internalFormat))
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "Destination internal format and type combination is not valid.");
+        context->validationError(GL_INVALID_OPERATION, kInvalidFormatCombination);
         return false;
     }
 
@@ -4231,8 +4178,7 @@
     if (static_cast<size_t>(xoffset + width) > dest->getWidth(destTarget, destLevel) ||
         static_cast<size_t>(yoffset + height) > dest->getHeight(destTarget, destLevel))
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Destination texture not large enough to copy to.");
+        context->validationError(GL_INVALID_VALUE, kOffsetOverflow);
         return false;
     }
 
@@ -4243,57 +4189,53 @@
 {
     if (!context->getExtensions().copyCompressedTexture)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_CHROMIUM_copy_compressed_texture extension not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     const gl::Texture *source = context->getTexture(sourceId);
     if (source == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTexture);
         return false;
     }
 
     if (source->getType() != TextureType::_2D)
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture must be of type GL_TEXTURE_2D.");
+        context->validationError(GL_INVALID_VALUE, kInvalidSourceTextureType);
         return false;
     }
 
     if (source->getWidth(TextureTarget::_2D, 0) == 0 ||
         source->getHeight(TextureTarget::_2D, 0) == 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Source texture must level 0 defined.");
+        context->validationError(GL_INVALID_VALUE, kSourceTextureLevelZeroDefined);
         return false;
     }
 
     const gl::Format &sourceFormat = source->getFormat(TextureTarget::_2D, 0);
     if (!sourceFormat.info->compressed)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "Source texture must have a compressed internal format.");
+        context->validationError(GL_INVALID_OPERATION, kSourceTextureMustBeCompressed);
         return false;
     }
 
     const gl::Texture *dest = context->getTexture(destId);
     if (dest == nullptr)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Destination texture is not a valid texture object.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTexture);
         return false;
     }
 
     if (dest->getType() != TextureType::_2D)
     {
-        context->validationError(GL_INVALID_VALUE,
-                                 "Destination texture must be of type GL_TEXTURE_2D.");
+        context->validationError(GL_INVALID_VALUE, kInvalidDestinationTextureType);
         return false;
     }
 
     if (dest->getImmutableFormat())
     {
-        context->validationError(GL_INVALID_OPERATION, "Destination cannot be immutable.");
+        context->validationError(GL_INVALID_OPERATION, kDestinationImmutable);
         return false;
     }
 
@@ -4459,14 +4401,13 @@
 {
     if (!context->getExtensions().requestExtension)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_ANGLE_request_extension is not available.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
     if (!context->isExtensionRequestable(name))
     {
-        context->validationError(GL_INVALID_OPERATION, "Extension is not requestable.");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotRequestable);
         return false;
     }
 
@@ -4683,20 +4624,14 @@
 
         if (constantColorUsed && constantAlphaUsed)
         {
-            const char *msg;
             if (context->getExtensions().webglCompatibility)
             {
-                msg = kInvalidConstantColor;
+                context->validationError(GL_INVALID_OPERATION, kInvalidConstantColor);
+                return false;
             }
-            else
-            {
-                msg =
-                    "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
-                    "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
-                    "implementation.";
-                WARN() << msg;
-            }
-            context->validationError(GL_INVALID_OPERATION, msg);
+
+            WARN() << kConstantColorAlphaLimitation;
+            context->validationError(GL_INVALID_OPERATION, kConstantColorAlphaLimitation);
             return false;
         }
     }
@@ -4766,15 +4701,13 @@
     {
         if (stride > caps.maxVertexAttribStride)
         {
-            context->validationError(GL_INVALID_VALUE,
-                                     "stride cannot be greater than MAX_VERTEX_ATTRIB_STRIDE.");
+            context->validationError(GL_INVALID_VALUE, kExceedsMaxVertexAttribStride);
             return false;
         }
 
         if (index >= caps.maxVertexAttribBindings)
         {
-            context->validationError(GL_INVALID_VALUE,
-                                     "index must be smaller than MAX_VERTEX_ATTRIB_BINDINGS.");
+            context->validationError(GL_INVALID_VALUE, kExceedsMaxVertexAttribBindings);
             return false;
         }
     }
@@ -4788,9 +4721,7 @@
     if (!nullBufferAllowed && context->getGLState().getTargetBuffer(BufferBinding::Array) == 0 &&
         ptr != nullptr)
     {
-        context->validationError(
-            GL_INVALID_OPERATION,
-            "Client data cannot be used with a non-default vertex array object.");
+        context->validationError(GL_INVALID_OPERATION, kClientDataInVertexArray);
         return false;
     }
 
@@ -4800,7 +4731,7 @@
         // The WebGL API does not support the GL_FIXED data type.
         if (type == GL_FIXED)
         {
-            context->validationError(GL_INVALID_ENUM, "GL_FIXED is not supported in WebGL.");
+            context->validationError(GL_INVALID_ENUM, kFixedNotInWebGL);
             return false;
         }
 
@@ -4843,8 +4774,7 @@
 {
     if (!context->getExtensions().framebufferMultisample)
     {
-        context->validationError(GL_INVALID_OPERATION,
-                                 "GL_ANGLE_framebuffer_multisample not available");
+        context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
         return false;
     }
 
@@ -5274,8 +5204,7 @@
         case GL_FRAGMENT_SHADER:
             break;
         case GL_COMPUTE_SHADER:
-            context->validationError(GL_INVALID_OPERATION,
-                                     "compute shader precision not yet implemented.");
+            context->validationError(GL_INVALID_OPERATION, kUnimplementedComputeShaderPrecision);
             return false;
         default:
             context->validationError(GL_INVALID_ENUM, kInvalidShaderType);
@@ -5375,8 +5304,7 @@
             if (context->getClientVersion() < ES_3_0 &&
                 !context->getExtensions().standardDerivatives)
             {
-                context->validationError(GL_INVALID_ENUM,
-                                         "hint requires OES_standard_derivatives.");
+                context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
                 return false;
             }
             break;
@@ -5465,7 +5393,7 @@
 
     if (param < 0)
     {
-        context->validationError(GL_INVALID_VALUE, "Cannot use negative values in PixelStorei");
+        context->validationError(GL_INVALID_VALUE, kNegativeParam);
         return false;
     }
 
@@ -5549,7 +5477,7 @@
     if (std::find(shaderBinaryFormats.begin(), shaderBinaryFormats.end(), binaryformat) ==
         shaderBinaryFormats.end())
     {
-        context->validationError(GL_INVALID_ENUM, "Invalid shader binary format.");
+        context->validationError(GL_INVALID_ENUM, kInvalidShaderBinaryFormat);
         return false;
     }
 
@@ -5950,12 +5878,11 @@
     if (context->getLimitations().noSampleAlphaToCoverageSupport &&
         cap == GL_SAMPLE_ALPHA_TO_COVERAGE)
     {
-        const char *errorMessage = "Current renderer doesn't support alpha-to-coverage";
-        context->validationError(GL_INVALID_OPERATION, errorMessage);
+        context->validationError(GL_INVALID_OPERATION, kNoSampleAlphaToCoveragesLimitation);
 
         // We also output an error message to the debugger window if tracing is active, so that
         // developers can see the error message.
-        ERR() << errorMessage;
+        ERR() << kNoSampleAlphaToCoveragesLimitation;
         return false;
     }
 
@@ -6038,8 +5965,7 @@
                 }
                 if (tex->getType() != TextureType::Rectangle)
                 {
-                    context->validationError(GL_INVALID_OPERATION,
-                                             "Textarget must match the texture target type.");
+                    context->validationError(GL_INVALID_OPERATION, kTextureTargetMismatch);
                     return false;
                 }
             }
@@ -6059,8 +5985,7 @@
                 }
                 if (tex->getType() != TextureType::CubeMap)
                 {
-                    context->validationError(GL_INVALID_OPERATION,
-                                             "Textarget must match the texture target type.");
+                    context->validationError(GL_INVALID_OPERATION, kTextureTargetMismatch);
                     return false;
                 }
             }
@@ -6083,8 +6008,7 @@
                 }
                 if (tex->getType() != TextureType::_2DMultisample)
                 {
-                    context->validationError(GL_INVALID_OPERATION,
-                                             "Textarget must match the texture target type.");
+                    context->validationError(GL_INVALID_OPERATION, kTextureTargetMismatch);
                     return false;
                 }
             }
@@ -6310,10 +6234,7 @@
     if (context->hasActiveTransformFeedback(program))
     {
         // ES 3.0.4 section 2.15 page 91
-        context->validationError(GL_INVALID_OPERATION,
-                                 "Cannot link program while program is "
-                                 "associated with an active transform "
-                                 "feedback object.");
+        context->validationError(GL_INVALID_OPERATION, kTransformFeedbackActiveDuringLink);
         return false;
     }
 
@@ -6416,9 +6337,7 @@
     if (context->getGLState().isTransformFeedbackActiveUnpaused())
     {
         // ES 3.0.4 section 2.15 page 91
-        context->validationError(
-            GL_INVALID_OPERATION,
-            "Cannot change active program while transform feedback is unpaused.");
+        context->validationError(GL_INVALID_OPERATION, kTransformFeedbackUseProgram);
         return false;
     }
 
@@ -6663,16 +6582,11 @@
     {
         if (index == 0 && divisor != 0)
         {
-            const char *errorMessage =
-                "The current context doesn't support setting a non-zero divisor on the "
-                "attribute with index zero. "
-                "Please reorder the attributes in your vertex shader so that attribute zero "
-                "can have a zero divisor.";
-            context->validationError(GL_INVALID_OPERATION, errorMessage);
+            context->validationError(GL_INVALID_OPERATION, kAttributeZeroRequiresDivisorLimitation);
 
             // We also output an error message to the debugger window if tracing is active, so
             // that developers can see the error message.
-            ERR() << errorMessage;
+            ERR() << kAttributeZeroRequiresDivisorLimitation;
             return false;
         }
     }