BufferPool.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Atom/RPI.Public/Buffer/BufferPool.h>
  9. #include <Atom/RPI.Reflect/ResourcePoolAsset.h>
  10. #include <Atom/RHI/Factory.h>
  11. #include <Atom/RHI/BufferPool.h>
  12. #include <Atom/RHI.Reflect/BufferPoolDescriptor.h>
  13. #include <AtomCore/Instance/InstanceDatabase.h>
  14. namespace AZ
  15. {
  16. namespace RPI
  17. {
  18. Data::Instance<BufferPool> BufferPool::FindOrCreate(const Data::Asset<ResourcePoolAsset>& resourcePoolAsset)
  19. {
  20. return Data::InstanceDatabase<BufferPool>::Instance().FindOrCreate(
  21. Data::InstanceId::CreateFromAsset(resourcePoolAsset),
  22. resourcePoolAsset);
  23. }
  24. Data::Instance<BufferPool> BufferPool::CreateInternal(RHI::Device& device, ResourcePoolAsset& poolAsset)
  25. {
  26. Data::Instance<BufferPool> bufferPool = aznew BufferPool();
  27. RHI::ResultCode resultCode = bufferPool->Init(device, poolAsset);
  28. if (resultCode == RHI::ResultCode::Success)
  29. {
  30. return bufferPool;
  31. }
  32. return nullptr;
  33. }
  34. RHI::ResultCode BufferPool::Init(RHI::Device& device, ResourcePoolAsset& poolAsset)
  35. {
  36. RHI::Ptr<RHI::BufferPool> bufferPool = RHI::Factory::Get().CreateBufferPool();
  37. if (!bufferPool)
  38. {
  39. AZ_Error("RPI::BufferPool", false, "Failed to create RHI::BufferPool");
  40. return RHI::ResultCode::Fail;
  41. }
  42. RHI::BufferPoolDescriptor *desc = azrtti_cast<RHI::BufferPoolDescriptor*>(poolAsset.GetPoolDescriptor().get());
  43. if (!desc)
  44. {
  45. AZ_Error("RPI::BufferPool", false, "The resource pool asset does not contain a buffer pool descriptor.");
  46. return RHI::ResultCode::Fail;
  47. }
  48. bufferPool->SetName(AZ::Name{ poolAsset.GetPoolName() });
  49. RHI::ResultCode resultCode = bufferPool->Init(device, *desc);
  50. if (resultCode == RHI::ResultCode::Success)
  51. {
  52. m_pool = bufferPool;
  53. }
  54. return resultCode;
  55. }
  56. const RHI::BufferPool* BufferPool::GetRHIPool() const
  57. {
  58. return m_pool.get();
  59. }
  60. RHI::BufferPool* BufferPool::GetRHIPool()
  61. {
  62. return m_pool.get();
  63. }
  64. }
  65. }