1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- namespace UnityEngine.Rendering
- {
- // TODO make consistent with InstanceOcclusionCullerShaderVariables
- [GenerateHLSL(needAccessors = false, generateCBuffer = true)]
- internal unsafe struct OcclusionCullingCommonShaderVariables
- {
- [HLSLArray(OccluderContext.k_MaxOccluderMips, typeof(ShaderGenUInt4))]
- public fixed uint _OccluderMipBounds[OccluderContext.k_MaxOccluderMips * 4];
-
- [HLSLArray(OccluderContext.k_MaxSubviewsPerView, typeof(Matrix4x4))]
- public fixed float _ViewProjMatrix[OccluderContext.k_MaxSubviewsPerView * 16]; // from view-centered world space
-
- [HLSLArray(OccluderContext.k_MaxSubviewsPerView, typeof(Vector4))]
- public fixed float _ViewOriginWorldSpace[OccluderContext.k_MaxSubviewsPerView * 4];
-
- [HLSLArray(OccluderContext.k_MaxSubviewsPerView, typeof(Vector4))]
- public fixed float _FacingDirWorldSpace[OccluderContext.k_MaxSubviewsPerView * 4];
-
- [HLSLArray(OccluderContext.k_MaxSubviewsPerView, typeof(Vector4))]
- public fixed float _RadialDirWorldSpace[OccluderContext.k_MaxSubviewsPerView * 4];
-
- public Vector4 _DepthSizeInOccluderPixels;
- public Vector4 _OccluderDepthPyramidSize;
-
- public uint _OccluderMipLayoutSizeX;
- public uint _OccluderMipLayoutSizeY;
- public uint _OcclusionTestDebugFlags;
- public uint _OcclusionCullingCommonPad0;
-
- public int _OcclusionTestCount;
- public int _OccluderSubviewIndices; // packed 4 bits each
- public int _CullingSplitIndices; // packed 4 bits each
- public int _CullingSplitMask; // only used for early out
-
- internal OcclusionCullingCommonShaderVariables(
- in OccluderContext occluderCtx,
- in InstanceOcclusionTestSubviewSettings subviewSettings,
- bool occlusionOverlayCountVisible,
- bool overrideOcclusionTestToAlwaysPass)
- {
- for (int i = 0; i < occluderCtx.subviewCount; ++i)
- {
- if (occluderCtx.IsSubviewValid(i))
- {
- unsafe
- {
- for (int j = 0; j < 16; ++j)
- _ViewProjMatrix[16 * i + j] = occluderCtx.subviewData[i].viewProjMatrix[j];
-
- for (int j = 0; j < 4; ++j)
- {
- _ViewOriginWorldSpace[4 * i + j] = occluderCtx.subviewData[i].viewOriginWorldSpace[j];
- _FacingDirWorldSpace[4 * i + j] = occluderCtx.subviewData[i].facingDirWorldSpace[j];
- _RadialDirWorldSpace[4 * i + j] = occluderCtx.subviewData[i].radialDirWorldSpace[j];
- }
- }
- }
- }
- _OccluderMipLayoutSizeX = (uint)occluderCtx.occluderMipLayoutSize.x;
- _OccluderMipLayoutSizeY = (uint)occluderCtx.occluderMipLayoutSize.y;
- _OcclusionTestDebugFlags
- = (overrideOcclusionTestToAlwaysPass ? (uint)OcclusionTestDebugFlag.AlwaysPass : 0)
- | (occlusionOverlayCountVisible ? (uint)OcclusionTestDebugFlag.CountVisible : 0);
- _OcclusionCullingCommonPad0 = 0;
-
- _OcclusionTestCount = subviewSettings.testCount;
- _OccluderSubviewIndices = subviewSettings.occluderSubviewIndices;
- _CullingSplitIndices = subviewSettings.cullingSplitIndices;
- _CullingSplitMask = subviewSettings.cullingSplitMask;
-
- _DepthSizeInOccluderPixels = occluderCtx.depthBufferSizeInOccluderPixels;
-
- Vector2Int textureSize = occluderCtx.occluderDepthPyramidSize;
- _OccluderDepthPyramidSize = new Vector4(textureSize.x, textureSize.y, 1.0f / textureSize.x, 1.0f / textureSize.y);
-
- for (int i = 0; i < occluderCtx.occluderMipBounds.Length; ++i)
- {
- var mipBounds = occluderCtx.occluderMipBounds[i];
- unsafe
- {
- _OccluderMipBounds[4*i + 0] = (uint)mipBounds.offset.x;
- _OccluderMipBounds[4*i + 1] = (uint)mipBounds.offset.y;
- _OccluderMipBounds[4*i + 2] = (uint)mipBounds.size.x;
- _OccluderMipBounds[4*i + 3] = (uint)mipBounds.size.y;
- }
- }
- }
- }
- }
|