]> O.S.I.I.S - jp/vke.net.git/commitdiff
debug SpirVTask, correct error position with several includes in source
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 8 Jan 2020 15:09:49 +0000 (16:09 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 8 Jan 2020 15:09:49 +0000 (16:09 +0100)
SpirVTasks/CompileGLSLTask.cs
SpirVTasks/SpirVTasks.csproj

index d978d624b8c91629bc6153a483d85f03d1fd20f4..80765bc1ba61fa16533f852fdc7d45bdabcc1f32 100644 (file)
@@ -14,7 +14,8 @@ namespace SpirVTasks {
        /// Record include position and path in produced glsl file before compilation
        /// </summary>
        internal class IncludePosition {
-               public int line;                //include position in final glsl file
+               public int globalPos;       //include position in final glsl file
+               public int localPos;    //store local pos for returning from include
                public string path;             //path to the included file
        }
 
@@ -94,7 +95,7 @@ namespace SpirVTasks {
                /// </summary>
                void concatenate_sources (string src, StreamWriter temp) {
                        using (StreamReader sr = new StreamReader (File.OpenRead (src))) {
-                               int srcLine = 0;
+                               int srcLine = 1;
                                while (!sr.EndOfStream) {
                                        string line = sr.ReadLine ();
                                        if (line.Trim ().StartsWith ("#include", StringComparison.Ordinal)) {
@@ -106,17 +107,20 @@ namespace SpirVTasks {
                                                }
                                                //store position when entering an included file
                                                includesPositions.Add(new IncludePosition {
-                                                       line = currentCompiledLine,
+                                                       globalPos = currentCompiledLine,
+                                                       localPos = 1,
                                                        path = incFile
                                                });
 
                                                concatenate_sources (incFile, temp);
 
                                                //store current position when include parsing is finished
-                                               includesPositions.Add(new IncludePosition {
-                                                       line = currentCompiledLine,
+                                               includesPositions.Add (new IncludePosition {
+                                                       globalPos = currentCompiledLine,
+                                                       localPos = srcLine + 1,
                                                        path = src
                                                });
+                                               currentCompiledLine--;
                                        } else
                                                temp.WriteLine (line);
                                        currentCompiledLine++;
@@ -161,7 +165,7 @@ namespace SpirVTasks {
                        success = true;
 
                        includesPositions.Clear();
-                       currentCompiledLine = 0;
+                       currentCompiledLine = 1;
 
                        if (!tryFindGlslcExecutable(out string glslcPath)) {
                                BuildErrorEventArgs err = new BuildErrorEventArgs ("execute", "VK001", BuildEngine.ProjectFileOfTaskNode, 0, 0, 0, 0, $"glslc command not found: {glslcPath}", "Set 'VULKAN_SDK' environment variable", "SpirVTasks");
@@ -232,7 +236,7 @@ namespace SpirVTasks {
                        glslc.BeginErrorReadLine ();
                        glslc.BeginOutputReadLine ();
 
-                       DestinationFile.SetMetadata ("LogicalName", $"FromCS.{SourceFile.ItemSpec.Replace (Path.DirectorySeparatorChar, '.')}");
+                       //DestinationFile.SetMetadata ("LogicalName", $"FromCS.{SourceFile.ItemSpec.Replace (Path.DirectorySeparatorChar, '.')}");
 
                        glslc.WaitForExit ();
 
@@ -254,12 +258,19 @@ namespace SpirVTasks {
                                string srcFile = SourceFile.ItemSpec;
                                int line = Math.Max (0, int.Parse (tmp[1]));
 
-                               IncludePosition ip = includesPositions.LastOrDefault(p => p.line < line);
+                               IncludePosition ip = includesPositions.LastOrDefault(p => p.globalPos <= line);
                                if (ip != null) {
-                                       line -= ip.line;
+                                       line = line - ip.globalPos + ip.localPos;
                                        srcFile = ip.path;
+                                       //Log.LogMessage (MessageImportance.High, $"ErrLine:{tmp[1]} {ip.globalPos} : {ip.localPos} : {ip.path}");
                                }
 
+                               //Log.LogMessage (MessageImportance.High, $"====================================");
+                               //foreach (IncludePosition incPos in includesPositions) {
+                               //      Log.LogMessage (MessageImportance.High, $"\t{incPos.globalPos} : {incPos.localPos}:{incPos.path}");
+                               //}
+                               //Log.LogMessage (MessageImportance.High, $"====================================");
+
                                BuildErrorEventArgs err = new BuildErrorEventArgs ("compile", tmp[2], srcFile, line, 0, 0, 0, $"{tmp[3]} {tmp[4]}", "no help", "SpirVTasks");
                                BuildEngine.LogErrorEvent (err);
                                success = false;
index 1727ee6ceec3bc648712f2c979544581c029428b..96571899a3c5ca14b4600174a411ac42711a670b 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
         <TargetFrameworks>netstandard2.0</TargetFrameworks>
-        <ReleaseVersion>0.1.15</ReleaseVersion>
+        <ReleaseVersion>0.1.32</ReleaseVersion>
         <SynchReleaseVersion>false</SynchReleaseVersion>
         <AssemblyVersion>$(ReleaseVersion)</AssemblyVersion>
         <Description>MSBuild addon to compile and embed spirV shaders</Description>