Skip to content

Commit d07856c

Browse files
laylaarabEvergreen
authored andcommitted
Fix empty shadowmap not being cleared in URP on console platforms
1 parent d8a2c0a commit d07856c

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ public ShadowResolutionRequest(int _visibleLightIndex, int _perLightShadowSliceI
6262
internal RTHandle m_AdditionalLightsShadowmapHandle;
6363

6464
private bool m_CreateEmptyShadowmap;
65+
private bool m_EmptyShadowmapNeedsClear = false;
66+
6567
private RTHandle m_EmptyAdditionalLightShadowmapTexture;
6668
private const int k_EmptyShadowMapDimensions = 1;
6769
private const string k_AdditionalLightShadowMapTextureName = "_AdditionalLightsShadowmapTexture";
@@ -142,7 +144,8 @@ public AdditionalLightsShadowCasterPass(RenderPassEvent evt)
142144
m_ShadowResolutionRequests.Capacity = maxVisibleAdditionalLights;
143145
}
144146

145-
m_EmptyAdditionalLightShadowmapTexture = RTHandles.Alloc(Texture2D.blackTexture);
147+
m_EmptyAdditionalLightShadowmapTexture = ShadowUtils.AllocShadowRT(1, 1, k_ShadowmapBufferBits, 1, 0, name: "_EmptyAdditionalLightShadowmapTexture");
148+
m_EmptyShadowmapNeedsClear = true;
146149
}
147150

148151
/// <summary>
@@ -151,6 +154,7 @@ public AdditionalLightsShadowCasterPass(RenderPassEvent evt)
151154
public void Dispose()
152155
{
153156
m_AdditionalLightsShadowmapHandle?.Release();
157+
m_EmptyAdditionalLightShadowmapTexture?.Release();
154158
}
155159

156160
private int GetPunctualLightShadowSlicesCount(in LightType lightType)
@@ -850,6 +854,10 @@ bool SetupForEmptyRendering(ref RenderingData renderingData)
850854
m_CreateEmptyShadowmap = true;
851855
useNativeRenderPass = false;
852856

857+
// Required for scene view camera(URP renderer not initialized)
858+
if(ShadowUtils.ShadowRTReAllocateIfNeeded(ref m_EmptyAdditionalLightShadowmapTexture, 1, 1, k_ShadowmapBufferBits, name: "_EmptyAdditionalLightShadowmapTexture"))
859+
m_EmptyShadowmapNeedsClear = true;
860+
853861
// initialize _AdditionalShadowParams
854862
for (int i = 0; i < m_AdditionalLightIndexToShadowParams.Length; ++i)
855863
m_AdditionalLightIndexToShadowParams[i] = c_DefaultShadowParams;
@@ -860,13 +868,18 @@ bool SetupForEmptyRendering(ref RenderingData renderingData)
860868
/// <inheritdoc/>
861869
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
862870
{
863-
864-
if (m_CreateEmptyShadowmap)
871+
if (m_CreateEmptyShadowmap && !m_EmptyShadowmapNeedsClear)
865872
{
866873
// Reset pass RTs to null
867874
ResetTarget();
868875
return;
869876
}
877+
if (m_CreateEmptyShadowmap)
878+
{
879+
ConfigureTarget(m_EmptyAdditionalLightShadowmapTexture);
880+
m_EmptyShadowmapNeedsClear = false;
881+
}
882+
else
870883
ConfigureTarget(m_AdditionalLightsShadowmapHandle);
871884

872885
ConfigureClear(ClearFlag.All, Color.black);

Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ private static class MainLightShadowConstantBuffer
4343
Vector4[] m_CascadeSplitDistances;
4444

4545
bool m_CreateEmptyShadowmap;
46+
private bool m_EmptyShadowmapNeedsClear = false;
4647

4748
int renderTargetWidth;
4849
int renderTargetHeight;
@@ -76,7 +77,8 @@ public MainLightShadowCasterPass(RenderPassEvent evt)
7677

7778
m_MainLightShadowmapID = Shader.PropertyToID(k_MainLightShadowMapTextureName);
7879

79-
m_EmptyMainLightShadowmapTexture = RTHandles.Alloc(Texture2D.blackTexture);
80+
m_EmptyMainLightShadowmapTexture = ShadowUtils.AllocShadowRT(1, 1, k_ShadowmapBufferBits, 1, 0, name: "_EmptyLightShadowmapTexture");
81+
m_EmptyShadowmapNeedsClear = true;
8082
}
8183

8284
/// <summary>
@@ -163,22 +165,31 @@ bool SetupForEmptyRendering(ref RenderingData renderingData)
163165

164166
m_CreateEmptyShadowmap = true;
165167
useNativeRenderPass = false;
166-
ShadowUtils.ShadowRTReAllocateIfNeeded(ref m_EmptyMainLightShadowmapTexture, k_EmptyShadowMapDimensions, k_EmptyShadowMapDimensions, k_ShadowmapBufferBits, name: k_EmptyMainLightShadowMapTextureName);
168+
169+
// Required for scene view camera(URP renderer not initialized)
170+
if(ShadowUtils.ShadowRTReAllocateIfNeeded(ref m_EmptyMainLightShadowmapTexture, 1, 1, k_ShadowmapBufferBits, name: "_EmptyLightShadowmapTexture"))
171+
m_EmptyShadowmapNeedsClear = true;
167172

168173
return true;
169174
}
170175

171176
/// <inheritdoc />
172177
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
173178
{
174-
175-
if (m_CreateEmptyShadowmap)
179+
if (m_CreateEmptyShadowmap && !m_EmptyShadowmapNeedsClear)
176180
{
177181
// Reset pass RTs to null
178182
ResetTarget();
179183
return;
180184
}
185+
if (m_CreateEmptyShadowmap)
186+
{
187+
ConfigureTarget(m_EmptyMainLightShadowmapTexture);
188+
m_EmptyShadowmapNeedsClear = false;
189+
}
190+
else
181191
ConfigureTarget(m_MainLightShadowmapTexture);
192+
182193
ConfigureClear(ClearFlag.All, Color.black);
183194
}
184195

0 commit comments

Comments
 (0)