载入中...
搜索中...
未找到
VulkanComputeShader.h
浏览该文件的文档.
1#pragma once
2
4#include "vkbuilder.hpp"
5
6#include <array>
7#include <vector>
8
9namespace eve::gpgpu {
10
12class VulkanComputeShader final : public ComputeShader {
13public:
15 ~VulkanComputeShader() override;
16
18 void bindBuffer(int binding, GpuBuffer *buffer) override;
20 GpuBuffer *getBoundBuffer(int binding) const override;
22 void setFloat(int index, float value) override;
24 float getFloat(int index) const override;
26 void clearBindings() override;
27
29 void flushDescriptors(vkb::Device &device);
30
33 void beginSequence();
35 void endSequence();
36
43 void releasePendingDescriptors(vkb::Device &device);
44
45 vkb::Device *device_ = nullptr;
46 vk::ShaderModule module_{};
47 vk::DescriptorSetLayout setLayout_{};
48 vk::PipelineLayout pipelineLayout_{};
49 vk::Pipeline pipeline_{};
50 vk::DescriptorPool descriptorPool_{};
51 vk::DescriptorSet descriptorSet_{};
52 vk::Buffer dummyBuffer_{};
53 vk::DeviceMemory dummyMemory_{};
54#if defined(VKB_ENABLE_VMA)
55 VmaAllocation dummyVmaAllocation_ = VK_NULL_HANDLE;
56#endif
57
58 std::array<GpuBuffer *, kMaxBindings> bindings_{};
59 bool descriptorsDirty_ = true;
60
61 // Sets superseded by newer flushes; still referenced by pending command
62 // buffers until the owning Sequence submits and waits.
63 std::vector<vk::DescriptorSet> pendingSets_;
65};
66
67} // namespace eve::gpgpu
double value
vkb::Device & device
std::unique_ptr< gpgpu::GpuBuffer > buffer
Definition OnnxGpgpu.cpp:26
eve::action::ActionVfxBinding binding
uint32_t index
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
Vulkan 计算着色器(SPIR-V pipeline + descriptor 管理)。
float getFloat(int index) const override
Returns the float.
void releasePendingDescriptors(vkb::Device &device)
Release pending descriptors.
void clearBindings() override
清空全部绑定。
void bindBuffer(int binding, GpuBuffer *buffer) override
绑定/解绑 GpuBuffer 到指定 binding。
vk::DescriptorSetLayout setLayout_
std::array< GpuBuffer *, kMaxBindings > bindings_
void flushDescriptors(vkb::Device &device)
内部:把脏绑定刷成 descriptor set。
GpuBuffer * getBoundBuffer(int binding) const override
Returns the bound buffer.
~VulkanComputeShader() override
Releases VulkanComputeShader resources.
std::vector< vk::DescriptorSet > pendingSets_
void setFloat(int index, float value) override
标量 uniform 读写。
Fluids module — interactive surface fluid simulation.
Definition Fluids.h:34