diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def index f2b4d7e650..4bb101ee89 100644 --- a/src/tint/intrinsics.def +++ b/src/tint/intrinsics.def @@ -491,8 +491,8 @@ fn inverseSqrt(T) -> T fn inverseSqrt(vec) -> vec fn ldexp(T, i32) -> T fn ldexp(vec, vec) -> vec -fn length(T) -> T -fn length(vec) -> T +@const fn length(@test_value(0.0) T) -> T +@const fn length(@test_value(0.0) vec) -> T fn log(T) -> T fn log(vec) -> vec fn log2(T) -> T diff --git a/src/tint/resolver/builtin_test.cc b/src/tint/resolver/builtin_test.cc index 9fc6090c9c..c6ca1f426e 100644 --- a/src/tint/resolver/builtin_test.cc +++ b/src/tint/resolver/builtin_test.cc @@ -1184,8 +1184,8 @@ TEST_F(ResolverBuiltinFloatTest, Length_NoParams) { EXPECT_EQ(r()->error(), R"(error: no matching call to length() 2 candidate functions: - length(T) -> T where: T is f32 or f16 - length(vecN) -> T where: T is f32 or f16 + length(T) -> T where: T is abstract-float, f32 or f16 + length(vecN) -> T where: T is abstract-float, f32 or f16 )"); } @@ -1198,8 +1198,8 @@ TEST_F(ResolverBuiltinFloatTest, Length_TooManyParams) { EXPECT_EQ(r()->error(), R"(error: no matching call to length(f32, f32) 2 candidate functions: - length(T) -> T where: T is f32 or f16 - length(vecN) -> T where: T is f32 or f16 + length(T) -> T where: T is abstract-float, f32 or f16 + length(vecN) -> T where: T is abstract-float, f32 or f16 )"); } diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc index 28e100ea1f..6cdf8f4e16 100644 --- a/src/tint/resolver/const_eval.cc +++ b/src/tint/resolver/const_eval.cc @@ -890,6 +890,24 @@ utils::Result ConstEval::Det2(const Source& source, return r; } +template +utils::Result ConstEval::Sqrt(const Source& source, NumberT v) { + if (v < NumberT(0)) { + AddError("sqrt must be called with a value >= 0", source); + return utils::Failure; + } + return NumberT{std::sqrt(v)}; +} + +auto ConstEval::SqrtFunc(const Source& source, const sem::Type* elem_ty) { + return [=](auto v) -> ImplResult { + if (auto r = Sqrt(source, v)) { + return CreateElement(builder, source, elem_ty, r.Get()); + } + return utils::Failure; + }; +} + template utils::Result ConstEval::Clamp(const Source&, NumberT e, NumberT low, NumberT high) { return NumberT{std::min(std::max(e, low), high)}; @@ -968,6 +986,33 @@ auto ConstEval::Dot4Func(const Source& source, const sem::Type* elem_ty) { }; } +ConstEval::Result ConstEval::Dot(const Source& source, + const sem::Constant* v1, + const sem::Constant* v2) { + auto* vec_ty = v1->Type()->As(); + TINT_ASSERT(Resolver, vec_ty); + auto* elem_ty = vec_ty->type(); + switch (vec_ty->Width()) { + case 2: + return Dispatch_fia_fiu32_f16( // + Dot2Func(source, elem_ty), // + v1->Index(0), v1->Index(1), // + v2->Index(0), v2->Index(1)); + case 3: + return Dispatch_fia_fiu32_f16( // + Dot3Func(source, elem_ty), // + v1->Index(0), v1->Index(1), v1->Index(2), // + v2->Index(0), v2->Index(1), v2->Index(2)); + case 4: + return Dispatch_fia_fiu32_f16( // + Dot4Func(source, elem_ty), // + v1->Index(0), v1->Index(1), v1->Index(2), v1->Index(3), // + v2->Index(0), v2->Index(1), v2->Index(2), v2->Index(3)); + } + TINT_ICE(Resolver, builder.Diagnostics()) << "Expected vector"; + return utils::Failure; +} + auto ConstEval::Det2Func(const Source& source, const sem::Type* elem_ty) { return [=](auto a, auto b, auto c, auto d) -> ImplResult { if (auto r = Det2(source, a, b, c, d)) { @@ -1969,30 +2014,10 @@ ConstEval::Result ConstEval::degrees(const sem::Type* ty, return TransformElements(builder, ty, transform, args[0]); } -ConstEval::Result ConstEval::dot(const sem::Type* ty, +ConstEval::Result ConstEval::dot(const sem::Type*, utils::VectorRef args, const Source& source) { - auto calculate = [&]() -> ImplResult { - auto* v1 = args[0]; - auto* v2 = args[1]; - auto* vec_ty = v1->Type()->As(); - switch (vec_ty->Width()) { - case 2: - return Dispatch_fia_fiu32_f16(Dot2Func(source, ty), v1->Index(0), v1->Index(1), - v2->Index(0), v2->Index(1)); - case 3: - return Dispatch_fia_fiu32_f16(Dot3Func(source, ty), v1->Index(0), v1->Index(1), - v1->Index(2), v2->Index(0), v2->Index(1), - v2->Index(2)); - case 4: - return Dispatch_fia_fiu32_f16(Dot4Func(source, ty), v1->Index(0), v1->Index(1), - v1->Index(2), v1->Index(3), v2->Index(0), - v2->Index(1), v2->Index(2), v2->Index(3)); - } - TINT_ICE(Resolver, builder.Diagnostics()) << "Expected scalar or vector"; - return utils::Failure; - }; - auto r = calculate(); + auto r = Dot(source, args[0], args[1]); if (!r) { AddNote("when calculating dot", source); } @@ -2188,6 +2213,35 @@ ConstEval::Result ConstEval::insertBits(const sem::Type* ty, return TransformElements(builder, ty, transform, args[0], args[1]); } +ConstEval::Result ConstEval::length(const sem::Type* ty, + utils::VectorRef args, + const Source& source) { + auto calculate = [&]() -> ImplResult { + auto* vec_ty = args[0]->Type()->As(); + + // Evaluates to the absolute value of e if T is scalar. + if (vec_ty == nullptr) { + auto create = [&](auto e) { + using NumberT = decltype(e); + return CreateElement(builder, source, ty, NumberT{std::abs(e)}); + }; + return Dispatch_fa_f32_f16(create, args[0]); + } + + // Evaluates to sqrt(e[0]^2 + e[1]^2 + ...) if T is a vector type. + auto d = Dot(source, args[0], args[0]); + if (!d) { + return utils::Failure; + } + return Dispatch_fa_f32_f16(SqrtFunc(source, ty), d.Get()); + }; + auto r = calculate(); + if (!r) { + AddNote("when calculating length", source); + } + return r; +} + ConstEval::Result ConstEval::max(const sem::Type* ty, utils::VectorRef args, const Source& source) { @@ -2561,15 +2615,7 @@ ConstEval::Result ConstEval::sqrt(const sem::Type* ty, utils::VectorRef args, const Source& source) { auto transform = [&](const sem::Constant* c0) { - auto create = [&](auto i) -> ImplResult { - using NumberT = decltype(i); - if (i < NumberT(0)) { - AddError("sqrt must be called with a value >= 0", source); - return utils::Failure; - } - return CreateElement(builder, source, c0->Type(), NumberT(std::sqrt(i.value))); - }; - return Dispatch_fa_f32_f16(create, c0); + return Dispatch_fa_f32_f16(SqrtFunc(source, c0->Type()), c0); }; return TransformElements(builder, ty, transform, args[0]); diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h index cb1babd1d2..496e138ecd 100644 --- a/src/tint/resolver/const_eval.h +++ b/src/tint/resolver/const_eval.h @@ -601,6 +601,15 @@ class ConstEval { utils::VectorRef args, const Source& source); + /// length builtin + /// @param ty the expression type + /// @param args the input arguments + /// @param source the source location + /// @return the result value, or null if the value cannot be calculated + Result length(const sem::Type* ty, + utils::VectorRef args, + const Source& source); + /// max builtin /// @param ty the expression type /// @param args the input arguments @@ -962,6 +971,9 @@ class ConstEval { NumberT b1, NumberT b2); + template + utils::Result Sqrt(const Source& source, NumberT v); + /// Clamps e between low and high /// @param source the source location /// @param e the number to clamp @@ -1034,6 +1046,20 @@ class ConstEval { /// @returns the callable function auto ClampFunc(const Source& source, const sem::Type* elem_ty); + /// Returns a callable that calls SqrtFunc, and creates a Constant with its + /// result of type `elem_ty` if successful, or returns Failure otherwise. + /// @param source the source location + /// @param elem_ty the element type of the Constant to create on success + /// @returns the callable function + auto SqrtFunc(const Source& source, const sem::Type* elem_ty); + + /// Returns the dot product of v1 and v2. + /// @param source the source location + /// @param v1 the first vector + /// @param v2 the second vector + /// @returns the dot product + Result Dot(const Source& source, const sem::Constant* v1, const sem::Constant* v2); + ProgramBuilder& builder; }; diff --git a/src/tint/resolver/const_eval_builtin_test.cc b/src/tint/resolver/const_eval_builtin_test.cc index 6c6d193fb8..13bbac50ca 100644 --- a/src/tint/resolver/const_eval_builtin_test.cc +++ b/src/tint/resolver/const_eval_builtin_test.cc @@ -41,10 +41,12 @@ struct Case { return *this; } - /// Expected value should be compared using FLOAT_EQ instead of EQ - Case& FloatComp() { + /// Expected value should be compared using EXPECT_FLOAT_EQ instead of EXPECT_EQ. + /// If optional epsilon is passed in, will be compared using EXPECT_NEAR with that epsilon. + Case& FloatComp(std::optional epsilon = {}) { Success s = expected.Get(); s.flags.float_compare = true; + s.flags.float_compare_epsilon = epsilon; expected = s; return *this; } @@ -1176,6 +1178,65 @@ INSTANTIATE_TEST_SUITE_P( // testing::ValuesIn(Concat(ExtractBitsCases(), // ExtractBitsCases())))); +template +std::vector LengthCases() { + const auto kSqrtOfHighest = T(std::sqrt(T::Highest())); + const auto kSqrtOfHighestSquared = T(kSqrtOfHighest * kSqrtOfHighest); + + auto error_msg = [](auto a, const char* op, auto b) { + return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"( +12:34 note: when calculating length)"; + }; + return { + C({T(0)}, T(0)), + C({Vec(T(0), T(0))}, Val(T(0))), + C({Vec(T(0), T(0), T(0))}, Val(T(0))), + C({Vec(T(0), T(0), T(0), T(0))}, Val(T(0))), + + C({T(1)}, T(1)), + C({Vec(T(1), T(1))}, Val(T(std::sqrt(2)))), + C({Vec(T(1), T(1), T(1))}, Val(T(std::sqrt(3)))), + C({Vec(T(1), T(1), T(1), T(1))}, Val(T(std::sqrt(4)))), + + C({T(2)}, T(2)), + C({Vec(T(2), T(2))}, Val(T(std::sqrt(8)))), + C({Vec(T(2), T(2), T(2))}, Val(T(std::sqrt(12)))), + C({Vec(T(2), T(2), T(2), T(2))}, Val(T(std::sqrt(16)))), + + C({Vec(T(2), T(3))}, Val(T(std::sqrt(13)))), + C({Vec(T(2), T(3), T(4))}, Val(T(std::sqrt(29)))), + C({Vec(T(2), T(3), T(4), T(5))}, Val(T(std::sqrt(54)))), + + C({T(-5)}, T(5)), + C({T::Highest()}, T::Highest()), + C({T::Lowest()}, T::Highest()), + + C({Vec(T(-2), T(-3), T(-4), T(-5))}, Val(T(std::sqrt(54)))), + C({Vec(T(2), T(-3), T(4), T(-5))}, Val(T(std::sqrt(54)))), + C({Vec(T(-2), T(3), T(-4), T(5))}, Val(T(std::sqrt(54)))), + + C({Vec(kSqrtOfHighest, T(0))}, Val(kSqrtOfHighest)).FloatComp(0.2), + C({Vec(T(0), kSqrtOfHighest)}, Val(kSqrtOfHighest)).FloatComp(0.2), + + C({Vec(-kSqrtOfHighest, T(0))}, Val(kSqrtOfHighest)).FloatComp(0.2), + C({Vec(T(0), -kSqrtOfHighest)}, Val(kSqrtOfHighest)).FloatComp(0.2), + + // Overflow when squaring a term + E({Vec(T::Highest(), T(0))}, error_msg(T::Highest(), "*", T::Highest())), + E({Vec(T(0), T::Highest())}, error_msg(T::Highest(), "*", T::Highest())), + // Overflow when adding squared terms + E({Vec(kSqrtOfHighest, kSqrtOfHighest)}, + error_msg(kSqrtOfHighestSquared, "+", kSqrtOfHighestSquared)), + }; +} +INSTANTIATE_TEST_SUITE_P( // + Length, + ResolverConstEvalBuiltinTest, + testing::Combine(testing::Values(sem::BuiltinType::kLength), + testing::ValuesIn(Concat(LengthCases(), // + LengthCases(), + LengthCases())))); + template std::vector MaxCases() { return { diff --git a/src/tint/resolver/const_eval_test.h b/src/tint/resolver/const_eval_test.h index 908d7e2773..bc8554283e 100644 --- a/src/tint/resolver/const_eval_test.h +++ b/src/tint/resolver/const_eval_test.h @@ -16,6 +16,7 @@ #define SRC_TINT_RESOLVER_CONST_EVAL_TEST_H_ #include +#include #include #include @@ -74,8 +75,11 @@ inline auto Abs(const Number& v) { struct CheckConstantFlags { /// Expected value may be positive or negative bool pos_or_neg = false; - /// Expected value should be compared using FLOAT_EQ instead of EQ + /// Expected value should be compared using EXPECT_FLOAT_EQ instead of EQ, or EXPECT_NEAR if + /// float_compare_epsilon is set. bool float_compare = false; + /// Expected value should be compared using EXPECT_NEAR if float_compare is set. + std::optional float_compare_epsilon; }; /// CheckConstant checks that @p got_constant, the result value of @@ -106,18 +110,16 @@ inline void CheckConstant(const sem::Constant* got_constant, EXPECT_TRUE(std::isnan(got)); } else { if (flags.pos_or_neg) { - auto got_abs = Abs(got); - if (flags.float_compare) { - EXPECT_FLOAT_EQ(got_abs, expected); + got = Abs(got); + } + if (flags.float_compare) { + if (flags.float_compare_epsilon) { + EXPECT_NEAR(got, expected, *flags.float_compare_epsilon); } else { - EXPECT_EQ(got_abs, expected); + EXPECT_FLOAT_EQ(got, expected); } } else { - if (flags.float_compare) { - EXPECT_FLOAT_EQ(got, expected); - } else { - EXPECT_EQ(got, expected); - } + EXPECT_EQ(got, expected); } } } else { diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl index 91ff68c329..774496018f 100644 --- a/src/tint/resolver/intrinsic_table.inl +++ b/src/tint/resolver/intrinsic_table.inl @@ -12726,24 +12726,24 @@ constexpr OverloadInfo kOverloads[] = { /* num parameters */ 1, /* num template types */ 1, /* num template numbers */ 0, - /* template types */ &kTemplateTypes[26], + /* template types */ &kTemplateTypes[23], /* template numbers */ &kTemplateNumbers[10], /* parameters */ &kParameters[872], /* return matcher indices */ &kMatcherIndices[3], /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), - /* const eval */ nullptr, + /* const eval */ &ConstEval::length, }, { /* [368] */ /* num parameters */ 1, /* num template types */ 1, /* num template numbers */ 1, - /* template types */ &kTemplateTypes[26], + /* template types */ &kTemplateTypes[23], /* template numbers */ &kTemplateNumbers[4], /* parameters */ &kParameters[873], /* return matcher indices */ &kMatcherIndices[3], /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), - /* const eval */ nullptr, + /* const eval */ &ConstEval::length, }, { /* [369] */ @@ -14308,8 +14308,8 @@ constexpr IntrinsicInfo kBuiltins[] = { }, { /* [47] */ - /* fn length(T) -> T */ - /* fn length(vec) -> T */ + /* fn length(@test_value(0) T) -> T */ + /* fn length(@test_value(0) vec) -> T */ /* num overloads */ 2, /* overloads */ &kOverloads[367], }, diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl b/test/tint/builtins/gen/literal/length/056071.wgsl index 8fc39ba92d..e8d182c5a7 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl @@ -23,7 +23,7 @@ // fn length(vec<3, f32>) -> f32 fn length_056071() { - var res: f32 = length(vec3(1.f)); + var res: f32 = length(vec3(0.f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl index 059bd52fb0..5866d13a89 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_056071() { - float res = length((1.0f).xxx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl index 059bd52fb0..5866d13a89 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_056071() { - float res = length((1.0f).xxx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl index 13c4890b46..d70b411b74 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_056071() { - float res = length(vec3(1.0f)); + float res = 0.0f; } vec4 vertex_main() { @@ -21,7 +21,7 @@ void main() { precision mediump float; void length_056071() { - float res = length(vec3(1.0f)); + float res = 0.0f; } void fragment_main() { @@ -35,7 +35,7 @@ void main() { #version 310 es void length_056071() { - float res = length(vec3(1.0f)); + float res = 0.0f; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl index 387e06d238..7ccfb33281 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_056071() { - float res = length(float3(1.0f)); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm index 9f13f37e35..0a8134b839 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm @@ -1,10 +1,9 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 33 +; Bound: 29 ; Schema: 0 OpCapability Shader - %14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -31,37 +30,34 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %v3float = OpTypeVector %float 3 - %float_1 = OpConstant %float 1 - %17 = OpConstantComposite %v3float %float_1 %float_1 %float_1 %_ptr_Function_float = OpTypePointer Function %float - %20 = OpTypeFunction %v4float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_056071 = OpFunction %void None %9 %12 = OpLabel %res = OpVariable %_ptr_Function_float Function %8 - %13 = OpExtInst %float %14 Length %17 - OpStore %res %13 + OpStore %res %8 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %20 - %22 = OpLabel - %23 = OpFunctionCall %void %length_056071 +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_056071 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %25 = OpLabel - %26 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %26 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %28 = OpLabel - %29 = OpFunctionCall %void %length_056071 + %24 = OpLabel + %25 = OpFunctionCall %void %length_056071 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_056071 + %27 = OpLabel + %28 = OpFunctionCall %void %length_056071 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl index d83825d83f..34f59eb1fa 100644 --- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_056071() { - var res : f32 = length(vec3(1.0f)); + var res : f32 = length(vec3(0.0f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl index 61b3d2bba5..44fc5bfdbe 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<2, f16>) -> f16 fn length_3f0e13() { - var res: f16 = length(vec2(1.h)); + var res: f16 = length(vec2(0.h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl index aeb2c63024..25a71d7c2f 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_3f0e13() { - float16_t res = length((float16_t(1.0h)).xx); + float16_t res = float16_t(0.0h); } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl index d1738a3114..aa45582b91 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_3f0e13() { - float16_t res = length(f16vec2(1.0hf)); + float16_t res = 0.0hf; } vec4 vertex_main() { @@ -23,7 +23,7 @@ void main() { precision mediump float; void length_3f0e13() { - float16_t res = length(f16vec2(1.0hf)); + float16_t res = 0.0hf; } void fragment_main() { @@ -38,7 +38,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_3f0e13() { - float16_t res = length(f16vec2(1.0hf)); + float16_t res = 0.0hf; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl index 82464e6577..4709c0d113 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_3f0e13() { - half res = length(half2(1.0h)); + half res = 0.0h; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm index c026dd5cd7..8e47cf3448 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm @@ -1,14 +1,13 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 36 +; Bound: 31 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %15 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -36,39 +35,35 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %half = OpTypeFloat 16 - %v2half = OpTypeVector %half 2 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0 + %14 = OpConstantNull %half %_ptr_Function_half = OpTypePointer Function %half - %21 = OpConstantNull %half - %22 = OpTypeFunction %v4float + %17 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_3f0e13 = OpFunction %void None %9 %12 = OpLabel - %res = OpVariable %_ptr_Function_half Function %21 - %13 = OpExtInst %half %15 Length %18 - OpStore %res %13 + %res = OpVariable %_ptr_Function_half Function %14 + OpStore %res %14 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %22 - %24 = OpLabel - %25 = OpFunctionCall %void %length_3f0e13 +%vertex_main_inner = OpFunction %v4float None %17 + %19 = OpLabel + %20 = OpFunctionCall %void %length_3f0e13 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %27 = OpLabel - %28 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %28 + %22 = OpLabel + %23 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %23 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_3f0e13 + %26 = OpLabel + %27 = OpFunctionCall %void %length_3f0e13 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %34 = OpLabel - %35 = OpFunctionCall %void %length_3f0e13 + %29 = OpLabel + %30 = OpFunctionCall %void %length_3f0e13 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl index 295b05e772..920ea1a386 100644 --- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_3f0e13() { - var res : f16 = length(vec2(1.0h)); + var res : f16 = length(vec2(0.0h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl b/test/tint/builtins/gen/literal/length/555aba.wgsl new file mode 100644 index 0000000000..595bb1b06b --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl @@ -0,0 +1,43 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<3, fa>) -> fa +fn length_555aba() { + var res = length(vec3(0.)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_555aba(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_555aba(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_555aba(); +} diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..ae75f2ee92 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_555aba(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_555aba(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_555aba(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..ae75f2ee92 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_555aba(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_555aba(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_555aba(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl new file mode 100644 index 0000000000..fb815a6a47 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_555aba() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_555aba(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_555aba() { + float res = 0.0f; +} + +void fragment_main() { + length_555aba(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_555aba() { + float res = 0.0f; +} + +void compute_main() { + length_555aba(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl new file mode 100644 index 0000000000..c59618c2ce --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_555aba(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_555aba(); + return; +} + +kernel void compute_main() { + length_555aba(); + return; +} + diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm new file mode 100644 index 0000000000..d8d7c41e91 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_555aba "length_555aba" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_555aba = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_555aba + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_555aba + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_555aba + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl new file mode 100644 index 0000000000..ebae2ef76f --- /dev/null +++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn length_555aba() { + var res = length(vec3(0.0)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_555aba(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_555aba(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_555aba(); +} diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl index 50a2ef16df..a15a013b57 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<4, f16>) -> f16 fn length_5b1a9b() { - var res: f16 = length(vec4(1.h)); + var res: f16 = length(vec4(0.h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl index df138904be..1e6438359c 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_5b1a9b() { - float16_t res = length((float16_t(1.0h)).xxxx); + float16_t res = float16_t(0.0h); } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl index faca950063..27c14fdd93 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_5b1a9b() { - float16_t res = length(f16vec4(1.0hf)); + float16_t res = 0.0hf; } vec4 vertex_main() { @@ -23,7 +23,7 @@ void main() { precision mediump float; void length_5b1a9b() { - float16_t res = length(f16vec4(1.0hf)); + float16_t res = 0.0hf; } void fragment_main() { @@ -38,7 +38,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_5b1a9b() { - float16_t res = length(f16vec4(1.0hf)); + float16_t res = 0.0hf; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl index dff63bafbb..5fd0861bcd 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_5b1a9b() { - half res = length(half4(1.0h)); + half res = 0.0h; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm index bdc904272b..3d31fb36d2 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm @@ -1,14 +1,13 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 36 +; Bound: 31 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %15 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -36,39 +35,35 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %half = OpTypeFloat 16 - %v4half = OpTypeVector %half 4 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 + %14 = OpConstantNull %half %_ptr_Function_half = OpTypePointer Function %half - %21 = OpConstantNull %half - %22 = OpTypeFunction %v4float + %17 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_5b1a9b = OpFunction %void None %9 %12 = OpLabel - %res = OpVariable %_ptr_Function_half Function %21 - %13 = OpExtInst %half %15 Length %18 - OpStore %res %13 + %res = OpVariable %_ptr_Function_half Function %14 + OpStore %res %14 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %22 - %24 = OpLabel - %25 = OpFunctionCall %void %length_5b1a9b +%vertex_main_inner = OpFunction %v4float None %17 + %19 = OpLabel + %20 = OpFunctionCall %void %length_5b1a9b OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %27 = OpLabel - %28 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %28 + %22 = OpLabel + %23 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %23 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_5b1a9b + %26 = OpLabel + %27 = OpFunctionCall %void %length_5b1a9b OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %34 = OpLabel - %35 = OpFunctionCall %void %length_5b1a9b + %29 = OpLabel + %30 = OpFunctionCall %void %length_5b1a9b OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl index e94fb3f0f0..c218c4a28c 100644 --- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_5b1a9b() { - var res : f16 = length(vec4(1.0h)); + var res : f16 = length(vec4(0.0h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl b/test/tint/builtins/gen/literal/length/602a17.wgsl index a9d46240d2..491582f856 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl @@ -23,7 +23,7 @@ // fn length(f32) -> f32 fn length_602a17() { - var res: f32 = length(1.f); + var res: f32 = length(0.f); } @vertex diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl index 0c0ce3943d..68960dff02 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_602a17() { - float res = length(1.0f); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl index 0c0ce3943d..68960dff02 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_602a17() { - float res = length(1.0f); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl index d6cce45ca8..579e67507e 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_602a17() { - float res = length(1.0f); + float res = 0.0f; } vec4 vertex_main() { @@ -21,7 +21,7 @@ void main() { precision mediump float; void length_602a17() { - float res = length(1.0f); + float res = 0.0f; } void fragment_main() { @@ -35,7 +35,7 @@ void main() { #version 310 es void length_602a17() { - float res = length(1.0f); + float res = 0.0f; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl index 86bfa31fc7..ee0c167147 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_602a17() { - float res = fabs(1.0f); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm index f42a9a59d8..d0aedc4119 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm @@ -1,10 +1,9 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 31 +; Bound: 29 ; Schema: 0 OpCapability Shader - %14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -31,35 +30,34 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %float_1 = OpConstant %float 1 %_ptr_Function_float = OpTypePointer Function %float - %18 = OpTypeFunction %v4float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_602a17 = OpFunction %void None %9 %12 = OpLabel %res = OpVariable %_ptr_Function_float Function %8 - %13 = OpExtInst %float %14 Length %float_1 - OpStore %res %13 + OpStore %res %8 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %18 - %20 = OpLabel - %21 = OpFunctionCall %void %length_602a17 +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_602a17 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %23 = OpLabel - %24 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %24 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %26 = OpLabel - %27 = OpFunctionCall %void %length_602a17 + %24 = OpLabel + %25 = OpFunctionCall %void %length_602a17 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %29 = OpLabel - %30 = OpFunctionCall %void %length_602a17 + %27 = OpLabel + %28 = OpFunctionCall %void %length_602a17 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl index 9209e3fc2f..e1220e574b 100644 --- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_602a17() { - var res : f32 = length(1.0f); + var res : f32 = length(0.0f); } @vertex diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl new file mode 100644 index 0000000000..359f2a0de3 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl @@ -0,0 +1,43 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<2, fa>) -> fa +fn length_7b4741() { + var res = length(vec2(0.)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_7b4741(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_7b4741(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_7b4741(); +} diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..08e83f51ee --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_7b4741(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_7b4741(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..08e83f51ee --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_7b4741(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_7b4741(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl new file mode 100644 index 0000000000..16c9226230 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_7b4741() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_7b4741(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_7b4741() { + float res = 0.0f; +} + +void fragment_main() { + length_7b4741(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_7b4741() { + float res = 0.0f; +} + +void compute_main() { + length_7b4741(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl new file mode 100644 index 0000000000..7c9de198bb --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_7b4741(); + return; +} + +kernel void compute_main() { + length_7b4741(); + return; +} + diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm new file mode 100644 index 0000000000..c85d9f22c1 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_7b4741 "length_7b4741" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_7b4741 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_7b4741 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_7b4741 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_7b4741 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl new file mode 100644 index 0000000000..d38ad2ad0e --- /dev/null +++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn length_7b4741() { + var res = length(vec2(0.0)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_7b4741(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_7b4741(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_7b4741(); +} diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl new file mode 100644 index 0000000000..1a5ea92403 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl @@ -0,0 +1,43 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(fa) -> fa +fn length_936ad5() { + var res = length(0.); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_936ad5(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_936ad5(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_936ad5(); +} diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..cf6a77225c --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_936ad5(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_936ad5(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..cf6a77225c --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_936ad5(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_936ad5(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl new file mode 100644 index 0000000000..cfb1b8c1b5 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_936ad5() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_936ad5(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_936ad5() { + float res = 0.0f; +} + +void fragment_main() { + length_936ad5(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_936ad5() { + float res = 0.0f; +} + +void compute_main() { + length_936ad5(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl new file mode 100644 index 0000000000..6a2e0a790b --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_936ad5(); + return; +} + +kernel void compute_main() { + length_936ad5(); + return; +} + diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm new file mode 100644 index 0000000000..a28538d72b --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_936ad5 "length_936ad5" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_936ad5 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_936ad5 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_936ad5 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_936ad5 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl new file mode 100644 index 0000000000..2e9ee0d1c6 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn length_936ad5() { + var res = length(0.0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_936ad5(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_936ad5(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_936ad5(); +} diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl index 4d0092bf06..722e73f4e3 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl @@ -23,7 +23,7 @@ // fn length(vec<2, f32>) -> f32 fn length_afde8b() { - var res: f32 = length(vec2(1.f)); + var res: f32 = length(vec2(0.f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl index fedf5b1a0f..42456bf582 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_afde8b() { - float res = length((1.0f).xx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl index fedf5b1a0f..42456bf582 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_afde8b() { - float res = length((1.0f).xx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl index c81bf7b56e..769f7f083b 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_afde8b() { - float res = length(vec2(1.0f)); + float res = 0.0f; } vec4 vertex_main() { @@ -21,7 +21,7 @@ void main() { precision mediump float; void length_afde8b() { - float res = length(vec2(1.0f)); + float res = 0.0f; } void fragment_main() { @@ -35,7 +35,7 @@ void main() { #version 310 es void length_afde8b() { - float res = length(vec2(1.0f)); + float res = 0.0f; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl index 74668c52da..5fed668147 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_afde8b() { - float res = length(float2(1.0f)); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm index d82d662150..e17edeaaad 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm @@ -1,10 +1,9 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 33 +; Bound: 29 ; Schema: 0 OpCapability Shader - %14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -31,37 +30,34 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %v2float = OpTypeVector %float 2 - %float_1 = OpConstant %float 1 - %17 = OpConstantComposite %v2float %float_1 %float_1 %_ptr_Function_float = OpTypePointer Function %float - %20 = OpTypeFunction %v4float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_afde8b = OpFunction %void None %9 %12 = OpLabel %res = OpVariable %_ptr_Function_float Function %8 - %13 = OpExtInst %float %14 Length %17 - OpStore %res %13 + OpStore %res %8 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %20 - %22 = OpLabel - %23 = OpFunctionCall %void %length_afde8b +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_afde8b OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %25 = OpLabel - %26 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %26 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %28 = OpLabel - %29 = OpFunctionCall %void %length_afde8b + %24 = OpLabel + %25 = OpFunctionCall %void %length_afde8b OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_afde8b + %27 = OpLabel + %28 = OpFunctionCall %void %length_afde8b OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl index 77a600c723..06b7d27d80 100644 --- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_afde8b() { - var res : f32 = length(vec2(1.0f)); + var res : f32 = length(vec2(0.0f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl index cca9b19fde..1319ded437 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<3, f16>) -> f16 fn length_ba16d6() { - var res: f16 = length(vec3(1.h)); + var res: f16 = length(vec3(0.h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl index 9cb7003cf1..6439c996fb 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_ba16d6() { - float16_t res = length((float16_t(1.0h)).xxx); + float16_t res = float16_t(0.0h); } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl index 676602a330..11ed9ccf10 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_ba16d6() { - float16_t res = length(f16vec3(1.0hf)); + float16_t res = 0.0hf; } vec4 vertex_main() { @@ -23,7 +23,7 @@ void main() { precision mediump float; void length_ba16d6() { - float16_t res = length(f16vec3(1.0hf)); + float16_t res = 0.0hf; } void fragment_main() { @@ -38,7 +38,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_ba16d6() { - float16_t res = length(f16vec3(1.0hf)); + float16_t res = 0.0hf; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl index 02c8d79fb0..f0ac6aab94 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_ba16d6() { - half res = length(half3(1.0h)); + half res = 0.0h; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm index bb6cac0c4f..4dc8dc40ad 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm @@ -1,14 +1,13 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 36 +; Bound: 31 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %15 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -36,39 +35,35 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %half = OpTypeFloat 16 - %v3half = OpTypeVector %half 3 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 + %14 = OpConstantNull %half %_ptr_Function_half = OpTypePointer Function %half - %21 = OpConstantNull %half - %22 = OpTypeFunction %v4float + %17 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_ba16d6 = OpFunction %void None %9 %12 = OpLabel - %res = OpVariable %_ptr_Function_half Function %21 - %13 = OpExtInst %half %15 Length %18 - OpStore %res %13 + %res = OpVariable %_ptr_Function_half Function %14 + OpStore %res %14 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %22 - %24 = OpLabel - %25 = OpFunctionCall %void %length_ba16d6 +%vertex_main_inner = OpFunction %v4float None %17 + %19 = OpLabel + %20 = OpFunctionCall %void %length_ba16d6 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %27 = OpLabel - %28 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %28 + %22 = OpLabel + %23 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %23 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_ba16d6 + %26 = OpLabel + %27 = OpFunctionCall %void %length_ba16d6 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %34 = OpLabel - %35 = OpFunctionCall %void %length_ba16d6 + %29 = OpLabel + %30 = OpFunctionCall %void %length_ba16d6 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl index 7c54ecb5b0..16aee35c40 100644 --- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_ba16d6() { - var res : f16 = length(vec3(1.0h)); + var res : f16 = length(vec3(0.0h)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl b/test/tint/builtins/gen/literal/length/becebf.wgsl index 7429e61874..55981c8a08 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl @@ -23,7 +23,7 @@ // fn length(vec<4, f32>) -> f32 fn length_becebf() { - var res: f32 = length(vec4(1.f)); + var res: f32 = length(vec4(0.f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl index 2d55ef8491..340a531451 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_becebf() { - float res = length((1.0f).xxxx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl index 2d55ef8491..340a531451 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_becebf() { - float res = length((1.0f).xxxx); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl index b83674639d..1f7b1dac4f 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_becebf() { - float res = length(vec4(1.0f)); + float res = 0.0f; } vec4 vertex_main() { @@ -21,7 +21,7 @@ void main() { precision mediump float; void length_becebf() { - float res = length(vec4(1.0f)); + float res = 0.0f; } void fragment_main() { @@ -35,7 +35,7 @@ void main() { #version 310 es void length_becebf() { - float res = length(vec4(1.0f)); + float res = 0.0f; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl index fdc96aa434..5ddf5a6d81 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_becebf() { - float res = length(float4(1.0f)); + float res = 0.0f; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm index 5ca602ff81..a5cc92da45 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm @@ -1,10 +1,9 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 32 +; Bound: 29 ; Schema: 0 OpCapability Shader - %14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -31,36 +30,34 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %float_1 = OpConstant %float 1 - %16 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 %_ptr_Function_float = OpTypePointer Function %float - %19 = OpTypeFunction %v4float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_becebf = OpFunction %void None %9 %12 = OpLabel %res = OpVariable %_ptr_Function_float Function %8 - %13 = OpExtInst %float %14 Length %16 - OpStore %res %13 + OpStore %res %8 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %19 - %21 = OpLabel - %22 = OpFunctionCall %void %length_becebf +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_becebf OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %24 = OpLabel - %25 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %25 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_becebf + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 %27 = OpLabel %28 = OpFunctionCall %void %length_becebf OpReturn OpFunctionEnd -%compute_main = OpFunction %void None %9 - %30 = OpLabel - %31 = OpFunctionCall %void %length_becebf - OpReturn - OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl index e6e3b713b9..4433e773a2 100644 --- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_becebf() { - var res : f32 = length(vec4(1.0f)); + var res : f32 = length(vec4(0.0f)); } @vertex diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl index cde0e0c871..9733c9ea00 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(f16) -> f16 fn length_c158da() { - var res: f16 = length(1.h); + var res: f16 = length(0.h); } @vertex diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl index 05771c25a7..26407dce51 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_c158da() { - float16_t res = length(float16_t(1.0h)); + float16_t res = float16_t(0.0h); } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl index d60a08b721..b276e06ee2 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_c158da() { - float16_t res = length(1.0hf); + float16_t res = 0.0hf; } vec4 vertex_main() { @@ -23,7 +23,7 @@ void main() { precision mediump float; void length_c158da() { - float16_t res = length(1.0hf); + float16_t res = 0.0hf; } void fragment_main() { @@ -38,7 +38,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_c158da() { - float16_t res = length(1.0hf); + float16_t res = 0.0hf; } void compute_main() { diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl index b1858e1ac3..432f101335 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_c158da() { - half res = fabs(1.0h); + half res = 0.0h; } struct tint_symbol { diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm index ec976a1ac4..f822ca5024 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm @@ -1,14 +1,13 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 34 +; Bound: 31 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %15 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -36,37 +35,35 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %half = OpTypeFloat 16 -%half_0x1p_0 = OpConstant %half 0x1p+0 + %14 = OpConstantNull %half %_ptr_Function_half = OpTypePointer Function %half - %19 = OpConstantNull %half - %20 = OpTypeFunction %v4float + %17 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_c158da = OpFunction %void None %9 %12 = OpLabel - %res = OpVariable %_ptr_Function_half Function %19 - %13 = OpExtInst %half %15 Length %half_0x1p_0 - OpStore %res %13 + %res = OpVariable %_ptr_Function_half Function %14 + OpStore %res %14 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %20 - %22 = OpLabel - %23 = OpFunctionCall %void %length_c158da +%vertex_main_inner = OpFunction %v4float None %17 + %19 = OpLabel + %20 = OpFunctionCall %void %length_c158da OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %25 = OpLabel - %26 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %26 + %22 = OpLabel + %23 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %23 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 + %26 = OpLabel + %27 = OpFunctionCall %void %length_c158da + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 %29 = OpLabel %30 = OpFunctionCall %void %length_c158da OpReturn OpFunctionEnd -%compute_main = OpFunction %void None %9 - %32 = OpLabel - %33 = OpFunctionCall %void %length_c158da - OpReturn - OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl index 66e82b118c..46edf49bfe 100644 --- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_c158da() { - var res : f16 = length(1.0h); + var res : f16 = length(0.0h); } @vertex diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl new file mode 100644 index 0000000000..516c67f5ab --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl @@ -0,0 +1,43 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<4, fa>) -> fa +fn length_c2c544() { + var res = length(vec4(0.)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_c2c544(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_c2c544(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_c2c544(); +} diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..3182250936 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_c2c544(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_c2c544(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..3182250936 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_c2c544(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_c2c544(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl new file mode 100644 index 0000000000..6c6a328eda --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_c2c544() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_c2c544(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_c2c544() { + float res = 0.0f; +} + +void fragment_main() { + length_c2c544(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_c2c544() { + float res = 0.0f; +} + +void compute_main() { + length_c2c544(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl new file mode 100644 index 0000000000..e4d987c887 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_c2c544(); + return; +} + +kernel void compute_main() { + length_c2c544(); + return; +} + diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm new file mode 100644 index 0000000000..c3a38b8b00 --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_c2c544 "length_c2c544" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_c2c544 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_c2c544 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_c2c544 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_c2c544 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl new file mode 100644 index 0000000000..b16a17501d --- /dev/null +++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn length_c2c544() { + var res = length(vec4(0.0)); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_c2c544(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_c2c544(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_c2c544(); +} diff --git a/test/tint/builtins/gen/var/length/056071.wgsl b/test/tint/builtins/gen/var/length/056071.wgsl index 27552326c5..f353299a99 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl +++ b/test/tint/builtins/gen/var/length/056071.wgsl @@ -23,7 +23,7 @@ // fn length(vec<3, f32>) -> f32 fn length_056071() { - var arg_0 = vec3(1.f); + var arg_0 = vec3(0.f); var res: f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl index 563246cfa3..bd540fbe8b 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_056071() { - float3 arg_0 = (1.0f).xxx; + float3 arg_0 = (0.0f).xxx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl index 563246cfa3..bd540fbe8b 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_056071() { - float3 arg_0 = (1.0f).xxx; + float3 arg_0 = (0.0f).xxx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl index c7442a6bd7..f4f3920de8 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_056071() { - vec3 arg_0 = vec3(1.0f); + vec3 arg_0 = vec3(0.0f); float res = length(arg_0); } @@ -22,7 +22,7 @@ void main() { precision mediump float; void length_056071() { - vec3 arg_0 = vec3(1.0f); + vec3 arg_0 = vec3(0.0f); float res = length(arg_0); } @@ -37,7 +37,7 @@ void main() { #version 310 es void length_056071() { - vec3 arg_0 = vec3(1.0f); + vec3 arg_0 = vec3(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl index f2ba3c3ed3..1727b62ba1 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_056071() { - float3 arg_0 = float3(1.0f); + float3 arg_0 = float3(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm index 45c6997238..fb485c717e 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm @@ -1,10 +1,10 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 37 +; Bound: 36 ; Schema: 0 OpCapability Shader - %20 = OpExtInstImport "GLSL.std.450" + %18 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -33,41 +33,40 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %v3float = OpTypeVector %float 3 - %float_1 = OpConstant %float 1 - %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1 + %14 = OpConstantNull %v3float %_ptr_Function_v3float = OpTypePointer Function %v3float - %18 = OpConstantNull %v3float %_ptr_Function_float = OpTypePointer Function %float - %24 = OpTypeFunction %v4float + %22 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_056071 = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_v3float Function %18 + %arg_0 = OpVariable %_ptr_Function_v3float Function %14 %res = OpVariable %_ptr_Function_float Function %8 - OpStore %arg_0 %15 - %21 = OpLoad %v3float %arg_0 - %19 = OpExtInst %float %20 Length %21 - OpStore %res %19 + OpStore %arg_0 %14 + %19 = OpLoad %v3float %arg_0 + %17 = OpExtInst %float %18 Length %19 + OpStore %res %17 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %24 - %26 = OpLabel - %27 = OpFunctionCall %void %length_056071 +%vertex_main_inner = OpFunction %v4float None %22 + %24 = OpLabel + %25 = OpFunctionCall %void %length_056071 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %29 = OpLabel - %30 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %30 + %27 = OpLabel + %28 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %28 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %32 = OpLabel - %33 = OpFunctionCall %void %length_056071 + %31 = OpLabel + %32 = OpFunctionCall %void %length_056071 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %35 = OpLabel - %36 = OpFunctionCall %void %length_056071 + %34 = OpLabel + %35 = OpFunctionCall %void %length_056071 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl index b5ddeb0079..ff5c0f2b98 100644 --- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_056071() { - var arg_0 = vec3(1.0f); + var arg_0 = vec3(0.0f); var res : f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl index cc5f92f29f..053f8b7183 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<2, f16>) -> f16 fn length_3f0e13() { - var arg_0 = vec2(1.h); + var arg_0 = vec2(0.h); var res: f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl index 59d94931db..ef03b061f5 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_3f0e13() { - vector arg_0 = (float16_t(1.0h)).xx; + vector arg_0 = (float16_t(0.0h)).xx; float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl index 30425e5020..a5f2471c6d 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_3f0e13() { - f16vec2 arg_0 = f16vec2(1.0hf); + f16vec2 arg_0 = f16vec2(0.0hf); float16_t res = length(arg_0); } @@ -24,7 +24,7 @@ void main() { precision mediump float; void length_3f0e13() { - f16vec2 arg_0 = f16vec2(1.0hf); + f16vec2 arg_0 = f16vec2(0.0hf); float16_t res = length(arg_0); } @@ -40,7 +40,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_3f0e13() { - f16vec2 arg_0 = f16vec2(1.0hf); + f16vec2 arg_0 = f16vec2(0.0hf); float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl index 403f07981f..797b6fbc4f 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_3f0e13() { - half2 arg_0 = half2(1.0h); + half2 arg_0 = half2(0.0h); half res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm index bcc5e63857..a92c3f18b1 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm @@ -1,14 +1,14 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 40 +; Bound: 38 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %21 = OpExtInstImport "GLSL.std.450" + %19 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -38,43 +38,41 @@ %9 = OpTypeFunction %void %half = OpTypeFloat 16 %v2half = OpTypeVector %half 2 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0 + %15 = OpConstantNull %v2half %_ptr_Function_v2half = OpTypePointer Function %v2half - %19 = OpConstantNull %v2half %_ptr_Function_half = OpTypePointer Function %half - %25 = OpConstantNull %half - %26 = OpTypeFunction %v4float + %23 = OpConstantNull %half + %24 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_3f0e13 = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_v2half Function %19 - %res = OpVariable %_ptr_Function_half Function %25 - OpStore %arg_0 %16 - %22 = OpLoad %v2half %arg_0 - %20 = OpExtInst %half %21 Length %22 - OpStore %res %20 + %arg_0 = OpVariable %_ptr_Function_v2half Function %15 + %res = OpVariable %_ptr_Function_half Function %23 + OpStore %arg_0 %15 + %20 = OpLoad %v2half %arg_0 + %18 = OpExtInst %half %19 Length %20 + OpStore %res %18 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %26 - %28 = OpLabel - %29 = OpFunctionCall %void %length_3f0e13 +%vertex_main_inner = OpFunction %v4float None %24 + %26 = OpLabel + %27 = OpFunctionCall %void %length_3f0e13 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %32 + %29 = OpLabel + %30 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %30 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %35 = OpLabel - %36 = OpFunctionCall %void %length_3f0e13 + %33 = OpLabel + %34 = OpFunctionCall %void %length_3f0e13 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %38 = OpLabel - %39 = OpFunctionCall %void %length_3f0e13 + %36 = OpLabel + %37 = OpFunctionCall %void %length_3f0e13 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl index aa47114987..1f691817c8 100644 --- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_3f0e13() { - var arg_0 = vec2(1.0h); + var arg_0 = vec2(0.0h); var res : f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl b/test/tint/builtins/gen/var/length/555aba.wgsl new file mode 100644 index 0000000000..c16c0995a0 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl @@ -0,0 +1,44 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<3, fa>) -> fa +fn length_555aba() { + const arg_0 = vec3(0.); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_555aba(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_555aba(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_555aba(); +} diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..ae75f2ee92 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_555aba(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_555aba(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_555aba(); + return; +} diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..ae75f2ee92 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_555aba(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_555aba(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_555aba(); + return; +} diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl new file mode 100644 index 0000000000..fb815a6a47 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_555aba() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_555aba(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_555aba() { + float res = 0.0f; +} + +void fragment_main() { + length_555aba(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_555aba() { + float res = 0.0f; +} + +void compute_main() { + length_555aba(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl new file mode 100644 index 0000000000..c59618c2ce --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_555aba() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_555aba(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_555aba(); + return; +} + +kernel void compute_main() { + length_555aba(); + return; +} + diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm new file mode 100644 index 0000000000..d8d7c41e91 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_555aba "length_555aba" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_555aba = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_555aba + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_555aba + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_555aba + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl new file mode 100644 index 0000000000..5fa0c1bb61 --- /dev/null +++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl @@ -0,0 +1,20 @@ +fn length_555aba() { + const arg_0 = vec3(0.0); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_555aba(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_555aba(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_555aba(); +} diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl index 629e9ced68..cef2978243 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<4, f16>) -> f16 fn length_5b1a9b() { - var arg_0 = vec4(1.h); + var arg_0 = vec4(0.h); var res: f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl index ff848f8d0a..4865222bf3 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_5b1a9b() { - vector arg_0 = (float16_t(1.0h)).xxxx; + vector arg_0 = (float16_t(0.0h)).xxxx; float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl index 0d546259be..75b0701773 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_5b1a9b() { - f16vec4 arg_0 = f16vec4(1.0hf); + f16vec4 arg_0 = f16vec4(0.0hf); float16_t res = length(arg_0); } @@ -24,7 +24,7 @@ void main() { precision mediump float; void length_5b1a9b() { - f16vec4 arg_0 = f16vec4(1.0hf); + f16vec4 arg_0 = f16vec4(0.0hf); float16_t res = length(arg_0); } @@ -40,7 +40,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_5b1a9b() { - f16vec4 arg_0 = f16vec4(1.0hf); + f16vec4 arg_0 = f16vec4(0.0hf); float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl index 2b9aa9f47a..885dd6662e 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_5b1a9b() { - half4 arg_0 = half4(1.0h); + half4 arg_0 = half4(0.0h); half res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm index b880106de5..0d97afeb8d 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm @@ -1,14 +1,14 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 40 +; Bound: 38 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %21 = OpExtInstImport "GLSL.std.450" + %19 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -38,43 +38,41 @@ %9 = OpTypeFunction %void %half = OpTypeFloat 16 %v4half = OpTypeVector %half 4 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 + %15 = OpConstantNull %v4half %_ptr_Function_v4half = OpTypePointer Function %v4half - %19 = OpConstantNull %v4half %_ptr_Function_half = OpTypePointer Function %half - %25 = OpConstantNull %half - %26 = OpTypeFunction %v4float + %23 = OpConstantNull %half + %24 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_5b1a9b = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_v4half Function %19 - %res = OpVariable %_ptr_Function_half Function %25 - OpStore %arg_0 %16 - %22 = OpLoad %v4half %arg_0 - %20 = OpExtInst %half %21 Length %22 - OpStore %res %20 + %arg_0 = OpVariable %_ptr_Function_v4half Function %15 + %res = OpVariable %_ptr_Function_half Function %23 + OpStore %arg_0 %15 + %20 = OpLoad %v4half %arg_0 + %18 = OpExtInst %half %19 Length %20 + OpStore %res %18 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %26 - %28 = OpLabel - %29 = OpFunctionCall %void %length_5b1a9b +%vertex_main_inner = OpFunction %v4float None %24 + %26 = OpLabel + %27 = OpFunctionCall %void %length_5b1a9b OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %32 + %29 = OpLabel + %30 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %30 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %35 = OpLabel - %36 = OpFunctionCall %void %length_5b1a9b + %33 = OpLabel + %34 = OpFunctionCall %void %length_5b1a9b OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %38 = OpLabel - %39 = OpFunctionCall %void %length_5b1a9b + %36 = OpLabel + %37 = OpFunctionCall %void %length_5b1a9b OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl index c008e07131..5a4657d791 100644 --- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_5b1a9b() { - var arg_0 = vec4(1.0h); + var arg_0 = vec4(0.0h); var res : f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl b/test/tint/builtins/gen/var/length/602a17.wgsl index 407ab650e9..e96d9d363b 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl @@ -23,7 +23,7 @@ // fn length(f32) -> f32 fn length_602a17() { - var arg_0 = 1.f; + var arg_0 = 0.f; var res: f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl index 5f4310e82c..a887d00d99 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl index 5f4310e82c..a887d00d99 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl index 41ad408b51..2fb5467326 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = length(arg_0); } @@ -22,7 +22,7 @@ void main() { precision mediump float; void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = length(arg_0); } @@ -37,7 +37,7 @@ void main() { #version 310 es void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl index a88e9edc14..b7bbcd9226 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_602a17() { - float arg_0 = 1.0f; + float arg_0 = 0.0f; float res = fabs(arg_0); } diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm index 7d99bccc7d..087b034f79 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm @@ -4,7 +4,7 @@ ; Bound: 33 ; Schema: 0 OpCapability Shader - %17 = OpExtInstImport "GLSL.std.450" + %16 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -32,28 +32,28 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %float_1 = OpConstant %float 1 %_ptr_Function_float = OpTypePointer Function %float - %20 = OpTypeFunction %v4float + %19 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_602a17 = OpFunction %void None %9 %12 = OpLabel %arg_0 = OpVariable %_ptr_Function_float Function %8 %res = OpVariable %_ptr_Function_float Function %8 - OpStore %arg_0 %float_1 - %18 = OpLoad %float %arg_0 - %16 = OpExtInst %float %17 Length %18 - OpStore %res %16 + OpStore %arg_0 %8 + %17 = OpLoad %float %arg_0 + %15 = OpExtInst %float %16 Length %17 + OpStore %res %15 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %20 - %22 = OpLabel - %23 = OpFunctionCall %void %length_602a17 +%vertex_main_inner = OpFunction %v4float None %19 + %21 = OpLabel + %22 = OpFunctionCall %void %length_602a17 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %25 = OpLabel - %26 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %26 + %24 = OpLabel + %25 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %25 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl index 7d1a3db6b7..aaeb9edb6a 100644 --- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_602a17() { - var arg_0 = 1.0f; + var arg_0 = 0.0f; var res : f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl b/test/tint/builtins/gen/var/length/7b4741.wgsl new file mode 100644 index 0000000000..ef76630656 --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl @@ -0,0 +1,44 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<2, fa>) -> fa +fn length_7b4741() { + const arg_0 = vec2(0.); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_7b4741(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_7b4741(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_7b4741(); +} diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..08e83f51ee --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_7b4741(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_7b4741(); + return; +} diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..08e83f51ee --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_7b4741(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_7b4741(); + return; +} diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl new file mode 100644 index 0000000000..16c9226230 --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_7b4741() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_7b4741(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_7b4741() { + float res = 0.0f; +} + +void fragment_main() { + length_7b4741(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_7b4741() { + float res = 0.0f; +} + +void compute_main() { + length_7b4741(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl new file mode 100644 index 0000000000..7c9de198bb --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_7b4741() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_7b4741(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_7b4741(); + return; +} + +kernel void compute_main() { + length_7b4741(); + return; +} + diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm new file mode 100644 index 0000000000..c85d9f22c1 --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_7b4741 "length_7b4741" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_7b4741 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_7b4741 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_7b4741 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_7b4741 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl new file mode 100644 index 0000000000..96518d9267 --- /dev/null +++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl @@ -0,0 +1,20 @@ +fn length_7b4741() { + const arg_0 = vec2(0.0); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_7b4741(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_7b4741(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_7b4741(); +} diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl b/test/tint/builtins/gen/var/length/936ad5.wgsl new file mode 100644 index 0000000000..ffaf899f58 --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl @@ -0,0 +1,44 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(fa) -> fa +fn length_936ad5() { + const arg_0 = 0.; + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_936ad5(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_936ad5(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_936ad5(); +} diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..cf6a77225c --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_936ad5(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_936ad5(); + return; +} diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..cf6a77225c --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_936ad5(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_936ad5(); + return; +} diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl new file mode 100644 index 0000000000..cfb1b8c1b5 --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_936ad5() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_936ad5(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_936ad5() { + float res = 0.0f; +} + +void fragment_main() { + length_936ad5(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_936ad5() { + float res = 0.0f; +} + +void compute_main() { + length_936ad5(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl new file mode 100644 index 0000000000..6a2e0a790b --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_936ad5() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_936ad5(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_936ad5(); + return; +} + +kernel void compute_main() { + length_936ad5(); + return; +} + diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm new file mode 100644 index 0000000000..a28538d72b --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_936ad5 "length_936ad5" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_936ad5 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_936ad5 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_936ad5 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_936ad5 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl new file mode 100644 index 0000000000..5075b6df3a --- /dev/null +++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl @@ -0,0 +1,20 @@ +fn length_936ad5() { + const arg_0 = 0.0; + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_936ad5(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_936ad5(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_936ad5(); +} diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl b/test/tint/builtins/gen/var/length/afde8b.wgsl index d24ca0b32a..20d6230316 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl @@ -23,7 +23,7 @@ // fn length(vec<2, f32>) -> f32 fn length_afde8b() { - var arg_0 = vec2(1.f); + var arg_0 = vec2(0.f); var res: f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl index 36522765e6..f1ca92a377 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_afde8b() { - float2 arg_0 = (1.0f).xx; + float2 arg_0 = (0.0f).xx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl index 36522765e6..f1ca92a377 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_afde8b() { - float2 arg_0 = (1.0f).xx; + float2 arg_0 = (0.0f).xx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl index 95b2f856a8..bee88075b8 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_afde8b() { - vec2 arg_0 = vec2(1.0f); + vec2 arg_0 = vec2(0.0f); float res = length(arg_0); } @@ -22,7 +22,7 @@ void main() { precision mediump float; void length_afde8b() { - vec2 arg_0 = vec2(1.0f); + vec2 arg_0 = vec2(0.0f); float res = length(arg_0); } @@ -37,7 +37,7 @@ void main() { #version 310 es void length_afde8b() { - vec2 arg_0 = vec2(1.0f); + vec2 arg_0 = vec2(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl index b283afea9e..ebda0cbf81 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_afde8b() { - float2 arg_0 = float2(1.0f); + float2 arg_0 = float2(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm index 603a9b03fc..975439ced2 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm @@ -1,10 +1,10 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 37 +; Bound: 36 ; Schema: 0 OpCapability Shader - %20 = OpExtInstImport "GLSL.std.450" + %18 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -33,41 +33,40 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %v2float = OpTypeVector %float 2 - %float_1 = OpConstant %float 1 - %15 = OpConstantComposite %v2float %float_1 %float_1 + %14 = OpConstantNull %v2float %_ptr_Function_v2float = OpTypePointer Function %v2float - %18 = OpConstantNull %v2float %_ptr_Function_float = OpTypePointer Function %float - %24 = OpTypeFunction %v4float + %22 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_afde8b = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_v2float Function %18 + %arg_0 = OpVariable %_ptr_Function_v2float Function %14 %res = OpVariable %_ptr_Function_float Function %8 - OpStore %arg_0 %15 - %21 = OpLoad %v2float %arg_0 - %19 = OpExtInst %float %20 Length %21 - OpStore %res %19 + OpStore %arg_0 %14 + %19 = OpLoad %v2float %arg_0 + %17 = OpExtInst %float %18 Length %19 + OpStore %res %17 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %24 - %26 = OpLabel - %27 = OpFunctionCall %void %length_afde8b +%vertex_main_inner = OpFunction %v4float None %22 + %24 = OpLabel + %25 = OpFunctionCall %void %length_afde8b OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %29 = OpLabel - %30 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %30 + %27 = OpLabel + %28 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %28 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %32 = OpLabel - %33 = OpFunctionCall %void %length_afde8b + %31 = OpLabel + %32 = OpFunctionCall %void %length_afde8b OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %35 = OpLabel - %36 = OpFunctionCall %void %length_afde8b + %34 = OpLabel + %35 = OpFunctionCall %void %length_afde8b OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl index 17ad733058..8fad0c3747 100644 --- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_afde8b() { - var arg_0 = vec2(1.0f); + var arg_0 = vec2(0.0f); var res : f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl index 7c69210b5c..c838fd5302 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(vec<3, f16>) -> f16 fn length_ba16d6() { - var arg_0 = vec3(1.h); + var arg_0 = vec3(0.h); var res: f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl index a69b52931a..7480de09db 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_ba16d6() { - vector arg_0 = (float16_t(1.0h)).xxx; + vector arg_0 = (float16_t(0.0h)).xxx; float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl index f73d6806fa..ea04f30ef6 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_ba16d6() { - f16vec3 arg_0 = f16vec3(1.0hf); + f16vec3 arg_0 = f16vec3(0.0hf); float16_t res = length(arg_0); } @@ -24,7 +24,7 @@ void main() { precision mediump float; void length_ba16d6() { - f16vec3 arg_0 = f16vec3(1.0hf); + f16vec3 arg_0 = f16vec3(0.0hf); float16_t res = length(arg_0); } @@ -40,7 +40,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_ba16d6() { - f16vec3 arg_0 = f16vec3(1.0hf); + f16vec3 arg_0 = f16vec3(0.0hf); float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl index bb585a0a5d..54123fcd29 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_ba16d6() { - half3 arg_0 = half3(1.0h); + half3 arg_0 = half3(0.0h); half res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm index 60a8f8be18..4ec76a0a73 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm @@ -1,14 +1,14 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 40 +; Bound: 38 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %21 = OpExtInstImport "GLSL.std.450" + %19 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -38,43 +38,41 @@ %9 = OpTypeFunction %void %half = OpTypeFloat 16 %v3half = OpTypeVector %half 3 -%half_0x1p_0 = OpConstant %half 0x1p+0 - %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 + %15 = OpConstantNull %v3half %_ptr_Function_v3half = OpTypePointer Function %v3half - %19 = OpConstantNull %v3half %_ptr_Function_half = OpTypePointer Function %half - %25 = OpConstantNull %half - %26 = OpTypeFunction %v4float + %23 = OpConstantNull %half + %24 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_ba16d6 = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_v3half Function %19 - %res = OpVariable %_ptr_Function_half Function %25 - OpStore %arg_0 %16 - %22 = OpLoad %v3half %arg_0 - %20 = OpExtInst %half %21 Length %22 - OpStore %res %20 + %arg_0 = OpVariable %_ptr_Function_v3half Function %15 + %res = OpVariable %_ptr_Function_half Function %23 + OpStore %arg_0 %15 + %20 = OpLoad %v3half %arg_0 + %18 = OpExtInst %half %19 Length %20 + OpStore %res %18 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %26 - %28 = OpLabel - %29 = OpFunctionCall %void %length_ba16d6 +%vertex_main_inner = OpFunction %v4float None %24 + %26 = OpLabel + %27 = OpFunctionCall %void %length_ba16d6 OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %32 + %29 = OpLabel + %30 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %30 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %35 = OpLabel - %36 = OpFunctionCall %void %length_ba16d6 + %33 = OpLabel + %34 = OpFunctionCall %void %length_ba16d6 OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %38 = OpLabel - %39 = OpFunctionCall %void %length_ba16d6 + %36 = OpLabel + %37 = OpFunctionCall %void %length_ba16d6 OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl index a3dcd56e58..2319558628 100644 --- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_ba16d6() { - var arg_0 = vec3(1.0h); + var arg_0 = vec3(0.0h); var res : f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl b/test/tint/builtins/gen/var/length/becebf.wgsl index ef00979eb8..32cdab78ba 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl @@ -23,7 +23,7 @@ // fn length(vec<4, f32>) -> f32 fn length_becebf() { - var arg_0 = vec4(1.f); + var arg_0 = vec4(0.f); var res: f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl index 12594bc3cf..e7760dd8e9 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_becebf() { - float4 arg_0 = (1.0f).xxxx; + float4 arg_0 = (0.0f).xxxx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl index 12594bc3cf..e7760dd8e9 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl @@ -1,5 +1,5 @@ void length_becebf() { - float4 arg_0 = (1.0f).xxxx; + float4 arg_0 = (0.0f).xxxx; float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl index abe433f234..a87cbf7abb 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl @@ -1,7 +1,7 @@ #version 310 es void length_becebf() { - vec4 arg_0 = vec4(1.0f); + vec4 arg_0 = vec4(0.0f); float res = length(arg_0); } @@ -22,7 +22,7 @@ void main() { precision mediump float; void length_becebf() { - vec4 arg_0 = vec4(1.0f); + vec4 arg_0 = vec4(0.0f); float res = length(arg_0); } @@ -37,7 +37,7 @@ void main() { #version 310 es void length_becebf() { - vec4 arg_0 = vec4(1.0f); + vec4 arg_0 = vec4(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl index 27c3e89215..6909b069f9 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_becebf() { - float4 arg_0 = float4(1.0f); + float4 arg_0 = float4(0.0f); float res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm index 7b2a58afa8..4162c69dda 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm @@ -1,10 +1,10 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 35 +; Bound: 34 ; Schema: 0 OpCapability Shader - %18 = OpExtInstImport "GLSL.std.450" + %16 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -32,40 +32,39 @@ %vertex_point_size = OpVariable %_ptr_Output_float Output %8 %void = OpTypeVoid %9 = OpTypeFunction %void - %float_1 = OpConstant %float 1 - %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 %_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_float = OpTypePointer Function %float - %22 = OpTypeFunction %v4float + %20 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 %length_becebf = OpFunction %void None %9 %12 = OpLabel %arg_0 = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_float Function %8 - OpStore %arg_0 %14 - %19 = OpLoad %v4float %arg_0 - %17 = OpExtInst %float %18 Length %19 - OpStore %res %17 + OpStore %arg_0 %5 + %17 = OpLoad %v4float %arg_0 + %15 = OpExtInst %float %16 Length %17 + OpStore %res %15 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %22 - %24 = OpLabel - %25 = OpFunctionCall %void %length_becebf +%vertex_main_inner = OpFunction %v4float None %20 + %22 = OpLabel + %23 = OpFunctionCall %void %length_becebf OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %27 = OpLabel - %28 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %28 + %25 = OpLabel + %26 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %26 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %30 = OpLabel - %31 = OpFunctionCall %void %length_becebf + %29 = OpLabel + %30 = OpFunctionCall %void %length_becebf OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %33 = OpLabel - %34 = OpFunctionCall %void %length_becebf + %32 = OpLabel + %33 = OpFunctionCall %void %length_becebf OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl index 9f7791a06d..2d1b76d53d 100644 --- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl @@ -1,5 +1,5 @@ fn length_becebf() { - var arg_0 = vec4(1.0f); + var arg_0 = vec4(0.0f); var res : f32 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl index 9c175dc01b..82055770b9 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl +++ b/test/tint/builtins/gen/var/length/c158da.wgsl @@ -25,7 +25,7 @@ enable f16; // fn length(f16) -> f16 fn length_c158da() { - var arg_0 = 1.h; + var arg_0 = 0.h; var res: f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl index b3b16c3a9d..e8ad9f71a0 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl +++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl @@ -1,5 +1,5 @@ void length_c158da() { - float16_t arg_0 = float16_t(1.0h); + float16_t arg_0 = float16_t(0.0h); float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl index 64a00e117b..023690cb16 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl +++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl @@ -2,7 +2,7 @@ #extension GL_AMD_gpu_shader_half_float : require void length_c158da() { - float16_t arg_0 = 1.0hf; + float16_t arg_0 = 0.0hf; float16_t res = length(arg_0); } @@ -24,7 +24,7 @@ void main() { precision mediump float; void length_c158da() { - float16_t arg_0 = 1.0hf; + float16_t arg_0 = 0.0hf; float16_t res = length(arg_0); } @@ -40,7 +40,7 @@ void main() { #extension GL_AMD_gpu_shader_half_float : require void length_c158da() { - float16_t arg_0 = 1.0hf; + float16_t arg_0 = 0.0hf; float16_t res = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl index 9854ae1c15..ea75d99360 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl +++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl @@ -2,7 +2,7 @@ using namespace metal; void length_c158da() { - half arg_0 = 1.0h; + half arg_0 = 0.0h; half res = fabs(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm index 5c55dc8fe5..5b14574943 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm +++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm @@ -1,14 +1,14 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 36 +; Bound: 35 ; Schema: 0 OpCapability Shader OpCapability Float16 OpCapability UniformAndStorageBuffer16BitAccess OpCapability StorageBuffer16BitAccess OpCapability StorageInputOutput16 - %19 = OpExtInstImport "GLSL.std.450" + %18 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Fragment %fragment_main "fragment_main" @@ -37,40 +37,39 @@ %void = OpTypeVoid %9 = OpTypeFunction %void %half = OpTypeFloat 16 -%half_0x1p_0 = OpConstant %half 0x1p+0 + %14 = OpConstantNull %half %_ptr_Function_half = OpTypePointer Function %half - %17 = OpConstantNull %half - %22 = OpTypeFunction %v4float + %21 = OpTypeFunction %v4float %float_1 = OpConstant %float 1 %length_c158da = OpFunction %void None %9 %12 = OpLabel - %arg_0 = OpVariable %_ptr_Function_half Function %17 - %res = OpVariable %_ptr_Function_half Function %17 - OpStore %arg_0 %half_0x1p_0 - %20 = OpLoad %half %arg_0 - %18 = OpExtInst %half %19 Length %20 - OpStore %res %18 + %arg_0 = OpVariable %_ptr_Function_half Function %14 + %res = OpVariable %_ptr_Function_half Function %14 + OpStore %arg_0 %14 + %19 = OpLoad %half %arg_0 + %17 = OpExtInst %half %18 Length %19 + OpStore %res %17 OpReturn OpFunctionEnd -%vertex_main_inner = OpFunction %v4float None %22 - %24 = OpLabel - %25 = OpFunctionCall %void %length_c158da +%vertex_main_inner = OpFunction %v4float None %21 + %23 = OpLabel + %24 = OpFunctionCall %void %length_c158da OpReturnValue %5 OpFunctionEnd %vertex_main = OpFunction %void None %9 - %27 = OpLabel - %28 = OpFunctionCall %v4float %vertex_main_inner - OpStore %value %28 + %26 = OpLabel + %27 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %27 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %fragment_main = OpFunction %void None %9 - %31 = OpLabel - %32 = OpFunctionCall %void %length_c158da + %30 = OpLabel + %31 = OpFunctionCall %void %length_c158da OpReturn OpFunctionEnd %compute_main = OpFunction %void None %9 - %34 = OpLabel - %35 = OpFunctionCall %void %length_c158da + %33 = OpLabel + %34 = OpFunctionCall %void %length_c158da OpReturn OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl index 2017cded3c..dc07d4bdc3 100644 --- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl +++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl @@ -1,7 +1,7 @@ enable f16; fn length_c158da() { - var arg_0 = 1.0h; + var arg_0 = 0.0h; var res : f16 = length(arg_0); } diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl b/test/tint/builtins/gen/var/length/c2c544.wgsl new file mode 100644 index 0000000000..5e145ffcd6 --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl @@ -0,0 +1,44 @@ +// Copyright 2022 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/src/cmd/gen +// using the template: +// test/tint/builtins/gen/gen.wgsl.tmpl +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn length(vec<4, fa>) -> fa +fn length_c2c544() { + const arg_0 = vec4(0.); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_c2c544(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_c2c544(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_c2c544(); +} diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl new file mode 100644 index 0000000000..3182250936 --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl @@ -0,0 +1,30 @@ +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_c2c544(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_c2c544(); + return; +} diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl new file mode 100644 index 0000000000..3182250936 --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl @@ -0,0 +1,30 @@ +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return (0.0f).xxxx; +} + +tint_symbol vertex_main() { + const float4 inner_result = vertex_main_inner(); + tint_symbol wrapper_result = (tint_symbol)0; + wrapper_result.value = inner_result; + return wrapper_result; +} + +void fragment_main() { + length_c2c544(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + length_c2c544(); + return; +} diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl new file mode 100644 index 0000000000..6c6a328eda --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl @@ -0,0 +1,49 @@ +#version 310 es + +void length_c2c544() { + float res = 0.0f; +} + +vec4 vertex_main() { + length_c2c544(); + return vec4(0.0f); +} + +void main() { + gl_PointSize = 1.0; + vec4 inner_result = vertex_main(); + gl_Position = inner_result; + gl_Position.y = -(gl_Position.y); + gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); + return; +} +#version 310 es +precision mediump float; + +void length_c2c544() { + float res = 0.0f; +} + +void fragment_main() { + length_c2c544(); +} + +void main() { + fragment_main(); + return; +} +#version 310 es + +void length_c2c544() { + float res = 0.0f; +} + +void compute_main() { + length_c2c544(); +} + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void main() { + compute_main(); + return; +} diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl new file mode 100644 index 0000000000..e4d987c887 --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl @@ -0,0 +1,33 @@ +#include + +using namespace metal; +void length_c2c544() { + float res = 0.0f; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +float4 vertex_main_inner() { + length_c2c544(); + return float4(0.0f); +} + +vertex tint_symbol vertex_main() { + float4 const inner_result = vertex_main_inner(); + tint_symbol wrapper_result = {}; + wrapper_result.value = inner_result; + return wrapper_result; +} + +fragment void fragment_main() { + length_c2c544(); + return; +} + +kernel void compute_main() { + length_c2c544(); + return; +} + diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm new file mode 100644 index 0000000000..c3a38b8b00 --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm @@ -0,0 +1,63 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 29 +; Schema: 0 + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %value "value" + OpName %vertex_point_size "vertex_point_size" + OpName %length_c2c544 "length_c2c544" + OpName %res "res" + OpName %vertex_main_inner "vertex_main_inner" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %value BuiltIn Position + OpDecorate %vertex_point_size BuiltIn PointSize + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %5 = OpConstantNull %v4float + %value = OpVariable %_ptr_Output_v4float Output %5 +%_ptr_Output_float = OpTypePointer Output %float + %8 = OpConstantNull %float +%vertex_point_size = OpVariable %_ptr_Output_float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_ptr_Function_float = OpTypePointer Function %float + %15 = OpTypeFunction %v4float + %float_1 = OpConstant %float 1 +%length_c2c544 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function_float Function %8 + OpStore %res %8 + OpReturn + OpFunctionEnd +%vertex_main_inner = OpFunction %v4float None %15 + %17 = OpLabel + %18 = OpFunctionCall %void %length_c2c544 + OpReturnValue %5 + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %20 = OpLabel + %21 = OpFunctionCall %v4float %vertex_main_inner + OpStore %value %21 + OpStore %vertex_point_size %float_1 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %24 = OpLabel + %25 = OpFunctionCall %void %length_c2c544 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %27 = OpLabel + %28 = OpFunctionCall %void %length_c2c544 + OpReturn + OpFunctionEnd diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl new file mode 100644 index 0000000000..b7f0ae885b --- /dev/null +++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl @@ -0,0 +1,20 @@ +fn length_c2c544() { + const arg_0 = vec4(0.0); + var res = length(arg_0); +} + +@vertex +fn vertex_main() -> @builtin(position) vec4 { + length_c2c544(); + return vec4(); +} + +@fragment +fn fragment_main() { + length_c2c544(); +} + +@compute @workgroup_size(1) +fn compute_main() { + length_c2c544(); +}