aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-08-24 15:08:18 +0200
committerj-p <jp_bruyere@hotmail.com>2019-08-28 11:32:06 +0200
commitf60141a45a7c52cf40eca7f27ff16f060e556179 (patch)
tree0e2c1af3ec94238d3b159a59c8f9160f72323239
parent691f9ec0f508c903ace2a7d9c7833907503c7914 (diff)
ktx debug
-rw-r--r--samples/Model/main.cs7
-rw-r--r--samples/Model/shaders/model.frag18
-rw-r--r--samples/Model/shaders/model.vert16
-rw-r--r--samples/TexturedCube/TexturedCube.csproj2
-rw-r--r--samples/TexturedCube/main.cs44
-rw-r--r--samples/TexturedCube/shaders/skybox.frag2
-rw-r--r--samples/deferred/deferredPbrRenderer.cs2
-rw-r--r--samples/deferred/main.cs7
-rw-r--r--vke/CVKL.csproj4
-rw-r--r--vke/src/base/Image.cs23
-rw-r--r--vke/src/ktx.cs47
-rw-r--r--vke/src/model/glTFLoader.cs2
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 {