|
Bicameral Engine
GPU-resident engine for a magic-research open-world game
|
#include <gpu_implicit.h>
Classes | |
| struct | Constants |
| struct | CopyRegion |
Public Member Functions | |
| bool | RecordUpload (ID3D12GraphicsCommandList *list, const ImplicitGrid &grid) |
| void | RecordReset (ID3D12GraphicsCommandList *list) |
| void | RecordCopySystem (ID3D12GraphicsCommandList *list, ID3D12Resource *source, uint64_t cellsOffset, uint64_t facesOffset, uint64_t listsOffset, ID3D12Resource *header, uint64_t faceCountOffset) |
| void | RecordCopyLevels (ID3D12GraphicsCommandList *list, ID3D12Resource *header, ID3D12Resource *nodes, ID3D12Resource *links, ID3D12Resource *children) |
| bool | RecordStep (ID3D12GraphicsCommandList *list, uint64_t debugRing, const ImplicitOptions &options, uint32_t maxLimitRounds=DEFAULT_MAX_LIMIT_ROUNDS, const GpuImplicitRecordShape &shape={}) |
| void | RecordRelease (ID3D12GraphicsCommandList *list) |
| ID3D12Resource * | CellsBuffer () const |
| void | RecordTimestamp (ID3D12GraphicsCommandList *list, uint32_t index) |
| void | RecordReadback (ID3D12GraphicsCommandList *list) |
| void | RecordCostReadback (ID3D12GraphicsCommandList *list) |
| bool | Read (ImplicitGrid &grid, GpuImplicitCost &cost) const |
| bool | ReadCost (GpuImplicitCost &cost) const |
| std::vector< uint64_t > | ReadTimestamps (uint32_t count) const |
| uint32_t | DispatchesPerCycle (const ImplicitOptions &options) const |
| void | UsePredication (bool use) |
Static Public Member Functions | |
| static std::expected< GpuImplicit, std::string > | Create (ID3D12Device5 *device, const GpuImplicitLimits &limits, const GpuImplicitTuning &tuning={}) |
| static std::expected< GpuImplicit, std::string > | Create (ID3D12Device5 *device, const ImplicitGrid &grid, const GpuImplicitTuning &tuning={}) |
| static GpuImplicitLimits | LimitsOf (const ImplicitGrid &grid) |
| static GpuImplicitRecordShape | ShapeFrom (const GpuImplicitCost &previous) |
Static Public Attributes | |
| static constexpr uint32_t | MAX_TIMESTAMPS = 64 |
| static constexpr uint32_t | DEFAULT_MAX_LIMIT_ROUNDS = 16 |
Private Types | |
| enum | Buffer : uint8_t { BufferCells , BufferFaces , BufferLists , BufferNodes , BufferLinks , BufferWork , BufferState , BufferWide , BufferPredicate , BufferPlan , BufferArgs , BufferCount } |
| enum | Pass : uint8_t { PassBegin , PassStart , PassSmooth , PassRestrict , PassProlong , PassConverged , PassCycleEnd , PassFlows , PassMark , PassLimitEnd , PassLimitFaces , PassApply , PassTail , PassPlanLevels , PassPlanArgs , PassCount } |
Private Member Functions | |
| GpuImplicit ()=default | |
| std::expected< void, std::string > | CreatePipelines (ID3D12Device5 *device) |
| std::expected< void, std::string > | CreateBuffers (ID3D12Device5 *device) |
| uint64_t | BufferBytes (Buffer buffer) const |
| void | Dispatch (ID3D12GraphicsCommandList *list, Pass pass, uint32_t groups) |
| void | DispatchIndirect (ID3D12GraphicsCommandList *list, Pass pass, uint32_t slot) |
| void | RecordPlan (ID3D12GraphicsCommandList *list) |
| void | RecordCopies (ID3D12GraphicsCommandList *list, std::span< const CopyRegion > regions) |
| void | RecordSmooth (ID3D12GraphicsCommandList *list, uint32_t depth, uint32_t slot, uint32_t sweeps) |
| void | RecordVCycle (ID3D12GraphicsCommandList *list, const ImplicitOptions &options) |
| void | BeginSkippable (ID3D12GraphicsCommandList *list, uint32_t word) |
| void | EndSkippable (ID3D12GraphicsCommandList *list) |
Private Attributes | |
| GpuImplicitLimits | m_limits |
| GpuImplicitTuning | m_tuning |
| Constants | m_constants |
| uint32_t | m_maxDispatchLevels = 1 |
| bool | m_predication = true |
| ComPtr< ID3D12RootSignature > | m_rootSignature |
| ComPtr< ID3D12CommandSignature > | m_dispatchSignature |
| std::array< ComPtr< ID3D12PipelineState >, PassCount > | m_pipelines |
| std::array< ComPtr< ID3D12Resource >, BufferCount > | m_buffers |
| std::array< ComPtr< ID3D12Resource >, BufferCount > | m_uploads |
| ComPtr< ID3D12Resource > | m_cellsReadback |
| ComPtr< ID3D12Resource > | m_stateReadback |
| ComPtr< ID3D12Resource > | m_wideReadback |
| ComPtr< ID3D12Resource > | m_planReadback |
| ComPtr< ID3D12QueryHeap > | m_timestamps |
| ComPtr< ID3D12Resource > | m_timestampReadback |
| uint32_t | m_timestampCount = 0 |
Definition at line 82 of file gpu_implicit.h.
|
private |
| Enumerator | |
|---|---|
| BufferCells | |
| BufferFaces | |
| BufferLists | |
| BufferNodes | |
| BufferLinks | |
| BufferWork | |
| BufferState | |
| BufferWide | |
| BufferPredicate | |
| BufferPlan | |
| BufferArgs | |
| BufferCount | |
Definition at line 149 of file gpu_implicit.h.
|
private |
| Enumerator | |
|---|---|
| PassBegin | |
| PassStart | |
| PassSmooth | |
| PassRestrict | |
| PassProlong | |
| PassConverged | |
| PassCycleEnd | |
| PassFlows | |
| PassMark | |
| PassLimitEnd | |
| PassLimitFaces | |
| PassApply | |
| PassTail | |
| PassPlanLevels | |
| PassPlanArgs | |
| PassCount | |
Definition at line 164 of file gpu_implicit.h.
|
privatedefault |
|
private |
Definition at line 565 of file gpu_implicit.cpp.
References BufferPredicate, m_buffers, m_predication, and bicameral::gpu::Transition().
Referenced by RecordStep().
|
nodiscardprivate |
Definition at line 243 of file gpu_implicit.cpp.
References BufferArgs, BufferCells, BufferFaces, BufferLinks, BufferLists, BufferNodes, BufferPlan, BufferPredicate, BufferState, BufferWide, BufferWork, m_limits, and m_maxDispatchLevels.
Referenced by CreateBuffers(), RecordCopies(), RecordCopyLevels(), and RecordCopySystem().
|
inlinenodiscard |
Definition at line 130 of file gpu_implicit.h.
References BufferCells, and m_buffers.
|
staticnodiscard |
Definition at line 184 of file gpu_implicit.cpp.
References bicameral::sim::GpuImplicitLimits::cells, bicameral::sim::GpuImplicitTuning::coarsestTailMaxNodes, CreateBuffers(), CreatePipelines(), bicameral::sim::GpuImplicit::Constants::dispatchLevels, bicameral::sim::GpuImplicitTuning::dispatchLevels, bicameral::sim::GpuImplicitLimits::faces, GpuImplicit(), bicameral::sim::GpuImplicitLimits::levels, m_constants, m_limits, m_maxDispatchLevels, m_tuning, bicameral::sim::GpuImplicitLimits::nodes, bicameral::sim::GpuImplicitTuning::tailMaxLinks, and bicameral::sim::GpuImplicitTuning::tailMaxNodes.
Referenced by Create(), and bicameral::sim::GpuMultiresImplicit::Create().
|
staticnodiscard |
Definition at line 211 of file gpu_implicit.cpp.
References bicameral::sim::ImplicitGrid::cells, Create(), bicameral::sim::ImplicitGrid::levels, and LimitsOf().
|
private |
Definition at line 289 of file gpu_implicit.cpp.
References BufferBytes(), BufferCells, BufferCount, BufferPlan, BufferState, BufferWide, bicameral::gpu::CreateBuffer(), m_buffers, m_cellsReadback, m_planReadback, m_stateReadback, m_timestampReadback, m_timestamps, m_uploads, m_wideReadback, MAX_TIMESTAMPS, bicameral::gpu::Readback, bicameral::gpu::UnorderedAccess, and bicameral::gpu::Upload.
Referenced by Create().
|
private |
Definition at line 264 of file gpu_implicit.cpp.
References bicameral::gpu::CreateComputePipeline(), bicameral::gpu::CreateRootSignature(), bicameral::gpu::LoadShader(), m_dispatchSignature, m_pipelines, m_rootSignature, and PassCount.
Referenced by Create().
|
private |
Definition at line 505 of file gpu_implicit.cpp.
References m_constants, m_pipelines, and bicameral::gpu::RootSignatureLayout::RootConstantIndex().
Referenced by RecordPlan(), and RecordStep().
|
nodiscard |
Definition at line 648 of file gpu_implicit.cpp.
References bicameral::sim::ImplicitOptions::coarsestSweeps, m_constants, bicameral::sim::ImplicitOptions::postSmooth, bicameral::sim::ImplicitOptions::preSmooth, and bicameral::sim::ImplicitOptions::toleranceMillikelvin.
|
private |
Definition at line 513 of file gpu_implicit.cpp.
References BufferArgs, m_buffers, m_constants, m_dispatchSignature, m_pipelines, and bicameral::gpu::RootSignatureLayout::RootConstantIndex().
Referenced by RecordSmooth(), RecordStep(), and RecordVCycle().
|
private |
Definition at line 576 of file gpu_implicit.cpp.
References BufferPredicate, m_buffers, m_predication, and bicameral::gpu::Transition().
Referenced by RecordStep().
|
staticnodiscard |
Definition at line 219 of file gpu_implicit.cpp.
References bicameral::sim::ImplicitGrid::cells, bicameral::sim::ImplicitGrid::faces, bicameral::sim::ImplicitGrid::levels, bicameral::sim::ImplicitGridLevel::levels, bicameral::sim::GpuImplicitLimits::links, bicameral::sim::ImplicitGridLevel::neighbors, and bicameral::sim::GpuImplicitLimits::nodes.
Referenced by Create(), and RecordUpload().
|
nodiscard |
Definition at line 697 of file gpu_implicit.cpp.
References bicameral::sim::ImplicitGrid::cells, m_cellsReadback, m_limits, bicameral::gpu::ReadBuffer(), and ReadCost().
|
nodiscard |
Definition at line 713 of file gpu_implicit.cpp.
References m_planReadback, m_stateReadback, m_wideReadback, and bicameral::gpu::ReadBuffer().
Referenced by Read().
|
nodiscard |
Definition at line 734 of file gpu_implicit.cpp.
References m_timestampCount, m_timestampReadback, and bicameral::gpu::ReadBuffer().
|
private |
Definition at line 455 of file gpu_implicit.cpp.
References BufferBytes(), m_buffers, and bicameral::gpu::Transition().
Referenced by RecordCopyLevels(), and RecordCopySystem().
| void bicameral::sim::GpuImplicit::RecordCopyLevels | ( | ID3D12GraphicsCommandList * | list, |
| ID3D12Resource * | header, | ||
| ID3D12Resource * | nodes, | ||
| ID3D12Resource * | links, | ||
| ID3D12Resource * | children ) |
Definition at line 427 of file gpu_implicit.cpp.
References BufferBytes(), BufferLinks, BufferLists, BufferNodes, BufferPlan, m_limits, and RecordCopies().
Referenced by bicameral::sim::GpuImplicitLevels::RecordCopyTo().
| void bicameral::sim::GpuImplicit::RecordCopySystem | ( | ID3D12GraphicsCommandList * | list, |
| ID3D12Resource * | source, | ||
| uint64_t | cellsOffset, | ||
| uint64_t | facesOffset, | ||
| uint64_t | listsOffset, | ||
| ID3D12Resource * | header, | ||
| uint64_t | faceCountOffset ) |
Definition at line 400 of file gpu_implicit.cpp.
References BufferBytes(), BufferCells, BufferFaces, BufferLists, BufferPlan, m_limits, and RecordCopies().
Referenced by bicameral::sim::GpuImplicitBuild::RecordCopyTo().
| void bicameral::sim::GpuImplicit::RecordCostReadback | ( | ID3D12GraphicsCommandList * | list | ) |
Definition at line 680 of file gpu_implicit.cpp.
References BufferPlan, BufferState, BufferWide, m_buffers, m_planReadback, m_stateReadback, m_timestampCount, m_timestampReadback, m_timestamps, m_wideReadback, bicameral::gpu::RecordCopyToReadback(), and bicameral::gpu::Transition().
Referenced by RecordReadback().
|
private |
Definition at line 522 of file gpu_implicit.cpp.
References BufferArgs, Dispatch(), m_buffers, m_constants, PassPlanArgs, PassPlanLevels, and bicameral::gpu::Transition().
Referenced by RecordStep().
| void bicameral::sim::GpuImplicit::RecordReadback | ( | ID3D12GraphicsCommandList * | list | ) |
Definition at line 675 of file gpu_implicit.cpp.
References BufferCells, m_buffers, m_cellsReadback, bicameral::gpu::RecordCopyToReadback(), and RecordCostReadback().
| void bicameral::sim::GpuImplicit::RecordRelease | ( | ID3D12GraphicsCommandList * | list | ) |
Definition at line 665 of file gpu_implicit.cpp.
References BufferCount, m_buffers, and bicameral::gpu::Transition().
| void bicameral::sim::GpuImplicit::RecordReset | ( | ID3D12GraphicsCommandList * | list | ) |
Definition at line 390 of file gpu_implicit.cpp.
References BufferCount, m_buffers, and bicameral::gpu::Transition().
|
private |
Definition at line 531 of file gpu_implicit.cpp.
References DispatchIndirect(), m_constants, and PassSmooth.
Referenced by RecordVCycle().
|
nodiscard |
Definition at line 586 of file gpu_implicit.cpp.
References BeginSkippable(), BufferArgs, BufferCount, bicameral::sim::GpuImplicitRecordShape::coarsestDispatch, bicameral::sim::ImplicitOptions::coarsestSweeps, bicameral::sim::ImplicitOptions::correctionScale, bicameral::sim::ImplicitOptions::cycles, bicameral::gpu::RootSignatureLayout::DebugRingIndex(), Dispatch(), DispatchIndirect(), bicameral::sim::GpuImplicitRecordShape::dispatchLevels, EndSkippable(), bicameral::sim::ImplicitOptions::limitSlackMillikelvin, m_buffers, m_constants, m_maxDispatchLevels, m_rootSignature, bicameral::sim::ImplicitOptions::method, bicameral::sim::Multigrid, PassApply, PassBegin, PassConverged, PassCycleEnd, PassFlows, PassLimitEnd, PassLimitFaces, PassMark, PassStart, bicameral::sim::ImplicitOptions::postSmooth, bicameral::sim::ImplicitOptions::preSmooth, RecordPlan(), RecordVCycle(), bicameral::sim::ImplicitOptions::toleranceMillikelvin, and bicameral::gpu::Transition().
| void bicameral::sim::GpuImplicit::RecordTimestamp | ( | ID3D12GraphicsCommandList * | list, |
| uint32_t | index ) |
Definition at line 657 of file gpu_implicit.cpp.
References m_timestampCount, m_timestamps, and MAX_TIMESTAMPS.
|
nodiscard |
Definition at line 326 of file gpu_implicit.cpp.
References BufferCells, BufferCount, BufferFaces, BufferLinks, BufferLists, BufferNodes, BufferPlan, bicameral::sim::GpuImplicitLimits::cells, bicameral::sim::ImplicitGrid::cells, bicameral::sim::ImplicitFace::coarse, bicameral::sim::ImplicitFace::coefficient, bicameral::sim::GpuImplicitLimits::faces, bicameral::sim::ImplicitGrid::faces, bicameral::sim::ImplicitFace::fine, bicameral::sim::ImplicitFace::gap, bicameral::sim::GpuImplicitLimits::levels, bicameral::sim::ImplicitGrid::levels, bicameral::sim::ImplicitGridLevel::levels, LimitsOf(), bicameral::sim::GpuImplicitLimits::links, m_buffers, m_limits, m_uploads, bicameral::sim::GpuImplicitLimits::nodes, and bicameral::gpu::Transition().
|
private |
Definition at line 543 of file gpu_implicit.cpp.
References bicameral::sim::ImplicitOptions::coarsestSweeps, DispatchIndirect(), m_constants, PassProlong, PassRestrict, PassTail, bicameral::sim::ImplicitOptions::postSmooth, bicameral::sim::ImplicitOptions::preSmooth, and RecordSmooth().
Referenced by RecordStep().
|
staticnodiscard |
Definition at line 235 of file gpu_implicit.cpp.
References bicameral::sim::GpuImplicitCost::levelCount, and bicameral::sim::GpuImplicitCost::wantedTailDepth.
Referenced by bicameral::sim::GpuMultiresImplicit::Record().
|
inline |
Definition at line 146 of file gpu_implicit.h.
References m_predication.
|
staticconstexpr |
Definition at line 85 of file gpu_implicit.h.
Referenced by bicameral::sim::GpuMultiresImplicit::Record().
|
private |
Definition at line 237 of file gpu_implicit.h.
Referenced by BeginSkippable(), CellsBuffer(), CreateBuffers(), DispatchIndirect(), EndSkippable(), RecordCopies(), RecordCostReadback(), RecordPlan(), RecordReadback(), RecordRelease(), RecordReset(), RecordStep(), and RecordUpload().
|
private |
Definition at line 239 of file gpu_implicit.h.
Referenced by CreateBuffers(), Read(), and RecordReadback().
|
private |
Definition at line 229 of file gpu_implicit.h.
Referenced by Create(), Dispatch(), DispatchesPerCycle(), DispatchIndirect(), RecordPlan(), RecordSmooth(), RecordStep(), and RecordVCycle().
|
private |
Definition at line 235 of file gpu_implicit.h.
Referenced by CreatePipelines(), and DispatchIndirect().
|
private |
Definition at line 227 of file gpu_implicit.h.
Referenced by BufferBytes(), Create(), Read(), RecordCopyLevels(), RecordCopySystem(), and RecordUpload().
|
private |
Definition at line 230 of file gpu_implicit.h.
Referenced by BufferBytes(), Create(), and RecordStep().
|
private |
Definition at line 236 of file gpu_implicit.h.
Referenced by CreatePipelines(), Dispatch(), and DispatchIndirect().
|
private |
Definition at line 242 of file gpu_implicit.h.
Referenced by CreateBuffers(), ReadCost(), and RecordCostReadback().
|
private |
Definition at line 231 of file gpu_implicit.h.
Referenced by BeginSkippable(), EndSkippable(), and UsePredication().
|
private |
Definition at line 234 of file gpu_implicit.h.
Referenced by CreatePipelines(), and RecordStep().
|
private |
Definition at line 240 of file gpu_implicit.h.
Referenced by CreateBuffers(), ReadCost(), and RecordCostReadback().
|
private |
Definition at line 245 of file gpu_implicit.h.
Referenced by ReadTimestamps(), RecordCostReadback(), and RecordTimestamp().
|
private |
Definition at line 244 of file gpu_implicit.h.
Referenced by CreateBuffers(), ReadTimestamps(), and RecordCostReadback().
|
private |
Definition at line 243 of file gpu_implicit.h.
Referenced by CreateBuffers(), RecordCostReadback(), and RecordTimestamp().
|
private |
Definition at line 228 of file gpu_implicit.h.
Referenced by Create().
|
private |
Definition at line 238 of file gpu_implicit.h.
Referenced by CreateBuffers(), and RecordUpload().
|
private |
Definition at line 241 of file gpu_implicit.h.
Referenced by CreateBuffers(), ReadCost(), and RecordCostReadback().
|
staticconstexpr |
Definition at line 84 of file gpu_implicit.h.
Referenced by CreateBuffers(), and RecordTimestamp().