载入中...
搜索中...
未找到
WebGpuGpgpu.h
浏览该文件的文档.
1#pragma once
2
4#include "gpgpu/GpuBuffer.h"
5#include "gpgpu/Sequence.h"
6
7#include <webgpu/webgpu_cpp.h>
8
9#include <array>
10#include <cstdint>
11#include <string>
12
13namespace eve::gpgpu {
14
15class WebGpuGpuBuffer;
16class WebGpuSequence;
17
22class WebGpuComputeShader final : public ComputeShader {
23public:
28
30 void bindBuffer(int binding, GpuBuffer *buffer) override;
32 GpuBuffer *getBoundBuffer(int binding) const override;
33
35 void setFloat(int index, float value) override;
37 float getFloat(int index) const override;
38
40 void clearBindings() override;
41
42 wgpu::ComputePipeline pipeline;
43 wgpu::PipelineLayout pipelineLayout;
44 wgpu::BindGroupLayout setLayout;
45 wgpu::Buffer pushUbo;
46 bool ready = false;
47
48private:
49 std::array<GpuBuffer *, kMaxBindings> bindings_{};
50};
51
53class WebGpuGpuBuffer final : public GpuBuffer {
54public:
56 WebGpuGpuBuffer() = default;
58 ~WebGpuGpuBuffer() override;
59
61 int getSize() const override { return int(size_); }
63 std::string getUsage() const override { return usage_; }
64
66 void writeData(data::ByteData *data, int dstOffset = 0) override;
68 data::ByteData *readData(int srcOffset = 0, int size = -1) override;
69
71 void writeFloat32(int floatIndex, float value) override;
73 float readFloat32(int floatIndex) override;
75 void fillFloat32(float value) override;
76
78 void writeFloat32s(const float *data, int count, int startIndex = 0) override;
80 void readFloat32s(float *out, int count, int startIndex = 0) const override;
81
83 void uploadBytes(const void *src, uint64_t nbytes, uint64_t dstOffset = 0) override;
85 void downloadBytes(void *dst, uint64_t nbytes, uint64_t srcOffset = 0) const override;
87 GpuResidentBufferView residentView() const override;
88
89 wgpu::Buffer buffer;
90 uint64_t size_ = 0;
91 std::string usage_;
92};
93
94// Backend entry points (mirror gpgpu/vulkan/VulkanGpgpu.h).
96bool webgpuGpgpuReady();
98WebGpuComputeShader *webgpuNewShaderFromWgsl(const std::string &wgsl);
100WebGpuComputeShader *webgpuNewShaderFromSpirv(const std::vector<uint32_t> &spv);
102WebGpuGpuBuffer *webgpuNewBuffer(int byteSize, const std::string &usage);
104void webgpuDispatch(ComputeShader *shader, int groupsX, int groupsY, int groupsZ);
115 uint64_t nbytes, uint64_t dstOffset);
118 uint64_t nbytes, uint64_t srcOffset);
121 int groupsY, int groupsZ);
132
133} // namespace eve::gpgpu
double value
std::string usage
std::unique_ptr< gpgpu::GpuBuffer > buffer
Definition OnnxGpgpu.cpp:26
std::unique_ptr< gpgpu::Sequence > sequence
Definition OnnxGpgpu.cpp:43
eve::action::ActionVfxBinding binding
Shader * shader
std::uint32_t count
float size
Definition TreeMesh.cpp:156
uint32_t index
In-memory byte buffer implementing eve::Data (ref-counted).
Definition ByteData.h:13
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
Compute program for the WebGPU backend. Accepts WGSL source; GLSL/SPIR-V input is rejected (browsers ...
Definition WebGpuGpgpu.h:22
float getFloat(int index) const override
Returns the float.
wgpu::BindGroupLayout setLayout
Definition WebGpuGpgpu.h:44
void bindBuffer(int binding, GpuBuffer *buffer) override
Binds buffer.
void setFloat(int index, float value) override
Sets the float.
wgpu::PipelineLayout pipelineLayout
Definition WebGpuGpgpu.h:43
void clearBindings() override
Clears bindings.
GpuBuffer * getBoundBuffer(int binding) const override
Returns the bound buffer.
WebGpuComputeShader()=default
Constructs a WebGpuComputeShader.
wgpu::ComputePipeline pipeline
Definition WebGpuGpgpu.h:42
~WebGpuComputeShader() override
Releases WebGpuComputeShader resources.
Storage / staging buffer for the WebGPU backend.
Definition WebGpuGpgpu.h:53
float readFloat32(int floatIndex) override
Reads float 32.
void downloadBytes(void *dst, uint64_t nbytes, uint64_t srcOffset=0) const override
Downloads bytes.
data::ByteData * readData(int srcOffset=0, int size=-1) override
Reads data.
WebGpuGpuBuffer()=default
Constructs a WebGpuGpuBuffer.
~WebGpuGpuBuffer() override
Releases WebGpuGpuBuffer resources.
void writeFloat32(int floatIndex, float value) override
Writes float 32.
std::string getUsage() const override
Returns the usage.
Definition WebGpuGpgpu.h:63
void readFloat32s(float *out, int count, int startIndex=0) const override
Reads float 32 s.
void uploadBytes(const void *src, uint64_t nbytes, uint64_t dstOffset=0) override
Uploads bytes.
int getSize() const override
Byte length of the owned buffer.
Definition WebGpuGpgpu.h:61
void writeFloat32s(const float *data, int count, int startIndex=0) override
Writes float 32 s.
void writeData(data::ByteData *data, int dstOffset=0) override
Writes data.
void fillFloat32(float value) override
Fill float 32.
GpuResidentBufferView residentView() const override
Resident view.
Fluids module — interactive surface fluid simulation.
Definition Fluids.h:34
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.
bool webgpuGpgpuReady()
Webgpu gpgpu ready.
void webgpuDispatch(ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
Webgpu dispatch.
void webgpuSequenceDestroy(WebGpuSequence *sequence)
Webgpu sequence destroy.
WebGpuGpuBuffer * webgpuNewBuffer(int byteSize, const std::string &usage)
Webgpu new buffer.
SequenceStatus webgpuSequenceWait(WebGpuSequence *sequence)
Webgpu sequence wait.
SequenceStatus webgpuSequenceStatus(const WebGpuSequence *sequence)
Webgpu sequence status.
WebGpuComputeShader * webgpuNewShaderFromSpirv(const std::vector< uint32_t > &spv)
Webgpu new shader from spirv.
WebGpuComputeShader * webgpuNewShaderFromWgsl(const std::string &wgsl)
Webgpu new shader from wgsl.
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 webgpuSequenceSubmitAsync(WebGpuSequence *sequence)
Webgpu sequence submit async.
void webgpuSequenceSubmit(WebGpuSequence *sequence)
Webgpu sequence submit.
Transient backend buffer slice shared between sibling GPU modules. @ownership Non-owning; nativeHandl...