Skip to content
Merged
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 @@ -713,7 +713,11 @@ internal static ShaderFeatures GetSupportedShaderFeaturesFromRendererFeatures(re
continue;

// Rendering Layers...
if (rendererRequirements.isUniversalRenderer && rendererFeature.RequireRenderingLayers(isDeferredRenderer, rendererRequirements.needsGBufferAccurateNormals, out RenderingLayerUtils.Event rendererEvent, out _))
if (rendererRequirements.isUniversalRenderer &&
RenderingLayerUtils.RequireRenderingLayers(rendererFeatures,
rendererRequirements.renderingMode,
rendererRequirements.needsGBufferAccurateNormals,
rendererRequirements.msaaSampleCount, out RenderingLayerUtils.Event rendererEvent, out _))
{
usesRenderingLayers = true;
RenderingLayerUtils.CombineRendererEvents(isDeferredRenderer, rendererRequirements.msaaSampleCount, rendererEvent, ref renderingLayersEvent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,65 +34,34 @@ public static void CombineRendererEvents(bool isDeferred, int msaaSampleCount, E
combinedEvent = Combine(combinedEvent, rendererEvent);
}

/// <summary>
/// Returns True if <see cref="UniversalRendererData"/> will require rendering layers texture.
/// </summary>
/// <param name="universalRendererData"></param>
/// <param name="msaaSampleCount">Number of MSAA Samples</param>
/// <param name="combinedEvent">Event at which rendering layers texture needs to be created</param>
/// <param name="combinedMaskSize">The mask size of rendering layers texture</param>
public static bool RequireRenderingLayers(UniversalRendererData universalRendererData, int msaaSampleCount, out Event combinedEvent, out MaskSize combinedMaskSize)
{
combinedEvent = Event.Opaque;
combinedMaskSize = MaskSize.Bits8;

bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred;
bool result = false;
foreach (var rendererFeature in universalRendererData.rendererFeatures)
{
if (rendererFeature.isActive)
{
result |= rendererFeature.RequireRenderingLayers(isDeferred, universalRendererData.accurateGbufferNormals, out Event rendererEvent, out MaskSize rendererMaskSize);
combinedEvent = Combine(combinedEvent, rendererEvent);
combinedMaskSize = Combine(combinedMaskSize, rendererMaskSize);
}
}

// Rendering layers can not use MSAA resolve, because it encodes integer
if (msaaSampleCount > 1 && combinedEvent == Event.Opaque && !isDeferred)
combinedEvent = Event.DepthNormalPrePass;

// Make sure texture has enough bits to encode all rendering layers in urp global settings
if (UniversalRenderPipelineGlobalSettings.instance)
{
int count = UniversalRenderPipelineGlobalSettings.instance.renderingLayerMaskNames.Length;
MaskSize maskSize = RenderingLayerUtils.GetMaskSize(count);
combinedMaskSize = Combine(combinedMaskSize, maskSize);
}

return result;
}

/// <summary>
/// Returns True if <see cref="UniversalRenderer"/> will require rendering layers texture.
/// </summary>
/// <param name="universalRenderer"></param>
/// <param name="rendererFeatures">Event at which rendering layers texture needs to be created</param>
/// <param name="msaaSampleCount">Number of MSAA Samples</param>
/// <param name="rendererFeatures">List of renderer features used by the renderer</param>
/// <param name="msaaSampleCount">MSAA sample count</param>
/// <param name="combinedEvent">Event at which rendering layers texture needs to be created</param>
/// <param name="combinedMaskSize">The mask size of rendering layers texture</param>
public static bool RequireRenderingLayers(UniversalRenderer universalRenderer, List<ScriptableRendererFeature> rendererFeatures, int msaaSampleCount, out Event combinedEvent, out MaskSize combinedMaskSize)
{
RenderingMode renderingMode = universalRenderer.renderingModeActual;
bool accurateGBufferNormals = universalRenderer.accurateGbufferNormals;
return RequireRenderingLayers(rendererFeatures, renderingMode, accurateGBufferNormals, msaaSampleCount,
out combinedEvent, out combinedMaskSize);
}

internal static bool RequireRenderingLayers(List<ScriptableRendererFeature> rendererFeatures, RenderingMode renderingMode, bool accurateGbufferNormals, int msaaSampleCount, out Event combinedEvent, out MaskSize combinedMaskSize)
{
combinedEvent = Event.Opaque;
combinedMaskSize = MaskSize.Bits8;

bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred;
bool isDeferred = renderingMode == RenderingMode.Deferred;
bool result = false;
foreach (var rendererFeature in rendererFeatures)
{
if (rendererFeature.isActive)
{
result |= rendererFeature.RequireRenderingLayers(isDeferred, universalRenderer.accurateGbufferNormals, out Event rendererEvent, out MaskSize rendererMaskSize);
result |= rendererFeature.RequireRenderingLayers(isDeferred, accurateGbufferNormals, out Event rendererEvent, out MaskSize rendererMaskSize);
combinedEvent = Combine(combinedEvent, rendererEvent);
combinedMaskSize = Combine(combinedMaskSize, rendererMaskSize);
}
Expand Down
Loading