3
0

RayTracingPassData.h 4.0 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. #pragma once
  9. #include <Atom/RPI.Reflect/Asset/AssetReference.h>
  10. #include <Atom/RPI.Reflect/Pass/RenderPassData.h>
  11. #include <AzCore/Serialization/SerializeContext.h>
  12. namespace AZ
  13. {
  14. namespace Render
  15. {
  16. //! Custom data for the RayTracingPass, specified in the PassRequest.
  17. struct RayTracingPassData
  18. : public RPI::RenderPassData
  19. {
  20. AZ_RTTI(RayTracingPassData, "{26C2E2FD-D30A-4142-82A3-0167BC94B3EE}", RPI::RenderPassData);
  21. AZ_CLASS_ALLOCATOR(RayTracingPassData, SystemAllocator);
  22. RayTracingPassData() = default;
  23. virtual ~RayTracingPassData() = default;
  24. static void Reflect(ReflectContext* context)
  25. {
  26. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  27. {
  28. serializeContext->Class<RayTracingPassData, RenderPassData>()
  29. ->Version(1)
  30. ->Field("RayGenerationShaderAsset", &RayTracingPassData::m_rayGenerationShaderAssetReference)
  31. ->Field("RayGenerationShaderName", &RayTracingPassData::m_rayGenerationShaderName)
  32. ->Field("ClosestHitShaderAsset", &RayTracingPassData::m_closestHitShaderAssetReference)
  33. ->Field("ClosestHitShaderName", &RayTracingPassData::m_closestHitShaderName)
  34. ->Field("ClosestHitProceduralShaderAsset", &RayTracingPassData::m_closestHitProceduralShaderAssetReference)
  35. ->Field("ClosestHitProceduralShaderName", &RayTracingPassData::m_closestHitProceduralShaderName)
  36. ->Field("MissShaderAsset", &RayTracingPassData::m_missShaderAssetReference)
  37. ->Field("MissShaderName", &RayTracingPassData::m_missShaderName)
  38. ->Field("IntersectionShaderAsset", &RayTracingPassData::m_intersectionShaderAssetReference)
  39. ->Field("IntersectionShaderName", &RayTracingPassData::m_intersectionShaderName)
  40. ->Field("MaxPayloadSize", &RayTracingPassData::m_maxPayloadSize)
  41. ->Field("MaxAttributeSize", &RayTracingPassData::m_maxAttributeSize)
  42. ->Field("MaxRecursionDepth", &RayTracingPassData::m_maxRecursionDepth)
  43. ->Field("Thread Count X", &RayTracingPassData::m_threadCountX)
  44. ->Field("Thread Count Y", &RayTracingPassData::m_threadCountY)
  45. ->Field("Thread Count Z", &RayTracingPassData::m_threadCountZ)
  46. ->Field("Make Fullscreen Pass", &RayTracingPassData::m_makeFullscreenPass)
  47. ->Field("Max Ray Length", &RayTracingPassData::m_maxRayLength)
  48. ;
  49. }
  50. }
  51. RPI::AssetReference m_rayGenerationShaderAssetReference;
  52. AZStd::string m_rayGenerationShaderName;
  53. RPI::AssetReference m_closestHitShaderAssetReference;
  54. AZStd::string m_closestHitShaderName;
  55. RPI::AssetReference m_closestHitProceduralShaderAssetReference;
  56. AZStd::string m_closestHitProceduralShaderName;
  57. RPI::AssetReference m_missShaderAssetReference;
  58. AZStd::string m_missShaderName;
  59. RPI::AssetReference m_intersectionShaderAssetReference;
  60. AZStd::string m_intersectionShaderName;
  61. uint32_t m_maxPayloadSize = 64;
  62. uint32_t m_maxAttributeSize = 32;
  63. uint32_t m_maxRecursionDepth = 1;
  64. float m_maxRayLength = 1e27f;
  65. uint32_t m_threadCountX = 1;
  66. uint32_t m_threadCountY = 1;
  67. uint32_t m_threadCountZ = 1;
  68. bool m_makeFullscreenPass = false;
  69. };
  70. } // namespace RPI
  71. } // namespace AZ