diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/create-ray-tracing-context.md b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/create-ray-tracing-context.md index 5c2dacbdf21..baa4d4f9d87 100644 --- a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/create-ray-tracing-context.md +++ b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/create-ray-tracing-context.md @@ -9,7 +9,7 @@ Follow these steps: ## Load the ray tracing resources The [`RayTracingContext`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingContext) needs a few utility shaders that the [`RayTracingResources`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingResources) object supplies. You can load these resources in several different ways. -If your project uses SRP (Scriptable Render Pipeline), load the resources via [`RayTracingResources.LoadFromRenderPipelineResources`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingContext.LoadFromRenderPipelineResources()). This always works in the Editor. +If your project uses SRP (Scriptable Render Pipeline), load the resources via [`RayTracingResources.LoadFromRenderPipelineResources`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingResources.LoadFromRenderPipelineResources()). This always works in the Editor. ```C# var rtResources = new RayTracingResources(); bool result = rtResources.LoadFromRenderPipelineResources(); @@ -49,9 +49,12 @@ rtResources.LoadFromAssetBundle(asssetBundle); ## Create the context Once the [`RayTracingResources`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingResources) are loaded, use them to create the [`RayTracingContext`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingContext). ```C# -// Choose a backend -var backend = RayTracingContext.IsBackendSupported(RayTracingBackend.Hardware) ? RayTracingBackend.Hardware : RayTracingBackend.Compute; +var context = new RayTracingContext(rtResources); +``` + +By default, Unity checks if the device supports hardware ray tracing, and selects either hardware ray tracing or compute shaders. To manually select the backend, pass in a `RayTracingBackend`. For example: -// Create the context +```C# +var backend = RayTracingBackend.Compute; var context = new RayTracingContext(backend, rtResources); ``` diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/release-resources.md b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/release-resources.md new file mode 100644 index 00000000000..881045c15f9 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/release-resources.md @@ -0,0 +1,26 @@ +# Release your ray tracing objects + +You must free up the memory your ray tracing objects use after you finish with them. + +Dispose of the following: + +- Scratch buffers. Use [`GraphicsBuffer.Dispose`](xref:UnityEngine.GraphicsBuffer.Dispose()) after you've executed the final command buffer. +- Ray tracing acceleration structures. Use [`IRayTracingAccelStruct.Dispose`](xref:UnityEngine.Rendering.UnifiedRayTracing.IRayTracingAccelStruct.Dispose()) after you've executed the final command buffer. +- Ray tracing context. Use [`RayTracingContext.Dispose`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingContext.Dispose()) after you dispose of all its acceleration structures. + +**Note**: Unity automatically disposes of [`RayTracingResources`](xref:UnityEngine.Rendering.UnifiedRayTracing.RayTracingResources) and [`IRayTracingShader`](xref:UnityEngine.Rendering.UnifiedRayTracing.IRayTracingShader). + +For example: + +```C# +RayTracingContext rtContext = new RayTracingContext(rtResources); +IRayTracingShader rtShader = rtContext.LoadRayTracingShader("Assets/yourShader.urtshader"); +IRayTracingAccelStruct rtAccelStruct = rtContext.CreateAccelerationStructure(new AccelerationStructureOptions()); +GraphicsBuffer rtScratchBuffer = RayTracingHelper.CreateScratchBufferForBuild(rtAccelStruct); + +// ... create and dispatch your ray tracing command buffers ... + +rtScratchBuffer.Dispose(); +rtAccelStruct.Dispose(); +rtContext.Dispose(); +``` diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/unified-ray-tracing-api.md b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/unified-ray-tracing-api.md index 97d2b49c41a..41f71c4ee88 100644 --- a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/unified-ray-tracing-api.md +++ b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/unified-ray-tracing-api.md @@ -12,4 +12,4 @@ The `UnifiedRayTracing` API enables you to write ray tracing code that can execu |[Execute your ray tracing code](execute-shader.md)|How to execute your ray tracing shader.| |[Sample code](trace-camera-rays-full-sample.md)|Complete code example showcasing tracing rays from the scene's camera.| |[Unified ray tracing shader code reference](shader-code-reference.md)|API reference for the unified ray tracing shader code.| - +|[Release your ray tracing objects](release-resources.md)|Learn how to release your ray tracing resources.| diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/workflow.md b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/workflow.md index 2683113ba65..c6669a1147f 100644 --- a/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/workflow.md +++ b/Packages/com.unity.render-pipelines.core/Documentation~/UnifiedRayTracing/workflow.md @@ -5,6 +5,7 @@ To use the API to trace rays in Unity, follow these steps: 3. Create a shader. 4. Build your acceleration structure. 5. Execute your shader. +6. Dispose of your objects. ## Create the ray tracing context @@ -53,3 +54,5 @@ rtShader.Dispatch(cmd, traceScratchBuffer, threadCountX, threadCountY, threadCou For more information, refer to [Execute your ray tracing code](execute-shader.md). +## Dispose of your objects +For more information, refer to [Release your ray tracing objects](release-resources.md). \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgrader.Utils.cs b/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgrader.Utils.cs index 2673c9d8651..2a441d60b19 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgrader.Utils.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgrader.Utils.cs @@ -12,6 +12,8 @@ namespace UnityEditor.Rendering /// public partial class MaterialUpgrader { +internal static readonly string k_DialogKey = $"{nameof(UnityEditor)}.{nameof(Rendering)}.{nameof(MaterialUpgrader)}.ConfirmMaterialConversion"; + #region Internal API /// /// Represents an entry describing material properties @@ -344,15 +346,15 @@ static void PerformUpgrade(List materialUpgrades, List s_Empty = new List(); + + public static List GetCurrentSRPUpgraders() + { + if (!GraphicsSettings.isScriptableRenderPipelineEnabled) + return s_Empty; + + return MaterialUpgrader.FetchAllUpgradersForPipeline(GraphicsSettings.currentRenderPipelineAssetType); + } + + [MenuItem("Edit/Rendering/Materials/Convert All Built-In Materials to Current SRP", true)] + internal static bool UpgradeMaterialsProjectValidate() + { + return GraphicsSettings.isScriptableRenderPipelineEnabled; + } + + [MenuItem("Edit/Rendering/Materials/Convert All Built-In Materials to Current SRP", priority = CoreUtils.Priorities.editMenuPriority + 1)] + internal static void UpgradeMaterialsProject() + { + MaterialUpgrader.UpgradeProjectFolder(GetCurrentSRPUpgraders(), "Upgrade to SRP Material"); + } + + [MenuItem("Edit/Rendering/Materials/Convert Selected Built-In Materials to Current SRP", true)] + internal static bool UpgradeMaterialsSelectionValidate() + { + if (Selection.objects.Length == 0 || !GraphicsSettings.isScriptableRenderPipelineEnabled) + return false; + + foreach (var obj in Selection.objects) + { + if (obj is not Material) + return false; + } + + return true; + } + + [MenuItem("Edit/Rendering/Materials/Convert Selected Built-In Materials to Current SRP", priority = CoreUtils.Priorities.editMenuPriority + 2)] + internal static void UpgradeMaterialsSelection() + { + MaterialUpgrader.UpgradeSelection(GetCurrentSRPUpgraders(), "Upgrade to SRP Material"); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta b/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta new file mode 100644 index 00000000000..56a170e650f --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 81cce92cea62afc46ae47b09fa3c8c6e \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingContext.cs b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingContext.cs index 0c6ff3dcf0a..01e23667eaf 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingContext.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingContext.cs @@ -332,7 +332,9 @@ static public GraphicsBuffer CreateScratchBufferForTrace(IRayTracingShader shade /// Resizes a scratch buffer if its size doesn't fit the requirement of . /// /// - /// The resize is accomplished by disposing of the GraphicsBuffer and instanciating a new one at the proper size. + /// Unity resizes the buffer by disposing of the `GraphicsBuffer` and instantiating a new one with the proper size. + /// **Important:** If you reference the current in a command buffer, you must + /// only call this method after you submit the command buffer. See or . /// /// The shader that will be passed to . /// Number of threads in the X dimension that will be passed to . @@ -362,7 +364,9 @@ static public void ResizeScratchBufferForTrace( /// Resizes a scratch buffer if its size doesn't fit the requirement of . /// /// - /// The resize is accomplished by disposing of the GraphicsBuffer and instanciating a new one at the proper size. + /// Unity resizes the buffer by disposing of the `GraphicsBuffer` and instantiating a new one with the proper size. + /// **Important:** If you reference the current in a command buffer, you must + /// only call this method after you submit the command buffer. See or . /// /// The acceleration structure that will be passed to . /// The scratch buffer. diff --git a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingResources.cs b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingResources.cs index ca69731e84c..ea9c7970584 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingResources.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/RayTracingResources.cs @@ -5,6 +5,12 @@ namespace UnityEngine.Rendering.UnifiedRayTracing { + /// + /// Resource class that handles the serialization of UnifiedRayTracing's utility shaders in projects using a Scriptable Render Pipeline. + /// + /// + /// This class is used internally by + /// [Scripting.APIUpdating.MovedFrom( autoUpdateAPI: true, sourceNamespace: "UnityEngine.Rendering.UnifiedRayTracing", @@ -13,10 +19,13 @@ namespace UnityEngine.Rendering.UnifiedRayTracing [Serializable] [SupportedOnRenderPipeline()] [Categorization.CategoryInfo(Name = "R: Unified Ray Tracing", Order = 1000), HideInInspector] - sealed class RayTracingRenderPipelineResources : IRenderPipelineResources + public sealed class RayTracingRenderPipelineResources : IRenderPipelineResources { [SerializeField, HideInInspector] int m_Version = 1; + /// + /// The version number of the resources container. + /// public int version { get => m_Version; @@ -49,54 +58,84 @@ public int version [SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/scatter.compute")] ComputeShader m_Scatter; + /// + /// Compute shader for geometry pool operations. + /// public ComputeShader GeometryPoolKernels { get => m_GeometryPoolKernels; set => this.SetValueAndNotify(ref m_GeometryPoolKernels, value, nameof(m_GeometryPoolKernels)); } + /// + /// Compute shader for buffer copy operations. + /// public ComputeShader CopyBuffer { get => m_CopyBuffer; set => this.SetValueAndNotify(ref m_CopyBuffer, value, nameof(m_CopyBuffer)); } + /// + /// Compute shader for copying vertex position data. + /// public ComputeShader CopyPositions { get => m_CopyPositions; set => this.SetValueAndNotify(ref m_CopyPositions, value, nameof(m_CopyPositions)); } + /// + /// Compute shader for radix sort operations. + /// public ComputeShader BitHistogram { get => m_BitHistogram; set => this.SetValueAndNotify(ref m_BitHistogram, value, nameof(m_BitHistogram)); } + /// + /// Compute shader for prefix sum operations. + /// public ComputeShader BlockReducePart { get => m_BlockReducePart; set => this.SetValueAndNotify(ref m_BlockReducePart, value, nameof(m_BlockReducePart)); } + /// + /// Compute shader for prefix sum operations. + /// public ComputeShader BlockScan { get => m_BlockScan; set => this.SetValueAndNotify(ref m_BlockScan, value, nameof(m_BlockScan)); } + /// + /// Compute shader for building a BVH. + /// public ComputeShader BuildHlbvh { get => m_BuildHlbvh; set => this.SetValueAndNotify(ref m_BuildHlbvh, value, nameof(m_BuildHlbvh)); } + /// + /// Compute shader for BVH restructuring. + /// + /// + /// Used to optimize the BVH structure after initial construction. + /// public ComputeShader RestructureBvh { get => m_RestructureBvh; set => this.SetValueAndNotify(ref m_RestructureBvh, value, nameof(m_RestructureBvh)); } + /// + /// Compute shader for radix sort operations. + /// public ComputeShader Scatter { get => m_Scatter; @@ -107,17 +146,62 @@ public ComputeShader Scatter /// /// Utility shaders needed by a to operate. /// + /// + /// This class holds compute shaders required for unified ray tracing operations, + /// including geometry pool management and BVH construction kernels. + /// public class RayTracingResources { - internal ComputeShader geometryPoolKernels { get; set; } - internal ComputeShader copyBuffer { get; set; } - internal ComputeShader copyPositions { get; set; } - internal ComputeShader bitHistogram { get; set; } - internal ComputeShader blockReducePart { get; set; } - internal ComputeShader blockScan { get; set; } - internal ComputeShader buildHlbvh { get; set; } - internal ComputeShader restructureBvh { get; set; } - internal ComputeShader scatter { get; set; } + /// + /// Compute shader for geometry pool operations. + /// + public ComputeShader geometryPoolKernels { get; set; } + + /// + /// Compute shader for buffer copy operations. + /// + public ComputeShader copyBuffer { get; set; } + + /// + /// Compute shader for copying vertex position data. + /// + public ComputeShader copyPositions { get; set; } + + /// + /// Compute shader for radix sort operations. + /// + public ComputeShader bitHistogram { get; set; } + + /// + /// Compute shader for radix sort operations. + /// + public ComputeShader scatter { get; set; } + + /// + /// Compute shader for prefix sum operations. + /// + public ComputeShader blockReducePart { get; set; } + + /// + /// Compute shader for prefix sum operations. + /// + public ComputeShader blockScan { get; set; } + + /// + /// Compute shader for building a BVH. + /// + public ComputeShader buildHlbvh { get; set; } + + /// + /// Compute shader for BVH restructuring. + /// + /// + /// Used to optimize the BVH structure after initial construction. + /// + public ComputeShader restructureBvh { get; set; } + + + #if UNITY_EDITOR /// diff --git a/Packages/com.unity.render-pipelines.core/Runtime/XR/XRBuiltinShaderConstants.cs b/Packages/com.unity.render-pipelines.core/Runtime/XR/XRBuiltinShaderConstants.cs index cbbd2cee2dc..df9f0be4d19 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/XR/XRBuiltinShaderConstants.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/XR/XRBuiltinShaderConstants.cs @@ -52,6 +52,11 @@ public static class XRBuiltinShaderConstants /// static public readonly int unity_StereoWorldSpaceCameraPos = Shader.PropertyToID("unity_StereoWorldSpaceCameraPos"); + /// + /// Cached unique id for unity_StereoEyeIndex + /// + static public readonly int unity_StereoEyeIndex = Shader.PropertyToID("unity_StereoEyeIndex"); + // Pre-allocate arrays to avoid GC static Matrix4x4[] s_cameraProjMatrix = new Matrix4x4[2]; static Matrix4x4[] s_invCameraProjMatrix = new Matrix4x4[2]; diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs deleted file mode 100644 index 3181589f0e9..00000000000 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; -using UnityEngine.Rendering.HighDefinition; - -namespace UnityEditor.Rendering.HighDefinition -{ - class MaterialUpgraderEditMenus - { - public static List GetHDUpgraders() - { - return MaterialUpgrader.FetchAllUpgradersForPipeline(typeof(HDRenderPipelineAsset)); - } - - [MenuItem("Edit/Rendering/Materials/Convert All Materials using HDRP upgraders", priority = CoreUtils.Priorities.editMenuPriority + 1)] - internal static void UpgradeMaterialsProject() - { - MaterialUpgrader.UpgradeProjectFolder(GetHDUpgraders(), "Upgrade to HDRP Material"); - } - - [MenuItem("Edit/Rendering/Materials/Convert Selected Materials using HDRP upgraders", true)] - static bool MaterialValidate(MenuCommand command) - { - foreach (var obj in Selection.objects) - { - if (obj is not Material) return false; - } - - return true; - } - - [MenuItem("Edit/Rendering/Materials/Convert Selected Materials using HDRP upgraders", priority = CoreUtils.Priorities.editMenuPriority + 2)] - internal static void UpgradeMaterialsSelection() - { - MaterialUpgrader.UpgradeSelection(GetHDUpgraders(), "Upgrade to HDRP Material"); - } - } -} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta deleted file mode 100644 index f1574a46878..00000000000 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Tools/MaterialUpgrader/MaterialUpgraderEditMenus.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 989185d0be859c14a8c6c5e7e8f9f46b \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.cs index 42d5097c458..8fe4e0cc228 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.cs @@ -391,6 +391,10 @@ private void UpdateWindowTitle() }); } + public static List GetHDUpgraders() + { + return MaterialUpgrader.FetchAllUpgradersForPipeline(typeof(HDRenderPipelineAsset)); + } private void CreateGUI() { UpdateWindowTitle(); @@ -431,8 +435,7 @@ private void CreateGUI() container.Add(CreateTitle(Style.migrationTitle)); - if (MaterialUpgrader.ProjectContainsNonAutomaticUpgradePath( - MaterialUpgraderEditMenus.GetHDUpgraders())) + if (MaterialUpgrader.ProjectContainsNonAutomaticUpgradePath(GetHDUpgraders())) { var nonBuiltinMaterialHelpBox = new HelpBox(Style.nonAutomaticUpgradeMaterials, HelpBoxMessageType.Warning); nonBuiltinMaterialHelpBox.AddToClassList("NonBuiltinMaterialWarning"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs index b891cd00db2..3b5d42f3dc6 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs @@ -272,12 +272,6 @@ public partial class DebugDisplaySettings : IDebugData static GUIContent[] s_RenderingMipmapDebugMaterialTextureSlotStrings = null; static int[] s_RenderingMipmapDebugMaterialTextureSlotValues = null; - static List s_CameraNames = new List() { new("None") }; - static GUIContent[] s_CameraNamesStrings = { new ("No Visible Camera") }; - static int[] s_CameraNamesValues = { 0 }; - - static bool needsRefreshingCameraFreezeList = true; - #if ENABLE_NVIDIA && ENABLE_NVIDIA_MODULE internal UnityEngine.NVIDIA.DebugView nvidiaDebugView { get; } = new UnityEngine.NVIDIA.DebugView(); #endif @@ -339,8 +333,64 @@ public partial class DebugData public bool countRays = false; /// Display Show Lens Flare Data Driven Only. public bool showLensFlareDataDrivenOnly = false; + + private static Camera[] GetAvailableDebuggableCameras() + { + using (ListPool.Get(out var tmp)) + { + +#if UNITY_EDITOR + if (UnityEditor.SceneView.lastActiveSceneView != null) + { + var sceneCamera = UnityEditor.SceneView.lastActiveSceneView.camera; + if (sceneCamera != null) + tmp.Add(sceneCamera); + } +#endif + + var cameraArray = new Camera[Camera.allCamerasCount]; + Camera.GetAllCameras(cameraArray); + + foreach (var camera in cameraArray) + { + if (camera == null) + continue; + + if (camera.cameraType != CameraType.Preview && camera.cameraType != CameraType.Reflection) + { + if (camera.TryGetComponent(out _)) + tmp.Add(camera); + } + } + + return tmp.ToArray(); + } + } + /// Index of the camera to freeze for visibility. - public int debugCameraToFreeze = 0; + public int debugCameraToFreeze + { + get + { + var cameras = GetAvailableDebuggableCameras(); + if (cameras == null || cameras.Length == 0 || selectedCameraToFreeze == null) + return -1; + + return Array.IndexOf(cameras, selectedCameraToFreeze); + } + set + { + var cameras = GetAvailableDebuggableCameras(); + if (value < 0 || value >= cameras.Length) + selectedCameraToFreeze = null; + else + selectedCameraToFreeze = cameras[value]; + } + } + + /// The camera to freeze for visibility. + public Camera selectedCameraToFreeze; + internal RTASDebugView rtasDebugView = RTASDebugView.Shadows; internal RTASDebugMode rtasDebugMode = RTASDebugMode.InstanceID; internal VolumetricCloudsDebug volumetricCloudDebug = VolumetricCloudsDebug.Lighting; @@ -680,7 +730,7 @@ public ColorPickerDebugMode GetDebugColorPickerMode() /// True if camera visibility is frozen public bool IsCameraFreezeEnabled() { - return data.debugCameraToFreeze != 0; + return data.selectedCameraToFreeze != null; } /// @@ -690,7 +740,7 @@ public bool IsCameraFreezeEnabled() /// True if a specific camera is frozen for visibility. public bool IsCameraFrozen(Camera camera) { - return IsCameraFreezeEnabled() && camera.name.Equals(s_CameraNamesStrings[data.debugCameraToFreeze].text); + return IsCameraFreezeEnabled() && camera == data.selectedCameraToFreeze; } /// @@ -1974,7 +2024,14 @@ void RegisterRenderingDebug() }); } - renderingSettings.children.Add(new DebugUI.EnumField { nameAndTooltip = RenderingStrings.FreezeCameraForCulling, getter = () => data.debugCameraToFreeze, setter = value => data.debugCameraToFreeze = value, enumNames = s_CameraNamesStrings, enumValues = s_CameraNamesValues, getIndex = () => data.debugCameraToFreezeEnumIndex, setIndex = value => data.debugCameraToFreezeEnumIndex = value }); + var freezeCameraForCullingSelector = new DebugUI.CameraSelector() + { + nameAndTooltip = RenderingStrings.FreezeCameraForCulling, + getter = () => data.selectedCameraToFreeze, + setter = value => data.selectedCameraToFreeze = value as Camera + }; + + renderingSettings.children.Add(freezeCameraForCullingSelector); renderingSettings.children.Add(new DebugUI.Container { @@ -2228,19 +2285,6 @@ internal void UpdateMaterials() } } - internal void UpdateCameraFreezeOptions() - { - if (needsRefreshingCameraFreezeList) - { - s_CameraNamesStrings = s_CameraNames.ToArray(); - s_CameraNamesValues = Enumerable.Range(0, s_CameraNames.Count()).ToArray(); - - UnregisterRenderingDebug(); - RegisterRenderingDebug(); - needsRefreshingCameraFreezeList = false; - } - } - internal bool DebugHideSky(HDCamera hdCamera) { return (IsMatcapViewEnabled(hdCamera) || diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index 332bc5ce6dd..34adbd6ece4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -313,10 +313,11 @@ void RecordRenderGraph(RenderRequest renderRequest, GenerateColorPyramid(m_RenderGraph, hdCamera, colorBuffer, distortionColorPyramid, FullScreenDebugMode.PreRefractionColorPyramid, distortionRendererList); currentColorPyramid = distortionColorPyramid; - - // The color pyramid for distortion is not an history, so it need to be sampled appropriate RT handle scale. Thus we need to update it - var newScale = new Vector4(RTHandles.rtHandleProperties.rtHandleScale.x, RTHandles.rtHandleProperties.rtHandleScale.y, 0, 0); - m_ShaderVariablesGlobalCB._ColorPyramidUvScaleAndLimitCurrentFrame = newScale; + // The color pyramid for distortion is not an history buffer, so it needs to be sampled using an appropriate RT handle scale. Thus we need to update the scale and the limit. + // It's relatively straightforward to update the scale because we store it in rtHandleScale but we miss the limit values. For now, we approximate them by setting them to the scale value. + // This is imperfect but resetting limit at (0, 0) gives worse results (UUM-130925). + var newScaleLimits = new Vector4(RTHandles.rtHandleProperties.rtHandleScale.x, RTHandles.rtHandleProperties.rtHandleScale.y, RTHandles.rtHandleProperties.rtHandleScale.x, RTHandles.rtHandleProperties.rtHandleScale.y); + m_ShaderVariablesGlobalCB._ColorPyramidUvScaleAndLimitCurrentFrame = newScaleLimits; PushGlobalCameraParams(m_RenderGraph, hdCamera); } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs index 4ca86969ec4..9d28ebc46d1 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs @@ -2754,9 +2754,6 @@ AOVRequestData aovRequest } else { -#if DEVELOPMENT_BUILD || UNITY_EDITOR - m_DebugDisplaySettings.UpdateCameraFreezeOptions(); -#endif m_CurrentDebugDisplaySettings = m_DebugDisplaySettings; } diff --git a/Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UITKPass.hlsl b/Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UITKPass.hlsl index 03f675a2799..918543b6372 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UITKPass.hlsl +++ b/Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UITKPass.hlsl @@ -16,6 +16,9 @@ PackedVaryings uie_custom_vert(Attributes input) uieInput.circle = input.uv6; uieInput.textureId = input.uv7.x; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, uieInput); + v2f uieOutput = uie_std_vert(uieInput); Varyings varyings = (Varyings)0; @@ -32,6 +35,9 @@ PackedVaryings uie_custom_vert(Attributes input) varyings.texCoord3 = float4(uieOutput.textCoreLoc.x, uieOutput.textCoreLoc.y, input.uv0.z, input.uv0.w); // Layout uv in z, w varyings.texCoord4 = uieOutput.circle; + UNITY_TRANSFER_INSTANCE_ID(input, varyings); + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(uieOutput, varyings); + PackedVaryings packedOutput = PackVaryings(varyings); return packedOutput; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs index 0e57d261dd9..bd41adf5600 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs @@ -176,19 +176,16 @@ internal void Render(RenderGraph graph, ContextContainer frameData, int batchInd var layerBatch = frameData.Get().layerBatches[batchIndex]; DebugHandler debugHandler = GetActiveDebugHandler(cameraData); - var isDebugLightingActive = debugHandler?.IsLightingActive ?? true; + var isLightingActive = debugHandler?.IsLightingActive ?? true; #if UNITY_EDITOR if (cameraData.isSceneViewCamera && UnityEditor.SceneView.currentDrawingSceneView != null) - isDebugLightingActive &= UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; - - if (cameraData.camera.cameraType == CameraType.Preview) - isDebugLightingActive = false; + isLightingActive &= UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; #endif if (!layerBatch.lightStats.useLights || isVolumetric && !layerBatch.lightStats.useVolumetricLights || - !isDebugLightingActive) + !isLightingActive) return; // Render single RTs by for apis that don't support MRTs diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs index 91372f3983c..ccd9def2553 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs @@ -31,7 +31,7 @@ private static void Execute(RasterGraphContext context, PassData passData) RendererLighting.SetLightShaderGlobals(cmd, passData.lightBlendStyles, passData.blendStyleIndices); #if UNITY_EDITOR - if (passData.isLitView) + if (passData.isLightingActive) #endif { if (passData.layerUseLights) @@ -79,7 +79,7 @@ class PassData internal bool activeDebugHandler; #if UNITY_EDITOR - internal bool isLitView; // Required for prefab view and preview camera + internal bool isLightingActive; // Required for prefab view and preview camera #endif } @@ -93,20 +93,13 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex Renderer2DData rendererData = frameData.Get().renderingData; var layerBatch = frameData.Get().layerBatches[batchIndex]; - bool isLitView = true; + DebugHandler debugHandler = GetActiveDebugHandler(cameraData); + var isLightingActive = debugHandler?.IsLightingActive ?? true; #if UNITY_EDITOR // Early out for prefabs if (cameraData.isSceneViewCamera && UnityEditor.SceneView.currentDrawingSceneView != null) - isLitView = UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; - - // Early out for preview camera - if (cameraData.cameraType == CameraType.Preview) - isLitView = false; - - DebugHandler debugHandler = GetActiveDebugHandler(cameraData); - if (debugHandler != null) - isLitView = debugHandler.IsLightingActive; + isLightingActive = UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; #endif // Preset global light textures for first batch @@ -114,14 +107,14 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex { using (var builder = graph.AddRasterRenderPass(k_SetLightBlendTexture, out var passData, m_SetLightBlendTextureProfilingSampler)) { - if (layerBatch.lightStats.useLights && isLitView) + if (layerBatch.lightStats.useLights && isLightingActive) { passData.lightTextures = universal2DResourceData.lightTextures[batchIndex]; for (var i = 0; i < passData.lightTextures.Length; i++) builder.UseTexture(passData.lightTextures[i]); } - SetGlobalLightTextures(graph, builder, frameData, batchIndex, isLitView); + SetGlobalLightTextures(graph, builder, frameData, batchIndex, isLightingActive); builder.AllowGlobalStateModification(true); @@ -143,7 +136,7 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex passData.isSceneLit = rendererData.lightCullResult.IsSceneLit(); passData.layerUseLights = layerBatch.lightStats.useLights; #if UNITY_EDITOR - passData.isLitView = isLitView; + passData.isLightingActive = isLightingActive; #endif var drawSettings = CreateDrawingSettings(k_ShaderTags, renderingData, cameraData, lightData, SortingCriteria.CommonTransparent); @@ -168,7 +161,7 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex builder.UseRendererList(passData.rendererList); } - if (passData.layerUseLights && isLitView) + if (passData.layerUseLights && isLightingActive) { passData.lightTextures = universal2DResourceData.lightTextures[batchIndex]; for (var i = 0; i < passData.lightTextures.Length; i++) @@ -189,7 +182,7 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex // Post set global light textures for next renderer pass var nextBatch = batchIndex + 1; if (nextBatch < universal2DResourceData.lightTextures.Length) - SetGlobalLightTextures(graph, builder, frameData, nextBatch, isLitView); + SetGlobalLightTextures(graph, builder, frameData, nextBatch, isLightingActive); builder.SetRenderFunc(static (PassData data, RasterGraphContext context) => { @@ -198,13 +191,13 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex } } - void SetGlobalLightTextures(RenderGraph graph, IRasterRenderGraphBuilder builder, ContextContainer frameData, int batchIndex, bool isLitView) + void SetGlobalLightTextures(RenderGraph graph, IRasterRenderGraphBuilder builder, ContextContainer frameData, int batchIndex, bool isLightingActive) { Renderer2DData rendererData = frameData.Get().renderingData; var layerBatch = frameData.Get().layerBatches[batchIndex]; var lightTextures = frameData.Get().lightTextures[batchIndex]; - if (isLitView) + if (isLightingActive) { if (layerBatch.lightStats.useLights) { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index 2a2b613a5e1..35d92faf5b9 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -224,6 +224,10 @@ void SetPerCameraShaderVariables(RasterCommandBuffer cmd, UniversalCameraData ca cameraHeight = (float)cameraTargetSizeCopy.y; useRenderPassEnabled = false; + + // Multi-pass needs to set unity_StereoEyeIndex builtin param for skybox-panoramic.shader to work correctly (UUM-120719) + if (!cameraData.xr.singlePassEnabled) + cmd.SetGlobalVector(XRBuiltinShaderConstants.unity_StereoEyeIndex, new Vector4(cameraData.xr.multipassId, 0, 0, 0)); } if (camera.allowDynamicResolution) diff --git a/Packages/com.unity.render-pipelines.universal/Samples~/URPPackageSamples/RendererFeatures/DepthBlit/DepthBlitCopyDepthPass.cs b/Packages/com.unity.render-pipelines.universal/Samples~/URPPackageSamples/RendererFeatures/DepthBlit/DepthBlitCopyDepthPass.cs index 40c98cedd19..ba71f6de3fe 100644 --- a/Packages/com.unity.render-pipelines.universal/Samples~/URPPackageSamples/RendererFeatures/DepthBlit/DepthBlitCopyDepthPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Samples~/URPPackageSamples/RendererFeatures/DepthBlit/DepthBlitCopyDepthPass.cs @@ -88,8 +88,9 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer builder.SetRenderFunc((PassData data, RasterGraphContext context) => { // Enable an MSAA shader keyword based on the source texture MSAA sample count + // when depth must be resolved manually in the copy shader RTHandle sourceTex = data.source; - int cameraSamples = sourceTex.rt.antiAliasing; + int cameraSamples = sourceTex.rt.bindTextureMS ? sourceTex.rt.antiAliasing : 1; context.cmd.SetKeyword(data.keyword_DepthMsaa2, cameraSamples == 2); context.cmd.SetKeyword(data.keyword_DepthMsaa4, cameraSamples == 4); context.cmd.SetKeyword(data.keyword_DepthMsaa8, cameraSamples == 8); diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs index 1cbab74f7de..2bc1f332194 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs @@ -68,6 +68,9 @@ public KeywordType keywordType internal bool IsDynamic => m_KeywordDefinition == KeywordDefinition.DynamicBranch; + // If true, indicates that ShaderGraph may pre-compute permutations containing this keyword + internal bool IsPermutable => !IsDynamic && !IsShaderBuildSettingsCompatible; + [SerializeField] private KeywordDefinition m_KeywordDefinition = KeywordDefinition.ShaderFeature; @@ -104,6 +107,8 @@ public List entries set => m_Entries = value; } + public bool HasNoneEntry => entries.Count > 0 && entries[0].IsNoneKeyword; + [SerializeField] private int m_Value; @@ -116,6 +121,17 @@ public int value [SerializeField] private bool m_IsEditable = true; // this serializes !isBuiltIn + [SerializeField] + private bool m_IsShaderBuildSettingsCompatible = true; + + // Note that if this field is true, we must effectively treat this keyword as a dynamic branch for code gen + // purposes as its definition may be overridden by project settings. + public bool IsShaderBuildSettingsCompatible + { + get => m_IsShaderBuildSettingsCompatible; + set => m_IsShaderBuildSettingsCompatible = value; + } + public bool isBuiltIn { get => !m_IsEditable; @@ -130,6 +146,21 @@ public bool isBuiltIn internal override ConcreteSlotValueType concreteShaderValueType => keywordType.ToConcreteSlotValueType(); + public IEnumerable<(KeywordEntry entry, int value)> GetEntriesExcludingNone() + { + for (int i = HasNoneEntry ? 1 : 0; i < entries.Count; ++i) + yield return (entries[i], i); + } + + // Enumerates the enum's entries in the order one would emit 'if', 'else if', and 'else' branches + public IEnumerable<(KeywordEntry entry, int value)> GetEntriesInBranchOrder() + { + foreach (var entry in GetEntriesExcludingNone()) + yield return entry; + if (HasNoneEntry) + yield return (entries[0], 0); + } + public override string GetOldDefaultReferenceName() { // _ON suffix is required for exposing Boolean type to Material @@ -184,10 +215,16 @@ public string GetKeywordPreviewDeclarationString() case KeywordType.Boolean: return $"#define {referenceName} {(value == 0 ? "false" : " true")}"; case KeywordType.Enum: - string result = $"#define {referenceName}_{entries[value].referenceName} true"; - for (int i = 0; i < entries.Count; ++i) - if (i != value) - result += $"\n#define {referenceName}_{entries[i].referenceName} false"; + string result = entries[value].IsNoneKeyword ? + string.Empty : $"#define {referenceName}_{entries[value].referenceName} true"; + foreach ((KeywordEntry entry, int entryValue) in GetEntriesExcludingNone()) + { + if (entryValue != value) + { + string newline = result.Length == 0 ? string.Empty : "\n"; + result += $"{newline}#define {referenceName}_{entry.referenceName} false"; + } + } return result; default: throw new ArgumentOutOfRangeException(); @@ -196,9 +233,19 @@ public string GetKeywordPreviewDeclarationString() else switch (keywordType) { case KeywordType.Boolean: - return value == 1 ? $"#define {referenceName}" : string.Empty; + return value == 1 ? $"#define {referenceName} true" : $"static const bool {referenceName} = false;"; case KeywordType.Enum: - return $"#define {referenceName}_{entries[value].referenceName}"; + string enumResult = entries[value].IsNoneKeyword ? + string.Empty : $"#define {referenceName}_{entries[value].referenceName} true"; + foreach ((KeywordEntry entry, int entryValue) in GetEntriesExcludingNone()) + { + if (entryValue != value) + { + string newline = enumResult.Length == 0 ? string.Empty : "\n"; + enumResult += $"{newline}static const bool {referenceName}_{entry.referenceName} = false;"; + } + } + return enumResult; default: throw new ArgumentOutOfRangeException(); } @@ -219,16 +266,17 @@ internal override ShaderInput Copy() keywordScope = keywordScope, entries = entries, keywordStages = keywordStages, - overrideReferenceName = overrideReferenceName + overrideReferenceName = overrideReferenceName, + IsShaderBuildSettingsCompatible = IsShaderBuildSettingsCompatible, }; } - public override int latestVersion => 1; + public override int latestVersion => 2; public override void OnAfterDeserialize(string json) { if (sgVersion == 0) { - // we now allow keywords to control whether they are exposed (for Material control) or not. + // Version 1 allows keywords to control whether they are exposed (for Material control) or not. // old exposable keywords set their exposed state to maintain previous behavior // (where bool keywords only showed up in the material when ending in "_ON") if (isExposable) @@ -240,6 +288,14 @@ public override void OnAfterDeserialize(string json) } ChangeVersion(1); } + if (sgVersion < 2) + { + // Version 2 marks the point at which we changed KeywordNode code gen to be compatible with + // Shader Build Settings. Legacy shader graphs should default to incompatible KeywordNode + // code gen. + IsShaderBuildSettingsCompatible = false; + ChangeVersion(2); + } } } } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Implementation/NodeUtils.cs b/Packages/com.unity.shadergraph/Editor/Data/Implementation/NodeUtils.cs index 79dabe57d86..fdc95e42bd5 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Implementation/NodeUtils.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Implementation/NodeUtils.cs @@ -118,7 +118,7 @@ public static void DepthFirstCollectNodesFromNode(ICollection x.Key == keywordNode.keyword).FirstOrDefault(); ids = new int[] { keywordNode.GetSlotIdForPermutation(valueInPermutation) }; diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/KeywordNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/KeywordNode.cs index f3810ccf737..e9da0019805 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/KeywordNode.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/KeywordNode.cs @@ -141,7 +141,8 @@ void UpdatePorts() public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode) { var outputSlot = FindOutputSlot(OutputSlotId); - if (keyword.keywordDefinition == KeywordDefinition.DynamicBranch) + if (keyword.keywordDefinition == KeywordDefinition.DynamicBranch + || keyword.IsShaderBuildSettingsCompatible) { switch (keyword.keywordType) { @@ -152,16 +153,23 @@ public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMo break; case KeywordType.Enum: sb.AppendLine(string.Format($"{outputSlot.concreteValueType.ToShaderString()} {GetVariableNameForSlot(OutputSlotId)};")); - for(int i = 0; i < keyword.entries.Count; ++i) + int i = 0; + foreach ((KeywordEntry entry, int entryValue) in keyword.GetEntriesInBranchOrder()) { - var keywordEntry = keyword.entries[i]; - string keywordName = $"{keyword.referenceName}_{keywordEntry.referenceName}"; - var value = GetSlotValue(keywordEntry.id, generationMode); - sb.AppendLine(string.Format($"{(i != 0 ? "else" : "")} if({keywordName}) {GetVariableNameForSlot(OutputSlotId)} = {value};")); + string keywordName = $"{keyword.referenceName}_{entry.referenceName}"; + var value = GetSlotValue(entry.id, generationMode); + string assignment = $"{GetVariableNameForSlot(OutputSlotId)} = {value};"; + if (i == 0) + sb.AppendLine($"if ({keywordName}) {assignment}"); + else if (i == keyword.entries.Count - 1) + sb.AppendLine($"else {assignment}"); + else + sb.AppendLine($"else if ({keywordName}) {assignment}"); + ++i; } break; } - } + } else switch (keyword.keywordType) { case KeywordType.Boolean: @@ -181,12 +189,13 @@ public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMo case KeywordType.Enum: { // Iterate all entries in the keyword - for (int i = 0; i < keyword.entries.Count; i++) + int i = 0; + foreach ((KeywordEntry entry, int entryValue) in keyword.GetEntriesInBranchOrder()) { // Insert conditional if (i == 0) { - sb.AppendLine($"#if defined({keyword.referenceName}_{keyword.entries[i].referenceName})"); + sb.AppendLine($"#if defined({keyword.referenceName}_{entry.referenceName})"); } else if (i == keyword.entries.Count - 1) { @@ -194,12 +203,14 @@ public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMo } else { - sb.AppendLine($"#elif defined({keyword.referenceName}_{keyword.entries[i].referenceName})"); + sb.AppendLine($"#elif defined({keyword.referenceName}_{entry.referenceName})"); } // Append per-slot code - var value = GetSlotValue(GetSlotIdForPermutation(new KeyValuePair(keyword, i)), generationMode); + var value = GetSlotValue(GetSlotIdForPermutation(new KeyValuePair(keyword, entryValue)), generationMode); sb.AppendLine(string.Format($"{outputSlot.concreteValueType.ToShaderString()} {GetVariableNameForSlot(OutputSlotId)} = {value};")); + + ++i; } // End condition diff --git a/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordCollector.cs b/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordCollector.cs index 6f4dcbb8a5e..7e0cd195ba9 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordCollector.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordCollector.cs @@ -25,7 +25,7 @@ public void AddShaderKeyword(ShaderKeyword chunk) keywords.Add(chunk); - if (!chunk.IsDynamic) + if (chunk.IsPermutable) permutableKeywords.Add(chunk); } @@ -67,21 +67,29 @@ public void CalculateKeywordPermutations() for (int i = 0; i < permutableKeywords.Count; i++) { - currentPermutation.Add(new KeyValuePair(permutableKeywords[i], 0)); + var firstEntryValue = GetEntryValues(permutableKeywords[i]).First(); + currentPermutation.Add(new KeyValuePair(permutableKeywords[i], firstEntryValue)); } // Recursively permute keywords PermuteKeywords(permutableKeywords, currentPermutation, 0); } + IEnumerable GetEntryValues(ShaderKeyword keyword) + { + if (keyword.keywordType == KeywordType.Enum) + return keyword.GetEntriesInBranchOrder().Select(x => x.value); + else + return new int[] { 0, 1 }; + } + void PermuteKeywords(List keywords, List> currentPermutation, int currentIndex) { if (currentIndex == keywords.Count) return; // Iterate each possible keyword at the current index - int entryCount = keywords[currentIndex].keywordType == KeywordType.Enum ? keywords[currentIndex].entries.Count : 2; - for (int i = 0; i < entryCount; i++) + foreach (int i in GetEntryValues(keywords[currentIndex])) { // Set the index in the current permutation to the correct value currentPermutation[currentIndex] = new KeyValuePair(keywords[currentIndex], i); diff --git a/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordUtil.cs b/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordUtil.cs index cf65282f808..bcf7aa5c881 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordUtil.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Util/KeywordUtil.cs @@ -233,15 +233,20 @@ public static void GetKeywordPermutationDeclarations(ShaderStringBuilder sb, Lis // Iterate all keywords that are part of the permutation for (int i = 0; i < permutations[p].Count; i++) { + (ShaderKeyword keyword, int entryValue) = permutations[p][i]; + // When previous keyword was inserted subsequent requires && string and = appendAnd ? " && " : string.Empty; - switch (permutations[p][i].Key.keywordType) + switch (keyword.keywordType) { case KeywordType.Enum: { - sb.Append($"{and}defined({permutations[p][i].Key.referenceName}_{permutations[p][i].Key.entries[permutations[p][i].Value].referenceName})"); - appendAnd = true; + if (!keyword.entries[entryValue].IsNoneKeyword) + { + sb.Append($"{and}defined({keyword.referenceName}_{keyword.entries[entryValue].referenceName})"); + appendAnd = true; + } break; } case KeywordType.Boolean: diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs index 3cadc61dd26..75ea597b01c 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs @@ -1690,6 +1690,19 @@ void BuildKeywordFields(PropertySheet propertySheet, ShaderInput shaderInput) propertySheet.Add(help); } + var isShaderBuildSettingsCompatibleDrawer = new ToggleDataPropertyDrawer(); + propertySheet.Add(isShaderBuildSettingsCompatibleDrawer.CreateGUI( + newValue => + { + this._preChangeValueCallback("Change Keyword Allow Definition Override"); + keyword.IsShaderBuildSettingsCompatible = newValue.isOn; + this._postChangeValueCallback(modificationScope: ModificationScope.Graph); + }, + new ToggleData(keyword.IsShaderBuildSettingsCompatible), + "Allow Definition Override", + out VisualElement isShaderBuildSettingsCompatibleToggle, + tooltip: "Indicates whether this keyword's definition can be overridden by the project's shader build settings.")); + typeField.SetEnabled(!keyword.isBuiltIn); { var isOverridablePropertyDrawer = new ToggleDataPropertyDrawer(); @@ -1698,15 +1711,15 @@ void BuildKeywordFields(PropertySheet propertySheet, ShaderInput shaderInput) propertySheet.Add(isOverridablePropertyDrawer.CreateGUI( newValue => { - this._preChangeValueCallback("Change Keyword Is Overridable"); + this._preChangeValueCallback("Change Keyword Allow State Override"); keyword.keywordScope = newValue.isOn ? KeywordScope.Global : KeywordScope.Local; }, new ToggleData(toggleState), - "Is Overridable", + "Allow State Override", out keywordScopeField, - tooltip: "Indicate whether this keyword's state can be overridden through the Shader.SetKeyword scripting interface.")); + tooltip: "Indicates whether this keyword's state can be overridden through the Shader.SetKeyword scripting interface.")); keywordScopeField.SetEnabled(enabledState); } BuildExposedField(propertySheet); @@ -1762,6 +1775,24 @@ void BuildEnumKeywordField(PropertySheet propertySheet, ShaderKeyword keyword) // Clamp value between entry list int value = Mathf.Clamp(keyword.value, 0, keyword.entries.Count - 1); + // Include "none" entry + var includeNoneDrawer = new ToggleDataPropertyDrawer(); + propertySheet.Add(includeNoneDrawer.CreateGUI( + (newValue) => + { + this._preChangeValueCallback("Change Include None Value"); + if (newValue.isOn) + keyword.entries.Insert(0, new KeywordEntry(GetFirstUnusedKeywordID(), "None", string.Empty)); + else + keyword.entries.RemoveAll(entry => entry.IsNoneKeyword); + this._postChangeValueCallback(); + this._keywordChangedCallback(); + }, + new ToggleData(keyword.HasNoneEntry), + "Include \"none\" entry", + out VisualElement includeNoneToggle, + tooltip: "Indicates whether the enum can assume a \"none\" value as indicated by the \"_\" keyword.")); + // Default field var field = new PopupField(keyword.entries.Select(x => x.displayName).ToList(), value); field.RegisterValueChangedCallback(evt => @@ -2008,6 +2039,7 @@ void KeywordAddCallbacks() { KeywordEntry entry = ((KeywordEntry)m_KeywordReorderableList.list[index]); EditorGUI.BeginChangeCheck(); + EditorGUI.BeginDisabled(entry.IsNoneKeyword); Rect displayRect = new Rect(rect.x, rect.y, rect.width / 2, EditorGUIUtility.singleLineHeight); var displayName = EditorGUI.DelayedTextField(displayRect, entry.displayName, EditorStyles.label); @@ -2016,6 +2048,7 @@ void KeywordAddCallbacks() var referenceName = EditorGUI.TextField(new Rect(rect.x + rect.width / 2, rect.y, rect.width / 2, EditorGUIUtility.singleLineHeight), entry.referenceName, keyword.isBuiltIn ? EditorStyles.label : greyLabel); + EditorGUI.EndDisabled(); if (EditorGUI.EndChangeCheck()) { this._preChangeValueCallback("Edit Enum Keyword Entry"); @@ -2141,6 +2174,24 @@ void KeywordRemoveEntry(ReorderableList list) void KeywordReorderEntries(ReorderableList list) { + if (shaderInput is not ShaderKeyword keyword) + return; + + // Ensure that the "none" entry is always at position 0 + int noneEntryIndex = 0; + for (; noneEntryIndex < list.list.Count; ++noneEntryIndex) + { + KeywordEntry entry = (KeywordEntry)list.list[noneEntryIndex]; + if (entry.IsNoneKeyword) + break; + } + if (0 < noneEntryIndex && noneEntryIndex < list.list.Count) + { + object noneEntry = list.list[noneEntryIndex]; + list.list.RemoveAt(noneEntryIndex); + list.list.Insert(0, noneEntry); + } + this._preChangeValueCallback("Reorder Keyword Entry"); this._postChangeValueCallback(true); this._keywordChangedCallback(); diff --git a/Packages/com.unity.shadergraph/Editor/Generation/Data/KeywordEntry.cs b/Packages/com.unity.shadergraph/Editor/Generation/Data/KeywordEntry.cs index 41bc0e3787e..e21b1cb234f 100644 --- a/Packages/com.unity.shadergraph/Editor/Generation/Data/KeywordEntry.cs +++ b/Packages/com.unity.shadergraph/Editor/Generation/Data/KeywordEntry.cs @@ -10,6 +10,9 @@ internal struct KeywordEntry public string displayName; public string referenceName; + // Is this entry the "none" keyword (i.e. "_") + public bool IsNoneKeyword => string.IsNullOrEmpty(referenceName); + // In this case, we will handle the actual IDs later public KeywordEntry(string displayName, string referenceName) { diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Editor/KeywordTests.cs b/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Editor/KeywordTests.cs index d20d11b0ce5..5621937bcf7 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Editor/KeywordTests.cs +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Editor/KeywordTests.cs @@ -12,21 +12,33 @@ namespace UnityEditor.ShaderGraph.UnitTests [TestFixture] internal class KeywordTests { - const string kExpectedPreviewDeclaration = @"#define BOOLEAN_E0DB5C9A_ON -#define ENUM_F6B920FA_A -#define ENUM_7ECD6A43_D + const string kExpectedPreviewDeclaration = @"#define BOOLEAN_E0DB5C9A_ON true +static const bool BOOLEAN_12C0E932_ON = false; +static const bool ENUM_F6B920FA_A = false; +static const bool ENUM_F6B920FA_B = false; +static const bool ENUM_F6B920FA_C = false; +#define ENUM_7ECD6A43_D true +static const bool ENUM_7ECD6A43_A = false; +static const bool ENUM_7ECD6A43_B = false; +static const bool ENUM_7ECD6A43_C = false; #define _DYNAMIC_BOOLEAN false #define _DYNAMIC_ENUM_A true #define _DYNAMIC_ENUM_B false #define _DYNAMIC_ENUM_C false +#define _COMPATIBLE_BOOLEAN true +#define _COMPATIBLE_ENUM_A true +static const bool _COMPATIBLE_ENUM_B = false; +static const bool _COMPATIBLE_ENUM_C = false; "; const string kExpectedForRealsDeclaration = @"#pragma shader_feature_local _ BOOLEAN_E0DB5C9A_ON #pragma multi_compile _ BOOLEAN_12C0E932_ON -#pragma shader_feature_local ENUM_F6B920FA_A ENUM_F6B920FA_B ENUM_F6B920FA_C +#pragma shader_feature_local _ ENUM_F6B920FA_A ENUM_F6B920FA_B ENUM_F6B920FA_C #pragma multi_compile ENUM_7ECD6A43_A ENUM_7ECD6A43_B ENUM_7ECD6A43_C ENUM_7ECD6A43_D #pragma dynamic_branch_local _ _DYNAMIC_BOOLEAN #pragma dynamic_branch_local _DYNAMIC_ENUM_A _DYNAMIC_ENUM_B _DYNAMIC_ENUM_C +#pragma shader_feature_local _ _COMPATIBLE_BOOLEAN +#pragma shader_feature_local _COMPATIBLE_ENUM_A _COMPATIBLE_ENUM_B _COMPATIBLE_ENUM_C "; static string kExpectedPermutationDeclaration = @"#if defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) @@ -53,78 +65,110 @@ internal class KeywordTests #define KEYWORD_PERMUTATION_10 #elif defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_11 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_12 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_13 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_14 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_15 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_16 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_17 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_18 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_19 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_20 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_21 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_22 -#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_23 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_24 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_25 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_26 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_27 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_28 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_29 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_30 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_E0DB5C9A_ON) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_31 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_32 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_33 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_34 -#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_35 -#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_36 -#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_37 -#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_38 -#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_39 -#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_40 -#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_41 -#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_42 -#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_43 -#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_A) #define KEYWORD_PERMUTATION_44 -#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_B) #define KEYWORD_PERMUTATION_45 -#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_C) #define KEYWORD_PERMUTATION_46 -#else +#elif defined(BOOLEAN_12C0E932_ON) && defined(ENUM_7ECD6A43_D) #define KEYWORD_PERMUTATION_47 +#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_A) + #define KEYWORD_PERMUTATION_48 +#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_B) + #define KEYWORD_PERMUTATION_49 +#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_C) + #define KEYWORD_PERMUTATION_50 +#elif defined(ENUM_F6B920FA_A) && defined(ENUM_7ECD6A43_D) + #define KEYWORD_PERMUTATION_51 +#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_A) + #define KEYWORD_PERMUTATION_52 +#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_B) + #define KEYWORD_PERMUTATION_53 +#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_C) + #define KEYWORD_PERMUTATION_54 +#elif defined(ENUM_F6B920FA_B) && defined(ENUM_7ECD6A43_D) + #define KEYWORD_PERMUTATION_55 +#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_A) + #define KEYWORD_PERMUTATION_56 +#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_B) + #define KEYWORD_PERMUTATION_57 +#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_C) + #define KEYWORD_PERMUTATION_58 +#elif defined(ENUM_F6B920FA_C) && defined(ENUM_7ECD6A43_D) + #define KEYWORD_PERMUTATION_59 +#elif defined(ENUM_7ECD6A43_A) + #define KEYWORD_PERMUTATION_60 +#elif defined(ENUM_7ECD6A43_B) + #define KEYWORD_PERMUTATION_61 +#elif defined(ENUM_7ECD6A43_C) + #define KEYWORD_PERMUTATION_62 +#else + #define KEYWORD_PERMUTATION_63 #endif "; @@ -306,19 +350,19 @@ public void CanGetPermutationMapPerNode() int booleanAIndex = descendentNodes.IndexOf(booleanANode); List booleanAPermutations = keywordPermutationsPerNode[booleanAIndex]; - Assert.AreEqual(24, booleanAPermutations.Count, "Boolean A had incorrect permutations."); + Assert.AreEqual(32, booleanAPermutations.Count, "Boolean A had incorrect permutations."); int booleanBIndex = descendentNodes.IndexOf(booleanBNode); List booleanBPermutations = keywordPermutationsPerNode[booleanBIndex]; - Assert.AreEqual(48, booleanBPermutations.Count, "Boolean B had incorrect permutations."); + Assert.AreEqual(64, booleanBPermutations.Count, "Boolean B had incorrect permutations."); int enumAIndex = descendentNodes.IndexOf(enumANode); List enumAPermutations = keywordPermutationsPerNode[enumAIndex]; - Assert.AreEqual(12, enumAPermutations.Count, "Enum A had incorrect permutations."); + Assert.AreEqual(16, enumAPermutations.Count, "Enum A had incorrect permutations."); int enumBIndex = descendentNodes.IndexOf(enumBNode); List enumBPermutations = keywordPermutationsPerNode[enumBIndex]; - Assert.AreEqual(24, enumBPermutations.Count, "Enum B had incorrect permutations."); + Assert.AreEqual(32, enumBPermutations.Count, "Enum B had incorrect permutations."); } [Test] @@ -339,10 +383,10 @@ public void KeywordEnumCanAddAndRemovePort() Assert.Fail("One or more Keywords Nodes not in graph."); } - KeywordEntry newEntry1 = new KeywordEntry(4, "D", "D"); - KeywordEntry newEntry2 = new KeywordEntry(5, "E", "E"); - KeywordEntry newEntry3 = new KeywordEntry(6, "F", "F"); - KeywordEntry newEntry4 = new KeywordEntry(5, "E", "E"); + KeywordEntry newEntry1 = new KeywordEntry(14, "D", "D"); + KeywordEntry newEntry2 = new KeywordEntry(15, "E", "E"); + KeywordEntry newEntry3 = new KeywordEntry(16, "F", "F"); + KeywordEntry newEntry4 = new KeywordEntry(15, "E", "E"); enumAKeyword.entries.Add(newEntry1); @@ -350,13 +394,13 @@ public void KeywordEnumCanAddAndRemovePort() enumAKeyword.entries.Add(newEntry3); enumBKeyword.entries.Add(newEntry4); - Assert.AreEqual(6, enumAKeyword.entries.Count, "Enum A Keyword has incorrect # of entries after adding"); + Assert.AreEqual(7, enumAKeyword.entries.Count, "Enum A Keyword has incorrect # of entries after adding"); Assert.AreEqual(5, enumBKeyword.entries.Count, "Enum B Keyword has incorrect # of entries after adding"); enumANode.UpdateNode(); enumBNode.UpdateNode(); - Assert.AreEqual(7, enumANode.GetSlots().Count(), "Enum A Node has incorrect # of entries after adding"); + Assert.AreEqual(8, enumANode.GetSlots().Count(), "Enum A Node has incorrect # of entries after adding"); Assert.AreEqual(6, enumBNode.GetSlots().Count(), "Enum B Node has incorrect # of entries after adding"); enumAKeyword.entries.Remove(newEntry1); @@ -364,13 +408,13 @@ public void KeywordEnumCanAddAndRemovePort() enumAKeyword.entries.Remove(newEntry3); enumBKeyword.entries.Remove(newEntry4); - Assert.AreEqual(3, enumAKeyword.entries.Count, "Enum A Keyword has incorrect # of entries after removing"); + Assert.AreEqual(4, enumAKeyword.entries.Count, "Enum A Keyword has incorrect # of entries after removing"); Assert.AreEqual(4, enumBKeyword.entries.Count, "Enum B Keyword has incorrect # of entries after removing"); enumANode.UpdateNode(); enumBNode.UpdateNode(); - Assert.AreEqual(4, enumANode.GetSlots().Count(), "Enum A Node has incorrect # of entries after removing"); + Assert.AreEqual(5, enumANode.GetSlots().Count(), "Enum A Node has incorrect # of entries after removing"); Assert.AreEqual(5, enumBNode.GetSlots().Count(), "Enum B Node has incorrect # of entries after removing"); } } diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Graphs/Keywords.shadergraph b/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Graphs/Keywords.shadergraph index 469a9c305ed..2ed4c7b10dd 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Graphs/Keywords.shadergraph +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/CommonAssets/Graphs/Keywords.shadergraph @@ -21,6 +21,12 @@ }, { "m_Id": "bfafbf3bdc9d44839c4db829f1da01c8" + }, + { + "m_Id": "54a86e9f1df84c85bee455c7dce69614" + }, + { + "m_Id": "9108a9df9105480ab9ed13759085fa00" } ], "m_Dropdowns": [], @@ -71,6 +77,12 @@ }, { "m_Id": "67937a9e85444dd4bea5c776d2488aa6" + }, + { + "m_Id": "cfc594ef53bf42d988efa55f8f7f8522" + }, + { + "m_Id": "0c0a54c21d2f49eaaa761bca8606c96b" } ], "m_GroupDatas": [ @@ -80,6 +92,20 @@ ], "m_StickyNoteDatas": [], "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "0c0a54c21d2f49eaaa761bca8606c96b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aeacb51020546084a0afbf1f65764148" + }, + "m_SlotId": 2 + } + }, { "m_OutputSlot": { "m_Node": { @@ -178,6 +204,20 @@ "m_SlotId": 1 } }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cfc594ef53bf42d988efa55f8f7f8522" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aeacb51020546084a0afbf1f65764148" + }, + "m_SlotId": 1 + } + }, { "m_OutputSlot": { "m_Node": { @@ -249,12 +289,15 @@ } { - "m_SGVersion": 1, + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "04da55743a5842cea5ae00c183a1f026", "m_Guid": { "m_GuidSerialized": "c82c78b7-b675-49dd-a3a5-61567e0c04a5" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Boolean B", "m_DefaultRefNameVersion": 0, "m_RefNameGeneratedByDisplayName": "", @@ -270,7 +313,8 @@ "m_KeywordStages": 63, "m_Entries": [], "m_Value": 0, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false } { @@ -281,6 +325,7 @@ "m_DisplayName": "On", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "On", "m_StageCapability": 3, "m_Value": { @@ -294,9 +339,81 @@ "y": 0.0, "z": 0.0, "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.KeywordNode", + "m_ObjectId": "0c0a54c21d2f49eaaa761bca8606c96b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Compatible Enum", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -795.2001342773438, + "y": 768.800048828125, + "width": 208.800048828125, + "height": 327.2000732421875 + } + }, + "m_Slots": [ + { + "m_Id": "1883420c868041cbbad76dcdde74a236" + }, + { + "m_Id": "b295e0ff33224a3ab944b735527efa7b" + }, + { + "m_Id": "a965b19c90ff431cbb1748effd30907c" + }, + { + "m_Id": "440f6d2914954974943ddcecabefa121" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Keyword": { + "m_Id": "9108a9df9105480ab9ed13759085fa00" } } +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0c6710f61cad4258a92864b54d27be56", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": true +} + { "m_SGVersion": 0, "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", @@ -305,6 +422,7 @@ "m_DisplayName": "B", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "B", "m_StageCapability": 3, "m_Value": { @@ -318,7 +436,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -329,6 +448,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -342,7 +462,34 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "1883420c868041cbbad76dcdde74a236", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": true } { @@ -353,6 +500,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -366,7 +514,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true } { @@ -408,12 +557,15 @@ } { - "m_SGVersion": 1, + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "26de5479e9304f4d8026c0c2330bbcd3", "m_Guid": { "m_GuidSerialized": "52bfe1ca-6742-434b-a73c-16b394288658" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Enum A", "m_DefaultRefNameVersion": 0, "m_RefNameGeneratedByDisplayName": "", @@ -428,6 +580,11 @@ "m_KeywordScope": 0, "m_KeywordStages": 63, "m_Entries": [ + { + "id": 4, + "displayName": "None", + "referenceName": "" + }, { "id": 1, "displayName": "A", @@ -445,7 +602,8 @@ } ], "m_Value": 0, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false } { @@ -490,6 +648,7 @@ "m_DisplayName": "Normal", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Normal", "m_StageCapability": 1, "m_Value": { @@ -514,22 +673,53 @@ "m_DisplayName": "X", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "X", "m_StageCapability": 3, "m_Value": 0.0, "m_DefaultValue": 0.0, "m_Labels": [ "X" - ] + ], + "m_LiteralMode": false } { - "m_SGVersion": 1, + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "3872e8839b9148d19a34363b18cfdfd4", + "m_Id": 4, + "m_DisplayName": "None", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "3a09ef30d1b248a08a135b23c82fec7d", "m_Guid": { "m_GuidSerialized": "9c5a0e14-b5da-46fe-906a-75d8683bac21" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Boolean A", "m_DefaultRefNameVersion": 0, "m_RefNameGeneratedByDisplayName": "", @@ -545,7 +735,8 @@ "m_KeywordStages": 63, "m_Entries": [], "m_Value": 1, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false } { @@ -556,6 +747,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -569,7 +761,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true } { @@ -580,6 +773,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -593,7 +787,34 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "440f6d2914954974943ddcecabefa121", + "m_Id": 3, + "m_DisplayName": "C", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "C", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false } { @@ -604,6 +825,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -617,7 +839,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true } { @@ -662,6 +885,35 @@ } } +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", + "m_ObjectId": "54a86e9f1df84c85bee455c7dce69614", + "m_Guid": { + "m_GuidSerialized": "f5622c07-b8ff-46ed-8b72-743410cd58b2" + }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, + "m_Name": "Compatible Boolean", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Compatible Boolean", + "m_DefaultReferenceName": "_COMPATIBLE_BOOLEAN", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_KeywordType": 0, + "m_KeywordDefinition": 0, + "m_KeywordScope": 0, + "m_KeywordStages": 63, + "m_Entries": [], + "m_Value": 1, + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": true +} + { "m_SGVersion": 0, "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", @@ -670,6 +922,7 @@ "m_DisplayName": "C", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "C", "m_StageCapability": 3, "m_Value": { @@ -683,7 +936,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -728,6 +982,7 @@ "m_DisplayName": "B", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "B", "m_StageCapability": 3, "m_Value": { @@ -741,7 +996,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -767,6 +1023,12 @@ }, { "m_Id": "bfafbf3bdc9d44839c4db829f1da01c8" + }, + { + "m_Id": "54a86e9f1df84c85bee455c7dce69614" + }, + { + "m_Id": "9108a9df9105480ab9ed13759085fa00" } ] } @@ -784,7 +1046,7 @@ "m_Position": { "serializedVersion": "2", "x": -795.0687255859375, - "y": 406.19525146484377, + "y": 406.19525146484375, "width": 0.0, "height": 0.0 } @@ -826,7 +1088,7 @@ "m_Position": { "serializedVersion": "2", "x": -795.0, - "y": 188.00001525878907, + "y": 188.00001525878906, "width": 130.5, "height": 141.9999542236328 } @@ -858,6 +1120,32 @@ } } +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "758c3ed6949d45718d91b91e7f6128ed", + "m_Id": 2, + "m_DisplayName": "Off", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Off", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + { "m_SGVersion": 0, "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", @@ -866,6 +1154,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -879,7 +1168,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true } { @@ -890,13 +1180,15 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": 0.0, "m_DefaultValue": 0.0, "m_Labels": [ "X" - ] + ], + "m_LiteralMode": true } { @@ -975,6 +1267,7 @@ "m_DisplayName": "Off", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Off", "m_StageCapability": 3, "m_Value": { @@ -988,7 +1281,53 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", + "m_ObjectId": "9108a9df9105480ab9ed13759085fa00", + "m_Guid": { + "m_GuidSerialized": "2060f05d-15fb-44ed-b844-5fbdcdd1781a" + }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, + "m_Name": "Compatible Enum", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Compatible Enum", + "m_DefaultReferenceName": "_COMPATIBLE_ENUM", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_KeywordType": 1, + "m_KeywordDefinition": 0, + "m_KeywordScope": 0, + "m_KeywordStages": 63, + "m_Entries": [ + { + "id": 1, + "displayName": "A", + "referenceName": "A" + }, + { + "id": 2, + "displayName": "B", + "referenceName": "B" + }, + { + "id": 3, + "displayName": "C", + "referenceName": "C" + } + ], + "m_Value": 0, + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": true } { @@ -999,6 +1338,7 @@ "m_DisplayName": "B", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "B", "m_StageCapability": 3, "m_Value": { @@ -1012,7 +1352,34 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9cea1c71774e4053b1c4051e6220d9f5", + "m_Id": 1, + "m_DisplayName": "On", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "On", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false } { @@ -1023,6 +1390,7 @@ "m_DisplayName": "A", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "A", "m_StageCapability": 3, "m_Value": { @@ -1036,7 +1404,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1047,11 +1416,13 @@ "m_DisplayName": "Alpha Clip Threshold", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "AlphaClipThreshold", "m_StageCapability": 2, "m_Value": 0.5, "m_DefaultValue": 0.5, - "m_Labels": [] + "m_Labels": [], + "m_LiteralMode": false } { @@ -1096,6 +1467,7 @@ "m_DisplayName": "A", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "A", "m_StageCapability": 3, "m_Value": { @@ -1109,7 +1481,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1152,16 +1525,20 @@ "m_CustomColors": { "m_SerializableColors": [] }, - "m_Value": 0.0 + "m_Value": 0.0, + "m_ConstIntMode": false } { - "m_SGVersion": 1, + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "a92b31bb852e42668b89643108e34f6e", "m_Guid": { "m_GuidSerialized": "8595fd77-227a-4d36-a528-b158bc480344" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Dynamic Boolean", "m_DefaultRefNameVersion": 1, "m_RefNameGeneratedByDisplayName": "Dynamic Boolean", @@ -1177,7 +1554,34 @@ "m_KeywordStages": 63, "m_Entries": [], "m_Value": 0, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "a965b19c90ff431cbb1748effd30907c", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false } { @@ -1188,6 +1592,7 @@ "m_DisplayName": "D", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "D", "m_StageCapability": 3, "m_Value": { @@ -1201,7 +1606,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1252,6 +1658,32 @@ } } +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "b295e0ff33224a3ab944b735527efa7b", + "m_Id": 1, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + { "m_SGVersion": 0, "m_Type": "UnityEditor.ShaderGraph.BlockNode", @@ -1292,8 +1724,8 @@ "m_ObjectId": "b6bd1e3b1cb3493ebad17e816a3e2022", "m_Title": "All Tests", "m_Position": { - "x": -398.0, - "y": 242.5 + "x": -398.39996337890625, + "y": 241.99990844726563 } } @@ -1305,6 +1737,7 @@ "m_DisplayName": "C", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "C", "m_StageCapability": 3, "m_Value": { @@ -1318,7 +1751,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1343,6 +1777,9 @@ { "m_Id": "1766295331fb0e86ace971e2d2f5242e" }, + { + "m_Id": "3872e8839b9148d19a34363b18cfdfd4" + }, { "m_Id": "f19db572ea8de685a03f12300ffa0928" }, @@ -1369,7 +1806,10 @@ { "m_SGVersion": 2, "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", - "m_ObjectId": "b9fd58f3de83458e9280c94b83a79d9a" + "m_ObjectId": "b9fd58f3de83458e9280c94b83a79d9a", + "m_KeepLightingVariants": false, + "m_DefaultDecalBlending": true, + "m_DefaultSSAO": true } { @@ -1380,6 +1820,7 @@ "m_DisplayName": "On", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "On", "m_StageCapability": 3, "m_Value": { @@ -1393,16 +1834,20 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { - "m_SGVersion": 1, + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "bfafbf3bdc9d44839c4db829f1da01c8", "m_Guid": { "m_GuidSerialized": "44503cc9-e8b1-48a5-9007-e563efb551c2" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Dynamic Enum", "m_DefaultRefNameVersion": 1, "m_RefNameGeneratedByDisplayName": "Dynamic Enum", @@ -1434,7 +1879,8 @@ } ], "m_Value": 0, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false } { @@ -1445,11 +1891,13 @@ "m_DisplayName": "Alpha", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Alpha", "m_StageCapability": 2, "m_Value": 1.0, "m_DefaultValue": 1.0, - "m_Labels": [] + "m_Labels": [], + "m_LiteralMode": false } { @@ -1460,6 +1908,7 @@ "m_DisplayName": "Position", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Position", "m_StageCapability": 1, "m_Value": { @@ -1484,6 +1933,7 @@ "m_DisplayName": "Off", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Off", "m_StageCapability": 3, "m_Value": { @@ -1497,6 +1947,49 @@ "y": 0.0, "z": 0.0, "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.KeywordNode", + "m_ObjectId": "cfc594ef53bf42d988efa55f8f7f8522", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Compatible Boolean", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -795.2001342773438, + "y": 599.2000732421875, + "width": 160.79998779296875, + "height": 119.199951171875 + } + }, + "m_Slots": [ + { + "m_Id": "0c6710f61cad4258a92864b54d27be56" + }, + { + "m_Id": "9cea1c71774e4053b1c4051e6220d9f5" + }, + { + "m_Id": "758c3ed6949d45718d91b91e7f6128ed" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Keyword": { + "m_Id": "54a86e9f1df84c85bee455c7dce69614" } } @@ -1550,6 +2043,7 @@ "m_DisplayName": "Tangent", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Tangent", "m_StageCapability": 1, "m_Value": { @@ -1574,6 +2068,7 @@ "m_DisplayName": "Base Color", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "BaseColor", "m_StageCapability": 2, "m_Value": { @@ -1604,6 +2099,7 @@ "m_DisplayName": "C", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "C", "m_StageCapability": 3, "m_Value": { @@ -1617,7 +2113,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1638,6 +2135,7 @@ "m_CastShadows": true, "m_ReceiveShadows": true, "m_DisableTint": false, + "m_Sort3DAs2DCompatible": false, "m_AdditionalMotionVectorMode": 0, "m_AlembicMotionVectors": false, "m_SupportsLODCrossFade": false, @@ -1653,6 +2151,7 @@ "m_DisplayName": "On", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "On", "m_StageCapability": 3, "m_Value": { @@ -1666,16 +2165,20 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { - "m_SGVersion": 1, + "m_SGVersion": 2, "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", "m_ObjectId": "edd4a1d26af44be49401145ff7d846ff", "m_Guid": { "m_GuidSerialized": "91abb4d7-036e-4dac-88f8-9a14f26d6099" }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, "m_Name": "Enum B", "m_DefaultRefNameVersion": 0, "m_RefNameGeneratedByDisplayName": "", @@ -1712,7 +2215,8 @@ } ], "m_Value": 3, - "m_IsEditable": true + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false } { @@ -1723,6 +2227,7 @@ "m_DisplayName": "A", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "A", "m_StageCapability": 3, "m_Value": { @@ -1736,7 +2241,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1747,6 +2253,7 @@ "m_DisplayName": "Out", "m_SlotType": 1, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Out", "m_StageCapability": 3, "m_Value": { @@ -1760,7 +2267,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": true } { @@ -1771,6 +2279,7 @@ "m_DisplayName": "In", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "In", "m_StageCapability": 3, "m_Value": { @@ -1784,7 +2293,8 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } { @@ -1795,6 +2305,7 @@ "m_DisplayName": "Off", "m_SlotType": 0, "m_Hidden": false, + "m_HideConnector": false, "m_ShaderOutputName": "Off", "m_StageCapability": 3, "m_Value": { @@ -1808,6 +2319,6 @@ "y": 0.0, "z": 0.0, "w": 0.0 - } + }, + "m_LiteralMode": false } - diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/InputNodes.unity b/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/InputNodes.unity index b3a8e6af441..dc6c8821b82 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/InputNodes.unity +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/InputNodes.unity @@ -2589,6 +2589,8 @@ Transform: - {fileID: 2064675061} - {fileID: 1475762081} - {fileID: 1824269727} + - {fileID: 680989477} + - {fileID: 528895095} m_Father: {fileID: 134715868} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &315644273 @@ -2821,7 +2823,6 @@ MonoBehaviour: IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: 7 WaitFrames: 2 @@ -4305,6 +4306,118 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 524449747} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &528895094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 528895095} + - component: {fileID: 528895098} + - component: {fileID: 528895097} + - component: {fileID: 528895096} + m_Layer: 0 + m_Name: BuildSettingCompatibleEnumKeyword + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &528895095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528895094} + serializedVersion: 2 + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -2, y: 0, z: 3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303484558} + m_LocalEulerAnglesHint: {x: -90, y: 180, z: -90} +--- !u!135 &528895096 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528895094} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &528895097 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528895094} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c711b1f2a36ce8447ae0683ca4ed0fbf, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &528895098 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528895094} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &529652655 GameObject: m_ObjectHideFlags: 0 @@ -5471,6 +5584,118 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 661742757} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &680989476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 680989477} + - component: {fileID: 680989480} + - component: {fileID: 680989479} + - component: {fileID: 680989478} + m_Layer: 0 + m_Name: EnumKeyword + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &680989477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680989476} + serializedVersion: 2 + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -2, y: 0, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303484558} + m_LocalEulerAnglesHint: {x: -90, y: 180, z: -90} +--- !u!135 &680989478 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680989476} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &680989479 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680989476} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c711b1f2a36ce8447ae0683ca4ed0fbf, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &680989480 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680989476} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &697337477 GameObject: m_ObjectHideFlags: 0 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatiableEnumKeyword.shadergraph b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatiableEnumKeyword.shadergraph new file mode 100644 index 00000000000..f9ddef23ead --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatiableEnumKeyword.shadergraph @@ -0,0 +1,683 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "08404ca839d14d59a2979fdf1ed0a545", + "m_Properties": [], + "m_Keywords": [ + { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } + ], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "da7169b9f36445e781434d3d00fe316f" + } + ], + "m_Nodes": [ + { + "m_Id": "cce409e6d9ee4a4f85ad80c0e81a98db" + }, + { + "m_Id": "c349abf1b6a64effaabb14d5070b96e2" + }, + { + "m_Id": "e3b0bb68afd24e5295f4da2e83108a18" + }, + { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + }, + { + "m_Id": "2746f503d4744030a2a61a10eb507748" + }, + { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [ + { + "m_Id": "04ef0d71ffc343bfa51d297168a6a9ec" + } + ], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2746f503d4744030a2a61a10eb507748" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "cce409e6d9ee4a4f85ad80c0e81a98db" + }, + { + "m_Id": "c349abf1b6a64effaabb14d5070b96e2" + }, + { + "m_Id": "e3b0bb68afd24e5295f4da2e83108a18" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "c868a1eeda8a48df8a67394438c8ba72" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.StickyNoteData", + "m_ObjectId": "04ef0d71ffc343bfa51d297168a6a9ec", + "m_Title": "Note", + "m_Content": "This shader should mirror the basic EnumKeyword shader, but the keyword set is made overrideable by the Shader Build Settings.\n\nThe project should also be overriding this keyword set to be dynamic branch, rather than static.", + "m_TextSize": 0, + "m_Theme": 0, + "m_Position": { + "serializedVersion": "2", + "x": -383.6000061035156, + "y": -30.400001525878906, + "width": 200.0, + "height": 192.8000030517578 + }, + "m_Group": { + "m_Id": "" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "096c21da88614a1a9536e845b4325109", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 1.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "116db4bf5cb0434c8d48f85a154528a0", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "14be3ba500d14def86e3936669aa495b", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "1b0ac17a43f0404a84f726f225170fc0", + "m_Id": 1, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.KeywordNode", + "m_ObjectId": "2746f503d4744030a2a61a10eb507748", + "m_Group": { + "m_Id": "" + }, + "m_Name": "InputNodesBuildSettingCompatibleEnumKeyword", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -742.800048828125, + "y": 200.00001525878906, + "width": 327.20001220703125, + "height": 119.20002746582031 + } + }, + "m_Slots": [ + { + "m_Id": "116db4bf5cb0434c8d48f85a154528a0" + }, + { + "m_Id": "1b0ac17a43f0404a84f726f225170fc0" + }, + { + "m_Id": "14be3ba500d14def86e3936669aa495b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Keyword": { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "4a5700436055450896f6700102947d04", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "4e31a7300a9e4b3cbd555a603ca8413f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "e2de9283911a4faeae2ef79d0145bcee" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "85d3345367254283a33c9bb44fcbec9c", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "8a90cc18ceb84d25b0c79fe222d6f74a", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ComparisonNode", + "m_ObjectId": "98cc58d7b6584a19a6e44b4fe78bb026", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Comparison", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -277.9999694824219, + "y": 200.00001525878906, + "width": 146.39993286132813, + "height": 136.40003967285156 + } + }, + "m_Slots": [ + { + "m_Id": "cafcb7d25512458cbe9b64cbe07a5704" + }, + { + "m_Id": "096c21da88614a1a9536e845b4325109" + }, + { + "m_Id": "e6a29ab9b96443ae9291240c55cd3265" + } + ], + "synonyms": [ + "equal", + "greater than", + "less than" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_ComparisonType": 0 +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "a23499b68c644c35a084d2ea66fa59e3", + "m_KeepLightingVariants": false, + "m_DefaultDecalBlending": true, + "m_DefaultSSAO": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "c349abf1b6a64effaabb14d5070b96e2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "85d3345367254283a33c9bb44fcbec9c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "c868a1eeda8a48df8a67394438c8ba72", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "a23499b68c644c35a084d2ea66fa59e3" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_Sort3DAs2DCompatible": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cafcb7d25512458cbe9b64cbe07a5704", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cce409e6d9ee4a4f85ad80c0e81a98db", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4a5700436055450896f6700102947d04" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", + "m_ObjectId": "d249fed72f98472b8ed4af7058ae48d1", + "m_Guid": { + "m_GuidSerialized": "3ad10300-eac9-4f3f-bb36-ed43d04fb849" + }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, + "m_Name": "InputNodesBuildSettingCompatibleEnumKeyword", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "InputNodesBuildSettingCompatibleEnumKeyword", + "m_DefaultReferenceName": "_INPUTNODESBUILDSETTINGCOMPATIBLEENUMKEYWORD", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_KeywordType": 1, + "m_KeywordDefinition": 0, + "m_KeywordScope": 0, + "m_KeywordStages": 63, + "m_Entries": [ + { + "id": 1, + "displayName": "A", + "referenceName": "A" + }, + { + "id": 2, + "displayName": "B", + "referenceName": "B" + } + ], + "m_Value": 1, + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "da7169b9f36445e781434d3d00fe316f", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "e2de9283911a4faeae2ef79d0145bcee", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e3b0bb68afd24e5295f4da2e83108a18", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a90cc18ceb84d25b0c79fe222d6f74a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "e6a29ab9b96443ae9291240c55cd3265", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat new file mode 100644 index 00000000000..aacb4a4aa72 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat @@ -0,0 +1,141 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4248922376544952985 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BuildSettingCompatibleEnumKeyword + m_Shader: {fileID: -6465566751694194690, guid: b98824ba3d9ce484f9b7020eaeb8f45c, + type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - _INPUTNODESENUMKEYWORD_B + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _INPUTNODESENUMKEYWORD: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _ScreenSpaceReflections: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat.meta new file mode 100644 index 00000000000..189a25bd14c --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e135ce1fc2f1e2468b796d6d1a6dc15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.shadergraph.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.shadergraph.meta new file mode 100644 index 00000000000..8ee8eab756b --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/BuildSettingCompatibleEnumKeyword.shadergraph.meta @@ -0,0 +1,20 @@ +fileFormatVersion: 2 +guid: b98824ba3d9ce484f9b7020eaeb8f45c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} + useAsTemplate: 0 + exposeTemplateAsShader: 0 + indexedData: {instanceID: 0} + template: + name: + category: + description: + icon: {instanceID: 0} + thumbnail: {instanceID: 0} + order: 0 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat new file mode 100644 index 00000000000..909e00b6ce9 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat @@ -0,0 +1,141 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4248922376544952985 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: EnumKeyword + m_Shader: {fileID: -6465566751694194690, guid: 48808af23a2e5db4ea94a9710cbe9e87, + type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _INPUTNODESENUMKEYWORD_B + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _INPUTNODESENUMKEYWORD: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _ScreenSpaceReflections: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat.meta new file mode 100644 index 00000000000..7b147c63361 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c711b1f2a36ce8447ae0683ca4ed0fbf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph new file mode 100644 index 00000000000..0fc77f7c1b5 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph @@ -0,0 +1,659 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "08404ca839d14d59a2979fdf1ed0a545", + "m_Properties": [], + "m_Keywords": [ + { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } + ], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "da7169b9f36445e781434d3d00fe316f" + } + ], + "m_Nodes": [ + { + "m_Id": "cce409e6d9ee4a4f85ad80c0e81a98db" + }, + { + "m_Id": "c349abf1b6a64effaabb14d5070b96e2" + }, + { + "m_Id": "e3b0bb68afd24e5295f4da2e83108a18" + }, + { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + }, + { + "m_Id": "2746f503d4744030a2a61a10eb507748" + }, + { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2746f503d4744030a2a61a10eb507748" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "98cc58d7b6584a19a6e44b4fe78bb026" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "cce409e6d9ee4a4f85ad80c0e81a98db" + }, + { + "m_Id": "c349abf1b6a64effaabb14d5070b96e2" + }, + { + "m_Id": "e3b0bb68afd24e5295f4da2e83108a18" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "4e31a7300a9e4b3cbd555a603ca8413f" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "c868a1eeda8a48df8a67394438c8ba72" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "096c21da88614a1a9536e845b4325109", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 1.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "116db4bf5cb0434c8d48f85a154528a0", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "14be3ba500d14def86e3936669aa495b", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "1b0ac17a43f0404a84f726f225170fc0", + "m_Id": 1, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.KeywordNode", + "m_ObjectId": "2746f503d4744030a2a61a10eb507748", + "m_Group": { + "m_Id": "" + }, + "m_Name": "InputNodesEnumKeyword", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -656.0000610351563, + "y": 200.0000457763672, + "width": 194.00003051757813, + "height": 119.20002746582031 + } + }, + "m_Slots": [ + { + "m_Id": "116db4bf5cb0434c8d48f85a154528a0" + }, + { + "m_Id": "1b0ac17a43f0404a84f726f225170fc0" + }, + { + "m_Id": "14be3ba500d14def86e3936669aa495b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Keyword": { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "4a5700436055450896f6700102947d04", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "4e31a7300a9e4b3cbd555a603ca8413f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "e2de9283911a4faeae2ef79d0145bcee" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "85d3345367254283a33c9bb44fcbec9c", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "8a90cc18ceb84d25b0c79fe222d6f74a", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ComparisonNode", + "m_ObjectId": "98cc58d7b6584a19a6e44b4fe78bb026", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Comparison", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -310.4000549316406, + "y": 200.00001525878906, + "width": 146.40008544921875, + "height": 136.40003967285156 + } + }, + "m_Slots": [ + { + "m_Id": "cafcb7d25512458cbe9b64cbe07a5704" + }, + { + "m_Id": "096c21da88614a1a9536e845b4325109" + }, + { + "m_Id": "e6a29ab9b96443ae9291240c55cd3265" + } + ], + "synonyms": [ + "equal", + "greater than", + "less than" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_ComparisonType": 0 +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "a23499b68c644c35a084d2ea66fa59e3", + "m_KeepLightingVariants": false, + "m_DefaultDecalBlending": true, + "m_DefaultSSAO": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "c349abf1b6a64effaabb14d5070b96e2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "85d3345367254283a33c9bb44fcbec9c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "c868a1eeda8a48df8a67394438c8ba72", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "a23499b68c644c35a084d2ea66fa59e3" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_Sort3DAs2DCompatible": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cafcb7d25512458cbe9b64cbe07a5704", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cce409e6d9ee4a4f85ad80c0e81a98db", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4a5700436055450896f6700102947d04" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.ShaderKeyword", + "m_ObjectId": "d249fed72f98472b8ed4af7058ae48d1", + "m_Guid": { + "m_GuidSerialized": "3ad10300-eac9-4f3f-bb36-ed43d04fb849" + }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, + "m_Name": "InputNodesEnumKeyword", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "InputNodesEnumKeyword", + "m_DefaultReferenceName": "_INPUTNODESENUMKEYWORD", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_KeywordType": 1, + "m_KeywordDefinition": 0, + "m_KeywordScope": 0, + "m_KeywordStages": 63, + "m_Entries": [ + { + "id": 1, + "displayName": "A", + "referenceName": "A" + }, + { + "id": 2, + "displayName": "B", + "referenceName": "B" + } + ], + "m_Value": 1, + "m_IsEditable": true, + "m_IsShaderBuildSettingsCompatible": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "da7169b9f36445e781434d3d00fe316f", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "d249fed72f98472b8ed4af7058ae48d1" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "e2de9283911a4faeae2ef79d0145bcee", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e3b0bb68afd24e5295f4da2e83108a18", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a90cc18ceb84d25b0c79fe222d6f74a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "e6a29ab9b96443ae9291240c55cd3265", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph.meta new file mode 100644 index 00000000000..6e83211e971 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Input/Basic/EnumKeyword.shadergraph.meta @@ -0,0 +1,20 @@ +fileFormatVersion: 2 +guid: 48808af23a2e5db4ea94a9710cbe9e87 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} + useAsTemplate: 0 + exposeTemplateAsShader: 0 + indexedData: {instanceID: 0} + template: + name: + category: + description: + icon: {instanceID: 0} + thumbnail: {instanceID: 0} + order: 0 diff --git a/Tests/SRPTests/Projects/ShaderGraph/ProjectSettings/GraphicsSettings.asset b/Tests/SRPTests/Projects/ShaderGraph/ProjectSettings/GraphicsSettings.asset index e93833a2c10..d3e9be93f9b 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/ProjectSettings/GraphicsSettings.asset +++ b/Tests/SRPTests/Projects/ShaderGraph/ProjectSettings/GraphicsSettings.asset @@ -3,7 +3,7 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 16 m_Deferred: m_Mode: 1 m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} @@ -13,9 +13,6 @@ GraphicsSettings: m_ScreenSpaceShadows: m_Mode: 1 m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} m_DepthNormals: m_Mode: 1 m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} @@ -28,6 +25,7 @@ GraphicsSettings: m_LensFlare: m_Mode: 1 m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_VideoShadersIncludeMode: 2 m_AlwaysIncludedShaders: - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} @@ -36,6 +34,16 @@ GraphicsSettings: - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] + m_PreloadShadersBatchTimeLimit: -1 + m_GraphicsStateCollection: {fileID: 0} + m_CollectionStartupAction: 0 + m_TraceSavePath: TracedCollection + m_TraceSendToEditor: 1 + m_AdditionalWarmupCollections: [] + m_WarmupAsync: 1 + m_EnableCacheMissTracing: 0 + m_WarmupProgressivelyLimit: -1 + m_CacheMissCollectionPath: CacheMissCollection m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} m_CustomRenderPipeline: {fileID: 11400000, guid: 9c068d834ef325345b87395bd103e074, @@ -48,6 +56,8 @@ GraphicsSettings: m_LightmapStripping: 0 m_FogStripping: 0 m_InstancingStripping: 0 + m_BrgStripping: 0 + m_DefaultLightBaker: 0 m_LightmapKeepPlain: 1 m_LightmapKeepDirCombined: 1 m_LightmapKeepDynamicPlain: 1 @@ -58,5 +68,22 @@ GraphicsSettings: m_FogKeepExp: 1 m_FogKeepExp2: 1 m_AlbedoSwatchInfos: [] + m_RenderPipelineGlobalSettingsMap: + UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 35bc433cead364605bb59ecbb49e64e3, + type: 2} + m_ShaderBuildSettings: + keywordDeclarationOverrides: + - keywords: + - name: _INPUTNODESBUILDSETTINGCOMPATIBLEENUMKEYWORD_A + keepInBuild: 1 + - name: _INPUTNODESBUILDSETTINGCOMPATIBLEENUMKEYWORD_B + keepInBuild: 1 + variantGenerationMode: 3 + numInternalDefines: 0 + defines: [] m_LightsUseLinearIntensity: 1 - m_LightsUseColorTemperature: 0 + m_LightsUseColorTemperature: 1 + m_LogWhenShaderIsCompiled: 0 + m_LightProbeOutsideHullStrategy: 0 + m_CameraRelativeLightCulling: 0 + m_CameraRelativeShadowCulling: 0