载入中...
搜索中...
未找到
VulkanSequence.h
浏览该文件的文档.
1#pragma once
2
3#include "gpgpu/Sequence.h"
4#include "vkbuilder.hpp"
5
6#include <cstdint>
7#include <vector>
8
10class Graphics;
11}
12
13namespace eve::gpgpu {
14
15class ComputeShader;
16class GpuBuffer;
17
31 vk::Queue queue{};
32 vk::CommandPool pool{};
33
34 // Host-visible staging buffers for recordUpload(); reused across cycles
35 // after the previous submission has completed.
36 // A buffer is only reused when its capacity fits, so recorded copies never
37 // reference a buffer that is destroyed mid-record.
38 std::vector<vkb::GenericBuffer> stagingPool;
39 size_t stagingUsed = 0;
40
41 vk::Fence fence = nullptr;
42 bool fenceReady = false;
43
44 vk::CommandBuffer commandBuffer{};
45 vk::CommandBuffer submittedCommandBuffer{};
46 bool recording = false;
48 std::vector<ComputeShader *> usedShaders; // dispatched during this cycle
49
51 bool ready() const;
52
54 void ensureReady();
58 void destroy();
59};
60
67 const void *src, uint64_t nbytes,
68 uint64_t dstOffset);
71 GpuBuffer *staging, uint64_t nbytes,
72 uint64_t srcOffset);
75 int groupsX, int groupsY, int groupsZ);
88
89} // namespace eve::gpgpu
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:18
EVENGINE_API_BACKENDS public API.
Definition Graphics.h:342
Fluids module — interactive surface fluid simulation.
Definition Fluids.h:34
void vulkanSequenceSubmit(VulkanSequence *seq)
Vulkan sequence submit.
SequenceStatus
Observable lifecycle state of a reusable GPU command sequence.
Definition Sequence.h:14
void vulkanSequenceBegin(VulkanSequence *seq)
Vulkan sequence begin.
SequenceStatus vulkanSequenceWait(VulkanSequence *seq)
Vulkan sequence wait.
void vulkanSequenceDestroy(VulkanSequence *seq)
Vulkan sequence destroy.
SequenceStatus vulkanSequenceStatus(const VulkanSequence *seq)
Vulkan sequence status.
void vulkanSequenceRecordDownload(VulkanSequence *seq, GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset)
Vulkan sequence record download.
void vulkanSequenceRecordDispatch(VulkanSequence *seq, ComputeShader *shader, int groupsX, int groupsY, int groupsZ)
Vulkan sequence record dispatch.
SequenceStatus vulkanSequencePoll(VulkanSequence *seq)
Vulkan sequence poll.
void vulkanSequenceRecordUpload(VulkanSequence *seq, GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset)
Vulkan sequence record upload.
VulkanSequence * vulkanSequenceCreate()
Vulkan sequence create.
SequenceStatus vulkanSequenceSubmitAsync(VulkanSequence *seq)
Vulkan sequence submit async.
VulkanSequence public API.
std::vector< ComputeShader * > usedShaders
vk::CommandBuffer submittedCommandBuffer
std::vector< vkb::GenericBuffer > stagingPool
void ensureReady()
Ensure ready.
graphics::vulkan::Graphics * vkg
void destroy()
Destroys destroy.
vk::CommandBuffer commandBuffer
void ensureCommandBuffer()
Ensure command buffer.