载入中...
搜索中...
未找到
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
8namespace eve::gpgpu {
9
10struct Sequence::Impl {};
11
12Sequence::Sequence() : impl_(new Impl()) {}
13Sequence::~Sequence() { delete impl_; }
14
15bool Sequence::isAvailable() const { return false; }
16
17void Sequence::begin() {
18 throw Exception("Gpgpu.Sequence: requires the Vulkan backend");
19}
20
21void Sequence::recordUpload(GpuBuffer *, const void *, uint64_t, uint64_t) {
22 throw Exception("Gpgpu.Sequence.recordUpload: requires the Vulkan backend");
23}
24
25void Sequence::recordDownload(GpuBuffer *, GpuBuffer *, uint64_t, uint64_t) {
26 throw Exception("Gpgpu.Sequence.recordDownload: requires the Vulkan backend");
27}
28
29void Sequence::recordDispatch(ComputeShader *, int, int, int) {
30 throw Exception("Gpgpu.Sequence.recordDispatch: requires the Vulkan backend");
31}
32
33void Sequence::submit() {
34 throw Exception("Gpgpu.Sequence.submit: requires the Vulkan backend");
35}
36
37} // namespace eve::gpgpu
38
39#else
40
42
43namespace eve::gpgpu {
44
48
49Sequence::Sequence() : impl_(new Impl()) {}
52 delete impl_;
53}
54
56 try {
57 impl_->v->ensureReady();
58 } catch (...) {
59 return false;
60 }
61 return impl_->v->ready();
62}
63
65
66void Sequence::recordUpload(GpuBuffer *dst, const void *src, uint64_t nbytes,
67 uint64_t dstOffset) {
68 vulkanSequenceRecordUpload(impl_->v, dst, src, nbytes, dstOffset);
69}
70
71void Sequence::recordDownload(GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes,
72 uint64_t srcOffset) {
73 vulkanSequenceRecordDownload(impl_->v, src, staging, nbytes, srcOffset);
74}
75
76void Sequence::recordDispatch(ComputeShader *shader, int groupsX, int groupsY,
77 int groupsZ) {
78 vulkanSequenceRecordDispatch(impl_->v, shader, groupsX, groupsY, groupsZ);
79}
80
82
83} // namespace eve::gpgpu
84
85#endif
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:16
void recordUpload(GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset=0)
Definition Sequence.cpp:66
void recordDownload(GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset=0)
Definition Sequence.cpp:71
void recordDispatch(ComputeShader *shader, int groupsX, int groupsY=1, int groupsZ=1)
Definition Sequence.cpp:76
bool isAvailable() const
Definition Sequence.cpp:55
void vulkanSequenceSubmit(VulkanSequence *seq)
void vulkanSequenceBegin(VulkanSequence *seq)
void vulkanSequenceDestroy(VulkanSequence *seq)
void vulkanSequenceRecordDownload(VulkanSequence *seq, GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset)
void vulkanSequenceRecordDispatch(VulkanSequence *seq, ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
void vulkanSequenceRecordUpload(VulkanSequence *seq, GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset)
VulkanSequence * vulkanSequenceCreate()