From a46ee129f0ff4e8631f5ab0f895e168cd2ad23dc Mon Sep 17 00:00:00 2001 From: antopilo Date: Tue, 15 Apr 2025 19:33:46 -0400 Subject: [PATCH] Fixed most vulkan validation layers --- Data/Shaders/Vulkan/copy.frag | 3 ++- Data/Shaders/Vulkan/copy.vert | 3 ++- Data/Shaders/Vulkan/gizmo.frag | 6 ++++-- Data/Shaders/Vulkan/gizmo.vert | 3 ++- Data/Shaders/Vulkan/line.frag | 6 ++++-- Data/Shaders/Vulkan/line.vert | 3 ++- Data/Shaders/Vulkan/outline.frag | 3 ++- Data/Shaders/Vulkan/outline.vert | 3 ++- Data/Shaders/Vulkan/shading.frag | 3 ++- Data/Shaders/Vulkan/shading.vert | 3 ++- Data/Shaders/Vulkan/shadow.frag | 11 +++-------- Data/Shaders/Vulkan/shadow.vert | 3 ++- Data/Shaders/Vulkan/test.vert | 2 +- Data/Shaders/Vulkan/triangle.frag | 7 ++++--- Data/Shaders/Vulkan/triangle.vert | 13 +++++++------ Nuake/Source/Engine.cpp | 2 -- .../Rendering/Vulkan/Pipeline/RenderPipeline.h | 2 +- .../Nuake/Rendering/Vulkan/PipelineBuilder.cpp | 6 +++--- .../Rendering/Vulkan/SceneRenderPipeline.cpp | 6 ++++-- .../Rendering/Vulkan/SceneRenderPipeline.h | 1 + .../Nuake/Rendering/Vulkan/ShaderCompiler.cpp | 2 +- .../Nuake/Rendering/Vulkan/VulkanRenderer.cpp | 17 ++++++++--------- .../Nuake/Rendering/Vulkan/VulkanRenderer.h | 1 - 23 files changed, 59 insertions(+), 50 deletions(-) diff --git a/Data/Shaders/Vulkan/copy.frag b/Data/Shaders/Vulkan/copy.frag index 3a49fc26..e14916d4 100644 --- a/Data/Shaders/Vulkan/copy.frag +++ b/Data/Shaders/Vulkan/copy.frag @@ -80,7 +80,8 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/copy.vert b/Data/Shaders/Vulkan/copy.vert index 9692d391..70d6d173 100644 --- a/Data/Shaders/Vulkan/copy.vert +++ b/Data/Shaders/Vulkan/copy.vert @@ -90,7 +90,8 @@ struct CopyPushConstant CopyPushConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/gizmo.frag b/Data/Shaders/Vulkan/gizmo.frag index 0e44d1ce..8381858f 100644 --- a/Data/Shaders/Vulkan/gizmo.frag +++ b/Data/Shaders/Vulkan/gizmo.frag @@ -80,12 +80,14 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; -struct PSOutput { +struct PSOutput +{ float4 oColor0 : SV_TARGET; float4 oEntityID : SV_TARGET1; }; diff --git a/Data/Shaders/Vulkan/gizmo.vert b/Data/Shaders/Vulkan/gizmo.vert index ff864460..d08bb08b 100644 --- a/Data/Shaders/Vulkan/gizmo.vert +++ b/Data/Shaders/Vulkan/gizmo.vert @@ -92,7 +92,8 @@ struct DebugConstant DebugConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/line.frag b/Data/Shaders/Vulkan/line.frag index f9334d21..e53f24ca 100644 --- a/Data/Shaders/Vulkan/line.frag +++ b/Data/Shaders/Vulkan/line.frag @@ -80,12 +80,14 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; -struct PSOutput { +struct PSOutput +{ float4 oColor0 : SV_TARGET; }; diff --git a/Data/Shaders/Vulkan/line.vert b/Data/Shaders/Vulkan/line.vert index 702fa46e..e648a87e 100644 --- a/Data/Shaders/Vulkan/line.vert +++ b/Data/Shaders/Vulkan/line.vert @@ -90,7 +90,8 @@ struct LineConstant LineConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/outline.frag b/Data/Shaders/Vulkan/outline.frag index c7961397..a9542d31 100644 --- a/Data/Shaders/Vulkan/outline.frag +++ b/Data/Shaders/Vulkan/outline.frag @@ -80,7 +80,8 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/outline.vert b/Data/Shaders/Vulkan/outline.vert index cbd3c87c..28356e89 100644 --- a/Data/Shaders/Vulkan/outline.vert +++ b/Data/Shaders/Vulkan/outline.vert @@ -94,7 +94,8 @@ struct OutlinePushConstant OutlinePushConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/shading.frag b/Data/Shaders/Vulkan/shading.frag index ef1451d9..cb8e81eb 100644 --- a/Data/Shaders/Vulkan/shading.frag +++ b/Data/Shaders/Vulkan/shading.frag @@ -80,7 +80,8 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/shading.vert b/Data/Shaders/Vulkan/shading.vert index c598b722..f3182789 100644 --- a/Data/Shaders/Vulkan/shading.vert +++ b/Data/Shaders/Vulkan/shading.vert @@ -97,7 +97,8 @@ struct ShadingPushConstant ShadingPushConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float2 UV : TEXCOORD0; }; diff --git a/Data/Shaders/Vulkan/shadow.frag b/Data/Shaders/Vulkan/shadow.frag index 5dda25da..c6ad6293 100644 --- a/Data/Shaders/Vulkan/shadow.frag +++ b/Data/Shaders/Vulkan/shadow.frag @@ -80,14 +80,11 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; }; -struct PSOutput { - float4 oColor0 : SV_TARGET; -}; - struct ModelPushConstant { int modelIndex; // Push constant data @@ -98,8 +95,6 @@ struct ModelPushConstant [[vk::push_constant]] ModelPushConstant pushConstants; -PSOutput main(PSInput input) +void main(PSInput input) { - PSOutput output; - return output; } \ No newline at end of file diff --git a/Data/Shaders/Vulkan/shadow.vert b/Data/Shaders/Vulkan/shadow.vert index 4dd14f04..dd2cd185 100644 --- a/Data/Shaders/Vulkan/shadow.vert +++ b/Data/Shaders/Vulkan/shadow.vert @@ -91,7 +91,8 @@ struct ModelPushConstant ModelPushConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; }; diff --git a/Data/Shaders/Vulkan/test.vert b/Data/Shaders/Vulkan/test.vert index de1d9394..88c48749 100644 --- a/Data/Shaders/Vulkan/test.vert +++ b/Data/Shaders/Vulkan/test.vert @@ -16,7 +16,7 @@ cbuffer ubo : register(b0, space0) { UBO ubo; } struct VSOutput { float4 Pos : SV_POSITION; -[[vk::location(0)]] float3 Color : COLOR0; + [[vk::location(0)]] float3 Color : COLOR0; }; VSOutput main(VSInput input, uint VertexIndex : SV_VertexID) diff --git a/Data/Shaders/Vulkan/triangle.frag b/Data/Shaders/Vulkan/triangle.frag index 49588583..bd774a41 100644 --- a/Data/Shaders/Vulkan/triangle.frag +++ b/Data/Shaders/Vulkan/triangle.frag @@ -80,12 +80,13 @@ struct CameraView { [[vk::binding(0, 6)]] StructuredBuffer cameras; -struct PSInput { +struct PSInput +{ float4 Position : SV_Position; float3 Color : TEXCOORD0; float2 UV : TEXCOORD1; float3 Normal : TEXCOORD2; - float3x3 TBN : TEXCOORD3; + //float3x3 TBN : TEXCOORD3; }; struct PSOutput { @@ -118,7 +119,7 @@ PSOutput main(PSInput input) { // Sample from texture. } - normal = mul(input.TBN, normal); + //normal = mul(input.TBN, normal); normal = input.Normal / 2.0f + 0.5f; output.oNormal = float4(normal, 1.0f); diff --git a/Data/Shaders/Vulkan/triangle.vert b/Data/Shaders/Vulkan/triangle.vert index 432ba036..64ed8bfd 100644 --- a/Data/Shaders/Vulkan/triangle.vert +++ b/Data/Shaders/Vulkan/triangle.vert @@ -92,12 +92,13 @@ struct ModelPushConstant ModelPushConstant pushConstants; // Outputs -struct VSOutput { +struct VSOutput +{ float4 Position : SV_Position; float3 Color : TEXCOORD0; float2 UV : TEXCOORD1; float3 Normal : TEXCOORD2; - float3x3 TBN : TEXCOORD3; + //float3x3 TBN : TEXCOORD3; }; // Main vertex shader @@ -117,9 +118,9 @@ VSOutput main(uint vertexIndex : SV_VertexID) output.UV = float2(v.uv_x, v.uv_y); output.Normal = normalize(v.normal); - float3 T = normalize(mul((float3x3)modelData.model, normalize(v.tangent.xyz))); - float3 B = normalize(mul((float3x3)modelData.model, normalize(v.bitangent.xyz))); - float3 N = normalize(mul((float3x3)modelData.model, normalize(v.normal)).xyz); - output.TBN = transpose(float3x3(T, B, N)); + //float3 T = normalize(mul((float3x3)modelData.model, normalize(v.tangent.xyz))); + //float3 B = normalize(mul((float3x3)modelData.model, normalize(v.bitangent.xyz))); + //float3 N = normalize(mul((float3x3)modelData.model, normalize(v.normal)).xyz); + //output.TBN = transpose(float3x3(T, B, N)); return output; } \ No newline at end of file diff --git a/Nuake/Source/Engine.cpp b/Nuake/Source/Engine.cpp index c2b95529..171b8c0b 100644 --- a/Nuake/Source/Engine.cpp +++ b/Nuake/Source/Engine.cpp @@ -431,8 +431,6 @@ namespace Nuake return; // We don't care about this file type, we dont support it. } - Logger::Log("Adding " + file->GetName() + " to manifest", "manifest", VERBOSE); - // Register the resource in the manifest const std::string& path = file->GetRelativePath(); const UUID uuid = resolverManager.ResolveUUID(file); diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.h b/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.h index a4b032d9..3d5e099e 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.h @@ -67,7 +67,7 @@ namespace Nuake { private: std::string Name; - bool HasDepthTest = true; + bool HasDepthTest = false; Ref VertShader; Ref FragShader; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/PipelineBuilder.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/PipelineBuilder.cpp index 4c6eca73..c878fa0e 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/PipelineBuilder.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/PipelineBuilder.cpp @@ -180,7 +180,7 @@ void PipelineBuilder::SetColorAttachments(std::vector& formats) void PipelineBuilder::SetLineRendering(bool enabled) { - if (enabled) + if (enabled) { LineRasterization = {}; LineRasterization.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR; @@ -190,7 +190,7 @@ void PipelineBuilder::SetLineRendering(bool enabled) } else { - RenderInfo.pNext = nullptr; + RenderInfo.pNext = nullptr; } } @@ -204,7 +204,7 @@ void PipelineBuilder::DisableDepthTest() DepthStencil.depthTestEnable = VK_FALSE; DepthStencil.depthWriteEnable = VK_FALSE; DepthStencil.depthCompareOp = VK_COMPARE_OP_NEVER; - DepthStencil.depthBoundsTestEnable = VK_FALSE; + DepthStencil.depthBoundsTestEnable = VK_FALSE; DepthStencil.stencilTestEnable = VK_FALSE; DepthStencil.front = {}; DepthStencil.back = {}; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp index bebad4c9..664d1be5 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -29,6 +29,7 @@ ShadowRenderPipeline::ShadowRenderPipeline() ShadowPipeline = RenderPipeline(); auto& shadowPass = ShadowPipeline.AddPass("Shadow"); shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth, true); + shadowPass.SetDepthTest(true); shadowPass.SetShaders(shaderMgr.GetShader("shadow_vert"), shaderMgr.GetShader("shadow_frag")); shadowPass.SetPushConstant(gbufferConstant); shadowPass.SetPreRender([&](PassRenderContext& ctx) { @@ -295,7 +296,7 @@ void SceneRenderPipeline::Render(PassRenderContext& ctx) void* mappedData; vmaMapMemory(VulkanAllocator::Get().GetAllocator(), stagingBuffer->GetAllocation(), &mappedData); - Vector4 entityID = *reinterpret_cast(mappedData); + Vector4 entityID = *reinterpret_cast(mappedData); vmaUnmapMemory(VulkanAllocator::Get().GetAllocator(), stagingBuffer->GetAllocation()); request.callback(static_cast(entityID.r)); @@ -312,6 +313,7 @@ void SceneRenderPipeline::RecreatePipeline() GBufferPipeline = RenderPipeline(); auto& gBufferPass = GBufferPipeline.AddPass("GBuffer"); gBufferPass.SetShaders(shaderMgr.GetShader("basic_vert"), shaderMgr.GetShader("basic_frag")); + gBufferPass.SetDepthTest(true); gBufferPass.AddAttachment("Albedo", GBufferAlbedo->GetFormat()); gBufferPass.AddAttachment("Normal", GBufferNormal->GetFormat()); gBufferPass.AddAttachment("Material", GBufferMaterial->GetFormat()); @@ -580,7 +582,7 @@ void SceneRenderPipeline::RecreatePipeline() gizmoPass.SetPushConstant(debugConstant); gizmoPass.AddInput("Depth"); gizmoPass.AddAttachment("GizmoOutput", GizmoOutput->GetFormat()); - gizmoPass.AddAttachment("GizmoEntityID", GBufferEntityID->GetFormat(), ImageUsage::ColorAttachment, false); + gizmoPass.AddAttachment("GizmoEntityID", GBufferEntityID->GetFormat(), ImageUsage::Default, false); gizmoPass.AddAttachment("GizmoDepth", GBufferDepth->GetFormat(), ImageUsage::Depth, false); gizmoPass.SetDepthTest(true); gizmoPass.SetPreRender([&](PassRenderContext& ctx) diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h index c0b5f194..758b84aa 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h @@ -190,6 +190,7 @@ namespace Nuake MulticastDelegate DebugDrawDelegate; MulticastDelegate DebugLineDrawDelegate; + public: SceneRenderPipeline(); ~SceneRenderPipeline() = default; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/ShaderCompiler.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/ShaderCompiler.cpp index 19816ff9..cf909727 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/ShaderCompiler.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/ShaderCompiler.cpp @@ -125,7 +125,7 @@ Ref ShaderCompiler::CompileShader(const std::string& path) const char* errorMsg = reinterpret_cast(errorBlobUtf8->GetBufferPointer()); std::string errorMsgStr(errorMsg, errorBlobUtf8->GetBufferSize()); - Logger::Log("Shader compilation failed: " + errorMsgStr, "DXC", CRITICAL); + Logger::Log("Shader compilation failed: " + errorMsgStr, "DXC", CRITICAL); throw std::runtime_error("Shader compilation failed: " + errorMsgStr); } diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp index cf0b17cf..2a23bda3 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp @@ -126,14 +126,10 @@ void VkRenderer::Initialize() camData.View = Matrix4(1.0f); camData.Projection = Matrix4(1.0f); - // init camera buffer InitDescriptors(); InitImgui(); - SceneRenderer = CreateRef(); - SceneRenderer->Init(); - IsInitialized = true; } @@ -203,8 +199,7 @@ void VkRenderer::SelectGPU() { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME, - VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME, - + VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME }; auto systemInfoRet = vkb::SystemInfo::get_system_info(); @@ -228,7 +223,7 @@ void VkRenderer::SelectGPU() .set_required_features_12(features12) .set_required_features(VkPhysicalDeviceFeatures{ .fillModeNonSolid = VK_TRUE, - + .wideLines = VK_TRUE }) .set_surface(Surface) .add_required_extensions(requiredExtensions) @@ -401,8 +396,12 @@ void VkRenderer::PrepareSceneData(RenderContext ctx) { scenes.push_back(scene); } - - SceneRenderer->PrepareScenes(scenes, ctx); + + // Maybe this shouldnt be in a scene renderer + if (!SceneRenderers.empty()) + { + SceneRenderers.begin()->second->PrepareScenes(scenes, ctx); + } } void VkRenderer::DrawScenes() diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.h b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.h index 72758e1f..02255657 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.h @@ -175,7 +175,6 @@ namespace Nuake VkCommandPool ImguiCommandPool; std::map> SceneRenderers; - Ref SceneRenderer; public: static VkRenderer& Get()