aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs')
-rw-r--r--Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs57
1 files changed, 32 insertions, 25 deletions
diff --git a/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs b/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs
index a66d57a3..332e04d1 100644
--- a/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs
+++ b/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs
@@ -123,44 +123,51 @@ namespace Ryujinx.Horizon.Generators.Hipc
{
string[] args = new string[method.ParameterList.Parameters.Count];
- int index = 0;
-
- foreach (var parameter in method.ParameterList.Parameters)
+ if (args.Length == 0)
{
- string canonicalTypeName = GetCanonicalTypeNameWithGenericArguments(compilation, parameter.Type);
- CommandArgType argType = GetCommandArgType(compilation, parameter);
-
- string arg;
+ generator.AppendLine($"{{ {commandId}, new CommandHandler({method.Identifier.Text}, Array.Empty<CommandArg>()) }},");
+ }
+ else
+ {
+ int index = 0;
- if (argType == CommandArgType.Buffer)
+ foreach (var parameter in method.ParameterList.Parameters)
{
- string bufferFlags = GetFirstAttributeAgument(compilation, parameter, TypeBufferAttribute, 0);
- string bufferFixedSize = GetFirstAttributeAgument(compilation, parameter, TypeBufferAttribute, 1);
+ string canonicalTypeName = GetCanonicalTypeNameWithGenericArguments(compilation, parameter.Type);
+ CommandArgType argType = GetCommandArgType(compilation, parameter);
+
+ string arg;
- if (bufferFixedSize != null)
+ if (argType == CommandArgType.Buffer)
+ {
+ string bufferFlags = GetFirstAttributeAgument(compilation, parameter, TypeBufferAttribute, 0);
+ string bufferFixedSize = GetFirstAttributeAgument(compilation, parameter, TypeBufferAttribute, 1);
+
+ if (bufferFixedSize != null)
+ {
+ arg = $"new CommandArg({bufferFlags}, {bufferFixedSize})";
+ }
+ else
+ {
+ arg = $"new CommandArg({bufferFlags})";
+ }
+ }
+ else if (argType == CommandArgType.InArgument || argType == CommandArgType.OutArgument)
{
- arg = $"new CommandArg({bufferFlags}, {bufferFixedSize})";
+ string alignment = GetTypeAlignmentExpression(compilation, parameter.Type);
+
+ arg = $"new CommandArg(CommandArgType.{argType}, Unsafe.SizeOf<{canonicalTypeName}>(), {alignment})";
}
else
{
- arg = $"new CommandArg({bufferFlags})";
+ arg = $"new CommandArg(CommandArgType.{argType})";
}
- }
- else if (argType == CommandArgType.InArgument || argType == CommandArgType.OutArgument)
- {
- string alignment = GetTypeAlignmentExpression(compilation, parameter.Type);
- arg = $"new CommandArg(CommandArgType.{argType}, Unsafe.SizeOf<{canonicalTypeName}>(), {alignment})";
- }
- else
- {
- arg = $"new CommandArg(CommandArgType.{argType})";
+ args[index++] = arg;
}
- args[index++] = arg;
+ generator.AppendLine($"{{ {commandId}, new CommandHandler({method.Identifier.Text}, {string.Join(", ", args)}) }},");
}
-
- generator.AppendLine($"{{ {commandId}, new CommandHandler({method.Identifier.Text}, {string.Join(", ", args)}) }},");
}
}