build: VoxelForge compiles in Unreal 5.7 on Linux (L65); Linux-only Unreal trace timing fields
Linux UE builds failed on the Core wrapper module: the Linux-only PerModuleInline.gen.cpp saw Standalone/Compat
shadow headers instead of the engine's, and WITH_EDITOR was redefined under -Werror. Compat headers now forward
to the engine headers with include_next for generated Linux module TUs (canonical Core TUs opt into the Compat
definitions via CoreNamespacePreamble.h); CoreMinimal.h undefines WITH_EDITOR first. VoxelForgeCore.Build.cs
enables that forwarding and AVX2 on Linux only; VoxelForge.Build.cs disables Unity on Linux only. Portability:
std::int64_t consistently in VoxelContentManager.cpp; grouped &&/|| in VoxelRedefinedDensityField.cpp. Linux-only
trace fields split Core generateTile / mesh copy / RMC stream build. Standalone Clang and GCC whole-view hashes
are unchanged vs 3202193. The Unreal spawn trace is blocked by the owner's new assets (SW route sweep fails).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
e157847509
commit
47148e0a0d
47 files changed
+389
-43
No files matched your search
@@ -9960,6 +9960,9 @@ bool AVoxelWorld::ApplyTileResult(FChunkResult& Result)
|
||||
Sample.QueueWaitSeconds = WorkerQueueSeconds + ResultQueueSeconds;
|
||||
Sample.WorkerTaskSeconds = WorkerTaskSeconds;
|
||||
Sample.GenerationSeconds = GenerationSeconds;
|
||||
Sample.CoreGenerateSeconds = Result.CoreGenerateSeconds;
|
||||
Sample.MeshCopySeconds = Result.MeshCopySeconds;
|
||||
Sample.StreamBuildSeconds = Result.StreamBuildSeconds;
|
||||
Sample.ClassifySeconds = Result.ClassifySeconds;
|
||||
Sample.MeshSeconds = Result.MeshSeconds;
|
||||
Sample.StreamSeconds = Result.StreamSeconds;
|
||||
@@ -13235,6 +13238,11 @@ void AVoxelWorld::LoadCoreTile(const FVoxelTileKey& Tile, EVoxelTileWorkPriority
|
||||
Result.WorkPriority = WorkPriority;
|
||||
Result.GenerationStartCycles = FPlatformTime::Cycles64();
|
||||
Result.GenerationOrdinal = NextStreamingGenerationOrdinal.fetch_add(1, std::memory_order_relaxed) + 1;
|
||||
#if PLATFORM_LINUX
|
||||
const bool bMeasureWorkerPhases = VoxelForgeStartupTrace::IsActive();
|
||||
#else
|
||||
constexpr bool bMeasureWorkerPhases = false;
|
||||
#endif
|
||||
|
||||
auto EnqueueObsolete = [&]()
|
||||
{
|
||||
@@ -13290,7 +13298,14 @@ void AVoxelWorld::LoadCoreTile(const FVoxelTileKey& Tile, EVoxelTileWorkPriority
|
||||
FReadScopeLock Lock(State->WorldLock);
|
||||
if (State->World)
|
||||
{
|
||||
const uint64 CoreGenerateStartCycles = bMeasureWorkerPhases
|
||||
? FPlatformTime::Cycles64() : 0;
|
||||
CoreMesh = State->World->generateTile(CoreKey, Options, CoreError);
|
||||
if (CoreGenerateStartCycles != 0)
|
||||
{
|
||||
Result.CoreGenerateSeconds = FPlatformTime::ToSeconds64(
|
||||
FPlatformTime::Cycles64() - CoreGenerateStartCycles);
|
||||
}
|
||||
}
|
||||
}
|
||||
Result.GenerationEndCycles = FPlatformTime::Cycles64();
|
||||
@@ -13332,6 +13347,8 @@ void AVoxelWorld::LoadCoreTile(const FVoxelTileKey& Tile, EVoxelTileWorkPriority
|
||||
|
||||
if (!Result.bEmpty)
|
||||
{
|
||||
const uint64 MeshCopyStartCycles = bMeasureWorkerPhases
|
||||
? FPlatformTime::Cycles64() : 0;
|
||||
FVoxelMeshData MeshData;
|
||||
MeshData.Vertices.Reserve(Result.NumVertices);
|
||||
MeshData.Normals.Reserve(Result.NumVertices);
|
||||
@@ -13352,8 +13369,20 @@ void AVoxelWorld::LoadCoreTile(const FVoxelTileKey& Tile, EVoxelTileWorkPriority
|
||||
MeshData.NumSurfaceVertices = static_cast<int32>(CoreMesh->groups.surfaceVertexCount);
|
||||
MeshData.NumCeilingTriangles = Result.NumCeilingTriangles;
|
||||
MeshData.NumSkirtTriangles = Result.NumSkirtTriangles;
|
||||
if (MeshCopyStartCycles != 0)
|
||||
{
|
||||
Result.MeshCopySeconds = FPlatformTime::ToSeconds64(
|
||||
FPlatformTime::Cycles64() - MeshCopyStartCycles);
|
||||
}
|
||||
const uint64 StreamBuildStartCycles = bMeasureWorkerPhases
|
||||
? FPlatformTime::Cycles64() : 0;
|
||||
Result.Streams = MakeShared<RealtimeMesh::FRealtimeMeshStreamSet>();
|
||||
BuildTileStreamSet(*Result.Streams, MeshData);
|
||||
if (StreamBuildStartCycles != 0)
|
||||
{
|
||||
Result.StreamBuildSeconds = FPlatformTime::ToSeconds64(
|
||||
FPlatformTime::Cycles64() - StreamBuildStartCycles);
|
||||
}
|
||||
}
|
||||
Result.GenerationEndCycles = FPlatformTime::Cycles64();
|
||||
if (Cancellation->bObsolete.load(std::memory_order_acquire)
|
||||
|
||||
Reference in new issue
Block a user