86 std::tuple<Inputs...> &inputs,
87 std::tuple<Outputs *...> &outputs,
88 std::index_sequence<InIndices...> ,
89 std::index_sequence<OutIndices...> )
91 constexpr size_t InputsNum =
sizeof...(Inputs);
92 constexpr size_t OutputsNum =
sizeof...(Outputs);
93 std::array<GMutablePointer, InputsNum> input_pointers;
94 std::array<GMutablePointer, OutputsNum> output_pointers;
95 std::array<std::optional<ValueUsage>, InputsNum> input_usages;
96 std::array<ValueUsage, OutputsNum> output_usages;
97 std::array<bool, OutputsNum> set_outputs;
100 constexpr size_t I = InIndices;
104 input_pointers[
I] = {type, &std::get<I>(inputs)};
109 constexpr size_t I = OutIndices;
113 output_pointers[
I] = {type, std::get<I>(outputs)};
117 set_outputs.fill(
false);
119 Context context(
fn.init_storage(allocator), user_data, local_user_data);
121 fn, input_pointers, output_pointers, input_usages, output_usages, set_outputs};
122 fn.execute(params, context);
123 fn.destruct_storage(context.storage);