Skip to content

Commit 3b168b4

Browse files
Fix async compute throwing errors because of global constant buffers. (#130)
* Replaced commands incompatible with async compute in light list build process. * Update changelog Co-authored-by: sebastienlagarde <sebastien@unity3d.com>
1 parent c7d833d commit 3b168b4

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

com.unity.render-pipelines.high-definition/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
547547
- Fixed warning about missing bound decal buffer
548548
- Fixed shader warning on Xbox for ResolveStencilBuffer.compute.
549549
- Fixed PBR shader ZTest rendering in deferred.
550+
- Replaced commands incompatible with async compute in light list build process.
550551

551552
### Changed
552553
- Color buffer pyramid is not allocated anymore if neither refraction nor distortion are enabled

com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2921,9 +2921,6 @@ static void ClearLightLists( in BuildGPULightListParameters parameters,
29212921
in BuildGPULightListResources resources,
29222922
CommandBuffer cmd)
29232923
{
2924-
// ClearLightLists is the first pass, we push the global parameters for light list building here.
2925-
ConstantBuffer.PushGlobal(cmd, parameters.lightListCB, HDShaderIDs._ShaderVariablesLightList);
2926-
29272924
if (parameters.clearLightLists && !parameters.runLightList)
29282925
{
29292926
// Note we clear the whole content and not just the header since it is fast enough, happens only in one frame and is a bit more robust
@@ -2953,6 +2950,9 @@ static void GenerateLightsScreenSpaceAABBs(in BuildGPULightListParameters parame
29532950
// With XR single-pass, we have one set of light bounds per view to iterate over (bounds are in view space for each view)
29542951
cmd.SetComputeBufferParam(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, HDShaderIDs.g_data, tileAndCluster.convexBoundsBuffer);
29552952
cmd.SetComputeBufferParam(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, HDShaderIDs.g_vBoundsBuffer, tileAndCluster.AABBBoundsBuffer);
2953+
2954+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.screenSpaceAABBShader, HDShaderIDs._ShaderVariablesLightList);
2955+
29562956
cmd.DispatchCompute(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, (parameters.totalLightCount + 7) / 8, parameters.viewCount, 1);
29572957
}
29582958
}
@@ -2969,6 +2969,8 @@ static void BigTilePrepass(in BuildGPULightListParameters parameters, in BuildGP
29692969
cmd.SetComputeBufferParam(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, HDShaderIDs._LightVolumeData, tileAndCluster.lightVolumeDataBuffer);
29702970
cmd.SetComputeBufferParam(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, HDShaderIDs.g_data, tileAndCluster.convexBoundsBuffer);
29712971

2972+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.bigTilePrepassShader, HDShaderIDs._ShaderVariablesLightList);
2973+
29722974
cmd.DispatchCompute(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, parameters.numBigTilesX, parameters.numBigTilesY, parameters.viewCount);
29732975
}
29742976
}
@@ -2989,6 +2991,8 @@ static void BuildPerTileLightList(in BuildGPULightListParameters parameters, in
29892991
if (parameters.runBigTilePrepass)
29902992
cmd.SetComputeBufferParam(parameters.buildPerTileLightListShader, parameters.buildPerTileLightListKernel, HDShaderIDs.g_vBigTileLightList, tileAndCluster.bigTileLightList);
29912993

2994+
var localLightListCB = parameters.lightListCB;
2995+
29922996
if (parameters.enableFeatureVariants)
29932997
{
29942998
uint baseFeatureFlags = 0;
@@ -3011,14 +3015,14 @@ static void BuildPerTileLightList(in BuildGPULightListParameters parameters, in
30113015
baseFeatureFlags |= (uint)LightFeatureFlags.ProbeVolume;
30123016
}
30133017

3014-
var localLightListCB = parameters.lightListCB;
30153018
localLightListCB.g_BaseFeatureFlags = baseFeatureFlags;
3016-
ConstantBuffer.PushGlobal(cmd, localLightListCB, HDShaderIDs._ShaderVariablesLightList);
30173019

30183020
cmd.SetComputeBufferParam(parameters.buildPerTileLightListShader, parameters.buildPerTileLightListKernel, HDShaderIDs.g_TileFeatureFlags, tileAndCluster.tileFeatureFlags);
30193021
tileFlagsWritten = true;
30203022
}
30213023

3024+
ConstantBuffer.Push(cmd, localLightListCB, parameters.buildPerTileLightListShader, HDShaderIDs._ShaderVariablesLightList);
3025+
30223026
cmd.DispatchCompute(parameters.buildPerTileLightListShader, parameters.buildPerTileLightListKernel, parameters.numTilesFPTLX, parameters.numTilesFPTLY, parameters.viewCount);
30233027
}
30243028
}
@@ -3049,6 +3053,8 @@ static void VoxelLightListGeneration(in BuildGPULightListParameters parameters,
30493053
cmd.SetComputeBufferParam(parameters.buildPerVoxelLightListShader, parameters.buildPerVoxelLightListKernel, HDShaderIDs._LightVolumeData, tileAndCluster.lightVolumeDataBuffer);
30503054
cmd.SetComputeBufferParam(parameters.buildPerVoxelLightListShader, parameters.buildPerVoxelLightListKernel, HDShaderIDs.g_data, tileAndCluster.convexBoundsBuffer);
30513055

3056+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.buildPerVoxelLightListShader, HDShaderIDs._ShaderVariablesLightList);
3057+
30523058
cmd.DispatchCompute(parameters.buildPerVoxelLightListShader, parameters.buildPerVoxelLightListKernel, parameters.numTilesClusterX, parameters.numTilesClusterY, parameters.viewCount);
30533059
}
30543060
}
@@ -3100,7 +3106,6 @@ static void BuildDispatchIndirectArguments(in BuildGPULightListParameters parame
31003106

31013107
var localLightListCB = parameters.lightListCB;
31023108
localLightListCB.g_BaseFeatureFlags = baseFeatureFlags;
3103-
ConstantBuffer.PushGlobal(cmd, localLightListCB, HDShaderIDs._ShaderVariablesLightList);
31043109

31053110
cmd.SetComputeBufferParam(parameters.buildMaterialFlagsShader, buildMaterialFlagsKernel, HDShaderIDs.g_TileFeatureFlags, tileAndCluster.tileFeatureFlags);
31063111

@@ -3116,6 +3121,8 @@ static void BuildDispatchIndirectArguments(in BuildGPULightListParameters parame
31163121
cmd.SetComputeTextureParam(parameters.buildMaterialFlagsShader, buildMaterialFlagsKernel, HDShaderIDs._StencilTexture, resources.stencilTexture, 0, RenderTextureSubElement.Stencil);
31173122
}
31183123

3124+
ConstantBuffer.Push(cmd, localLightListCB, parameters.buildMaterialFlagsShader, HDShaderIDs._ShaderVariablesLightList);
3125+
31193126
cmd.DispatchCompute(parameters.buildMaterialFlagsShader, buildMaterialFlagsKernel, parameters.numTilesFPTLX, parameters.numTilesFPTLY, parameters.viewCount);
31203127
}
31213128

@@ -3142,7 +3149,6 @@ static void BuildDispatchIndirectArguments(in BuildGPULightListParameters parame
31423149
cmd.SetComputeIntParam(parameters.buildDispatchIndirectShader, HDShaderIDs.g_NumTilesX, parameters.numTilesFPTLX);
31433150
// Round on k_ThreadGroupOptimalSize so we have optimal thread for buildDispatchIndirectShader kernel
31443151
cmd.DispatchCompute(parameters.buildDispatchIndirectShader, s_BuildIndirectKernel, (parameters.numTilesFPTL + k_ThreadGroupOptimalSize - 1) / k_ThreadGroupOptimalSize, 1, parameters.viewCount);
3145-
31463152
}
31473153
}
31483154

@@ -3352,9 +3358,6 @@ static void ClearLightListsProbeVolumes(
33523358
in BuildGPULightListResources resources,
33533359
CommandBuffer cmd)
33543360
{
3355-
// ClearLightLists is the first pass, we push the global parameters for light list building here.
3356-
ConstantBuffer.PushGlobal(cmd, parameters.lightListCB, HDShaderIDs._ShaderVariablesLightList);
3357-
33583361
if (parameters.probeVolumesClearLightLists && !parameters.probeVolumesRunLightList)
33593362
{
33603363
// Note we clear the whole content and not just the header since it is fast enough, happens only in one frame and is a bit more robust
@@ -3417,6 +3420,8 @@ static void GenerateProbeVolumesScreenSpaceAABBs(in BuildGPULightListParameters
34173420
cmd.SetComputeBufferParam(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, HDShaderIDs.g_data, tileAndCluster.probeVolumesConvexBoundsBuffer);
34183421
cmd.SetComputeBufferParam(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, HDShaderIDs.g_vBoundsBuffer, tileAndCluster.probeVolumesAABBBoundsBuffer);
34193422

3423+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.screenSpaceAABBShader, HDShaderIDs._ShaderVariablesLightList);
3424+
34203425
cmd.DispatchCompute(parameters.screenSpaceAABBShader, parameters.screenSpaceAABBKernel, (probeVolumesCount + 7) / 8, parameters.viewCount, 1);
34213426
}
34223427
}
@@ -3437,6 +3442,8 @@ static void ProbeVolumesBigTilePrepass(in BuildGPULightListParameters parameters
34373442
cmd.SetComputeBufferParam(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, HDShaderIDs._LightVolumeData, tileAndCluster.probeVolumesLightVolumeDataBuffer);
34383443
cmd.SetComputeBufferParam(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, HDShaderIDs.g_data, tileAndCluster.probeVolumesConvexBoundsBuffer);
34393444

3445+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.bigTilePrepassShader, HDShaderIDs._ShaderVariablesLightList);
3446+
34403447
cmd.DispatchCompute(parameters.bigTilePrepassShader, parameters.bigTilePrepassKernel, parameters.numBigTilesX, parameters.numBigTilesY, parameters.viewCount);
34413448
}
34423449
}
@@ -3474,6 +3481,8 @@ static void ProbeVolumesVoxelLightListGeneration(in BuildGPULightListParameters
34743481
cmd.SetComputeBufferParam(parameters.buildPerVoxelLightListShader, parameters.probeVolumesBuildPerVoxelLightListKernel, HDShaderIDs._LightVolumeData, tileAndCluster.probeVolumesLightVolumeDataBuffer);
34753482
cmd.SetComputeBufferParam(parameters.buildPerVoxelLightListShader, parameters.probeVolumesBuildPerVoxelLightListKernel, HDShaderIDs.g_data, tileAndCluster.probeVolumesConvexBoundsBuffer);
34763483

3484+
ConstantBuffer.Push(cmd, parameters.lightListCB, parameters.buildPerVoxelLightListShader, HDShaderIDs._ShaderVariablesLightList);
3485+
34773486
cmd.DispatchCompute(parameters.buildPerVoxelLightListShader, parameters.probeVolumesBuildPerVoxelLightListKernel, parameters.numTilesClusterX, parameters.numTilesClusterY, parameters.viewCount);
34783487
}
34793488
}

0 commit comments

Comments
 (0)