3
0

ShaderReloadDebugTracker.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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/Shader/ShaderReloadDebugTracker.h>
  9. #include <AzCore/Math/Crc.h>
  10. #include <AzCore/Module/Environment.h>
  11. namespace AZ
  12. {
  13. namespace RPI
  14. {
  15. namespace ShaderReloadDebugTrackerInternal
  16. {
  17. static constexpr char EnabledVariableName[] = "ShaderReloadDebugTracker enabled";
  18. static constexpr char IndentVariableName[] = "ShaderReloadDebugTracker indent";
  19. static EnvironmentVariable<bool> s_enabled;
  20. static EnvironmentVariable<int> s_indent;
  21. }
  22. void ShaderReloadDebugTracker::Init()
  23. {
  24. MakeReady();
  25. }
  26. void ShaderReloadDebugTracker::Shutdown()
  27. {
  28. ShaderReloadDebugTrackerInternal::s_enabled.Reset();
  29. ShaderReloadDebugTrackerInternal::s_indent.Reset();
  30. }
  31. void ShaderReloadDebugTracker::MakeReady()
  32. {
  33. if (!ShaderReloadDebugTrackerInternal::s_enabled)
  34. {
  35. ShaderReloadDebugTrackerInternal::s_enabled = AZ::Environment::CreateVariable<bool>(AZ::Crc32(ShaderReloadDebugTrackerInternal::EnabledVariableName), false);
  36. ShaderReloadDebugTrackerInternal::s_indent = AZ::Environment::CreateVariable<int>(AZ::Crc32(ShaderReloadDebugTrackerInternal::IndentVariableName), 0);
  37. }
  38. }
  39. bool ShaderReloadDebugTracker::IsEnabled()
  40. {
  41. #ifdef AZ_ENABLE_SHADER_RELOAD_DEBUG_TRACKER
  42. MakeReady();
  43. // Set this to true in the debugger to turn on hot reload tracing.
  44. // If needed, we could hook this up to a CVar.
  45. return ShaderReloadDebugTrackerInternal::s_enabled.Get();
  46. #else
  47. return false;
  48. #endif
  49. }
  50. void ShaderReloadDebugTracker::AddIndent()
  51. {
  52. MakeReady();
  53. ShaderReloadDebugTrackerInternal::s_indent.Get() += IndentSpaces;
  54. }
  55. void ShaderReloadDebugTracker::RemoveIndent()
  56. {
  57. MakeReady();
  58. ShaderReloadDebugTrackerInternal::s_indent.Get() -= IndentSpaces;
  59. }
  60. int ShaderReloadDebugTracker::GetIndent()
  61. {
  62. MakeReady();
  63. return ShaderReloadDebugTrackerInternal::s_indent.Get();
  64. }
  65. ShaderReloadDebugTracker::ScopedSection::~ScopedSection()
  66. {
  67. #ifdef AZ_ENABLE_SHADER_RELOAD_DEBUG_TRACKER
  68. if (m_shouldEndSection)
  69. {
  70. ShaderReloadDebugTracker::EndSection("%s", m_sectionName.c_str());
  71. }
  72. #endif
  73. }
  74. } // namespace RPI
  75. } // namespace AZ