ComputeQueueCPU.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2026 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Compute/ComputeQueue.h>
  6. #ifdef JPH_USE_CPU_COMPUTE
  7. #include <Jolt/Compute/CPU/ComputeShaderCPU.h>
  8. #include <Jolt/Core/UnorderedSet.h>
  9. JPH_NAMESPACE_BEGIN
  10. /// A command queue for the CPU compute system
  11. class JPH_EXPORT ComputeQueueCPU final : public ComputeQueue
  12. {
  13. public:
  14. JPH_OVERRIDE_NEW_DELETE
  15. /// Destructor
  16. virtual ~ComputeQueueCPU() override;
  17. // See: ComputeQueue
  18. virtual void SetShader(const ComputeShader *inShader) override;
  19. virtual void SetConstantBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
  20. virtual void SetBuffer(const char *inName, const ComputeBuffer *inBuffer) override;
  21. virtual void SetRWBuffer(const char *inName, ComputeBuffer *inBuffer, EBarrier inBarrier = EBarrier::Yes) override;
  22. virtual void ScheduleReadback(ComputeBuffer *inDst, const ComputeBuffer *inSrc) override;
  23. virtual void Dispatch(uint inThreadGroupsX, uint inThreadGroupsY, uint inThreadGroupsZ) override;
  24. virtual void Execute() override;
  25. virtual void Wait() override;
  26. private:
  27. RefConst<ComputeShaderCPU> mShader = nullptr; ///< Current active shader
  28. ShaderWrapper * mWrapper = nullptr; ///< The active shader wrapper
  29. UnorderedSet<RefConst<ComputeBuffer>> mUsedBuffers; ///< Buffers that are in use by the current execution, these will be retained until execution is finished so that we don't free buffers that are in use
  30. };
  31. JPH_NAMESPACE_END
  32. #endif // JPH_USE_CPU_COMPUTE