diff --git a/src/common/cartesian_invoke.h b/src/common/cartesian_invoke.h index 6bbc4cd4a..7a4162592 100644 --- a/src/common/cartesian_invoke.h +++ b/src/common/cartesian_invoke.h @@ -10,8 +10,8 @@ namespace Detail { template void CartesianInvokeImpl(Func func, OutputIt out_it, - std::tuple& arglists_its, - const std::tuple& arglists_tuple) { + std::tuple& arglists_its, + const std::tuple& arglists_tuple) { if constexpr (Level == N) { auto get_tuple = [&](std::index_sequence) { return std::forward_as_tuple(*std::get(arglists_its)...); @@ -37,7 +37,7 @@ void CartesianInvoke(Func func, OutputIt out_it, const ArgLists&... arg_lists) { std::tuple arglists_it; Detail::CartesianInvokeImpl(func, out_it, arglists_it, - arglists_tuple); + arglists_tuple); } } // namespace Common diff --git a/src/common/func_traits.h b/src/common/func_traits.h index c3035d7cc..b85681467 100644 --- a/src/common/func_traits.h +++ b/src/common/func_traits.h @@ -3,8 +3,8 @@ #pragma once -#include #include +#include namespace Common { diff --git a/src/shader_recompiler/ir/compute_value/do_composite.cpp b/src/shader_recompiler/ir/compute_value/do_composite.cpp index 41cbd04f9..b3120b485 100644 --- a/src/shader_recompiler/ir/compute_value/do_composite.cpp +++ b/src/shader_recompiler/ir/compute_value/do_composite.cpp @@ -6,224 +6,324 @@ namespace Shader::IR::ComputeValue { -static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { - const auto op = [](const ImmValue& a, const ImmValue& b) { - return ImmValue(a, b); - }; +static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { + const auto op = [](const ImmValue& a, const ImmValue& b) { return ImmValue(a, b); }; Common::CartesianInvoke(op, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1); } -static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2) { +static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2) { const auto op = [](const ImmValue& a, const ImmValue& b, const ImmValue& c) { return ImmValue(a, b, c); }; - Common::CartesianInvoke(op, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1, arg2); + Common::CartesianInvoke(op, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1, + arg2); } -static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3) { +static void CommonCompositeConstruct(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3) { const auto op = [](const ImmValue& a, const ImmValue& b, const ImmValue& c, const ImmValue& d) { return ImmValue(a, b, c, d); }; - Common::CartesianInvoke(op, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1, arg2, arg3); + Common::CartesianInvoke(op, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1, + arg2, arg3); } -void DoCompositeConstructU32x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { +void DoCompositeConstructU32x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { CommonCompositeConstruct(inst_values, arg0, arg1); } -void DoCompositeConstructU32x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2) { +void DoCompositeConstructU32x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2); } -void DoCompositeConstructU32x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3) { +void DoCompositeConstructU32x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2, arg3); } -void DoCompositeConstructU32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { - Common::CartesianInvoke(ImmValue::CompositeFrom2x2, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1); +void DoCompositeConstructU32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { + Common::CartesianInvoke(ImmValue::CompositeFrom2x2, + std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1); } -void DoCompositeExtractU32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractU32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractU32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractU32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractU32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractU32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeInsertU32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertU32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertU32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertU32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertU32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertU32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeShuffleU32x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1) { +void DoCompositeShuffleU32x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleU32x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2) { +void DoCompositeShuffleU32x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleU32x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3) { +void DoCompositeShuffleU32x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeConstructF16x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { +void DoCompositeConstructF16x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { CommonCompositeConstruct(inst_values, arg0, arg1); } -void DoCompositeConstructF16x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2) { +void DoCompositeConstructF16x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2); } -void DoCompositeConstructF16x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3) { +void DoCompositeConstructF16x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2, arg3); } -void DoCompositeConstructF32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { - Common::CartesianInvoke(ImmValue::CompositeFrom2x2, std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1); +void DoCompositeConstructF32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { + Common::CartesianInvoke(ImmValue::CompositeFrom2x2, + std::insert_iterator(inst_values, inst_values.begin()), arg0, arg1); } -void DoCompositeExtractF16x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF16x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF16x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF16x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF16x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF16x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeInsertF16x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF16x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF16x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF16x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF16x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF16x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeShuffleF16x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1) { +void DoCompositeShuffleF16x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF16x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2) { +void DoCompositeShuffleF16x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF16x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3) { +void DoCompositeShuffleF16x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeConstructF32x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { +void DoCompositeConstructF32x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { CommonCompositeConstruct(inst_values, arg0, arg1); } -void DoCompositeConstructF32x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2) { +void DoCompositeConstructF32x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2); } -void DoCompositeConstructF32x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3) { +void DoCompositeConstructF32x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2, arg3); } -void DoCompositeExtractF32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeInsertF32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeShuffleF32x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1) { +void DoCompositeShuffleF32x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF32x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2) { +void DoCompositeShuffleF32x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF32x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3) { +void DoCompositeShuffleF32x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeConstructF64x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1) { +void DoCompositeConstructF64x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1) { CommonCompositeConstruct(inst_values, arg0, arg1); } -void DoCompositeConstructF64x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2) { +void DoCompositeConstructF64x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2); } -void DoCompositeConstructF64x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3) { +void DoCompositeConstructF64x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3) { CommonCompositeConstruct(inst_values, arg0, arg1, arg2, arg3); } -void DoCompositeExtractF64x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF64x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF64x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF64x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeExtractF64x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Extract, std::insert_iterator(inst_values, inst_values.begin()), vec, idx); +void DoCompositeExtractF64x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Extract, + std::insert_iterator(inst_values, inst_values.begin()), vec, idx); } -void DoCompositeInsertF64x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF64x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF64x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF64x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeInsertF64x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx) { - Common::CartesianInvoke(ImmValue::Insert, std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); +void DoCompositeInsertF64x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx) { + Common::CartesianInvoke(ImmValue::Insert, + std::insert_iterator(inst_values, inst_values.begin()), vec, val, idx); } -void DoCompositeShuffleF64x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1) { +void DoCompositeShuffleF64x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF64x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2) { +void DoCompositeShuffleF64x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2) { UNREACHABLE_MSG("Unimplemented"); } -void DoCompositeShuffleF64x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3) { +void DoCompositeShuffleF64x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3) { UNREACHABLE_MSG("Unimplemented"); } diff --git a/src/shader_recompiler/ir/compute_value/do_composite.h b/src/shader_recompiler/ir/compute_value/do_composite.h index a55fd0fd8..b15f02141 100644 --- a/src/shader_recompiler/ir/compute_value/do_composite.h +++ b/src/shader_recompiler/ir/compute_value/do_composite.h @@ -7,58 +7,128 @@ namespace Shader::IR::ComputeValue { -void DoCompositeConstructU32x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeConstructU32x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2); -void DoCompositeConstructU32x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3); -void DoCompositeConstructU32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeExtractU32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractU32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractU32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeInsertU32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertU32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertU32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeShuffleU32x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1); -void DoCompositeShuffleU32x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2); -void DoCompositeShuffleU32x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3); +void DoCompositeConstructU32x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeConstructU32x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2); +void DoCompositeConstructU32x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3); +void DoCompositeConstructU32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeExtractU32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractU32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractU32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeInsertU32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertU32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertU32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeShuffleU32x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1); +void DoCompositeShuffleU32x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2); +void DoCompositeShuffleU32x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3); -void DoCompositeConstructF16x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeConstructF16x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2); -void DoCompositeConstructF16x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3); -void DoCompositeExtractF16x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF16x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF16x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeInsertF16x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF16x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF16x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeShuffleF16x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1); -void DoCompositeShuffleF16x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2); -void DoCompositeShuffleF16x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3); +void DoCompositeConstructF16x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeConstructF16x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2); +void DoCompositeConstructF16x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3); +void DoCompositeExtractF16x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF16x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF16x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeInsertF16x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF16x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF16x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeShuffleF16x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1); +void DoCompositeShuffleF16x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2); +void DoCompositeShuffleF16x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3); -void DoCompositeConstructF32x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeConstructF32x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2); -void DoCompositeConstructF32x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3); -void DoCompositeConstructF32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeExtractF32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeInsertF32x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF32x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF32x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeShuffleF32x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1); -void DoCompositeShuffleF32x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2); -void DoCompositeShuffleF32x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3); +void DoCompositeConstructF32x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeConstructF32x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2); +void DoCompositeConstructF32x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3); +void DoCompositeConstructF32x2x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeExtractF32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeInsertF32x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF32x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF32x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeShuffleF32x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1); +void DoCompositeShuffleF32x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2); +void DoCompositeShuffleF32x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3); -void DoCompositeConstructF64x2(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1); -void DoCompositeConstructF64x3(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2); -void DoCompositeConstructF64x4(ImmValueList& inst_values, const ImmValueList& arg0, const ImmValueList& arg1, const ImmValueList& arg2, const ImmValueList& arg3); -void DoCompositeExtractF64x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF64x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeExtractF64x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& idx); -void DoCompositeInsertF64x2(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF64x3(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeInsertF64x4(ImmValueList& inst_values, const ImmValueList& vec, const ImmValueList& val, const ImmValueList& idx); -void DoCompositeShuffleF64x2(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1); -void DoCompositeShuffleF64x3(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2); -void DoCompositeShuffleF64x4(ImmValueList& inst_values, const ImmValueList& vec0, const ImmValueList& vec1, const ImmValueList& idx0, const ImmValueList& idx1, const ImmValueList& idx2, const ImmValueList& idx3); +void DoCompositeConstructF64x2(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1); +void DoCompositeConstructF64x3(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2); +void DoCompositeConstructF64x4(ImmValueList& inst_values, const ImmValueList& arg0, + const ImmValueList& arg1, const ImmValueList& arg2, + const ImmValueList& arg3); +void DoCompositeExtractF64x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF64x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeExtractF64x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& idx); +void DoCompositeInsertF64x2(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF64x3(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeInsertF64x4(ImmValueList& inst_values, const ImmValueList& vec, + const ImmValueList& val, const ImmValueList& idx); +void DoCompositeShuffleF64x2(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1); +void DoCompositeShuffleF64x3(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2); +void DoCompositeShuffleF64x4(ImmValueList& inst_values, const ImmValueList& vec0, + const ImmValueList& vec1, const ImmValueList& idx0, + const ImmValueList& idx1, const ImmValueList& idx2, + const ImmValueList& idx3); } // namespace Shader::IR::ComputeValue diff --git a/src/shader_recompiler/ir/compute_value/do_nop_functions.h b/src/shader_recompiler/ir/compute_value/do_nop_functions.h index 69acced68..716478e00 100644 --- a/src/shader_recompiler/ir/compute_value/do_nop_functions.h +++ b/src/shader_recompiler/ir/compute_value/do_nop_functions.h @@ -3,7 +3,8 @@ namespace Shader::IR::ComputeValue { -#define NOP_FUNCTION(name) inline void Do##name(ImmValueList& inst_values) {} +#define NOP_FUNCTION(name) \ + inline void Do##name(ImmValueList& inst_values) {} NOP_FUNCTION(Phi) NOP_FUNCTION(Identity)