Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
ComputeQueueDX12.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
7#ifdef JPH_USE_DX12
8
12
14
15class ComputeBufferDX12;
16
18class JPH_EXPORT ComputeQueueDX12 final : public ComputeQueue
19{
20public:
22
24 virtual ~ComputeQueueDX12() override;
25
27 bool Initialize(ID3D12Device *inDevice, D3D12_COMMAND_LIST_TYPE inType, ComputeQueueResult &outResult);
28
30 ID3D12GraphicsCommandList * Start();
31
32 // See: ComputeQueue
33 virtual void SetShader(const ComputeShader *inShader) override;
34 virtual void SetConstantBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
35 virtual void SetBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
36 virtual void SetRWBuffer(const char *inName, ComputeBuffer *inBuffer, EBarrier inBarrier = EBarrier::Yes) override;
37 virtual void ScheduleReadback(ComputeBuffer *inDst, const ComputeBuffer *inSrc) override;
38 virtual void Dispatch(uint inThreadGroupsX, uint inThreadGroupsY, uint inThreadGroupsZ) override;
39 virtual void Execute() override;
40 virtual void Wait() override;
41
42private:
44 void SyncCPUToGPU(const ComputeBufferDX12 *inBuffer);
45
46 ComPtr<ID3D12CommandQueue> mCommandQueue;
47 ComPtr<ID3D12CommandAllocator> mCommandAllocator;
48 ComPtr<ID3D12GraphicsCommandList> mCommandList;
49 HANDLE mFenceEvent = INVALID_HANDLE_VALUE;
50 ComPtr<ID3D12Fence> mFence;
51 UINT64 mFenceValue = 0;
52 RefConst<ComputeShaderDX12> mShader = nullptr;
53 bool mIsStarted = false;
54 bool mIsExecuting = false;
56 Array<ComPtr<ID3D12Resource>> mDelayedFreedBuffers;
57};
58
60
61#endif // JPH_USE_DX12
#define JPH_EXPORT
Definition Core.h:275
unsigned int uint
Definition Core.h:500
#define JPH_NAMESPACE_END
Definition Core.h:425
#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