No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NativeRenderPassTests.cs 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using NUnit.Framework;
  3. using UnityEngine.TestTools;
  4. using UnityEngine;
  5. using UnityEngine.Rendering;
  6. using UnityEngine.Rendering.Universal;
  7. namespace UnityEditor.Rendering.Universal.Tests
  8. {
  9. [TestFixture]
  10. class NativeRenderPassTests
  11. {
  12. internal class TestHelper
  13. {
  14. internal UniversalRendererData rendererData;
  15. internal UniversalCameraData cameraData;
  16. internal UniversalRenderPipelineAsset urpAsset;
  17. internal ScriptableRenderer scriptableRenderer;
  18. public TestHelper()
  19. {
  20. try
  21. {
  22. rendererData = ScriptableObject.CreateInstance<UniversalRendererData>();
  23. urpAsset = UniversalRenderPipelineAsset.Create(rendererData);
  24. urpAsset.name = "TestHelper_URPAsset";
  25. GraphicsSettings.defaultRenderPipeline = urpAsset;
  26. scriptableRenderer = urpAsset.GetRenderer(0);
  27. cameraData = new UniversalCameraData();
  28. ResetData();
  29. }
  30. catch (Exception e)
  31. {
  32. Debug.LogError(e.StackTrace);
  33. Cleanup();
  34. }
  35. }
  36. internal void ResetData()
  37. {
  38. scriptableRenderer.useRenderPassEnabled = true;
  39. }
  40. internal void Cleanup()
  41. {
  42. ScriptableObject.DestroyImmediate(urpAsset);
  43. ScriptableObject.DestroyImmediate(rendererData);
  44. }
  45. }
  46. private TestHelper m_TestHelper;
  47. private RenderPipelineAsset m_PreviousRenderPipelineAssetGraphicsSettings;
  48. private RenderPipelineAsset m_PreviousRenderPipelineAssetQualitySettings;
  49. public class TestRenderPassUseNRP : ScriptableRenderPass
  50. {
  51. public TestRenderPassUseNRP()
  52. {
  53. // Initialize with this argument to true, to avoid other unrelated errors
  54. overrideCameraTarget = true;
  55. // Enable the use of Native Render Pass. This is set to true by defalult, but we want to make it explicit
  56. useNativeRenderPass = true;
  57. }
  58. }
  59. [OneTimeSetUp]
  60. public void OneTimeSetup()
  61. {
  62. m_PreviousRenderPipelineAssetGraphicsSettings = GraphicsSettings.defaultRenderPipeline;
  63. m_PreviousRenderPipelineAssetQualitySettings = QualitySettings.renderPipeline;
  64. GraphicsSettings.defaultRenderPipeline = null;
  65. QualitySettings.renderPipeline = null;
  66. }
  67. [SetUp]
  68. public void Setup()
  69. {
  70. m_TestHelper = new();
  71. m_TestHelper.ResetData();
  72. }
  73. [TearDown]
  74. public void TearDown()
  75. {
  76. m_TestHelper.Cleanup();
  77. }
  78. [OneTimeTearDown]
  79. public void OneTimeTearDown()
  80. {
  81. GraphicsSettings.defaultRenderPipeline = m_PreviousRenderPipelineAssetGraphicsSettings;
  82. QualitySettings.renderPipeline = m_PreviousRenderPipelineAssetQualitySettings;
  83. }
  84. public void InitializeRenderPassQueue(ScriptableRenderer renderer, int count)
  85. {
  86. for (int i = 0; i < count; i++)
  87. {
  88. renderer.EnqueuePass(new TestRenderPassUseNRP());
  89. }
  90. }
  91. [Test]
  92. public void UnderLimitRenderPassInNRP()
  93. {
  94. // Use kRenderPassMaxCount so this is the maximun allowed
  95. InitializeRenderPassQueue(m_TestHelper.scriptableRenderer, ScriptableRenderer.kRenderPassMaxCount);
  96. // Check that no exception is thrown.
  97. Assert.DoesNotThrow(() => m_TestHelper.scriptableRenderer.SetupNativeRenderPassFrameData(m_TestHelper.cameraData, true));
  98. }
  99. [Test]
  100. public void OverLimitRenderPassInNRP()
  101. {
  102. // Increase by one the maximum allowed render passes
  103. InitializeRenderPassQueue(m_TestHelper.scriptableRenderer, ScriptableRenderer.kRenderPassMaxCount+1);
  104. // Check that a logError is thrown, but no other errors are thrown.
  105. m_TestHelper.scriptableRenderer.SetupNativeRenderPassFrameData( m_TestHelper.cameraData, true );
  106. LogAssert.Expect($"Exceeded the maximum number of Render Passes (${ScriptableRenderer.kRenderPassMaxCount}). Please consider using Render Graph to support a higher number of render passes with Native RenderPass, note support will be enabled by default.");
  107. }
  108. }
  109. }