ComputeBufferDX12.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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_DX12
  7. #include <Jolt/Compute/DX12/IncludeDX12.h>
  8. JPH_NAMESPACE_BEGIN
  9. class ComputeSystemDX12;
  10. /// Buffer that can be read from / written to by a compute shader
  11. class JPH_EXPORT ComputeBufferDX12 final : public ComputeBuffer
  12. {
  13. public:
  14. JPH_OVERRIDE_NEW_DELETE
  15. /// Constructor
  16. ComputeBufferDX12(ComputeSystemDX12 *inComputeSystem, EType inType, uint64 inSize, uint inStride);
  17. bool Initialize(const void *inData);
  18. ID3D12Resource * GetResourceCPU() const { return mBufferCPU.Get(); }
  19. ID3D12Resource * GetResourceGPU() const { return mBufferGPU.Get(); }
  20. ComPtr<ID3D12Resource> ReleaseResourceCPU() const { return std::move(mBufferCPU); }
  21. bool Barrier(ID3D12GraphicsCommandList *inCommandList, D3D12_RESOURCE_STATES inTo) const;
  22. void RWBarrier(ID3D12GraphicsCommandList *inCommandList);
  23. bool SyncCPUToGPU(ID3D12GraphicsCommandList *inCommandList) const;
  24. ComputeBufferResult CreateReadBackBuffer() const override;
  25. private:
  26. virtual void * MapInternal(EMode inMode) override;
  27. virtual void UnmapInternal() override;
  28. ComputeSystemDX12 * mComputeSystem;
  29. mutable ComPtr<ID3D12Resource> mBufferCPU;
  30. ComPtr<ID3D12Resource> mBufferGPU;
  31. mutable bool mNeedsSync = false; ///< If this buffer needs to be synced from CPU to GPU
  32. mutable D3D12_RESOURCE_STATES mCurrentState = D3D12_RESOURCE_STATE_COPY_DEST; ///< State of the GPU buffer so we can do proper barriers
  33. };
  34. JPH_NAMESPACE_END
  35. #endif // JPH_USE_DX12