]> O.S.I.I.S - jp/vke.net.git/commitdiff
debug
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 3 Dec 2020 15:00:12 +0000 (16:00 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 3 Dec 2020 15:00:12 +0000 (16:00 +0100)
15 files changed:
Directory.Build.props
SpirVTasks/SpirVTasks.csproj
addons/gltfLoader/PbrModelTexArray.cs
addons/gltfLoader/glTFLoader.cs
addons/gltfLoader/gltfLoader.csproj
samples/Directory.Build.props
samples/DistanceFieldFontTest/Program.cs
samples/Textured/main.cs
samples/TexturedCube/main.cs
samples/common/Utils.cs [new file with mode: 0644]
samples/deferred/DeferredPbrRenderer.cs
samples/deferred/main.cs
samples/pbr/main.cs
vke/src/Utils.cs
vke/src/VkWindow.cs

index b09b8f84c6da0f521d2e9a4c737ae5f001de2fb2..2f2d567671afdceed292304d42b39891c73c912b 100644 (file)
@@ -13,7 +13,7 @@
        </PropertyGroup>
        
        <PropertyGroup Condition=" '$(UseMemoryPools)' == 'true'">
-               <DefineConstants>$(DefineConstants);_MEMORY_POOLS</DefineConstants>
+               <DefineConstants>$(DefineConstants);MEMORY_POOLS</DefineConstants>
        </PropertyGroup>
        <PropertyGroup Condition=" '$(UseStbSharp)' == 'true'">
                <DefineConstants>$(DefineConstants);STB_SHARP</DefineConstants>
index bbdf73740f38528204f804d2801fb5c29d09e39b..042c055e849840af9b5bffc7fbd82b6844af6d98 100644 (file)
@@ -15,6 +15,7 @@
                <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
                <PackageProjectUrl>https://github.com/jpbruyere/vk.net/blob/master/SpirVTasks/README.md</PackageProjectUrl>
                <PackageLicenseExpression>MIT</PackageLicenseExpression>
+               <PackageIcon>icon.png</PackageIcon>
                <License>MIT</License>
                <Authors>Jean-Philippe Bruyère</Authors>
                <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
@@ -40,5 +41,7 @@
                        <IncludeInPackage>true</IncludeInPackage>
                        <PackagePath>build</PackagePath>
                </Content>
+               
+               <None Include="$(SolutionDir)vke\icon.png" Pack="true" Visible="false" PackagePath="" />
        </ItemGroup>
 </Project>
\ No newline at end of file
index abde06a0633895640382f32e6f43fdac90f1b7ed..a91e0990899d1208f77dc1eef56e2e91441106fd 100644 (file)
@@ -68,13 +68,21 @@ namespace vke.glTF {
                                                        VkSampleCountFlags.SampleCount1, VkImageTiling.Optimal, Image.ComputeMipLevels (TEXTURE_DIM), ctx.ImageCount);
 
                                                ctx.BuildTexArray (ref texArray, 0);
-
-                                               texArray.CreateView (VkImageViewType.ImageView2DArray, VkImageAspectFlags.Color, texArray.CreateInfo.arrayLayers);
-                                               texArray.CreateSampler ();
-                                               texArray.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
-                                               texArray.SetName ("model texArray");
+                                       } else {
+                                               texArray = new Image (dev, Image.DefaultTextureFormat, VkImageUsageFlags.Sampled | VkImageUsageFlags.TransferDst | VkImageUsageFlags.TransferSrc,
+                                                       VkMemoryPropertyFlags.DeviceLocal, TEXTURE_DIM, TEXTURE_DIM, VkImageType.Image2D,
+                                                       VkSampleCountFlags.SampleCount1, VkImageTiling.Optimal, Image.ComputeMipLevels (TEXTURE_DIM), 1);
+                                               PrimaryCommandBuffer cmd = cmdPool.AllocateAndStart (VkCommandBufferUsageFlags.OneTimeSubmit);
+                                               texArray.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ShaderReadOnlyOptimal);                                                
+                                               transferQ.EndSubmitAndWait (cmd, true);                                                                                         
                                        }
 
+                                       texArray.CreateView (VkImageViewType.ImageView2DArray, VkImageAspectFlags.Color, texArray.CreateInfo.arrayLayers);
+                                       texArray.CreateSampler ();
+                                       texArray.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
+                                       texArray.SetName ("model texArray");
+                                       
+
                                        loadMaterials (ctx);
                                        materialUBO = new HostBuffer<Material> (dev, VkBufferUsageFlags.UniformBuffer, materials);
                                }
index cce4019ec211b68f119b06cc8f03906ee2f4b2a3..5942deaab80b8c728b1139aedd25d95863b73048 100644 (file)
@@ -420,11 +420,8 @@ namespace vke.glTF {
                        PrimaryCommandBuffer cmd = cmdPool.AllocateAndStart (VkCommandBufferUsageFlags.OneTimeSubmit);
                        texArray.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal, 
                                                VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer);
-                       cmd.End ();
-                       transferQ.Submit (cmd);
-                       transferQ.WaitIdle ();
-                       cmd.Free ();
-
+                       transferQ.EndSubmitAndWait (cmd, true);
+                       
                        VkImageBlit imageBlit = new VkImageBlit {
                                srcSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, 1, 0),
                                dstOffsets_1 = new VkOffset3D (texDim, texDim, 1)
@@ -458,11 +455,8 @@ namespace vke.glTF {
 
                                Vk.vkCmdBlitImage (cmd.Handle, vkimg.Handle, VkImageLayout.TransferSrcOptimal,
                                        texArray.Handle, VkImageLayout.TransferDstOptimal, 1, ref imageBlit, VkFilter.Linear);
-
-                               cmd.End ();
-                               transferQ.Submit (cmd);
-                               transferQ.WaitIdle ();
-                               cmd.Free ();
+                               
+                               transferQ.EndSubmitAndWait (cmd, true);                                                         
 
                                vkimg.Dispose ();
                        }
index 9c83a86ef4650cbff3de447af4bbc6801684c397..da9a963faf43034e76112eae5e2f6e89be2c7c54 100644 (file)
@@ -5,8 +5,8 @@
     <PackageId>vke.gltfLoader</PackageId>
     <AssemblyVersion>$(VkeReleaseVersion)</AssemblyVersion>
     <Description>vke.net glTF addons</Description>
-    <PackageTags>vulkan C# gltf</PackageTags>    
-    <PackageVersion>$(AssemblyVersion)</PackageVersion>
+    <PackageTags>vulkan C# gltf</PackageTags>
+       <PackageVersion>$(VkePackageVersion)</PackageVersion>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
     <PackageProjectUrl>https://github.com/jpbruyere/vke.net/blob/master/README.md</PackageProjectUrl>
index 03a8c6b49e0442ddb1b0496f3ed85f72b8b31e79..131cba2c90df87642c9d50ac706e209bd4ff344f 100644 (file)
@@ -31,7 +31,8 @@
                <PackageReference Include="SpirVTasks" Version="$(SpirVTasksPackageVersion)" />
        </ItemGroup>    
 
-       <ItemGroup>    
+       <ItemGroup>
+               <Compile Include="$(MSBuildThisFileDirectory)common\Utils.cs"/>
                <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp;shaders\**\*.geom">
                        <LogicalName>shaders.%(Filename)%(Extension).spv</LogicalName>
                </GLSLShader>           
index feea78fb79a7975bb37c7d77ff8a604457b55859..e54f56925e79f698b791e9a6a9aee8c541d5cd03 100644 (file)
@@ -68,7 +68,7 @@ namespace DistanceFieldFontTest {
 
                        cmds = cmdPool.AllocateCommandBuffer(swapChain.ImageCount);
 
-                       font = new BMFont (Utils.DataDirectory + "font.fnt");
+                       font = new BMFont (vke.samples.Utils.GetDataFile ("font.fnt"));
 
                        vbo = new GPUBuffer<float> (dev, VkBufferUsageFlags.VertexBuffer | VkBufferUsageFlags.TransferDst, 1024);
                        ibo = new GPUBuffer<ushort> (dev, VkBufferUsageFlags.IndexBuffer | VkBufferUsageFlags.TransferDst, 2048);
index a1237599cfe3f107abc98a79d304d749b7100f08..17cb1ca1b4a7b8253f65f936c647a97b848e4df2 100644 (file)
@@ -59,11 +59,11 @@ namespace Textured {
                ushort[] indices = { 0, 1, 2, 2, 0, 3 };
                int currentImgIndex = 0;
                string[] imgPathes = {
-                       Utils.DataDirectory + "models/Bricks16_col.jpg",
-                       Utils.DataDirectory + "textures/texturearray_rocks_bc3_unorm.ktx",
-                       Utils.DataDirectory + "textures/texture.jpg",
-                       Utils.DataDirectory + "textures/tex256.jpg",
-                       Utils.DataDirectory + "font.ktx",
+                       vke.samples.Utils.GetDataFile ("models/Bricks16_col.jpg"),
+                       vke.samples.Utils.GetDataFile ("textures/texturearray_rocks_bc3_unorm.ktx"),
+                       vke.samples.Utils.GetDataFile ("textures/texture.jpg"),
+                       vke.samples.Utils.GetDataFile ("textures/tex256.jpg"),
+                       vke.samples.Utils.GetDataFile ("font.ktx"),
                };
 
                protected override void initVulkan () {
@@ -98,6 +98,8 @@ namespace Textured {
 
                        pipeline = new GraphicPipeline (cfg);
 
+                       cfg.DisposeShaders ();
+
 
                        uboMats = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, matrices);
                        uboMats.Map ();//permanent map
index b962e7ed08d4707fc2a102eef2ed999b457bf849..df790431aead39ba73503c75984d28264a4fb1fc 100644 (file)
@@ -95,13 +95,6 @@ namespace TextureCube {
                         1.0f, 1.0f, 1.0f,    1.0f, 0.0f,
                };
                int currentImgIndex = 4;
-               string[] imgPathes = {
-                       Utils.DataDirectory + "textures/uffizi_cube.ktx",
-                       Utils.DataDirectory + "textures/papermill.ktx",
-                       Utils.DataDirectory + "textures/cubemap_yokohama_bc3_unorm.ktx",
-                       Utils.DataDirectory + "textures/gcanyon_cube.ktx",
-                       Utils.DataDirectory + "textures/pisa_cube.ktx",
-               };
 
                VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1;
 
@@ -143,7 +136,7 @@ namespace TextureCube {
                        DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descriptorSet, dsLayout.Bindings[0]);
                        uboUpdate.Write (dev, uboMats.Descriptor);
 
-                       loadTexture (imgPathes[currentImgIndex]);
+                       loadTexture (vke.samples.Utils.CubeMaps [currentImgIndex]);
                        if (nextTexture != null)
                                updateTextureSet ();
                }
@@ -243,9 +236,9 @@ namespace TextureCube {
                        switch (key) {
                                case Key.Space:
                                        currentImgIndex++;
-                                       if (currentImgIndex == imgPathes.Length)
+                                       if (currentImgIndex == vke.samples.Utils.CubeMaps.Length)
                                                currentImgIndex = 0;
-                                       loadTexture (imgPathes[currentImgIndex]);
+                                       loadTexture (vke.samples.Utils.CubeMaps[currentImgIndex]);
                                        break;
                                default:
                                        base.onKeyDown (key, scanCode, modifiers);
diff --git a/samples/common/Utils.cs b/samples/common/Utils.cs
new file mode 100644 (file)
index 0000000..80854e9
--- /dev/null
@@ -0,0 +1,27 @@
+using System.IO;
+using System.Linq;
+
+namespace vke.samples {
+       public static class Utils {
+               static string dataDir = "../../../datas/".Replace ('/', Path.DirectorySeparatorChar);
+               public static string DataDirectory => dataDir;
+               static string[] gltfExtensions = new[] { ".gltf", ".glb"};
+
+               public static string[] GltfFiles =>
+                       Directory
+                               .GetFiles (Path.Combine (DataDirectory, "models"), "*", SearchOption.AllDirectories)
+                               .Where (file => gltfExtensions.Any (file.ToLower ().EndsWith))
+                               .ToArray ();
+
+               public static string[] CubeMaps = {
+                       GetDataFile ("textures/papermill.ktx"),
+                       GetDataFile ("textures/cubemap_yokohama_bc3_unorm.ktx"),
+                       GetDataFile ("textures/gcanyon_cube.ktx"),
+                       GetDataFile ("textures/pisa_cube.ktx"),
+                       GetDataFile ("textures/uffizi_cube.ktx"),
+               };
+
+               public static string GetDataFile (string relativePath) =>
+                       Path.Combine (DataDirectory, relativePath);
+       }
+}
index 5f94db9b128b2b4efdab750c172fb5a9d2d1069d..891a890a9dd0b8a93e787d6ddc0525794cbb8ee7 100644 (file)
@@ -330,11 +330,10 @@ namespace deferred {
                        model?.Dispose ();
 
                        if (TEXTURE_ARRAY) {
-                               PbrModelTexArray mod = new PbrModelTexArray (transferQ, path);
-                               if (mod.texArray != null) {
-                                       DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMain, descLayoutMain.Bindings[5], descLayoutMain.Bindings[7]);
-                                       uboUpdate.Write (dev, mod.materialUBO.Descriptor, mod.texArray.Descriptor);
-                               }
+                               PbrModelTexArray mod = new PbrModelTexArray (transferQ, path);                          
+                               DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMain, descLayoutMain.Bindings[5], descLayoutMain.Bindings[7]);
+                               uboUpdate.Write (dev, mod.materialUBO.Descriptor, mod.texArray.Descriptor);
+                               
                                model = mod;
                        } else {
                                model = new PbrModelSeparatedTextures (transferQ, path,
index ff5e440cd2664709613bac9b499c2c36b3b2387b..bc524200f45ae431f0b48ff2c07df7cf3d474958 100644 (file)
@@ -32,8 +32,10 @@ namespace deferred {
                                vke.Run ();
                        }
                }
+               Deferred (string name = "VkCrowWindow", uint _width = 800, uint _height = 600, bool vSync = false)
+                       : base (name, _width, _height, vSync) { }
 
-               public override string[] EnabledInstanceExtensions => new string[] {
+       public override string[] EnabledInstanceExtensions => new string[] {
                        Ext.I.VK_EXT_debug_utils,
                };
 
@@ -53,28 +55,8 @@ namespace deferred {
                        transferQ = new Queue (dev, VkQueueFlags.Transfer);
                        computeQ = new Queue (dev, VkQueueFlags.Compute);
                }
-               string[] cubemapPathes = {
-                       Utils.DataDirectory + "textures/papermill.ktx",
-                       Utils.DataDirectory + "textures/cubemap_yokohama_bc3_unorm.ktx",
-                       Utils.DataDirectory + "textures/gcanyon_cube.ktx",
-                       Utils.DataDirectory + "textures/pisa_cube.ktx",
-                       Utils.DataDirectory + "textures/uffizi_cube.ktx",
-               };
-               string[] modelPathes = {
-                               //"/mnt/devel/vkPinball/data/models/pinball.gltf",
-                               //"/mnt/devel/pinball.net/data/test.glb",
-                               //Utils.DataDirectory + "models/Box.gltf",
-                               //Utils.DataDirectory + "models/cubeOnPlane.glb",
-                               //Utils.DataDirectory + "models/shadow.glb",
-                               //Utils.DataDirectory + "models/cube.gltf",
-                               Utils.DataDirectory + "models/DamagedHelmet/glTF/DamagedHelmet.gltf",
-                               //Utils.DataDirectory + "models/shadow.glb",
-                               Utils.DataDirectory + "models/Hubble.glb",
-                               Utils.DataDirectory + "models/MER_static.glb",
-                               Utils.DataDirectory + "models/ISS_stationary.glb",
-                       };
-
-               int curModelIndex = 0;
+
+               int curModelIndex = 13;
                bool reloadModel;
                bool rebuildBuffers;
 
@@ -104,8 +86,8 @@ namespace deferred {
                        camera.SetPosition (0, 0, -2);
 
                        //renderer = new DeferredPbrRenderer (presentQueue, cubemapPathes[2], swapChain.Width, swapChain.Height, camera.NearPlane, camera.FarPlane);
-                       renderer = new DeferredPbrRenderer (presentQueue, cubemapPathes[2], swapChain.Width, swapChain.Height, camera.NearPlane, camera.FarPlane);
-                       renderer.LoadModel (transferQ, modelPathes[curModelIndex]);
+                       renderer = new DeferredPbrRenderer (presentQueue, vke.samples.Utils.CubeMaps[2], swapChain.Width, swapChain.Height, camera.NearPlane, camera.FarPlane);
+                       renderer.LoadModel (transferQ, vke.samples.Utils.GltfFiles [curModelIndex]);
                        camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth));
 
                        init_final_pl ();
@@ -142,6 +124,7 @@ namespace deferred {
                }
 
                void buildCommandBuffers () {
+                       dev.WaitIdle ();
                        for (int i = 0; i < swapChain.ImageCount; ++i) {
                                cmds[i]?.Free ();
                                cmds[i] = cmdPool.AllocateAndStart ();
@@ -179,7 +162,7 @@ namespace deferred {
 
                public override void Update () {
                        if (reloadModel) {
-                               renderer.LoadModel (transferQ, modelPathes[curModelIndex]);
+                               renderer.LoadModel (transferQ, vke.samples.Utils.GltfFiles[curModelIndex]);
                                reloadModel = false;
                                camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth));
                                updateViewRequested = true;
@@ -346,16 +329,16 @@ namespace deferred {
                                        break;
                                case Key.KeypadAdd:
                                        curModelIndex++;
-                                       if (curModelIndex >= modelPathes.Length)
+                                       if (curModelIndex >= vke.samples.Utils.GltfFiles.Length)
                                                curModelIndex = 0;
                                        reloadModel = true;
-                                       break;
+                                       return;                                 
                                case Key.KeypadSubtract:
                                        curModelIndex--;
                                        if (curModelIndex < 0)
-                                               curModelIndex = modelPathes.Length -1;
+                                               curModelIndex = vke.samples.Utils.GltfFiles.Length -1;
                                        reloadModel = true;
-                                       break;
+                                       return;
                                default:
                                        base.onKeyDown (key, scanCode, modifiers);
                                        return;
index 81eec97264c2028d088f079446a52f76b82f060a..034736c6b4f86c407473ac246676619b399c1784 100644 (file)
@@ -41,22 +41,6 @@ namespace pbrSample {
                        roughness
                }
 
-               string[] modelPathes = {
-                       Utils.DataDirectory + "models/DamagedHelmet/glTF/DamagedHelmet.gltf",
-                       Utils.DataDirectory + "models/Hubble.glb",
-                       Utils.DataDirectory + "models/ISS_stationary.glb",
-                       Utils.DataDirectory + "models/MER_static.glb",
-                       Utils.DataDirectory + "models/Box.gltf",
-               };
-               string[] cubemapPathes = {
-                       Utils.DataDirectory + "textures/papermill.ktx",
-                       Utils.DataDirectory + "textures/cubemap_yokohama_bc3_unorm.ktx",
-                       Utils.DataDirectory + "textures/gcanyon_cube.ktx",
-                       Utils.DataDirectory + "textures/pisa_cube.ktx",
-                       Utils.DataDirectory + "textures/uffizi_cube.ktx",
-               };
-
-
                DebugView currentDebugView = DebugView.none;
 
                bool queryUpdatePrefilCube, showDebugImg;
@@ -72,7 +56,7 @@ namespace pbrSample {
                        camera.SetPosition (0, 0, -2);
 
                        pbrPipeline = new PBRPipeline (presentQueue,
-                               new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples), cubemapPathes[0]);
+                               new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples), vke.samples.Utils.CubeMaps[0]);
 
                        loadCurrentModel ();
                }
@@ -99,7 +83,7 @@ namespace pbrSample {
 
                void loadCurrentModel () {
                        dev.WaitIdle ();
-                       pbrPipeline.LoadModel (presentQueue, modelPathes[curModelIndex]);
+                       pbrPipeline.LoadModel (presentQueue, vke.samples.Utils.GltfFiles[curModelIndex]);
                        BoundingBox modelAABB = pbrPipeline.model.DefaultScene.AABB;
                        camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (modelAABB.max.X, modelAABB.max.Y), modelAABB.max.Z));
                        updateViewRequested = true;
@@ -168,9 +152,9 @@ namespace pbrSample {
                        switch (key) {
                        case Key.Space:
                                if (modifiers.HasFlag (Modifier.Shift))
-                                       curModelIndex = curModelIndex == 0 ? (uint)modelPathes.Length - 1 : curModelIndex - 1;
+                                       curModelIndex = curModelIndex == 0 ? (uint)vke.samples.Utils.GltfFiles.Length - 1 : curModelIndex - 1;
                                else
-                                       curModelIndex = curModelIndex < (uint)modelPathes.Length - 1 ? curModelIndex + 1 : 0;
+                                       curModelIndex = curModelIndex < (uint)vke.samples.Utils.GltfFiles.Length - 1 ? curModelIndex + 1 : 0;
                                reloadModel = true;
                                break;                  
                        case Key.P:
index 0a188184e34959a5f4c72fe715f95b3aaa4358ee..7e1303af80d9bc10fa46c6931fbfd257c64bfe52 100644 (file)
@@ -9,8 +9,7 @@ using System.Reflection;
 using System.Xml.Serialization;
 
 namespace Vulkan {
-       public static partial class Utils {
-               public static string DataDirectory => "../../../datas/";
+       public static partial class Utils {             
                /// <summary>Throw an erro if VkResult != Success.</summary>
                public static void CheckResult (VkResult result, string errorString = "Call failed") {
             if (result != VkResult.Success)
index fbfbedb51aa8b6d974e10067e5bc8aa5df72c80f..0c165e0d8f9ac56336cb71cbe2e7be01b9fdbeea 100644 (file)
@@ -163,7 +163,7 @@ namespace vke {
                        dev.Activate (enabledFeatures, EnabledDeviceExtensions);
 
                        swapChain = new SwapChain (presentQueue as PresentQueue, Width, Height, SwapChain.PREFERED_FORMAT,
-                               VSync ? VkPresentModeKHR.FifoKHR : VkPresentModeKHR.MailboxKHR);
+                               VSync ? VkPresentModeKHR.FifoKHR : VkPresentModeKHR.ImmediateKHR);
                        swapChain.Activate ();
 
                        Width = swapChain.Width;