Cleanup TODO for constant-expression handling.
Support for constant-expression function calls in SkSL now exists, and
support for abs() was added at http://review.skia.org/405676.
Change-Id: I3144af993db93a3d640971734d4cb03e0cfb8589
Bug: skia:10835
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/408642
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/resources/sksl/shared/ConstVariableComparison.sksl b/resources/sksl/shared/ConstVariableComparison.sksl
index 9ac0e45..860e593 100644
--- a/resources/sksl/shared/ConstVariableComparison.sksl
+++ b/resources/sksl/shared/ConstVariableComparison.sksl
@@ -3,9 +3,7 @@
half4 main(float2 coords) {
const float4 a = float4(0);
const float4 b = float4(1);
- // This is a constant-expression in GLSL, but not in SkSL (yet).
- // We can't declare this const, and we can't eliminate it. skbug.com/10835
- /*const*/ float4 c = abs(b);
+ const float4 c = abs(b * 1);
if (a == b || b != c) {
return colorRed;
} else {
diff --git a/tests/sksl/shared/ConstVariableComparison.asm.frag b/tests/sksl/shared/ConstVariableComparison.asm.frag
index 0cd10e5..c5f68ea 100644
--- a/tests/sksl/shared/ConstVariableComparison.asm.frag
+++ b/tests/sksl/shared/ConstVariableComparison.asm.frag
@@ -10,8 +10,6 @@
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint_v "_entrypoint_v"
OpName %main "main"
-OpName %b "b"
-OpName %c "c"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@@ -23,8 +21,7 @@
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
-OpDecorate %43 RelaxedPrecision
-OpDecorate %46 RelaxedPrecision
+OpDecorate %30 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -42,13 +39,8 @@
%19 = OpConstantComposite %v2float %float_0 %float_0
%_ptr_Function_v2float = OpTypePointer Function %v2float
%23 = OpTypeFunction %v4float %_ptr_Function_v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%float_1 = OpConstant %float 1
-%29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%v4bool = OpTypeVector %bool 4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
-%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%_entrypoint_v = OpFunction %void None %15
%16 = OpLabel
@@ -61,24 +53,7 @@
%main = OpFunction %v4float None %23
%24 = OpFunctionParameter %_ptr_Function_v2float
%25 = OpLabel
-%b = OpVariable %_ptr_Function_v4float Function
-%c = OpVariable %_ptr_Function_v4float Function
-OpStore %b %29
-OpStore %c %29
-%31 = OpLoad %v4float %b
-%32 = OpLoad %v4float %c
-%33 = OpFOrdNotEqual %v4bool %31 %32
-%35 = OpAny %bool %33
-OpSelectionMerge %38 None
-OpBranchConditional %35 %36 %37
-%36 = OpLabel
-%39 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%43 = OpLoad %v4float %39
-OpReturnValue %43
-%37 = OpLabel
-%44 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%46 = OpLoad %v4float %44
-OpReturnValue %46
-%38 = OpLabel
-OpUnreachable
+%26 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%30 = OpLoad %v4float %26
+OpReturnValue %30
OpFunctionEnd
diff --git a/tests/sksl/shared/ConstVariableComparison.glsl b/tests/sksl/shared/ConstVariableComparison.glsl
index 98599b0..e45e05e 100644
--- a/tests/sksl/shared/ConstVariableComparison.glsl
+++ b/tests/sksl/shared/ConstVariableComparison.glsl
@@ -3,11 +3,7 @@
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
- const vec4 b = vec4(1.0);
- vec4 c = vec4(1.0, 1.0, 1.0, 1.0);
- if (b != c) {
- return colorRed;
- } else {
+ {
return colorGreen;
}
}
diff --git a/tests/sksl/shared/ConstVariableComparison.metal b/tests/sksl/shared/ConstVariableComparison.metal
index 7ea6c6c..d9ff991 100644
--- a/tests/sksl/shared/ConstVariableComparison.metal
+++ b/tests/sksl/shared/ConstVariableComparison.metal
@@ -13,14 +13,8 @@
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
- const float4 b = float4(1.0);
- float4 c = float4(1.0, 1.0, 1.0, 1.0);
- if (any(b != c)) {
- _out.sk_FragColor = _uniforms.colorRed;
- return _out;
- } else {
+ {
_out.sk_FragColor = _uniforms.colorGreen;
return _out;
}
- return _out;
}