Reland "GLES1: Point rasterization (partial implementation)"

This is a reland of 4004ae0e033a0169de3cb53c0a036833ad47178a

Fix: Put the missing early-out in ValidatePointParameterCommon

Original change's description:
> GLES1: Point rasterization (partial implementation)
>
> - Not included: Smooth points
>
> - GL_OES_point_sprite
> - Update test expectations. Note: due to different random sampling,
> edge cases were hit in UserClip. Disabling that test for now.
>
> BUG=angleproject:2306
>
> Change-Id: If8367bc3321804b3299d3bc381d6a8e236754baa
> Reviewed-on: https://chromium-review.googlesource.com/1101910
> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
> Commit-Queue: Lingfeng Yang <lfy@google.com>

Bug: angleproject:2306
Change-Id: Id8e71352a77ff0ce71cb604965effbfb8aca613e
Reviewed-on: https://chromium-review.googlesource.com/1108458
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Lingfeng Yang <lfy@google.com>
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index 0719b80..2aca01f 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -2257,75 +2257,87 @@
                    TextureEnvParameter pname,
                    const GLfloat *params)
 {
-    if (target == TextureEnvTarget::Env)
+    TextureEnvironmentParameters &env = state->textureEnvironment(unit);
+    GLenum asEnum                     = ConvertToGLenum(params[0]);
+
+    switch (target)
     {
-        TextureEnvironmentParameters &env = state->textureEnvironment(unit);
-        GLenum asEnum                     = ConvertToGLenum(params[0]);
-        switch (pname)
-        {
-            case TextureEnvParameter::Mode:
-                env.mode = FromGLenum<TextureEnvMode>(asEnum);
-                break;
-            case TextureEnvParameter::CombineRgb:
-                env.combineRgb = FromGLenum<TextureCombine>(asEnum);
-                break;
-            case TextureEnvParameter::CombineAlpha:
-                env.combineAlpha = FromGLenum<TextureCombine>(asEnum);
-                break;
-            case TextureEnvParameter::Src0Rgb:
-                env.src0Rgb = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Src1Rgb:
-                env.src1Rgb = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Src2Rgb:
-                env.src2Rgb = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Src0Alpha:
-                env.src0Alpha = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Src1Alpha:
-                env.src1Alpha = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Src2Alpha:
-                env.src2Alpha = FromGLenum<TextureSrc>(asEnum);
-                break;
-            case TextureEnvParameter::Op0Rgb:
-                env.op0Rgb = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Op1Rgb:
-                env.op1Rgb = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Op2Rgb:
-                env.op2Rgb = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Op0Alpha:
-                env.op0Alpha = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Op1Alpha:
-                env.op1Alpha = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Op2Alpha:
-                env.op2Alpha = FromGLenum<TextureOp>(asEnum);
-                break;
-            case TextureEnvParameter::Color:
-                env.color = ColorF::fromData(params);
-                break;
-            case TextureEnvParameter::RgbScale:
-                env.rgbScale = params[0];
-                break;
-            case TextureEnvParameter::AlphaScale:
-                env.alphaScale = params[0];
-                break;
-            default:
-                UNREACHABLE();
-                break;
-        }
-    }
-    else
-    {
-        // TODO(lfy@google.com): point sprite target
-        UNREACHABLE();
+        case TextureEnvTarget::Env:
+            switch (pname)
+            {
+                case TextureEnvParameter::Mode:
+                    env.mode = FromGLenum<TextureEnvMode>(asEnum);
+                    break;
+                case TextureEnvParameter::CombineRgb:
+                    env.combineRgb = FromGLenum<TextureCombine>(asEnum);
+                    break;
+                case TextureEnvParameter::CombineAlpha:
+                    env.combineAlpha = FromGLenum<TextureCombine>(asEnum);
+                    break;
+                case TextureEnvParameter::Src0Rgb:
+                    env.src0Rgb = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Src1Rgb:
+                    env.src1Rgb = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Src2Rgb:
+                    env.src2Rgb = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Src0Alpha:
+                    env.src0Alpha = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Src1Alpha:
+                    env.src1Alpha = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Src2Alpha:
+                    env.src2Alpha = FromGLenum<TextureSrc>(asEnum);
+                    break;
+                case TextureEnvParameter::Op0Rgb:
+                    env.op0Rgb = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Op1Rgb:
+                    env.op1Rgb = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Op2Rgb:
+                    env.op2Rgb = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Op0Alpha:
+                    env.op0Alpha = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Op1Alpha:
+                    env.op1Alpha = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Op2Alpha:
+                    env.op2Alpha = FromGLenum<TextureOp>(asEnum);
+                    break;
+                case TextureEnvParameter::Color:
+                    env.color = ColorF::fromData(params);
+                    break;
+                case TextureEnvParameter::RgbScale:
+                    env.rgbScale = params[0];
+                    break;
+                case TextureEnvParameter::AlphaScale:
+                    env.alphaScale = params[0];
+                    break;
+                default:
+                    UNREACHABLE();
+                    break;
+            }
+            break;
+        case TextureEnvTarget::PointSprite:
+            switch (pname)
+            {
+                case TextureEnvParameter::PointCoordReplace:
+                    env.pointSpriteCoordReplace = static_cast<bool>(params[0]);
+                    break;
+                default:
+                    UNREACHABLE();
+                    break;
+            }
+            break;
+        default:
+            UNREACHABLE();
+            break;
     }
 }
 
@@ -2335,77 +2347,169 @@
                    TextureEnvParameter pname,
                    GLfloat *params)
 {
-    if (target == TextureEnvTarget::Env)
+    const TextureEnvironmentParameters &env = state->textureEnvironment(unit);
+
+    switch (target)
     {
-        const TextureEnvironmentParameters &env = state->textureEnvironment(unit);
-        switch (pname)
-        {
-            case TextureEnvParameter::Mode:
-                ConvertPackedEnum(env.mode, params);
-                break;
-            case TextureEnvParameter::CombineRgb:
-                ConvertPackedEnum(env.combineRgb, params);
-                break;
-            case TextureEnvParameter::CombineAlpha:
-                ConvertPackedEnum(env.combineAlpha, params);
-                break;
-            case TextureEnvParameter::Src0Rgb:
-                ConvertPackedEnum(env.src0Rgb, params);
-                break;
-            case TextureEnvParameter::Src1Rgb:
-                ConvertPackedEnum(env.src1Rgb, params);
-                break;
-            case TextureEnvParameter::Src2Rgb:
-                ConvertPackedEnum(env.src2Rgb, params);
-                break;
-            case TextureEnvParameter::Src0Alpha:
-                ConvertPackedEnum(env.src0Alpha, params);
-                break;
-            case TextureEnvParameter::Src1Alpha:
-                ConvertPackedEnum(env.src1Alpha, params);
-                break;
-            case TextureEnvParameter::Src2Alpha:
-                ConvertPackedEnum(env.src2Alpha, params);
-                break;
-            case TextureEnvParameter::Op0Rgb:
-                ConvertPackedEnum(env.op0Rgb, params);
-                break;
-            case TextureEnvParameter::Op1Rgb:
-                ConvertPackedEnum(env.op1Rgb, params);
-                break;
-            case TextureEnvParameter::Op2Rgb:
-                ConvertPackedEnum(env.op2Rgb, params);
-                break;
-            case TextureEnvParameter::Op0Alpha:
-                ConvertPackedEnum(env.op0Alpha, params);
-                break;
-            case TextureEnvParameter::Op1Alpha:
-                ConvertPackedEnum(env.op1Alpha, params);
-                break;
-            case TextureEnvParameter::Op2Alpha:
-                ConvertPackedEnum(env.op2Alpha, params);
-                break;
-            case TextureEnvParameter::Color:
-                env.color.writeData(params);
-                break;
-            case TextureEnvParameter::RgbScale:
-                *params = env.rgbScale;
-                break;
-            case TextureEnvParameter::AlphaScale:
-                *params = env.alphaScale;
-                break;
-            default:
-                UNREACHABLE();
-                break;
-        }
+        case TextureEnvTarget::Env:
+            switch (pname)
+            {
+                case TextureEnvParameter::Mode:
+                    ConvertPackedEnum(env.mode, params);
+                    break;
+                case TextureEnvParameter::CombineRgb:
+                    ConvertPackedEnum(env.combineRgb, params);
+                    break;
+                case TextureEnvParameter::CombineAlpha:
+                    ConvertPackedEnum(env.combineAlpha, params);
+                    break;
+                case TextureEnvParameter::Src0Rgb:
+                    ConvertPackedEnum(env.src0Rgb, params);
+                    break;
+                case TextureEnvParameter::Src1Rgb:
+                    ConvertPackedEnum(env.src1Rgb, params);
+                    break;
+                case TextureEnvParameter::Src2Rgb:
+                    ConvertPackedEnum(env.src2Rgb, params);
+                    break;
+                case TextureEnvParameter::Src0Alpha:
+                    ConvertPackedEnum(env.src0Alpha, params);
+                    break;
+                case TextureEnvParameter::Src1Alpha:
+                    ConvertPackedEnum(env.src1Alpha, params);
+                    break;
+                case TextureEnvParameter::Src2Alpha:
+                    ConvertPackedEnum(env.src2Alpha, params);
+                    break;
+                case TextureEnvParameter::Op0Rgb:
+                    ConvertPackedEnum(env.op0Rgb, params);
+                    break;
+                case TextureEnvParameter::Op1Rgb:
+                    ConvertPackedEnum(env.op1Rgb, params);
+                    break;
+                case TextureEnvParameter::Op2Rgb:
+                    ConvertPackedEnum(env.op2Rgb, params);
+                    break;
+                case TextureEnvParameter::Op0Alpha:
+                    ConvertPackedEnum(env.op0Alpha, params);
+                    break;
+                case TextureEnvParameter::Op1Alpha:
+                    ConvertPackedEnum(env.op1Alpha, params);
+                    break;
+                case TextureEnvParameter::Op2Alpha:
+                    ConvertPackedEnum(env.op2Alpha, params);
+                    break;
+                case TextureEnvParameter::Color:
+                    env.color.writeData(params);
+                    break;
+                case TextureEnvParameter::RgbScale:
+                    *params = env.rgbScale;
+                    break;
+                case TextureEnvParameter::AlphaScale:
+                    *params = env.alphaScale;
+                    break;
+                default:
+                    UNREACHABLE();
+                    break;
+            }
+            break;
+        case TextureEnvTarget::PointSprite:
+            switch (pname)
+            {
+                case TextureEnvParameter::PointCoordReplace:
+                    *params = static_cast<GLfloat>(env.pointSpriteCoordReplace);
+                    break;
+                default:
+                    UNREACHABLE();
+                    break;
+            }
+            break;
+        default:
+            UNREACHABLE();
+            break;
     }
-    else
+}
+
+unsigned int GetPointParameterCount(PointParameter pname)
+{
+    switch (pname)
     {
-        // TODO(lfy@google.com): point sprite target
-        UNREACHABLE();
+        case PointParameter::PointSizeMin:
+        case PointParameter::PointSizeMax:
+        case PointParameter::PointFadeThresholdSize:
+            return 1;
+        case PointParameter::PointDistanceAttenuation:
+            return 3;
+        default:
+            return 0;
     }
 }
 
+void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params)
+{
+
+    PointParameters &pointParams = state->pointParameters();
+
+    switch (pname)
+    {
+        case PointParameter::PointSizeMin:
+            pointParams.pointSizeMin = params[0];
+            break;
+        case PointParameter::PointSizeMax:
+            pointParams.pointSizeMax = params[0];
+            break;
+        case PointParameter::PointFadeThresholdSize:
+            pointParams.pointFadeThresholdSize = params[0];
+            break;
+        case PointParameter::PointDistanceAttenuation:
+            for (unsigned int i = 0; i < 3; i++)
+            {
+                pointParams.pointDistanceAttenuation[i] = params[i];
+            }
+            break;
+        default:
+            UNREACHABLE();
+    }
+}
+
+void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params)
+{
+    const PointParameters &pointParams = state->pointParameters();
+
+    switch (pname)
+    {
+        case PointParameter::PointSizeMin:
+            params[0] = pointParams.pointSizeMin;
+            break;
+        case PointParameter::PointSizeMax:
+            params[0] = pointParams.pointSizeMax;
+            break;
+        case PointParameter::PointFadeThresholdSize:
+            params[0] = pointParams.pointFadeThresholdSize;
+            break;
+        case PointParameter::PointDistanceAttenuation:
+            for (unsigned int i = 0; i < 3; i++)
+            {
+                params[i] = pointParams.pointDistanceAttenuation[i];
+            }
+            break;
+        default:
+            UNREACHABLE();
+    }
+}
+
+void SetPointSize(GLES1State *state, GLfloat size)
+{
+    PointParameters &params = state->pointParameters();
+    params.pointSize        = size;
+}
+
+void GetPointSize(GLES1State *state, GLfloat *sizeOut)
+{
+    const PointParameters &params = state->pointParameters();
+    *sizeOut                      = params.pointSize;
+}
+
 }  // namespace gl
 
 namespace egl