From d878036bfce00703aecc47674f013b6fa05aab74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Tue, 28 Dec 2021 23:37:35 +0100 Subject: [PATCH] Shader/AstOptimizer: Reduce template complexition --- src/Nazara/Shader/Ast/AstOptimizer.cpp | 158 ++++++++++--------------- 1 file changed, 63 insertions(+), 95 deletions(-) diff --git a/src/Nazara/Shader/Ast/AstOptimizer.cpp b/src/Nazara/Shader/Ast/AstOptimizer.cpp index a08d1e9a1..4b8fb6866 100644 --- a/src/Nazara/Shader/Ast/AstOptimizer.cpp +++ b/src/Nazara/Shader/Ast/AstOptimizer.cpp @@ -308,19 +308,13 @@ namespace Nz::ShaderAst template struct CastConstant; - template - struct CastConstantPropagation - { - using Op = CastConstant; - }; - /*************************************************************************************************/ template - struct SwizzleBase; + struct SwizzlePropagationBase; template - struct SwizzleBase + struct SwizzlePropagationBase { std::unique_ptr operator()(const std::array& /*components*/, T value) { @@ -338,7 +332,7 @@ namespace Nz::ShaderAst }; template - struct SwizzleBase + struct SwizzlePropagationBase { std::unique_ptr operator()(const std::array& components, const Vector2& value) { @@ -356,7 +350,7 @@ namespace Nz::ShaderAst }; template - struct SwizzleBase + struct SwizzlePropagationBase { std::unique_ptr operator()(const std::array& components, const Vector3& value) { @@ -374,7 +368,7 @@ namespace Nz::ShaderAst }; template - struct SwizzleBase + struct SwizzlePropagationBase { std::unique_ptr operator()(const std::array& components, const Vector4& value) { @@ -392,13 +386,7 @@ namespace Nz::ShaderAst }; template - struct Swizzle; - - template - struct SwizzlePropagation - { - using Op = Swizzle; - }; + struct SwizzlePropagation; /*************************************************************************************************/ @@ -656,65 +644,65 @@ namespace Nz::ShaderAst //EnableOptimisation(CastConstant, Vector4ui32, UInt32, UInt32, UInt32, UInt32); // Swizzle - EnableOptimisation(Swizzle, double, 1, 1); - EnableOptimisation(Swizzle, double, 1, 2); - EnableOptimisation(Swizzle, double, 1, 3); - EnableOptimisation(Swizzle, double, 1, 4); + EnableOptimisation(SwizzlePropagation, double, 1, 1); + EnableOptimisation(SwizzlePropagation, double, 1, 2); + EnableOptimisation(SwizzlePropagation, double, 1, 3); + EnableOptimisation(SwizzlePropagation, double, 1, 4); - EnableOptimisation(Swizzle, double, 2, 1); - EnableOptimisation(Swizzle, double, 2, 2); - EnableOptimisation(Swizzle, double, 2, 3); - EnableOptimisation(Swizzle, double, 2, 4); + EnableOptimisation(SwizzlePropagation, double, 2, 1); + EnableOptimisation(SwizzlePropagation, double, 2, 2); + EnableOptimisation(SwizzlePropagation, double, 2, 3); + EnableOptimisation(SwizzlePropagation, double, 2, 4); - EnableOptimisation(Swizzle, double, 3, 1); - EnableOptimisation(Swizzle, double, 3, 2); - EnableOptimisation(Swizzle, double, 3, 3); - EnableOptimisation(Swizzle, double, 3, 4); + EnableOptimisation(SwizzlePropagation, double, 3, 1); + EnableOptimisation(SwizzlePropagation, double, 3, 2); + EnableOptimisation(SwizzlePropagation, double, 3, 3); + EnableOptimisation(SwizzlePropagation, double, 3, 4); - EnableOptimisation(Swizzle, double, 4, 1); - EnableOptimisation(Swizzle, double, 4, 2); - EnableOptimisation(Swizzle, double, 4, 3); - EnableOptimisation(Swizzle, double, 4, 4); + EnableOptimisation(SwizzlePropagation, double, 4, 1); + EnableOptimisation(SwizzlePropagation, double, 4, 2); + EnableOptimisation(SwizzlePropagation, double, 4, 3); + EnableOptimisation(SwizzlePropagation, double, 4, 4); - EnableOptimisation(Swizzle, float, 1, 1); - EnableOptimisation(Swizzle, float, 1, 2); - EnableOptimisation(Swizzle, float, 1, 3); - EnableOptimisation(Swizzle, float, 1, 4); + EnableOptimisation(SwizzlePropagation, float, 1, 1); + EnableOptimisation(SwizzlePropagation, float, 1, 2); + EnableOptimisation(SwizzlePropagation, float, 1, 3); + EnableOptimisation(SwizzlePropagation, float, 1, 4); - EnableOptimisation(Swizzle, float, 2, 1); - EnableOptimisation(Swizzle, float, 2, 2); - EnableOptimisation(Swizzle, float, 2, 3); - EnableOptimisation(Swizzle, float, 2, 4); + EnableOptimisation(SwizzlePropagation, float, 2, 1); + EnableOptimisation(SwizzlePropagation, float, 2, 2); + EnableOptimisation(SwizzlePropagation, float, 2, 3); + EnableOptimisation(SwizzlePropagation, float, 2, 4); - EnableOptimisation(Swizzle, float, 3, 1); - EnableOptimisation(Swizzle, float, 3, 2); - EnableOptimisation(Swizzle, float, 3, 3); - EnableOptimisation(Swizzle, float, 3, 4); + EnableOptimisation(SwizzlePropagation, float, 3, 1); + EnableOptimisation(SwizzlePropagation, float, 3, 2); + EnableOptimisation(SwizzlePropagation, float, 3, 3); + EnableOptimisation(SwizzlePropagation, float, 3, 4); - EnableOptimisation(Swizzle, float, 4, 1); - EnableOptimisation(Swizzle, float, 4, 2); - EnableOptimisation(Swizzle, float, 4, 3); - EnableOptimisation(Swizzle, float, 4, 4); + EnableOptimisation(SwizzlePropagation, float, 4, 1); + EnableOptimisation(SwizzlePropagation, float, 4, 2); + EnableOptimisation(SwizzlePropagation, float, 4, 3); + EnableOptimisation(SwizzlePropagation, float, 4, 4); - EnableOptimisation(Swizzle, Int32, 1, 1); - EnableOptimisation(Swizzle, Int32, 1, 2); - EnableOptimisation(Swizzle, Int32, 1, 3); - EnableOptimisation(Swizzle, Int32, 1, 4); + EnableOptimisation(SwizzlePropagation, Int32, 1, 1); + EnableOptimisation(SwizzlePropagation, Int32, 1, 2); + EnableOptimisation(SwizzlePropagation, Int32, 1, 3); + EnableOptimisation(SwizzlePropagation, Int32, 1, 4); - EnableOptimisation(Swizzle, Int32, 2, 1); - EnableOptimisation(Swizzle, Int32, 2, 2); - EnableOptimisation(Swizzle, Int32, 2, 3); - EnableOptimisation(Swizzle, Int32, 2, 4); + EnableOptimisation(SwizzlePropagation, Int32, 2, 1); + EnableOptimisation(SwizzlePropagation, Int32, 2, 2); + EnableOptimisation(SwizzlePropagation, Int32, 2, 3); + EnableOptimisation(SwizzlePropagation, Int32, 2, 4); - EnableOptimisation(Swizzle, Int32, 3, 1); - EnableOptimisation(Swizzle, Int32, 3, 2); - EnableOptimisation(Swizzle, Int32, 3, 3); - EnableOptimisation(Swizzle, Int32, 3, 4); + EnableOptimisation(SwizzlePropagation, Int32, 3, 1); + EnableOptimisation(SwizzlePropagation, Int32, 3, 2); + EnableOptimisation(SwizzlePropagation, Int32, 3, 3); + EnableOptimisation(SwizzlePropagation, Int32, 3, 4); - EnableOptimisation(Swizzle, Int32, 4, 1); - EnableOptimisation(Swizzle, Int32, 4, 2); - EnableOptimisation(Swizzle, Int32, 4, 3); - EnableOptimisation(Swizzle, Int32, 4, 4); + EnableOptimisation(SwizzlePropagation, Int32, 4, 1); + EnableOptimisation(SwizzlePropagation, Int32, 4, 2); + EnableOptimisation(SwizzlePropagation, Int32, 4, 3); + EnableOptimisation(SwizzlePropagation, Int32, 4, 4); // Unary @@ -1165,14 +1153,10 @@ namespace Nz::ShaderAst std::visit([&](auto&& arg) { using T = std::decay_t; - using CCType = CastConstantPropagation; + using CCType = CastConstant; if constexpr (is_complete_v) - { - using Op = typename CCType::Op; - if constexpr (is_complete_v) - optimized = Op{}(arg); - } + optimized = CCType{}(arg); }, operand.value); return optimized; @@ -1192,11 +1176,7 @@ namespace Nz::ShaderAst using SPType = SwizzlePropagation; if constexpr (is_complete_v) - { - using Op = typename SPType::Op; - if constexpr (is_complete_v) - optimized = Op{}(components, arg); - } + optimized = SPType{}(components, arg); }, operand.value); return optimized; @@ -1230,14 +1210,10 @@ namespace Nz::ShaderAst { std::unique_ptr optimized; - using CCType = CastConstantPropagation, TargetType, TargetType>; + using CCType = CastConstant, TargetType, TargetType>; if constexpr (is_complete_v) - { - using Op = typename CCType::Op; - if constexpr (is_complete_v) - optimized = Op{}(v1, v2); - } + optimized = CCType{}(v1, v2); return optimized; } @@ -1247,14 +1223,10 @@ namespace Nz::ShaderAst { std::unique_ptr optimized; - using CCType = CastConstantPropagation, TargetType, TargetType, TargetType>; + using CCType = CastConstant, TargetType, TargetType, TargetType>; if constexpr (is_complete_v) - { - using Op = typename CCType::Op; - if constexpr (is_complete_v) - optimized = Op{}(v1, v2, v3); - } + optimized = CCType{}(v1, v2, v3); return optimized; } @@ -1264,14 +1236,10 @@ namespace Nz::ShaderAst { std::unique_ptr optimized; - using CCType = CastConstantPropagation, TargetType, TargetType, TargetType, TargetType>; + using CCType = CastConstant, TargetType, TargetType, TargetType, TargetType>; if constexpr (is_complete_v) - { - using Op = typename CCType::Op; - if constexpr (is_complete_v) - optimized = Op{}(v1, v2, v3, v4); - } + optimized = CCType{}(v1, v2, v3, v4); return optimized; }