ComputeBufferVK.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Compute/ComputeBuffer.h>
  6. #ifdef JPH_USE_VK
  7. #include <Jolt/Compute/VK/BufferVK.h>
  8. JPH_NAMESPACE_BEGIN
  9. class ComputeSystemVK;
  10. /// Buffer that can be read from / written to by a compute shader
  11. class JPH_EXPORT ComputeBufferVK final : public ComputeBuffer
  12. {
  13. public:
  14. JPH_OVERRIDE_NEW_DELETE
  15. /// Constructor
  16. ComputeBufferVK(ComputeSystemVK *inComputeSystem, EType inType, uint64 inSize, uint inStride);
  17. virtual ~ComputeBufferVK() override;
  18. bool Initialize(const void *inData);
  19. virtual ComputeBufferResult CreateReadBackBuffer() const override;
  20. VkBuffer GetBufferCPU() const { return mBufferCPU.mBuffer; }
  21. VkBuffer GetBufferGPU() const { return mBufferGPU.mBuffer; }
  22. BufferVK ReleaseBufferCPU() const { BufferVK tmp = mBufferCPU; mBufferCPU = BufferVK(); return tmp; }
  23. void Barrier(VkCommandBuffer inCommandBuffer, VkPipelineStageFlags inToStage, VkAccessFlagBits inToFlags, bool inForce) const;
  24. bool SyncCPUToGPU(VkCommandBuffer inCommandBuffer) const;
  25. private:
  26. virtual void * MapInternal(EMode inMode) override;
  27. virtual void UnmapInternal() override;
  28. ComputeSystemVK * mComputeSystem;
  29. mutable BufferVK mBufferCPU;
  30. BufferVK mBufferGPU;
  31. mutable bool mNeedsSync = false; ///< If this buffer needs to be synced from CPU to GPU
  32. mutable VkAccessFlagBits mAccessFlagBits = VK_ACCESS_SHADER_READ_BIT; ///< Access flags of the last usage, used for barriers
  33. mutable VkPipelineStageFlags mAccessStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; ///< Pipeline stage of the last usage, used for barriers
  34. };
  35. JPH_NAMESPACE_END
  36. #endif // JPH_USE_VK