From a356eb29c8b99fc7c9a6c928077c076febdc4cb7 Mon Sep 17 00:00:00 2001 From: Caleb Cornett Date: Mon, 30 Jan 2023 22:39:13 -0500 Subject: [PATCH] Add DepthMSAA test + update other tests for new ABI + misc cleanup --- CopyTexture/CopyTextureGame.cs | 6 +- Cube/CubeGame.cs | 18 +- DepthMSAA/DepthMSAA.csproj | 17 + DepthMSAA/DepthMSAAGame.cs | 296 ++++++++++++++++++ MSAA/MSAAGame.cs | 36 ++- MoonWorks.Test.Common/UniformTypes.cs | 14 + MoonWorksGraphicsTests.sln | 16 +- README.md | 4 + RenderTexture3D/RenderTexture3DGame.cs | 3 +- RenderTextureCube/RenderTextureCubeGame.cs | 17 +- .../RenderTextureMipmapsGame.cs | 17 +- TextureMipmaps/TextureMipmapsGame.cs | 14 +- .../TexturedAnimatedQuadGame.cs | 23 +- 13 files changed, 383 insertions(+), 98 deletions(-) create mode 100644 DepthMSAA/DepthMSAA.csproj create mode 100644 DepthMSAA/DepthMSAAGame.cs create mode 100644 MoonWorks.Test.Common/UniformTypes.cs diff --git a/CopyTexture/CopyTextureGame.cs b/CopyTexture/CopyTextureGame.cs index 20bb368..5d0ddae 100644 --- a/CopyTexture/CopyTextureGame.cs +++ b/CopyTexture/CopyTextureGame.cs @@ -80,9 +80,9 @@ namespace MoonWorks.Test var byteCount = (uint)(width * height * channels); - TextureCreateInfo textureCreateInfo; - textureCreateInfo.Width = (uint)width; - textureCreateInfo.Height = (uint)height; + TextureCreateInfo textureCreateInfo = new TextureCreateInfo(); + textureCreateInfo.Width = (uint) width; + textureCreateInfo.Height = (uint) height; textureCreateInfo.Depth = 1; textureCreateInfo.Format = TextureFormat.R8G8B8A8; textureCreateInfo.IsCube = false; diff --git a/Cube/CubeGame.cs b/Cube/CubeGame.cs index fd16c64..613de36 100644 --- a/Cube/CubeGame.cs +++ b/Cube/CubeGame.cs @@ -33,16 +33,6 @@ namespace MoonWorks.Test private bool depthOnlyEnabled = false; private Vector3 camPos = new Vector3(0, 1.5f, 4f); - struct ViewProjectionUniforms - { - public Matrix4x4 ViewProjection; - - public ViewProjectionUniforms(Matrix4x4 viewProjection) - { - ViewProjection = viewProjection; - } - } - struct DepthUniforms { public float ZNear; @@ -165,7 +155,7 @@ namespace MoonWorks.Test ) ), DepthStencilState = DepthStencilState.DepthReadWrite, - VertexShaderInfo = GraphicsShaderInfo.Create(cubeVertShaderModule, "main", 0), + VertexShaderInfo = GraphicsShaderInfo.Create(cubeVertShaderModule, "main", 0), VertexInputState = VertexInputState.CreateSingleBinding(), PrimitiveType = PrimitiveType.TriangleList, FragmentShaderInfo = GraphicsShaderInfo.Create(cubeFragShaderModule, "main", 0), @@ -189,7 +179,7 @@ namespace MoonWorks.Test ) ), DepthStencilState = DepthStencilState.DepthReadWrite, - VertexShaderInfo = GraphicsShaderInfo.Create(skyboxVertShaderModule, "main", 0), + VertexShaderInfo = GraphicsShaderInfo.Create(skyboxVertShaderModule, "main", 0), VertexInputState = VertexInputState.CreateSingleBinding(), PrimitiveType = PrimitiveType.TriangleList, FragmentShaderInfo = GraphicsShaderInfo.Create(skyboxFragShaderModule, "main", 1), @@ -376,7 +366,7 @@ namespace MoonWorks.Test Vector3.Zero, Vector3.Up ); - ViewProjectionUniforms skyboxUniforms = new ViewProjectionUniforms(view * proj); + TransformVertexUniform skyboxUniforms = new TransformVertexUniform(view * proj); Matrix4x4 model = Matrix4x4.CreateFromQuaternion( Quaternion.Slerp( @@ -385,7 +375,7 @@ namespace MoonWorks.Test (float) alpha ) ); - ViewProjectionUniforms cubeUniforms = new ViewProjectionUniforms(model * view * proj); + TransformVertexUniform cubeUniforms = new TransformVertexUniform(model * view * proj); CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); Texture? swapchainTexture = cmdbuf.AcquireSwapchainTexture(MainWindow); diff --git a/DepthMSAA/DepthMSAA.csproj b/DepthMSAA/DepthMSAA.csproj new file mode 100644 index 0000000..7becfeb --- /dev/null +++ b/DepthMSAA/DepthMSAA.csproj @@ -0,0 +1,17 @@ + + + + + + + + + Exe + net7.0 + enable + x64 + + + + + diff --git a/DepthMSAA/DepthMSAAGame.cs b/DepthMSAA/DepthMSAAGame.cs new file mode 100644 index 0000000..15d93ca --- /dev/null +++ b/DepthMSAA/DepthMSAAGame.cs @@ -0,0 +1,296 @@ +using MoonWorks; +using MoonWorks.Math.Float; +using MoonWorks.Math; +using MoonWorks.Graphics; + +namespace MoonWorks.Test +{ + class DepthMSAAGame : Game + { + private GraphicsPipeline[] cubePipelines = new GraphicsPipeline[4]; + private GraphicsPipeline blitPipeline; + private Texture[] renderTargets = new Texture[4]; + private Texture[] depthRTs = new Texture[4]; + private Sampler rtSampler; + private Buffer cubeVertexBuffer1; + private Buffer cubeVertexBuffer2; + private Buffer cubeIndexBuffer; + private Buffer quadVertexBuffer; + private Buffer quadIndexBuffer; + + private float cubeTimer = 0f; + private Quaternion cubeRotation = Quaternion.Identity; + private Quaternion previousCubeRotation = Quaternion.Identity; + private Vector3 camPos = new Vector3(0, 1.5f, 4f); + + private SampleCount currentSampleCount = SampleCount.Four; + + public DepthMSAAGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + { + Logger.LogInfo("Press Left and Right to cycle between sample counts"); + Logger.LogInfo("Setting sample count to: " + currentSampleCount); + + // Create the cube pipelines + ShaderModule cubeVertShaderModule = new ShaderModule( + GraphicsDevice, + TestUtils.GetShaderPath("PositionColorVertWithMatrix") + ); + ShaderModule cubeFragShaderModule = new ShaderModule( + GraphicsDevice, + TestUtils.GetShaderPath("SolidColor") + ); + + GraphicsPipelineCreateInfo pipelineCreateInfo = new GraphicsPipelineCreateInfo + { + AttachmentInfo = new GraphicsPipelineAttachmentInfo( + TextureFormat.D32, + new ColorAttachmentDescription( + MainWindow.SwapchainFormat, + ColorAttachmentBlendState.Opaque + ) + ), + DepthStencilState = DepthStencilState.DepthReadWrite, + VertexShaderInfo = GraphicsShaderInfo.Create(cubeVertShaderModule, "main", 0), + VertexInputState = VertexInputState.CreateSingleBinding(), + PrimitiveType = PrimitiveType.TriangleList, + FragmentShaderInfo = GraphicsShaderInfo.Create(cubeFragShaderModule, "main", 0), + RasterizerState = RasterizerState.CW_CullBack, + MultisampleState = MultisampleState.None + }; + + for (int i = 0; i < cubePipelines.Length; i += 1) + { + pipelineCreateInfo.MultisampleState.MultisampleCount = (SampleCount) i; + cubePipelines[i] = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); + } + + // Create the blit pipeline + ShaderModule blitVertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadVert")); + ShaderModule blitFragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadFrag")); + + pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo( + MainWindow.SwapchainFormat, + blitVertShaderModule, + blitFragShaderModule + ); + pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding(); + pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1; + blitPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); + + // Create the MSAA render textures and depth textures + for (int i = 0; i < renderTargets.Length; i += 1) + { + renderTargets[i] = Texture.CreateTexture2D( + GraphicsDevice, + MainWindow.Width, + MainWindow.Height, + TextureFormat.R8G8B8A8, + TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler, + 1, + (SampleCount) i + ); + + depthRTs[i] = Texture.CreateTexture2D( + GraphicsDevice, + MainWindow.Width, + MainWindow.Height, + TextureFormat.D32, + TextureUsageFlags.DepthStencilTarget, + 1, + (SampleCount) i + ); + } + + // Create the sampler + rtSampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp); + + // Create the buffers + quadVertexBuffer = Buffer.Create(GraphicsDevice, BufferUsageFlags.Vertex, 4); + quadIndexBuffer = Buffer.Create(GraphicsDevice, BufferUsageFlags.Index, 6); + + cubeVertexBuffer1 = Buffer.Create(GraphicsDevice, BufferUsageFlags.Vertex, 24); + cubeVertexBuffer2 = Buffer.Create(GraphicsDevice, BufferUsageFlags.Vertex, 24); + cubeIndexBuffer = Buffer.Create(GraphicsDevice, BufferUsageFlags.Index, 36); + + // Populate the GPU resources + CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); + + cmdbuf.SetBufferData( + quadVertexBuffer, + new PositionTextureVertex[] + { + new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)), + new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)), + new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)), + new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)), + } + ); + cmdbuf.SetBufferData( + quadIndexBuffer, + new ushort[] + { + 0, 1, 2, + 0, 2, 3, + } + ); + + PositionColorVertex[] vertices = new PositionColorVertex[] + { + new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0f)), + new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0f)), + new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0f, 0f)), + new PositionColorVertex(new Vector3(-1, 1, -1), new Color(1f, 0f, 0f)), + + new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 1f, 0f)), + new PositionColorVertex(new Vector3(1, -1, 1), new Color(0f, 1f, 0f)), + new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 1f, 0f)), + new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 1f, 0f)), + + new PositionColorVertex(new Vector3(-1, -1, -1), new Color(0f, 0f, 1f)), + new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0f, 1f)), + new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0f, 1f)), + new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 0f, 1f)), + + new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(1, 1, 1), new Color(1f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0.5f, 0f)), + + new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0.5f)), + new PositionColorVertex(new Vector3(-1, -1, 1), new Color(1f, 0f, 0.5f)), + new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0f, 0.5f)), + new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0.5f)), + + new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 0.5f, 0f)), + new PositionColorVertex(new Vector3(1, 1, -1), new Color(0f, 0.5f, 0f)) + }; + cmdbuf.SetBufferData( + cubeVertexBuffer1, + vertices + ); + + // Scoot all the verts slightly for the second cube... + for (int i = 0; i < vertices.Length; i += 1) + { + vertices[i].Position.Z += 3; + } + cmdbuf.SetBufferData( + cubeVertexBuffer2, + vertices + ); + + cmdbuf.SetBufferData( + cubeIndexBuffer, + new uint[] + { + 0, 1, 2, 0, 2, 3, + 6, 5, 4, 7, 6, 4, + 8, 9, 10, 8, 10, 11, + 14, 13, 12, 15, 14, 12, + 16, 17, 18, 16, 18, 19, + 22, 21, 20, 23, 22, 20 + } + ); + + GraphicsDevice.Submit(cmdbuf); + GraphicsDevice.Wait(); + } + + protected override void Update(System.TimeSpan delta) + { + SampleCount prevSampleCount = currentSampleCount; + + if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left)) + { + currentSampleCount -= 1; + if (currentSampleCount < 0) + { + currentSampleCount = SampleCount.Eight; + } + } + if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right)) + { + currentSampleCount += 1; + if (currentSampleCount > SampleCount.Eight) + { + currentSampleCount = SampleCount.One; + } + } + + if (prevSampleCount != currentSampleCount) + { + Logger.LogInfo("Setting sample count to: " + currentSampleCount); + } + + // Rotate the cube + cubeTimer += (float) delta.TotalSeconds; + previousCubeRotation = cubeRotation; + cubeRotation = Quaternion.CreateFromYawPitchRoll(cubeTimer * 2f, 0, cubeTimer * 2f); + } + + protected override void Draw(double alpha) + { + CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); + Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow); + if (backbuffer != null) + { + // Set up cube model-view-projection matrix + Matrix4x4 proj = Matrix4x4.CreatePerspectiveFieldOfView( + MathHelper.ToRadians(75f), + (float) MainWindow.Width / MainWindow.Height, + 0.01f, + 100f + ); + Matrix4x4 view = Matrix4x4.CreateLookAt(camPos, Vector3.Zero, Vector3.Up); + Matrix4x4 model = Matrix4x4.CreateFromQuaternion( + Quaternion.Slerp( + previousCubeRotation, + cubeRotation, + (float) alpha + ) + ); + TransformVertexUniform cubeUniforms = new TransformVertexUniform(model * view * proj); + + // Begin the MSAA RT pass + int index = (int) currentSampleCount; + cmdbuf.BeginRenderPass( + new DepthStencilAttachmentInfo(depthRTs[index], new DepthStencilValue(1, 0)), + new ColorAttachmentInfo(renderTargets[index], Color.Black) + ); + cmdbuf.BindGraphicsPipeline(cubePipelines[index]); + + // Draw the first cube + cmdbuf.BindVertexBuffers(cubeVertexBuffer1); + cmdbuf.BindIndexBuffer(cubeIndexBuffer, IndexElementSize.ThirtyTwo); + uint vertexParamOffset = cmdbuf.PushVertexShaderUniforms(cubeUniforms); + cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0); + + // Draw the second cube + cmdbuf.BindVertexBuffers(cubeVertexBuffer2); + cmdbuf.BindIndexBuffer(cubeIndexBuffer, IndexElementSize.ThirtyTwo); + vertexParamOffset = cmdbuf.PushVertexShaderUniforms(cubeUniforms); + cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0); + + cmdbuf.EndRenderPass(); + + // Blit the MSAA RT to the backbuffer + cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, LoadOp.DontCare)); + cmdbuf.BindGraphicsPipeline(blitPipeline); + cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(renderTargets[index], rtSampler)); + cmdbuf.BindVertexBuffers(quadVertexBuffer); + cmdbuf.BindIndexBuffer(quadIndexBuffer, IndexElementSize.Sixteen); + cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0); + cmdbuf.EndRenderPass(); + } + GraphicsDevice.Submit(cmdbuf); + } + + public static void Main(string[] args) + { + DepthMSAAGame game = new DepthMSAAGame(); + game.Run(); + } + } +} diff --git a/MSAA/MSAAGame.cs b/MSAA/MSAAGame.cs index 4b8ce7a..42e09ba 100644 --- a/MSAA/MSAAGame.cs +++ b/MSAA/MSAAGame.cs @@ -9,7 +9,7 @@ namespace MoonWorks.Test private GraphicsPipeline[] msaaPipelines = new GraphicsPipeline[4]; private GraphicsPipeline blitPipeline; - private Texture rt; + private Texture[] renderTargets = new Texture[4]; private Sampler rtSampler; private Buffer quadVertexBuffer; private Buffer quadIndexBuffer; @@ -49,14 +49,21 @@ namespace MoonWorks.Test pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1; blitPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); - // Create the MSAA render texture and sampler - rt = Texture.CreateTexture2D( - GraphicsDevice, - MainWindow.Width, - MainWindow.Height, - TextureFormat.R8G8B8A8, - TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler - ); + // Create the MSAA render textures + for (int i = 0; i < renderTargets.Length; i += 1) + { + renderTargets[i] = Texture.CreateTexture2D( + GraphicsDevice, + MainWindow.Width, + MainWindow.Height, + TextureFormat.R8G8B8A8, + TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler, + 1, + (SampleCount) i + ); + } + + // Create the sampler rtSampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp); // Create and populate the vertex and index buffers @@ -119,14 +126,9 @@ namespace MoonWorks.Test Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow); if (backbuffer != null) { - cmdbuf.BeginRenderPass( - new ColorAttachmentInfo( - rt, - Color.Black, - currentSampleCount, - StoreOp.Store - ) - ); + Texture rt = renderTargets[(int) currentSampleCount]; + + cmdbuf.BeginRenderPass(new ColorAttachmentInfo(rt, Color.Black)); cmdbuf.BindGraphicsPipeline(msaaPipelines[(int) currentSampleCount]); cmdbuf.DrawPrimitives(0, 1, 0, 0); cmdbuf.EndRenderPass(); diff --git a/MoonWorks.Test.Common/UniformTypes.cs b/MoonWorks.Test.Common/UniformTypes.cs new file mode 100644 index 0000000..59ca3e4 --- /dev/null +++ b/MoonWorks.Test.Common/UniformTypes.cs @@ -0,0 +1,14 @@ +using MoonWorks.Math.Float; + +namespace MoonWorks.Test +{ + public struct TransformVertexUniform + { + public Matrix4x4 ViewProjection; + + public TransformVertexUniform(Matrix4x4 viewProjection) + { + ViewProjection = viewProjection; + } + } +} diff --git a/MoonWorksGraphicsTests.sln b/MoonWorksGraphicsTests.sln index e400f38..5f0bd9e 100644 --- a/MoonWorksGraphicsTests.sln +++ b/MoonWorksGraphicsTests.sln @@ -53,7 +53,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RenderTextureMipmaps", "Ren EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextureMipmaps", "TextureMipmaps\TextureMipmaps.csproj", "{5A1AC35B-EF18-426D-A633-D4899E84EAA7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicStencil", "Stencil\BasicStencil.csproj", "{E3FCEDC2-BAE3-4E21-AEBA-2AC3504526CD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicStencil", "BasicStencil\BasicStencil.csproj", "{1B370BAD-966A-49B2-9EA0-2463F6C8F9AD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DepthMSAA", "DepthMSAA\DepthMSAA.csproj", "{B36C9F65-F3F4-4EB4-8EBF-A1EDCD4261F8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -161,10 +163,14 @@ Global {5A1AC35B-EF18-426D-A633-D4899E84EAA7}.Debug|x64.Build.0 = Debug|x64 {5A1AC35B-EF18-426D-A633-D4899E84EAA7}.Release|x64.ActiveCfg = Release|x64 {5A1AC35B-EF18-426D-A633-D4899E84EAA7}.Release|x64.Build.0 = Release|x64 - {E3FCEDC2-BAE3-4E21-AEBA-2AC3504526CD}.Debug|x64.ActiveCfg = Debug|x64 - {E3FCEDC2-BAE3-4E21-AEBA-2AC3504526CD}.Debug|x64.Build.0 = Debug|x64 - {E3FCEDC2-BAE3-4E21-AEBA-2AC3504526CD}.Release|x64.ActiveCfg = Release|x64 - {E3FCEDC2-BAE3-4E21-AEBA-2AC3504526CD}.Release|x64.Build.0 = Release|x64 + {1B370BAD-966A-49B2-9EA0-2463F6C8F9AD}.Debug|x64.ActiveCfg = Debug|x64 + {1B370BAD-966A-49B2-9EA0-2463F6C8F9AD}.Debug|x64.Build.0 = Debug|x64 + {1B370BAD-966A-49B2-9EA0-2463F6C8F9AD}.Release|x64.ActiveCfg = Release|x64 + {1B370BAD-966A-49B2-9EA0-2463F6C8F9AD}.Release|x64.Build.0 = Release|x64 + {B36C9F65-F3F4-4EB4-8EBF-A1EDCD4261F8}.Debug|x64.ActiveCfg = Debug|x64 + {B36C9F65-F3F4-4EB4-8EBF-A1EDCD4261F8}.Debug|x64.Build.0 = Debug|x64 + {B36C9F65-F3F4-4EB4-8EBF-A1EDCD4261F8}.Release|x64.ActiveCfg = Release|x64 + {B36C9F65-F3F4-4EB4-8EBF-A1EDCD4261F8}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index 2593385..f61dcbf 100644 --- a/README.md +++ b/README.md @@ -95,3 +95,7 @@ Displays a quad that can be scaled to reveal various mip levels. The mips are so **BasicStencil** Demonstrates stencil masking using two triangles. Tests stencil buffers and basic stencil operations. + +**DepthMSAA** + +Displays two cubes floating around each other on a multisampled surface. Tests multisampled depth buffers. diff --git a/RenderTexture3D/RenderTexture3DGame.cs b/RenderTexture3D/RenderTexture3DGame.cs index abc6b2a..4e175ce 100644 --- a/RenderTexture3D/RenderTexture3DGame.cs +++ b/RenderTexture3D/RenderTexture3DGame.cs @@ -93,8 +93,7 @@ namespace MoonWorks.Test Layer = 0, Level = 0, LoadOp = LoadOp.Clear, - StoreOp = StoreOp.Store, - SampleCount = SampleCount.One, + StoreOp = StoreOp.Store }; cmdbuf.BeginRenderPass(attachmentInfo); cmdbuf.EndRenderPass(); diff --git a/RenderTextureCube/RenderTextureCubeGame.cs b/RenderTextureCube/RenderTextureCubeGame.cs index 9137ed0..4a27cd2 100644 --- a/RenderTextureCube/RenderTextureCubeGame.cs +++ b/RenderTextureCube/RenderTextureCubeGame.cs @@ -26,16 +26,6 @@ namespace MoonWorks.Test Color.Purple, }; - struct ViewProjectionUniforms - { - public Matrix4x4 ViewProjection; - - public ViewProjectionUniforms(Matrix4x4 viewProjection) - { - ViewProjection = viewProjection; - } - } - public RenderTextureCubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) { Logger.LogInfo("Press Down to view the other side of the cubemap"); @@ -51,7 +41,7 @@ namespace MoonWorks.Test fragShaderModule ); pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding(); - pipelineCreateInfo.VertexShaderInfo.UniformBufferSize = (uint) Marshal.SizeOf(); + pipelineCreateInfo.VertexShaderInfo.UniformBufferSize = (uint) Marshal.SizeOf(); pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1; pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); @@ -129,8 +119,7 @@ namespace MoonWorks.Test Layer = i, Level = 0, LoadOp = LoadOp.Clear, - StoreOp = StoreOp.Store, - SampleCount = SampleCount.One, + StoreOp = StoreOp.Store }; cmdbuf.BeginRenderPass(attachmentInfo); cmdbuf.EndRenderPass(); @@ -160,7 +149,7 @@ namespace MoonWorks.Test Vector3.Zero, Vector3.Up ); - ViewProjectionUniforms vertUniforms = new ViewProjectionUniforms(view * proj); + TransformVertexUniform vertUniforms = new TransformVertexUniform(view * proj); CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow); diff --git a/RenderTextureMipmaps/RenderTextureMipmapsGame.cs b/RenderTextureMipmaps/RenderTextureMipmapsGame.cs index 5d4d74c..0751c1f 100644 --- a/RenderTextureMipmaps/RenderTextureMipmapsGame.cs +++ b/RenderTextureMipmaps/RenderTextureMipmapsGame.cs @@ -23,16 +23,6 @@ namespace MoonWorks.Test Color.Yellow, }; - private struct VertexUniforms - { - public Matrix4x4 TransformMatrix; - - public VertexUniforms(Matrix4x4 transformMatrix) - { - TransformMatrix = transformMatrix; - } - } - private string GetSamplerString(int index) { switch (index) @@ -69,7 +59,7 @@ namespace MoonWorks.Test fragShaderModule ); pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding(); - pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); + pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1; pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); @@ -135,8 +125,7 @@ namespace MoonWorks.Test Layer = 0, Level = i, LoadOp = LoadOp.Clear, - StoreOp = StoreOp.Store, - SampleCount = SampleCount.One, + StoreOp = StoreOp.Store }; cmdbuf.BeginRenderPass(attachmentInfo); cmdbuf.EndRenderPass(); @@ -166,7 +155,7 @@ namespace MoonWorks.Test protected override void Draw(double alpha) { - VertexUniforms vertUniforms = new VertexUniforms(Matrix4x4.CreateScale(scale, scale, 1)); + TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1)); CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow); diff --git a/TextureMipmaps/TextureMipmapsGame.cs b/TextureMipmaps/TextureMipmapsGame.cs index 389c377..e918ea2 100644 --- a/TextureMipmaps/TextureMipmapsGame.cs +++ b/TextureMipmaps/TextureMipmapsGame.cs @@ -15,16 +15,6 @@ namespace MoonWorks.Test private float scale = 0.5f; - private struct VertexUniforms - { - public Matrix4x4 TransformMatrix; - - public VertexUniforms(Matrix4x4 transformMatrix) - { - TransformMatrix = transformMatrix; - } - } - public TextureMipmapsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) { Logger.LogInfo("Press Left and Right to shrink/expand the scale of the quad"); @@ -40,7 +30,7 @@ namespace MoonWorks.Test fragShaderModule ); pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding(); - pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); + pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1; pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); @@ -121,7 +111,7 @@ namespace MoonWorks.Test protected override void Draw(double alpha) { - VertexUniforms vertUniforms = new VertexUniforms(Matrix4x4.CreateScale(scale, scale, 1)); + TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1)); CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow); diff --git a/TexturedAnimatedQuad/TexturedAnimatedQuadGame.cs b/TexturedAnimatedQuad/TexturedAnimatedQuadGame.cs index 0d069b1..e5135e1 100644 --- a/TexturedAnimatedQuad/TexturedAnimatedQuadGame.cs +++ b/TexturedAnimatedQuad/TexturedAnimatedQuadGame.cs @@ -15,17 +15,6 @@ namespace MoonWorks.Test private float t; - [StructLayout(LayoutKind.Sequential)] - private struct VertexUniforms - { - public Matrix4x4 TransformMatrix; - - public VertexUniforms(Matrix4x4 transformMatrix) - { - TransformMatrix = transformMatrix; - } - } - [StructLayout(LayoutKind.Sequential)] private struct FragmentUniforms { @@ -51,7 +40,7 @@ namespace MoonWorks.Test ); pipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[0].BlendState = ColorAttachmentBlendState.AlphaBlend; pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding(); - pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); + pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create(vertShaderModule, "main", 0); pipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create(fragShaderModule, "main", 1); pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo); @@ -91,7 +80,7 @@ namespace MoonWorks.Test protected override void Draw(double alpha) { - VertexUniforms vertUniforms; + TransformVertexUniform vertUniforms; FragmentUniforms fragUniforms; uint vertParamOffset, fragParamOffset; @@ -106,28 +95,28 @@ namespace MoonWorks.Test cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler)); // Top-left - vertUniforms = new VertexUniforms(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(-0.5f, -0.5f, 0))); + vertUniforms = new TransformVertexUniform(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(-0.5f, -0.5f, 0))); fragUniforms = new FragmentUniforms(new Vector4(1f, 0.5f + System.MathF.Sin(t) * 0.5f, 1f, 1f)); vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms); fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniforms); cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, fragParamOffset); // Top-right - vertUniforms = new VertexUniforms(Matrix4x4.CreateRotationZ((2 * System.MathF.PI) - t) * Matrix4x4.CreateTranslation(new Vector3(0.5f, -0.5f, 0))); + vertUniforms = new TransformVertexUniform(Matrix4x4.CreateRotationZ((2 * System.MathF.PI) - t) * Matrix4x4.CreateTranslation(new Vector3(0.5f, -0.5f, 0))); fragUniforms = new FragmentUniforms(new Vector4(1f, 0.5f + System.MathF.Cos(t) * 0.5f, 1f, 1f)); vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms); fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniforms); cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, fragParamOffset); // Bottom-left - vertUniforms = new VertexUniforms(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(-0.5f, 0.5f, 0))); + vertUniforms = new TransformVertexUniform(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(-0.5f, 0.5f, 0))); fragUniforms = new FragmentUniforms(new Vector4(1f, 0.5f + System.MathF.Sin(t) * 0.2f, 1f, 1f)); vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms); fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniforms); cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, fragParamOffset); // Bottom-right - vertUniforms = new VertexUniforms(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(0.5f, 0.5f, 0))); + vertUniforms = new TransformVertexUniform(Matrix4x4.CreateRotationZ(t) * Matrix4x4.CreateTranslation(new Vector3(0.5f, 0.5f, 0))); fragUniforms = new FragmentUniforms(new Vector4(1f, 0.5f + System.MathF.Cos(t) * 1f, 1f, 1f)); vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms); fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniforms);