Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
ComputeQueueVK.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2025 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
8
9#ifdef JPH_USE_VK
10
15
17
18class ComputeSystemVK;
19class ComputeBufferVK;
20
22class JPH_EXPORT ComputeQueueVK final : public ComputeQueue
23{
24public:
26
28 explicit ComputeQueueVK(ComputeSystemVK *inComputeSystem) : mComputeSystem(inComputeSystem) { }
29 virtual ~ComputeQueueVK() override;
30
32 bool Initialize(uint32 inComputeQueueIndex, ComputeQueueResult &outResult);
33
34 // See: ComputeQueue
35 virtual void SetShader(const ComputeShader *inShader) override;
36 virtual void SetConstantBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
37 virtual void SetBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
38 virtual void SetRWBuffer(const char *inName, ComputeBuffer *inBuffer, EBarrier inBarrier = EBarrier::Yes) override;
39 virtual void ScheduleReadback(ComputeBuffer *inDst, const ComputeBuffer *inSrc) override;
40 virtual void Dispatch(uint inThreadGroupsX, uint inThreadGroupsY, uint inThreadGroupsZ) override;
41 virtual void Execute() override;
42 virtual void Wait() override;
43
44private:
45 bool BeginCommandBuffer();
46
47 // Copy the CPU buffer to the GPU buffer if needed
48 void SyncCPUToGPU(const ComputeBufferVK *inBuffer);
49
50 ComputeSystemVK * mComputeSystem;
51 VkQueue mQueue = VK_NULL_HANDLE;
52 VkCommandPool mCommandPool = VK_NULL_HANDLE;
53 VkDescriptorPool mDescriptorPool = VK_NULL_HANDLE;
54 VkCommandBuffer mCommandBuffer = VK_NULL_HANDLE;
55 bool mCommandBufferRecording = false;
56 VkFence mFence = VK_NULL_HANDLE;
57 bool mIsExecuting = false;
61 Array<BufferVK> mDelayedFreedBuffers;
62};
63
65
66#endif // JPH_USE_VK
#define JPH_EXPORT
Definition Core.h:275
unsigned int uint
Definition Core.h:500
#define JPH_NAMESPACE_END
Definition Core.h:425
std::uint32_t uint32
Definition Core.h:503
#define JPH_NAMESPACE_BEGIN
Definition Core.h:419
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:50
Definition Array.h:36
Buffer that can be read from / written to by a compute shader.
Definition ComputeBuffer.h:18
Definition ComputeQueue.h:20
virtual void Wait()=0
virtual void SetBuffer(const char *inName, const ComputeBuffer *inBuffer)=0
virtual void ScheduleReadback(ComputeBuffer *inDst, const ComputeBuffer *inSrc)=0
virtual void SetConstantBuffer(const char *inName, const ComputeBuffer *inBuffer)=0
virtual void SetShader(const ComputeShader *inShader)=0
virtual void Execute()=0
virtual void Dispatch(uint inThreadGroupsX, uint inThreadGroupsY=1, uint inThreadGroupsZ=1)=0
Dispatch a compute shader with the specified number of thread groups.
virtual void SetRWBuffer(const char *inName, ComputeBuffer *inBuffer, EBarrier inBarrier=EBarrier::Yes)=0
Compute shader handle.
Definition ComputeShader.h:15
Definition Reference.h:163
Helper class that either contains a valid result or an error.
Definition Result.h:12
Definition UnorderedSet.h:29