From a5d281bd1a3367aa6093d3333ae971a2ce395706 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Tue, 1 Dec 2020 09:54:15 +0100 Subject: [PATCH] code clean, removed vkvg and crow --- .gitattributes | 1 + README.md | 4 +- download_datas.bat | 3 - samples/Directory.Build.props | 2 +- samples/compute/delaunay.cs | 5 +- samples/deferred/DebuDrawPipeline.cs | 78 ----- samples/deferred/DeferredPbrRenderer.cs | 5 +- samples/deferred/EnvironmentPipeline.cs | 317 ------------------ samples/deferred/deferred.csproj | 18 +- samples/deferred/main-crow.cs | 405 ----------------------- samples/deferred/main.cs | 9 +- samples/deferred/mainShadow.cs | 415 ------------------------ samples/deferred/mainWithDebugDrawer.cs | 412 ----------------------- samples/deferred/modelWithVkvgStats.cs | 359 -------------------- samples/pbr/PbrPipeline.cs | 7 +- samples/pbr/main.cs | 169 +--------- samples/pbr/pbr.csproj | 3 +- samples/pbr/ui/fps.crow | 22 -- vke.net.sln | 26 -- vke/src/base/ComputePipeline.cs | 2 - vke/src/base/Device.cs | 3 +- 21 files changed, 23 insertions(+), 2242 deletions(-) create mode 100644 .gitattributes delete mode 100644 download_datas.bat delete mode 100644 samples/deferred/DebuDrawPipeline.cs delete mode 100644 samples/deferred/EnvironmentPipeline.cs delete mode 100644 samples/deferred/main-crow.cs delete mode 100644 samples/deferred/mainShadow.cs delete mode 100644 samples/deferred/mainWithDebugDrawer.cs delete mode 100644 samples/deferred/modelWithVkvgStats.cs delete mode 100755 samples/pbr/ui/fps.crow diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ffbc973 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.fnt eol=lf diff --git a/README.md b/README.md index bd7fb7b..15f1b23 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,8 @@
adaptation of the gltf PBR sample from Sacha Willems

-### Presentattion -**vke.net** (_vulkan engine for .net_) a vulkan abstraction layer writen in c# composed of high level classes encapsulating [vulkan](https://www.khronos.org/vulkan/) objects and commands with `IDispose` model and **reference counting**. [GLFW](https://www.glfw.org/) handles the windowing system. +### Presentation +**vke.net** (_vulkan engine for .net_) a vulkan abstraction layer writen in **c#** composed of high level classes encapsulating [vulkan](https://www.khronos.org/vulkan/) objects and commands with `IDispose` model and **reference counting**. [GLFW](https://www.glfw.org/) handles the windowing system. Vke use autogenerated [vk.net](https://github.com/jpbruyere/vk.net) library for low level binding to vulkan. diff --git a/download_datas.bat b/download_datas.bat deleted file mode 100644 index 46e16fd..0000000 --- a/download_datas.bat +++ /dev/null @@ -1,3 +0,0 @@ -echo //TODO -echo link = "https://onedrive.live.com/download?cid=B3181664476E9B48&resid=B3181664476E9B48%21167&authkey=APMbPmUMFnlrN6s" -echo rename downloaded file to datas.zip, and unzip. diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props index 93eff46..75dd174 100644 --- a/samples/Directory.Build.props +++ b/samples/Directory.Build.props @@ -4,7 +4,7 @@ $(MSBuildThisFileDirectory)../ true - net472 + netcoreapp3.1 https://github.com/jpbruyere/vke.net MIT diff --git a/samples/compute/delaunay.cs b/samples/compute/delaunay.cs index 228f6ec..be01407 100644 --- a/samples/compute/delaunay.cs +++ b/samples/compute/delaunay.cs @@ -2,6 +2,7 @@ using Glfw; using Vulkan; using vke; +using Image = vke.Image; namespace delaunay { class Program : VkWindow { @@ -18,7 +19,7 @@ namespace delaunay { FrameBuffer[] frameBuffers; GraphicPipeline grPipeline; - Image imgResult; + Image imgResult; Queue computeQ, transferQ; @@ -93,6 +94,8 @@ namespace delaunay { cfg.blendAttachments[0] = new VkPipelineColorBlendAttachmentState (true); grPipeline = new GraphicPipeline (cfg); + + cfg.DisposeShaders (); plCompute = new ComputePipeline ( new PipelineLayout (dev, new VkPushConstantRange (VkShaderStageFlags.Compute, 2 * sizeof (int)), dslCompute), diff --git a/samples/deferred/DebuDrawPipeline.cs b/samples/deferred/DebuDrawPipeline.cs deleted file mode 100644 index fef2751..0000000 --- a/samples/deferred/DebuDrawPipeline.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using VK; - -namespace CVKL { - public class DebugDrawPipeline : GraphicPipeline { - public HostBuffer Vertices; - uint vertexCount; - uint vboLength = 100 * 6 * sizeof (float); - - public DebugDrawPipeline (Device dev, DescriptorSetLayout dsLayout, VkFormat colorFormat, VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1) : - base (new RenderPass (dev, colorFormat), "Debug draw pipeline") { - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.LineList, samples); - cfg.rasterizationState.lineWidth = 1.0f; - cfg.RenderPass = RenderPass; - cfg.Layout = new PipelineLayout(dev, dsLayout); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf () * 2) - ); - cfg.AddVertexBinding (0, 6 * sizeof(float)); - cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat); - - cfg.blendAttachments[0] = new VkPipelineColorBlendAttachmentState (true); - - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/debug.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/debug.frag.spv"); - - layout = cfg.Layout; - - init (cfg); - - Vertices = new HostBuffer (dev, VkBufferUsageFlags.VertexBuffer, vboLength); - Vertices.Map (); - } - - public void AddLine (Vector3 start, Vector3 end, float r, float g, float b) { - float[] data = { - start.X, start.Y, start.Z, - r, g, b, - end.X, end.Y, end.Z, - r, g, b - }; - Vertices.Update (data, 12 * sizeof (float), vertexCount * 6 * sizeof (float)); - vertexCount+=2; - } - - public void RecordDraw (CommandBuffer cmd, Framebuffer fb, Camera camera) { - RenderPass.Begin (cmd, fb); - const int ratio = 8; - cmd.SetViewport (fb.Width/ratio, fb.Height/ratio, (ratio-1) * (int)fb.Width / ratio, (ratio-1) * (int)fb.Height / ratio); - //cmd.SetViewport (200, 200,100,100,-10,10);//, 4 * (int)fb.Width / 5, 4 * (int)fb.Height / 5); - cmd.SetScissor (fb.Width / ratio, fb.Height / ratio, (ratio-1) * (int)fb.Width / ratio, (ratio-1) * (int)fb.Height / ratio); - //cmd.SetScissor (200, 200,100,100); - - Matrix4x4 ortho = Matrix4x4.CreateOrthographic (4, 4.0f / camera.AspectRatio,-1,1); - - cmd.PushConstant (layout, VkShaderStageFlags.Vertex, ortho); - - Bind (cmd); - - cmd.BindVertexBuffer (Vertices); - cmd.Draw (vertexCount); - RenderPass.End (cmd); - } - - protected override void Dispose (bool disposing) { - if (disposing) { - Vertices.Unmap (); - Vertices.Dispose (); - } - - base.Dispose (disposing); - } - } - -} diff --git a/samples/deferred/DeferredPbrRenderer.cs b/samples/deferred/DeferredPbrRenderer.cs index 9482386..5f94db9 100644 --- a/samples/deferred/DeferredPbrRenderer.cs +++ b/samples/deferred/DeferredPbrRenderer.cs @@ -12,7 +12,7 @@ namespace deferred { Queue gQueue; public static int MAX_MATERIAL_COUNT = 4; public static VkSampleCountFlags NUM_SAMPLES = VkSampleCountFlags.SampleCount1; - public static VkFormat HDR_FORMAT = VkFormat.R16g16b16a16Sfloat; + public static VkFormat HDR_FORMAT = VkFormat.R32g32b32a32Sfloat; public static VkFormat MRT_FORMAT = VkFormat.R32g32b32a32Sfloat; public static bool TEXTURE_ARRAY; @@ -216,7 +216,6 @@ namespace deferred { if (TEXTURE_ARRAY) { descLayoutMain.Bindings.Add (new VkDescriptorSetLayoutBinding (7, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler));//texture array - //descLayoutMain.Bindings.Add (new VkDescriptorSetLayoutBinding (8, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler));//down sampled hdr } else { descLayoutTextures = new DescriptorSetLayout (dev, new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), @@ -288,7 +287,7 @@ namespace deferred { #if WITH_SHADOWS cfg.AddShader (dev, VkShaderStageFlags.Fragment, "#shaders.compose_with_shadows.frag.spv", constants); #else - cfg.AddShader (VkShaderStageFlags.Fragment, "#shaders.compose.frag.spv", constants); + cfg.AddShader (dev, VkShaderStageFlags.Fragment, "#shaders.compose.frag.spv", constants); #endif composePipeline = new GraphicPipeline (cfg); } diff --git a/samples/deferred/EnvironmentPipeline.cs b/samples/deferred/EnvironmentPipeline.cs deleted file mode 100644 index 32f8e6a..0000000 --- a/samples/deferred/EnvironmentPipeline.cs +++ /dev/null @@ -1,317 +0,0 @@ -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using Vulkan; - -namespace vke { - public class EnvironmentCube : GraphicPipeline { - - GPUBuffer vboSkybox; - - public Image cubemap { get; private set; } - public Image lutBrdf { get; private set; } - public Image irradianceCube { get; private set; } - public Image prefilterCube { get; set; } - - public EnvironmentCube (string cubemapPath, DescriptorSet dsSkybox, PipelineLayout plLayout, Queue staggingQ, RenderPass renderPass, PipelineCache cache = null) - : base (renderPass, cache, "EnvCube pipeline") { - - using (CommandPool cmdPool = new CommandPool (staggingQ.Dev, staggingQ.index)) { - - vboSkybox = new GPUBuffer (staggingQ, cmdPool, VkBufferUsageFlags.VertexBuffer, box_vertices); - - cubemap = KTX.KTX.Load (staggingQ, cmdPool, cubemapPath, - VkImageUsageFlags.Sampled, VkMemoryPropertyFlags.DeviceLocal, true); - cubemap.CreateView (VkImageViewType.Cube, VkImageAspectFlags.Color); - cubemap.CreateSampler (VkSamplerAddressMode.ClampToEdge); - cubemap.SetName ("skybox Texture"); - cubemap.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal; - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, renderPass.Samples, false); - cfg.RenderPass = renderPass; - cfg.Layout = plLayout; - cfg.AddVertexBinding (0, 3 * sizeof (float)); - cfg.AddVertexAttributes (0, VkFormat.R32g32b32Sfloat); - cfg.AddShader (VkShaderStageFlags.Vertex, "#deferred.skybox.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "#deferred.skybox.frag.spv"); - cfg.multisampleState.rasterizationSamples = Samples; - - layout = cfg.Layout; - - init (cfg); - - generateBRDFLUT (staggingQ, cmdPool); - generateCubemaps (staggingQ, cmdPool); - } - - } - - public void RecordDraw (CommandBuffer cmd) { - Bind (cmd); - cmd.BindVertexBuffer (vboSkybox); - cmd.Draw (36); - } - - #region skybox - - static float[] box_vertices = { - 1.0f, 1.0f,-1.0f, // +X side - 1.0f, 1.0f, 1.0f, - 1.0f,-1.0f, 1.0f, - 1.0f,-1.0f, 1.0f, - 1.0f,-1.0f,-1.0f, - 1.0f, 1.0f,-1.0f, - - -1.0f,-1.0f,-1.0f, // +X side - -1.0f,-1.0f, 1.0f, - -1.0f, 1.0f, 1.0f, - -1.0f, 1.0f, 1.0f, - -1.0f, 1.0f,-1.0f, - -1.0f,-1.0f,-1.0f, - - -1.0f, 1.0f,-1.0f, // +Y side - -1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f, 1.0f,-1.0f, - 1.0f, 1.0f, 1.0f, - 1.0f, 1.0f,-1.0f, - - -1.0f,-1.0f,-1.0f, // -Y side - 1.0f,-1.0f,-1.0f, - 1.0f,-1.0f, 1.0f, - -1.0f,-1.0f,-1.0f, - 1.0f,-1.0f, 1.0f, - -1.0f,-1.0f, 1.0f, - - -1.0f, 1.0f, 1.0f, // +Z side - -1.0f,-1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f,-1.0f, 1.0f, - 1.0f,-1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - - -1.0f,-1.0f,-1.0f, // -Z side - 1.0f, 1.0f,-1.0f, - 1.0f,-1.0f,-1.0f, - -1.0f,-1.0f,-1.0f, - -1.0f, 1.0f,-1.0f, - 1.0f, 1.0f,-1.0f, - - }; - #endregion - - void generateBRDFLUT (Queue staggingQ, CommandPool cmdPool) { - const VkFormat format = VkFormat.R16g16Sfloat; - const int dim = 512; - - lutBrdf = new Image (Dev, format, VkImageUsageFlags.ColorAttachment | VkImageUsageFlags.Sampled, - VkMemoryPropertyFlags.DeviceLocal, dim, dim); - lutBrdf.SetName ("lutBrdf"); - - lutBrdf.CreateView (); - lutBrdf.CreateSampler (VkSamplerAddressMode.ClampToEdge); - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, VkSampleCountFlags.SampleCount1, false); - - cfg.Layout = new PipelineLayout (Dev, new DescriptorSetLayout (Dev)); - cfg.RenderPass = new RenderPass (Dev); - cfg.RenderPass.AddAttachment (format, VkImageLayout.ShaderReadOnlyOptimal); - cfg.RenderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0, 0, 0) }); - cfg.RenderPass.AddSubpass (new SubPass (VkImageLayout.ColorAttachmentOptimal)); - cfg.AddShader (VkShaderStageFlags.Vertex, "#deferred.genbrdflut.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "#deferred.genbrdflut.frag.spv"); - - using (GraphicPipeline pl = new GraphicPipeline (cfg)) { - using (FrameBuffer fb = new FrameBuffer (cfg.RenderPass, dim, dim, lutBrdf)) { - CommandBuffer cmd = cmdPool.AllocateCommandBuffer (); - cmd.Start (VkCommandBufferUsageFlags.OneTimeSubmit); - pl.RenderPass.Begin (cmd, fb); - cmd.SetViewport (dim, dim); - cmd.SetScissor (dim, dim); - pl.Bind (cmd); - cmd.Draw (3, 1, 0, 0); - pl.RenderPass.End (cmd); - cmd.End (); - - staggingQ.Submit (cmd); - staggingQ.WaitIdle (); - - cmd.Free (); - } - } - lutBrdf.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal; - } - - public enum CBTarget { IRRADIANCE = 0, PREFILTEREDENV = 1 }; - - public Image generateCubeMap (Queue staggingQ, CommandPool cmdPool, CBTarget target) { - const float deltaPhi = (2.0f * (float)Math.PI) / 180.0f; - const float deltaTheta = (0.5f * (float)Math.PI) / 64.0f; - - VkFormat format = VkFormat.R32g32b32a32Sfloat; - uint dim = 64; - - if (target == CBTarget.PREFILTEREDENV) { - format = VkFormat.R16g16b16a16Sfloat; - dim = 512; - } - - uint numMips = (uint)Math.Floor (Math.Log (dim, 2)) + 1; - - Image imgFbOffscreen = new Image (Dev, format, VkImageUsageFlags.TransferSrc | VkImageUsageFlags.ColorAttachment, - VkMemoryPropertyFlags.DeviceLocal, dim, dim); - imgFbOffscreen.SetName ("offscreenfb"); - imgFbOffscreen.CreateView (); - - Image cmap = new Image (Dev, format, VkImageUsageFlags.TransferDst | VkImageUsageFlags.Sampled, - VkMemoryPropertyFlags.DeviceLocal, dim, dim, VkImageType.Image2D, VkSampleCountFlags.SampleCount1, VkImageTiling.Optimal, - numMips, 6, 1, VkImageCreateFlags.CubeCompatible); - if (target == CBTarget.PREFILTEREDENV) - cmap.SetName ("prefilterenvmap"); - else - cmap.SetName ("irradianceCube"); - cmap.CreateView (VkImageViewType.Cube, VkImageAspectFlags.Color, 6, 0); - cmap.CreateSampler (VkSamplerAddressMode.ClampToEdge); - - DescriptorPool dsPool = new DescriptorPool (Dev, 2, new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler)); - - DescriptorSetLayout dsLayout = new DescriptorSetLayout (Dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler)); - - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, VkSampleCountFlags.SampleCount1, false); - cfg.Layout = new PipelineLayout (Dev, dsLayout); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, (uint)Marshal.SizeOf () + 8)); - - cfg.RenderPass = new RenderPass (Dev); - cfg.RenderPass.AddAttachment (format, VkImageLayout.ColorAttachmentOptimal); - cfg.RenderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0, 0, 0) }); - cfg.RenderPass.AddSubpass (new SubPass (VkImageLayout.ColorAttachmentOptimal)); - - cfg.AddVertexBinding (0, 3 * sizeof (float)); - cfg.AddVertexAttributes (0, VkFormat.R32g32b32Sfloat); - - cfg.AddShader (VkShaderStageFlags.Vertex, "#deferred.filtercube.vert.spv"); - if (target == CBTarget.PREFILTEREDENV) - cfg.AddShader (VkShaderStageFlags.Fragment, "#deferred.prefilterenvmap.frag.spv"); - else - cfg.AddShader (VkShaderStageFlags.Fragment, "#deferred.irradiancecube.frag.spv"); - - Matrix4x4[] matrices = { - // POSITIVE_X - Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)) * Matrix4x4.CreateRotationY(Utils.DegreesToRadians(90)), - // NEGATIVE_X - Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)) * Matrix4x4.CreateRotationY(Utils.DegreesToRadians(-90)), - // POSITIVE_Y - Matrix4x4.CreateRotationX(Utils.DegreesToRadians(-90)), - // NEGATIVE_Y - Matrix4x4.CreateRotationX(Utils.DegreesToRadians(90)), - // POSITIVE_Z - Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)), - // NEGATIVE_Z - Matrix4x4.CreateRotationZ(Utils.DegreesToRadians(180)) - }; - - VkImageSubresourceRange subRes = new VkImageSubresourceRange (VkImageAspectFlags.Color, 0, numMips, 0, 6); - - using (GraphicPipeline pl = new GraphicPipeline (cfg)) { - - DescriptorSet dset = dsPool.Allocate (dsLayout); - DescriptorSetWrites dsUpdate = new DescriptorSetWrites (dsLayout); - dsUpdate.Write (Dev, dset, cubemap.Descriptor); - Dev.WaitIdle (); - - using (FrameBuffer fb = new FrameBuffer (pl.RenderPass, dim, dim, imgFbOffscreen)) { - CommandBuffer cmd = cmdPool.AllocateCommandBuffer (); - cmd.Start (VkCommandBufferUsageFlags.OneTimeSubmit); - - cmap.SetLayout (cmd, VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal, subRes); - - float roughness = 0; - - cmd.SetScissor (dim, dim); - cmd.SetViewport ((float)(dim), (float)dim); - - for (int m = 0; m < numMips; m++) { - roughness = (float)m / ((float)numMips - 1f); - - for (int f = 0; f < 6; f++) { - pl.RenderPass.Begin (cmd, fb); - - pl.Bind (cmd); - - float viewPortSize = (float)Math.Pow (0.5, m) * dim; - cmd.SetViewport (viewPortSize, viewPortSize); - cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, - matrices[f] * Matrix4x4.CreatePerspectiveFieldOfView (Utils.DegreesToRadians (90), 1f, 0.1f, 512f)); - if (target == CBTarget.IRRADIANCE) { - cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, deltaPhi, (uint)Marshal.SizeOf ()); - cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, deltaTheta, (uint)Marshal.SizeOf () + 4); - } else { - cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, roughness, (uint)Marshal.SizeOf ()); - cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, 64u, (uint)Marshal.SizeOf () + 4); - } - - cmd.BindDescriptorSet (pl.Layout, dset); - cmd.BindVertexBuffer (vboSkybox); - cmd.Draw (36); - - pl.RenderPass.End (cmd); - - imgFbOffscreen.SetLayout (cmd, VkImageAspectFlags.Color, - VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal); - - VkImageCopy region = new VkImageCopy (); - region.srcSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, 1); - region.dstSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, 1, (uint)m, (uint)f); - region.extent = new VkExtent3D { width = (uint)viewPortSize, height = (uint)viewPortSize, depth = 1 }; - - Vk.vkCmdCopyImage (cmd.Handle, - imgFbOffscreen.Handle, VkImageLayout.TransferSrcOptimal, - cmap.Handle, VkImageLayout.TransferDstOptimal, - 1, region.Pin ()); - region.Unpin (); - - imgFbOffscreen.SetLayout (cmd, VkImageAspectFlags.Color, - VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal); - - } - } - - cmap.SetLayout (cmd, VkImageLayout.TransferDstOptimal, VkImageLayout.ShaderReadOnlyOptimal, subRes); - - cmd.End (); - - staggingQ.Submit (cmd); - staggingQ.WaitIdle (); - - cmd.Free (); - } - } - cmap.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal; - - dsLayout.Dispose (); - imgFbOffscreen.Dispose (); - dsPool.Dispose (); - - return cmap; - } - - void generateCubemaps (Queue staggingQ, CommandPool cmdPool) { - irradianceCube = generateCubeMap (staggingQ, cmdPool, CBTarget.IRRADIANCE); - prefilterCube = generateCubeMap (staggingQ, cmdPool, CBTarget.PREFILTEREDENV); - } - - protected override void Dispose (bool disposing) { - vboSkybox.Dispose (); - cubemap.Dispose (); - lutBrdf.Dispose (); - irradianceCube.Dispose (); - prefilterCube.Dispose (); - - base.Dispose (disposing); - } - } - -} diff --git a/samples/deferred/deferred.csproj b/samples/deferred/deferred.csproj index 06dbc9e..49e0569 100644 --- a/samples/deferred/deferred.csproj +++ b/samples/deferred/deferred.csproj @@ -1,24 +1,8 @@ - false - + $(DefineConstants);WITH_SHADOWS - - TRACE;NETSTANDARD;NETSTANDARD2_0;MEMORY_POOLS;WITH_SHADOWS;_WITH_VKVG;DEBUG;NETFRAMEWORK;NET472 - - - TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0;MEMORY_POOLS;WITH_SHADOWS;_WITH_VKVG - - - - - - - - - - diff --git a/samples/deferred/main-crow.cs b/samples/deferred/main-crow.cs deleted file mode 100644 index c9c1f91..0000000 --- a/samples/deferred/main-crow.cs +++ /dev/null @@ -1,405 +0,0 @@ -using System; -using System.Numerics; -using Glfw; -using Vulkan; -using vke; -using System.Collections.Generic; -using System.Linq; - -namespace deferred { - class Program : Crow.CrowWin { - static void Main (string[] args) { -#if DEBUG - Instance.VALIDATION = true; - Instance.DEBUG_UTILS = true; - Instance.RENDER_DOC_CAPTURE = false; -#endif - DeferredPbrRenderer.TEXTURE_ARRAY = true; - DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount1; - DeferredPbrRenderer.HDR_FORMAT = VkFormat.R32g32b32a32Sfloat; - DeferredPbrRenderer.MRT_FORMAT = VkFormat.R16g16b16a16Sfloat; - - PbrModelTexArray.TEXTURE_DIM = 1024; - - using (Program vke = new Program ()) { - vke.Run (); - } - } - - #region crow ui - public Crow.Command CMDViewScenes, CMDViewEditor, CMDViewDebug, CMDViewMaterials; - void init_crow_commands () { - CMDViewScenes = new Crow.Command (new Action (() => loadWindow ("#deferred.main.crow", this))) { Caption = "Lighting", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true }; - CMDViewEditor = new Crow.Command (new Action (() => loadWindow ("#deferred.scenes.crow", this))) { Caption = "Scenes", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true }; - CMDViewDebug = new Crow.Command (new Action (() => loadWindow ("#deferred.debug.crow", this))) { Caption = "Debug", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true }; - CMDViewMaterials = new Crow.Command (new Action (() => loadWindow ("#deferred.materials.crow", this))) { Caption = "Materials", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true }; - } - - public DeferredPbrRenderer.DebugView CurrentDebugView { - get { return renderer.currentDebugView; } - set { - if (value == renderer.currentDebugView) - return; - lock(crow.UpdateMutex) - renderer.currentDebugView = value; - rebuildBuffers = true; - NotifyValueChanged ("CurrentDebugView", renderer.currentDebugView); - } - } - - public float Gamma { - get { return renderer.matrices.gamma; } - set { - if (value == renderer.matrices.gamma) - return; - renderer.matrices.gamma = value; - NotifyValueChanged ("Gamma", value); - updateViewRequested = true; - } - } - public float Exposure { - get { return renderer.matrices.exposure; } - set { - if (value == renderer.matrices.exposure) - return; - renderer.matrices.exposure = value; - NotifyValueChanged ("Exposure", value); - updateViewRequested = true; - } - } - public float LightStrength { - get { return renderer.lights[renderer.lightNumDebug].color.X; } - set { - if (value == renderer.lights[renderer.lightNumDebug].color.X) - return; - renderer.lights[renderer.lightNumDebug].color = new Vector4(value); - NotifyValueChanged ("LightStrength", value); - renderer.uboLights.Update (renderer.lights); - } - } - public List Lights => renderer.lights.ToList (); - public List Scenes => renderer.model.Scenes; - #endregion - - public override string[] EnabledDeviceExtensions => new string[] { - Ext.D.VK_KHR_swapchain, - Ext.D.VK_EXT_debug_marker - }; - - protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures features) { - base.configureEnabledFeatures (available_features, ref features); - - features.samplerAnisotropy = available_features.samplerAnisotropy; - features.sampleRateShading = available_features.sampleRateShading; - features.geometryShader = available_features.geometryShader; - features.pipelineStatisticsQuery = true; - - if (available_features.textureCompressionETC2) { - features.textureCompressionETC2 = true; - Image.DefaultTextureFormat = VkFormat.Etc2R8g8b8a8UnormBlock; - }else if (available_features.textureCompressionBC) { - //features.textureCompressionBC = true; - //Image.DefaultTextureFormat = VkFormat.Bc3UnormBlock; - } - - - } - - protected override void createQueues () { - base.createQueues (); - transferQ = new Queue (dev, VkQueueFlags.Transfer); - } - - 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/gts/vkChess.net/data/models/chess.glb", - //"/home/jp/gltf/jaguar/scene.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; - bool reloadModel; - - Queue transferQ; - DeferredPbrRenderer renderer; - PipelineStatisticsQueryPool statPool; - TimestampQueryPool timestampQPool; - ulong[] results; - - DebugReport dbgRepport; - - protected override void initVulkan () { - base.initVulkan (); - -#if DEBUG - dbgRepport = new DebugReport (instance, - VkDebugReportFlagsEXT.ErrorEXT - | VkDebugReportFlagsEXT.DebugEXT - | VkDebugReportFlagsEXT.WarningEXT - | VkDebugReportFlagsEXT.PerformanceWarningEXT - ); -#endif - - camera = new Camera (Utils.DegreesToRadians (45f), 1f, 0.1f, 16f); - camera.SetPosition (0, 0, 2); - - renderer = new DeferredPbrRenderer (dev, swapChain, presentQueue, cubemapPathes[2], camera.NearPlane, camera.FarPlane); - renderer.LoadModel (transferQ, modelPathes[curModelIndex]); - camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth)); - - statPool = new PipelineStatisticsQueryPool (dev, - VkQueryPipelineStatisticFlags.InputAssemblyVertices | - VkQueryPipelineStatisticFlags.InputAssemblyPrimitives | - VkQueryPipelineStatisticFlags.ClippingInvocations | - VkQueryPipelineStatisticFlags.ClippingPrimitives | - VkQueryPipelineStatisticFlags.FragmentShaderInvocations); - - timestampQPool = new TimestampQueryPool (dev); - - init_crow_commands (); - - crow.Load ("#deferred.menu.crow").DataSource = this; - - } - - protected override void recordDraw (PrimaryCommandBuffer cmd, int imageIndex) { - statPool.Begin (cmd); - renderer.buildCommandBuffers (cmd, imageIndex); - statPool.End (cmd); - } - - public override void UpdateView () { - renderer.UpdateView (camera); - updateViewRequested = false; -#if WITH_SHADOWS - if (renderer.shadowMapRenderer.updateShadowMap) - renderer.shadowMapRenderer.update_shadow_map (cmdPool); -#endif - } - - int frameCount = 0; - public override void Update () { - if (reloadModel) { - renderer.LoadModel (transferQ, modelPathes[curModelIndex]); - reloadModel = false; - camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth)); - updateViewRequested = true; - rebuildBuffers = true; -#if WITH_SHADOWS - renderer.shadowMapRenderer.updateShadowMap = true; -#endif - } - - base.Update (); - - if (++frameCount > 20) { - NotifyValueChanged ("fps", fps); - frameCount = 0; - } - - results = statPool.GetResults (); - } - protected override void OnResize () { - renderer.Resize (); - base.OnResize (); - } - - #region Mouse and keyboard - protected override void onMouseMove (double xPos, double yPos) { - if (crow.ProcessMouseMove ((int)xPos, (int)yPos)) - return; - - double diffX = lastMouseX - xPos; - double diffY = lastMouseY - yPos; - if (MouseButton[0]) { - camera.Rotate ((float)-diffX, (float)-diffY); - } else if (MouseButton[1]) { - camera.SetZoom ((float)diffY); - } else - return; - - updateViewRequested = true; - } - protected override void onMouseButtonDown (Glfw.MouseButton button) { - if (crow.ProcessMouseButtonDown ((Crow.MouseButton)button)) - return; - base.onMouseButtonDown (button); - } - protected override void onMouseButtonUp (Glfw.MouseButton button) { - if (crow.ProcessMouseButtonUp ((Crow.MouseButton)button)) - return; - base.onMouseButtonUp (button); - } - protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { - if (crow.ProcessKeyDown ((Crow.Key)key)) - return; - switch (key) { - case Key.F: - if (modifiers.HasFlag (Modifier.Shift)) { - renderer.debugFace--; - if (renderer.debugFace < 0) - renderer.debugFace = 5; - } else { - renderer.debugFace++; - if (renderer.debugFace >= 5) - renderer.debugFace = 0; - } - rebuildBuffers = true; - break; - case Key.M: - if (modifiers.HasFlag (Modifier.Shift)) { - renderer.debugMip--; - if (renderer.debugMip < 0) - renderer.debugMip = (int)renderer.envCube.prefilterCube.CreateInfo.mipLevels - 1; - } else { - renderer.debugMip++; - if (renderer.debugMip >= renderer.envCube.prefilterCube.CreateInfo.mipLevels) - renderer.debugMip = 0; - } - rebuildBuffers = true; - break; - case Key.L: - if (modifiers.HasFlag (Modifier.Shift)) { - renderer.lightNumDebug--; - if (renderer.lightNumDebug < 0) - renderer.lightNumDebug = (int)renderer.lights.Length - 1; - } else { - renderer.lightNumDebug++; - if (renderer.lightNumDebug >= renderer.lights.Length) - renderer.lightNumDebug = 0; - } - rebuildBuffers = true; - break; - case Key.Keypad0: - case Key.Keypad1: - case Key.Keypad2: - case Key.Keypad3: - case Key.Keypad4: - case Key.Keypad5: - case Key.Keypad6: - case Key.Keypad7: - case Key.Keypad8: - case Key.Keypad9: - renderer.currentDebugView = (DeferredPbrRenderer.DebugView)(int)key-320; - rebuildBuffers = true; - break; - case Key.KeypadDivide: - renderer.currentDebugView = DeferredPbrRenderer.DebugView.irradiance; - rebuildBuffers = true; - break; - case Key.S: - if (modifiers.HasFlag (Modifier.Control)) { - renderer.pipelineCache.Save (); - Console.WriteLine ($"Pipeline Cache saved."); - } else { - renderer.currentDebugView = DeferredPbrRenderer.DebugView.shadowMap; - rebuildBuffers = true; - } - break; - case Key.Up: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight(-Vector4.UnitZ); - else - camera.Move (0, 0, 1); - break; - case Key.Down: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight (Vector4.UnitZ); - else - camera.Move (0, 0, -1); - break; - case Key.Left: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight (-Vector4.UnitX); - else - camera.Move (1, 0, 0); - break; - case Key.Right: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight (Vector4.UnitX); - else - camera.Move (-1, 0, 0); - break; - case Key.PageUp: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight (Vector4.UnitY); - else - camera.Move (0, 1, 0); - break; - case Key.PageDown: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.MoveLight (-Vector4.UnitY); - else - camera.Move (0, -1, 0); - break; - case Key.F2: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.matrices.exposure -= 0.3f; - else - renderer.matrices.exposure += 0.3f; - break; - case Key.F3: - if (modifiers.HasFlag (Modifier.Shift)) - renderer.matrices.gamma -= 0.1f; - else - renderer.matrices.gamma += 0.1f; - break; - case Key.F4: - if (camera.Type == Camera.CamType.FirstPerson) - camera.Type = Camera.CamType.LookAt; - else - camera.Type = Camera.CamType.FirstPerson; - Console.WriteLine ($"camera type = {camera.Type}"); - break; - case Key.KeypadAdd: - curModelIndex++; - if (curModelIndex >= modelPathes.Length) - curModelIndex = 0; - reloadModel = true; - break; - case Key.KeypadSubtract: - curModelIndex--; - if (curModelIndex < 0) - curModelIndex = modelPathes.Length -1; - reloadModel = true; - break; - default: - base.onKeyDown (key, scanCode, modifiers); - return; - } - updateViewRequested = true; - } - protected override void onKeyUp (Key key, int scanCode, Modifier modifiers) { - if (crow.ProcessKeyUp ((Crow.Key)key)) - return; - } - protected override void onChar (CodePoint cp) { - if (crow.ProcessKeyPress (cp.ToChar ())) - return; - } - #endregion - - protected override void Dispose (bool disposing) { - if (disposing) { - if (!isDisposed) { - renderer.Dispose (); - statPool.Dispose (); - timestampQPool.Dispose (); - dbgRepport?.Dispose (); - } - } - - base.Dispose (disposing); - } - } -} diff --git a/samples/deferred/main.cs b/samples/deferred/main.cs index 1e32c50..4d4d044 100644 --- a/samples/deferred/main.cs +++ b/samples/deferred/main.cs @@ -18,11 +18,11 @@ namespace deferred { static void Main (string[] args) { #if DEBUG Instance.VALIDATION = true; - Instance.RENDER_DOC_CAPTURE = true; + Instance.RENDER_DOC_CAPTURE = false; #endif SwapChain.PREFERED_FORMAT = VkFormat.B8g8r8a8Srgb; DeferredPbrRenderer.TEXTURE_ARRAY = true; - DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount8; + DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount1; DeferredPbrRenderer.HDR_FORMAT = VkFormat.R32g32b32a32Sfloat; DeferredPbrRenderer.MRT_FORMAT = VkFormat.R32g32b32a32Sfloat; @@ -37,9 +37,6 @@ namespace deferred { Ext.I.VK_EXT_debug_utils, }; - public override string[] EnabledDeviceExtensions => new string[] { - Ext.D.VK_KHR_swapchain, - }; protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures enabled_features) { base.configureEnabledFeatures (available_features, ref enabled_features); @@ -69,7 +66,7 @@ namespace deferred { //Utils.DataDirectory + "models/Box.gltf", //Utils.DataDirectory + "models/cubeOnPlane.glb", //Utils.DataDirectory + "models/shadow.glb", - Utils.DataDirectory + "models/cube.gltf", + //Utils.DataDirectory + "models/cube.gltf", Utils.DataDirectory + "models/DamagedHelmet/glTF/DamagedHelmet.gltf", //Utils.DataDirectory + "models/shadow.glb", Utils.DataDirectory + "models/Hubble.glb", diff --git a/samples/deferred/mainShadow.cs b/samples/deferred/mainShadow.cs deleted file mode 100644 index 0bc3103..0000000 --- a/samples/deferred/mainShadow.cs +++ /dev/null @@ -1,415 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Runtime.InteropServices; -using Glfw; -using VK; -using CVKL; - -namespace deferredShadow { - class Program : VkWindow{ - static void Main (string[] args) { - using (Program vke = new Program ()) { - vke.Run (); - } - } - - VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1; - - public struct Matrices { - public Matrix4x4 projection; - public Matrix4x4 view; - public Matrix4x4 model; - public Vector4 lightPos; - public float gamma; - public float exposure; - } - - public Matrices matrices = new Matrices { - lightPos = new Vector4 (1.0f, 0.0f, 0.0f, 1.0f), - gamma = 1.0f, - exposure = 2.0f, - }; - - const uint SHADOW_MAP_SIZE = 4096; - -#if DEBUG - PipelineStatisticsQueryPool statPool; - TimestampQueryPool timestampQPool; - ulong[] results; -#endif - - protected override void configureEnabledFeatures (ref VkPhysicalDeviceFeatures features) { - base.configureEnabledFeatures (ref features); -#if DEBUG - features.pipelineStatisticsQuery = true; -#endif - } - - Program () : base(true) { - //camera.Model = Matrix4x4.CreateRotationX (Utils.DegreesToRadians (-90)) * Matrix4x4.CreateRotationY (Utils.DegreesToRadians (180)); - //camera.SetRotation (-0.1f,-0.4f); - camera.SetPosition (0, 0, -3); - - init (); - -#if DEBUG - statPool = new PipelineStatisticsQueryPool (dev, - VkQueryPipelineStatisticFlags.InputAssemblyVertices | - VkQueryPipelineStatisticFlags.InputAssemblyPrimitives | - VkQueryPipelineStatisticFlags.ClippingInvocations | - VkQueryPipelineStatisticFlags.ClippingPrimitives | - VkQueryPipelineStatisticFlags.FragmentShaderInvocations); - - timestampQPool = new TimestampQueryPool (dev); -#endif - } - - Framebuffer[] frameBuffers; - Image gbColorRough, gbEmitMetal, gbN, gbPos; - - DescriptorPool descriptorPool; - DescriptorSetLayout descLayoutMain, descLayoutModelTextures, descLayoutGBuff; - DescriptorSet dsMain, dsGBuff; - - Pipeline gBuffPipeline, composePipeline; - - HostBuffer uboMats; - - RenderPass renderPass; - - Model model; - EnvironmentCube envCube; - - DebugDrawPipeline debugDraw; - Framebuffer[] debugFB; - - void init () { - VkFormat depthFormat = dev.GetSuitableDepthFormat (); - renderPass = new RenderPass (dev); - - renderPass.AddAttachment (swapChain.ColorFormat, VkImageLayout.ColorAttachmentOptimal, VkSampleCountFlags.SampleCount1); - renderPass.AddAttachment (depthFormat, VkImageLayout.DepthStencilAttachmentOptimal, samples); - renderPass.AddAttachment (VkFormat.R8g8b8a8Unorm, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R8g8b8a8Unorm, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R16g16b16a16Sfloat, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R16g16b16a16Sfloat, VkImageLayout.ColorAttachmentOptimal); - //renderPass.AddAttachment (VkFormat.R16g16b16a16Sfloat, VkImageLayout.DepthStencilReadOnlyOptimal); - - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { depthStencil = new VkClearDepthStencilValue (1.0f, 0) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - - SubPass[] subpass = { new SubPass (), new SubPass (), new SubPass() }; - subpass[0].AddColorReference ( new VkAttachmentReference (2, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (3, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (4, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (5, VkImageLayout.ColorAttachmentOptimal)); - subpass[0].SetDepthReference (1, VkImageLayout.DepthStencilAttachmentOptimal); - - subpass[1].AddColorReference (0, VkImageLayout.ColorAttachmentOptimal); - subpass[1].AddInputReference ( new VkAttachmentReference (2, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (3, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (4, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (5, VkImageLayout.ShaderReadOnlyOptimal)); - renderPass.AddSubpass (subpass); - - renderPass.AddDependency (Vk.SubpassExternal, 0, - VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.ColorAttachmentOutput, - VkAccessFlags.MemoryRead, VkAccessFlags.ColorAttachmentRead | VkAccessFlags.ColorAttachmentWrite); - renderPass.AddDependency (0, 1, - VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.FragmentShader, - VkAccessFlags.ColorAttachmentWrite, VkAccessFlags.ShaderRead); - renderPass.AddDependency (1, Vk.SubpassExternal, - VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.BottomOfPipe, - VkAccessFlags.ColorAttachmentRead | VkAccessFlags.ColorAttachmentWrite, VkAccessFlags.MemoryRead); - - - descriptorPool = new DescriptorPool (dev, 3, - new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer, 2), - new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, 3), - new VkDescriptorPoolSize (VkDescriptorType.InputAttachment, 4) - ); - - descLayoutMain = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler)); - - descLayoutModelTextures = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler) - ); - - descLayoutGBuff = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment)); - - dsMain = descriptorPool.Allocate (descLayoutMain); - dsGBuff = descriptorPool.Allocate (descLayoutGBuff); - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples); - cfg.Layout = new PipelineLayout (dev, descLayoutMain, descLayoutModelTextures, descLayoutGBuff); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf ()), - new VkPushConstantRange (VkShaderStageFlags.Fragment, (uint)Marshal.SizeOf (), 64) - ); - cfg.RenderPass = renderPass; - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - - cfg.AddVertexBinding (0); - cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat, VkFormat.R32g32Sfloat); - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/pbrtest.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/GBuffPbr.frag.spv"); - - gBuffPipeline = new GraphicPipeline (cfg); - cfg.blendAttachments.Clear (); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.ResetShadersAndVerticesInfos (); - cfg.SubpassIndex = 1; - cfg.Layout = gBuffPipeline.Layout; - cfg.depthStencilState.depthTestEnable = false; - cfg.depthStencilState.depthWriteEnable = false; - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/FullScreenQuad.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/pbrtest.frag.spv"); - composePipeline = new GraphicPipeline (cfg); - - envCube = new EnvironmentCube (presentQueue, renderPass); - - uboMats = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, (ulong)Marshal.SizeOf () * 2); - uboMats.Map ();//permanent map - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutMain); - uboUpdate.Write (dev, dsMain, uboMats.Descriptor, - envCube.lutBrdf.Descriptor, - envCube.irradianceCube.Descriptor, - envCube.prefilterCube.Descriptor); - uboMats.Descriptor.offset = (ulong)Marshal.SizeOf (); - envCube.WriteDesc (uboMats.Descriptor); -#if DEBUG - debugDraw = new DebugDrawPipeline (dev, descLayoutMain, swapChain.ColorFormat); - debugDraw.AddLine (Vector3.Zero, new Vector3(matrices.lightPos.X,matrices.lightPos.Y,matrices.lightPos.Z)*3, 1, 1, 1); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitX, 1, 0, 0); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitY, 0, 1, 0); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitZ, 0, 0, 1); -#endif - - - model = new Model (presentQueue, "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf"); - //model = new Model (presentQueue, "../data/models/chess.gltf"); - //model = new Model (presentQueue, "../data/models/Sponza/glTF/Sponza.gltf"); - //model = new Model (dev, presentQueue, "../data/models/icosphere.gltf"); - //model = new Model (dev, presentQueue, cmdPool, "../data/models/cube.gltf"); - model.WriteMaterialsDescriptorSets (descLayoutModelTextures, - VK.AttachmentType.Color, - VK.AttachmentType.Normal, - VK.AttachmentType.AmbientOcclusion, - VK.AttachmentType.PhysicalProps, - VK.AttachmentType.Emissive); - } - - void buildCommandBuffers () { - for (int i = 0; i < swapChain.ImageCount; ++i) { - cmds[i]?.Free (); - cmds[i] = cmdPool.AllocateCommandBuffer (); - cmds[i].Start (); - -#if DEBUG - statPool.Begin (cmds[i]); - recordDraw (cmds[i], frameBuffers[i]); - statPool.End (cmds[i]); - - debugDraw.RecordDraw (cmds[i], debugFB[i], camera); -#else - recordDraw (cmds[i], frameBuffers[i]); -#endif - - cmds[i].End (); - } - } - void recordDraw (CommandBuffer cmd, Framebuffer fb) { - renderPass.Begin (cmd, fb); - - cmd.SetViewport (fb.Width, fb.Height); - cmd.SetScissor (fb.Width, fb.Height); - - cmd.BindDescriptorSet (gBuffPipeline.Layout, dsMain); - gBuffPipeline.Bind (cmd); - model.Bind (cmd); - model.DrawAll (cmd, gBuffPipeline.Layout); - - renderPass.BeginSubPass (cmd); - - cmd.BindDescriptorSet (composePipeline.Layout, dsGBuff, 2); - composePipeline.Bind (cmd); - - cmd.Draw (3, 1, 0, 0); - - renderPass.End (cmd); - } - -#region update - void updateMatrices () { - camera.AspectRatio = (float)swapChain.Width / swapChain.Height; - - matrices.projection = camera.Projection; - matrices.view = camera.View; - matrices.model = camera.Model; - uboMats.Update (matrices, (uint)Marshal.SizeOf ()); - matrices.view *= Matrix4x4.CreateTranslation (-matrices.view.Translation); - matrices.model = Matrix4x4.Identity; - uboMats.Update (matrices, (uint)Marshal.SizeOf (), (uint)Marshal.SizeOf ()); - } - - public override void UpdateView () { - updateMatrices (); - updateViewRequested = false; - } - public override void Update () { -#if DEBUG - results = statPool.GetResults (); -#endif - } -#endregion - - - - void createGBuff () { - gbColorRough?.Dispose (); - gbEmitMetal?.Dispose (); - gbN?.Dispose (); - gbPos?.Dispose (); - - gbColorRough = new Image (dev, VkFormat.R8g8b8a8Unorm, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbEmitMetal = new Image (dev, VkFormat.R8g8b8a8Unorm, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbN = new Image (dev, VkFormat.R16g16b16a16Sfloat, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbPos = new Image (dev, VkFormat.R16g16b16a16Sfloat, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - - gbColorRough.CreateView (); - gbColorRough.CreateSampler (); - gbEmitMetal.CreateView (); - gbEmitMetal.CreateSampler (); - gbN.CreateView (); - gbN.CreateSampler (); - gbPos.CreateView (); - gbPos.CreateSampler (); - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutGBuff); - uboUpdate.Write (dev, dsGBuff, gbColorRough.Descriptor, - gbEmitMetal.Descriptor, - gbN.Descriptor, - gbPos.Descriptor); - gbColorRough.SetName ("GBuffColorRough"); - gbEmitMetal.SetName ("GBuffEmitMetal"); - gbN.SetName ("GBuffN"); - gbPos.SetName ("GBuffPos"); - } - - protected override void OnResize () { - updateMatrices (); - - if (frameBuffers != null) - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); -#if DEBUG - if (debugFB != null) - for (int i = 0; i < swapChain.ImageCount; ++i) - debugFB[i]?.Dispose (); -#endif - - createGBuff (); - - frameBuffers = new Framebuffer[swapChain.ImageCount]; - debugFB = new Framebuffer[swapChain.ImageCount]; - - for (int i = 0; i < swapChain.ImageCount; ++i) { - frameBuffers[i] = new Framebuffer (renderPass, swapChain.Width, swapChain.Height, new Image[] { - swapChain.images[i], null, gbColorRough, gbEmitMetal, gbN, gbPos}); -#if DEBUG - debugFB[i] = new Framebuffer (debugDraw.RenderPass, swapChain.Width, swapChain.Height,(debugDraw.Samples == VkSampleCountFlags.SampleCount1) - ? new Image[] { swapChain.images[i] } : new Image[] { null, swapChain.images[i] }); - debugFB[i].SetName ("main FB " + i); -#endif - } - - buildCommandBuffers (); - } - - - #region Mouse and keyboard - protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { - switch (key) { - case Key.F1: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.exposure -= 0.3f; - else - matrices.exposure += 0.3f; - break; - case Key.F2: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.gamma -= 0.1f; - else - matrices.gamma += 0.1f; - break; - case Key.F3: - if (camera.Type == Camera.CamType.FirstPerson) - camera.Type = Camera.CamType.LookAt; - else - camera.Type = Camera.CamType.FirstPerson; - Console.WriteLine ($"camera type = {camera.Type}"); - break; - default: - base.onKeyDown (key, scanCode, modifiers); - return; - } - updateViewRequested = true; - } -#endregion - - protected override void Dispose (bool disposing) { - if (disposing) { - if (!isDisposed) { - dev.WaitIdle (); - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); - - gbColorRough.Dispose (); - gbEmitMetal.Dispose (); - gbN.Dispose (); - gbPos.Dispose (); - - gBuffPipeline.Dispose (); - composePipeline.Dispose (); - - descLayoutMain.Dispose (); - descLayoutModelTextures.Dispose (); - descLayoutGBuff.Dispose (); - - uboMats.Dispose (); - model.Dispose (); - envCube.Dispose (); - - descriptorPool.Dispose (); -#if DEBUG - debugDraw.Dispose (); - timestampQPool?.Dispose (); - statPool?.Dispose (); -#endif - } - } - - base.Dispose (disposing); - } - } -} diff --git a/samples/deferred/mainWithDebugDrawer.cs b/samples/deferred/mainWithDebugDrawer.cs deleted file mode 100644 index f95ed0a..0000000 --- a/samples/deferred/mainWithDebugDrawer.cs +++ /dev/null @@ -1,412 +0,0 @@ -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using Glfw; -using VK; -using CVKL; - -namespace deferredDebug { - class Program : VkWindow{ - static void Main (string[] args) { - using (Program vke = new Program ()) { - vke.Run (); - } - } - - VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1; - - public struct Matrices { - public Matrix4x4 projection; - public Matrix4x4 view; - public Matrix4x4 model; - public Vector4 lightPos; - public float gamma; - public float exposure; - } - - public Matrices matrices = new Matrices { - lightPos = new Vector4 (1.0f, 0, 0, 1.0f), - gamma = 1.0f, - exposure = 2.0f, - }; - -#if DEBUG - PipelineStatisticsQueryPool statPool; - TimestampQueryPool timestampQPool; - ulong[] results; -#endif - - protected override void configureEnabledFeatures (ref VkPhysicalDeviceFeatures features) { - base.configureEnabledFeatures (ref features); -#if DEBUG - features.pipelineStatisticsQuery = true; -#endif - } - - Program () : base(true) { - camera.Model = Matrix4x4.CreateRotationX (Utils.DegreesToRadians (-90)) * Matrix4x4.CreateRotationY (Utils.DegreesToRadians (180)); - camera.SetRotation (-0.1f,-0.4f); - camera.SetPosition (0, 0, -3); - - init (); - -#if DEBUG - statPool = new PipelineStatisticsQueryPool (dev, - VkQueryPipelineStatisticFlags.InputAssemblyVertices | - VkQueryPipelineStatisticFlags.InputAssemblyPrimitives | - VkQueryPipelineStatisticFlags.ClippingInvocations | - VkQueryPipelineStatisticFlags.ClippingPrimitives | - VkQueryPipelineStatisticFlags.FragmentShaderInvocations); - - timestampQPool = new TimestampQueryPool (dev); -#endif - } - - Framebuffer[] frameBuffers; - Image gbColorRough, gbEmitMetal, gbN, gbPos; - - DescriptorPool descriptorPool; - DescriptorSetLayout descLayoutMain, descLayoutModelTextures, descLayoutGBuff; - DescriptorSet dsMain, dsGBuff; - - Pipeline gBuffPipeline, composePipeline; - - HostBuffer uboMats; - - RenderPass renderPass; - - Model model; - EnvironmentCube envCube; - - DebugDrawPipeline debugDraw; - Framebuffer[] debugFB; - - void init () { - renderPass = new RenderPass (dev); - renderPass.AddAttachment (swapChain.ColorFormat, VkImageLayout.ColorAttachmentOptimal, VkSampleCountFlags.SampleCount1); - renderPass.AddAttachment (dev.GetSuitableDepthFormat(), VkImageLayout.DepthStencilAttachmentOptimal, samples); - renderPass.AddAttachment (VkFormat.R8g8b8a8Unorm, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R8g8b8a8Unorm, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R16g16b16a16Sfloat, VkImageLayout.ColorAttachmentOptimal); - renderPass.AddAttachment (VkFormat.R16g16b16a16Sfloat, VkImageLayout.ColorAttachmentOptimal); - - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { depthStencil = new VkClearDepthStencilValue (1.0f, 0) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - renderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0.0f, 0.0f, 0.0f) }); - - SubPass[] subpass = { new SubPass (), new SubPass () }; - subpass[0].AddColorReference ( new VkAttachmentReference (2, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (3, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (4, VkImageLayout.ColorAttachmentOptimal), - new VkAttachmentReference (5, VkImageLayout.ColorAttachmentOptimal)); - subpass[0].SetDepthReference (1, VkImageLayout.DepthStencilAttachmentOptimal); - - subpass[1].AddColorReference (0, VkImageLayout.ColorAttachmentOptimal); - subpass[1].AddInputReference ( new VkAttachmentReference (2, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (3, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (4, VkImageLayout.ShaderReadOnlyOptimal), - new VkAttachmentReference (5, VkImageLayout.ShaderReadOnlyOptimal)); - renderPass.AddSubpass (subpass); - - renderPass.AddDependency (Vk.SubpassExternal, 0, - VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.ColorAttachmentOutput, - VkAccessFlags.MemoryRead, VkAccessFlags.ColorAttachmentRead | VkAccessFlags.ColorAttachmentWrite); - renderPass.AddDependency (0, 1, - VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.FragmentShader, - VkAccessFlags.ColorAttachmentWrite, VkAccessFlags.ShaderRead); - renderPass.AddDependency (1, Vk.SubpassExternal, - VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.BottomOfPipe, - VkAccessFlags.ColorAttachmentRead | VkAccessFlags.ColorAttachmentWrite, VkAccessFlags.MemoryRead); - - - descriptorPool = new DescriptorPool (dev, 3, - new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer, 2), - new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, 3), - new VkDescriptorPoolSize (VkDescriptorType.InputAttachment, 4) - ); - - descLayoutMain = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler)); - - descLayoutModelTextures = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler) - ); - - descLayoutGBuff = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.InputAttachment)); - - dsMain = descriptorPool.Allocate (descLayoutMain); - dsGBuff = descriptorPool.Allocate (descLayoutGBuff); - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples); - cfg.Layout = new PipelineLayout (dev, descLayoutMain, descLayoutModelTextures, descLayoutGBuff); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf ()), - new VkPushConstantRange (VkShaderStageFlags.Fragment, sizeof(int), 64) - ); - cfg.RenderPass = renderPass; - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - - cfg.AddVertexBinding (0); - cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat, VkFormat.R32g32Sfloat); - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/pbrtest.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/GBuffPbr.frag.spv"); - - gBuffPipeline = new GraphicPipeline (cfg); - cfg.blendAttachments.Clear (); - cfg.blendAttachments.Add (new VkPipelineColorBlendAttachmentState (false)); - cfg.ResetShadersAndVerticesInfos (); - cfg.SubpassIndex = 1; - cfg.Layout = gBuffPipeline.Layout; - cfg.depthStencilState.depthTestEnable = false; - cfg.depthStencilState.depthWriteEnable = false; - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/FullScreenQuad.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/pbrtest.frag.spv"); - composePipeline = new GraphicPipeline (cfg); - - envCube = new EnvironmentCube (presentQueue, renderPass); - - uboMats = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, (ulong)Marshal.SizeOf () * 2); - uboMats.Map ();//permanent map - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutMain); - uboUpdate.Write (dev, dsMain, uboMats.Descriptor, - envCube.lutBrdf.Descriptor, - envCube.irradianceCube.Descriptor, - envCube.prefilterCube.Descriptor); - uboMats.Descriptor.offset = (ulong)Marshal.SizeOf (); - envCube.WriteDesc (uboMats.Descriptor); -#if DEBUG - debugDraw = new DebugDrawPipeline (dev, descLayoutMain, swapChain.ColorFormat); - debugDraw.AddLine (Vector3.Zero, new Vector3(matrices.lightPos.X,matrices.lightPos.Y,matrices.lightPos.Z)*3, 1, 1, 1); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitX, 1, 0, 0); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitY, 0, 1, 0); - debugDraw.AddLine (Vector3.Zero, Vector3.UnitZ, 0, 0, 1); -#endif - - - model = new Model (presentQueue, "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf"); - //model = new Model (presentQueue, "../data/models/chess.gltf"); - //model = new Model (presentQueue, "../data/models/Sponza/glTF/Sponza.gltf"); - //model = new Model (dev, presentQueue, "../data/models/icosphere.gltf"); - //model = new Model (dev, presentQueue, cmdPool, "../data/models/cube.gltf"); - model.WriteMaterialsDescriptorSets (descLayoutModelTextures, - VK.AttachmentType.Color, - VK.AttachmentType.Normal, - VK.AttachmentType.AmbientOcclusion, - VK.AttachmentType.PhysicalProps, - VK.AttachmentType.Emissive); - } - - void buildCommandBuffers () { - for (int i = 0; i < swapChain.ImageCount; ++i) { - cmds[i]?.Free (); - cmds[i] = cmdPool.AllocateCommandBuffer (); - cmds[i].Start (); - -#if DEBUG - statPool.Begin (cmds[i]); - recordDraw (cmds[i], frameBuffers[i]); - statPool.End (cmds[i]); - - debugDraw.RecordDraw (cmds[i], debugFB[i], camera); -#else - recordDraw (cmds[i], frameBuffers[i]); -#endif - - cmds[i].End (); - } - } - void recordDraw (CommandBuffer cmd, Framebuffer fb) { - renderPass.Begin (cmd, fb); - - cmd.SetViewport (fb.Width, fb.Height); - cmd.SetScissor (fb.Width, fb.Height); - - cmd.BindDescriptorSet (gBuffPipeline.Layout, dsMain); - gBuffPipeline.Bind (cmd); - model.Bind (cmd); - model.DrawAll (cmd, gBuffPipeline.Layout); - - renderPass.BeginSubPass (cmd); - - cmd.BindDescriptorSet (composePipeline.Layout, dsGBuff, 2); - composePipeline.Bind (cmd); - - cmd.Draw (3, 1, 0, 0); - - renderPass.End (cmd); - } - -#region update - void updateMatrices () { - camera.AspectRatio = (float)swapChain.Width / swapChain.Height; - - matrices.projection = camera.Projection; - matrices.view = camera.View; - matrices.model = camera.Model; - uboMats.Update (matrices, (uint)Marshal.SizeOf ()); - matrices.view *= Matrix4x4.CreateTranslation (-matrices.view.Translation); - matrices.model = Matrix4x4.Identity; - uboMats.Update (matrices, (uint)Marshal.SizeOf (), (uint)Marshal.SizeOf ()); - } - - public override void UpdateView () { - updateMatrices (); - updateViewRequested = false; - } - public override void Update () { -#if DEBUG - results = statPool.GetResults (); -#endif - } -#endregion - - - - void createGBuff () { - gbColorRough?.Dispose (); - gbEmitMetal?.Dispose (); - gbN?.Dispose (); - gbPos?.Dispose (); - - gbColorRough = new Image (dev, VkFormat.R8g8b8a8Unorm, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbEmitMetal = new Image (dev, VkFormat.R8g8b8a8Unorm, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbN = new Image (dev, VkFormat.R16g16b16a16Sfloat, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - gbPos = new Image (dev, VkFormat.R16g16b16a16Sfloat, VkImageUsageFlags.InputAttachment | VkImageUsageFlags.ColorAttachment, VkMemoryPropertyFlags.DeviceLocal, swapChain.Width, swapChain.Height); - - gbColorRough.CreateView (); - gbColorRough.CreateSampler (); - gbEmitMetal.CreateView (); - gbEmitMetal.CreateSampler (); - gbN.CreateView (); - gbN.CreateSampler (); - gbPos.CreateView (); - gbPos.CreateSampler (); - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutGBuff); - uboUpdate.Write (dev, dsGBuff, gbColorRough.Descriptor, - gbEmitMetal.Descriptor, - gbN.Descriptor, - gbPos.Descriptor); - gbColorRough.SetName ("GBuffColorRough"); - gbEmitMetal.SetName ("GBuffEmitMetal"); - gbN.SetName ("GBuffN"); - gbPos.SetName ("GBuffPos"); - } - - protected override void OnResize () { - updateMatrices (); - - if (frameBuffers != null) - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); -#if DEBUG - if (debugFB != null) - for (int i = 0; i < swapChain.ImageCount; ++i) - debugFB[i]?.Dispose (); -#endif - - createGBuff (); - - frameBuffers = new Framebuffer[swapChain.ImageCount]; - debugFB = new Framebuffer[swapChain.ImageCount]; - - for (int i = 0; i < swapChain.ImageCount; ++i) { - frameBuffers[i] = new Framebuffer (renderPass, swapChain.Width, swapChain.Height, new Image[] { - swapChain.images[i], null, gbColorRough, gbEmitMetal, gbN, gbPos}); -#if DEBUG - debugFB[i] = new Framebuffer (debugDraw.RenderPass, swapChain.Width, swapChain.Height,(debugDraw.Samples == VkSampleCountFlags.SampleCount1) - ? new Image[] { swapChain.images[i] } : new Image[] { null, swapChain.images[i] }); - debugFB[i].SetName ("main FB " + i); -#endif - } - - buildCommandBuffers (); - } - - - #region Mouse and keyboard - protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { - switch (key) { - case Key.F1: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.exposure -= 0.3f; - else - matrices.exposure += 0.3f; - break; - case Key.F2: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.gamma -= 0.1f; - else - matrices.gamma += 0.1f; - break; - case Key.F3: - if (camera.Type == Camera.CamType.FirstPerson) - camera.Type = Camera.CamType.LookAt; - else - camera.Type = Camera.CamType.FirstPerson; - Console.WriteLine ($"camera type = {camera.Type}"); - break; - default: - base.onKeyDown (key, scanCode, modifiers); - return; - } - updateViewRequested = true; - } -#endregion - - protected override void Dispose (bool disposing) { - if (disposing) { - if (!isDisposed) { - dev.WaitIdle (); - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); - - gbColorRough.Dispose (); - gbEmitMetal.Dispose (); - gbN.Dispose (); - gbPos.Dispose (); - - gBuffPipeline.Dispose (); - composePipeline.Dispose (); - - descLayoutMain.Dispose (); - descLayoutModelTextures.Dispose (); - descLayoutGBuff.Dispose (); - - uboMats.Dispose (); - model.Dispose (); - envCube.Dispose (); - - descriptorPool.Dispose (); -#if DEBUG - foreach (Framebuffer fb in debugFB) - fb.Dispose (); - - debugDraw.Dispose (); - timestampQPool?.Dispose (); - statPool?.Dispose (); -#endif - } - } - - base.Dispose (disposing); - } - } -} diff --git a/samples/deferred/modelWithVkvgStats.cs b/samples/deferred/modelWithVkvgStats.cs deleted file mode 100644 index f4ea123..0000000 --- a/samples/deferred/modelWithVkvgStats.cs +++ /dev/null @@ -1,359 +0,0 @@ -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using Glfw; -using CVKL; -using VK; -using static CVKL.Camera; - -namespace modelWithVkvgStats { - class Program : VkWindow { - - PipelineStatisticsQueryPool statPool; - TimestampQueryPool timestampQPool; - - ulong[] results; - - protected override void configureEnabledFeatures (ref VkPhysicalDeviceFeatures features) { - base.configureEnabledFeatures (ref features); - features.pipelineStatisticsQuery = true; - } - public struct Matrices { - public Matrix4x4 projection; - public Matrix4x4 view; - public Matrix4x4 model; - public Vector4 lightPos; - public float gamma; - public float exposure; - } - - public Matrices matrices = new Matrices { - lightPos = new Vector4 (0.0f, 0.0f, -2.0f, 1.0f), - gamma = 1.0f, - exposure = 2.0f, - }; - - HostBuffer uboMats; - - DescriptorPool descriptorPool; - DescriptorSetLayout descLayoutMatrix; - DescriptorSetLayout descLayoutTextures; - DescriptorSet dsMats; - - GraphicPipeline pipeline; - GraphicPipeline uiPipeline; - Framebuffer[] frameBuffers; - - Model model; - - vkvg.Device vkvgDev; - vkvg.Surface vkvgSurf; - Image vkvgImage; - - void vkvgDraw () { - - using (vkvg.Context ctx = new vkvg.Context (vkvgSurf)) { - ctx.Operator = vkvg.Operator.Clear; - ctx.Paint (); - ctx.Operator = vkvg.Operator.Over; - - ctx.LineWidth = 1; - ctx.SetSource (0.1, 0.1, 0.1, 0.3); - ctx.Rectangle (5.5, 5.5, 400, 250); - ctx.FillPreserve (); - ctx.Flush (); - ctx.SetSource (0.8, 0.8, 0.8); - ctx.Stroke (); - - ctx.FontFace = "mono"; - ctx.FontSize = 10; - int x = 16; - int y = 40, dy = 16; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"fps: {fps,5} ")); - ctx.MoveTo (x + 200, y - 0.5); - ctx.Rectangle (x + 200, y - 8.5, 0.1 * fps, 10); - ctx.SetSource (0.1, 0.9, 0.1); - ctx.Fill (); - ctx.SetSource (0.8, 0.8, 0.8); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"Exposure:{matrices.exposure,5} ")); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"Gamma: {matrices.gamma,5} ")); - if (results == null) - return; - - y += dy*2; - ctx.MoveTo (x, y); - ctx.ShowText ("Pipeline Statistics"); - ctx.MoveTo (x-2, 2.5+y); - ctx.LineTo (x+160, 2.5+y); - ctx.Stroke (); - y += 4; - x += 20; - - for (int i = 0; i < statPool.RequestedStats.Length; i++) { - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{statPool.RequestedStats[i].ToString(),-30} :{results[i],12:0,0} ")); - } - - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{"Elapsed microsecond",-20} :{timestampQPool.ElapsedMiliseconds:0.0000} ")); - } - } - - Program () : base () { - vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex, - vkvg.SampleCount.Sample_4, presentQueue.index); - - camera.Type = CamType.FirstPerson; - camera.Model = Matrix4x4.CreateScale (0.05f) * Matrix4x4.CreateRotationX((float)Math.PI); - //Camera.SetRotation (-0.1f,-0.4f); - camera.SetPosition (0, 2, -3); - - init (); - - model = new Model (presentQueue, "../data/models/Sponza/glTF/Sponza.gltf"); - model.WriteMaterialsDescriptorSets (descLayoutTextures, - VK.AttachmentType.Color, - VK.AttachmentType.Normal, - VK.AttachmentType.AmbientOcclusion, - VK.AttachmentType.PhysicalProps, - VK.AttachmentType.Emissive); - } - - void init (VkSampleCountFlags samples = VkSampleCountFlags.SampleCount4) { - descriptorPool = new DescriptorPool (dev, 2, - new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer), - new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler) - ); - - descLayoutMatrix = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex|VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler) - ); - - descLayoutTextures = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler) - ); - - dsMats = descriptorPool.Allocate (descLayoutMatrix); - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples); - - cfg.Layout = new PipelineLayout (dev, descLayoutMatrix, descLayoutTextures); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf ()), - new VkPushConstantRange (VkShaderStageFlags.Fragment, (uint)Marshal.SizeOf (), 64) - ); - cfg.RenderPass = new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples); - - cfg.AddVertexBinding (0); - cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat, VkFormat.R32g32Sfloat); - - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/pbrtest.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/pbrtest.frag.spv"); - - pipeline = new GraphicPipeline (cfg); - - cfg.ResetShadersAndVerticesInfos (); - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/FullScreenQuad.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/simpletexture.frag.spv"); - - cfg.blendAttachments[0] = new VkPipelineColorBlendAttachmentState (true); - - uiPipeline = new GraphicPipeline (cfg); - - uboMats = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, (ulong)Marshal.SizeOf()); - uboMats.Map ();//permanent map - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMats, descLayoutMatrix.Bindings[0]); - uboUpdate.Write (dev, uboMats.Descriptor); - - cfg.Layout.SetName ("Main Pipeline layout"); - uboMats.SetName ("uboMats"); - descriptorPool.SetName ("main pool"); - descLayoutTextures.SetName ("descLayoutTextures"); - - statPool = new PipelineStatisticsQueryPool (dev, - VkQueryPipelineStatisticFlags.InputAssemblyVertices | - VkQueryPipelineStatisticFlags.InputAssemblyPrimitives | - VkQueryPipelineStatisticFlags.ClippingInvocations | - VkQueryPipelineStatisticFlags.ClippingPrimitives | - VkQueryPipelineStatisticFlags.FragmentShaderInvocations); - - timestampQPool = new TimestampQueryPool (dev); - - } - - void buildCommandBuffers () { - for (int i = 0; i < swapChain.ImageCount; ++i) { - cmds[i]?.Free (); - - cmds[i] = cmdPool.AllocateCommandBuffer (); - cmds[i].Start (); - - statPool.Begin (cmds[i]); - cmds[i].BeginRegion ("draw" + i, 0.5f, 1f, 0f); - cmds[i].Handle.SetDebugMarkerName (dev, "cmd Draw" + i); - recordDraw (cmds[i], frameBuffers[i]); - cmds[i].EndRegion (); - statPool.End (cmds[i]); - cmds[i].End (); - } - } - void recordDraw (CommandBuffer cmd, Framebuffer fb) { - cmd.BeginRegion ("models", 0.5f, 1f, 0f); - pipeline.RenderPass.Begin (cmd, fb); - - cmd.SetViewport (fb.Width, fb.Height); - cmd.SetScissor (fb.Width, fb.Height); - - cmd.BindDescriptorSet (pipeline.Layout, dsMats); - pipeline.Bind (cmd); - model.Bind (cmd); - model.DrawAll (cmd, pipeline.Layout); - - cmd.EndRegion (); - cmd.BeginRegion ("vkvg", 0.5f, 1f, 0f); - uiPipeline.Bind (cmd); - - timestampQPool.Start (cmd); - - vkvgImage.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ColorAttachmentOptimal, VkImageLayout.ShaderReadOnlyOptimal, - VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.FragmentShader); - - cmd.Draw (3, 1, 0, 0); - - vkvgImage.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ShaderReadOnlyOptimal, VkImageLayout.ColorAttachmentOptimal, - VkPipelineStageFlags.FragmentShader, VkPipelineStageFlags.BottomOfPipe); - - timestampQPool.End (cmd); - - pipeline.RenderPass.End (cmd); - cmd.EndRegion (); - } - - #region update - void updateMatrices () { - - camera.AspectRatio = (float)swapChain.Width / swapChain.Height; - - matrices.projection = camera.Projection; - matrices.view = camera.View; - matrices.model = camera.Model; - uboMats.Update (matrices, (uint)Marshal.SizeOf ()); - } - - public override void UpdateView () { - updateMatrices (); - updateViewRequested = false; - } - public override void Update () { - results = statPool.GetResults (); - vkvgDraw (); - } - #endregion - - #region mouse and keyboard - protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { - switch (key) { - case Key.F1: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.exposure -= 0.3f; - else - matrices.exposure += 0.3f; - break; - case Key.F2: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.gamma -= 0.1f; - else - matrices.gamma += 0.1f; - break; - case Key.F3: - if (camera.Type == CamType.FirstPerson) - camera.Type = CamType.LookAt; - else - camera.Type = CamType.FirstPerson; - break; - default: - base.onKeyDown (key, scanCode, modifiers); - return; - } - updateViewRequested = true; - } - #endregion - - protected override void OnResize () { - - vkvgImage?.Dispose (); - vkvgSurf?.Dispose (); - vkvgSurf = new vkvg.Surface (vkvgDev, (int)swapChain.Width, (int)swapChain.Height); - vkvgImage = new Image (dev, new VkImage ((ulong)vkvgSurf.VkImage.ToInt64 ()), VkFormat.B8g8r8a8Unorm, - VkImageUsageFlags.ColorAttachment, (uint)vkvgSurf.Width, (uint)vkvgSurf.Height); - vkvgImage.CreateView (VkImageViewType.ImageView2D, VkImageAspectFlags.Color); - vkvgImage.CreateSampler (VkFilter.Nearest,VkFilter.Nearest, VkSamplerMipmapMode.Nearest, VkSamplerAddressMode.ClampToBorder); - - vkvgImage.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal; - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMats, descLayoutMatrix.Bindings[1]); - uboUpdate.Write (dev, vkvgImage.Descriptor); - - updateMatrices (); - - if (frameBuffers!=null) - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); - - frameBuffers = new Framebuffer[swapChain.ImageCount]; - - for (int i = 0; i < swapChain.ImageCount; ++i) { - frameBuffers[i] = new Framebuffer (pipeline.RenderPass, swapChain.Width, swapChain.Height, - (pipeline.Samples == VkSampleCountFlags.SampleCount1) ? new Image[] { - swapChain.images[i], - null - } : new Image[] { - null, - null, - swapChain.images[i] - }); - frameBuffers[i].SetName ("main FB " + i); - - } - - buildCommandBuffers (); - } - - protected override void Dispose (bool disposing) { - if (disposing) { - if (!isDisposed) { - dev.WaitIdle (); - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); - model.Dispose (); - pipeline.Dispose (); - descLayoutMatrix.Dispose (); - descLayoutTextures.Dispose (); - descriptorPool.Dispose (); - - uboMats.Dispose (); - - vkvgSurf?.Dispose (); - vkvgDev.Dispose (); - - timestampQPool.Dispose (); - statPool.Dispose (); - } - } - - base.Dispose (disposing); - } - } -} diff --git a/samples/pbr/PbrPipeline.cs b/samples/pbr/PbrPipeline.cs index 28e3760..040fd62 100644 --- a/samples/pbr/PbrPipeline.cs +++ b/samples/pbr/PbrPipeline.cs @@ -55,7 +55,7 @@ namespace vke { descriptorPool = new DescriptorPool (Dev, 2, new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer, 2), - new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, 9) + new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, 8) ); descLayoutMain = new DescriptorSetLayout (Dev, @@ -63,8 +63,7 @@ namespace vke { new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), - new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer), - new VkDescriptorSetLayoutBinding (5, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler));//ui image + new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer)); descLayoutTextures = new DescriptorSetLayout (Dev, new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler), @@ -91,6 +90,8 @@ namespace vke { init (cfg); + cfg.DisposeShaders (); + dsMain = descriptorPool.Allocate (descLayoutMain); envCube = new Environment.EnvironmentCube (cubemapPathes[0], layout, staggingQ, RenderPass); diff --git a/samples/pbr/main.cs b/samples/pbr/main.cs index 9ce48eb..3fe3246 100644 --- a/samples/pbr/main.cs +++ b/samples/pbr/main.cs @@ -26,15 +26,7 @@ namespace pbrSample { vke.Run (); } } - protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures enabled_features) { - base.configureEnabledFeatures (available_features, ref enabled_features); -#if PIPELINE_STATS - features.pipelineStatisticsQuery = true; -#endif - enabled_features.samplerAnisotropy = available_features.samplerAnisotropy; - } - - VkSampleCountFlags samples = VkSampleCountFlags.SampleCount8; + VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1; FrameBuffers frameBuffers; PBRPipeline pbrPipeline; @@ -75,95 +67,8 @@ namespace pbrSample { DebugView currentDebugView = DebugView.none; -#if PIPELINE_STATS - PipelineStatisticsQueryPool statPool; - TimestampQueryPool timestampQPool; - ulong[] results; -#endif bool queryUpdatePrefilCube, showDebugImg; -#if WITH_VKVG - //DescriptorSet dsDebugImg; - //void initDebugImg () { - // dsDebugImg = descriptorPool.Allocate (descLayoutMain); - // pbrPipeline.envCube.debugImg.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal; - // DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsDebugImg, descLayoutMain); - // uboUpdate.Write (dev, pbrPipeline.envCube.debugImg.Descriptor); - //} - - VkvgPipeline.VkvgPipeline vkvgPipeline; - - void vkvgDraw () { - using (vkvg.Context ctx = vkvgPipeline.CreateContext ()) { - ctx.Clear (); - - ctx.LineWidth = 1; - ctx.SetSource (0.1, 0.1, 0.1, 0.8); - ctx.Rectangle (5.5, 5.5, 320, 300); - ctx.FillPreserve (); - ctx.Flush (); - ctx.SetSource (0.8, 0.8, 0.8); - ctx.Stroke (); - - ctx.FontFace = "mono"; - ctx.FontSize = 8; - int x = 16; - int y = 40, dy = 16; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"fps: {fps,5} ")); - ctx.MoveTo (x + 200, y - 0.5); - ctx.Rectangle (x + 200, y - 8.5, 0.1 * fps, 10); - ctx.SetSource (0.1, 0.9, 0.1); - ctx.Fill (); - ctx.SetSource (0.8, 0.8, 0.8); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"Exposure:{pbrPipeline.matrices.exposure,5} ")); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"Gamma: {pbrPipeline.matrices.gamma,5} ")); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"Light pos: {lightPos.ToString ()} ")); - -#if PIPELINE_STATS - if (results == null) - return; - - y += dy*2; - ctx.MoveTo (x, y); - ctx.ShowText ("Pipeline Statistics"); - ctx.MoveTo (x-2, 4.5+y); - ctx.LineTo (x+160, 4.5+y); - ctx.Stroke (); - y += 4; - x += 20; - - for (int i = 0; i < statPool.RequestedStats.Length; i++) { - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{statPool.RequestedStats[i].ToString(),-30} :{results[i],12:0,0} ")); - } - /*y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{"Elapsed microsecond",-20} :{timestampQPool.ElapsedMiliseconds:0.0000} "));*/ -#endif - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{"Debug draw (numpad 0->6)",-30} : {currentDebugView.ToString ()} ")); - /*y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{"Debug Prefil Face: (f)",-30} : {pbrPipeline.envCube.debugFace.ToString ()} ")); - y += dy; - ctx.MoveTo (x, y); - ctx.ShowText (string.Format ($"{"Debug Prefil Mip: (m)",-30} : {pbrPipeline.envCube.debugMip.ToString ()} ")); - */ - vkvgPipeline.DrawResources (ctx, (int)Width, (int)Height); - } - } -#endif - - Vector4 lightPos = new Vector4 (1, 0, 0, 0); uint curModelIndex = 0; @@ -178,21 +83,6 @@ namespace pbrSample { new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples)); loadCurrentModel (); - -#if PIPELINE_STATS - statPool = new PipelineStatisticsQueryPool (dev, - VkQueryPipelineStatisticFlags.InputAssemblyVertices | - VkQueryPipelineStatisticFlags.InputAssemblyPrimitives | - VkQueryPipelineStatisticFlags.ClippingInvocations | - VkQueryPipelineStatisticFlags.ClippingPrimitives | - VkQueryPipelineStatisticFlags.FragmentShaderInvocations); - - timestampQPool = new TimestampQueryPool (dev); -#endif - -#if WITH_VKVG - vkvgPipeline = new VkvgPipeline.VkvgPipeline (instance, dev, presentQueue, pbrPipeline); -#endif } bool rebuildBuffers, reloadModel; @@ -201,14 +91,7 @@ namespace pbrSample { for (int i = 0; i < swapChain.ImageCount; ++i) { cmds[i]?.Free (); cmds[i] = cmdPool.AllocateAndStart (); -#if PIPELINE_STATS - statPool.Begin (cmds[i]); - recordDraw (cmds[i], frameBuffers[i]); - statPool.End (cmds[i]); -#else recordDraw (cmds[i], frameBuffers[i]); -#endif - cmds[i].End (); } } @@ -219,10 +102,6 @@ namespace pbrSample { cmd.SetScissor (fb.Width, fb.Height); pbrPipeline.RecordDraw (cmd); - -#if WITH_VKVG - vkvgPipeline.RecordDraw (cmd); -#endif pbrPipeline.RenderPass.End (cmd); } @@ -259,16 +138,10 @@ namespace pbrSample { reloadModel = false; rebuildBuffers = true; } -#if PIPELINE_STATS - results = statPool.GetResults (); -#endif if (rebuildBuffers) { buildCommandBuffers (); rebuildBuffers = false; } -#if WITH_VKVG - vkvgDraw (); -#endif } #endregion @@ -277,11 +150,6 @@ namespace pbrSample { base.OnResize (); dev.WaitIdle (); -#if WITH_VKVG - vkvgPipeline.Resize ((int)swapChain.Width, (int)swapChain.Height, - new DescriptorSetWrites (pbrPipeline.dsMain, pbrPipeline.Layout.DescriptorSetLayouts[0].Bindings[5])); -#endif - UpdateView (); frameBuffers?.Dispose (); @@ -313,32 +181,7 @@ namespace pbrSample { else curModelIndex = curModelIndex < (uint)modelPathes.Length - 1 ? curModelIndex + 1 : 0; reloadModel = true; - break; - /* - case Key.F: - if (modifiers.HasFlag (Modifier.Shift)) { - pbrPipeline.envCube.debugFace --; - if (pbrPipeline.envCube.debugFace < 0) - pbrPipeline.envCube.debugFace = 5; - } else { - pbrPipeline.envCube.debugFace ++; - if (pbrPipeline.envCube.debugFace > 5) - pbrPipeline.envCube.debugFace = 0; - } - queryUpdatePrefilCube = updateViewRequested = true; - break; - case Key.M: - if (modifiers.HasFlag (Modifier.Shift)) { - pbrPipeline.envCube.debugMip --; - if (pbrPipeline.envCube.debugMip < 0) - pbrPipeline.envCube.debugMip = (int)pbrPipeline.envCube.prefilterCube.CreateInfo.mipLevels - 1; - } else { - pbrPipeline.envCube.debugMip ++; - if (pbrPipeline.envCube.debugMip > pbrPipeline.envCube.prefilterCube.CreateInfo.mipLevels) - pbrPipeline.envCube.debugMip = 0; - } - queryUpdatePrefilCube = updateViewRequested = true; - break;*/ + break; case Key.P: showDebugImg = !showDebugImg; queryUpdatePrefilCube = updateViewRequested = true; @@ -439,14 +282,6 @@ namespace pbrSample { dev.WaitIdle (); frameBuffers?.Dispose (); pbrPipeline.Dispose (); -#if WITH_VKVG - vkvgPipeline.Dispose (); -#endif - -#if PIPELINE_STATS - timestampQPool?.Dispose (); - statPool?.Dispose (); -#endif } } diff --git a/samples/pbr/pbr.csproj b/samples/pbr/pbr.csproj index 1648b09..cb7b729 100644 --- a/samples/pbr/pbr.csproj +++ b/samples/pbr/pbr.csproj @@ -12,8 +12,7 @@ - - + diff --git a/samples/pbr/ui/fps.crow b/samples/pbr/ui/fps.crow deleted file mode 100755 index 351f059..0000000 --- a/samples/pbr/ui/fps.crow +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - diff --git a/vke.net.sln b/vke.net.sln index 38f81d5..7fcb6d8 100644 --- a/vke.net.sln +++ b/vke.net.sln @@ -48,10 +48,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "deferred", "samples\deferre EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pbr", "samples\pbr\pbr.csproj", "{7EB2430B-6BC0-4AE9-B1FA-57C3DB2AE1C5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "glow", "samples\glow\glow.csproj", "{82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "crowWin", "samples\crowWin\crowWin.csproj", "{A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CrowWindow", "addons\CrowWindow\CrowWindow.csproj", "{5AE929DA-4EA2-4BD9-BA38-7258AA9D2E4D}" EndProject Global @@ -204,26 +200,6 @@ Global {7EB2430B-6BC0-4AE9-B1FA-57C3DB2AE1C5}.Release|Any CPU.Build.0 = Release|Any CPU {7EB2430B-6BC0-4AE9-B1FA-57C3DB2AE1C5}.ReleaseSpirVTasks|Any CPU.ActiveCfg = Release|Any CPU {7EB2430B-6BC0-4AE9-B1FA-57C3DB2AE1C5}.ReleaseSpirVTasks|Any CPU.Build.0 = Release|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.BuildPackages|Any CPU.ActiveCfg = Release|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.BuildPackages|Any CPU.Build.0 = Release|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.DebugCrow|Any CPU.ActiveCfg = Debug|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.DebugCrow|Any CPU.Build.0 = Debug|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.Release|Any CPU.Build.0 = Release|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.ReleaseSpirVTasks|Any CPU.ActiveCfg = Debug|Any CPU - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE}.ReleaseSpirVTasks|Any CPU.Build.0 = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.BuildPackages|Any CPU.ActiveCfg = Release|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.BuildPackages|Any CPU.Build.0 = Release|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.DebugCrow|Any CPU.ActiveCfg = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.DebugCrow|Any CPU.Build.0 = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.Release|Any CPU.Build.0 = Release|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.ReleaseSpirVTasks|Any CPU.ActiveCfg = Debug|Any CPU - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536}.ReleaseSpirVTasks|Any CPU.Build.0 = Debug|Any CPU {5AE929DA-4EA2-4BD9-BA38-7258AA9D2E4D}.BuildPackages|Any CPU.ActiveCfg = Release|Any CPU {5AE929DA-4EA2-4BD9-BA38-7258AA9D2E4D}.BuildPackages|Any CPU.Build.0 = Release|Any CPU {5AE929DA-4EA2-4BD9-BA38-7258AA9D2E4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -252,8 +228,6 @@ Global {8185163E-A67C-4C0E-8548-67E2A9F16309} = {16439374-B8DB-4643-8116-EB3358B49A12} {D9A41382-444E-44ED-B638-3D8F06F2FBC2} = {16439374-B8DB-4643-8116-EB3358B49A12} {7EB2430B-6BC0-4AE9-B1FA-57C3DB2AE1C5} = {16439374-B8DB-4643-8116-EB3358B49A12} - {82947B19-1EFA-4DF9-8BB8-56B0B48F3FBE} = {16439374-B8DB-4643-8116-EB3358B49A12} - {A05AAF6C-E925-4EF1-B051-A6DDA5BCB536} = {16439374-B8DB-4643-8116-EB3358B49A12} {5AE929DA-4EA2-4BD9-BA38-7258AA9D2E4D} = {4AA67AB0-C331-4CB2-9C00-B74F5DE31658} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/vke/src/base/ComputePipeline.cs b/vke/src/base/ComputePipeline.cs index 1d61ad8..b3c6ec5 100644 --- a/vke/src/base/ComputePipeline.cs +++ b/vke/src/base/ComputePipeline.cs @@ -39,8 +39,6 @@ namespace vke { info.basePipelineIndex = 0; Utils.CheckResult (Vk.vkCreateComputePipelines (Dev.VkDev, Cache == null ? VkPipelineCache.Null : Cache.handle, 1, ref info, IntPtr.Zero, out handle)); - - Dev.DestroyShaderModule (info.stage.module); } } base.Activate (); diff --git a/vke/src/base/Device.cs b/vke/src/base/Device.cs index 2151656..fca29f2 100644 --- a/vke/src/base/Device.cs +++ b/vke/src/base/Device.cs @@ -174,8 +174,9 @@ namespace vke { throw new InvalidOperationException ("Could not find a suitable memory type!"); } public VkFormat GetSuitableDepthFormat () { - VkFormat[] formats = new VkFormat[] { VkFormat.D32SfloatS8Uint, VkFormat.D32Sfloat, VkFormat.D24UnormS8Uint, VkFormat.D16UnormS8Uint, VkFormat.D16Unorm }; + VkFormat[] formats = new VkFormat[] {VkFormat.D32SfloatS8Uint, VkFormat.D32Sfloat, VkFormat.D24UnormS8Uint, VkFormat.D16UnormS8Uint, VkFormat.D16Unorm }; foreach (VkFormat f in formats) { + Console.WriteLine ( (int)phy.GetFormatProperties (f).optimalTilingFeatures); if (phy.GetFormatProperties (f).optimalTilingFeatures.HasFlag(VkFormatFeatureFlags.DepthStencilAttachment)) return f; } -- 2.47.3