2
0

ComputeQueueMTL.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #ifdef JPH_USE_MTL
  6. #include <MetalKit/MetalKit.h>
  7. #include <Jolt/Compute/ComputeQueue.h>
  8. JPH_NAMESPACE_BEGIN
  9. class ComputeShaderMTL;
  10. /// A command queue for Metal for executing compute workloads on the GPU.
  11. class JPH_EXPORT ComputeQueueMTL final : public ComputeQueue
  12. {
  13. public:
  14. JPH_OVERRIDE_NEW_DELETE
  15. /// Constructor / destructor
  16. ComputeQueueMTL(id<MTLDevice> inDevice);
  17. virtual ~ComputeQueueMTL() override;
  18. // See: ComputeQueue
  19. virtual void SetShader(const ComputeShader *inShader) override;
  20. virtual void SetConstantBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
  21. virtual void SetBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
  22. virtual void SetRWBuffer(const char *inName, ComputeBuffer *inBuffer, EBarrier inBarrier = EBarrier::Yes) override;
  23. virtual void ScheduleReadback(ComputeBuffer *inDst, const ComputeBuffer *inSrc) override;
  24. virtual void Dispatch(uint inThreadGroupsX, uint inThreadGroupsY, uint inThreadGroupsZ) override;
  25. virtual void Execute() override;
  26. virtual void Wait() override;
  27. private:
  28. void BeginCommandBuffer();
  29. id<MTLCommandQueue> mCommandQueue;
  30. id<MTLCommandBuffer> mCommandBuffer;
  31. id<MTLComputeCommandEncoder> mComputeEncoder;
  32. RefConst<ComputeShaderMTL> mShader;
  33. bool mIsExecuting = false;
  34. };
  35. JPH_NAMESPACE_END
  36. #endif // JPH_USE_MTL