diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2019-08-24 15:08:18 +0200 |
|---|---|---|
| committer | j-p <jp_bruyere@hotmail.com> | 2019-08-28 11:32:06 +0200 |
| commit | f60141a45a7c52cf40eca7f27ff16f060e556179 (patch) | |
| tree | 0e2c1af3ec94238d3b159a59c8f9160f72323239 | |
| parent | 691f9ec0f508c903ace2a7d9c7833907503c7914 (diff) | |
ktx debug
| -rw-r--r-- | samples/Model/main.cs | 7 | ||||
| -rw-r--r-- | samples/Model/shaders/model.frag | 18 | ||||
| -rw-r--r-- | samples/Model/shaders/model.vert | 16 | ||||
| -rw-r--r-- | samples/TexturedCube/TexturedCube.csproj | 2 | ||||
| -rw-r--r-- | samples/TexturedCube/main.cs | 44 | ||||
| -rw-r--r-- | samples/TexturedCube/shaders/skybox.frag | 2 | ||||
| -rw-r--r-- | samples/deferred/deferredPbrRenderer.cs | 2 | ||||
| -rw-r--r-- | samples/deferred/main.cs | 7 | ||||
| -rw-r--r-- | vke/CVKL.csproj | 4 | ||||
| -rw-r--r-- | vke/src/base/Image.cs | 23 | ||||
| -rw-r--r-- | vke/src/ktx.cs | 47 | ||||
| -rw-r--r-- | vke/src/model/glTFLoader.cs | 2 |
12 files changed, 97 insertions, 77 deletions
diff --git a/samples/Model/main.cs b/samples/Model/main.cs index f941e5e..93d5d72 100644 --- a/samples/Model/main.cs +++ b/samples/Model/main.cs @@ -226,7 +226,12 @@ namespace ModelSample { //helmet.Meshes cmd.BindVertexBuffer (vbo); cmd.BindIndexBuffer (ibo, IndexBufferType); - cmd.DrawIndexed ((uint)Meshes[0].Primitives[0].indexCount); + foreach (Mesh m in Meshes) { + foreach (var p in m.Primitives) { + cmd.DrawIndexed (p.indexCount,1,p.indexBase,p.vertexBase); + } + } + //foreach (Scene sc in Scenes) { // foreach (Node node in sc.Root.Children) // RenderNode (cmd, pipelineLayout, node, sc.Root.localMatrix, shadowPass); diff --git a/samples/Model/shaders/model.frag b/samples/Model/shaders/model.frag index e0b131b..7083a06 100644 --- a/samples/Model/shaders/model.frag +++ b/samples/Model/shaders/model.frag @@ -10,10 +10,11 @@ layout (set = 1, binding = 2) uniform sampler2D samplerOcclusion; layout (location = 0) in vec2 inUV; layout (location = 1) in vec3 inN; layout (location = 2) in vec3 inV;//ViewDir +layout (location = 3) in vec3 inL; layout (location = 0) out vec4 outFragColor; -vec3 light = vec3(1.0,.0,1.0); + // http://www.thetenthplanet.de/archives/1180 mat3 cotangent_frame(vec3 N, vec3 p, vec2 uv) @@ -46,8 +47,19 @@ vec3 perturb_normal( vec3 N, vec3 V, vec2 texcoord ) } - void main() +{ + vec4 color = texture(samplerColor, inUV); + + vec3 N = normalize(inN); + vec3 L = normalize(inL); + vec3 V = normalize(inV); + vec3 R = reflect(-L, N); + vec3 diffuse = max(dot(N, L), 0.0) * vec3(0.9); + vec3 specular = pow(max(dot(R, V), 0.0), 16.0) * vec3(0.75); + outFragColor = vec4(diffuse * color.rgb + specular, 1.0); +} +/*void main() { vec4 diff = texture(samplerColor, inUV); @@ -69,4 +81,4 @@ void main() //outFragColor = vec4(1.0); // //outFragColor = vec4(diff.rgb , 1.0); // outFragColor = vec4(diff.rgb + amb + spec , diff.a); // -}
\ No newline at end of file +}*/
\ No newline at end of file diff --git a/samples/Model/shaders/model.vert b/samples/Model/shaders/model.vert index bfcc2a4..fae6be3 100644 --- a/samples/Model/shaders/model.vert +++ b/samples/Model/shaders/model.vert @@ -17,6 +17,7 @@ layout (binding = 0) uniform UBO layout (location = 0) out vec2 outUV; layout (location = 1) out vec3 outN; layout (location = 2) out vec3 outV;//ViewDir +layout (location = 3) out vec3 outL; out gl_PerVertex { @@ -27,18 +28,23 @@ layout(push_constant) uniform PushConsts { mat4 model; } pc; +vec3 light = vec3(10.0,.0,-10.0); + void main() { outUV = inUV; mat4 mod = ubo.modelMatrix;// * pc.model; vec4 pos = mod * vec4(inPos.xyz, 1.0); + vec3 lPos = mat3(mod) * light; + + //outN = normalize(transpose(inverse(mat3(mod))) * inNormal); + outN = mat3(mod)* inNormal; + + //mat4 viewInv = inverse(ubo.viewMatrix); - outN = normalize(transpose(inverse(mat3(mod))) * inNormal); - //outN = normalize(mat3(mod)* inNormal); + outV = -pos.xyz;//normalize(vec3(viewInv * vec4(0.0, 0.0, 0.0, 1.0) - pos)); + outL = lPos - pos.xyz; - mat4 viewInv = inverse(ubo.viewMatrix); - outV = -(ubo.viewMatrix * pos).xyz;//normalize(vec3(viewInv * vec4(0.0, 0.0, 0.0, 1.0) - pos)); - gl_Position = ubo.projectionMatrix * ubo.viewMatrix * pos; } diff --git a/samples/TexturedCube/TexturedCube.csproj b/samples/TexturedCube/TexturedCube.csproj index 8e5fa63..2caad9c 100644 --- a/samples/TexturedCube/TexturedCube.csproj +++ b/samples/TexturedCube/TexturedCube.csproj @@ -1,4 +1,4 @@ <Project Sdk="Microsoft.NET.Sdk"> - <Import Project="$(RootDirectory)netfx.props" /> + <Import Project="$(RootDirectory)netfx.props" /> </Project> diff --git a/samples/TexturedCube/main.cs b/samples/TexturedCube/main.cs index 4ef2927..435d527 100644 --- a/samples/TexturedCube/main.cs +++ b/samples/TexturedCube/main.cs @@ -10,9 +10,9 @@ namespace TextureCube { class Program : VkWindow { static void Main (string[] args) { - Instance.VALIDATION = true; + /*Instance.VALIDATION = true; Instance.DEBUG_UTILS = true; - Instance.RENDER_DOC_CAPTURE = true; + Instance.RENDER_DOC_CAPTURE = true;*/ using (Program vke = new Program ()) { vke.Run (); @@ -83,7 +83,7 @@ namespace TextureCube { 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, }; - int currentImgIndex = 0; + int currentImgIndex = 4; string[] imgPathes = { "data/textures/uffizi_cube.ktx", "data/textures/papermill.ktx", @@ -92,6 +92,7 @@ namespace TextureCube { "data/textures/pisa_cube.ktx", }; + VkSampleCountFlags samples = VkSampleCountFlags.SampleCount1; Program () : base () { vbo = new GPUBuffer<float> (presentQueue, cmdPool, VkBufferUsageFlags.VertexBuffer, g_vertex_buffer_data); @@ -105,7 +106,7 @@ namespace TextureCube { new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex, VkDescriptorType.UniformBuffer), new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler)); - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, VkSampleCountFlags.SampleCount1); + GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples); cfg.Layout = new PipelineLayout (dev, dsLayout); cfg.RenderPass = new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), cfg.Samples); @@ -127,7 +128,8 @@ namespace TextureCube { uboUpdate.Write (dev, uboMats.Descriptor); loadTexture (imgPathes[currentImgIndex]); - updateTextureSet (); + if (nextTexture != null) + updateTextureSet (); } void buildCommandBuffers () { @@ -158,12 +160,17 @@ namespace TextureCube { //in the thread of the keyboard void loadTexture (string path) { - if (path.EndsWith("ktx", StringComparison.OrdinalIgnoreCase)) - nextTexture = KTX.KTX.Load (presentQueue, cmdPool, path, - VkImageUsageFlags.Sampled, VkMemoryPropertyFlags.DeviceLocal, true); - else - nextTexture = Image.Load (dev, path); - updateViewRequested = true; + try { + if (path.EndsWith ("ktx", StringComparison.OrdinalIgnoreCase)) + nextTexture = KTX.KTX.Load (presentQueue, cmdPool, path, + VkImageUsageFlags.Sampled, VkMemoryPropertyFlags.DeviceLocal, true); + else + nextTexture = Image.Load (dev, path); + updateViewRequested = true; + } catch (Exception ex) { + Console.WriteLine (ex); + nextTexture = null; + } } //in the main vulkan thread @@ -180,7 +187,7 @@ namespace TextureCube { nextTexture = null; } void updateMatrices () { - matrices.projection = Matrix4x4.CreatePerspectiveFieldOfView (Utils.DegreesToRadians (60f), (float)swapChain.Width / (float)swapChain.Height, 0.1f, 256.0f); + matrices.projection = Matrix4x4.CreatePerspectiveFieldOfView (Utils.DegreesToRadians (60f), (float)swapChain.Width / (float)swapChain.Height, 0.1f, 5.0f); matrices.view = Matrix4x4.CreateFromAxisAngle (Vector3.UnitZ, rotZ) * Matrix4x4.CreateFromAxisAngle (Vector3.UnitY, rotY) * @@ -189,14 +196,12 @@ namespace TextureCube { uboMats.Update (matrices, (uint)Marshal.SizeOf<Matrices> ()); } - protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures features) { - base.configureEnabledFeatures (available_features, ref features); - features.textureCompressionBC = available_features.textureCompressionBC; + protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures enabled_features) { + base.configureEnabledFeatures (available_features, ref enabled_features); + enabled_features.textureCompressionBC = available_features.textureCompressionBC; } public override void UpdateView () { - //loadTexture (imgPathes[currentImgIndex]); - if (nextTexture != null) { dev.WaitIdle (); updateTextureSet (); @@ -205,7 +210,7 @@ namespace TextureCube { updateMatrices (); updateViewRequested = false; - //System.Threading.Thread.Sleep (1000); + dev.WaitIdle (); } protected override void onMouseMove (double xPos, double yPos) { @@ -236,6 +241,7 @@ namespace TextureCube { } protected override void OnResize () { + dev.WaitIdle (); updateMatrices (); @@ -258,6 +264,8 @@ namespace TextureCube { } buildCommandBuffers (); + + dev.WaitIdle (); } protected override void Dispose (bool disposing) { diff --git a/samples/TexturedCube/shaders/skybox.frag b/samples/TexturedCube/shaders/skybox.frag index fa10f82..bdd272d 100644 --- a/samples/TexturedCube/shaders/skybox.frag +++ b/samples/TexturedCube/shaders/skybox.frag @@ -11,5 +11,5 @@ layout (location = 0) out vec4 outFragColor; void main() { - outFragColor = texture(skybox, TexCoords); + outFragColor = textureLod(skybox, TexCoords,0); } diff --git a/samples/deferred/deferredPbrRenderer.cs b/samples/deferred/deferredPbrRenderer.cs index edb50a9..f88dffe 100644 --- a/samples/deferred/deferredPbrRenderer.cs +++ b/samples/deferred/deferredPbrRenderer.cs @@ -12,7 +12,7 @@ namespace deferred { public static int MAX_MATERIAL_COUNT = 8; public static VkSampleCountFlags NUM_SAMPLES = VkSampleCountFlags.SampleCount1; - public static VkFormat HDR_FORMAT = VkFormat.R16g16b16a16Sfloat;// VkFormat.R32g32b32a32Sfloat; + public static VkFormat HDR_FORMAT = VkFormat.R16g16b16a16Sfloat; public static VkFormat MRT_FORMAT = VkFormat.R16g16b16a16Sfloat; public static bool TEXTURE_ARRAY; diff --git a/samples/deferred/main.cs b/samples/deferred/main.cs index ccd5efc..fd815b0 100644 --- a/samples/deferred/main.cs +++ b/samples/deferred/main.cs @@ -14,6 +14,9 @@ namespace deferred { DeferredPbrRenderer.TEXTURE_ARRAY = true; DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount1; + DeferredPbrRenderer.HDR_FORMAT = VkFormat.R32g32b32a32Sfloat; + DeferredPbrRenderer.MRT_FORMAT = VkFormat.R32g32b32a32Sfloat; + DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount1; PbrModelTexArray.TEXTURE_DIM = 1024; @@ -63,12 +66,12 @@ namespace deferred { Deferred () : base() { if (Instance.DEBUG_UTILS) - dbgmsg = new CVKL.DebugUtils.Messenger (instance); + dbgmsg = new CVKL.DebugUtils.Messenger (instance, VkDebugReportFlagsEXT.InformationEXT); camera = new Camera (Utils.DegreesToRadians (45f), 1f, 0.1f, 16f); camera.SetPosition (0, 0, 2); - renderer = new DeferredPbrRenderer (dev, swapChain, presentQueue, cubemapPathes[0], camera.NearPlane, camera.FarPlane); + 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)); diff --git a/vke/CVKL.csproj b/vke/CVKL.csproj index a5bf978..850a3a2 100644 --- a/vke/CVKL.csproj +++ b/vke/CVKL.csproj @@ -27,12 +27,12 @@ <DebugType>full</DebugType> <Optimize>false</Optimize> <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> - <DefineConstants>MEMORY_POOLS;NETSTANDARD;NETSTANDARD2_0;DEBUG;NETFRAMEWORK;NET471</DefineConstants> + <DefineConstants>_MEMORY_POOLS;NETSTANDARD;NETSTANDARD2_0;DEBUG;NETFRAMEWORK;NET471</DefineConstants> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <Optimize>true</Optimize> - <DefineConstants>MEMORY_POOLS</DefineConstants> + <DefineConstants>_MEMORY_POOLS</DefineConstants> </PropertyGroup> <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))"> diff --git a/vke/src/base/Image.cs b/vke/src/base/Image.cs index ddabb06..4e3c2d0 100644 --- a/vke/src/base/Image.cs +++ b/vke/src/base/Image.cs @@ -107,6 +107,29 @@ namespace CVKL { public static uint ComputeMipLevels(uint size) => (uint)Math.Floor (Math.Log (size)) + 1; public static uint ComputeMipLevels (int width, int height) => (uint)Math.Floor (Math.Log (Math.Max (width, height))) + 1; + public static bool CheckFormatIsSupported (VkImageUsageFlags usage, VkFormatFeatureFlags phyFormatSupport) { + if (usage.HasFlag (VkImageUsageFlags.TransferSrc) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.TransferSrc)) + return false; + if (usage.HasFlag (VkImageUsageFlags.TransferDst) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.TransferSrc)) + return false; + if (usage.HasFlag (VkImageUsageFlags.Sampled) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.SampledImage)) + return false; + if (usage.HasFlag (VkImageUsageFlags.Storage) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.StorageImage)) + return false; + if (usage.HasFlag (VkImageUsageFlags.ColorAttachment) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.ColorAttachment)) + return false; + if (usage.HasFlag (VkImageUsageFlags.DepthStencilAttachment) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.DepthStencilAttachment)) + return false; + /*if (usage.HasFlag (VkImageUsageFlags.TransientAttachment) ^ phyFormatSupport.HasFlag (VkFormatFeatureFlags.)) + return false;*/ + if (usage.HasFlag (VkImageUsageFlags.InputAttachment) & !phyFormatSupport.HasFlag (VkFormatFeatureFlags.SampledImage)) + return false; + /*if (usage.HasFlag (VkImageUsageFlags.ShadingRateImageNV) ^ phyFormatSupport.HasFlag (VkFormatFeatureFlags.TransferSrc)) + return false; + if (usage.HasFlag (VkImageUsageFlags.FragmentDensityMapEXT) ^ phyFormatSupport.HasFlag (VkFormatFeatureFlags.TransferSrc)) + return false;*/ + return true; + } /// <summary> /// Load image from byte array containing full image file (jpg, png,...) /// </summary> diff --git a/vke/src/ktx.cs b/vke/src/ktx.cs index e78071f..e449da2 100644 --- a/vke/src/ktx.cs +++ b/vke/src/ktx.cs @@ -106,7 +106,10 @@ namespace KTX { if (numberOfArrayElements == 0) numberOfArrayElements = 1; } - + + if (!Image.CheckFormatIsSupported (usage, phyFormatSupport)) + throw new Exception ($"Unsupported image format: {vkFormat}, {tiling}, {usage}"); + img = new Image (staggingQ.Dev, vkFormat, usage, memoryProperty, pixelWidth, pixelHeight, imgType, samples, tiling, requestedMipsLevels, numberOfArrayElements, pixelDepth, createFlags); @@ -146,20 +149,14 @@ namespace KTX { bufferCopyRegion.imageExtent.height = imgHeight; if (createFlags.HasFlag (VkImageCreateFlags.CubeCompatible)) { - //IntPtr ptrFace = img.MappedData; - //bufferCopyRegion.imageSubresource.layerCount = 1; for (uint face = 0; face < numberOfFaces; face++) { - //bufferCopyRegion.imageSubresource.baseArrayLayer = face; Marshal.Copy (br.ReadBytes ((int)imgSize), 0, stagging.MappedData + (int)bufferOffset, (int)imgSize); - - uint faceOffset = imgSize + (imgSize % 4); - //ptrFace += (int)faceOffset;//cube padding + uint faceOffset = imgSize + (imgSize % 4);//cube padding bufferOffset += faceOffset; } buffCopies.Add (bufferCopyRegion); bufferCopyRegion.bufferOffset = bufferOffset; } else { - Marshal.Copy (br.ReadBytes ((int)imgSize), 0, stagging.MappedData + (int)bufferOffset, (int)imgSize); buffCopies.Add (bufferCopyRegion); bufferOffset += imgSize; @@ -167,7 +164,6 @@ namespace KTX { imgWidth /= 2; imgHeight /= 2; - //break; } stagging.Unmap (); @@ -175,15 +171,6 @@ namespace KTX { (uint)buffCopies.Count, buffCopies.Pin()); buffCopies.Unpin (); - /*cmd.End (); - - staggingQ.Submit (cmd); - staggingQ.WaitIdle (); - - cmd.Free (); - - cmd = staggingCmdPool.AllocateAndStart (VkCommandBufferUsageFlags.OneTimeSubmit); - */ if (requestedMipsLevels > numberOfMipmapLevels) img.BuildMipmaps (cmd); else @@ -199,30 +186,6 @@ namespace KTX { cmd.Free (); } - - //for (int mips = 0; mips < numberOfMipmapLevels; mips++) { - //UInt32 imgSize = br.ReadUInt32 (); - /*VkImageBlit imageBlit = new VkImageBlit { - srcSubresource = new VkImageSubresourceLayers(VkImageAspectFlags.Color, numberOfArrayElements, (uint)mips - 1), - srcOffsets_1 = new VkOffset3D((int)pixelWidth >> (mips - 1), (int)pixelHeight >> (mips - 1),1), - dstSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, numberOfArrayElements, (uint)mips), - dstOffsets_1 = new VkOffset3D ((int)pixelWidth >> mips, (int)pixelHeight >> mips, 1), - };*/ - //for (int layer = 0; layer < numberOfArrayElements; layer++) { - //for (int face = 0; face < numberOfFaces; face++) { - //for (int slice = 0; slice < pixelDepth; slice++) { - /*for (int y = 0; y < pixelHeight; y++) { - for (int x = 0; x < pixelWidth; x++) { - //Uncompressed texture data matches a GL_UNPACK_ALIGNMENT of 4. - } - }*/ - //} - //Byte cubePadding[0-3] - //} - //} - //Byte mipPadding[0-3] - //} - } else { } } diff --git a/vke/src/model/glTFLoader.cs b/vke/src/model/glTFLoader.cs index 29abc6a..29af594 100644 --- a/vke/src/model/glTFLoader.cs +++ b/vke/src/model/glTFLoader.cs @@ -485,8 +485,8 @@ namespace CVKL { cmd = cmdPool.AllocateAndStart (VkCommandBufferUsageFlags.OneTimeSubmit); - VkImageSubresourceRange mipSubRange = new VkImageSubresourceRange (VkImageAspectFlags.Color, 0, 1, firstImg, imgCount); uint imgCount = (uint)gltf.Images.Length; + VkImageSubresourceRange mipSubRange = new VkImageSubresourceRange (VkImageAspectFlags.Color, 0, 1, firstImg, imgCount); for (int i = 1; i < texArray.CreateInfo.mipLevels; i++) { imageBlit = new VkImageBlit { |