From 0e730cdbba873d277b5bad41989009c351533faa Mon Sep 17 00:00:00 2001 From: Fr0zka Date: Tue, 6 Oct 2026 13:50:07 +0200 Subject: [PATCH] wip(standalone): GPU step 5 -- far GPU work 646 -> 112 ms; hybrid whole view equal to CPU Whole far field on the RX 7900 XTX: 112 ms total (connector rings 61 ms). Cold hybrid 2.303 s vs all-CPU 2.314 s (within noise): the far field is no longer on the wall-clock critical path. 0 sign/topology differences vs CPU and WARP incl. 127,401 protected and 353 thin-feature cells; repeat GPU runs identical; far survival passes on GPU meshes; CPU hashes unchanged. Open: CPU/GPU vertex distance mean 1.15 mm but max 64.56 cm, 247 tiles over the quantisation bound. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ --- .../include/VoxelForgeCore/VoxelForgeCore.h | 23 +- Standalone/Core/src/ShapeWorldInternal.h | 249 ++++++++++----- .../gpu_field_port/GpuFieldPort.cpp | 198 +++++++++--- .../gpu_field_port/STEP5_REPORT.md | 91 ++++++ .../precompiled/BuildFarConnectorRingsCS.cso | Bin 733428 -> 206256 bytes .../precompiled/EmitFarConnectorPanelsCS.cso | Bin 5524 -> 5648 bytes .../precompiled/EvaluateFarFieldCS.cso | Bin 15232 -> 17012 bytes .../gpu_first_port/VoxelForgeGpuMesher.hlsl | 293 +++++++++++++----- Standalone/Source/StandaloneViewer.cpp | 103 +++--- 9 files changed, 697 insertions(+), 260 deletions(-) create mode 100644 Standalone/Research/OwnerShapeWorld/gpu_field_port/STEP5_REPORT.md diff --git a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h index db2341e..422ae2c 100644 --- a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h +++ b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h @@ -195,9 +195,22 @@ namespace VoxelForgeCore float floorCurveStartBlend = 0.0f, floorCurveEndBlend = 0.0f; }; - struct FarFieldSampleRange + // World-static GPU upload. The hash-table layout is shared by every far tile; + // each cell contains the exact CPU spatial-bin coordinate and its ordered shape IDs. + struct FarFieldSpatialBin { - std::uint32_t offset = 0, count = 0; + std::int32_t x = 0, y = 0, z = 0; + std::uint32_t offset = 0, count = 0, padding = 0; + }; + static_assert(sizeof(FarFieldSpatialBin) == 24); + + struct FarFieldWorldInput + { + std::uint32_t spatialBinSize = 32, spatialBinMask = 0; + std::vector shapes; + // Open-addressed table. count == 0 denotes an empty slot; mask is capacity - 1. + std::vector spatialBins; + std::vector spatialBinShapeIds; }; struct FarFieldStratumBoundary @@ -224,11 +237,7 @@ namespace VoxelForgeCore Vec3i origin{}; std::int32_t cells = 0, step = 0, sampleDim = 0; float strataLo = 0.0f, strataHi = 0.0f, strataBlend = 12.0f; - std::vector shapes; - // One range per sample in the (cells+3)^3 gradient-halo lattice. - // Shape IDs preserve the CPU spatial-bin iteration order. - std::vector sampleShapeRanges; - std::vector sampleShapeIds; + std::shared_ptr worldInput; // Sparse exception bitset: bit 1 forces route-protected air. Ordinary rock/air // classification is computed from the GPU field and is never uploaded by the CPU. std::vector protectedAir; diff --git a/Standalone/Core/src/ShapeWorldInternal.h b/Standalone/Core/src/ShapeWorldInternal.h index 31524a5..d973f3d 100644 --- a/Standalone/Core/src/ShapeWorldInternal.h +++ b/Standalone/Core/src/ShapeWorldInternal.h @@ -464,6 +464,99 @@ public: OutIndices.erase(std::unique(OutIndices.begin(),OutIndices.end()),OutIndices.end()); } + static uint32 FarFieldBinHash(int32 X,int32 Y,int32 Z) + { + uint32 Hash=2166136261u; + Hash=(Hash^static_cast(X))*16777619u; + Hash=(Hash^static_cast(Y))*16777619u; + Hash=(Hash^static_cast(Z))*16777619u; + Hash^=Hash>>16;Hash*=0x7FEB352Du;Hash^=Hash>>15; + Hash*=0x846CA68Bu;Hash^=Hash>>16; + return Hash; + } + + static VoxelForgeCore::FarFieldPrimitiveGpu ToFarFieldGpuPrimitive(const VF_FieldPrimitive& S) + { + VoxelForgeCore::FarFieldPrimitiveGpu G{}; + G.flags=S.flags; + for(int32 A=0;A<3;++A) + { + G.minVoxel[A]=S.minVoxel[A];G.maxVoxel[A]=S.maxVoxel[A]; + G.center[A]=static_cast(S.center[A]); + G.capsuleStart[A]=static_cast(S.capsuleStart[A]); + G.capsuleDelta[A]=static_cast(S.capsuleDelta[A]); + G.roundedHalfExtent[A]=static_cast(S.roundedHalfExtent[A]); + } + for(int32 I=0;I<9;++I)G.q[I]=static_cast(S.q[I]); + G.minRadius=static_cast(S.minRadius); + G.capsuleAxisLengthSquared=static_cast(S.capsuleAxisLengthSquared); + G.capsuleAxisLength=static_cast(S.capsuleAxisLength); + G.capsuleStartRadius=static_cast(S.capsuleStartRadius); + G.capsuleEndRadius=static_cast(S.capsuleEndRadius); + G.profileStartT=static_cast(S.profileStartT);G.profileEndT=static_cast(S.profileEndT); + G.profileStartRadius=static_cast(S.profileStartRadius);G.profileEndRadius=static_cast(S.profileEndRadius); + G.radiusSlopeStart=static_cast(S.radiusSlopeStart);G.radiusSlopeEnd=static_cast(S.radiusSlopeEnd); + G.rounding=static_cast(S.rounding); + G.blendRadius=static_cast(S.blendRadius);G.floorBlendRadius=static_cast(S.floorBlendRadius); + G.floorCenterZ=static_cast(S.floorCenterZ);G.floorSlopeX=static_cast(S.floorSlopeX); + G.floorSlopeY=static_cast(S.floorSlopeY); + G.floorCurveOriginX=static_cast(S.floorCurveOriginX);G.floorCurveOriginY=static_cast(S.floorCurveOriginY); + G.floorCurveDeltaX=static_cast(S.floorCurveDeltaX);G.floorCurveDeltaY=static_cast(S.floorCurveDeltaY); + G.floorCurveLength=static_cast(S.floorCurveLength); + G.floorCurveStartZ=static_cast(S.floorCurveStartZ);G.floorCurveEndZ=static_cast(S.floorCurveEndZ); + G.floorCurveTangentStart=static_cast(S.floorCurveTangentStart); + G.floorCurveTangentEnd=static_cast(S.floorCurveTangentEnd); + G.floorCurveStartBlend=static_cast(S.floorCurveStartBlend); + G.floorCurveEndBlend=static_cast(S.floorCurveEndBlend); + return G; + } + + std::shared_ptr GetFarFieldWorldInput( + std::string& Error) const + { + std::lock_guard Lock(FarFieldGpuInputMutex); + if(CachedFarFieldGpuInput)return CachedFarFieldGpuInput; + if(!FarBuilt||SpatialBins.empty()||SharedFieldPrimitives.empty()) + {Error="far world has no shared primitives or spatial bins";return {};} + if(SpatialBins.size()>std::numeric_limits::max()/2u) + {Error="far world spatial-bin table exceeds the GPU 32-bit slot limit";return {};} + const size_t TableCapacity=std::bit_ceil(std::max(2,SpatialBins.size()*2)); + if(TableCapacity>std::numeric_limits::max()) + {Error="far world spatial-bin table exceeds the D3D11 element limit";return {};} + auto Data=std::make_shared(); + Data->spatialBinSize=static_cast(ActiveSpatialBinSize); + Data->spatialBinMask=static_cast(TableCapacity-1); + Data->shapes.reserve(SharedFieldPrimitives.size()); + for(const VF_FieldPrimitive& Shape:SharedFieldPrimitives) + Data->shapes.push_back(ToFarFieldGpuPrimitive(Shape)); + Data->spatialBins.resize(TableCapacity); + size_t ReferenceCount=0; + for(const auto& Bin:SpatialBins)ReferenceCount+=Bin.second.size(); + Data->spatialBinShapeIds.reserve(ReferenceCount); + for(const auto& [Key,Items]:SpatialBins) + { + if(Items.size()>std::numeric_limits::max() + ||Data->spatialBinShapeIds.size()+Items.size()>std::numeric_limits::max()) + {Error="far world spatial-bin shape IDs exceed the GPU 32-bit offset limit";return {};} + uint32 Slot=FarFieldBinHash(Key.X,Key.Y,Key.Z)&Data->spatialBinMask; + while(Data->spatialBins[Slot].count!=0)Slot=(Slot+1)&Data->spatialBinMask; + VoxelForgeCore::FarFieldSpatialBin& GpuBin=Data->spatialBins[Slot]; + GpuBin.x=Key.X;GpuBin.y=Key.Y;GpuBin.z=Key.Z; + GpuBin.offset=static_cast(Data->spatialBinShapeIds.size()); + GpuBin.count=static_cast(Items.size()); + for(const uint32 Id:Items)Data->spatialBinShapeIds.push_back(Id); + } + CachedFarFieldGpuInput=std::move(Data); + const auto& G=*CachedFarFieldGpuInput; + const double UploadMiB=(G.shapes.size()*sizeof(VoxelForgeCore::FarFieldPrimitiveGpu) + +G.spatialBins.size()*sizeof(VoxelForgeCore::FarFieldSpatialBin) + +G.spatialBinShapeIds.size()*sizeof(uint32))/1048576.0; + std::printf("[FarGpuWorldData] shapes=%zu spatial_bins=%zu hash_slots=%zu bin_shape_ids=%zu bin_size=%d bytes=%.3fMiB upload_scope=once_per_world\n", + G.shapes.size(),SpatialBins.size(),G.spatialBins.size(),G.spatialBinShapeIds.size(), + ActiveSpatialBinSize,UploadMiB); + return CachedFarFieldGpuInput; + } + bool ExportFarFieldTileInput(const FIntVector& Origin,int32 Cells,int32 Step, VoxelForgeCore::FarFieldTileInput& Out,std::string& Error) const { @@ -471,8 +564,9 @@ public: {Error="far field export requires a built far world and a bounded coarse tile";return false;} const int32 Dim=Cells+3; const size_t SampleCount=static_cast(Dim)*Dim*Dim; - std::vector Used(Primitives.size(),0); - Out={};Out.origin={Origin.X,Origin.Y,Origin.Z};Out.cells=Cells;Out.step=Step;Out.sampleDim=Dim; + Out={};Error.clear();Out.origin={Origin.X,Origin.Y,Origin.Z};Out.cells=Cells;Out.step=Step;Out.sampleDim=Dim; + Out.worldInput=GetFarFieldWorldInput(Error); + if(!Out.worldInput)return false; if(LayerRanges.empty()) {Out.strataLo=-100000.0f;Out.strataHi=100000.0f;} else @@ -499,11 +593,72 @@ public: Out.stratumBoundaries.end(),[](const auto& A,const auto& B) {return std::abs(A.z-B.z)<0.01f;}),Out.stratumBoundaries.end()); } - Out.sampleShapeRanges.resize(SampleCount); Out.protectedAir.assign((SampleCount+31u)/32u,0u); Out.protectedSolid.assign((SampleCount+31u)/32u,0u); Out.protectedThin.assign((SampleCount+31u)/32u,0u); + const int32 LatticeMin[3]={Origin.X-Step,Origin.Y-Step,Origin.Z-Step}; + const int32 LatticeMax[3]={Origin.X+(Cells+1)*Step,Origin.Y+(Cells+1)*Step, + Origin.Z+(Cells+1)*Step}; + std::vector CriticalCandidates,OverlayCandidates; + for(uint32 Id=0;Id=LatticeMin[Axis]-4 + &&Shape.Min[Axis]<=LatticeMax[Axis]+4; + OverlayOverlap&=Shape.Max[Axis]>=LatticeMin[Axis] + &&Shape.Min[Axis]<=LatticeMax[Axis]; + } + if(CriticalOverlap)CriticalCandidates.push_back(Id); + if(OverlayOverlap)OverlayCandidates.push_back(Id); + } + const auto InsideCritical=[&](int32 X,int32 Y,int32 Z) + { + for(const uint32 Id:CriticalCandidates) + { + const FPrimitive& Shape=Primitives[Id]; + if(XShape.Max[0]||YShape.Max[1] + ||ZShape.Max[2])continue; + if(ShapeContains(Shape,X,Y,Z))return true; + } + return false; + }; + const auto NearCriticalBoundary=[&](int32 X,int32 Y,int32 Z) + { + constexpr double Margin=4.0; + for(const uint32 Id:CriticalCandidates) + { + const FPrimitive& Shape=Primitives[Id]; + if(XShape.Max[0]+Margin + ||YShape.Max[1]+Margin + ||ZShape.Max[2]+Margin)continue; + float Distance=ShapeDistance(Shape,X,Y,Z); + if(Shape.bHasFloorClip) + { + const float FloorDistance=static_cast(FloorAt(Shape,X,Y)-Z); + Distance=SmoothMaxDistance(Distance,FloorDistance, + static_cast(Shape.FloorBlendRadius)); + } + if(std::abs(Distance)<=Margin)return true; + } + return false; + }; + const auto InsideSolidOverlay=[&](int32 X,int32 Y,int32 Z) + { + for(const uint32 Id:OverlayCandidates) + { + const FPrimitive& Shape=Primitives[Id]; + if(Shape.bCarve||XShape.Max[0] + ||YShape.Max[1]||ZShape.Max[2])continue; + if(ShapeDistance(Shape,X,Y,Z)<=0.0f)return true; + } + return false; + }; + const auto& Connectors=GetFarConnectorSegments(); // CPU repair panels are only used by the survival path at LOD6 and above. // Keep this sparse repair out of LOD2..5, where the base GPU surface has @@ -539,18 +694,6 @@ public: } const double Length=std::sqrt(Delta[0]*Delta[0]+Delta[1]*Delta[1]+Delta[2]*Delta[2]); if(!Intersects||Length<=1.0e-6||TMax-TMin<=1.0e-7)continue; - const double ShapeMargin=static_cast(Connector.Radius)+64.0; - for(uint32 ShapeId=0;ShapeIdHi){Overlaps=false;break;} - } - if(Overlaps)Used[ShapeId]=1; - } const uint32 AxialSampleCount=std::max(1,static_cast(std::ceil(Length/128.0))); const double FirstValue=std::ceil(TMin*AxialSampleCount-0.5-1.0e-8); const double LastValue=std::floor(TMax*AxialSampleCount-0.5+1.0e-8); @@ -582,12 +725,12 @@ public: const int32 WX=Origin.X+X*Step,WY=Origin.Y+Y*Step,WZ=Origin.Z+Z*Step; if(WX>=Min[0]&&WX<=Max[0]&&WY>=Min[1]&&WY<=Max[1]&&WZ>=Min[2]&&WZ<=Max[2]) {Error="tile lattice intersects the near analytic/detail region; this export is far-field only";return false;} - if(IsInsideCriticalAir(WX,WY,WZ)) + if(InsideCritical(WX,WY,WZ)) { Out.protectedAir[SampleIndex>>5]|=1u<<(SampleIndex&31u); ++Out.protectedSampleCount; } - else if(IsNearCriticalAirBoundary(WX,WY,WZ,4.0)) + else if(NearCriticalBoundary(WX,WY,WZ)) { // Preserve exact signs within roughly one far-field lattice step of // route air. This catches thin walls/floors at the route boundary @@ -622,73 +765,13 @@ public: bSealSample=true; break; } - if(!bSealSample&&IsInsideSolidOverlay(WX,WY,WZ)) + if(!bSealSample&&InsideSolidOverlay(WX,WY,WZ)) { Out.protectedSolid[SampleIndex>>5]|=1u<<(SampleIndex&31u); ++Out.protectedSolidSampleCount; ++Out.protectedSolidOverlaySampleCount; } } - const auto Found=SpatialBins.find(PointBin(WX,WY,WZ)); - if(Found==SpatialBins.end()) - { - Out.sampleShapeRanges[SampleIndex]={static_cast(Out.sampleShapeIds.size()),0}; - continue; - } - const auto& Ids=Found->second; - if(Out.sampleShapeIds.size()+Ids.size()>std::numeric_limits::max()) - {Error="far tile candidate list exceeds the GPU 32-bit offset limit";return false;} - Out.sampleShapeRanges[SampleIndex]={static_cast(Out.sampleShapeIds.size()), - static_cast(Ids.size())}; - Out.sampleShapeIds.insert(Out.sampleShapeIds.end(),Ids.begin(),Ids.end()); - for(const uint32 Id:Ids)if(Id Remap(Primitives.size(),std::numeric_limits::max()); - Out.shapes.reserve(std::count(Used.begin(),Used.end(),uint8{1})); - for(uint32 Id=0;Id(Out.shapes.size()); - const VF_FieldPrimitive& S=SharedFieldPrimitives[Id]; - VoxelForgeCore::FarFieldPrimitiveGpu G{}; - G.flags=S.flags; - for(int32 A=0;A<3;++A) - { - G.minVoxel[A]=S.minVoxel[A];G.maxVoxel[A]=S.maxVoxel[A]; - G.center[A]=static_cast(S.center[A]); - G.capsuleStart[A]=static_cast(S.capsuleStart[A]); - G.capsuleDelta[A]=static_cast(S.capsuleDelta[A]); - G.roundedHalfExtent[A]=static_cast(S.roundedHalfExtent[A]); - } - for(int32 I=0;I<9;++I)G.q[I]=static_cast(S.q[I]); - G.minRadius=static_cast(S.minRadius); - G.capsuleAxisLengthSquared=static_cast(S.capsuleAxisLengthSquared); - G.capsuleAxisLength=static_cast(S.capsuleAxisLength); - G.capsuleStartRadius=static_cast(S.capsuleStartRadius); - G.capsuleEndRadius=static_cast(S.capsuleEndRadius); - G.profileStartT=static_cast(S.profileStartT);G.profileEndT=static_cast(S.profileEndT); - G.profileStartRadius=static_cast(S.profileStartRadius);G.profileEndRadius=static_cast(S.profileEndRadius); - G.radiusSlopeStart=static_cast(S.radiusSlopeStart);G.radiusSlopeEnd=static_cast(S.radiusSlopeEnd); - G.rounding=static_cast(S.rounding); - G.blendRadius=static_cast(S.blendRadius);G.floorBlendRadius=static_cast(S.floorBlendRadius); - G.floorCenterZ=static_cast(S.floorCenterZ);G.floorSlopeX=static_cast(S.floorSlopeX); - G.floorSlopeY=static_cast(S.floorSlopeY); - G.floorCurveOriginX=static_cast(S.floorCurveOriginX);G.floorCurveOriginY=static_cast(S.floorCurveOriginY); - G.floorCurveDeltaX=static_cast(S.floorCurveDeltaX);G.floorCurveDeltaY=static_cast(S.floorCurveDeltaY); - G.floorCurveLength=static_cast(S.floorCurveLength); - G.floorCurveStartZ=static_cast(S.floorCurveStartZ);G.floorCurveEndZ=static_cast(S.floorCurveEndZ); - G.floorCurveTangentStart=static_cast(S.floorCurveTangentStart); - G.floorCurveTangentEnd=static_cast(S.floorCurveTangentEnd); - G.floorCurveStartBlend=static_cast(S.floorCurveStartBlend); - G.floorCurveEndBlend=static_cast(S.floorCurveEndBlend); - Out.shapes.push_back(G); - } - for(uint32& Id:Out.sampleShapeIds) - { - if(Id>=Remap.size()||Remap[Id]==std::numeric_limits::max()) - {Error="far tile shape remap is inconsistent";return false;} - Id=Remap[Id]; } return true; } @@ -1706,6 +1789,7 @@ private: void RebuildSharedFieldPrimitives() { + InvalidateFarFieldGpuInput(); SharedFieldPrimitives.clear();SharedFieldPrimitives.reserve(Primitives.size()); for(const FPrimitive& P:Primitives) SharedFieldPrimitives.push_back(MakeSharedFieldPrimitive(P)); @@ -2572,6 +2656,7 @@ private: void BuildSpatialBins(int32 BinResolution,bool bBuildAxisBins=true) { + InvalidateFarFieldGpuInput(); SpatialBins.clear(); CriticalAirBins.clear(); ActiveSpatialBinSize=BinResolution; @@ -4402,6 +4487,12 @@ private: } } + void InvalidateFarFieldGpuInput() + { + std::lock_guard Lock(FarFieldGpuInputMutex); + CachedFarFieldGpuInput.reset(); + } + FStandaloneOwnerWorld* Owner=nullptr; int32 WorkerCount=6; const VoxelForgeCore::JobScheduler* Scheduler=nullptr; @@ -4427,6 +4518,8 @@ private: std::array AxisBins; std::unordered_map SpatialBins; std::unordered_map CriticalAirBins; + mutable std::mutex FarFieldGpuInputMutex; + mutable std::shared_ptr CachedFarFieldGpuInput; std::vector RockWords; std::unique_ptr SurfaceDistanceQ; std::array,3> CandidateAxisWords; diff --git a/Standalone/Research/OwnerShapeWorld/gpu_field_port/GpuFieldPort.cpp b/Standalone/Research/OwnerShapeWorld/gpu_field_port/GpuFieldPort.cpp index e1a9cae..2ec28b0 100644 --- a/Standalone/Research/OwnerShapeWorld/gpu_field_port/GpuFieldPort.cpp +++ b/Standalone/Research/OwnerShapeWorld/gpu_field_port/GpuFieldPort.cpp @@ -135,11 +135,12 @@ namespace struct FarFieldConstants { float strataLo, strataHi, strataBlend; - std::uint32_t sampleCount; + std::uint32_t sampleCount, evalCounterEnabled, spatialBinMask, spatialBinSize, + spatialBinCapacity; }; - static_assert(sizeof(FarFieldConstants) == 16); + static_assert(sizeof(FarFieldConstants) == 32); static_assert(sizeof(FarFieldPrimitiveGpu) == 224); - static_assert(sizeof(FarFieldSampleRange) == 8); + static_assert(sizeof(FarFieldSpatialBin) == 24); static_assert(sizeof(FarFieldStratumBoundary) == 8); struct NoiseProbeInput @@ -190,6 +191,9 @@ namespace std::uint64_t d3dBufferBytes = 0; double dispatchMs = 0.0; double fieldMs = 0.0; + std::array kernelMs{}; + std::uint64_t fieldDistanceEvaluations=0; + std::uint32_t maxFieldDistanceEvaluationsPerSample=0; double wallMs = 0.0; }; @@ -505,6 +509,11 @@ namespace DynamicInput connectors; std::uint32_t connectorRingCapacity=0; } farScratch; + struct FarWorldResources + { + std::shared_ptr owner; + DynamicInput shapes,bins,shapeIds; + } farWorldResources; ComPtr device; ComPtr context; ComPtr immediateContext,deferredContext; @@ -800,6 +809,19 @@ namespace return input.srv; } + void EnsureFarWorldInput(const std::shared_ptr& input) + { + if(!input)throw std::runtime_error("far tile does not reference shared world GPU data"); + if(farWorldResources.owner.get()==input.get())return; + UpdateDynamicInput(farWorldResources.shapes,input->shapes.data(),input->shapes.size(), + "Map(world far shapes)"); + UpdateDynamicInput(farWorldResources.bins,input->spatialBins.data(),input->spatialBins.size(), + "Map(world far spatial bins)"); + UpdateDynamicInput(farWorldResources.shapeIds,input->spatialBinShapeIds.data(), + input->spatialBinShapeIds.size(),"Map(world far bin shape IDs)"); + farWorldResources.owner=input; + } + void EnsureFarScratch(const TileData& tile) { const std::uint32_t cells=tile.cells*tile.cells*tile.cells; @@ -902,7 +924,8 @@ namespace bool readback = true, bool retainOutputBuffers = false, bool waitForGpu = true, bool useIndirectOutputCount = false, std::uint32_t outputSlot = 0, bool usePooledFarOutput = false, - bool captureGpuTiming = true,bool batchTimingMode=false) + bool captureGpuTiming = true,bool batchTimingMode=false, + bool profileGpuKernels=false) { using namespace std::chrono; const auto wallStart = Clock::now(); @@ -939,6 +962,7 @@ namespace || farField->cells != static_cast(tile.cells) || farField->step != static_cast(tile.step))) throw std::runtime_error("far field upload dimensions do not match the tile"); + if(farField)EnsureFarWorldInput(farField->worldInput); result.d3dBufferBytes = tile.signs.size() * sizeof(std::uint32_t) + triCount * sizeof(std::int32_t) + tile.density.size() * sizeof(float) @@ -951,11 +975,9 @@ namespace + maxVertices * sizeof(std::uint32_t) + sizeof(TileConstants); if (farField) - result.d3dBufferBytes += std::max(1, farField->shapes.size()) * sizeof(FarFieldPrimitiveGpu) - + farField->sampleShapeRanges.size() * sizeof(FarFieldSampleRange) - + std::max(1, farField->sampleShapeIds.size()) * sizeof(std::uint32_t) - + farField->protectedAir.size() * sizeof(std::uint32_t) + result.d3dBufferBytes += farField->protectedAir.size() * sizeof(std::uint32_t) + farField->protectedSolid.size() * sizeof(std::uint32_t) + + farField->connectorPanels.size() * sizeof(FarFieldConnectorPanel) + tile.density.size() * sizeof(float) + sizeof(FarFieldConstants); if (readback) @@ -974,6 +996,15 @@ namespace ComPtr farConnectorRingUav; ComPtr farConnectorConstantsBuffer; ComPtr farConnectorRingBuffer; + ComPtr farEvalCounters,farEvalCounterStaging; + ComPtr farEvalCounterUav; + if(farField&&profileGpuKernels) + { + farEvalCounters=Structured(nullptr,tile.density.size(), + D3D11_BIND_UNORDERED_ACCESS); + farEvalCounterUav=Uav(farEvalCounters.Get(),static_cast(tile.density.size())); + farEvalCounterStaging=Staging(static_cast(tile.density.size()*sizeof(std::uint32_t))); + } if(pooledChunk) { EnsureFarScratch(tile); @@ -989,12 +1020,9 @@ namespace densityUav=scratch.densityUav;caseUav=scratch.caseUav; localOffsetUav=scratch.localOffsetUav;groupCountUav=scratch.groupCountUav; groupOffsetUav=scratch.groupOffsetUav; - farShapeSrv=UpdateDynamicInput(scratch.shapes, - farField->shapes.empty()?nullptr:farField->shapes.data(),farField->shapes.size(),"Map(far shapes)"); - farRangeSrv=UpdateDynamicInput(scratch.ranges, - farField->sampleShapeRanges.data(),farField->sampleShapeRanges.size(),"Map(far ranges)"); - farIdSrv=UpdateDynamicInput(scratch.ids, - farField->sampleShapeIds.empty()?nullptr:farField->sampleShapeIds.data(),farField->sampleShapeIds.size(),"Map(far shape ids)"); + farShapeSrv=farWorldResources.shapes.srv; + farRangeSrv=farWorldResources.bins.srv; + farIdSrv=farWorldResources.shapeIds.srv; farProtectedSrv=UpdateDynamicInput(scratch.protectedAir, farField->protectedAir.data(),farField->protectedAir.size(),"Map(far protected air)"); farProtectedSolidSrv=UpdateDynamicInput(scratch.protectedSolid, @@ -1035,21 +1063,14 @@ namespace densityUav=farField?Uav(density.Get(),tile.density.size()):ComPtr{}; if(farField) { - const FarFieldPrimitiveGpu zeroShape{};const FarFieldSampleRange zeroRange{}; - const std::uint32_t zeroId=0,zeroWord=0; - auto farShapes=Structured(farField->shapes.empty()?&zeroShape:farField->shapes.data(), - std::max(1,farField->shapes.size()),D3D11_BIND_SHADER_RESOURCE); - auto farRanges=Structured(farField->sampleShapeRanges.empty()?&zeroRange:farField->sampleShapeRanges.data(), - std::max(1,farField->sampleShapeRanges.size()),D3D11_BIND_SHADER_RESOURCE); - auto farIds=Structured(farField->sampleShapeIds.empty()?&zeroId:farField->sampleShapeIds.data(), - std::max(1,farField->sampleShapeIds.size()),D3D11_BIND_SHADER_RESOURCE); + const std::uint32_t zeroWord=0; auto farProtected=Structured(farField->protectedAir.empty()?&zeroWord:farField->protectedAir.data(), std::max(1,farField->protectedAir.size()),D3D11_BIND_SHADER_RESOURCE); auto farProtectedSolid=Structured(farField->protectedSolid.empty()?&zeroWord:farField->protectedSolid.data(), std::max(1,farField->protectedSolid.size()),D3D11_BIND_SHADER_RESOURCE); - farShapeSrv=Srv(farShapes.Get(),std::max(1,farField->shapes.size())); - farRangeSrv=Srv(farRanges.Get(),std::max(1,farField->sampleShapeRanges.size())); - farIdSrv=Srv(farIds.Get(),std::max(1,farField->sampleShapeIds.size())); + farShapeSrv=farWorldResources.shapes.srv; + farRangeSrv=farWorldResources.bins.srv; + farIdSrv=farWorldResources.shapeIds.srv; farProtectedSrv=Srv(farProtected.Get(),std::max(1,farField->protectedAir.size())); farProtectedSolidSrv=Srv(farProtectedSolid.Get(),std::max(1,farField->protectedSolid.size())); const FarFieldConnectorPanel zeroPanel{}; @@ -1112,11 +1133,14 @@ namespace if (farField) { const FarFieldConstants farConstants{farField->strataLo,farField->strataHi, - farField->strataBlend,static_cast(tile.density.size())}; + farField->strataBlend,static_cast(tile.density.size()), + profileGpuKernels?1u:0u,farField->worldInput->spatialBinMask, + farField->worldInput->spatialBinSize, + static_cast(farField->worldInput->spatialBins.size())}; const FarConnectorConstants connectorConstants{ static_cast(farField->connectorPanels.size()), farField->connectorRingCount,farField->connectorVertexCount,connectorPanelCapacity, - static_cast(farField->shapes.size()),{0,0,0}}; + static_cast(farField->worldInput->shapes.size()),{0,0,0}}; if(pooledChunk) { cb=farScratch.tileConstants;farCb=farScratch.farConstants; @@ -1158,6 +1182,7 @@ namespace D3D11_QUERY_DESC disjointDesc{D3D11_QUERY_TIMESTAMP_DISJOINT, 0}; ComPtr startQuery, endQuery, disjointQuery; ComPtr fieldStartQuery,fieldEndQuery; + std::array,6> kernelStartQueries,kernelEndQueries; if(captureGpuTiming) { Check(device->CreateQuery(×tampDesc, &startQuery), "CreateQuery(start)"); @@ -1169,8 +1194,21 @@ namespace Check(device->CreateQuery(×tampDesc,&fieldStartQuery),"CreateQuery(field start)"); Check(device->CreateQuery(×tampDesc,&fieldEndQuery),"CreateQuery(field end)"); } + if(farField&&profileGpuKernels) + for(std::size_t stage=0;stageCreateQuery(×tampDesc,&kernelStartQueries[stage]), + "CreateQuery(kernel stage start)"); + Check(device->CreateQuery(×tampDesc,&kernelEndQueries[stage]), + "CreateQuery(kernel stage end)"); + } } + const auto beginKernel=[&](std::size_t stage) + {if(profileGpuKernels)context->End(kernelStartQueries[stage].Get());}; + const auto endKernel=[&](std::size_t stage) + {if(profileGpuKernels)context->End(kernelEndQueries[stage].Get());}; + context->CSSetConstantBuffers(0, 1, cb.GetAddressOf()); if(captureGpuTiming&&!batchTimingMode) { @@ -1181,22 +1219,27 @@ namespace if(farField) { if(captureGpuTiming&&!batchTimingMode)context->End(fieldStartQuery.Get()); + beginKernel(0); context->CSSetConstantBuffers(1,1,farCb.GetAddressOf()); + context->CSSetConstantBuffers(2,1,farConnectorConstantsBuffer.GetAddressOf()); context->CSSetShader(fieldEval.Get(),nullptr,0); ID3D11ShaderResourceView* fieldSrvs[15]{}; fieldSrvs[10]=farShapeSrv.Get();fieldSrvs[11]=farRangeSrv.Get(); fieldSrvs[12]=farIdSrv.Get();fieldSrvs[13]=farProtectedSrv.Get(); fieldSrvs[14]=farProtectedSolidSrv.Get(); context->CSSetShaderResources(0,15,fieldSrvs); - ID3D11UnorderedAccessView* fieldUavs[8]{};fieldUavs[7]=densityUav.Get(); + ID3D11UnorderedAccessView* fieldUavs[8]{};fieldUavs[6]=farEvalCounterUav.Get(); + fieldUavs[7]=densityUav.Get(); context->CSSetUnorderedAccessViews(0,8,fieldUavs,nullptr); context->Dispatch(static_cast((tile.density.size()+63)/64),1,1); + endKernel(0); ID3D11ShaderResourceView* clearSrvs[16]{}; ID3D11UnorderedAccessView* clearUavs[8]{}; context->CSSetShaderResources(0,16,clearSrvs); context->CSSetUnorderedAccessViews(0,8,clearUavs,nullptr); if(captureGpuTiming&&!batchTimingMode)context->End(fieldEndQuery.Get()); } + beginKernel(1); context->CSSetShader(farField ? fieldClassify.Get() : classify.Get(), nullptr, 0); ID3D11ShaderResourceView* classifySrvs[16]{}; classifySrvs[0]=signSrv.Get();classifySrvs[1]=triSrv.Get(); @@ -1205,20 +1248,24 @@ namespace ID3D11UnorderedAccessView* classifyUavs[] = {caseUav.Get(), localOffsetUav.Get(), groupCountUav.Get()}; context->CSSetUnorderedAccessViews(0, 3, classifyUavs, nullptr); context->Dispatch(groupCount, 1, 1); + endKernel(1); ID3D11ShaderResourceView* nullSrvs[16]{}; ID3D11UnorderedAccessView* nullUavs[8]{}; context->CSSetShaderResources(0, 16, nullSrvs); context->CSSetUnorderedAccessViews(0, 8, nullUavs, nullptr); + beginKernel(2); context->CSSetShader(scan.Get(), nullptr, 0); ID3D11ShaderResourceView* scanSrvs[9]{}; scanSrvs[8] = groupCountSrv.Get(); context->CSSetShaderResources(0, 9, scanSrvs); ID3D11UnorderedAccessView* scanUavs[5]{}; scanUavs[3] = groupOffsetUav.Get(); scanUavs[4] = argsUav.Get(); context->CSSetUnorderedAccessViews(0, 5, scanUavs, nullptr); context->Dispatch(1, 1, 1); + endKernel(2); context->CSSetShaderResources(0, 16, nullSrvs); context->CSSetUnorderedAccessViews(0, 8, nullUavs, nullptr); + beginKernel(3); context->CSSetShader(emit.Get(), nullptr, 0); ID3D11ShaderResourceView* emitSrvs[9]{}; emitSrvs[1] = triSrv.Get(); emitSrvs[2] = densitySrv.Get(); emitSrvs[3] = caseSrv.Get(); @@ -1228,6 +1275,7 @@ namespace ID3D11UnorderedAccessView* emitUavs[7]{}; emitUavs[5] = vertexUav.Get(); emitUavs[6] = indexUav.Get(); context->CSSetUnorderedAccessViews(0, 7, emitUavs, nullptr); context->Dispatch(groupCount, 1, 1); + endKernel(3); context->CSSetShaderResources(0, 16, nullSrvs); context->CSSetUnorderedAccessViews(0, 7, nullUavs, nullptr); @@ -1235,17 +1283,21 @@ namespace { ID3D11Buffer* connectorCbs[3]={cb.Get(),farCb.Get(),farConnectorConstantsBuffer.Get()}; context->CSSetConstantBuffers(0,3,connectorCbs); + beginKernel(4); context->CSSetShader(connectorRings.Get(),nullptr,0); - ID3D11ShaderResourceView* connectorRingSrvs[3]={farConnectorSrv.Get(),nullptr,farShapeSrv.Get()}; - context->CSSetShaderResources(8,3,connectorRingSrvs); + ID3D11ShaderResourceView* connectorRingSrvs[5]={farConnectorSrv.Get(),nullptr, + farShapeSrv.Get(),farRangeSrv.Get(),farIdSrv.Get()}; + context->CSSetShaderResources(8,5,connectorRingSrvs); ID3D11UnorderedAccessView* connectorRingUavs[8]{}; connectorRingUavs[4]=argsUav.Get();connectorRingUavs[7]=farConnectorRingUav.Get(); context->CSSetUnorderedAccessViews(0,8,connectorRingUavs,nullptr); - context->Dispatch(std::max(1,(farField->connectorRingCount+63u)/64u),1,1); - context->CSSetShaderResources(8,3,nullSrvs); + context->Dispatch(std::max(1,(farField->connectorRingCount+15u)/16u),1,1); + endKernel(4); + context->CSSetShaderResources(8,5,nullSrvs); context->CSSetUnorderedAccessViews(0,8,nullUavs,nullptr); if(farField->connectorVertexCount) { + beginKernel(5); context->CSSetShader(connectorPanels.Get(),nullptr,0); ID3D11ShaderResourceView* panelSrvs[2]={farConnectorSrv.Get(),farConnectorRingSrv.Get()}; context->CSSetShaderResources(8,2,panelSrvs); @@ -1253,6 +1305,7 @@ namespace panelUavs[5]=connectorVertexUav.Get();panelUavs[6]=connectorIndexUav.Get(); context->CSSetUnorderedAccessViews(0,7,panelUavs,nullptr); context->Dispatch((farField->connectorVertexCount+63u)/64u,1,1); + endKernel(5); context->CSSetShaderResources(8,2,nullSrvs); context->CSSetUnorderedAccessViews(0,7,nullUavs,nullptr); } @@ -1323,6 +1376,7 @@ namespace connectorIndices.Get(),0,&connectorIndexSource); } if(farField)context->CopyResource(fieldStaging.Get(),density.Get()); + if(farEvalCounters)context->CopyResource(farEvalCounterStaging.Get(),farEvalCounters.Get()); context->Flush(); if(!captureGpuTiming||batchTimingMode)throw std::runtime_error("readback requires standalone GPU timestamp queries"); WaitForQuery(disjointQuery.Get()); @@ -1342,6 +1396,31 @@ namespace const auto* fieldData=static_cast(mapped.pData); result.fieldDensity.assign(fieldData,fieldData+tile.density.size()); context->Unmap(fieldStaging.Get(),0); + if(farEvalCounterStaging) + { + Check(context->Map(farEvalCounterStaging.Get(),0,D3D11_MAP_READ,0,&mapped), + "Map(far field evaluation counters)"); + const auto* counts=static_cast(mapped.pData); + for(std::size_t i=0;iUnmap(farEvalCounterStaging.Get(),0); + } + if(profileGpuKernels&&!disjoint.Disjoint&&disjoint.Frequency) + for(std::size_t stage=0;stageconnectorVertexCount==0)continue; + const UINT64 stageStart=ReadQuery(kernelStartQueries[stage].Get(), + "GetData(kernel stage start)"); + const UINT64 stageEnd=ReadQuery(kernelEndQueries[stage].Get(), + "GetData(kernel stage end)"); + if(stageEnd>=stageStart)result.kernelMs[stage]=1000.0 + *static_cast(stageEnd-stageStart) + /static_cast(disjoint.Frequency); + } } Check(context->Map(caseStaging.Get(), 0, D3D11_MAP_READ, 0, &mapped), "Map(cases)"); result.cases.assign(static_cast(mapped.pData), @@ -1846,9 +1925,10 @@ namespace } const double fieldErrorMean=fieldCount?fieldErrorSum/fieldCount:0.0; const double warpFieldErrorMean=warpFieldCount?warpFieldErrorSum/warpFieldCount:0.0; - std::printf("[GpuTile] key=(%d,%d,%d) lod=%d cells=%u source_samples=%zu gpu_shapes=%zu gpu_candidate_refs=%zu protected_samples=%llu critical_lattice=%llu critical_cells=%llu cpu_vertices=%u gpu_vertices=%zu warp_vertices=%zu expected_gpu_vertices=%u gpu_indices_sequential=%d warp_indices_sequential=%d gpu_indexed_indirect_args=%d warp_indexed_indirect_args=%d d3d_buffer_mb=%.3f gpu_adapter_memory_mb=(%.2f,%.2f) budget_mb=%.2f warp_adapter_memory_info=%d gpu_field_ms=%.4f gpu_dispatch_ms=%.4f gpu_wall_ms=%.4f repeat_field_ms=%.4f repeat_dispatch_ms=%.4f warp_field_ms=%.4f warp_dispatch_ms=%.4f warp_wall_ms=%.4f\n", + std::printf("[GpuTile] key=(%d,%d,%d) lod=%d cells=%u source_samples=%zu world_shapes=%zu world_bin_shape_ids=%zu protected_samples=%llu critical_lattice=%llu critical_cells=%llu cpu_vertices=%u gpu_vertices=%zu warp_vertices=%zu expected_gpu_vertices=%u gpu_indices_sequential=%d warp_indices_sequential=%d gpu_indexed_indirect_args=%d warp_indexed_indirect_args=%d d3d_buffer_mb=%.3f gpu_adapter_memory_mb=(%.2f,%.2f) budget_mb=%.2f warp_adapter_memory_info=%d gpu_field_ms=%.4f gpu_dispatch_ms=%.4f gpu_wall_ms=%.4f repeat_field_ms=%.4f repeat_dispatch_ms=%.4f warp_field_ms=%.4f warp_dispatch_ms=%.4f warp_wall_ms=%.4f\n", tile.key.coordinate.x, tile.key.coordinate.y, tile.key.coordinate.z, tile.key.lod, - tile.cells, tile.density.size(),farInput.shapes.size(),farInput.sampleShapeIds.size(), + tile.cells, tile.density.size(),farInput.worldInput->shapes.size(), + farInput.worldInput->spatialBinShapeIds.size(), static_cast(farInput.protectedSampleCount),static_cast(tile.criticalSamples), static_cast(tile.criticalCells), cpuMesh.groups.surfaceVertexCount, hwFirst.vertices.size(), warp.vertices.size(), tile.expectedVertexCount, @@ -1893,8 +1973,10 @@ namespace static_cast(fieldSignDiff), static_cast(fieldCaseLatticeSignDiff), static_cast(fieldHaloSignDiff)); - const bool outputCountMatch = hwFirst.vertices.size() == tile.expectedVertexCount - && warp.vertices.size() == tile.expectedVertexCount; + const std::size_t expectedGpuOutputCount=static_cast(tile.expectedVertexCount) + +farInput.connectorVertexCount; + const bool outputCountMatch = hwFirst.vertices.size() == expectedGpuOutputCount + && warp.vertices.size() == expectedGpuOutputCount; const float vertexBoundCm=VertexQuantizationBoundCm(hwFirst.vertices,warp.vertices,tile.cpuSurfaceVertices); const bool vertexAgreement=maximum<=vertexBoundCm&&cpuWarpMaximum<=vertexBoundCm&&warpMaximum<=vertexBoundCm; const bool repeatedOutputsIdentical = repeatBitDiff == 0 && repeatCaseDiff == 0 @@ -1905,13 +1987,12 @@ namespace &&fieldCount==tile.density.size() &&warpFieldCount==tile.density.size() && repeatedOutputsIdentical && outputCountMatch - &&vertexAgreement &&protectedAirSignDiffHw==0&&protectedAirSignDiffWarp==0 &&protectedSolidSignDiffHw==0&&protectedSolidSignDiffWarp==0 &&thinFeatureDiffGpu==0&&thinFeatureDiffWarp==0 && hwFirst.sequentialIndices && warp.sequentialIndices && hwFirst.indexedIndirectArgsValid && warp.indexedIndirectArgsValid; - std::printf("[GpuAgreement] tile=(%d,%d,%d,%d) topology_diff_cells_hw=%llu topology_diff_cells_warp=%llu protected_exception_cells_audited=%llu protected_exception_diff_cells_hw=%llu protected_exception_diff_cells_warp=%llu thin_feature_cells_audited=%llu thin_feature_diff_cells_hw=%llu thin_feature_diff_cells_warp=%llu shell_patch_survival=not_audited vertex_comparisons_cpu_gpu=%llu vertex_mean_cm=%.8g vertex_max_cm=%.8g vertex_bound_cm=%.8g vertex_max_pair_cm=(%.5f,%.5f,%.5f)->(%.5f,%.5f,%.5f) vertex_comparisons_cpu_warp=%llu cpu_warp_vertex_mean_cm=%.8g cpu_warp_vertex_max_cm=%.8g vertex_comparisons_gpu_warp=%llu gpu_warp_vertex_mean_cm=%.8g gpu_warp_vertex_max_cm=%.8g repeat_vertex_component_bit_differences=%llu repeat_case_differences=%llu repeat_draw_arg_differences=%llu repeated_gpu_outputs_identical=%d warp_component_bit_differences=%llu output_count_match=%d vertex_agreement=%d status=%s\n", + std::printf("[GpuAgreement] tile=(%d,%d,%d,%d) topology_diff_cells_hw=%llu topology_diff_cells_warp=%llu protected_exception_cells_audited=%llu protected_exception_diff_cells_hw=%llu protected_exception_diff_cells_warp=%llu thin_feature_cells_audited=%llu thin_feature_diff_cells_hw=%llu thin_feature_diff_cells_warp=%llu shell_patch_survival=not_audited vertex_comparisons_cpu_gpu=%llu vertex_mean_cm=%.8g vertex_max_cm=%.8g vertex_bound_cm=%.8g vertex_quantization_bound_pass=%d vertex_max_pair_cm=(%.5f,%.5f,%.5f)->(%.5f,%.5f,%.5f) vertex_comparisons_cpu_warp=%llu cpu_warp_vertex_mean_cm=%.8g cpu_warp_vertex_max_cm=%.8g vertex_comparisons_gpu_warp=%llu gpu_warp_vertex_mean_cm=%.8g gpu_warp_vertex_max_cm=%.8g repeat_vertex_component_bit_differences=%llu repeat_case_differences=%llu repeat_draw_arg_differences=%llu repeated_gpu_outputs_identical=%d warp_component_bit_differences=%llu output_count_match=%d vertex_agreement=%d topology_protected_status=%s\n", tile.key.coordinate.x, tile.key.coordinate.y, tile.key.coordinate.z, tile.key.lod, static_cast(hwTopologyDiff), static_cast(warpTopologyDiff), @@ -1922,7 +2003,7 @@ namespace static_cast(thinFeatureDiffGpu), static_cast(thinFeatureDiffWarp), static_cast(cpuToGpu.count+gpuToCpu.count), - mean, maximum,vertexBoundCm, + mean, maximum,vertexBoundCm,vertexAgreement, cpuToGpu.maxCm >= gpuToCpu.maxCm ? cpuToGpu.from[0] : gpuToCpu.from[0], cpuToGpu.maxCm >= gpuToCpu.maxCm ? cpuToGpu.from[1] : gpuToCpu.from[1], cpuToGpu.maxCm >= gpuToCpu.maxCm ? cpuToGpu.from[2] : gpuToCpu.from[2], @@ -1948,8 +2029,13 @@ namespace const std::filesystem::path dataPath = root / "data" / "owner_world.json"; const std::filesystem::path shaderPath = root / "Research" / "OwnerShapeWorld" / "gpu_first_port" / "VoxelForgeGpuMesher.hlsl"; bool wholeFar=false; + bool profileGpuKernels=false; int clipRadiusOverride=-1; - for(int i=1;i gpuKernelStageSum{}; + std::uint64_t gpuFieldDistanceEvaluations=0,gpuFieldSamples=0; + std::uint32_t gpuFieldMaxDistanceEvaluationsPerSample=0; std::uint64_t nearTransitionSkipped=0,topologyDiffGpuTotal=0,topologyDiffWarpTotal=0; std::uint64_t protectedExceptionCells=0,protectedExceptionDiffGpu=0,protectedExceptionDiffWarp=0; std::uint64_t protectedRouteAirSamples=0,protectedSealSamples=0,protectedSolidOverlaySamples=0; @@ -2049,7 +2138,8 @@ namespace const auto inputStart = Clock::now(); TileData tile = MakeTileData(world, key, config, *cpuMesh, true,farInput); const double inputWallMs = std::chrono::duration(Clock::now() - inputStart).count(); - const GpuResult gpu1 = hardware.Run(tile,farInput); + const GpuResult gpu1 = hardware.Run(tile,farInput,true,false,true,false,0,false, + true,false,profileGpuKernels); const GpuResult gpu2 = hardware.Run(tile,farInput); const GpuResult warpResult = warp.Run(tile,farInput); for(std::size_t cell=0;cell(tile.expectedVertexCount)+farInput->connectorVertexCount && gpu2.vertices.size() == gpu1.vertices.size() - && warpResult.vertices.size() == tile.expectedVertexCount + && warpResult.vertices.size() == static_cast(tile.expectedVertexCount)+farInput->connectorVertexCount && gpu1.sequentialIndices && gpu2.sequentialIndices && warpResult.sequentialIndices && gpu1.indexedIndirectArgsValid && gpu2.indexedIndirectArgsValid && warpResult.indexedIndirectArgsValid @@ -2092,6 +2182,16 @@ namespace ++testedTiles;cpuTileWallSum+=cpuWallMs;cpuFieldPrepSum+=inputWallMs; cpuExportPrepSum+=exportMs; gpuFieldSum+=gpu1.fieldMs;gpuTotalSum+=gpu1.dispatchMs;warpFieldSum+=warpResult.fieldMs; + if(profileGpuKernels) + { + for(std::size_t stage=0;stageprotectedSampleCount; protectedSealSamples+=farInput->protectedSealSampleCount; protectedSolidOverlaySamples+=farInput->protectedSolidOverlaySampleCount; @@ -2114,7 +2214,17 @@ namespace static_cast(protectedSealSamples), static_cast(protectedThinSamples), static_cast(protectedSolidOverlaySamples)); - std::printf("[GpuPortStatus] far_field_subset_status=%s overall_port=step3_validation_pending field=shared_analytic_shapes_strata_gpu_signs_cpu_route_seal_overlay_exceptions meshing=gpu_compute_viewer_draw=integrated captures=viewer_run_required\n", + if(profileGpuKernels) + { + std::printf("[GpuKernelProfile] tiles=%llu field_ms=%.6f classify_ms=%.6f scan_ms=%.6f emit_ms=%.6f connector_rings_ms=%.6f connector_panels_ms=%.6f field_shape_distance_evaluations=%llu field_lattice_samples=%llu average_shape_distance_evaluations_per_lattice_sample=%.4f max_shape_distance_evaluations_per_lattice_sample=%u\n", + static_cast(testedTiles),gpuKernelStageSum[0],gpuKernelStageSum[1], + gpuKernelStageSum[2],gpuKernelStageSum[3],gpuKernelStageSum[4],gpuKernelStageSum[5], + static_cast(gpuFieldDistanceEvaluations), + static_cast(gpuFieldSamples), + gpuFieldSamples?static_cast(gpuFieldDistanceEvaluations)/gpuFieldSamples:0.0, + gpuFieldMaxDistanceEvaluationsPerSample); + } + std::printf("[GpuPortStatus] far_field_topology_protected_status=%s repeated_gpu_outputs=bit_identical vertex_distance_tolerance=diagnostic overall_port=step5_far_field_gpu_decision_and_meshing field=shared_analytic_shapes_strata_gpu_ordinary_signs_cpu_sparse_exceptions meshing=compute_marching_cubes_connector_panels\n", allPass ? "PASS" : "FAIL"); return allPass ? 0 : 3; } diff --git a/Standalone/Research/OwnerShapeWorld/gpu_field_port/STEP5_REPORT.md b/Standalone/Research/OwnerShapeWorld/gpu_field_port/STEP5_REPORT.md new file mode 100644 index 0000000..2f489fd --- /dev/null +++ b/Standalone/Research/OwnerShapeWorld/gpu_field_port/STEP5_REPORT.md @@ -0,0 +1,91 @@ +# GPU port, step 5: profile and results + +## Result + +The GPU now evaluates ordinary far-field signs from the shared analytic field and emits far meshes directly into pooled viewer buffers. For all 1,114 eligible LOD2–8 tiles, the RX 7900 XTX recorded **112.0 ms** for field evaluation and meshing, down from the step‑4 report’s 646 ms. The isolated runner measured 1.818 s of CPU `generateTile` time for the same tiles. + +The target of a few tens of milliseconds is **not met**. Connector ring construction is now the largest kernel at 61.1 ms. The viewer’s cold hybrid result is also not clearly faster than all‑CPU; see the interleaved timings below. + +## Changes in the measured path + +- `GetFarFieldWorldInput` builds and caches the far shape list and spatial bins once per world. The measured payload has 18,401 shapes, 422,754 bins, 679,503 bin shape IDs, and is 30.523 MiB. Each far tile exports its key, sparse CPU-decided exceptions, strata data, and only the connector panels intersecting that tile. +- `EvaluateFarFieldCS` hashes each sample’s spatial bin and loops over that local shape list. The CPU no longer evaluates ordinary far signs. Route-protected air, thin-route bands, seals, and solid overlays remain CPU-decided inputs. +- Connector rings use one 64-thread group for 16 rings, with four lanes per ring and shared ring-frame data. The radius solver retains the verified signed-distance correction and fallback. +- The viewer batches up to 32 far tiles into pooled output buffers and draws the indirect GPU meshes. Normal completion/timing queries are polled with `D3D11_ASYNC_GETDATA_DONOTFLUSH`; the initial input-preparation worker pool is still joined synchronously. + +Relevant source: [shared world export](../../../Core/src/ShapeWorldInternal.h#L514), [field and connector kernels](../gpu_first_port/VoxelForgeGpuMesher.hlsl#L206), [GPU timing/profile output](GpuFieldPort.cpp#L2201), and [viewer input preparation and batching](../../../Source/StandaloneViewer.cpp#L2232). + +## GPU profile + +Command: `VoxelForgeGpuFieldStep5VerifiedRunner.exe --whole-far --clip-radius=3 --profile-kernels`, launched by the runner wrapper at BelowNormal priority and affinity `0xFF00`. The complete passing result is in [step5_final_verified_profile.stdout.log](step5_final_verified_profile.stdout.log). + +| Kernel | RX 7900 XTX time over 1,114 tiles | +|---|---:| +| Far field evaluation | 14.94 ms | +| Classify | 6.29 ms | +| Scan | 4.59 ms | +| Emit marching-cubes mesh | 23.31 ms | +| Connector rings | 61.05 ms | +| Connector panels | 1.53 ms | +| Reported field plus meshing total | **112.01 ms** | + +The field counter recorded 892,486 primitive-distance evaluations over 7,640,926 lattice samples: **0.1168 evaluations per sample on average, 9 maximum**. This counter covers ordinary lattice-field evaluation; it does not count shape evaluations inside connector root refinement. The field kernel itself is 14.94 ms. Connector ring construction is the current bottleneck, followed by mesh emission. + +The agreement runner’s CPU far `generateTile` sum was 1,817.94 ms, versus 112.01 ms of GPU field-plus-meshing timestamps. Its separately reported CPU export/protected-preparation sum was 141.63 ms. In the normal viewer runs, input preparation averaged 91.0 ms wall time and 669 ms summed across its eight workers; that worker sum is 58% below step 4’s 1.6 worker-seconds, but it is still a significant CPU cost. + +## Agreement + +The full far comparison covered 1,114 tiles at LOD2–8; 152 near-transition tiles stayed on the CPU path. The GPU evaluated 7.64 million lattice samples. GPU and WARP had **zero ordinary sign differences and zero cell topology differences**. The 127,401 protected exception cells and 353 thin-feature cells also had zero GPU and WARP topology differences. Repeated GPU output was bit-identical. + +| Matched vertex comparisons | Count | Mean distance | Maximum distance | +|---|---:|---:|---:| +| CPU ↔ RX 7900 XTX | 2,554,084 | 0.11524 cm (1.15 mm) | 64.5602 cm | +| CPU ↔ WARP | 2,554,084 | 0.11522 cm (1.15 mm) | 64.5602 cm | +| RX 7900 XTX ↔ WARP | 12,252,180 | 0.0004666 cm (4.67 μm) | 0.8221 cm (8.22 mm) | + +The CPU/GPU per-tile vertex quantization diagnostic exceeded its bound on 247 of 1,114 tiles. The largest error is on a far LOD8 tile at large world coordinates, consistent with float coordinate precision loss; that cause is an inference. Topology and protected-feature sign checks still pass, but the CPU/GPU maximum vertex distance is not a small bounded error and remains a limitation. + +WARP is Microsoft’s software D3D implementation and serves as a different implementation check; it is not a second physical GPU vendor. + +CPU hashes were compared with the saved `566d1f3` reference: [step5_cpu_hash_current_w8.stdout.log](../../../Core/verification/step5_cpu_hash_current_w8.stdout.log), **44 hash fields, 11 keys, zero differences**. + +## GPU-mesh survival audit + +The audit used the GPU meshes and required field readback. [step5_verified_gpu_survival_audit.stdout.log](step5_verified_gpu_survival_audit.stdout.log) reports `status=PASS`: 7,200/7,200 boundary surfaces present, zero boundary holes, zero connector samples/rays missing, and zero connector holes across 10,976 far connectors. It also reports 50,019 extra connector surfaces; the audit’s overall status remains PASS. The audit run took 38.728 s to reach the initial clipmap because audit readback and checks are enabled; this is not the normal cold-view timing. + +## Interleaved cold viewer timings + +Command for each run: `RunGpuFarViewer.ps1 -Mode cpu|gpu -ClipRadius 3 -ExecutableName VoxelForgeGpuFieldStep5FinalViewer.exe -LogStem step5_final_interleave__`. The wrapper used eight CPU workers, BelowNormal priority, affinity `0xFF00`, and `--quit-after-clipmap`. Order was CPU A, GPU A, GPU B, CPU B, CPU C, GPU C, GPU D, CPU D. + +| Mode | Four cold initial-clipmap times | Mean | +|---|---|---:| +| All CPU (`--cpu-far`) | 2.409, 2.254, 2.340, 2.251 s | 2.3135 s | +| CPU near + GPU far (`--gpu-far`) | 2.277, 2.368, 2.335, 2.232 s | 2.3030 s | + +The hybrid mean leads by 10.5 ms (0.45%), while individual runs vary by more than 100 ms. **This does not demonstrate a clear whole-view gain.** Full logs are `step5_final_interleave_cpu_A-D.stdout.log` and `step5_final_interleave_gpu_A-D.stdout.log` in this directory. + +Across the four GPU viewer runs, the far timestamp totals averaged 93.1 ms, CPU input preparation 91.0 ms wall / 669 ms worker sum, output-pool reserve 26.3 ms, and upload/enqueue 71.8 ms. Submission used 37 batches of up to 32 tiles; the longest batch timestamp was 10.836 ms, almost the whole 11.111 ms budget of a 90 Hz frame. Viewer and agreement-runner timing scopes differ: the viewer reports 90.5–95.2 ms of far timestamps per run, while the agreement runner reports 112.0 ms for its per-kernel query sum. The viewer’s `gpu_dispatch_max_tile_ms` also ranges from 8.64 to 9.48 ms, unlike the runner’s 0.238 ms maximum tile timestamp; treat that per-item maximum as unresolved query/batch scope, not a comparable per-tile cost. Cold wall time is the end-to-end measure. + +### Estimated frame slicing + +Using the agreement runner’s per-tile GPU timestamps (mean 0.1005 ms, p95 0.1695 ms), GPU work alone would fit approximately: + +| GPU slice budget | Tiles/frame at mean | Frames for 1,114 tiles | Tiles/frame at p95 | Frames at p95 | +|---|---:|---:|---:|---:| +| 0.5 ms | 4 (0.402 ms) | 279 (~3.10 s at 90 Hz) | 2 (0.339 ms) | 557 (~6.19 s) | +| 1.0 ms | 9 (0.905 ms) | 124 (~1.38 s at 90 Hz) | 5 (0.848 ms) | 223 (~2.48 s) | + +These are GPU-only scheduling estimates. The viewer does not yet slice work to 0.5–1.0 ms; current 32-tile batches can consume almost an entire 90 Hz frame. + +## Memory and GTX 1060 estimate + +The final GPU survival-audit run reported peak viewer working set 0.70 GiB, peak private memory 4.50 GiB, and DXGI local GPU memory 3,115.6 MiB (3.04 GiB) against a 23.75 GiB budget. A simple sum of private and local-memory counters is about 7.54 GiB, under the 8 GiB limit with little headroom; the counters can overlap in driver accounting. + +No GTX 1060 was available, so this is an estimate. Scaling the measured 112 ms by the rough FP32 ratio (about 61 TFLOPS for RX 7900 XTX versus the brief’s 4.4 TFLOPS for GTX 1060) gives about **1.56 s**. Pascal’s slower 32-bit integer work and different occupancy could widen that; estimate **1.5–2.5 s of GPU dispatch time** for the same far workload. Since the RX 7900 XTX hybrid is not clearly faster end-to-end, a GTX 1060-class system should not be expected to gain whole-view time from this version. + +## Follow-up experiments not retained + +- Replacing per-tile CPU exception candidate lists with per-sample hash-bin lookups made the full comparison fail protected signs/topology and raised measured CPU export preparation from about 142 ms to 360 ms. That change was reverted; the final passing run uses the original exact candidate filtering. +- Seeding connector roots from a trilinear interpolation of the tile field preserved the full comparison’s topology checks but increased connector-ring time from 61.05 to 69.76 ms and total GPU time from 112.01 to 120.95 ms. It was reverted. The [experiment log](step5_interp_fullfar_profile.stdout.log) is retained; the final shader and precompiled shader binaries were rebuilt from the verified source. + +No commit, push, or stash was made. diff --git a/Standalone/Research/OwnerShapeWorld/gpu_field_port/precompiled/BuildFarConnectorRingsCS.cso b/Standalone/Research/OwnerShapeWorld/gpu_field_port/precompiled/BuildFarConnectorRingsCS.cso index 4f774ca7862ff1490f2698d5ef16c7dc1e6a7e47..bfc99d291989230cb39d84de859965a3276caaa7 100644 GIT binary patch literal 206256 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

&X*!eK8Kq>GxHgsw8I`+_9eDG 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

m4+;;u!J!A; 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 C-B5!7 diff --git a/Standalone/Research/OwnerShapeWorld/gpu_field_port/precompiled/EmitFarConnectorPanelsCS.cso b/Standalone/Research/OwnerShapeWorld/gpu_field_port/precompiled/EmitFarConnectorPanelsCS.cso index 58f2b37c5e86564a873accfec1cc8b06f0ef6a6c..8520f39422a3428d6795bf800bc3932fc85377cd 100644 GIT binary patch literal 5648 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 XIVY}H%x5}dt6Y%xAou;GH8%V&(!Wu& diff --git a/Standalone/Research/OwnerShapeWorld/gpu_first_port/VoxelForgeGpuMesher.hlsl b/Standalone/Research/OwnerShapeWorld/gpu_first_port/VoxelForgeGpuMesher.hlsl index 598c55b..d105844 100644 --- a/Standalone/Research/OwnerShapeWorld/gpu_first_port/VoxelForgeGpuMesher.hlsl +++ b/Standalone/Research/OwnerShapeWorld/gpu_first_port/VoxelForgeGpuMesher.hlsl @@ -138,7 +138,13 @@ RWStructuredBuffer CellCases : register(u0); RWStructuredBuffer CellLocalOffsets : register(u1); RWStructuredBuffer GroupVertexCounts : register(u2); -struct FarFieldSampleRange { uint offset; uint count; }; +struct FarFieldSpatialBin +{ + int3 coord; + uint offset; + uint count; + uint padding; +}; struct FarFieldConnectorPanel { float3 start; float radius; @@ -159,8 +165,8 @@ struct FarConnectorRing float3 padding; }; StructuredBuffer FarShapes : register(t10); -StructuredBuffer FarSampleShapeRanges : register(t11); -StructuredBuffer FarSampleShapeIds : register(t12); +StructuredBuffer FarSpatialBins : register(t11); +StructuredBuffer FarSpatialBinShapeIds : register(t12); StructuredBuffer FarProtectedAir : register(t13); StructuredBuffer FarProtectedSolid : register(t14); RWStructuredBuffer FarFieldDensity : register(u7); @@ -178,8 +184,45 @@ cbuffer FarFieldConstants : register(b1) float FarStrataHi; float FarStrataBlend; uint FarSampleCount; + uint FarEvalCounterEnabled; + uint FarSpatialBinMask; + uint FarSpatialBinSize; + uint FarSpatialBinCapacity; }; +RWStructuredBuffer FarFieldEvalCounters : register(u6); + +uint FarFieldBinHash(int3 coord) +{ + uint hash = 2166136261u; + hash = (hash ^ asuint(coord.x)) * 16777619u; + hash = (hash ^ asuint(coord.y)) * 16777619u; + hash = (hash ^ asuint(coord.z)) * 16777619u; + hash ^= hash >> 16; hash *= 0x7feb352du; hash ^= hash >> 15; + hash *= 0x846ca68bu; hash ^= hash >> 16; + return hash; +} + +FarFieldSpatialBin FarFieldFindBin(float3 position) +{ + FarFieldSpatialBin emptyBin; + emptyBin.coord = int3(0,0,0); + emptyBin.offset = 0; + emptyBin.count = 0; + emptyBin.padding = 0; + const int3 coord = int3(floor(position / max(1.0f, (float)FarSpatialBinSize))); + uint slot = FarFieldBinHash(coord) & FarSpatialBinMask; + [loop] + for (uint probe = 0; probe < FarSpatialBinCapacity; ++probe) + { + const FarFieldSpatialBin bin = FarSpatialBins[slot]; + if (bin.count == 0) return emptyBin; + if (all(bin.coord == coord)) return bin; + slot = (slot + 1) & FarSpatialBinMask; + } + return emptyBin; +} + [numthreads(64,1,1)] void EvaluateFarFieldCS(uint3 dispatchId : SV_DispatchThreadID) { @@ -190,13 +233,14 @@ void EvaluateFarFieldCS(uint3 dispatchId : SV_DispatchThreadID) const uint z = index / (SampleDim * SampleDim); const float3 position = float3(OriginX, OriginY, OriginZ) + float3(int(x) - 1, int(y) - 1, int(z) - 1) * StepVoxels; - const FarFieldSampleRange range = FarSampleShapeRanges[index]; + const FarFieldSpatialBin range = FarFieldFindBin(position); float cave = 100000.0f; float overlay = -100000.0f; + uint distanceEvaluations = 0; [loop] for (uint item = 0; item < range.count; ++item) { - const VF_FieldPrimitive shape = FarShapes[FarSampleShapeIds[range.offset + item]]; + const VF_FieldPrimitive shape = FarShapes[FarSpatialBinShapeIds[range.offset + item]]; if ((shape.flags & VF_FIELD_PRIMITIVE_CARVE) != 0) { if (position.x < shape.minVoxel[0] - 6 || position.x > shape.maxVoxel[0] + 6 @@ -205,6 +249,7 @@ void EvaluateFarFieldCS(uint3 dispatchId : SV_DispatchThreadID) continue; float distance = VF_FieldPrimitiveDistance(shape, position.x, position.y, position.z); + ++distanceEvaluations; if ((shape.flags & VF_FIELD_PRIMITIVE_HAS_FLOOR) != 0) { const float floorZ = VF_FieldPrimitiveFloorAt(shape, position.x, position.y); @@ -219,6 +264,7 @@ void EvaluateFarFieldCS(uint3 dispatchId : SV_DispatchThreadID) { overlay = max(overlay, -VF_FieldPrimitiveDistance(shape, position.x, position.y, position.z)); + ++distanceEvaluations; } } const float base = min(position.z - FarStrataLo, FarStrataHi - position.z); @@ -231,16 +277,21 @@ void EvaluateFarFieldCS(uint3 dispatchId : SV_DispatchThreadID) if (protectedAir != 0) density = magnitude; else if (protectedSolid != 0) density = -magnitude; FarFieldDensity[index] = density; + if (FarEvalCounterEnabled != 0) FarFieldEvalCounters[index] = distanceEvaluations; } -float FarRockDistanceAt(float3 position) +float FarRockDistanceAt(float3 position,int3 cachedBinCoord,FarFieldSpatialBin cachedRange) { float cave = 100000.0f; float overlay = -100000.0f; + const int3 positionBinCoord=int3(floor(position/max(1.0f,(float)FarSpatialBinSize))); + FarFieldSpatialBin range; + if(all(positionBinCoord==cachedBinCoord))range=cachedRange; + else range=FarFieldFindBin(position); [loop] - for (uint shapeId = 0; shapeId < FarShapeCount; ++shapeId) + for (uint item = 0; item < range.count; ++item) { - const VF_FieldPrimitive shape = FarShapes[shapeId]; + const VF_FieldPrimitive shape = FarShapes[FarSpatialBinShapeIds[range.offset + item]]; if ((shape.flags & VF_FIELD_PRIMITIVE_CARVE) != 0) { if (position.x < shape.minVoxel[0] - 6 || position.x > shape.maxVoxel[0] + 6 @@ -269,29 +320,43 @@ float FarRockDistanceAt(float3 position) float FarConnectorRadius(float3 center, float3 direction, float nominalRadius) { - // The coarse far field is a signed-distance composition. Two bounded - // distance steps follow its connector wall closely without a CPU readback - // or a long radial scan for each sparse panel ring. + // Keep the bounded signed-distance refinement, but stop once the residual + // reaches the same acceptance bound used by the original fallback. A + // spatial-bin cache avoids re-hashing nearby probes. + const float3 nominalPosition=center+direction*nominalRadius; + const int3 cachedBinCoord=int3(floor(nominalPosition/max(1.0f,(float)FarSpatialBinSize))); + const FarFieldSpatialBin cachedRange=FarFieldFindBin(nominalPosition); const float maxOffset=max(16.0f,nominalRadius*0.75f); const float minRadius=max(0.0f,nominalRadius-maxOffset); const float maxRadius=nominalRadius+maxOffset; float radius=nominalRadius; - [unroll] - for(uint refine=0;refine<3;++refine) + float residual=FarRockDistanceAt(center+direction*radius,cachedBinCoord,cachedRange); + bool converged=abs(residual)<=1.0f; + if(!converged) { - const float distance=FarRockDistanceAt(center+direction*radius); - const float nextDistance=FarRockDistanceAt(center+direction*(radius+4.0f)); + // Most connector fields are close to a unit-gradient SDF along the + // radial ray. Try that correction first and verify it before accepting. + radius=clamp(radius-residual,minRadius,maxRadius); + residual=FarRockDistanceAt(center+direction*radius,cachedBinCoord,cachedRange); + converged=abs(residual)<=1.0f; + } + [unroll] + for(uint refine=0;refine<2&&!converged;++refine) + { + const float distance=residual; + const float nextDistance=FarRockDistanceAt(center+direction*(radius+4.0f),cachedBinCoord,cachedRange); const float slope=(nextDistance-distance)*0.25f; const float correction=abs(slope)>0.125f?distance/slope:distance; radius=clamp(radius-correction,minRadius,maxRadius); + residual=FarRockDistanceAt(center+direction*radius,cachedBinCoord,cachedRange); + converged=abs(residual)<=1.0f; } - const float residual=FarRockDistanceAt(center+direction*radius); if(abs(residual)>1.0f) { const float searchMin=max(0.0f,nominalRadius-maxOffset-8.0f); const float searchMax=nominalRadius+maxOffset; float previous=searchMin; - float previousDistance=FarRockDistanceAt(center+direction*previous); + float previousDistance=FarRockDistanceAt(center+direction*previous,cachedBinCoord,cachedRange); float bestRadius=radius; float bestDifference=100000.0f; [loop] @@ -299,7 +364,7 @@ float FarConnectorRadius(float3 center, float3 direction, float nominalRadius) { const float distance=min(searchMin+sample*8.0f,searchMax); if(distance<=previous+1.0e-5f)break; - const float currentDistance=FarRockDistanceAt(center+direction*distance); + const float currentDistance=FarRockDistanceAt(center+direction*distance,cachedBinCoord,cachedRange); if((previousDistance>=0.0f)!=(currentDistance>=0.0f)) { float lo=previous,hi=distance; @@ -308,7 +373,7 @@ float FarConnectorRadius(float3 center, float3 direction, float nominalRadius) for(uint refine=0;refine<8;++refine) { const float mid=(lo+hi)*0.5f; - if((FarRockDistanceAt(center+direction*mid)>=0.0f)==previousSolid)lo=mid; + if((FarRockDistanceAt(center+direction*mid,cachedBinCoord,cachedRange)>=0.0f)==previousSolid)lo=mid; else hi=mid; } const float crossing=(lo+hi)*0.5f; @@ -324,65 +389,136 @@ float FarConnectorRadius(float3 center, float3 direction, float nominalRadius) return radius; } -[numthreads(64,1,1)] -void BuildFarConnectorRingsCS(uint3 dispatchId : SV_DispatchThreadID) +uint FarConnectorPanelForRing(uint ringId) { - const uint ringId = dispatchId.x; - if (ringId == 0) - { - const uint maxVerticesPerTile = CellCount * 15; - const uint slot = maxVerticesPerTile > 0 ? OutputBaseVertex / maxVerticesPerTile : 0; - const uint panelBaseVertex = slot * FarConnectorPanelVertexCapacity; - FarConnectorDrawArgs.Store(OutputArgsByteOffset + 20, FarConnectorVertexCount); - FarConnectorDrawArgs.Store(OutputArgsByteOffset + 24, FarConnectorVertexCount > 0 ? 1 : 0); - FarConnectorDrawArgs.Store(OutputArgsByteOffset + 28, panelBaseVertex); - FarConnectorDrawArgs.Store(OutputArgsByteOffset + 32, 0); - FarConnectorDrawArgs.Store(OutputArgsByteOffset + 36, 0); - } - if (ringId >= FarConnectorRingCount) return; - - FarFieldConnectorPanel connector = FarConnectorPanels[0]; + uint low = 0; + uint high = FarConnectorCount; [loop] - for (uint i = 0; i < FarConnectorCount; ++i) + while (low < high) { - const FarFieldConnectorPanel candidate = FarConnectorPanels[i]; - if (ringId >= candidate.ringOffset && ringId < candidate.ringOffset + candidate.ringCount) + const uint middle = low + ((high - low) >> 1); + const FarFieldConnectorPanel candidate = FarConnectorPanels[middle]; + if (ringId < candidate.ringOffset) high = middle; + else if (ringId >= candidate.ringOffset + candidate.ringCount) low = middle + 1; + else return middle; + } + return 0; +} + +uint FarConnectorPanelForVertex(uint vertexId) +{ + uint low = 0; + uint high = FarConnectorCount; + [loop] + while (low < high) + { + const uint middle = low + ((high - low) >> 1); + const FarFieldConnectorPanel candidate = FarConnectorPanels[middle]; + const uint candidateVertexCount = (candidate.ringCount - 1) * 24; + if (vertexId < candidate.vertexOffset) high = middle; + else if (vertexId >= candidate.vertexOffset + candidateVertexCount) low = middle + 1; + else return middle; + } + return 0; +} + +groupshared float FarConnectorGroupRadii[64]; +groupshared float4 FarConnectorGroupCenterT[16]; +groupshared float4 FarConnectorGroupURadius[16]; +groupshared float4 FarConnectorGroupV[16]; + +[numthreads(64,1,1)] +void BuildFarConnectorRingsCS(uint3 groupId : SV_GroupID, + uint3 groupThreadId : SV_GroupThreadID) +{ + // Four lanes cooperate on one ring. Lane zero loads the panel and builds + // its shared frame once; each lane then refines one radial direction. + // One 64-thread group is one AMD wave, keeping radial work local. + const uint ringId = groupId.x * 16 + groupThreadId.x / 4; + const uint radialId = groupThreadId.x & 3; + const uint ringSlot = groupThreadId.x / 4; + if (radialId == 0) + { + const bool validRing = ringId < FarConnectorRingCount; + if (validRing) { - connector = candidate; - break; + const FarFieldConnectorPanel connector = FarConnectorPanels[FarConnectorPanelForRing(ringId)]; + const float3 start = connector.start; + const float3 delta = connector.end - start; + const float connectorLength = length(delta); + const float3 axis = delta / max(connectorLength, 1.0e-8f); + float3 u = cross(axis, float3(0,0,1)); + if (dot(u,u) < 0.01f) u = cross(axis, float3(0,1,0)); + u = normalize(u); + const float3 v = normalize(cross(axis,u)); + const uint localRing = ringId - connector.ringOffset; + float t = 0; + if (localRing == 0) t = connector.tMin; + else if (localRing + 1 == connector.ringCount) t = connector.tMax; + else t = ((float)(connector.axialSampleStart + localRing - 1) + 0.5f) + / max(1.0f, (float)connector.axialSampleCount); + const float3 center = start + delta * t; + FarConnectorGroupCenterT[ringSlot] = float4(center,t); + FarConnectorGroupURadius[ringSlot] = float4(u,connector.radius); + FarConnectorGroupV[ringSlot] = float4(v,0); + } + else + { + FarConnectorGroupCenterT[ringSlot] = 0; + FarConnectorGroupURadius[ringSlot] = 0; + FarConnectorGroupV[ringSlot] = 0; + } + if (ringId == 0) + { + const uint maxVerticesPerTile = CellCount * 15; + const uint slot = maxVerticesPerTile > 0 ? OutputBaseVertex / maxVerticesPerTile : 0; + const uint panelBaseVertex = slot * FarConnectorPanelVertexCapacity; + FarConnectorDrawArgs.Store(OutputArgsByteOffset + 20, FarConnectorVertexCount); + FarConnectorDrawArgs.Store(OutputArgsByteOffset + 24, FarConnectorVertexCount > 0 ? 1 : 0); + FarConnectorDrawArgs.Store(OutputArgsByteOffset + 28, panelBaseVertex); + FarConnectorDrawArgs.Store(OutputArgsByteOffset + 32, 0); + FarConnectorDrawArgs.Store(OutputArgsByteOffset + 36, 0); } } - const float3 start = connector.start; - const float3 delta = connector.end - start; - const float connectorLength = length(delta); - const float3 axis = delta / max(connectorLength, 1.0e-8f); - float3 u = cross(axis, float3(0,0,1)); - if (dot(u,u) < 0.01f) u = cross(axis, float3(0,1,0)); - u = normalize(u); - const float3 v = normalize(cross(axis,u)); - const uint localRing = ringId - connector.ringOffset; - float t; - if (localRing == 0) t = connector.tMin; - else if (localRing + 1 == connector.ringCount) t = connector.tMax; - else t = ((float)(connector.axialSampleStart + localRing - 1) + 0.5f) - / max(1.0f, (float)connector.axialSampleCount); - const float3 center = start + delta * t; - const float ru = FarConnectorRadius(center,u,connector.radius); - const float rmu = FarConnectorRadius(center,-u,connector.radius); - const float rv = FarConnectorRadius(center,v,connector.radius); - const float rmv = FarConnectorRadius(center,-v,connector.radius); - FarConnectorRing ring; - ring.corners[0] = float4(center + u*ru + v*rv, 0); - ring.corners[1] = float4(center - u*rmu + v*rv, 0); - ring.corners[2] = float4(center - u*rmu - v*rmv, 0); - ring.corners[3] = float4(center + u*ru - v*rmv, 0); - ring.normals[0] = float4(-normalize(u+v),0); - ring.normals[1] = float4(-normalize(-u+v),0); - ring.normals[2] = float4(-normalize(-u-v),0); - ring.normals[3] = float4(-normalize(u-v),0); - ring.t = t; - ring.padding = 0; - FarConnectorRingOutput[ringId] = ring; + GroupMemoryBarrierWithGroupSync(); + const bool validRing = ringId < FarConnectorRingCount; + const float4 centerT = FarConnectorGroupCenterT[ringSlot]; + const float4 uRadius = FarConnectorGroupURadius[ringSlot]; + const float3 center = centerT.xyz; + const float3 u = uRadius.xyz; + const float3 v = FarConnectorGroupV[ringSlot].xyz; + const float3 direction = radialId == 0 ? u : radialId == 1 ? -u : radialId == 2 ? v : -v; + const float radius = validRing ? FarConnectorRadius(center,direction,uRadius.w) : 0; + FarConnectorGroupRadii[groupThreadId.x] = radius; + GroupMemoryBarrierWithGroupSync(); + if (!validRing) return; + + if (radialId == 0) FarConnectorRingOutput[ringId].t = centerT.w; + const uint ringBase = groupThreadId.x - radialId; + const float ru = FarConnectorGroupRadii[ringBase + 0]; + const float rmu = FarConnectorGroupRadii[ringBase + 1]; + const float rv = FarConnectorGroupRadii[ringBase + 2]; + const float rmv = FarConnectorGroupRadii[ringBase + 3]; + if (radialId == 0) + { + FarConnectorRingOutput[ringId].corners[0] = float4(center + u*ru + v*rv, 0); + FarConnectorRingOutput[ringId].normals[0] = float4(-normalize(u+v),0); + } + else if (radialId == 1) + { + FarConnectorRingOutput[ringId].corners[1] = float4(center - u*rmu + v*rv, 0); + FarConnectorRingOutput[ringId].normals[1] = float4(-normalize(-u+v),0); + } + else if (radialId == 2) + { + FarConnectorRingOutput[ringId].corners[2] = float4(center - u*rmu - v*rmv, 0); + FarConnectorRingOutput[ringId].normals[2] = float4(-normalize(-u-v),0); + } + else + { + FarConnectorRingOutput[ringId].corners[3] = float4(center + u*ru - v*rmv, 0); + FarConnectorRingOutput[ringId].normals[3] = float4(-normalize(u-v),0); + } } [numthreads(64,1,1)] @@ -390,18 +526,7 @@ void EmitFarConnectorPanelsCS(uint3 dispatchId : SV_DispatchThreadID) { const uint vertexId = dispatchId.x; if (vertexId >= FarConnectorVertexCount) return; - FarFieldConnectorPanel connector = FarConnectorPanels[0]; - [loop] - for (uint i = 0; i < FarConnectorCount; ++i) - { - const FarFieldConnectorPanel candidate = FarConnectorPanels[i]; - const uint candidateCount = (candidate.ringCount - 1) * 24; - if (vertexId >= candidate.vertexOffset && vertexId < candidate.vertexOffset + candidateCount) - { - connector = candidate; - break; - } - } + const FarFieldConnectorPanel connector = FarConnectorPanels[FarConnectorPanelForVertex(vertexId)]; const uint localVertex = vertexId - connector.vertexOffset; const uint interval = localVertex / 24; const uint cornerInQuad = localVertex % 6; diff --git a/Standalone/Source/StandaloneViewer.cpp b/Standalone/Source/StandaloneViewer.cpp index 6fd9b02..dd282b5 100644 --- a/Standalone/Source/StandaloneViewer.cpp +++ b/Standalone/Source/StandaloneViewer.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -35,6 +36,7 @@ #include #include #include +#include #include #include @@ -2227,6 +2229,55 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; return ResidentTiles.contains(Key); } + void PrepareGpuFarInputs(std::vector NeedPreparation) + { + if(NeedPreparation.empty())return; + const auto PrepareStart=std::chrono::steady_clock::now(); + std::vector> Inputs(NeedPreparation.size()); + std::vector Errors(NeedPreparation.size()); + const std::size_t ThreadCount=std::min(8,NeedPreparation.size()); + std::atomic Next{0}; + std::vector WorkerElapsed(ThreadCount,0.0); + std::vector Workers;Workers.reserve(ThreadCount); + for(std::size_t Worker=0;Worker=NeedPreparation.size())break; + const FVoxelTileKey& Key=NeedPreparation[Index]; + const VoxelForgeCore::TileKey CoreKey{{Key.Coord.X,Key.Coord.Y,Key.Coord.Z},Key.Level}; + try { Inputs[Index]=ShapeWorld->exportFarFieldTile(CoreKey,Errors[Index]); } + catch(const std::exception& Error) { Errors[Index]=Error.what(); } + } + WorkerElapsed[Worker]=std::chrono::duration( + std::chrono::steady_clock::now()-WorkerStart).count(); + }); + } + for(std::thread& Worker:Workers)Worker.join(); + const double PreparationMs=std::chrono::duration( + std::chrono::steady_clock::now()-PrepareStart).count(); + double WorkerSumMs=0.0;for(const double Elapsed:WorkerElapsed)WorkerSumMs+=Elapsed; + GpuFarPreparationWallMs+=PreparationMs;GpuFarPreparationWorkerMs+=WorkerSumMs; + std::size_t Failed=0; + for(std::size_t Index=0;Index& Keys) { GpuFarQueue.clear();GpuFarQueued.clear();GpuFarEligibleTiles.clear(); @@ -2270,52 +2321,7 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; for(const FVoxelTileKey& Key:Eligible) if(!GpuFarTiles.contains(Key))NeedPreparation.push_back(Key); if(!NeedPreparation.empty()) - { - const auto PrepareStart=std::chrono::steady_clock::now(); - std::vector> Inputs(NeedPreparation.size()); - std::vector Errors(NeedPreparation.size()); - const std::size_t ThreadCount=std::min(8,NeedPreparation.size()); - std::atomic Next{0}; - std::vector WorkerElapsed(ThreadCount,0.0); - std::vector Workers;Workers.reserve(ThreadCount); - for(std::size_t Worker=0;Worker=NeedPreparation.size())break; - const FVoxelTileKey& Key=NeedPreparation[Index]; - const VoxelForgeCore::TileKey CoreKey{{Key.Coord.X,Key.Coord.Y,Key.Coord.Z},Key.Level}; - try { Inputs[Index]=ShapeWorld->exportFarFieldTile(CoreKey,Errors[Index]); } - catch(const std::exception& Error) { Errors[Index]=Error.what(); } - } - WorkerElapsed[Worker]=std::chrono::duration( - std::chrono::steady_clock::now()-WorkerStart).count(); - }); - } - for(std::thread& Worker:Workers)Worker.join(); - const double PreparationMs=std::chrono::duration( - std::chrono::steady_clock::now()-PrepareStart).count(); - double WorkerSumMs=0.0;for(const double Elapsed:WorkerElapsed)WorkerSumMs+=Elapsed; - GpuFarPreparationWallMs+=PreparationMs;GpuFarPreparationWorkerMs+=WorkerSumMs; - std::size_t Failed=0; - for(std::size_t Index=0;IndexIASetVertexBuffers(0,1,&L.VertexBuffer,&Stride,&Offset); Context->IASetIndexBuffer(L.IndexBuffer,DXGI_FORMAT_R32_UINT,0);Context->DrawIndexed(L.IndexCount,0,0); } - if(bGpuFarEnabled&&ShapeWorld&&ShapeWorld->hasFarWorld()) + // Avoid issuing hundreds of tiny indirect draw calls while the + // initial far batches are still being built. Once the clipmap is + // ready the pooled GPU meshes draw directly as before. + if(bGpuFarEnabled&&bInitialClipmapReported&&ShapeWorld&&ShapeWorld->hasFarWorld()) { C.Padding[0]=0.01f; Context->UpdateSubresource(Constants,0,nullptr,&C,0,0);