Browse Source

Add a ClipToTextureCoordinates function.

This helps bridge the differences in texture coordinates between
OpenGL/D3D.
Eric Mellino 8 năm trước cách đây
mục cha
commit
5d747b7b80

+ 1 - 1
src/ShaderGen.Build/ShaderGen.Build.csproj

@@ -9,7 +9,7 @@
     <PackageId>ShaderGen.Build</PackageId>
     <Description>Build-time plugin which generates shader code during a post-build event.</Description>
     <PackageTags>Shader GLSL HLSL SPIR-V Graphics OpenGL Vulkan Direct3D Game</PackageTags>
-    <PackageVersion>1.0.14</PackageVersion>
+    <PackageVersion>1.0.15</PackageVersion>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 0
src/ShaderGen.Primitives/ShaderBuiltins.cs

@@ -10,6 +10,7 @@ namespace ShaderGen
         public static Vector4 Sample(Texture2DResource texture, SamplerResource sampler, Vector2 texCoords) => throw new ShaderBuiltinException();
         public static Vector4 Sample(TextureCubeResource texture, SamplerResource sampler, Vector3 texCoords) => throw new ShaderBuiltinException();
         public static void Discard() => throw new ShaderBuiltinException();
+        public static Vector2 ClipToTextureCoordinates(Vector4 clipCoordinates) => throw new ShaderBuiltinException();
 
         // Abs
         public static float Abs(float value) => throw new ShaderBuiltinException();

+ 1 - 1
src/ShaderGen.Primitives/ShaderGen.Primitives.csproj

@@ -3,7 +3,7 @@
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
     <RootNamespace>ShaderGen</RootNamespace>
-    <AssemblyVersion>1.0.6</AssemblyVersion>
+    <AssemblyVersion>1.0.7</AssemblyVersion>
     <!-- Package stuff -->
     <PackageId>ShaderGen.Primitives</PackageId>
     <Description>C# attributes and primitives for generating shader code via ShaderGen.</Description>

+ 3 - 0
src/ShaderGen.Tests/TestAssets/ShaderBuiltinsTestShader.cs

@@ -59,6 +59,9 @@ namespace TestShaders
             r2 = Mod(v2, new Vector2(2, 4));
             r3 = Mod(v3, new Vector3(2, 4, 6));
             r4 = Mod(v4, new Vector4(2, 4, 6, 8));
+
+            // ClipToTextureCoordinates
+            r2 = ClipToTextureCoordinates(v4);
             return input;
         }
     }

+ 7 - 1
src/ShaderGen/Glsl330KnownFunctions.cs

@@ -23,7 +23,7 @@ namespace ShaderGen
                 { "Sample", Sample2D },
                 { "Discard", Discard },
                 { "Saturate", Saturate },
-
+                { nameof(ShaderBuiltins.ClipToTextureCoordinates), ClipToTextureCoordinates },
             };
             ret.Add("ShaderGen.ShaderBuiltins", new DictionaryTypeInvocationTranslator(builtinMappings));
 
@@ -88,5 +88,11 @@ namespace ShaderGen
                 throw new ShaderGenerationException("Unhandled number of arguments to ShaderBuiltins.Discard.");
             }
         }
+
+        private static string ClipToTextureCoordinates(string typeName, string methodName, InvocationParameterInfo[] parameters)
+        {
+            string target = parameters[0].Identifier;
+            return $"vec2({target}.x / 2 + 0.5, {target}.y / 2 + 0.5)";
+        }
     }
 }

+ 7 - 0
src/ShaderGen/Glsl450KnownFunctions.cs

@@ -23,6 +23,7 @@ namespace ShaderGen
                 { "Sample", Sample2D },
                 { "Discard", Discard },
                 { "Saturate", Saturate },
+                { nameof(ShaderBuiltins.ClipToTextureCoordinates), ClipToTextureCoordinates },
             };
             ret.Add("ShaderGen.ShaderBuiltins", new DictionaryTypeInvocationTranslator(builtinMappings));
 
@@ -98,5 +99,11 @@ namespace ShaderGen
                 throw new ShaderGenerationException("Unhandled number of arguments to ShaderBuiltins.Discard.");
             }
         }
+
+        private static string ClipToTextureCoordinates(string typeName, string methodName, InvocationParameterInfo[] parameters)
+        {
+            string target = parameters[0].Identifier;
+            return $"vec2({target}.x / 2 + 0.5, {target}.y / -2 + 0.5)";
+        }
     }
 }

+ 7 - 1
src/ShaderGen/HlslKnownFunctions.cs

@@ -23,6 +23,7 @@ namespace ShaderGen
                 { "Mod", SimpleNameTranslator("fmod") },
                 { "Sample", Sample2D },
                 { "Discard", Discard },
+                { nameof(ShaderBuiltins.ClipToTextureCoordinates), ClipToTextureCoordinates },
             };
             ret.Add("ShaderGen.ShaderBuiltins", new DictionaryTypeInvocationTranslator(builtinMappings));
 
@@ -40,7 +41,6 @@ namespace ShaderGen
             return ret;
         }
 
-
         public static string TranslateInvocation(string type, string method, InvocationParameterInfo[] parameters)
         {
             if (s_mappings.TryGetValue(type, out var dict))
@@ -71,6 +71,12 @@ namespace ShaderGen
         {
             return $"discard;";
         }
+
+        private static string ClipToTextureCoordinates(string typeName, string methodName, InvocationParameterInfo[] parameters)
+        {
+            string target = parameters[0].Identifier;
+            return $"float2({target}.x / 2 + 0.5, {target}.y / -2 + 0.5)";
+        }
     }
 
     public delegate string InvocationTranslator(string typeName, string methodName, InvocationParameterInfo[] parameters);

+ 1 - 1
src/ShaderGen/ShaderGen.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <AssemblyVersion>1.0.9</AssemblyVersion>
+    <AssemblyVersion>1.0.10</AssemblyVersion>
 
     <!-- Package stuff -->
     <PackageId>ShaderGen</PackageId>