aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs')
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs38
1 files changed, 38 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs b/Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs
new file mode 100644
index 00000000..0ddb4264
--- /dev/null
+++ b/Ryujinx.Graphics.Shader/CodeGen/Spirv/EnumConversion.cs
@@ -0,0 +1,38 @@
+using Ryujinx.Graphics.Shader.StructuredIr;
+using Ryujinx.Graphics.Shader.Translation;
+using System;
+using static Spv.Specification;
+
+namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
+{
+ static class EnumConversion
+ {
+ public static AggregateType Convert(this VariableType type)
+ {
+ return type switch
+ {
+ VariableType.None => AggregateType.Void,
+ VariableType.Bool => AggregateType.Bool,
+ VariableType.F32 => AggregateType.FP32,
+ VariableType.F64 => AggregateType.FP64,
+ VariableType.S32 => AggregateType.S32,
+ VariableType.U32 => AggregateType.U32,
+ _ => throw new ArgumentException($"Invalid variable type \"{type}\".")
+ };
+ }
+
+ public static ExecutionModel Convert(this ShaderStage stage)
+ {
+ return stage switch
+ {
+ ShaderStage.Compute => ExecutionModel.GLCompute,
+ ShaderStage.Vertex => ExecutionModel.Vertex,
+ ShaderStage.TessellationControl => ExecutionModel.TessellationControl,
+ ShaderStage.TessellationEvaluation => ExecutionModel.TessellationEvaluation,
+ ShaderStage.Geometry => ExecutionModel.Geometry,
+ ShaderStage.Fragment => ExecutionModel.Fragment,
+ _ => throw new ArgumentException($"Invalid shader stage \"{stage}\".")
+ };
+ }
+ }
+}