From c866937262db4e148b840652f9e9ac4a1f2ae682 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Mon, 21 Oct 2024 20:50:25 +0200 Subject: [PATCH] Fix upload bug and skip upload when RT cores are available --- src/common/rendering/hwrenderer/data/hw_collision.cpp | 10 ++++++---- src/common/rendering/v_video.h | 1 + src/common/rendering/vulkan/vk_renderdevice.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_collision.cpp b/src/common/rendering/hwrenderer/data/hw_collision.cpp index 1acd2738c..9f29dbabb 100644 --- a/src/common/rendering/hwrenderer/data/hw_collision.cpp +++ b/src/common/rendering/hwrenderer/data/hw_collision.cpp @@ -22,6 +22,7 @@ #include "hw_collision.h" #include "hw_levelmesh.h" +#include "v_video.h" #include #include #include @@ -128,7 +129,8 @@ static FVector3 SwapYZ(const FVector3& v) void CPUAccelStruct::Upload() { - // To do: don't bother with this if rayquery is available as it won't be used + if (screen->IsRayQueryEnabled()) + return; unsigned int count = (unsigned int)TLAS.Nodes.size(); for (auto& blas : DynamicBLAS) @@ -165,9 +167,9 @@ void CPUAccelStruct::Upload() CollisionNode& info = destnodes[offset]; info.center = SwapYZ(node.aabb.Center); info.extents = SwapYZ(node.aabb.Extents); - info.left = blasStart + node.left; - info.right = blasStart + node.right; - info.element_index = indexStart + node.element_index; + info.left = node.left != -1 ? blasStart + node.left : -1; + info.right = node.right != -1 ? blasStart + node.right : -1; + info.element_index = node.element_index != -1 ? indexStart + node.element_index : -1; offset++; } instance++; diff --git a/src/common/rendering/v_video.h b/src/common/rendering/v_video.h index 1a34170a0..c3971c8c4 100644 --- a/src/common/rendering/v_video.h +++ b/src/common/rendering/v_video.h @@ -136,6 +136,7 @@ public: virtual void InitializeState() = 0; // For stuff that needs 'screen' set. virtual bool IsVulkan() { return false; } virtual bool IsPoly() { return false; } + virtual bool IsRayQueryEnabled() const { return false; } virtual bool CompileNextShader() { return true; } virtual void SetLevelMesh(LevelMesh *mesh) { } virtual void UpdateLightmaps(const TArray& tiles) {} diff --git a/src/common/rendering/vulkan/vk_renderdevice.h b/src/common/rendering/vulkan/vk_renderdevice.h index df2868c07..07859ed06 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.h +++ b/src/common/rendering/vulkan/vk_renderdevice.h @@ -47,7 +47,7 @@ public: VkRenderBuffers *GetBuffers() { return mActiveRenderBuffers; } FRenderState* RenderState() override; - bool IsRayQueryEnabled() const { return mUseRayQuery; } + bool IsRayQueryEnabled() const override { return mUseRayQuery; } bool IsVulkan() override { return true; } void Update() override;