ComputeBufferMTL.mm 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <Jolt/Jolt.h>
  5. #ifdef JPH_USE_MTL
  6. #include <Jolt/Compute/MTL/ComputeBufferMTL.h>
  7. JPH_NAMESPACE_BEGIN
  8. ComputeBufferMTL::ComputeBufferMTL(ComputeSystemMTL *inComputeSystem, EType inType, uint64 inSize, uint inStride) :
  9. ComputeBuffer(inType, inSize, inStride),
  10. mComputeSystem(inComputeSystem)
  11. {
  12. }
  13. bool ComputeBufferMTL::Initialize(const void *inData)
  14. {
  15. NSUInteger size = NSUInteger(mSize) * mStride;
  16. if (inData != nullptr)
  17. mBuffer = [mComputeSystem->GetDevice() newBufferWithBytes: inData length: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeShared | MTLResourceHazardTrackingModeTracked];
  18. else
  19. mBuffer = [mComputeSystem->GetDevice() newBufferWithLength: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeShared | MTLResourceHazardTrackingModeTracked];
  20. return mBuffer != nil;
  21. }
  22. ComputeBufferMTL::~ComputeBufferMTL()
  23. {
  24. [mBuffer release];
  25. }
  26. void *ComputeBufferMTL::MapInternal(EMode inMode)
  27. {
  28. return mBuffer.contents;
  29. }
  30. void ComputeBufferMTL::UnmapInternal()
  31. {
  32. }
  33. ComputeBufferResult ComputeBufferMTL::CreateReadBackBuffer() const
  34. {
  35. ComputeBufferResult result;
  36. result.Set(const_cast<ComputeBufferMTL *>(this));
  37. return result;
  38. }
  39. JPH_NAMESPACE_END
  40. #endif // JPH_USE_MTL