载入中...
搜索中...
未找到
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:
14 ~VulkanComputeShader() override;
15
17 void bindBuffer(int binding, GpuBuffer *buffer) override;
18 GpuBuffer *getBoundBuffer(int binding) const override;
20 void setFloat(int index, float value) override;
21 float getFloat(int index) const override;
23 void clearBindings() override;
24
26 void flushDescriptors(vkb::Device &device);
27
29 void beginSequence();
30 void endSequence();
31
37 void releasePendingDescriptors(vkb::Device &device);
38
39 vkb::Device *device_ = nullptr;
40 vk::ShaderModule module_{};
41 vk::DescriptorSetLayout setLayout_{};
42 vk::PipelineLayout pipelineLayout_{};
43 vk::Pipeline pipeline_{};
44 vk::DescriptorPool descriptorPool_{};
45 vk::DescriptorSet descriptorSet_{};
46 vk::Buffer dummyBuffer_{};
47 vk::DeviceMemory dummyMemory_{};
48
49 std::array<GpuBuffer *, kMaxBindings> bindings_{};
50 bool descriptorsDirty_ = true;
51
52 // Sets superseded by newer flushes; still referenced by pending command
53 // buffers until the owning Sequence submits and waits.
54 std::vector<vk::DescriptorSet> pendingSets_;
55 bool deferSetFree_ = false;
56};
57
58} // namespace eve::gpgpu
std::string value
vkb::Device & device
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
Vulkan 计算着色器(SPIR-V pipeline + descriptor 管理)。
float getFloat(int index) const override
void releasePendingDescriptors(vkb::Device &device)
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
std::vector< vk::DescriptorSet > pendingSets_
void setFloat(int index, float value) override
标量 uniform 读写。