Implement missing variants of min, max and clamp
BUG=angle:914
TEST=dEQP tests
Tests passing 100% because of this change:
dEQP-GLES3.functional.shaders.operator.common_functions.min.*
dEQP-GLES3.functional.shaders.operator.common_functions.max.*
dEQP-GLES3.functional.shaders.operator.common_functions.clamp.*
Reduced number of errors in tests:
EQP-GLES3.functional.shaders.constant_expressions.builtin_functions.common.*
These tests are not yet passing because of constant expressions
bug (angle bug:913)
Change-Id: Ibccee47ed78e994e40a0effe9afa9cf9692492b0
Reviewed-on: https://chromium-review.googlesource.com/250330
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/Initialize.cpp b/src/compiler/translator/Initialize.cpp
index 59b617c..7ca6e42 100644
--- a/src/compiler/translator/Initialize.cpp
+++ b/src/compiler/translator/Initialize.cpp
@@ -187,6 +187,27 @@
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "min", float3, float3);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float4, "min", float4, float4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int1, "min", int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "min", int2, int2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "min", int3, int3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "min", int4, int4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "min", int2, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "min", int3, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "min", int4, int1);
+
+ TType *uint1 = new TType(EbtUInt);
+ TType *uint2 = new TType(EbtUInt, 2);
+ TType *uint3 = new TType(EbtUInt, 3);
+ TType *uint4 = new TType(EbtUInt, 4);
+
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint1, "min", uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "min", uint2, uint2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "min", uint3, uint3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "min", uint4, uint4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "min", uint2, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "min", uint3, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "min", uint4, uint1);
+
symbolTable.insertBuiltIn(COMMON_BUILTINS, float1, "max", float1, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float2, "max", float2, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "max", float3, float1);
@@ -195,6 +216,22 @@
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "max", float3, float3);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float4, "max", float4, float4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int1, "max", int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "max", int2, int2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "max", int3, int3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "max", int4, int4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "max", int2, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "max", int3, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "max", int4, int1);
+
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint1, "max", uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "max", uint2, uint2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "max", uint3, uint3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "max", uint4, uint4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "max", uint2, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "max", uint3, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "max", uint4, uint1);
+
symbolTable.insertBuiltIn(COMMON_BUILTINS, float1, "clamp", float1, float1, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float2, "clamp", float2, float1, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "clamp", float3, float1, float1);
@@ -203,6 +240,22 @@
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "clamp", float3, float3, float3);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float4, "clamp", float4, float4, float4);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int1, "clamp", int1, int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "clamp", int2, int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "clamp", int3, int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "clamp", int4, int1, int1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "clamp", int2, int2, int2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "clamp", int3, int3, int3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, int4, "clamp", int4, int4, int4);
+
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint1, "clamp", uint1, uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "clamp", uint2, uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "clamp", uint3, uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "clamp", uint4, uint1, uint1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint2, "clamp", uint2, uint2, uint2);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint3, "clamp", uint3, uint3, uint3);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, uint4, "clamp", uint4, uint4, uint4);
+
symbolTable.insertBuiltIn(COMMON_BUILTINS, float1, "mix", float1, float1, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float2, "mix", float2, float2, float1);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "mix", float3, float3, float1);
@@ -227,11 +280,6 @@
symbolTable.insertBuiltIn(COMMON_BUILTINS, float3, "smoothstep", float1, float1, float3);
symbolTable.insertBuiltIn(COMMON_BUILTINS, float4, "smoothstep", float1, float1, float4);
- TType *uint1 = new TType(EbtUInt);
- TType *uint2 = new TType(EbtUInt, 2);
- TType *uint3 = new TType(EbtUInt, 3);
- TType *uint4 = new TType(EbtUInt, 4);
-
symbolTable.insertBuiltIn(ESSL3_BUILTINS, int1, "floatBitsToInt", float1);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "floatBitsToInt", float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "floatBitsToInt", float3);
@@ -804,6 +852,10 @@
symbolTable.relateToOperator(COMMON_BUILTINS, "step", EOpStep);
symbolTable.relateToOperator(COMMON_BUILTINS, "smoothstep", EOpSmoothStep);
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "min", EOpMin);
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "max", EOpMax);
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "clamp", EOpClamp);
+
symbolTable.relateToOperator(ESSL3_BUILTINS, "floatBitsToInt", EOpFloatBitsToInt);
symbolTable.relateToOperator(ESSL3_BUILTINS, "floatBitsToUint", EOpFloatBitsToUint);
symbolTable.relateToOperator(ESSL3_BUILTINS, "intBitsToFloat", EOpIntBitsToFloat);