浏览代码

Refactor how the Metal backend transforms to packed vector types.

Eric Mellino 7 年之前
父节点
当前提交
a5edbdaccc
共有 2 个文件被更改,包括 8 次插入12 次删除
  1. 7 10
      src/ShaderGen/Metal/MetalBackend.cs
  2. 1 2
      src/ShaderGen/Metal/MetalKnownTypes.cs

+ 7 - 10
src/ShaderGen/Metal/MetalBackend.cs

@@ -13,21 +13,13 @@ namespace ShaderGen.Metal
         {
         }
 
-        private string CSharpToShaderTypeCore(string fullType, bool packed)
+        protected override string CSharpToShaderTypeCore(string fullType)
         {
-            string mapped = packed
-                ? MetalKnownTypes.GetPackedName(fullType)
-                : MetalKnownTypes.GetMappedName(fullType);
-            return mapped
+            return MetalKnownTypes.GetMappedName(fullType)
                 .Replace(".", "_")
                 .Replace("+", "_");
         }
 
-        protected override string CSharpToShaderTypeCore(string fullType)
-        {
-            return CSharpToShaderTypeCore(fullType, false);
-        }
-
         protected void WriteStructure(StringBuilder sb, StructureDefinition sd)
         {
             sb.AppendLine($"struct {CSharpToShaderType(sd.Name)}");
@@ -38,6 +30,11 @@ namespace ShaderGen.Metal
             foreach (FieldDefinition field in sd.Fields)
             {
                 string typeName = CSharpToShaderType(field.Type);
+                if (field.SemanticType == SemanticType.None)
+                {
+                    typeName = MetalKnownTypes.GetPackedName(typeName);
+                }
+
                 fb.Append(typeName);
                 fb.Append(' ');
                 fb.Append(CorrectIdentifier(field.Name.Trim()));

+ 1 - 2
src/ShaderGen/Metal/MetalKnownTypes.cs

@@ -68,9 +68,8 @@ namespace ShaderGen.Metal
             }
         }
 
-        public static string GetPackedName(string name)
+        public static string GetPackedName(string mappedName)
         {
-            string mappedName = GetMappedName(name);
             if (s_mappedToPackedTypes.TryGetValue(mappedName, out string packed))
             {
                 return packed;