载入中...
搜索中...
未找到
WebGpuGpgpu.h
浏览该文件的文档.
1#pragma once
2
4#include "gpgpu/GpuBuffer.h"
5
6#include <webgpu/webgpu_cpp.h>
7
8#include <array>
9#include <cstdint>
10#include <string>
11
12namespace eve::gpgpu {
13
14class WebGpuGpuBuffer;
15
20class WebGpuComputeShader final : public ComputeShader {
21public:
24
25 void bindBuffer(int binding, GpuBuffer *buffer) override;
26 GpuBuffer *getBoundBuffer(int binding) const override;
27
28 void setFloat(int index, float value) override;
29 float getFloat(int index) const override;
30
31 void clearBindings() override;
32
33 wgpu::ComputePipeline pipeline;
34 wgpu::PipelineLayout pipelineLayout;
35 wgpu::BindGroupLayout setLayout;
36 wgpu::Buffer pushUbo;
37 bool ready = false;
38
39private:
40 std::array<GpuBuffer *, kMaxBindings> bindings_{};
41};
42
44class WebGpuGpuBuffer final : public GpuBuffer {
45public:
46 WebGpuGpuBuffer() = default;
47 ~WebGpuGpuBuffer() override;
48
49 int getSize() const override { return int(size_); }
50 std::string getUsage() const override { return usage_; }
51
52 void writeData(data::ByteData *data, int dstOffset = 0) override;
53 data::ByteData *readData(int srcOffset = 0, int size = -1) override;
54
55 void writeFloat32(int floatIndex, float value) override;
56 float readFloat32(int floatIndex) override;
57 void fillFloat32(float value) override;
58
59 void writeFloat32s(const float *data, int count, int startIndex = 0) override;
60 void readFloat32s(float *out, int count, int startIndex = 0) const override;
61
62 void uploadBytes(const void *src, uint64_t nbytes, uint64_t dstOffset = 0) override;
63 void downloadBytes(void *dst, uint64_t nbytes, uint64_t srcOffset = 0) const override;
64
65 wgpu::Buffer buffer;
66 uint64_t size_ = 0;
67 std::string usage_;
68};
69
70// Backend entry points (mirror gpgpu/vulkan/VulkanGpgpu.h).
71bool webgpuGpgpuReady();
72WebGpuComputeShader *webgpuNewShaderFromWgsl(const std::string &wgsl);
73WebGpuComputeShader *webgpuNewShaderFromSpirv(const std::vector<uint32_t> &spv);
74WebGpuGpuBuffer *webgpuNewBuffer(int byteSize, const std::string &usage);
75void webgpuDispatch(ComputeShader *shader, int groupsX, int groupsY, int groupsZ);
76
77} // namespace eve::gpgpu
std::string value
Shader * shader
In-memory byte buffer implementing eve::Data (ref-counted).
Definition ByteData.h:11
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
Compute program for the WebGPU backend. Accepts WGSL source; GLSL/SPIR-V input is rejected (browsers ...
Definition WebGpuGpgpu.h:20
float getFloat(int index) const override
wgpu::BindGroupLayout setLayout
Definition WebGpuGpgpu.h:35
void bindBuffer(int binding, GpuBuffer *buffer) override
Bind a storage buffer to set=0 binding. binding in [0, kMaxBindings).
void setFloat(int index, float value) override
wgpu::PipelineLayout pipelineLayout
Definition WebGpuGpgpu.h:34
GpuBuffer * getBoundBuffer(int binding) const override
wgpu::ComputePipeline pipeline
Definition WebGpuGpgpu.h:33
Storage / staging buffer for the WebGPU backend.
Definition WebGpuGpgpu.h:44
float readFloat32(int floatIndex) override
void downloadBytes(void *dst, uint64_t nbytes, uint64_t srcOffset=0) const override
data::ByteData * readData(int srcOffset=0, int size=-1) override
void writeFloat32(int floatIndex, float value) override
std::string getUsage() const override
Definition WebGpuGpgpu.h:50
void readFloat32s(float *out, int count, int startIndex=0) const override
void uploadBytes(const void *src, uint64_t nbytes, uint64_t dstOffset=0) override
int getSize() const override
Definition WebGpuGpgpu.h:49
void writeFloat32s(const float *data, int count, int startIndex=0) override
Bulk float upload/download (one transfer). startIndex is in floats.
void writeData(data::ByteData *data, int dstOffset=0) override
void fillFloat32(float value) override
bool webgpuGpgpuReady()
void webgpuDispatch(ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
WebGpuGpuBuffer * webgpuNewBuffer(int byteSize, const std::string &usage)
WebGpuComputeShader * webgpuNewShaderFromSpirv(const std::vector< uint32_t > &spv)
WebGpuComputeShader * webgpuNewShaderFromWgsl(const std::string &wgsl)