载入中...
搜索中...
未找到
Sequence.cpp
浏览该文件的文档.
1#include "gpgpu/Sequence.h"
2
3#include "common/Exception.h"
4#include "common/config.h" // EVENGINE_WEBGPU platform macro (generated)
5
6#ifdef EVENGINE_WEBGPU
7
9
10namespace eve::gpgpu {
11
12struct Sequence::Impl {
13 WebGpuSequence* sequence = webgpuSequenceCreate();
14};
15
16Sequence::Sequence() : impl_(new Impl()) {}
17Sequence::~Sequence() {
18 webgpuSequenceDestroy(impl_->sequence);
19 delete impl_;
20}
21
22bool Sequence::isAvailable() const { return webgpuSequenceReady(impl_->sequence); }
23
24void Sequence::begin() { webgpuSequenceBegin(impl_->sequence); }
25
26void Sequence::recordUpload(GpuBuffer *dst, const void *src, uint64_t nbytes,
27 uint64_t dstOffset) {
28 webgpuSequenceRecordUpload(impl_->sequence, dst, src, nbytes, dstOffset);
29}
30
31void Sequence::recordDownload(GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes,
32 uint64_t srcOffset) {
33 webgpuSequenceRecordDownload(impl_->sequence, src, staging, nbytes, srcOffset);
34}
35
36void Sequence::recordDispatch(ComputeShader *shader, int groupsX, int groupsY,
37 int groupsZ) {
38 webgpuSequenceRecordDispatch(impl_->sequence, shader, groupsX, groupsY, groupsZ);
39}
40
41void Sequence::submit() { webgpuSequenceSubmit(impl_->sequence); }
42
43SequenceStatus Sequence::submitAsync() { return webgpuSequenceSubmitAsync(impl_->sequence); }
44SequenceStatus Sequence::poll() { return webgpuSequencePoll(impl_->sequence); }
45SequenceStatus Sequence::wait() { return webgpuSequenceWait(impl_->sequence); }
46SequenceStatus Sequence::getStatus() const { return webgpuSequenceStatus(impl_->sequence); }
47
48} // namespace eve::gpgpu
49
50#else
51
53
54namespace eve::gpgpu {
55
59
60Sequence::Sequence() : impl_(new Impl()) {}
63 delete impl_;
64}
65
67 try {
68 impl_->v->ensureReady();
69 } catch (...) {
70 return false;
71 }
72 return impl_->v->ready();
73}
74
76
77void Sequence::recordUpload(GpuBuffer *dst, const void *src, uint64_t nbytes,
78 uint64_t dstOffset) {
79 vulkanSequenceRecordUpload(impl_->v, dst, src, nbytes, dstOffset);
80}
81
82void Sequence::recordDownload(GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes,
83 uint64_t srcOffset) {
84 vulkanSequenceRecordDownload(impl_->v, src, staging, nbytes, srcOffset);
85}
86
87void Sequence::recordDispatch(ComputeShader *shader, int groupsX, int groupsY,
88 int groupsZ) {
89 vulkanSequenceRecordDispatch(impl_->v, shader, groupsX, groupsY, groupsZ);
90}
91
93
98
99} // namespace eve::gpgpu
100
101#endif
102
103namespace eve::gpgpu {
104
105std::string Sequence::getStatusName() const {
106 switch (getStatus()) {
107 case SequenceStatus::Idle: return "idle";
108 case SequenceStatus::Recording: return "recording";
109 case SequenceStatus::Submitted: return "submitted";
110 case SequenceStatus::Complete: return "complete";
111 case SequenceStatus::Failed: return "failed";
112 }
113 return "failed";
114}
115
116} // namespace eve::gpgpu
std::unique_ptr< gpgpu::Sequence > sequence
Definition OnnxGpgpu.cpp:43
Shader * shader
Backend-agnostic compute program. Bind storage buffers then dispatch via Gpgpu::dispatch....
Backend-agnostic GPU buffer for compute (storage) or CPU staging transfers. Squirrel-owned; derived c...
Definition GpuBuffer.h:18
SequenceStatus getStatus() const
Current lifecycle state without driving backend event processing.
Definition Sequence.cpp:97
Sequence()
Sequence.
Definition Sequence.cpp:60
SequenceStatus submitAsync()
Submit without waiting for GPU completion. @lifetime Buffers and shaders referenced by recorded work ...
Definition Sequence.cpp:94
SequenceStatus poll()
Non-blocking completion query; also retires completed backend resources.
Definition Sequence.cpp:95
void recordUpload(GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset=0)
Record upload.
Definition Sequence.cpp:77
void recordDownload(GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset=0)
Record download.
Definition Sequence.cpp:82
void submit()
Submit.
Definition Sequence.cpp:92
void recordDispatch(ComputeShader *shader, int groupsX, int groupsY=1, int groupsZ=1)
Record dispatch.
Definition Sequence.cpp:87
std::string getStatusName() const
Stable script/debug name for getStatus().
Definition Sequence.cpp:105
void begin()
Begins begin.
Definition Sequence.cpp:75
SequenceStatus wait()
Wait for pending work and retire its backend resources.
Definition Sequence.cpp:96
bool isAvailable() const
True when available.
Definition Sequence.cpp:66
~Sequence()
Sequence.
Definition Sequence.cpp:61
Fluids module — interactive surface fluid simulation.
Definition Fluids.h:34
void vulkanSequenceSubmit(VulkanSequence *seq)
Vulkan sequence submit.
SequenceStatus
Observable lifecycle state of a reusable GPU command sequence.
Definition Sequence.h:14
void webgpuSequenceRecordDownload(WebGpuSequence *sequence, GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset)
Webgpu sequence record download.
bool webgpuSequenceReady(WebGpuSequence *sequence)
Webgpu sequence ready.
SequenceStatus webgpuSequencePoll(WebGpuSequence *sequence)
Webgpu sequence poll.
void webgpuSequenceBegin(WebGpuSequence *sequence)
Webgpu sequence begin.
void vulkanSequenceBegin(VulkanSequence *seq)
Vulkan sequence begin.
SequenceStatus vulkanSequenceWait(VulkanSequence *seq)
Vulkan sequence wait.
void webgpuSequenceDestroy(WebGpuSequence *sequence)
Webgpu sequence destroy.
SequenceStatus webgpuSequenceWait(WebGpuSequence *sequence)
Webgpu sequence wait.
void vulkanSequenceDestroy(VulkanSequence *seq)
Vulkan sequence destroy.
SequenceStatus vulkanSequenceStatus(const VulkanSequence *seq)
Vulkan sequence status.
void vulkanSequenceRecordDownload(VulkanSequence *seq, GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset)
Vulkan sequence record download.
void vulkanSequenceRecordDispatch(VulkanSequence *seq, ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
Vulkan sequence record dispatch.
SequenceStatus webgpuSequenceStatus(const WebGpuSequence *sequence)
Webgpu sequence status.
void webgpuSequenceRecordDispatch(WebGpuSequence *sequence, ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
Webgpu sequence record dispatch.
WebGpuSequence * webgpuSequenceCreate()
Webgpu sequence create.
void webgpuSequenceRecordUpload(WebGpuSequence *sequence, GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset)
Webgpu sequence record upload.
SequenceStatus vulkanSequencePoll(VulkanSequence *seq)
Vulkan sequence poll.
void vulkanSequenceRecordUpload(VulkanSequence *seq, GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset)
Vulkan sequence record upload.
VulkanSequence * vulkanSequenceCreate()
Vulkan sequence create.
SequenceStatus webgpuSequenceSubmitAsync(WebGpuSequence *sequence)
Webgpu sequence submit async.
void webgpuSequenceSubmit(WebGpuSequence *sequence)
Webgpu sequence submit.
SequenceStatus vulkanSequenceSubmitAsync(VulkanSequence *seq)
Vulkan sequence submit async.
VulkanSequence public API.
void ensureReady()
Ensure ready.