87 [[nodiscard]]
static std::expected<GpuImplicit, std::string>
Create(ID3D12Device5* device,
92 [[nodiscard]]
static std::expected<GpuImplicit, std::string>
Create(ID3D12Device5* device,
96 [[nodiscard]]
static GpuImplicitLimits
LimitsOf(
const ImplicitGrid& grid);
100 [[nodiscard]]
static GpuImplicitRecordShape
ShapeFrom(
const GpuImplicitCost& previous);
103 [[nodiscard]]
bool RecordUpload(ID3D12GraphicsCommandList* list,
const ImplicitGrid& grid);
111 void RecordCopySystem(ID3D12GraphicsCommandList* list, ID3D12Resource* source, uint64_t cellsOffset,
112 uint64_t facesOffset, uint64_t listsOffset, ID3D12Resource* header,
113 uint64_t faceCountOffset);
117 void RecordCopyLevels(ID3D12GraphicsCommandList* list, ID3D12Resource* header, ID3D12Resource* nodes,
118 ID3D12Resource* links, ID3D12Resource* children);
121 [[nodiscard]]
bool RecordStep(ID3D12GraphicsCommandList* list, uint64_t debugRing,
122 const ImplicitOptions& options,
124 const GpuImplicitRecordShape& shape = {});
140 [[nodiscard]] std::vector<uint64_t>
ReadTimestamps(uint32_t count)
const;
214 std::expected<void, std::string>
CreatePipelines(ID3D12Device5* device);
215 std::expected<void, std::string>
CreateBuffers(ID3D12Device5* device);
217 void Dispatch(ID3D12GraphicsCommandList* list,
Pass pass, uint32_t groups);
219 void RecordPlan(ID3D12GraphicsCommandList* list);
220 void RecordCopies(ID3D12GraphicsCommandList* list, std::span<const CopyRegion> regions);
221 void RecordSmooth(ID3D12GraphicsCommandList* list, uint32_t depth, uint32_t slot, uint32_t sweeps);
223 void BeginSkippable(ID3D12GraphicsCommandList* list, uint32_t word);
std::vector< uint64_t > ReadTimestamps(uint32_t count) const
ComPtr< ID3D12QueryHeap > m_timestamps
ComPtr< ID3D12Resource > m_wideReadback
static constexpr uint32_t DEFAULT_MAX_LIMIT_ROUNDS
ComPtr< ID3D12Resource > m_cellsReadback
void RecordCopies(ID3D12GraphicsCommandList *list, std::span< const CopyRegion > regions)
bool ReadCost(GpuImplicitCost &cost) const
void RecordSmooth(ID3D12GraphicsCommandList *list, uint32_t depth, uint32_t slot, uint32_t sweeps)
std::expected< void, std::string > CreatePipelines(ID3D12Device5 *device)
ComPtr< ID3D12Resource > m_planReadback
void RecordVCycle(ID3D12GraphicsCommandList *list, const ImplicitOptions &options)
static constexpr uint32_t MAX_TIMESTAMPS
bool RecordUpload(ID3D12GraphicsCommandList *list, const ImplicitGrid &grid)
ComPtr< ID3D12RootSignature > m_rootSignature
void RecordRelease(ID3D12GraphicsCommandList *list)
std::expected< void, std::string > CreateBuffers(ID3D12Device5 *device)
static std::expected< GpuImplicit, std::string > Create(ID3D12Device5 *device, const GpuImplicitLimits &limits, const GpuImplicitTuning &tuning={})
void RecordCopySystem(ID3D12GraphicsCommandList *list, ID3D12Resource *source, uint64_t cellsOffset, uint64_t facesOffset, uint64_t listsOffset, ID3D12Resource *header, uint64_t faceCountOffset)
static GpuImplicitRecordShape ShapeFrom(const GpuImplicitCost &previous)
uint32_t DispatchesPerCycle(const ImplicitOptions &options) const
void UsePredication(bool use)
void RecordCopyLevels(ID3D12GraphicsCommandList *list, ID3D12Resource *header, ID3D12Resource *nodes, ID3D12Resource *links, ID3D12Resource *children)
void Dispatch(ID3D12GraphicsCommandList *list, Pass pass, uint32_t groups)
bool Read(ImplicitGrid &grid, GpuImplicitCost &cost) const
uint32_t m_maxDispatchLevels
uint32_t m_timestampCount
ComPtr< ID3D12CommandSignature > m_dispatchSignature
void BeginSkippable(ID3D12GraphicsCommandList *list, uint32_t word)
void RecordPlan(ID3D12GraphicsCommandList *list)
ComPtr< ID3D12Resource > m_timestampReadback
void RecordReadback(ID3D12GraphicsCommandList *list)
void RecordReset(ID3D12GraphicsCommandList *list)
void RecordCostReadback(ID3D12GraphicsCommandList *list)
void EndSkippable(ID3D12GraphicsCommandList *list)
ID3D12Resource * CellsBuffer() const
void RecordTimestamp(ID3D12GraphicsCommandList *list, uint32_t index)
ComPtr< ID3D12Resource > m_stateReadback
static GpuImplicitLimits LimitsOf(const ImplicitGrid &grid)
std::array< ComPtr< ID3D12PipelineState >, PassCount > m_pipelines
std::array< ComPtr< ID3D12Resource >, BufferCount > m_buffers
std::array< ComPtr< ID3D12Resource >, BufferCount > m_uploads
GpuImplicitTuning m_tuning
void DispatchIndirect(ID3D12GraphicsCommandList *list, Pass pass, uint32_t slot)
bool RecordStep(ID3D12GraphicsCommandList *list, uint64_t debugRing, const ImplicitOptions &options, uint32_t maxLimitRounds=DEFAULT_MAX_LIMIT_ROUNDS, const GpuImplicitRecordShape &shape={})
uint64_t BufferBytes(Buffer buffer) const
GpuImplicitLimits m_limits
int64_t worstExcessMillikelvin
uint32_t coarsestTailMaxNodes
uint32_t coarsestDispatch
uint32_t coarsestTailMaxNodes