3
0

AttachmentImagePool.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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/Image/AttachmentImagePool.h>
  9. #include <Atom/RPI.Reflect/ResourcePoolAsset.h>
  10. #include <Atom/RHI/Factory.h>
  11. #include <Atom/RHI/ImagePool.h>
  12. #include <Atom/RHI.Reflect/ImagePoolDescriptor.h>
  13. #include <AtomCore/Instance/InstanceDatabase.h>
  14. namespace AZ
  15. {
  16. namespace RPI
  17. {
  18. Data::Instance<AttachmentImagePool> AttachmentImagePool::FindOrCreate(const Data::Asset<ResourcePoolAsset>& resourcePoolAsset)
  19. {
  20. return Data::InstanceDatabase<AttachmentImagePool>::Instance().FindOrCreate(
  21. Data::InstanceId::CreateFromAssetId(resourcePoolAsset.GetId()),
  22. resourcePoolAsset);
  23. }
  24. Data::Instance<AttachmentImagePool> AttachmentImagePool::CreateInternal(
  25. RHI::MultiDevice::DeviceMask deviceMask, ResourcePoolAsset& poolAsset)
  26. {
  27. Data::Instance<AttachmentImagePool> imagePool = aznew AttachmentImagePool();
  28. RHI::ResultCode resultCode = imagePool->Init(deviceMask, poolAsset);
  29. if (resultCode == RHI::ResultCode::Success)
  30. {
  31. return imagePool;
  32. }
  33. return nullptr;
  34. }
  35. RHI::ResultCode AttachmentImagePool::Init(RHI::MultiDevice::DeviceMask deviceMask, ResourcePoolAsset& poolAsset)
  36. {
  37. RHI::Ptr<RHI::ImagePool> imagePool = aznew RHI::ImagePool;
  38. if (!imagePool)
  39. {
  40. AZ_Error("RPI::ImagePool", false, "Failed to create RHI::ImagePool");
  41. return RHI::ResultCode::Fail;
  42. }
  43. RHI::ImagePoolDescriptor *desc = azrtti_cast<RHI::ImagePoolDescriptor*>(poolAsset.GetPoolDescriptor().get());
  44. if (!desc)
  45. {
  46. AZ_Error("RPI::ImagePool", false, "The resource pool asset does not contain an image pool descriptor.");
  47. return RHI::ResultCode::Fail;
  48. }
  49. imagePool->SetName(AZ::Name(poolAsset.GetPoolName()));
  50. RHI::ResultCode resultCode = imagePool->Init(deviceMask, *desc);
  51. if (resultCode == RHI::ResultCode::Success)
  52. {
  53. m_pool = imagePool;
  54. }
  55. return resultCode;
  56. }
  57. const RHI::ImagePool* AttachmentImagePool::GetRHIPool() const
  58. {
  59. return m_pool.get();
  60. }
  61. RHI::ImagePool* AttachmentImagePool::GetRHIPool()
  62. {
  63. return m_pool.get();
  64. }
  65. }
  66. }