Align URP render graph frame data scope
This commit is contained in:
@@ -1173,6 +1173,297 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
internal static class PublicRenderGraphFrameDataProbeState
|
||||
{
|
||||
public static bool HasRenderingData;
|
||||
public static bool HasCameraData;
|
||||
public static bool HasLightingData;
|
||||
public static bool HasShadowData;
|
||||
public static bool HasEnvironmentData;
|
||||
public static bool HasFinalColorData;
|
||||
public static bool HasStageColorData;
|
||||
public static bool RenderingDataMatchesItems;
|
||||
public static int ObservedStage;
|
||||
public static int ObservedRendererIndex;
|
||||
|
||||
public static void Reset()
|
||||
{
|
||||
HasRenderingData = false;
|
||||
HasCameraData = false;
|
||||
HasLightingData = false;
|
||||
HasShadowData = false;
|
||||
HasEnvironmentData = false;
|
||||
HasFinalColorData = false;
|
||||
HasStageColorData = false;
|
||||
RenderingDataMatchesItems = false;
|
||||
ObservedStage = -1;
|
||||
ObservedRendererIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphFrameDataProbePass
|
||||
: ScriptableRenderPass
|
||||
{
|
||||
public PublicRenderGraphFrameDataProbePass()
|
||||
{
|
||||
renderPassEvent = RenderPassEvent.RenderOpaques;
|
||||
}
|
||||
|
||||
public override void RecordRenderGraph(
|
||||
RenderGraph renderGraph,
|
||||
ContextContainer frameData)
|
||||
{
|
||||
PublicRenderGraphFrameDataProbeState.HasRenderingData =
|
||||
frameData != null &&
|
||||
frameData.Contains<RenderingData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasCameraData =
|
||||
frameData != null &&
|
||||
frameData.Contains<CameraData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasLightingData =
|
||||
frameData != null &&
|
||||
frameData.Contains<LightingData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasShadowData =
|
||||
frameData != null &&
|
||||
frameData.Contains<ShadowData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasEnvironmentData =
|
||||
frameData != null &&
|
||||
frameData.Contains<EnvironmentData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasFinalColorData =
|
||||
frameData != null &&
|
||||
frameData.Contains<FinalColorData>();
|
||||
PublicRenderGraphFrameDataProbeState.HasStageColorData =
|
||||
frameData != null &&
|
||||
frameData.Contains<StageColorData>();
|
||||
|
||||
if (!PublicRenderGraphFrameDataProbeState.HasRenderingData)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RenderingData renderingData =
|
||||
frameData.Get<RenderingData>();
|
||||
PublicRenderGraphFrameDataProbeState.ObservedStage =
|
||||
(int)renderingData.stage;
|
||||
PublicRenderGraphFrameDataProbeState.ObservedRendererIndex =
|
||||
renderingData.rendererIndex;
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.RenderingDataMatchesItems =
|
||||
object.ReferenceEquals(
|
||||
renderingData.cameraData,
|
||||
frameData.Get<CameraData>()) &&
|
||||
object.ReferenceEquals(
|
||||
renderingData.lightingData,
|
||||
frameData.Get<LightingData>()) &&
|
||||
object.ReferenceEquals(
|
||||
renderingData.shadowData,
|
||||
frameData.Get<ShadowData>()) &&
|
||||
object.ReferenceEquals(
|
||||
renderingData.environmentData,
|
||||
frameData.Get<EnvironmentData>()) &&
|
||||
object.ReferenceEquals(
|
||||
renderingData.finalColorData,
|
||||
frameData.Get<FinalColorData>()) &&
|
||||
object.ReferenceEquals(
|
||||
renderingData.stageColorData,
|
||||
frameData.Get<StageColorData>());
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphFrameDataProbeFeature
|
||||
: ScriptableRendererFeature
|
||||
{
|
||||
private readonly PublicRenderGraphFrameDataProbePass m_pass =
|
||||
new PublicRenderGraphFrameDataProbePass();
|
||||
|
||||
public override void AddRenderPasses(
|
||||
ScriptableRenderer renderer,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
if (renderer == null ||
|
||||
renderingData == null ||
|
||||
!renderingData.isMainSceneStage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
renderer.EnqueuePass(m_pass);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphFrameDataProbeRenderer
|
||||
: ScriptableRenderer
|
||||
{
|
||||
public PublicRenderGraphFrameDataProbeRenderer()
|
||||
{
|
||||
AddFeature(new PublicRenderGraphFrameDataProbeFeature());
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataProbeItem
|
||||
: ContextItem
|
||||
{
|
||||
public int Value;
|
||||
public int WriterOrder;
|
||||
public RenderingData RenderingData;
|
||||
|
||||
public PublicRenderGraphSharedFrameDataProbeItem()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Reset()
|
||||
{
|
||||
Value = 0;
|
||||
WriterOrder = 0;
|
||||
RenderingData = null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static class PublicRenderGraphSharedFrameDataProbeState
|
||||
{
|
||||
public static bool WriterVisited;
|
||||
public static bool ReaderVisited;
|
||||
public static bool ReaderObservedWriterItem;
|
||||
public static bool ReaderObservedSameFrameData;
|
||||
public static bool ReaderObservedSameRenderingData;
|
||||
public static int ReaderObservedValue;
|
||||
public static int ReaderOrder;
|
||||
public static ContextContainer WriterFrameData;
|
||||
public static int NextOrder;
|
||||
|
||||
public static void Reset()
|
||||
{
|
||||
WriterVisited = false;
|
||||
ReaderVisited = false;
|
||||
ReaderObservedWriterItem = false;
|
||||
ReaderObservedSameFrameData = false;
|
||||
ReaderObservedSameRenderingData = false;
|
||||
ReaderObservedValue = 0;
|
||||
ReaderOrder = 0;
|
||||
WriterFrameData = null;
|
||||
NextOrder = 0;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataWriterPass
|
||||
: ScriptableRenderPass
|
||||
{
|
||||
public PublicRenderGraphSharedFrameDataWriterPass()
|
||||
{
|
||||
renderPassEvent = RenderPassEvent.RenderOpaques;
|
||||
}
|
||||
|
||||
public override void RecordRenderGraph(
|
||||
RenderGraph renderGraph,
|
||||
ContextContainer frameData)
|
||||
{
|
||||
PublicRenderGraphSharedFrameDataProbeState.WriterVisited =
|
||||
frameData != null;
|
||||
PublicRenderGraphSharedFrameDataProbeState.WriterFrameData =
|
||||
frameData;
|
||||
if (frameData == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PublicRenderGraphSharedFrameDataProbeItem item =
|
||||
frameData
|
||||
.GetOrCreate<PublicRenderGraphSharedFrameDataProbeItem>();
|
||||
item.Value = 73;
|
||||
item.WriterOrder =
|
||||
++PublicRenderGraphSharedFrameDataProbeState.NextOrder;
|
||||
item.RenderingData =
|
||||
frameData.Contains<RenderingData>()
|
||||
? frameData.Get<RenderingData>()
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataReaderPass
|
||||
: ScriptableRenderPass
|
||||
{
|
||||
public PublicRenderGraphSharedFrameDataReaderPass()
|
||||
{
|
||||
renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
|
||||
}
|
||||
|
||||
public override void RecordRenderGraph(
|
||||
RenderGraph renderGraph,
|
||||
ContextContainer frameData)
|
||||
{
|
||||
PublicRenderGraphSharedFrameDataProbeState.ReaderVisited =
|
||||
frameData != null;
|
||||
PublicRenderGraphSharedFrameDataProbeState.ReaderOrder =
|
||||
++PublicRenderGraphSharedFrameDataProbeState.NextOrder;
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedSameFrameData =
|
||||
object.ReferenceEquals(
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.WriterFrameData,
|
||||
frameData);
|
||||
|
||||
if (frameData == null ||
|
||||
!frameData
|
||||
.Contains<PublicRenderGraphSharedFrameDataProbeItem>())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PublicRenderGraphSharedFrameDataProbeItem item =
|
||||
frameData
|
||||
.Get<PublicRenderGraphSharedFrameDataProbeItem>();
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedWriterItem =
|
||||
item.WriterOrder > 0 &&
|
||||
item.WriterOrder <
|
||||
PublicRenderGraphSharedFrameDataProbeState.ReaderOrder;
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedValue =
|
||||
item.Value;
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedSameRenderingData =
|
||||
frameData.Contains<RenderingData>() &&
|
||||
object.ReferenceEquals(
|
||||
item.RenderingData,
|
||||
frameData.Get<RenderingData>());
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataProbeFeature
|
||||
: ScriptableRendererFeature
|
||||
{
|
||||
private readonly PublicRenderGraphSharedFrameDataWriterPass
|
||||
m_writerPass =
|
||||
new PublicRenderGraphSharedFrameDataWriterPass();
|
||||
private readonly PublicRenderGraphSharedFrameDataReaderPass
|
||||
m_readerPass =
|
||||
new PublicRenderGraphSharedFrameDataReaderPass();
|
||||
|
||||
public override void AddRenderPasses(
|
||||
ScriptableRenderer renderer,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
if (renderer == null ||
|
||||
renderingData == null ||
|
||||
!renderingData.isMainSceneStage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
renderer.EnqueuePass(m_writerPass);
|
||||
renderer.EnqueuePass(m_readerPass);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataProbeRenderer
|
||||
: ScriptableRenderer
|
||||
{
|
||||
public PublicRenderGraphSharedFrameDataProbeRenderer()
|
||||
{
|
||||
AddFeature(
|
||||
new PublicRenderGraphSharedFrameDataProbeFeature());
|
||||
}
|
||||
}
|
||||
|
||||
internal abstract class ProbeRendererData
|
||||
: UniversalRendererData
|
||||
{
|
||||
@@ -1532,6 +1823,24 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphFrameDataProbeRendererData
|
||||
: ProbeRendererData
|
||||
{
|
||||
protected override ScriptableRenderer CreateProbeRenderer()
|
||||
{
|
||||
return new PublicRenderGraphFrameDataProbeRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PublicRenderGraphSharedFrameDataProbeRendererData
|
||||
: ProbeRendererData
|
||||
{
|
||||
protected override ScriptableRenderer CreateProbeRenderer()
|
||||
{
|
||||
return new PublicRenderGraphSharedFrameDataProbeRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
internal static class ManagedLifecycleProbeState
|
||||
{
|
||||
public static int CreatePipelineCallCount;
|
||||
@@ -2230,6 +2539,32 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ManagedPublicRenderGraphFrameDataProbeAsset
|
||||
: UniversalRenderPipelineAsset
|
||||
{
|
||||
public ManagedPublicRenderGraphFrameDataProbeAsset()
|
||||
{
|
||||
rendererDataList =
|
||||
ProbeScriptableObjectFactory
|
||||
.CreateRendererDataList(
|
||||
ProbeScriptableObjectFactory
|
||||
.Create<PublicRenderGraphFrameDataProbeRendererData>());
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ManagedPublicRenderGraphSharedFrameDataProbeAsset
|
||||
: UniversalRenderPipelineAsset
|
||||
{
|
||||
public ManagedPublicRenderGraphSharedFrameDataProbeAsset()
|
||||
{
|
||||
rendererDataList =
|
||||
ProbeScriptableObjectFactory
|
||||
.CreateRendererDataList(
|
||||
ProbeScriptableObjectFactory
|
||||
.Create<PublicRenderGraphSharedFrameDataProbeRendererData>());
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ManagedMainSceneRasterPassProbePipeline
|
||||
: ScriptableRenderPipeline
|
||||
{
|
||||
@@ -3372,5 +3707,106 @@ namespace Gameplay
|
||||
StageColorObservationPass.FinalOutputRecordCallCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ManagedPublicRenderGraphFrameDataRuntimeSelectionProbe
|
||||
: MonoBehaviour
|
||||
{
|
||||
public bool ObservedHasRenderingData;
|
||||
public bool ObservedHasCameraData;
|
||||
public bool ObservedHasLightingData;
|
||||
public bool ObservedHasShadowData;
|
||||
public bool ObservedHasEnvironmentData;
|
||||
public bool ObservedHasFinalColorData;
|
||||
public bool ObservedHasStageColorData;
|
||||
public bool ObservedRenderingDataMatchesItems;
|
||||
public int ObservedStage;
|
||||
public int ObservedRendererIndex;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
PublicRenderGraphFrameDataProbeState.Reset();
|
||||
GraphicsSettings.renderPipelineAsset =
|
||||
ProbeScriptableObjectFactory
|
||||
.Create<ManagedPublicRenderGraphFrameDataProbeAsset>();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
ObservedHasRenderingData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasRenderingData;
|
||||
ObservedHasCameraData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasCameraData;
|
||||
ObservedHasLightingData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasLightingData;
|
||||
ObservedHasShadowData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasShadowData;
|
||||
ObservedHasEnvironmentData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasEnvironmentData;
|
||||
ObservedHasFinalColorData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasFinalColorData;
|
||||
ObservedHasStageColorData =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.HasStageColorData;
|
||||
ObservedRenderingDataMatchesItems =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.RenderingDataMatchesItems;
|
||||
ObservedStage =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.ObservedStage;
|
||||
ObservedRendererIndex =
|
||||
PublicRenderGraphFrameDataProbeState
|
||||
.ObservedRendererIndex;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ManagedPublicRenderGraphSharedFrameDataRuntimeSelectionProbe
|
||||
: MonoBehaviour
|
||||
{
|
||||
public bool ObservedWriterVisited;
|
||||
public bool ObservedReaderVisited;
|
||||
public bool ObservedReaderSawWriterItem;
|
||||
public bool ObservedSameFrameData;
|
||||
public bool ObservedSameRenderingData;
|
||||
public int ObservedValue;
|
||||
public int ObservedReaderOrder;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
PublicRenderGraphSharedFrameDataProbeState.Reset();
|
||||
GraphicsSettings.renderPipelineAsset =
|
||||
ProbeScriptableObjectFactory
|
||||
.Create<ManagedPublicRenderGraphSharedFrameDataProbeAsset>();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
ObservedWriterVisited =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.WriterVisited;
|
||||
ObservedReaderVisited =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderVisited;
|
||||
ObservedReaderSawWriterItem =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedWriterItem;
|
||||
ObservedSameFrameData =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedSameFrameData;
|
||||
ObservedSameRenderingData =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedSameRenderingData;
|
||||
ObservedValue =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderObservedValue;
|
||||
ObservedReaderOrder =
|
||||
PublicRenderGraphSharedFrameDataProbeState
|
||||
.ReaderOrder;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user