Skip to content

[URP] Factorize template & SubTarget<UniversalTarget> #5467

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
using System.Linq;
using UnityEditor.ShaderGraph;

using Unity.Rendering.Universal;

namespace UnityEditor.Rendering.Universal.ShaderGraph
{
sealed class UniversalSpriteCustomLitSubTarget : SubTarget<UniversalTarget>
sealed class UniversalSpriteCustomLitSubTarget : UniversalSubTarget
{
static readonly GUID kSourceCodeGuid = new GUID("69e608b3e7e0405bbc2f259ad9cfa196"); // UniversalUnlitSubTarget.cs

Expand All @@ -14,10 +15,13 @@ public UniversalSpriteCustomLitSubTarget()
displayName = "Sprite Custom Lit";
}

protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_SpriteCustomLit;

public override bool IsActive() => true;

public override void Setup(ref TargetSetupContext context)
{
base.Setup(ref context);
context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
context.AddSubShader(SubShaders.SpriteLit(target));
}
Expand Down Expand Up @@ -115,8 +119,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand All @@ -143,8 +147,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand All @@ -170,8 +174,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
using UnityEditor.ShaderGraph;
using UnityEditor.ShaderGraph.Legacy;

using Unity.Rendering.Universal;

namespace UnityEditor.Rendering.Universal.ShaderGraph
{
sealed class UniversalSpriteLitSubTarget : SubTarget<UniversalTarget>, ILegacyTarget
sealed class UniversalSpriteLitSubTarget : UniversalSubTarget, ILegacyTarget
{
static readonly GUID kSourceCodeGuid = new GUID("ea1514729d7120344b27dcd67fbf34de"); // UniversalSpriteLitSubTarget.cs

Expand All @@ -18,8 +19,11 @@ public UniversalSpriteLitSubTarget()

public override bool IsActive() => true;

protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_SpriteLit;

public override void Setup(ref TargetSetupContext context)
{
base.Setup(ref context);
context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
context.AddSubShader(SubShaders.SpriteLit(target));
}
Expand Down Expand Up @@ -137,8 +141,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down Expand Up @@ -168,8 +172,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down Expand Up @@ -198,8 +202,8 @@ static class SpriteLitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
using UnityEditor.ShaderGraph;
using UnityEditor.ShaderGraph.Legacy;

using Unity.Rendering.Universal;

namespace UnityEditor.Rendering.Universal.ShaderGraph
{
sealed class UniversalSpriteUnlitSubTarget : SubTarget<UniversalTarget>, ILegacyTarget
sealed class UniversalSpriteUnlitSubTarget : UniversalSubTarget, ILegacyTarget
{
static readonly GUID kSourceCodeGuid = new GUID("ed7c0aacec26e9646b45c96fb318e5a3"); // UniversalSpriteUnlitSubTarget.cs

Expand All @@ -16,10 +17,13 @@ public UniversalSpriteUnlitSubTarget()
displayName = "Sprite Unlit";
}

protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_SpriteUnlit;

public override bool IsActive() => true;

public override void Setup(ref TargetSetupContext context)
{
base.Setup(ref context);
context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
context.AddSubShader(SubShaders.SpriteUnlit(target));
}
Expand Down Expand Up @@ -132,8 +136,8 @@ static class SpriteUnlitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down Expand Up @@ -163,8 +167,8 @@ static class SpriteUnlitPasses
useInPreview = true,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.ShaderGraph;
using UnityEngine.Rendering;
using Unity.Rendering.Universal;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
using UnityEditor.ShaderGraph.Legacy;
using UnityEngine.Rendering.Universal;
using UnityEditor.ShaderGraph.Internal;
using ShaderUtils = Unity.Rendering.Universal.ShaderUtils;

namespace UnityEditor.Rendering.Universal.ShaderGraph
{
sealed class UniversalDecalSubTarget : SubTarget<UniversalTarget>
sealed class UniversalDecalSubTarget : UniversalSubTarget
{
static readonly GUID kSourceCodeGuid = new GUID("f6cdcb0f9c306bf4895b74013d29ed47"); // UniversalDecalSubTarget.cs

Expand Down Expand Up @@ -74,8 +75,11 @@ public UniversalDecalSubTarget()

public override bool IsActive() => true;

protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_Decal;

public override void Setup(ref TargetSetupContext context)
{
base.Setup(ref context);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

N.B.: Decal Sub Target still uses an independent template DecalPass.template
and it doesn't include the kUberTemplatePath.
It probably deserves to be factorized with the common template at some point.

context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
context.AddCustomEditorForRenderPipeline("UnityEditor.Rendering.Universal.DecalShaderGraphGUI", typeof(UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset)); // TODO: This should be owned by URP

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -964,8 +964,8 @@ public static PassDescriptor _2DSceneSelection(UniversalTarget target)
useInPreview = false,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down Expand Up @@ -1002,8 +1002,8 @@ public static PassDescriptor _2DScenePicking(UniversalTarget target)
useInPreview = false,

// Template
passTemplatePath = GenerationUtils.GetDefaultTemplatePath("PassMesh.template"),
sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(),
passTemplatePath = UniversalTarget.kUberTemplatePath,
sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,

// Port Mask
validVertexBlocks = CoreBlockMasks.Vertex,
Expand Down
12 changes: 12 additions & 0 deletions com.unity.render-pipelines.universal/Editor/ShaderUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ internal enum ShaderID
// ShaderGraph IDs start at 1000, correspond to subtargets
SG_Unlit = 1000, // UniversalUnlitSubTarget
SG_Lit, // UniversalLitSubTarget
SG_Decal, // UniversalDecalSubTarget
SG_SpriteUnlit, // UniversalSpriteUnlitSubTarget
SG_SpriteLit, // UniversalSpriteLitSubTarget
SG_SpriteCustomLit // UniversalSpriteCustomLitSubTarget
}

internal static bool IsShaderGraph(this ShaderID id)
Expand Down Expand Up @@ -96,6 +100,14 @@ internal static void UpdateMaterial(Material material, MaterialUpdateType update
case ShaderID.SG_Unlit:
ShaderGraphUnlitGUI.UpdateMaterial(material, updateType);
break;
case ShaderID.SG_Decal:
break;
case ShaderID.SG_SpriteUnlit:
break;
case ShaderID.SG_SpriteLit:
break;
case ShaderID.SG_SpriteCustomLit:
break;
default:
break;
}
Expand Down