Bicameral Engine
GPU-resident engine for a magic-research open-world game
Loading...
Searching...
No Matches
bicameral::sim::GpuMultires Class Reference

#include <gpu_multires.h>

Collaboration diagram for bicameral::sim::GpuMultires:
[legend]

Classes

struct  ActivitySeeds
struct  RootConstants

Public Member Functions

 GpuMultires (GpuMultires &&other) noexcept
GpuMultires & operator= (GpuMultires &&other) noexcept
 GpuMultires (const GpuMultires &)=delete
GpuMultires & operator= (const GpuMultires &)=delete
 ~GpuMultires ()
bool RecordUpload (ID3D12GraphicsCommandList10 *list, const MultiresNest &nest)
bool RecordRequests (ID3D12GraphicsCommandList10 *list, std::span< const multires::MrRequest > requests)
void RecordFoldPages (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t tick)
void RecordFoldPages (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t tick, const multires::MrFoldTolerance &tolerance)
void RecordQuietRequests (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t tick)
void RecordQuietRequests (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t tick, const multires::MrFoldTolerance &tolerance)
void RecordProcessRequests (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing)
void RecordExpandPass (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing)
void RecordRefineShadow (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t parentSlot, uint32_t firstChildSlot, uint32_t levelCount, const MultiresPoint &point)
void RecordRemoveShadow (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t firstSlot, uint32_t levelCount)
void RecordStep (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t worldSeed, uint64_t tick, const MultiresStepOptions &options={})
bool RecordStepActive (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint64_t worldSeed, uint64_t tick, const MultiresStepOptions &options={})
void RecordPullBack (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t firstShadowSlot, uint32_t levelCount)
void SetExternalViews (D3D12_GPU_VIRTUAL_ADDRESS first, D3D12_GPU_VIRTUAL_ADDRESS second)
void RecordExternalDispatch (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, ID3D12PipelineState *pipeline, uint32_t groupCount, const std::array< uint32_t, 4 > &external)
ID3D12RootSignature * RootSignature () const
uint32_t BlockCapacity () const
void RecordReadback (ID3D12GraphicsCommandList10 *list)
bool Read (MultiresNest &nest) const
std::optional< ActivitySeeds > ReadSeeds () const
void RecordTimestamp (ID3D12GraphicsCommandList10 *list, uint32_t index)
std::vector< uint64_t > ReadTimestamps (uint32_t count) const
uint64_t GraphBackingMemoryBytes () const
bool UseConductionGraph (bool use)
std::expected< void, std::string > EnableImplicitConduction (ID3D12Device5 *device, const GpuMultiresImplicitLimits &limits)
void StampImplicitPhases (bool stamp)
const GpuMultiresImplicit * ImplicitConduction () const

Static Public Member Functions

static std::expected< GpuMultires, std::string > Create (ID3D12Device5 *device, const BakedReactionTable &table, const MultiresCapacity &capacity, const GpuMultiresOptions &options={})

Static Public Attributes

static constexpr uint32_t REQUEST_UPLOAD_SLOTS = 16

Private Types

enum  Buffer : uint8_t {
  BufferBlocks , BufferCells , BufferFractions , BufferCounters ,
  BufferTreeWords , BufferFreeFractions , BufferLedger , BufferRequests ,
  BufferStates , BufferConduction , BufferGraphInput , BufferCount
}

Private Member Functions

 GpuMultires ()=default
std::expected< void, std::string > CreatePipelines (ID3D12Device5 *device, const GpuMultiresOptions &options)
std::expected< void, std::string > CreateBuffers (ID3D12Device5 *device, const BakedReactionTable &table)
void BindRoot (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing) const
void SetGraphProgram (ID3D12GraphicsCommandList10 *list)
void SetActivityProgram (ID3D12GraphicsCommandList10 *list)
void DispatchGraph (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t entry, const void *record, uint32_t recordBytes)
void RecordTreePass (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t pass, uint32_t groupCount)
std::array< uint64_t, BufferCount > BufferSizes () const
uint64_t PageCount () const
uint64_t ConductRecordsOffset () const
std::vector< std::byte > MakeGraphInputImage () const
void RecordExpandPages (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing)
void RecordWake (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t extraFlags)
void RecordStepWait (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing)
void RecordConductPass (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t pass, uint32_t groupCount)
void RecordConduction (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, const MultiresStepOptions &options, uint32_t wakeList)
void RecordConductSubstep (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, const MultiresStepOptions &options)
void RecordSubstepEnd (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t wakeList)
void RecordConductStage (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, uint32_t pass)
void RecordImplicitConduction (ID3D12GraphicsCommandList10 *list, D3D12_GPU_VIRTUAL_ADDRESS debugRing, const MultiresStepOptions &options)
std::expected< void, std::string > CreateConductionGraph (ID3D12Device5 *device)
std::vector< std::byte > MakeTreeWordsImage (const MultiresNest &nest) const
uint64_t ActivityBytes () const
std::vector< std::byte > MakeActivityList (uint32_t list, std::span< const uint32_t > slots) const
void SetTick (uint64_t worldSeed, uint64_t tick)

Private Attributes

MultiresCapacity m_capacity
uint32_t m_blockCapacity = 0
ComPtr< ID3D12RootSignature > m_rootSignature
ComPtr< ID3D12PipelineState > m_wakePipeline
ComPtr< ID3D12PipelineState > m_stepWaitPipeline
ComPtr< ID3D12PipelineState > m_stepExpandedWaitPipeline
std::array< ComPtr< ID3D12PipelineState >, TREE_PASS_COUNT > m_treePipelines
std::array< ComPtr< ID3D12PipelineState >, CONDUCT_PASS_COUNT > m_conductPipelines
std::unique_ptr< gpu::WorkGraph > m_conductGraph
bool m_conductGraphInitialized = false
bool m_useConductGraph = false
std::array< uint32_t, 4 > m_conductEntries
std::unique_ptr< gpu::WorkGraph > m_graph
bool m_graphInitialized = false
std::array< uint32_t, 4 > m_entries {}
std::unique_ptr< gpu::WorkGraph > m_activityGraph
bool m_activityGraphInitialized = false
std::array< uint32_t, 3 > m_activityEntries
RootConstants m_constants
std::array< ComPtr< ID3D12Resource >, BufferCount > m_buffers
std::array< ComPtr< ID3D12Resource >, BufferCount > m_uploads
std::array< ComPtr< ID3D12Resource >, BufferCount > m_readbacks
ComPtr< ID3D12Resource > m_requestUpload
uint32_t m_requestUploadCursor = 0
std::array< ComPtr< ID3D12Resource >, TABLE_COUNT > m_tables
std::array< D3D12_GPU_VIRTUAL_ADDRESS, 2 > m_externalViews {}
std::array< ComPtr< ID3D12Resource >, ACTIVITY_LISTS > m_activity
ComPtr< ID3D12Resource > m_activityUpload
ComPtr< ID3D12Resource > m_activityReadback
uint32_t m_activityCurrent = 0
uint32_t m_activityWrite = 0
std::unique_ptr< GpuMultiresImplicit > m_implicit
ComPtr< ID3D12QueryHeap > m_timestamps
ComPtr< ID3D12Resource > m_timestampReadback
uint32_t m_timestampCount = 0

Static Private Attributes

static constexpr uint32_t TABLE_COUNT = 4
static constexpr uint32_t ACTIVITY_LISTS = 2
static constexpr uint32_t TREE_PASS_COUNT = 12
static constexpr uint32_t CONDUCT_PASS_COUNT = 6
static constexpr uint32_t MAX_TIMESTAMPS = 16

Detailed Description

Definition at line 56 of file gpu_multires.h.

Member Enumeration Documentation

◆ Buffer

enum bicameral::sim::GpuMultires::Buffer : uint8_t
private
Enumerator
BufferBlocks 
BufferCells 
BufferFractions 
BufferCounters 
BufferTreeWords 
BufferFreeFractions 
BufferLedger 
BufferRequests 
BufferStates 
BufferConduction 
BufferGraphInput 
BufferCount 

Definition at line 178 of file gpu_multires.h.

Constructor & Destructor Documentation

◆ GpuMultires() [1/3]

bicameral::sim::GpuMultires::GpuMultires ( GpuMultires && other)
defaultnoexcept

References GpuMultires().

Referenced by Create(), GpuMultires(), GpuMultires(), operator=(), and operator=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GpuMultires() [2/3]

bicameral::sim::GpuMultires::GpuMultires ( const GpuMultires & )
delete

References GpuMultires().

Here is the call graph for this function:

◆ ~GpuMultires()

bicameral::sim::GpuMultires::~GpuMultires ( )
default

◆ GpuMultires() [3/3]

bicameral::sim::GpuMultires::GpuMultires ( )
privatedefault

Member Function Documentation

◆ ActivityBytes()

uint64_t bicameral::sim::GpuMultires::ActivityBytes ( ) const
nodiscardprivate

Definition at line 494 of file gpu_multires.cpp.

References m_capacity.

Referenced by CreateBuffers(), and ReadSeeds().

Here is the caller graph for this function:

◆ BindRoot()

void bicameral::sim::GpuMultires::BindRoot ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing ) const
private

Definition at line 588 of file gpu_multires.cpp.

References BufferCells, BufferCount, bicameral::gpu::RootSignatureLayout::DebugRingIndex(), m_activity, m_activityWrite, m_buffers, m_constants, m_externalViews, m_tables, bicameral::gpu::RootSignatureLayout::RootConstantIndex(), bicameral::gpu::RootSignatureLayout::SrvIndex(), and TABLE_COUNT.

Referenced by DispatchGraph(), RecordConductPass(), RecordConductStage(), RecordExpandPages(), RecordExternalDispatch(), RecordProcessRequests(), RecordStepActive(), RecordStepWait(), RecordSubstepEnd(), RecordTreePass(), and RecordWake().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlockCapacity()

uint32_t bicameral::sim::GpuMultires::BlockCapacity ( ) const
inlinenodiscard

Definition at line 116 of file gpu_multires.h.

References m_blockCapacity.

◆ BufferSizes()

std::array< uint64_t, GpuMultires::BufferCount > bicameral::sim::GpuMultires::BufferSizes ( ) const
nodiscardprivate

Definition at line 426 of file gpu_multires.cpp.

References BufferBlocks, BufferCells, BufferConduction, BufferCounters, BufferFractions, BufferFreeFractions, BufferGraphInput, BufferLedger, BufferRequests, BufferStates, BufferTreeWords, ConductRecordsOffset(), m_blockCapacity, m_capacity, and PageCount().

Referenced by CreateBuffers(), MakeGraphInputImage(), MakeTreeWordsImage(), Read(), and RecordUpload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConductRecordsOffset()

uint64_t bicameral::sim::GpuMultires::ConductRecordsOffset ( ) const
nodiscardprivate

Definition at line 450 of file gpu_multires.cpp.

References m_capacity.

Referenced by BufferSizes(), and MakeGraphInputImage().

Here is the caller graph for this function:

◆ Create()

std::expected< GpuMultires, std::string > bicameral::sim::GpuMultires::Create ( ID3D12Device5 * device,
const BakedReactionTable & table,
const MultiresCapacity & capacity,
const GpuMultiresOptions & options = {} )
staticnodiscard

◆ CreateBuffers()

std::expected< void, std::string > bicameral::sim::GpuMultires::CreateBuffers ( ID3D12Device5 * device,
const BakedReactionTable & table )
nodiscardprivate

Definition at line 373 of file gpu_multires.cpp.

References ActivityBytes(), BufferCount, BufferGraphInput, BufferSizes(), bicameral::gpu::CreateBuffer(), m_activity, m_activityReadback, m_activityUpload, m_buffers, m_constants, m_readbacks, m_requestUpload, m_tables, m_timestampReadback, m_timestamps, m_uploads, MAX_TIMESTAMPS, bicameral::sim::BakedReactionTable::rates, bicameral::gpu::Readback, REQUEST_UPLOAD_SLOTS, bicameral::sim::BakedReactionTable::ruleIndex, bicameral::sim::BakedReactionTable::rules, bicameral::sim::BakedReactionTable::species, bicameral::gpu::UnorderedAccess, and bicameral::gpu::Upload.

Referenced by Create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateConductionGraph()

std::expected< void, std::string > bicameral::sim::GpuMultires::CreateConductionGraph ( ID3D12Device5 * device)
nodiscardprivate

Definition at line 351 of file gpu_multires.cpp.

References bicameral::gpu::WorkGraph::Create(), bicameral::gpu::LoadShader(), m_conductEntries, m_conductGraph, m_rootSignature, and m_useConductGraph.

Referenced by CreatePipelines().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreatePipelines()

std::expected< void, std::string > bicameral::sim::GpuMultires::CreatePipelines ( ID3D12Device5 * device,
const GpuMultiresOptions & options )
nodiscardprivate

Definition at line 279 of file gpu_multires.cpp.

References bicameral::sim::GpuMultiresOptions::activity, CONDUCT_PASS_COUNT, bicameral::sim::GpuMultiresOptions::conductionGraph, bicameral::gpu::WorkGraph::Create(), CreateConductionGraph(), bicameral::gpu::CreateRootSignature(), bicameral::gpu::LoadShader(), m_activityEntries, m_activityGraph, m_conductPipelines, m_constants, m_entries, m_graph, m_rootSignature, m_stepExpandedWaitPipeline, m_stepWaitPipeline, m_treePipelines, m_wakePipeline, and TREE_PASS_COUNT.

Referenced by Create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DispatchGraph()

void bicameral::sim::GpuMultires::DispatchGraph ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t entry,
const void * record,
uint32_t recordBytes )
private

Definition at line 622 of file gpu_multires.cpp.

References BindRoot(), bicameral::gpu::WorkGraph::DispatchFromCpu(), m_entries, and SetGraphProgram().

Referenced by RecordPullBack(), RecordRefineShadow(), and RecordRemoveShadow().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EnableImplicitConduction()

std::expected< void, std::string > bicameral::sim::GpuMultires::EnableImplicitConduction ( ID3D12Device5 * device,
const GpuMultiresImplicitLimits & limits )
nodiscard

Definition at line 263 of file gpu_multires.cpp.

References bicameral::sim::GpuMultiresImplicit::Create(), m_capacity, and m_implicit.

Here is the call graph for this function:

◆ GraphBackingMemoryBytes()

uint64_t bicameral::sim::GpuMultires::GraphBackingMemoryBytes ( ) const
inlinenodiscard

Definition at line 135 of file gpu_multires.h.

References m_graph.

◆ ImplicitConduction()

const GpuMultiresImplicit * bicameral::sim::GpuMultires::ImplicitConduction ( ) const
inlinenodiscard

Definition at line 147 of file gpu_multires.h.

References m_implicit.

◆ MakeActivityList()

std::vector< std::byte > bicameral::sim::GpuMultires::MakeActivityList ( uint32_t list,
std::span< const uint32_t > slots ) const
nodiscardprivate

Definition at line 499 of file gpu_multires.cpp.

References m_activity, and m_activityEntries.

Referenced by RecordUpload().

Here is the caller graph for this function:

◆ MakeGraphInputImage()

std::vector< std::byte > bicameral::sim::GpuMultires::MakeGraphInputImage ( ) const
nodiscardprivate

Definition at line 456 of file gpu_multires.cpp.

References BufferGraphInput, BufferSizes(), ConductRecordsOffset(), m_activityEntries, m_activityGraph, m_buffers, m_conductEntries, and m_conductGraph.

Referenced by RecordUpload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MakeTreeWordsImage()

std::vector< std::byte > bicameral::sim::GpuMultires::MakeTreeWordsImage ( const MultiresNest & nest) const
nodiscardprivate

Definition at line 478 of file gpu_multires.cpp.

References BufferSizes(), BufferTreeWords, bicameral::sim::MultiresNest::claims, bicameral::sim::MultiresNest::freeBlocks, bicameral::sim::MultiresNest::index, and m_capacity.

Referenced by RecordUpload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=() [1/2]

GpuMultires & bicameral::sim::GpuMultires::operator= ( const GpuMultires & )
delete

References GpuMultires().

Here is the call graph for this function:

◆ operator=() [2/2]

GpuMultires & bicameral::sim::GpuMultires::operator= ( GpuMultires && other)
defaultnoexcept

References GpuMultires().

Here is the call graph for this function:

◆ PageCount()

uint64_t bicameral::sim::GpuMultires::PageCount ( ) const
nodiscardprivate

Definition at line 445 of file gpu_multires.cpp.

References m_capacity.

Referenced by BufferSizes().

Here is the caller graph for this function:

◆ Read()

◆ ReadSeeds()

std::optional< GpuMultires::ActivitySeeds > bicameral::sim::GpuMultires::ReadSeeds ( ) const
nodiscard

Definition at line 1090 of file gpu_multires.cpp.

References ActivityBytes(), m_activityReadback, m_capacity, bicameral::gpu::ReadBuffer(), and bicameral::sim::GpuMultires::ActivitySeeds::slots.

Here is the call graph for this function:

◆ ReadTimestamps()

std::vector< uint64_t > bicameral::sim::GpuMultires::ReadTimestamps ( uint32_t count) const
nodiscard

Definition at line 1119 of file gpu_multires.cpp.

References m_timestampCount, m_timestampReadback, and bicameral::gpu::ReadBuffer().

Here is the call graph for this function:

◆ RecordConduction()

void bicameral::sim::GpuMultires::RecordConduction ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
const MultiresStepOptions & options,
uint32_t wakeList )
private

Definition at line 888 of file gpu_multires.cpp.

References bicameral::sim::MultiresStepOptions::implicitConduction, m_constants, bicameral::sim::MultiresStepOptions::maxSubcycleGap, bicameral::sim::MULTIRES_MAX_SUBCYCLE_GAP, RecordConductStage(), RecordConductSubstep(), RecordImplicitConduction(), and RecordSubstepEnd().

Referenced by RecordStep(), and RecordStepActive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordConductPass()

void bicameral::sim::GpuMultires::RecordConductPass ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t pass,
uint32_t groupCount )
private

Definition at line 875 of file gpu_multires.cpp.

References BindRoot(), m_conductPipelines, and m_rootSignature.

Referenced by RecordConductStage(), RecordConductSubstep(), and RecordStepActive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordConductStage()

void bicameral::sim::GpuMultires::RecordConductStage ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t pass )
private

Definition at line 975 of file gpu_multires.cpp.

References BindRoot(), BufferGraphInput, bicameral::gpu::WorkGraph::DispatchFromGpu(), m_blockCapacity, m_buffers, m_conductGraph, m_conductGraphInitialized, m_constants, m_rootSignature, m_useConductGraph, RecordConductPass(), and bicameral::gpu::Transition().

Referenced by RecordConduction(), RecordConductSubstep(), and RecordSubstepEnd().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordConductSubstep()

void bicameral::sim::GpuMultires::RecordConductSubstep ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
const MultiresStepOptions & options )
private

Definition at line 922 of file gpu_multires.cpp.

References m_blockCapacity, m_constants, m_implicit, RecordConductPass(), RecordConductStage(), and RecordTreePass().

Referenced by RecordConduction().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordExpandPages()

void bicameral::sim::GpuMultires::RecordExpandPages ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing )
private

Definition at line 1014 of file gpu_multires.cpp.

References BindRoot(), BufferGraphInput, bicameral::gpu::WorkGraph::DispatchFromGpu(), m_buffers, RecordTreePass(), SetActivityProgram(), and bicameral::gpu::Transition().

Referenced by RecordStepActive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordExpandPass()

void bicameral::sim::GpuMultires::RecordExpandPass ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing )

Definition at line 1010 of file gpu_multires.cpp.

References RecordTreePass().

Here is the call graph for this function:

◆ RecordExternalDispatch()

void bicameral::sim::GpuMultires::RecordExternalDispatch ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
ID3D12PipelineState * pipeline,
uint32_t groupCount,
const std::array< uint32_t, 4 > & external )

Definition at line 1036 of file gpu_multires.cpp.

References BindRoot(), m_constants, and m_rootSignature.

Here is the call graph for this function:

◆ RecordFoldPages() [1/2]

void bicameral::sim::GpuMultires::RecordFoldPages ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t tick )

Definition at line 678 of file gpu_multires.cpp.

References RecordFoldPages().

Referenced by RecordFoldPages().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordFoldPages() [2/2]

void bicameral::sim::GpuMultires::RecordFoldPages ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t tick,
const multires::MrFoldTolerance & tolerance )

◆ RecordImplicitConduction()

void bicameral::sim::GpuMultires::RecordImplicitConduction ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
const MultiresStepOptions & options )
private

Definition at line 910 of file gpu_multires.cpp.

References bicameral::Error, bicameral::Gpu, bicameral::Log(), and m_implicit.

Referenced by RecordConduction().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordProcessRequests()

void bicameral::sim::GpuMultires::RecordProcessRequests ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing )

Definition at line 706 of file gpu_multires.cpp.

References BindRoot(), BufferGraphInput, bicameral::gpu::WorkGraph::DispatchFromGpu(), m_activityCurrent, m_activityWrite, m_buffers, m_capacity, RecordTreePass(), SetGraphProgram(), and bicameral::gpu::Transition().

Here is the call graph for this function:

◆ RecordPullBack()

void bicameral::sim::GpuMultires::RecordPullBack ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t firstShadowSlot,
uint32_t levelCount )

Definition at line 762 of file gpu_multires.cpp.

References DispatchGraph().

Here is the call graph for this function:

◆ RecordQuietRequests() [1/2]

void bicameral::sim::GpuMultires::RecordQuietRequests ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t tick )

Definition at line 692 of file gpu_multires.cpp.

References RecordQuietRequests().

Referenced by RecordQuietRequests().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordQuietRequests() [2/2]

void bicameral::sim::GpuMultires::RecordQuietRequests ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t tick,
const multires::MrFoldTolerance & tolerance )

◆ RecordReadback()

void bicameral::sim::GpuMultires::RecordReadback ( ID3D12GraphicsCommandList10 * list)

Definition at line 1050 of file gpu_multires.cpp.

References BufferLedger, m_activity, m_activityCurrent, m_activityReadback, m_buffers, m_readbacks, m_timestampCount, m_timestampReadback, m_timestamps, and bicameral::gpu::RecordCopyToReadback().

Here is the call graph for this function:

◆ RecordRefineShadow()

void bicameral::sim::GpuMultires::RecordRefineShadow ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t parentSlot,
uint32_t firstChildSlot,
uint32_t levelCount,
const MultiresPoint & point )

Definition at line 736 of file gpu_multires.cpp.

References DispatchGraph(), bicameral::sim::MultiresPoint::level, m_constants, bicameral::sim::MultiresPoint::x, bicameral::sim::MultiresPoint::y, and bicameral::sim::MultiresPoint::z.

Here is the call graph for this function:

◆ RecordRemoveShadow()

void bicameral::sim::GpuMultires::RecordRemoveShadow ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t firstSlot,
uint32_t levelCount )

Definition at line 756 of file gpu_multires.cpp.

References DispatchGraph().

Here is the call graph for this function:

◆ RecordRequests()

bool bicameral::sim::GpuMultires::RecordRequests ( ID3D12GraphicsCommandList10 * list,
std::span< const multires::MrRequest > requests )
nodiscard

Definition at line 641 of file gpu_multires.cpp.

References BufferCounters, BufferRequests, m_buffers, m_requestUpload, m_requestUploadCursor, REQUEST_UPLOAD_SLOTS, and bicameral::gpu::Transition().

Here is the call graph for this function:

◆ RecordStep()

void bicameral::sim::GpuMultires::RecordStep ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t worldSeed,
uint64_t tick,
const MultiresStepOptions & options = {} )

Definition at line 836 of file gpu_multires.cpp.

References ACTIVITY_LISTS, bicameral::sim::MultiresStepOptions::conduction, m_constants, RecordConduction(), RecordStepWait(), RecordWake(), and SetTick().

Here is the call graph for this function:

◆ RecordStepActive()

bool bicameral::sim::GpuMultires::RecordStepActive ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint64_t worldSeed,
uint64_t tick,
const MultiresStepOptions & options = {} )
nodiscard

◆ RecordStepWait()

void bicameral::sim::GpuMultires::RecordStepWait ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing )
private

Definition at line 860 of file gpu_multires.cpp.

References BindRoot(), m_blockCapacity, m_capacity, m_stepExpandedWaitPipeline, m_stepWaitPipeline, RecordTreePass(), and RecordWake().

Referenced by RecordStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordSubstepEnd()

void bicameral::sim::GpuMultires::RecordSubstepEnd ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t wakeList )
private

Definition at line 937 of file gpu_multires.cpp.

References ACTIVITY_LISTS, BindRoot(), bicameral::gpu::WorkGraph::DispatchFromGpu(), m_activity, m_activityUpload, m_activityWrite, m_constants, RecordConductStage(), SetActivityProgram(), and bicameral::gpu::Transition().

Referenced by RecordConduction().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordTimestamp()

void bicameral::sim::GpuMultires::RecordTimestamp ( ID3D12GraphicsCommandList10 * list,
uint32_t index )

Definition at line 1111 of file gpu_multires.cpp.

References m_timestampCount, m_timestamps, and MAX_TIMESTAMPS.

◆ RecordTreePass()

void bicameral::sim::GpuMultires::RecordTreePass ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t pass,
uint32_t groupCount )
private

Definition at line 630 of file gpu_multires.cpp.

References BindRoot(), m_rootSignature, and m_treePipelines.

Referenced by RecordConductSubstep(), RecordExpandPages(), RecordExpandPass(), RecordProcessRequests(), and RecordStepWait().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RecordUpload()

◆ RecordWake()

void bicameral::sim::GpuMultires::RecordWake ( ID3D12GraphicsCommandList10 * list,
D3D12_GPU_VIRTUAL_ADDRESS debugRing,
uint32_t extraFlags )
private

Definition at line 849 of file gpu_multires.cpp.

References BindRoot(), m_blockCapacity, m_constants, m_rootSignature, and m_wakePipeline.

Referenced by RecordStep(), RecordStepActive(), and RecordStepWait().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RootSignature()

ID3D12RootSignature * bicameral::sim::GpuMultires::RootSignature ( ) const
inlinenodiscard

Definition at line 115 of file gpu_multires.h.

References m_rootSignature.

Referenced by bicameral::sim::GpuLabBox::Create(), and bicameral::sim::ProbePeek::Create().

Here is the caller graph for this function:

◆ SetActivityProgram()

void bicameral::sim::GpuMultires::SetActivityProgram ( ID3D12GraphicsCommandList10 * list)
private

Definition at line 616 of file gpu_multires.cpp.

References m_activityGraph, m_activityGraphInitialized, and m_rootSignature.

Referenced by RecordExpandPages(), RecordStepActive(), and RecordSubstepEnd().

Here is the caller graph for this function:

◆ SetExternalViews()

void bicameral::sim::GpuMultires::SetExternalViews ( D3D12_GPU_VIRTUAL_ADDRESS first,
D3D12_GPU_VIRTUAL_ADDRESS second )

Definition at line 1032 of file gpu_multires.cpp.

References m_externalViews.

◆ SetGraphProgram()

void bicameral::sim::GpuMultires::SetGraphProgram ( ID3D12GraphicsCommandList10 * list)
private

Definition at line 610 of file gpu_multires.cpp.

References m_graph, m_graphInitialized, and m_rootSignature.

Referenced by DispatchGraph(), and RecordProcessRequests().

Here is the caller graph for this function:

◆ SetTick()

void bicameral::sim::GpuMultires::SetTick ( uint64_t worldSeed,
uint64_t tick )
private

Definition at line 768 of file gpu_multires.cpp.

References m_constants.

Referenced by RecordStep(), and RecordStepActive().

Here is the caller graph for this function:

◆ StampImplicitPhases()

void bicameral::sim::GpuMultires::StampImplicitPhases ( bool stamp)

Definition at line 274 of file gpu_multires.cpp.

References m_implicit.

◆ UseConductionGraph()

bool bicameral::sim::GpuMultires::UseConductionGraph ( bool use)
nodiscard

Definition at line 1001 of file gpu_multires.cpp.

References m_conductGraph, and m_useConductGraph.

Member Data Documentation

◆ ACTIVITY_LISTS

uint32_t bicameral::sim::GpuMultires::ACTIVITY_LISTS = 2
staticconstexprprivate

Definition at line 194 of file gpu_multires.h.

Referenced by RecordStep(), RecordSubstepEnd(), and RecordUpload().

◆ CONDUCT_PASS_COUNT

uint32_t bicameral::sim::GpuMultires::CONDUCT_PASS_COUNT = 6
staticconstexprprivate

Definition at line 196 of file gpu_multires.h.

Referenced by CreatePipelines().

◆ m_activity

std::array<ComPtr<ID3D12Resource>, ACTIVITY_LISTS> bicameral::sim::GpuMultires::m_activity
private

◆ m_activityCurrent

uint32_t bicameral::sim::GpuMultires::m_activityCurrent = 0
private

◆ m_activityEntries

std::array<uint32_t, 3> bicameral::sim::GpuMultires::m_activityEntries
private
Initial value:
= {UINT32_MAX, UINT32_MAX,
UINT32_MAX}

Definition at line 259 of file gpu_multires.h.

Referenced by CreatePipelines(), MakeActivityList(), MakeGraphInputImage(), and RecordStepActive().

◆ m_activityGraph

std::unique_ptr<gpu::WorkGraph> bicameral::sim::GpuMultires::m_activityGraph
private

◆ m_activityGraphInitialized

bool bicameral::sim::GpuMultires::m_activityGraphInitialized = false
private

Definition at line 258 of file gpu_multires.h.

Referenced by SetActivityProgram().

◆ m_activityReadback

ComPtr<ID3D12Resource> bicameral::sim::GpuMultires::m_activityReadback
private

Definition at line 275 of file gpu_multires.h.

Referenced by CreateBuffers(), ReadSeeds(), and RecordReadback().

◆ m_activityUpload

ComPtr<ID3D12Resource> bicameral::sim::GpuMultires::m_activityUpload
private

Definition at line 274 of file gpu_multires.h.

Referenced by CreateBuffers(), RecordStepActive(), RecordSubstepEnd(), and RecordUpload().

◆ m_activityWrite

uint32_t bicameral::sim::GpuMultires::m_activityWrite = 0
private

◆ m_blockCapacity

uint32_t bicameral::sim::GpuMultires::m_blockCapacity = 0
private

◆ m_buffers

std::array<ComPtr<ID3D12Resource>, BufferCount> bicameral::sim::GpuMultires::m_buffers
private

◆ m_capacity

◆ m_conductEntries

std::array<uint32_t, 4> bicameral::sim::GpuMultires::m_conductEntries
private
Initial value:
= {UINT32_MAX, UINT32_MAX, UINT32_MAX,
UINT32_MAX}

Definition at line 252 of file gpu_multires.h.

Referenced by CreateConductionGraph(), and MakeGraphInputImage().

◆ m_conductGraph

std::unique_ptr<gpu::WorkGraph> bicameral::sim::GpuMultires::m_conductGraph
private

◆ m_conductGraphInitialized

bool bicameral::sim::GpuMultires::m_conductGraphInitialized = false
private

Definition at line 250 of file gpu_multires.h.

Referenced by RecordConductStage().

◆ m_conductPipelines

std::array<ComPtr<ID3D12PipelineState>, CONDUCT_PASS_COUNT> bicameral::sim::GpuMultires::m_conductPipelines
private

Definition at line 248 of file gpu_multires.h.

Referenced by CreatePipelines(), and RecordConductPass().

◆ m_constants

◆ m_entries

std::array<uint32_t, 4> bicameral::sim::GpuMultires::m_entries {}
private

Definition at line 256 of file gpu_multires.h.

Referenced by CreatePipelines(), and DispatchGraph().

◆ m_externalViews

std::array<D3D12_GPU_VIRTUAL_ADDRESS, 2> bicameral::sim::GpuMultires::m_externalViews {}
private

Definition at line 270 of file gpu_multires.h.

Referenced by BindRoot(), and SetExternalViews().

◆ m_graph

std::unique_ptr<gpu::WorkGraph> bicameral::sim::GpuMultires::m_graph
private

Definition at line 254 of file gpu_multires.h.

Referenced by CreatePipelines(), GraphBackingMemoryBytes(), and SetGraphProgram().

◆ m_graphInitialized

bool bicameral::sim::GpuMultires::m_graphInitialized = false
private

Definition at line 255 of file gpu_multires.h.

Referenced by SetGraphProgram().

◆ m_implicit

std::unique_ptr<GpuMultiresImplicit> bicameral::sim::GpuMultires::m_implicit
private

◆ m_readbacks

std::array<ComPtr<ID3D12Resource>, BufferCount> bicameral::sim::GpuMultires::m_readbacks
private

Definition at line 266 of file gpu_multires.h.

Referenced by CreateBuffers(), Read(), and RecordReadback().

◆ m_requestUpload

ComPtr<ID3D12Resource> bicameral::sim::GpuMultires::m_requestUpload
private

Definition at line 267 of file gpu_multires.h.

Referenced by CreateBuffers(), and RecordRequests().

◆ m_requestUploadCursor

uint32_t bicameral::sim::GpuMultires::m_requestUploadCursor = 0
private

Definition at line 268 of file gpu_multires.h.

Referenced by RecordRequests().

◆ m_rootSignature

ComPtr<ID3D12RootSignature> bicameral::sim::GpuMultires::m_rootSignature
private

◆ m_stepExpandedWaitPipeline

ComPtr<ID3D12PipelineState> bicameral::sim::GpuMultires::m_stepExpandedWaitPipeline
private

Definition at line 246 of file gpu_multires.h.

Referenced by CreatePipelines(), and RecordStepWait().

◆ m_stepWaitPipeline

ComPtr<ID3D12PipelineState> bicameral::sim::GpuMultires::m_stepWaitPipeline
private

Definition at line 245 of file gpu_multires.h.

Referenced by CreatePipelines(), and RecordStepWait().

◆ m_tables

std::array<ComPtr<ID3D12Resource>, TABLE_COUNT> bicameral::sim::GpuMultires::m_tables
private

Definition at line 269 of file gpu_multires.h.

Referenced by BindRoot(), and CreateBuffers().

◆ m_timestampCount

uint32_t bicameral::sim::GpuMultires::m_timestampCount = 0
private

Definition at line 285 of file gpu_multires.h.

Referenced by ReadTimestamps(), RecordReadback(), and RecordTimestamp().

◆ m_timestampReadback

ComPtr<ID3D12Resource> bicameral::sim::GpuMultires::m_timestampReadback
private

Definition at line 284 of file gpu_multires.h.

Referenced by CreateBuffers(), ReadTimestamps(), and RecordReadback().

◆ m_timestamps

ComPtr<ID3D12QueryHeap> bicameral::sim::GpuMultires::m_timestamps
private

Definition at line 283 of file gpu_multires.h.

Referenced by CreateBuffers(), RecordReadback(), and RecordTimestamp().

◆ m_treePipelines

std::array<ComPtr<ID3D12PipelineState>, TREE_PASS_COUNT> bicameral::sim::GpuMultires::m_treePipelines
private

Definition at line 247 of file gpu_multires.h.

Referenced by CreatePipelines(), and RecordTreePass().

◆ m_uploads

std::array<ComPtr<ID3D12Resource>, BufferCount> bicameral::sim::GpuMultires::m_uploads
private

Definition at line 265 of file gpu_multires.h.

Referenced by CreateBuffers(), and RecordUpload().

◆ m_useConductGraph

bool bicameral::sim::GpuMultires::m_useConductGraph = false
private

Definition at line 251 of file gpu_multires.h.

Referenced by CreateConductionGraph(), RecordConductStage(), and UseConductionGraph().

◆ m_wakePipeline

ComPtr<ID3D12PipelineState> bicameral::sim::GpuMultires::m_wakePipeline
private

Definition at line 244 of file gpu_multires.h.

Referenced by CreatePipelines(), and RecordWake().

◆ MAX_TIMESTAMPS

uint32_t bicameral::sim::GpuMultires::MAX_TIMESTAMPS = 16
staticconstexprprivate

Definition at line 197 of file gpu_multires.h.

Referenced by CreateBuffers(), and RecordTimestamp().

◆ REQUEST_UPLOAD_SLOTS

uint32_t bicameral::sim::GpuMultires::REQUEST_UPLOAD_SLOTS = 16
staticconstexpr

Definition at line 118 of file gpu_multires.h.

Referenced by CreateBuffers(), and RecordRequests().

◆ TABLE_COUNT

uint32_t bicameral::sim::GpuMultires::TABLE_COUNT = 4
staticconstexprprivate

Definition at line 193 of file gpu_multires.h.

Referenced by BindRoot().

◆ TREE_PASS_COUNT

uint32_t bicameral::sim::GpuMultires::TREE_PASS_COUNT = 12
staticconstexprprivate

Definition at line 195 of file gpu_multires.h.

Referenced by CreatePipelines().


The documentation for this class was generated from the following files: