From 18d22aeb4fffbca8539672fd5146015c12717497 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Thu, 1 Feb 2024 22:54:20 +0100 Subject: [PATCH] A bit of light culling refactor --- res/shaders/lib/Common.slang | 8 ++++++-- res/shaders/lib/LightEnv.slang | 24 +++++++++--------------- src/Engine/Graphics/Vulkan/Graphics.cpp | 5 +++-- src/Engine/Graphics/Vulkan/Texture.cpp | 4 ++-- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/res/shaders/lib/Common.slang b/res/shaders/lib/Common.slang index b6f83fb..65a24f2 100644 --- a/res/shaders/lib/Common.slang +++ b/res/shaders/lib/Common.slang @@ -27,6 +27,10 @@ struct Plane { float3 n; float d; + bool pointInside(float3 point) + { + return dot(n, point) - d > 0.0f; + } }; struct Frustum @@ -35,13 +39,13 @@ struct Frustum Plane basePlane; bool pointInside(float3 point) { - if (dot(basePlane.n, point) + basePlane.d > 0.0f) + if (basePlane.pointInside(point)) { return false; } for(int p = 0; p < 4; ++p) { - if(dot(sides[p].n, point) + sides[p].d > 0.0f) + if(sides[p].pointInside(point)) { return false; } diff --git a/res/shaders/lib/LightEnv.slang b/res/shaders/lib/LightEnv.slang index 2dc1fd2..8c45199 100644 --- a/res/shaders/lib/LightEnv.slang +++ b/res/shaders/lib/LightEnv.slang @@ -33,26 +33,20 @@ struct PointLight : ILightEnv return illuminance * brdf.evaluate(params.tbn, params.viewDir_TS, normalize(lightDir_TS), colorRange.xyz); } - bool insidePlane(Plane plane) + bool insidePlane(Plane plane, float3 position_CS) { - return true;//dot(plane.n, getViewPos().xyz) - plane.d < -colorRange.w; + return plane.pointInside(position_CS); } - bool insideFrustum(Frustum frustum, float zNear, float zFar) + bool insideFrustum(Frustum frustum) { bool result = true; - - //if(getViewPos().z - colorRange.w > zNear || getViewPos().z + colorRange.w < zFar) - //{ - // //result = false; - //} - //for(int i = 0; i < 4 && result; ++i) - //{ - // if(insidePlane(frustum.sides[i])) - // { - // //result = false; - // } - //} + float4 clipPos = mul(pViewParams.projectionMatrix, mul(pViewParams.viewMatrix, position_WS)); + float3 position_CS = clipPos.xyz / clipPos.w; + for(int i = 0; i < 4; ++i) + { + + } return result; } }; diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index e7f65dd..b59e26f 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -36,10 +36,11 @@ Graphics::~Graphics() vkDeviceWaitIdle(handle); pipelineCache = nullptr; allocator = nullptr; - destructionManager = nullptr; allocatedFramebuffers.clear(); shaderCompiler = nullptr; pools.clear(); + queues.clear(); + destructionManager = nullptr; vkDestroyDevice(handle, nullptr); DestroyDebugUtilsMessengerEXT(instance, nullptr, callback); vkDestroyInstance(instance, nullptr); @@ -483,7 +484,7 @@ void Graphics::pickPhysicalDevice() { if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0) { - //meshShadingEnabled = true; + meshShadingEnabled = true; break; } } diff --git a/src/Engine/Graphics/Vulkan/Texture.cpp b/src/Engine/Graphics/Vulkan/Texture.cpp index 8d2d073..ab747db 100644 --- a/src/Engine/Graphics/Vulkan/Texture.cpp +++ b/src/Engine/Graphics/Vulkan/Texture.cpp @@ -321,10 +321,10 @@ void TextureBase::executeOwnershipBarrier(Gfx::QueueType newOwner) .image = image, .subresourceRange = { .aspectMask = aspect, - .baseArrayLayer = 0, - .layerCount = arrayCount, .baseMipLevel = 0, .levelCount = mipLevels, + .baseArrayLayer = 0, + .layerCount = arrayCount, }, }; PCommandPool sourcePool = graphics->getQueueCommands(currentOwner);