Skip to content
This repository was archived by the owner on Nov 30, 2020. It is now read-only.

Commit 671639f

Browse files
committed
Finish port to GetScreenSpaceTemporaryRT
The remaining clients that were getting temporary RTs now use GetScreenSpaceTemporaryRT. Also, instead of a dimension scaler, there are explicit overrides for width and height.
1 parent 246b5a5 commit 671639f

4 files changed

Lines changed: 44 additions & 48 deletions

File tree

PostProcessing/Runtime/Effects/Bloom.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,8 @@ public override void Render(PostProcessRenderContext context)
100100

101101
// Do bloom on a half-res buffer, full-res doesn't bring much and kills performances on
102102
// fillrate limited platforms
103-
var pyramidDesc = context.GetDescriptor(0, context.sourceFormat);
104-
pyramidDesc.width = Mathf.FloorToInt(pyramidDesc.width / (2f - rw));
105-
pyramidDesc.height = Mathf.FloorToInt(pyramidDesc.height / (2f - rh));
103+
int tw = context.width / 2;
104+
int th = context.height / 2;
106105

107106
// Determine the iteration count
108107
int s = Mathf.Max((Mathf.FloorToInt(context.xrSingleEyeWidth / (2f - rw))), (Mathf.FloorToInt(context.height / (2f - rh))));
@@ -130,13 +129,14 @@ public override void Render(PostProcessRenderContext context)
130129
? (int)Pass.Prefilter13 + qualityOffset
131130
: (int)Pass.Downsample13 + qualityOffset;
132131

133-
cmd.GetTemporaryRT(mipDown, pyramidDesc, FilterMode.Bilinear);
134-
cmd.GetTemporaryRT(mipUp, pyramidDesc, FilterMode.Bilinear);
132+
context.GetScreenSpaceTemporaryRT(cmd, mipDown, 0, context.sourceFormat, RenderTextureReadWrite.Default, FilterMode.Bilinear, tw, th);
133+
context.GetScreenSpaceTemporaryRT(cmd, mipUp, 0, context.sourceFormat, RenderTextureReadWrite.Default, FilterMode.Bilinear, tw, th);
134+
135135
cmd.BlitFullscreenTriangle(last, mipDown, sheet, pass);
136136

137137
last = mipDown;
138-
pyramidDesc.width = Mathf.Max(pyramidDesc.width / 2, 1);
139-
pyramidDesc.height = Mathf.Max(pyramidDesc.height / 2, 1);
138+
tw = Mathf.Max(tw / 2, 1);
139+
th = Mathf.Max(th / 2, 1);
140140
}
141141

142142
// Upsample

PostProcessing/Runtime/Effects/DepthOfField.cs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,16 @@ float CalculateMaxCoCRadius(int screenHeight)
9595
return Mathf.Min(0.05f, radiusInPixels / screenHeight);
9696
}
9797

98-
RenderTexture CheckHistory(int eye, int id, RenderTextureDescriptor requestedDesc)
98+
RenderTexture CheckHistory(int eye, int id, PostProcessRenderContext context, RenderTextureFormat format)
9999
{
100100
var rt = m_CoCHistoryTextures[eye][id];
101101

102-
if (m_ResetHistory || rt == null || !rt.IsCreated() || rt.width != requestedDesc.width || rt.height != requestedDesc.height)
102+
if (m_ResetHistory || rt == null || !rt.IsCreated() || rt.width != context.width || rt.height != context.height)
103103
{
104104
RenderTexture.ReleaseTemporary(rt);
105105

106-
rt = RenderTexture.GetTemporary(requestedDesc);
106+
// TODO: The CoCCalculation CoCTex uses RenderTextureReadWrite.Linear, why isn't this?
107+
rt = context.GetScreenSpaceTemporaryRT(0, format);
107108
rt.name = "CoC History, Eye: " + eye + ", ID: " + id;
108109
rt.filterMode = FilterMode.Bilinear;
109110
rt.Create();
@@ -124,11 +125,6 @@ public override void Render(PostProcessRenderContext context)
124125
cocFormat = SelectFormat(RenderTextureFormat.RHalf, RenderTextureFormat.Default);
125126
#endif
126127

127-
var colorDesc = context.GetDescriptor(0, colorFormat);
128-
colorDesc.width /= 2;
129-
colorDesc.height /= 2;
130-
var cocDesc = context.GetDescriptor(0, cocFormat, RenderTextureReadWrite.Linear);
131-
132128
// Material setup
133129
var f = settings.focalLength.value / 1000f;
134130
var s1 = Mathf.Max(settings.focusDistance.value, f);
@@ -148,7 +144,7 @@ public override void Render(PostProcessRenderContext context)
148144
cmd.BeginSample("DepthOfField");
149145

150146
// CoC calculation pass
151-
cmd.GetTemporaryRT(ShaderIDs.CoCTex, cocDesc, FilterMode.Bilinear);
147+
context.GetScreenSpaceTemporaryRT(cmd, ShaderIDs.CoCTex, 0, cocFormat, RenderTextureReadWrite.Linear);
152148
cmd.BlitFullscreenTriangle(BuiltinRenderTextureType.None, ShaderIDs.CoCTex, sheet, (int)Pass.CoCCalculation);
153149

154150
// CoC temporal filter pass when TAA is enabled
@@ -161,10 +157,8 @@ public override void Render(PostProcessRenderContext context)
161157
sheet.properties.SetVector(ShaderIDs.TaaParams, new Vector3(jitter.x, jitter.y, blend));
162158

163159
int pp = m_HistoryPingPong[context.xrActiveEye];
164-
// Original CoCTex spec uses RenderTextureReadWrite.Linear, but these CoCHistoryTextures
165-
// were using Default, which is inconsistent.
166-
var historyRead = CheckHistory(context.xrActiveEye, ++pp % 2, cocDesc);
167-
var historyWrite = CheckHistory(context.xrActiveEye, ++pp % 2, cocDesc);
160+
var historyRead = CheckHistory(context.xrActiveEye, ++pp % 2, context, cocFormat);
161+
var historyWrite = CheckHistory(context.xrActiveEye, ++pp % 2, context, cocFormat);
168162
m_HistoryPingPong[context.xrActiveEye] = ++pp % 2;
169163

170164
cmd.BlitFullscreenTriangle(historyRead, historyWrite, sheet, (int)Pass.CoCTemporalFilter);
@@ -173,11 +167,11 @@ public override void Render(PostProcessRenderContext context)
173167
}
174168

175169
// Downsampling and prefiltering pass
176-
cmd.GetTemporaryRT(ShaderIDs.DepthOfFieldTex, colorDesc, FilterMode.Bilinear);
170+
context.GetScreenSpaceTemporaryRT(cmd, ShaderIDs.DepthOfFieldTex, 0, colorFormat, RenderTextureReadWrite.Default, FilterMode.Bilinear, context.width / 2, context.height / 2);
177171
cmd.BlitFullscreenTriangle(context.source, ShaderIDs.DepthOfFieldTex, sheet, (int)Pass.DownsampleAndPrefilter);
178172

179173
// Bokeh simulation pass
180-
cmd.GetTemporaryRT(ShaderIDs.DepthOfFieldTemp, colorDesc, FilterMode.Bilinear);
174+
context.GetScreenSpaceTemporaryRT(cmd, ShaderIDs.DepthOfFieldTemp, 0, colorFormat, RenderTextureReadWrite.Default, FilterMode.Bilinear, context.width / 2, context.height / 2);
181175
cmd.BlitFullscreenTriangle(ShaderIDs.DepthOfFieldTex, ShaderIDs.DepthOfFieldTemp, sheet, (int)Pass.BokehSmallKernel + (int)settings.kernelSize.value);
182176

183177
// Postfilter pass

PostProcessing/Runtime/Effects/ScalableAO.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ void Render(PostProcessRenderContext context, CommandBuffer cmd, int occlusionSo
104104

105105
// AO buffer
106106
var rtMask = ShaderIDs.OcclusionTexture1;
107-
context.GetScreenSpaceTemporaryRT(cmd, rtMask, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear, kFilter, ts);
107+
int scaledWidth = context.width / ts;
108+
int scaledHeight = context.height / ts;
109+
context.GetScreenSpaceTemporaryRT(cmd, rtMask, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear, kFilter, scaledWidth, scaledHeight);
108110

109111
// AO estimation
110112
cmd.BlitFullscreenTriangle(BuiltinRenderTextureType.None, rtMask, sheet, (int)Pass.OcclusionEstimationForward + occlusionSource);

PostProcessing/Runtime/PostProcessRenderContext.cs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public Camera camera
104104

105105
#if UNITY_2017_2_OR_NEWER
106106
private RenderTextureDescriptor m_sourceDescriptor;
107-
public RenderTextureDescriptor GetDescriptor(int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default)
107+
private RenderTextureDescriptor GetDescriptor(int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default)
108108
{
109109
var modifiedDesc = new RenderTextureDescriptor(m_sourceDescriptor.width, m_sourceDescriptor.height,
110110
m_sourceDescriptor.colorFormat, depthBufferBits);
@@ -130,48 +130,48 @@ public RenderTextureDescriptor GetDescriptor(int depthBufferBits = 0, RenderText
130130

131131
public void GetScreenSpaceTemporaryRT(CommandBuffer cmd, int nameID,
132132
int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default,
133-
FilterMode filter = FilterMode.Bilinear, int dimScaler = 1)
133+
FilterMode filter = FilterMode.Bilinear, int widthOverride = 0, int heightOverride = 0)
134134
{
135135
#if UNITY_2017_2_OR_NEWER
136136
var desc = GetDescriptor(depthBufferBits, colorFormat, readWrite);
137-
if (dimScaler > 1)
138-
{
139-
desc.width /= dimScaler;
140-
desc.height /= dimScaler;
141-
}
137+
if (widthOverride > 0)
138+
desc.width = widthOverride;
139+
if (heightOverride > 0)
140+
desc.height = heightOverride;
141+
142142
cmd.GetTemporaryRT(nameID, desc, filter);
143143
#else
144144
int actualWidth = width;
145-
int actualHeight = height
146-
if (dimScaler > 1)
147-
{
148-
actualWidth /= dimScaler;
149-
actualHeight /= dimScaler;
150-
}
151-
cmd.GetTemporaryRT(nameID, width, height, depthBufferBits, filter, colorFormat, readWrite);
145+
int actualHeight = height;
146+
if (widthOverride > 0)
147+
actualWidth = widthOverride;
148+
if (heightOverride > 0)
149+
actualHeight = heightOverride;
150+
151+
cmd.GetTemporaryRT(nameID, actualWidth, actualHeight, depthBufferBits, filter, colorFormat, readWrite);
152152
// TODO: How to handle MSAA for XR in older versions? Query cam?
153153
#endif
154154
}
155155

156156
public RenderTexture GetScreenSpaceTemporaryRT(int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default,
157-
RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default, int dimScaler = 1)
157+
RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default, int widthOverride = 0, int heightOverride = 0)
158158
{
159159
#if UNITY_2017_2_OR_NEWER
160160
var desc = GetDescriptor(depthBufferBits, colorFormat, readWrite);
161-
if (dimScaler > 1)
162-
{
163-
desc.width /= dimScaler;
164-
desc.height /= dimScaler;
165-
}
161+
if (widthOverride > 0)
162+
desc.width = widthOverride;
163+
if (heightOverride > 0)
164+
desc.height = heightOverride;
165+
166166
return RenderTexture.GetTemporary(desc);
167167
#else
168168
int actualWidth = width;
169169
int actualHeight = height
170-
if (dimScaler > 1)
171-
{
172-
actualWidth /= dimScaler;
173-
actualHeight /= dimScaler;
174-
}
170+
if (widthOverride > 0)
171+
actualWidth = widthOverride;
172+
if (heightOverride > 0)
173+
actualHeight = heightOverride;
174+
175175
return RenderTexture.GetTemporary(actualWidth, actualHeight, depthBufferBits, colorFormat, readWrite);
176176
#endif
177177
}

0 commit comments

Comments
 (0)